@next-bricks/ai-portal 0.59.2 → 0.59.3
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/bricks.json +22 -22
- package/dist/chunks/2232.02cd2bbc.js +2 -0
- package/dist/chunks/2232.02cd2bbc.js.map +1 -0
- package/dist/chunks/{2621.0d56009c.js → 2621.9485ac01.js} +2 -2
- package/dist/chunks/2621.9485ac01.js.map +1 -0
- package/dist/chunks/{5712.a63bddd8.js → 5712.c566ad78.js} +2 -2
- package/dist/chunks/{5712.a63bddd8.js.map → 5712.c566ad78.js.map} +1 -1
- package/dist/chunks/{9496.633e2efa.js → 9496.1d7ebb7f.js} +2 -2
- package/dist/chunks/9496.1d7ebb7f.js.map +1 -0
- package/dist/chunks/chat-box.991e397f.js +3 -0
- package/dist/chunks/chat-box.991e397f.js.LICENSE.txt +1 -0
- package/dist/chunks/chat-box.991e397f.js.map +1 -0
- package/dist/chunks/{main.9309c699.js → main.7a2dc87b.js} +2 -2
- package/dist/chunks/{main.9309c699.js.map → main.7a2dc87b.js.map} +1 -1
- package/dist/chunks/set-chat-command.367b9c88.js.map +1 -1
- package/dist/examples.json +15 -15
- package/dist/{index.457a283c.js → index.9f3c3997.js} +2 -2
- package/dist/{index.457a283c.js.map → index.9f3c3997.js.map} +1 -1
- package/dist/manifest.json +173 -179
- package/dist/types.json +232 -252
- package/dist-types/chat-box/index.d.ts +0 -1
- package/dist-types/data-providers/set-chat-command.d.ts +1 -1
- package/dist-types/shared/ReadableCommand/ReadableCommand.d.ts +1 -0
- package/dist-types/shared/interfaces.d.ts +1 -0
- package/package.json +2 -2
- package/dist/chunks/2232.b162e41f.js +0 -2
- package/dist/chunks/2232.b162e41f.js.map +0 -1
- package/dist/chunks/2621.0d56009c.js.map +0 -1
- package/dist/chunks/9496.633e2efa.js.map +0 -1
- package/dist/chunks/chat-box.5ba0e969.js +0 -2
- package/dist/chunks/chat-box.5ba0e969.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunks/5712.a63bddd8.js","mappings":"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","sources":["webpack:///./src/shared/useFulfilledActiveDetail.ts","webpack:///./src/shared/FilePreview/downloadFile.ts","webpack:///./src/shared/FilePreview/ImagesPreview.module.css?b629","webpack:///./src/shared/FilePreview/ImagesPreview.tsx","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css","webpack:///./src/shared/CreatedView/CreatedView.module.css","webpack:///./src/shared/MarkdownPre.module.css?da10","webpack:///./src/shared/MarkdownPre.tsx","webpack:///./src/shared/MarkdownPre.module.css","webpack:///./src/shared/fetchEmployee.ts","webpack:///./src/cruise-canvas/EnhancedMarkdown/EnhancedMarkdown.tsx","webpack:///./src/shared/bricks.ts","webpack:///./src/cruise-canvas/CanvasContext.ts","webpack:///./src/shared/useHandleEscape.ts","webpack:///./src/shared/FloatingButton.module.css","webpack:///./src/shared/RequestHumanAction/RequestHumanAction.module.css?91ef","webpack:///./src/shared/RequestHumanAction/RequestHumanAction.tsx","webpack:///./src/cruise-canvas/shared.module.css?c988","webpack:///./src/shared/FilePreview/FilePreview.module.css","webpack:///./src/shared/FilePreview/FilePreview.module.css?db00","webpack:///./src/shared/FilePreview/FilePreview.tsx","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css?1d0e","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.tsx","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css?6208","webpack:///./src/cruise-canvas/utils/getToolDataProgress.ts","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.tsx","webpack:///./src/shared/constants.ts","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css?7513","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.tsx","webpack:///./src/shared/FilePreview/FileList.module.css?3ed2","webpack:///./src/shared/FilePreview/FileList.tsx","webpack:///./src/shared/getOrderedNodes.ts","webpack:///./src/shared/getFlatChunks.ts","webpack:///./src/shared/getTaskTree.ts","webpack:///../../src/index.ts","webpack:///../../src/rehypeMermaid.ts","webpack:///../../src/utils.ts","webpack:///../../src/MarkdownComponent.tsx","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css","webpack:///./src/cruise-canvas/utils/file.ts","webpack:///./src/shared/ExpandedView/ExpandedView.module.css?985a","webpack:///./src/shared/ExpandedView/ExpandedView.tsx","webpack:///../../../src/i18n/constants.ts","webpack:///../../../../src/i18n/locales/en.ts","webpack:///../../../../src/i18n/locales/zh.ts","webpack:///../../../src/i18n/index.ts","webpack:///../../src/humanizeTime.ts","webpack:///./src/shared/parseTemplate.ts","webpack:///./src/cruise-canvas/reducers/tasks.ts","webpack:///./src/cruise-canvas/reducers/serviceFlows.ts","webpack:///./src/cruise-canvas/reducers/index.ts","webpack:///./src/cruise-canvas/reducers/conversation.ts","webpack:///./src/cruise-canvas/reducers/errors.ts","webpack:///./src/cruise-canvas/useConversationDetail.ts","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css","webpack:///./src/shared/FloatingButton.module.css?87dc","webpack:///./src/shared/ChatBox/i18n.ts","webpack:///./src/shared/ChatBox/ChatBox.tsx","webpack:///./src/shared/getAsyncConstructedView.ts","webpack:///./src/shared/TaskContext.ts","webpack:///./src/shared/ReadableCommand/ReadableCommand.module.css?7a0c","webpack:///./src/shared/ReadableCommand/ReadableCommand.tsx","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.module.css","webpack:///./src/cruise-canvas/toolbar.module.css","webpack:///./src/shared/ReadableCommand/ReadableCommand.module.css","webpack:///./src/shared/FilePreview/ImagesPreview.module.css","webpack:///./src/shared/FilePreview/i18n.ts","webpack:///./src/shared/ExpandedView/ExpandedView.module.css","webpack:///./src/shared/CreatedView/ViewToolbar.module.css","webpack:///./src/cruise-canvas/toolbar.module.css?a4b4","webpack:///./src/shared/CreatedView/CreatedView.module.css?fa62","webpack:///./src/shared/CreatedView/CreatedView.tsx","webpack:///./src/shared/useFlowAndActivityMap.ts","webpack:///./src/shared/CreatedView/ViewToolbar.module.css?4751","webpack:///./src/shared/CreatedView/i18n.ts","webpack:///./src/shared/CreatedView/ViewToolbar.tsx","webpack:///./src/shared/RequestHumanAction/RequestHumanAction.module.css","webpack:///./src/cruise-canvas/shared.module.css","webpack:///./src/shared/useViewFeedbackDone.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css?99d4","webpack:///./src/shared/NodeFeedback/i18n.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.tsx","webpack:///./src/shared/FilePreview/FileList.module.css","webpack:///./src/shared/FilePreview/getImageUrl.ts","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.module.css?d0bd","webpack:///./src/cruise-canvas/NodeReplay/i18n.ts","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type {\n ActiveDetail,\n ActivityWithFlow,\n FulfilledActiveDetail,\n Job,\n ServiceFlowRun,\n} from \"./interfaces\";\n\nexport function useFulfilledActiveDetail(\n activeDetail: ActiveDetail | null,\n jobMap: Map<string, Job> | undefined,\n flowMap: Map<string, ServiceFlowRun>,\n activityMap: Map<string, ActivityWithFlow>\n) {\n return useMemo<FulfilledActiveDetail | null>(() => {\n if (!activeDetail) {\n return null;\n }\n switch (activeDetail.type) {\n case \"job\": {\n const job = jobMap?.get(activeDetail.id);\n if (job) {\n return {\n type: \"job\",\n job,\n };\n }\n break;\n }\n case \"flow\": {\n const flow = flowMap?.get(activeDetail.id);\n if (flow) {\n return {\n type: \"flow\",\n flow,\n };\n }\n break;\n }\n case \"activity\": {\n const activityWithFlow = activityMap?.get(activeDetail.id);\n if (activityWithFlow) {\n return {\n type: \"activity\",\n flow: activityWithFlow.flow,\n activity: activityWithFlow.activity,\n };\n }\n break;\n }\n }\n return null;\n }, [activeDetail, activityMap, flowMap, jobMap]);\n}\n","import { saveAs } from \"file-saver\";\nimport type { FileInfo } from \"../interfaces\";\nimport { K, t } from \"./i18n\";\nimport { getImageUrl } from \"./getImageUrl\";\n\nexport function downloadFile(file: FileInfo): void {\n const { bytes, uri, mimeType, name } = file;\n const filename = name || t(K.UNTITLED);\n if (bytes) {\n saveAs(\n new Blob([Uint8Array.from(atob(bytes), (c) => c.charCodeAt(0))], {\n type: mimeType,\n }),\n filename\n );\n } else if (uri) {\n const link = document.createElement(\"a\");\n link.href = getImageUrl(uri);\n link.download = filename;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ImagesPreview.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ImagesPreview.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport type { ActiveImages, FileInfo } from \"../interfaces\";\nimport styles from \"./ImagesPreview.module.css\";\nimport { WrappedIcon, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE, ICON_DOWNLOAD } from \"../constants\";\nimport { downloadFile } from \"./downloadFile\";\nimport { getImageUrl } from \"./getImageUrl\";\nimport { TaskContext } from \"../TaskContext\";\nimport { K, t } from \"./i18n\";\nimport floatingStyles from \"../FloatingButton.module.css\";\n\nexport interface ImagesPreviewProps {\n images: ActiveImages;\n}\n\nexport function ImagesPreview({ images: { files, file } }: ImagesPreviewProps) {\n const [currentFile, setCurrentFile] = useState<FileInfo>(file);\n const { setActiveImages } = useContext(TaskContext);\n\n useEffect(() => {\n setCurrentFile(file);\n }, [file]);\n\n const go = useCallback(\n (diff: number) => {\n const currentIndex = files.indexOf(currentFile);\n let newIndex = currentIndex + diff;\n if (newIndex < 0) {\n newIndex = files.length - 1;\n } else if (newIndex >= files.length) {\n newIndex = 0;\n }\n setCurrentFile(files[newIndex]);\n },\n [currentFile, files]\n );\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"ArrowLeft\") {\n go(-1);\n } else if (e.key === \"ArrowRight\") {\n go(1);\n } else {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [go, setActiveImages]);\n\n return (\n <div className={styles.preview}>\n <div className={styles.header}>\n <WrappedIconButton\n icon={ICON_DOWNLOAD}\n onClick={() => {\n downloadFile(currentFile);\n }}\n >\n {t(K.DOWNLOAD)}\n </WrappedIconButton>\n </div>\n <div className={styles.body}>\n <div className={styles.aside}>\n <button\n className={floatingStyles[\"floating-button\"]}\n onClick={() => {\n go(-1);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"left\" />\n </button>\n </div>\n <div className={styles.content}>\n <img src={getImageUrl(currentFile.uri!)} alt={currentFile.name} />\n </div>\n <div className={styles.aside}>\n <button\n className={floatingStyles[\"floating-button\"]}\n onClick={() => {\n go(1);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"right\" />\n </button>\n </div>\n </div>\n <div className={styles.footer}>\n <ul className={styles.images}>\n {files.map((f, index) => {\n const isActive = f === currentFile;\n return (\n <li\n key={index}\n className={isActive ? styles.active : undefined}\n onClick={() => setCurrentFile(f)}\n >\n <img\n src={getImageUrl(f.uri!)}\n alt={f.name}\n fetchPriority=\"low\"\n />\n </li>\n );\n })}\n </ul>\n </div>\n <WrappedIconButton\n className={styles.close}\n icon={ICON_CLOSE}\n onClick={() => {\n setActiveImages(null);\n }}\n />\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-feedback--qSAvjvCa{width:var(--cruise-canvas-node-width-medium);background:rgba(255,255,255,0.2);border-radius:12px;border:1px solid rgba(255,255,255,0.3);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:20px 28px}.heading--zbbPDsFk{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.title--l9cmJRhB{font-weight:500}.form-item--wtgYuM1v{font-size:12px;line-height:17px;color:rgba(0,0,0,0.88)}.form-item--wtgYuM1v.horizontal--zqc5U1Jh{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:1em}.form-item--wtgYuM1v.vertical--i26lXOiT{margin-top:16px}.form-item--wtgYuM1v.vertical--i26lXOiT label{display:block;color:rgba(0,0,0,0.45);margin-bottom:8px}.form-item--wtgYuM1v textarea{width:100%;background:none;border-radius:8px;border:1px solid rgba(0,0,0,0.15);padding:8px;color:#262626}.form-item--wtgYuM1v textarea:focus{outline:none;border-color:rgba(0,0,0,0.25)}.options--Cak4FPTk{display:flex;align-items:center}.radio--P5Vo_D45{position:relative;cursor:pointer}.radio--P5Vo_D45 input{width:0px;height:0px;position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none}.radio--P5Vo_D45 span{display:flex;align-items:center;justify-content:center;width:64px;height:28px;border-radius:8px;background:none;border:1px solid rgba(0,0,0,0.15)}.radio--P5Vo_D45 input:checked + span{background:rgba(255,255,255,0.5);border:none}.radio--P5Vo_D45 input:not(:checked) + span:hover{background:rgba(255,255,255,0.3);border:none}.radio--P5Vo_D45 + .radio--P5Vo_D45{margin-left:8px}.submit--eCyA49Nq{display:flex;justify-content:end;margin-top:18px;gap:8px}.validate--krlXob4C .form-item--wtgYuM1v:has(input:invalid) .label--U8YsN4Mm{color:#f24c25}.submitted--XxktB9y5{background:#d0e7d6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:none;font-weight:500;color:#009929;padding:17px;text-align:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-feedback\": `node-feedback--qSAvjvCa`,\n\t\"heading\": `heading--zbbPDsFk`,\n\t\"title\": `title--l9cmJRhB`,\n\t\"form-item\": `form-item--wtgYuM1v`,\n\t\"horizontal\": `horizontal--zqc5U1Jh`,\n\t\"vertical\": `vertical--i26lXOiT`,\n\t\"options\": `options--Cak4FPTk`,\n\t\"radio\": `radio--P5Vo_D45`,\n\t\"submit\": `submit--eCyA49Nq`,\n\t\"validate\": `validate--krlXob4C`,\n\t\"label\": `label--U8YsN4Mm`,\n\t\"submitted\": `submitted--XxktB9y5`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.heading--Mi2u66PA{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.title--t7OpwWbH{font-size:12px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(38,38,38,0.65);--shine-text-highlight-color:#dcdcdc}ai-portal\\\\.cruise-canvas .title--t7OpwWbH{text-indent:4px}ai-portal\\\\.cruise-canvas .heading--Mi2u66PA{margin-bottom:10px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"heading\": `heading--Mi2u66PA`,\n\t\"title\": `title--t7OpwWbH`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MarkdownPre.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MarkdownPre.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport {\n CodeWrapper,\n type CodeWrapperProps,\n} from \"@next-bricks/presentational/code-wrapper\";\nimport styles from \"./MarkdownPre.module.css\";\n\nconst WrappedCodeWrapper = wrapBrick<CodeWrapper, CodeWrapperProps>(\n \"presentational.code-wrapper\"\n);\n\nexport type MarkdownComponentProps = JSX.IntrinsicElements[\"pre\"] & {\n node?: unknown;\n};\n\nexport function MarkdownPre({ node, ...props }: MarkdownComponentProps) {\n return (\n <WrappedCodeWrapper\n className={styles[\"code-wrapper\"]}\n preProps={props}\n showCopyButton={!!props.className?.includes(\"shiki\")}\n themeVariant=\"elevo\"\n />\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.code-wrapper--jieEbxla::part(pre){border:1px solid #ccd1de}.code-wrapper--jieEbxla::part(mermaid){border:none;background:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"code-wrapper\": `code-wrapper--jieEbxla`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import {\n ElevoApi_listElevoAiEmployees,\n type ElevoApi_ListElevoAiEmployeesResponseItem,\n} from \"@next-api-sdk/llm-sdk\";\n\nconst cache = new Map<\n string,\n Promise<ElevoApi_ListElevoAiEmployeesResponseItem | undefined>\n>();\n\nexport function fetchEmployee(\n aiEmployeeId: string\n): Promise<ElevoApi_ListElevoAiEmployeesResponseItem | undefined> {\n const cached = cache.get(aiEmployeeId);\n if (cached) {\n return cached;\n }\n const promise = doFetchEmployee(aiEmployeeId);\n cache.set(aiEmployeeId, promise);\n return promise;\n}\n\nasync function doFetchEmployee(aiEmployeeId: string) {\n const response = await ElevoApi_listElevoAiEmployees({\n employeeId: aiEmployeeId,\n } as any);\n const employee = response.list?.[0];\n return employee?.employeeId === aiEmployeeId ? employee : undefined;\n}\n\nexport function clearCache() {\n cache.clear();\n}\n","import React, { useCallback, useContext, useRef } from \"react\";\nimport {\n MarkdownComponent,\n type MarkdownComponentProps,\n} from \"@next-shared/markdown\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { MarkdownPre } from \"../../shared/MarkdownPre\";\n\nconst components: MarkdownComponentProps[\"components\"] = {\n pre: MarkdownPre,\n};\n\nconst shikiOptions: MarkdownComponentProps[\"shiki\"] = {\n theme: \"light-plus\",\n};\n\nexport interface EnhancedMarkdownProps extends MarkdownComponentProps {\n className?: string;\n}\n\nexport function EnhancedMarkdown({\n className,\n ...props\n}: EnhancedMarkdownProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { setHoverOnScrollableContent } = useContext(CanvasContext);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n let found = false;\n for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (\n (el instanceof HTMLTableElement || el instanceof HTMLPreElement) &&\n el.scrollWidth > el.clientWidth\n ) {\n found = true;\n break;\n }\n }\n setHoverOnScrollableContent(found);\n },\n [setHoverOnScrollableContent]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverOnScrollableContent(false);\n }, [setHoverOnScrollableContent]);\n\n return (\n <div\n className={className}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <MarkdownComponent\n {...props}\n components={components}\n shiki={shikiOptions}\n />\n </div>\n );\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Button, ButtonProps } from \"@next-bricks/basic/button\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport type {\n Drawer,\n DrawerProps,\n DrawerEvents,\n DrawerMapEvents,\n} from \"@next-bricks/containers/drawer\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\nimport type { copyToClipboard as _copyToClipboard } from \"@next-bricks/basic/data-providers/copy-to-clipboard\";\nimport {\n CodeBlock,\n CodeBlockProps,\n} from \"@next-bricks/presentational/code-block\";\nimport type { IconButton, IconButtonProps } from \"../icon-button\";\nimport type {\n ChatInput,\n ChatInputEvents,\n ChatInputMapEvents,\n ChatInputProps,\n} from \"../chat-input\";\nimport type { ShowCase, ShowCaseProps } from \"../show-case\";\nimport type {\n RunningFlow,\n RunningFlowEvents,\n RunningFlowMapEvents,\n RunningFlowProps,\n} from \"../running-flow\";\nimport type { BlankState, BlankStateProps } from \"../blank-state\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport const WrappedButton = wrapBrick<Button, ButtonProps>(\"eo-button\");\n\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nexport const WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\nexport const WrappedDrawer = wrapBrick<\n Drawer,\n DrawerProps & {\n keyboard?: boolean;\n themeVariant?: \"default\" | \"elevo\";\n },\n DrawerEvents,\n DrawerMapEvents\n>(\"eo-drawer\", {\n onClose: \"close\",\n onOpen: \"open\",\n});\n\nexport const WrappedIconButton = wrapBrick<IconButton, IconButtonProps>(\n \"ai-portal.icon-button\"\n);\n\nexport const WrappedChatInput = wrapBrick<\n ChatInput,\n ChatInputProps,\n ChatInputEvents,\n ChatInputMapEvents\n>(\"ai-portal.chat-input\", {\n onChatSubmit: \"chat.submit\",\n onTerminate: \"terminate\",\n});\n\nexport const WrappedShowCase = wrapBrick<ShowCase, ShowCaseProps>(\n \"ai-portal.show-case\"\n);\n\nexport const WrappedCodeBlock = wrapBrick<CodeBlock, CodeBlockProps>(\n \"eo-code-block\"\n);\n\nexport const WrappedBlankState = wrapBrick<BlankState, BlankStateProps>(\n \"ai-portal.blank-state\"\n);\n\nexport const WrappedRunningFlow = wrapBrick<\n RunningFlow,\n RunningFlowProps,\n RunningFlowEvents,\n RunningFlowMapEvents\n>(\"ai-portal.running-flow\", {\n onActiveChange: \"active.change\",\n});\n\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n\nexport const copyToClipboard = unwrapProvider<typeof _copyToClipboard>(\n \"basic.copy-to-clipboard\"\n);\n","import { createContext, type Dispatch } from \"react\";\nimport type { SizeTuple } from \"./interfaces\";\n\nexport interface CanvasContextValue {\n onNodeResize: (id: string, size: SizeTuple | null) => void;\n setActiveNodeId: Dispatch<React.SetStateAction<string | null>>;\n hoverOnScrollableContent: boolean;\n setHoverOnScrollableContent: Dispatch<React.SetStateAction<boolean>>;\n supports?: Record<string, boolean>;\n}\n\nexport const CanvasContext = createContext<CanvasContextValue>({\n onNodeResize: () => {},\n setActiveNodeId: () => {},\n hoverOnScrollableContent: false,\n setHoverOnScrollableContent: () => {},\n});\n","import { useEffect, useRef } from \"react\";\nimport type { TaskContextValue } from \"./TaskContext\";\n\nexport function useHandleEscape({\n activeDetail,\n activeExpandedViewJobId,\n activeFile,\n activeImages,\n subActiveDetail,\n setActiveFile,\n setActiveImages,\n setActiveExpandedViewJobId,\n setActiveDetail,\n setSubActiveDetail,\n}: TaskContextValue) {\n const compositionRef = useRef(false);\n\n useEffect(() => {\n const onCompositionStart = () => {\n compositionRef.current = true;\n };\n const onCompositionEnd = () => {\n compositionRef.current = false;\n };\n document.addEventListener(\"compositionstart\", onCompositionStart);\n document.addEventListener(\"compositionend\", onCompositionEnd);\n return () => {\n document.removeEventListener(\"compositionstart\", onCompositionStart);\n document.removeEventListener(\"compositionend\", onCompositionEnd);\n };\n }, []);\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (compositionRef.current) {\n // Ignore key events during composition\n return;\n }\n if (e.key === \"Escape\") {\n if (activeFile) {\n setActiveFile(null);\n } else if (activeImages) {\n setActiveImages(null);\n } else if (activeExpandedViewJobId) {\n setActiveExpandedViewJobId(null);\n } else if (subActiveDetail) {\n setSubActiveDetail(null);\n } else if (activeDetail) {\n setActiveDetail(null);\n }\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [\n activeDetail,\n activeExpandedViewJobId,\n activeFile,\n activeImages,\n subActiveDetail,\n setActiveFile,\n setActiveImages,\n setActiveExpandedViewJobId,\n setActiveDetail,\n setSubActiveDetail,\n ]);\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.floating-button--s8FIucxe{display:flex;align-items:center;justify-content:center;padding:0;background:#fff;box-shadow:0px 4px 8px 0px rgba(0,0,0,0.06);border:1px solid rgba(0,0,0,0.02);border-radius:999px;cursor:pointer}.floating-button--s8FIucxe:hover{box-shadow:0px 6px 12px 0px rgba(0,0,0,0.1);border-color:rgba(0,0,0,0.08)}.floating-button--s8FIucxe:focus{outline:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"floating-button\": `floating-button--s8FIucxe`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./RequestHumanAction.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./RequestHumanAction.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext, useState } from \"react\";\nimport styles from \"./RequestHumanAction.module.css\";\n// import { K, t } from \"../i18n.js\";\nimport { WrappedButton } from \"../bricks\";\nimport { TaskContext } from \"../TaskContext\";\nimport type { HumanAction } from \"../interfaces\";\nimport classNames from \"classnames\";\n\nexport function RequestHumanAction({\n action,\n ui,\n}: {\n action: HumanAction;\n ui?: \"canvas\" | \"chat\";\n}): JSX.Element | null {\n const { humanInput, replay } = useContext(TaskContext);\n const [disabled, setDisabled] = useState(false);\n\n if (action.type === \"select\") {\n return null;\n }\n\n return (\n <div\n className={classNames(styles[\"human-action\"], {\n [styles.canvas]: ui !== \"chat\",\n })}\n >\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n shape={ui === \"chat\" ? undefined : \"round\"}\n disabled={disabled}\n onClick={() => {\n if (replay) {\n return;\n }\n humanInput(null, action.confirmText || \"确认\");\n setDisabled(true);\n }}\n >\n {action.confirmText || \"确认\"}\n </WrappedButton>\n </div>\n );\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./shared.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./shared.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.preview--F7764WOO{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:#fff;display:flex;flex-direction:column;align-items:center}.header--EVmpMZbh{width:100%;height:56px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 16px 0 28px;border:1px solid rgba(0,0,0,0.15)}.title--tp251JEp{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar--aQsOJ8rv{display:flex;align-items:center;gap:8px}.body--KvpRjkhv{flex:1;width:100%;min-height:0;overflow-y:auto}.markdown--CmPqEPJK{margin:0 auto;padding:36px;max-width:800px}.loading--MekXOCp8{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:var(--text-color-secondary)}.error--SkRwiReO{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding-bottom:20%;display:flex;flex-direction:column;align-items:center;color:#8c8c8c}.error--SkRwiReO eo-button{margin:0 14px}.embed--vYmQk5XW{display:block}.image--hQpy_1OM{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image--hQpy_1OM img{max-width:100%;max-height:100%;object-fit:contain}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"preview\": `preview--F7764WOO`,\n\t\"header\": `header--EVmpMZbh`,\n\t\"title\": `title--tp251JEp`,\n\t\"toolbar\": `toolbar--aQsOJ8rv`,\n\t\"body\": `body--KvpRjkhv`,\n\t\"markdown\": `markdown--CmPqEPJK`,\n\t\"loading\": `loading--MekXOCp8`,\n\t\"error\": `error--SkRwiReO`,\n\t\"embed\": `embed--vYmQk5XW`,\n\t\"image\": `image--hQpy_1OM`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FilePreview.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FilePreview.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport type { FileInfo } from \"../../shared/interfaces\";\nimport {\n WrappedIcon,\n WrappedButton,\n WrappedIconButton,\n} from \"../../shared/bricks\";\nimport styles from \"./FilePreview.module.css\";\nimport shareStyles from \"../../cruise-canvas/shared.module.css\";\nimport { EnhancedMarkdown } from \"../../cruise-canvas/EnhancedMarkdown/EnhancedMarkdown\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport {\n ICON_CLOSE,\n ICON_DOWNLOAD,\n ICON_LOADING,\n} from \"../../shared/constants\";\nimport { getMimeTypeByFilename } from \"../../cruise-canvas/utils/file\";\nimport imageUnpreviewable from \"./unpreviewable.png\";\nimport { downloadFile } from \"./downloadFile\";\nimport { getImageUrl } from \"./getImageUrl\";\nimport toolbarStyles from \"../../cruise-canvas/toolbar.module.css\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\n\nexport interface FilePreviewProps {\n file: FileInfo;\n}\n\nexport function FilePreview({ file }: FilePreviewProps) {\n const { setActiveFile } = useContext(TaskContext);\n const { bytes, uri, mimeType, name } = file;\n const type = mimeType || getMimeTypeByFilename(name);\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\n \"loading\"\n );\n\n // For PDF, content is the object URL or data URL\n // For markdown, content is the content text\n const [content, setContent] = useState<string | undefined>();\n\n const isMarkdown = type === \"text/markdown\" || type === \"text/x-markdown\";\n const embeddable = type === \"application/pdf\";\n const isImage = type.startsWith(\"image/\");\n\n useEffect(() => {\n // When using `<embed>` to display PDF from a URL, which responses with\n // `Content-Disposition: attachment`, the PDF will be downloaded instead of\n // being displayed by the browser. So we need to fetch the file and create an object URL.\n setStatus(\"loading\");\n\n if (!isMarkdown && !embeddable && !isImage) {\n setStatus(\"error\");\n return;\n }\n\n if (bytes) {\n if (isMarkdown) {\n setContent(atob(bytes));\n } else {\n setContent(`data:application/pdf;base64,${bytes}`);\n }\n setStatus(\"loaded\");\n return;\n }\n\n if (uri) {\n let ignore = false;\n let revokeUrl: string | undefined;\n (async () => {\n try {\n const response = await fetch(getImageUrl(uri));\n if (!response.ok) {\n throw new Error(`Failed to fetch file: ${response.statusText}`);\n }\n let text: string;\n if (isMarkdown) {\n text = await response.text();\n } else {\n const blob = await response.blob();\n revokeUrl = text = URL.createObjectURL(blob);\n }\n if (ignore) {\n return;\n }\n setContent(text);\n setStatus(\"loaded\");\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error fetching file:\", error);\n setStatus(\"error\");\n }\n })();\n return () => {\n ignore = true;\n if (revokeUrl) {\n URL.revokeObjectURL(revokeUrl);\n }\n };\n }\n }, [bytes, isImage, isMarkdown, embeddable, uri]);\n\n const download = useCallback(() => {\n downloadFile(file);\n }, [file]);\n\n return (\n <div className={styles.preview}>\n <div className={styles.header}>\n <div className={styles.title}>{file.name || t(K.UNTITLED)}</div>\n <div className={styles.toolbar}>\n <WrappedIconButton\n icon={ICON_DOWNLOAD}\n onClick={() => {\n download();\n }}\n />\n <div className={toolbarStyles.divider} />\n <WrappedIconButton\n icon={ICON_CLOSE}\n onClick={() => {\n setActiveFile(null);\n }}\n />\n </div>\n </div>\n <div className={styles.body}>\n {status === \"loading\" ? (\n <div className={styles.loading}>\n <WrappedIcon {...ICON_LOADING} />\n </div>\n ) : status === \"error\" ? (\n <div className={styles.error}>\n <img\n src={imageUnpreviewable}\n alt=\"Unpreviewable\"\n width={591}\n height={249}\n />\n <p>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX)}\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n onClick={download}\n >\n {t(K.DOWNLOAD)}\n </WrappedButton>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX)}\n </p>\n </div>\n ) : isImage ? (\n <div className={styles.image}>\n <img src={content} alt={name} />\n </div>\n ) : embeddable ? (\n <embed\n className={styles.embed}\n src={content}\n type={type}\n title={name}\n width=\"100%\"\n height=\"100%\"\n />\n ) : (\n <div className={classNames(styles.markdown, shareStyles.markdown)}>\n <EnhancedMarkdown content={content} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolProgressLine.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolProgressLine.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./ToolProgressLine.module.css\";\nimport { DataPart } from \"../../shared/interfaces\";\n\nexport interface ToolProgressLineProps {\n progress: DataPart;\n /**\n * 暂定失败肯定是最后一个\n */\n failed?: boolean;\n}\n\nexport function ToolProgressLine({\n progress,\n failed,\n}: ToolProgressLineProps): JSX.Element {\n const data = progress.data;\n\n return (\n <div\n className={classNames(styles[\"progress-line\"], {\n [styles[\"failed\"]]: failed,\n })}\n >\n <div className={classNames(styles.step)} key={data.progress}>\n <div className={styles.axis}>\n <div className={styles.line} />\n <div className={styles.dot} />\n </div>\n <div className={styles.progress}>\n <span className={styles.count}>{data.progress}</span>\n <span>/</span>\n <span className={styles.total}>{data.total}</span>\n </div>\n <div className={styles.description}>{data.message}</div>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallStatus.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallStatus.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import type { DataPart, Message } from \"../../shared/interfaces\";\n\nexport const getToolDataProgress = (\n toolCallMessages: Message[] | undefined\n): DataPart | undefined => {\n let progressPart: DataPart | undefined;\n toolCallMessages?.findLast((message) => {\n progressPart = message.parts?.findLast((part) => {\n return part.type === \"data\" && part.data?.type === \"progress\";\n }) as DataPart | undefined;\n return !!progressPart;\n });\n return progressPart;\n};\n","import React, { useCallback, useContext, useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport { isEqual } from \"lodash\";\nimport { humanizeTime, HumanizeTimeFormat } from \"@next-shared/datetime\";\nimport styles from \"./ToolCallStatus.module.css\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { getToolDataProgress } from \"../utils/getToolDataProgress\";\nimport type { ActiveDetail, Job, JobState } from \"../../shared/interfaces\";\n\nexport interface NodeJobToolCallProps {\n job: Job;\n variant?: \"default\" | \"read-only\";\n}\n\nexport function ToolCallStatus({\n job,\n variant,\n}: NodeJobToolCallProps): JSX.Element {\n const { setActiveDetail, separateInstructions } = useContext(TaskContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title || toolCall.name;\n const jobTitle = separateInstructions\n ? toolTitle\n : job.instruction || toolTitle;\n const [progress, hasToolCallResponse] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n return [\n getToolDataProgress(toolCallMessages),\n toolCallMessages?.some((msg) =>\n msg.parts.some((part) => part.type === \"text\")\n ),\n ];\n }, [job.messages]);\n\n const readOnly = useMemo(() => {\n return variant === \"read-only\";\n }, [variant]);\n\n const handleClick = useCallback(() => {\n if (variant === \"read-only\") {\n return;\n }\n const newActiveDetail: ActiveDetail = {\n type: \"job\",\n id: job.id,\n };\n setActiveDetail((prev) =>\n isEqual(prev, newActiveDetail) ? prev : newActiveDetail\n );\n }, [job.id, variant, setActiveDetail]);\n\n const toolState =\n [\"working\", \"input-required\"].includes(job.state) && hasToolCallResponse\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <div\n className={classNames(styles[\"tool-call\"], {\n [styles.failed]: failed,\n [styles[\"read-only\"]]: readOnly,\n })}\n onClick={handleClick}\n >\n <div className={classNames(styles.status)}>\n {job.isError || toolState === \"failed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"xmark\"\n />\n ) : toolState === \"completed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"check\"\n />\n ) : toolState === \"working\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n ) : toolState === \"input-required\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-user\"\n />\n ) : toolState === \"canceled\" ||\n toolState === (\"terminated\" as JobState) ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-stop\"\n />\n ) : (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"clock\"\n />\n )}\n <span className={styles.name}>\n {variant === \"read-only\" ? toolTitle : jobTitle}\n </span>\n {job.startTime ? (\n <span className={styles.timing}>\n {`${humanizeTime(job.startTime * 1000, HumanizeTimeFormat.accurate)}${\n job.endTime\n ? ` (${moment.duration(job.endTime * 1000 - job.startTime * 1000).humanize({ ss: -1 })})`\n : \"\"\n }`}\n </span>\n ) : null}\n </div>\n {!!progress && !readOnly && (\n <ToolProgressLine progress={progress} failed={failed} />\n )}\n </div>\n );\n}\n","import type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport type { ConversationState, JobState, TaskState } from \"./interfaces.js\";\n\nexport const DONE_STATES = [\n \"completed\",\n \"failed\",\n \"canceled\",\n \"terminated\",\n] as (ConversationState | TaskState | JobState | undefined)[];\n\nexport const GENERAL_DONE_STATES = [...DONE_STATES, \"paused\"] as (\n | ConversationState\n | TaskState\n | JobState\n | undefined\n)[];\n\nexport const NON_WORKING_STATES = [...GENERAL_DONE_STATES, \"input-required\"];\n\nexport const ICON_CLOSE: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"x\",\n};\n\nexport const ICON_LOADING: GeneralIconProps = {\n lib: \"antd\",\n icon: \"loading-3-quarters\",\n spinning: true,\n};\n\nexport const ICON_CANVAS: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"network\",\n} as GeneralIconProps;\n\nexport const ICON_CHAT: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"messages-square\",\n} as GeneralIconProps;\n\nexport const ICON_FEEDBACK: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"message-square\",\n};\n\nexport const ICON_EXTERNAL_LINK: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"external-link\",\n};\n\nexport const ICON_UP: GeneralIconProps = {\n lib: \"fa\",\n icon: \"angle-up\",\n};\n\nexport const ICON_DOWNLOAD: GeneralIconProps = {\n lib: \"antd\",\n icon: \"download\",\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.tool-call--aTh276av{--failed-color:#f24c25;--border-color:#e2e2ec;--status-border-color:rgba(226,226,236,0.8);font-size:13px;color:#595959;border-radius:10px;border:1px solid var(--border-color);background:#e6e9f3}.tool-call--aTh276av:not(.read-only--xWUswNds):hover{background:#e4e9fb;border:1px solid #b8c1ff}.tool-call--aTh276av:not(:last-child){margin-bottom:10px}.tool-call--aTh276av:not(.read-only--xWUswNds){cursor:pointer}.tool-call--aTh276av .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid var(--status-border-color)}.read-only--xWUswNds{font-size:14px;padding:4px}.failed--sz70SlSa{background:#fef5f3}.failed--sz70SlSa:not(.read-only--xWUswNds):hover{background:#fee7e1;border:1px solid #ffc3b5}.failed--sz70SlSa .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid rgba(253,225,218,0.8)}.status--V5ZXGYOG{height:24px;display:flex;align-items:center;padding:0 12px;color:#262626}.timing--GjuZkMuV{display:none;color:#8c8c8c}.read-only--xWUswNds .timing--GjuZkMuV,\n[class^=\"node-job--\"]:hover .timing--GjuZkMuV,\n.status--V5ZXGYOG:hover .timing--GjuZkMuV{display:block}.icon--LTp5Jjna{margin-right:8px;color:#8c8c8c}.failed--sz70SlSa .icon--LTp5Jjna{color:var(--failed-color)}.name--FwiqyIlQ{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tool-call\": `tool-call--aTh276av`,\n\t\"read-only\": `read-only--xWUswNds`,\n\t\"status\": `status--V5ZXGYOG`,\n\t\"failed\": `failed--sz70SlSa`,\n\t\"timing\": `timing--GjuZkMuV`,\n\t\"icon\": `icon--LTp5Jjna`,\n\t\"name\": `name--FwiqyIlQ`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CmdbInstanceDetail.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CmdbInstanceDetail.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { orderBy, uniqueId, upperFirst } from \"lodash\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport {\n // UseBrickConf,\n type BrickConf,\n type BrickEventHandler,\n type ContextConf,\n type UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport type { DescriptionItem } from \"@next-bricks/presentational/descriptions\";\nimport type { CmdbInstanceDetailData } from \"../interfaces\";\n// import { getPreGeneratedAttrViews } from \"../utils/converters/getPreGeneratedAttrViews\";\n// import { convertToStoryboard } from \"../utils/converters/raw-data-generate/convert\";\nimport type { JSONSchema, JSONSchemaObject } from \"../json-schema\";\nimport styles from \"./CmdbInstanceDetail.module.css\";\nimport { createPortal } from \"../utils/createPortal\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { ICON_LOADING } from \"../../shared/constants\";\n\n/**\n * 如果属性数量超过阈值,则使用两列布局\n */\nconst LIST_SPLIT_THRESHOLD = 6;\n\n/**\n * 如果条目数量超过阈值,则使用表格显示\n */\nconst SHOW_AS_TABLE_THRESHOLD = 2;\n\nconst BUILTIN_FN_STRINGIFY = \"__builtin_fn_stringify\";\n\nexport function CmdbInstanceDetail({\n objectId,\n detail,\n outputSchema,\n}: CmdbInstanceDetailData) {\n const rootId = useMemo(() => uniqueId(), []);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n setLoading(true);\n try {\n const { bricks, context } = await convertCmdbInstanceDetail(\n detail,\n objectId,\n outputSchema,\n rootId\n );\n if (ignore) {\n return;\n }\n await rootRef.current?.render(bricks, { context });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [detail, objectId, outputSchema, rootId]);\n\n return (\n <div className={styles.container}>\n {loading && <WrappedIcon className={styles.loading} {...ICON_LOADING} />}\n <div data-root-id={rootId} ref={ref} />\n </div>\n );\n}\n\nfunction isComplexType(type: JSONSchema[\"type\"] | undefined): boolean {\n return !type || type === \"object\" || type === \"array\";\n}\n\nfunction isEmptyValue(detail: Record<string, any>, key: string) {\n return (\n !hasOwnProperty(detail, key) ||\n detail[key] == null ||\n detail[key] === \"\" ||\n (Array.isArray(detail[key]) && detail[key].length === 0)\n );\n}\n\nasync function convertCmdbInstanceDetail(\n detail: Record<string, any>,\n objectId: string,\n outputSchema: JSONSchema | string | undefined,\n rootId: string\n): Promise<{ bricks: BrickConf[]; context: ContextConf[] }> {\n // const attrViews = await getPreGeneratedAttrViews(objectId, 1);\n\n let schema: JSONSchema | undefined;\n if (typeof outputSchema === \"string\") {\n try {\n schema = JSON.parse(outputSchema) as JSONSchema;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse outputSchema as JSON\", e);\n }\n } else {\n schema = outputSchema;\n }\n\n let list: DescriptionItem[];\n const modals: BrickConf[] = [];\n const context: ContextConf[] = [\n {\n name: BUILTIN_FN_STRINGIFY,\n value: builtinFnStringify,\n },\n ];\n\n function convertArrayOfObjects(\n valueAccessor: string,\n schema: JSONSchemaObject,\n label: string,\n idPrefix: string,\n needContext?: boolean\n ): UseSingleBrickConf {\n const props = getOrderedProps(schema);\n const key = props.length > 0 ? props[0][0] : null;\n const modalId = normalizeIdentifier(`modal__${idPrefix}`);\n const contextId = normalizeIdentifier(`context__${idPrefix}`);\n if (needContext) {\n context.push({\n name: contextId,\n });\n }\n\n const modal: BrickConf = {\n brick: \"eo-modal\",\n portal: true,\n properties: {\n dataset: {\n modalId,\n },\n width: \"800px\",\n themeVariant: \"elevo\",\n modalTitle: label,\n hideCancelButton: true,\n maskClosable: true,\n keyboard: true,\n },\n };\n\n modals.push(modal);\n\n const columns: {\n key: string;\n dataIndex: string;\n title: string;\n useChildren?: string;\n }[] = [];\n const tableChildren: UseSingleBrickConf[] = [];\n\n for (const [k, v] of props) {\n let useChildren: string | undefined;\n if (v.type === \"array\" && v.items.type === \"object\") {\n useChildren = `[${k}]`;\n tableChildren.push({\n ...convertArrayOfObjects(\n \"DATA.cellData\",\n v.items,\n v.description || upperFirst(k),\n `${idPrefix}__${k}`,\n true\n ),\n slot: useChildren,\n });\n } else if (v.type === \"object\") {\n useChildren = `[${k}]`;\n tableChildren.push({\n ...convertObject(\n \"DATA.cellData\",\n v,\n v.description || upperFirst(k),\n `${idPrefix}__${k}`,\n true\n ),\n slot: useChildren,\n });\n }\n\n columns.push({\n key: k,\n dataIndex: k,\n title: v.description || upperFirst(k),\n useChildren,\n });\n }\n\n modal.children = [\n {\n brick: \"eo-next-table\",\n properties: {\n dataSource: needContext\n ? `<%= { list: CTX.${contextId} } %>`\n : `<% { list: (${valueAccessor}) } %>`,\n columns,\n themeVariant: \"elevo\",\n pagination: false,\n bordered: true,\n },\n children: tableChildren,\n },\n ];\n\n const clickHandler: BrickEventHandler[] = [\n ...((needContext\n ? [\n {\n action: \"context.replace\",\n args: [\n {\n name: contextId,\n value: `<% ${valueAccessor} %>`,\n },\n ],\n },\n ]\n : []) as BrickEventHandler[]),\n {\n target: `[data-root-id=\"${rootId}\"] [data-modal-id=\"${modalId}\"]`,\n method: \"open\",\n },\n ];\n\n return {\n brick: \"span\",\n if: `<% !!(${valueAccessor}) %>`,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<% (${valueAccessor}).slice(0, ${SHOW_AS_TABLE_THRESHOLD}) %>`,\n children: [\n {\n brick: \"eo-tag\",\n properties: {\n textContent: `<% CTX.${BUILTIN_FN_STRINGIFY}(ITEM, ${JSON.stringify(key)}, ${JSON.stringify(props[0]?.[1].type)}) %>`,\n outline: true,\n style: {\n cursor: \"pointer\",\n },\n },\n events: {\n click: clickHandler,\n },\n },\n ],\n },\n {\n brick: \"eo-link\",\n if: `<% (${valueAccessor}).length > ${SHOW_AS_TABLE_THRESHOLD} %>`,\n properties: {\n textContent: `<% \\`+\\${(${valueAccessor}).length - ${SHOW_AS_TABLE_THRESHOLD}}\\` %>`,\n },\n events: {\n click: clickHandler,\n },\n },\n ],\n };\n }\n\n function convertObject(\n valueAccessor: string,\n schema: JSONSchemaObject,\n label: string,\n idPrefix: string,\n needContext?: boolean\n ): UseSingleBrickConf {\n const props = getOrderedProps(schema);\n const key = props.length > 0 ? props[0][0] : null;\n const modalId = normalizeIdentifier(`modal__${idPrefix}`);\n const contextId = normalizeIdentifier(`context__${idPrefix}`);\n if (needContext) {\n context.push({\n name: contextId,\n });\n }\n\n modals.push({\n brick: \"eo-modal\",\n portal: true,\n properties: {\n dataset: {\n modalId,\n },\n themeVariant: \"elevo\",\n modalTitle: label,\n hideCancelButton: true,\n maskClosable: true,\n keyboard: true,\n },\n children: [\n {\n brick: \"eo-descriptions\",\n properties: {\n themeVariant: \"elevo\",\n column: 1,\n dataSource: needContext\n ? `<%= CTX.${contextId} %>`\n : `<% ${valueAccessor} %> `,\n list: props.map(([k, v]) => ({\n label: v.description || upperFirst(k),\n field: k,\n })),\n },\n },\n ],\n });\n\n return {\n brick: \"span\",\n if: `<% !!(${valueAccessor}) %>`,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \"eo-tag\",\n properties: {\n textContent: `<% CTX.${BUILTIN_FN_STRINGIFY}(${valueAccessor}, ${JSON.stringify(key)}, ${JSON.stringify(props[0]?.[1].type)}) %>`,\n outline: true,\n style: {\n cursor: \"pointer\",\n },\n },\n events: {\n click: [\n ...((needContext\n ? [\n {\n action: \"context.replace\",\n args: [\n {\n name: contextId,\n value: `<% ${valueAccessor} %>`,\n },\n ],\n },\n ]\n : []) as BrickEventHandler[]),\n {\n target: `[data-root-id=\"${rootId}\"] [data-modal-id=\"${modalId}\"]`,\n method: \"open\",\n },\n ],\n },\n },\n ],\n };\n }\n\n if (schema?.type === \"object\") {\n const entries = Object.entries<JSONSchema>(schema.properties);\n list = entries.map<DescriptionItem>(([key, def]) => {\n const { description, type } = def;\n const label = description || upperFirst(key);\n\n if (isEmptyValue(detail, key)) {\n return {\n label,\n text: \"\",\n };\n }\n\n if (type === \"array\" && Array.isArray(detail[key])) {\n const { items } = def;\n if (items?.type === \"object\") {\n const contextName = normalizeIdentifier(`context__${key}`);\n context.push({\n name: contextName,\n value: detail[key],\n });\n\n return {\n label,\n useBrick: convertArrayOfObjects(\n `CTX.${contextName}`,\n items,\n label,\n key\n ),\n };\n }\n\n if (!isComplexType(items?.type)) {\n return {\n label,\n text: detail[key].join(\", \"),\n };\n }\n }\n\n if (type === \"object\" && isObject(detail[key])) {\n const contextName = normalizeIdentifier(`context__${key}`);\n context.push({\n name: contextName,\n value: detail[key],\n });\n\n return {\n label,\n useBrick: convertObject(`CTX.${contextName}`, def, label, key),\n };\n }\n\n if (isComplexType(type)) {\n return {\n label,\n text: JSON.stringify(detail[key], null, 2),\n };\n }\n\n // const candidate = attrViews?.get(key);\n // if (candidate) {\n // const brick = convertToStoryboard(candidate, key, {\n // ignoreStyle: true,\n // });\n // if (brick) {\n // return {\n // label,\n // useBrick: brick as UseBrickConf,\n // };\n // }\n // }\n\n return {\n label,\n field: key,\n };\n });\n } else {\n list = Object.keys(detail).map((key) => ({\n label: upperFirst(key),\n field: key,\n }));\n }\n\n return {\n bricks: [\n {\n brick: \"eo-descriptions\",\n properties: {\n themeVariant: \"elevo\",\n column: list.length > LIST_SPLIT_THRESHOLD ? 2 : 1,\n dataSource: detail,\n list,\n },\n },\n ...modals,\n ],\n context,\n };\n}\n\nfunction normalizeIdentifier(identifier: string): string {\n return identifier.replace(/[^a-zA-Z0-9_]+/g, \"_\");\n}\n\nfunction builtinFnStringify(\n value: Record<string, unknown>,\n key: string | null,\n type: JSONSchema[\"type\"] | undefined\n): string {\n if (key === null || isEmptyValue(value, key)) {\n return \"\";\n }\n const v = value[key];\n if (isComplexType(type) && isObject(v)) {\n return JSON.stringify(v, null, 2);\n }\n return String(v);\n}\n\nfunction getOrderedProps(schema: JSONSchemaObject) {\n const props = Object.entries(schema.properties);\n if (!schema.required?.length) {\n return props;\n }\n const propKeys = Object.keys(schema.properties);\n return orderBy(\n props,\n [\n ([k]) => {\n const requiredIndex = schema.required!.indexOf(k);\n if (requiredIndex === -1) {\n return schema.required!.length + propKeys.indexOf(k);\n }\n return requiredIndex;\n },\n ],\n [\"asc\"]\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FileList.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FileList.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useContext, useMemo, useState } from \"react\";\nimport classNames from \"classnames\";\nimport type { FileInfo } from \"../interfaces\";\nimport styles from \"./FileList.module.css\";\nimport { K, t } from \"./i18n\";\nimport {\n formatFileSize,\n getFileTypeAndIcon,\n} from \"../../cruise-canvas/utils/file\";\nimport { getImageUrl } from \"../FilePreview/getImageUrl\";\nimport { TaskContext } from \"../TaskContext\";\nimport { WrappedIcon } from \"../bricks\";\nimport { ICON_UP } from \"../constants\";\n\nexport interface FileListProps {\n files: FileInfo[];\n large?: boolean;\n ui?: \"canvas\" | \"chat\";\n}\n\nexport function FileList({ files, large, ui }: FileListProps) {\n const { setActiveFile, setActiveImages } = useContext(TaskContext);\n\n const filesWithDisplayInfo = useMemo(() => {\n return files.map((file) => {\n const [displayType, icon] = getFileTypeAndIcon(file.mimeType, file.name);\n return {\n file,\n displayType,\n icon,\n };\n });\n }, [files]);\n\n const imageFiles = filesWithDisplayInfo\n .filter((file) => file.displayType === \"Image\" && file.file.uri)\n .map((f) => f.file);\n const allImages = imageFiles.length === files.length;\n // 超出数量,多余的收起来\n const limit = allImages ? 8 : 6;\n const exceeded = files.length > limit;\n const [expanded, setExpanded] = useState(false);\n const filteredList = expanded\n ? filesWithDisplayInfo\n : filesWithDisplayInfo.slice(0, limit);\n\n return (\n <>\n <ul\n className={classNames(styles.files, {\n [styles.large]: large,\n [styles.images]: allImages,\n [styles.single]: filesWithDisplayInfo.length === 1,\n [styles.chat]: ui === \"chat\",\n })}\n >\n {filteredList.map(({ file, displayType, icon }, index) => {\n return (\n <li key={index}>\n <a\n className={allImages ? styles.image : styles.file}\n onClick={() => {\n if (displayType === \"Image\" && file.uri) {\n setActiveImages({\n files: imageFiles,\n file,\n });\n } else {\n setActiveFile(file);\n }\n }}\n >\n {allImages ? (\n <>\n <img src={getImageUrl(file.uri!)} fetchPriority=\"low\" />\n {exceeded && index === limit - 1 && (\n <>\n <div className={styles.mask} />\n <div className={styles.overlay}>\n {`+${files.length - limit + 1}`}\n </div>\n </>\n )}\n </>\n ) : (\n <>\n <img\n className={styles.icon}\n src={icon}\n width={26}\n height={32}\n />\n <div className={styles.content}>\n <div className={styles.name}>\n {file.name || t(K.UNTITLED)}\n </div>\n <div className={styles.metadata}>\n {`${displayType}${file.size ? ` · ${formatFileSize(file.size)}` : \"\"}`}\n </div>\n </div>\n </>\n )}\n </a>\n </li>\n );\n })}\n </ul>\n {exceeded && !allImages && (\n <button\n className={classNames(styles.expand, {\n [styles.collapsed]: !expanded,\n })}\n onClick={() => setExpanded((prev) => !prev)}\n >\n <WrappedIcon {...ICON_UP} />\n {expanded ? t(K.COLLAPSE) : t(K.SHOW_ALL_FILES)}\n </button>\n )}\n </>\n );\n}\n","export interface GeneralNode {\n id: string;\n upstream?: string[];\n parent?: string;\n hidden?: boolean;\n}\n\nexport function getOrderedNodes<T extends GeneralNode>(nodes: T[]) {\n const map = new Map<string, T>();\n const downstreamMap = new Map<string, string[]>();\n const roots: string[] = [];\n const rootChildren: string[] = [];\n const childMap: Map<string, string> = new Map();\n\n // Ignore sub nodes\n for (const node of nodes) {\n map.set(node.id, node);\n if (node.parent) {\n childMap.set(node.parent, node.id);\n } else {\n rootChildren.push(node.id);\n }\n }\n\n // Setup downstream relations\n for (const node of nodes) {\n for (const up of node.upstream ?? []) {\n let downstream = downstreamMap.get(up);\n if (!downstream) {\n downstreamMap.set(up, (downstream = []));\n }\n downstream.push(node.id);\n }\n\n if (\n !node.parent &&\n !node.upstream?.length /* &&\n (showHiddenNodes || !node.hidden) */\n ) {\n roots.push(node.id);\n }\n }\n\n // Get BFS order of nodes\n const list: string[] = [];\n const visitedNodes = new Set<string>();\n const queue: string[] = [...roots];\n const leaves: string[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n if (visitedNodes.has(id)) {\n continue;\n }\n visitedNodes.add(id);\n list.push(id);\n const downstream = downstreamMap.get(id);\n if (downstream?.length) {\n queue.push(...downstream);\n } else {\n leaves.push(id);\n }\n }\n\n return { list, map, roots, leaves, childMap, downstreamMap };\n}\n","import type { MessageChunk } from \"../chat-stream/interfaces\";\nimport type {\n Task,\n ServiceFlowRun,\n ActivityWithFlow,\n ConversationError,\n Job,\n} from \"../shared/interfaces\";\nimport { getTaskTree, type TaskTreeNode } from \"./getTaskTree\";\n\nexport function getFlatChunks(\n tasks: Task[],\n errors: ConversationError[],\n flowMap?: Map<string, ServiceFlowRun>,\n activityMap?: Map<string, ActivityWithFlow>,\n skipActivitySubTasks?: boolean\n) {\n const taskTree = getTaskTree(tasks);\n const chunks: MessageChunk[] = [];\n const jobMap = new Map<string, Job>();\n\n const collectChunks = (taskNode: TaskTreeNode, level: number) => {\n const flow = flowMap?.get(taskNode.task.id);\n\n const activityWithFlow = activityMap?.get(taskNode.task.id);\n if (activityWithFlow) {\n chunks.push({\n type: \"activity\",\n activity: activityWithFlow.activity,\n flow: activityWithFlow.flow,\n task: taskNode.task,\n });\n }\n\n const shouldSkip = activityWithFlow && skipActivitySubTasks;\n\n for (const { job, subTask } of taskNode.children) {\n if (shouldSkip) {\n if (\n (job.state === \"completed\" &&\n job.messages?.length &&\n job.messages.every((msg) => msg.role === \"user\")) ||\n job.hil\n ) {\n chunks.push({\n type: \"job\",\n job,\n level,\n fromSkippedSubTask: true,\n });\n }\n continue;\n }\n\n if (job.type === \"serviceFlow\") {\n if (flow) {\n chunks.push({\n type: \"flow\",\n flow,\n task: taskNode.task,\n });\n }\n } else if (subTask) {\n collectChunks(subTask, level + 1);\n } else {\n chunks.push({\n type: \"job\",\n job,\n level,\n });\n }\n }\n\n const taskErrors = errors.filter(\n (error) => error.taskId === taskNode.task.id && error.error\n );\n for (const error of taskErrors) {\n chunks.push({\n type: \"error\",\n error: error.error!,\n });\n }\n };\n\n const collectJobs = (taskNode: TaskTreeNode) => {\n for (const { job, subTask } of taskNode.children) {\n jobMap.set(job.id, job);\n if (subTask) {\n collectJobs(subTask);\n }\n }\n };\n\n // Get flattened jobs\n for (const taskNode of taskTree) {\n collectChunks(taskNode, 0);\n collectJobs(taskNode);\n }\n\n for (const error of errors) {\n if (!error.taskId && error.error) {\n chunks.push({\n type: \"error\",\n error: error.error,\n });\n }\n }\n\n return { chunks, jobMap };\n}\n","import type { Task, Job } from \"../shared/interfaces\";\nimport { getOrderedNodes } from \"./getOrderedNodes\";\n\nexport interface TaskTreeNode {\n task: Task;\n children: JobTreeNode[];\n}\n\nexport interface JobTreeNode {\n job: Job;\n subTask?: TaskTreeNode;\n}\n\nexport function getTaskTree(tasks: Task[]): TaskTreeNode[] {\n const { list: taskIds, map: taskMap, childMap } = getOrderedNodes(tasks);\n\n const processedTaskMap = new Map(\n [...taskMap.entries()].map(([taskId, task]) => {\n return [taskId, getOrderedNodes(task.jobs)];\n })\n );\n\n const buildTaskTreeNode = (taskId: string): TaskTreeNode => {\n const task = taskMap.get(taskId)!;\n const processedTask = processedTaskMap.get(taskId)!;\n const { list: jobIds, map: jobMap } = processedTask;\n\n const children: JobTreeNode[] = jobIds.map((jobId) => {\n const job = jobMap.get(jobId)!;\n const subTaskId = childMap.get(job.id);\n if (subTaskId) {\n return {\n job,\n subTask: buildTaskTreeNode(subTaskId),\n };\n }\n return { job };\n });\n\n return {\n task,\n children,\n };\n };\n\n return taskIds.map((taskId) => buildTaskTreeNode(taskId));\n}\n","// istanbul ignore file\n\n/*\nnpx shiki-codegen \\\n --langs json,javascript,typescript,html,html-derivative,xml,css,markdown,mermaid,jsx,tsx,shellscript,python,go,sql \\\n --themes light-plus,dark-plus \\\n --engine oniguruma \\\n ./shared/shiki/src/bundle.ts\n*/\n\nimport lightPlus from \"@shikijs/themes/light-plus\";\nimport darkPlus from \"@shikijs/themes/dark-plus\";\n\n/* Generate by @shikijs/codegen */\nimport type {\n DynamicImportLanguageRegistration,\n HighlighterGeneric,\n ThemeInput,\n} from \"@shikijs/types\";\nimport {\n createSingletonShorthands,\n createdBundledHighlighter,\n} from \"@shikijs/core\";\nimport { createOnigurumaEngine } from \"@shikijs/engine-oniguruma\";\n\ntype BundledLanguage =\n | \"json\"\n | \"javascript\"\n | \"js\"\n | \"typescript\"\n | \"ts\"\n | \"html\"\n | \"html-derivative\"\n | \"xml\"\n | \"css\"\n | \"markdown\"\n | \"md\"\n | \"mermaid\"\n | \"mmd\"\n | \"jsx\"\n | \"tsx\"\n | \"shellscript\"\n | \"bash\"\n | \"sh\"\n | \"shell\"\n | \"zsh\"\n | \"python\"\n | \"py\"\n | \"go\"\n | \"sql\";\ntype BundledTheme = \"light-plus\" | \"dark-plus\";\ntype Highlighter = HighlighterGeneric<BundledLanguage, BundledTheme>;\n\nconst bundledLanguages = {\n json: () => import(\"@shikijs/langs/json\"),\n javascript: () => import(\"@shikijs/langs/javascript\"),\n js: () => import(\"@shikijs/langs/javascript\"),\n typescript: () => import(\"@shikijs/langs/typescript\"),\n ts: () => import(\"@shikijs/langs/typescript\"),\n html: () => import(\"@shikijs/langs/html\"),\n \"html-derivative\": () => import(\"@shikijs/langs/html-derivative\"),\n xml: () => import(\"@shikijs/langs/xml\"),\n css: () => import(\"@shikijs/langs/css\"),\n markdown: () => import(\"@shikijs/langs/markdown\"),\n md: () => import(\"@shikijs/langs/markdown\"),\n mermaid: () => import(\"@shikijs/langs/mermaid\"),\n mmd: () => import(\"@shikijs/langs/mermaid\"),\n jsx: () => import(\"@shikijs/langs/jsx\"),\n tsx: () => import(\"@shikijs/langs/tsx\"),\n shellscript: () => import(\"@shikijs/langs/shellscript\"),\n bash: () => import(\"@shikijs/langs/shellscript\"),\n sh: () => import(\"@shikijs/langs/shellscript\"),\n shell: () => import(\"@shikijs/langs/shellscript\"),\n zsh: () => import(\"@shikijs/langs/shellscript\"),\n python: () => import(\"@shikijs/langs/python\"),\n py: () => import(\"@shikijs/langs/python\"),\n go: () => import(\"@shikijs/langs/go\"),\n sql: () => import(\"@shikijs/langs/sql\"),\n} as Record<BundledLanguage, DynamicImportLanguageRegistration>;\n\nconst bundledThemes = {\n \"light-plus\": lightPlus,\n \"dark-plus\": darkPlus,\n} as Record<BundledTheme, ThemeInput>;\n\nconst createHighlighter = /* @__PURE__ */ createdBundledHighlighter<\n BundledLanguage,\n BundledTheme\n>({\n langs: bundledLanguages,\n themes: bundledThemes,\n engine: () => createOnigurumaEngine(import(\"shiki/wasm\")),\n});\n\nconst {\n codeToHtml,\n codeToHast,\n codeToTokensBase,\n codeToTokens,\n codeToTokensWithThemes,\n getSingletonHighlighter,\n getLastGrammarState,\n} = /* @__PURE__ */ createSingletonShorthands<BundledLanguage, BundledTheme>(\n createHighlighter,\n {\n guessEmbeddedLanguages(code, lang) {\n if (lang === \"markdown\" || lang === \"md\") {\n return [\"mermaid\"];\n }\n },\n }\n);\n\nexport {\n bundledLanguages,\n bundledThemes,\n codeToHast,\n codeToHtml,\n codeToTokens,\n codeToTokensBase,\n codeToTokensWithThemes,\n getLastGrammarState,\n getSingletonHighlighter,\n};\nexport type { BundledLanguage, BundledTheme, Highlighter };\n","import { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport type { Element } from \"hast\";\nimport type Mermaid from \"mermaid\";\nimport { fromHtmlIsomorphic } from \"hast-util-from-html-isomorphic\";\nimport { getCodeLanguage } from \"./utils.js\";\n\nlet mermaidPromise: Promise<typeof Mermaid> | undefined;\n\nfunction loadMermaid() {\n if (mermaidPromise) {\n return mermaidPromise;\n }\n mermaidPromise = doLoadMermaid();\n return mermaidPromise;\n}\n\nasync function doLoadMermaid() {\n const mermaid = (await import(\"mermaid\")).default;\n mermaid.initialize({\n startOnLoad: false,\n theme: \"base\",\n themeVariables: {\n fontSize: \"14px\",\n lineColor: \"#979797\",\n primaryColor: \"#DCD2F3\",\n primaryBorderColor: \"#0000001A\",\n },\n });\n return mermaid;\n}\n\nlet count = 0;\n\nconst parser = new DOMParser();\nconst serializer = new XMLSerializer();\n\n// Reference https://github.com/remcohaszing/rehype-mermaid\nexport function rehypeMermaid() {\n return async (tree: Element) => {\n const promises: Promise<void>[] = [];\n\n visit(tree, \"element\", (node, index, parent) => {\n if (\n !parent ||\n parent.type !== \"element\" ||\n parent.tagName !== \"pre\" ||\n node.tagName !== \"code\"\n ) {\n return;\n }\n\n const lang = getCodeLanguage(node);\n\n if (lang !== \"mermaid\") {\n return;\n }\n\n promises.push(\n (async () => {\n const id = `mermaid-${count++}`;\n let svg: string;\n try {\n const mermaid = await loadMermaid();\n const result = await mermaid.render(id, toString(node));\n svg = result.svg;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error rendering mermaid diagram:\", error);\n document.getElementById(id)?.remove();\n return;\n }\n const root = parser.parseFromString(svg, \"text/html\");\n const svgElement = root.querySelector(\"svg\") as SVGSVGElement;\n\n const defs = root.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"defs\"\n );\n defs.innerHTML = `<linearGradient id=\"linear-gradient-${id}\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"#F0EBFA\" />\n <stop offset=\"75%\" stop-color=\"#DED4F4\" />\n <stop offset=\"100%\" stop-color=\"#C5C7FA\" />\n</linearGradient>`;\n svgElement.prepend(defs);\n\n const style = root.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"style\"\n );\n style.textContent = `\n#${id} .node rect,\n#${id} .node circle,\n#${id} .node ellipse,\n#${id} .node polygon,\n#${id} .node path {\n fill: url(#linear-gradient-${id});\n}\n#${id} .node rect {\n rx: 4;\n ry: 4;\n}\n#${id} .labelBkg {\n background-color: #f5f8ff;\n}\n#${id} .edgeLabel,\n#${id} .edgeLabel p {\n background-color: transparent;\n}\n#${id} .edgeLabel {\n color: #8c8c8c;\n font-size: 12px;\n}\n`;\n svgElement.appendChild(style);\n\n const modifiedSvg = serializer.serializeToString(svgElement);\n\n const replacements = fromHtmlIsomorphic(modifiedSvg, {\n fragment: true,\n }).children as Element[];\n parent.children.splice(index!, 1, ...replacements);\n parent.properties.className = (\n (parent.properties.className as string[]) || []\n ).concat(\"mermaid\");\n })()\n );\n });\n\n await Promise.all(promises);\n };\n}\n","import type { Element } from \"hast\";\n\nexport function getCodeLanguage(node: Element) {\n const className = (node.properties.className as string[]) || [];\n\n for (const classListItem of className) {\n if (classListItem.slice(0, 9) === \"language-\") {\n return classListItem.slice(9).toLowerCase();\n }\n }\n\n return null;\n}\n","import { useEffect, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkToRehype from \"remark-rehype\";\nimport rehypeReact, { Options as RehypeReactOptions } from \"rehype-react\";\nimport type { Components } from \"hast-util-to-jsx-runtime\";\nimport rehypeShikiFromHighlighter from \"@shikijs/rehype/core\";\nimport { getSingletonHighlighter } from \"@next-shared/shiki\";\nimport { rehypeMermaid } from \"./rehypeMermaid.js\";\n\nconst production = { Fragment, jsx, jsxs };\n\nexport interface MarkdownComponentProps {\n content?: string;\n components?: Partial<Components>;\n shiki?: {\n /** @default \"dark-plus\" */\n theme?: \"light-plus\" | \"dark-plus\";\n };\n}\n\nexport async function preloadHighlighter(\n theme: \"light-plus\" | \"dark-plus\"\n): Promise<void> {\n await getSingletonHighlighter({\n themes: [theme],\n });\n}\n\n// Reference https://github.com/remarkjs/react-remark/blob/39553e5f5c9e9b903bebf261788ff45130668de0/src/index.ts\nexport function MarkdownComponent({\n content,\n components,\n shiki,\n}: MarkdownComponentProps): JSX.Element | null {\n const [reactContent, setReactContent] = useState<JSX.Element | null>(null);\n const theme = shiki?.theme ?? \"dark-plus\";\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n try {\n const highlighter = await getSingletonHighlighter({\n themes: [theme],\n });\n if (ignore) {\n return;\n }\n const vFile = await unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkToRehype)\n .use(rehypeMermaid)\n .use(rehypeShikiFromHighlighter, highlighter as any, {\n theme,\n lazy: true,\n defaultLanguage: \"text\",\n })\n .use(rehypeReact, {\n ...production,\n passNode: true,\n components,\n } as RehypeReactOptions)\n .process(content);\n if (!ignore) {\n setReactContent(vFile.result);\n }\n } catch (error) {\n if (!ignore) {\n // eslint-disable-next-line no-console\n console.error(\"Convert markdown failed:\", error);\n setReactContent(null);\n }\n }\n })();\n return () => {\n ignore = true;\n };\n }, [components, content, theme]);\n\n return reactContent;\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--YostHfxu{background:var(--elevo-component-background);-webkit-backdrop-filter:var(--elevo-component-backdrop-filter);backdrop-filter:var(--elevo-component-backdrop-filter);border-radius:var(--elevo-border-radius);padding:16px}.container--YostHfxu:not(:first-child){margin-top:10px}ai-portal\\\\.chat-stream .container--YostHfxu{background:rgba(255,255,255,0.6);border-radius:8px;border:1px solid rgba(0,0,0,0.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:12px 20px}.loading--FzSrGTPm{position:absolute;top:calc(50% - 7px);left:calc(50% - 7px)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--YostHfxu`,\n\t\"loading\": `loading--FzSrGTPm`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport fileText from \"../images/file-text@2x.png\";\nimport filePdf from \"../images/file-pdf@2x.png\";\nimport fileDoc from \"../images/file-doc@2x.png\";\nimport filePpt from \"../images/file-ppt@2x.png\";\nimport fileXls from \"../images/file-xls@2x.png\";\nimport fileOther from \"../images/file-other@2x.png\";\n\nconst MIME_TYPES = new Map<string, string>([\n [\"md\", \"text/markdown\"],\n [\"pdf\", \"application/pdf\"],\n [\"doc\", \"application/msword\"],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n ],\n [\"txt\", \"text/plain\"],\n [\"csv\", \"text/csv\"],\n [\"xls\", \"application/vnd.ms-excel\"],\n [\"xlsx\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],\n [\"ppt\", \"application/vnd.ms-powerpoint\"],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ],\n [\"jpg\", \"image/jpeg\"],\n [\"jpeg\", \"image/jpeg\"],\n [\"png\", \"image/png\"],\n [\"gif\", \"image/gif\"],\n [\"bmp\", \"image/bmp\"],\n [\"webp\", \"image/webp\"],\n [\"svg\", \"image/svg+xml\"],\n]);\n\nexport function formatFileSize(size: number) {\n const [value, unit] = pipes.unitFormat(size, \"bytes\", 1);\n const number = +value;\n return `${number > 100 ? Math.round(number) : number} ${unit}`;\n}\n\nexport function getFileTypeAndIcon(\n mimeType: string | undefined,\n filename: string | undefined\n): [type: string, icon: string] {\n const type = mimeType || getMimeTypeByFilename(filename);\n\n if (type.startsWith(\"image/\")) {\n return [\"Image\", fileOther];\n }\n\n switch (type) {\n case \"text/markdown\":\n case \"text/x-markdown\":\n return [\"Markdown\", fileText];\n case \"application/pdf\":\n return [\"PDF\", filePdf];\n case \"application/msword\":\n case \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n return [\"Word\", fileDoc];\n case \"application/vnd.ms-excel\":\n case \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\n return [\"Excel\", fileXls];\n case \"application/vnd.ms-powerpoint\":\n case \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n return [\"PowerPoint\", filePpt];\n }\n\n if (type.startsWith(\"text/\")) {\n return [\"Text\", fileText];\n }\n\n return [\"File\", fileOther];\n}\n\nexport function getMimeTypeByFilename(filename: string | undefined): string {\n let ext = \"\";\n const matches = filename?.match(/\\.([^.]+)$/);\n if (matches) {\n ext = matches[1].toLowerCase();\n }\n return MIME_TYPES.get(ext) ?? \"unknown\";\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ExpandedView.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ExpandedView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { getBasePath, unstable_createRoot } from \"@next-core/runtime\";\nimport { uniqueId } from \"lodash\";\nimport { convertView } from \"@next-shared/tsx-converter\";\nimport type { GraphGeneratedView } from \"../../cruise-canvas/interfaces\";\nimport styles from \"./ExpandedView.module.css\";\nimport { WrappedIcon, WrappedIconButton } from \"../../shared/bricks\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { ICON_CLOSE, ICON_EXTERNAL_LINK, ICON_FEEDBACK } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\nimport { parseTemplate } from \"../parseTemplate\";\nimport type { ParsedView } from \"../interfaces\";\nimport type { ModulePartOfComponent } from \"@next-shared/tsx-parser\";\n\nexport interface ExpandedViewProps {\n views: GraphGeneratedView[];\n}\n\nexport function ExpandedView({ views }: ExpandedViewProps) {\n const rootId = useMemo(() => uniqueId(), []);\n const {\n workspace,\n previewUrlTemplate,\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const generatedView = activeExpandedViewJobId\n ? (manuallyUpdatedViews?.get(activeExpandedViewJobId) ??\n views.find((v) => v.id === activeExpandedViewJobId)?.view)\n : null;\n const feedbackDone =\n useViewFeedbackDone(generatedView?.viewId, showFeedbackOnView) ||\n (generatedView && feedbackDoneViews?.has(generatedView.viewId));\n const [view, setView] = useState<ParsedView | null>(null);\n const canFeedback =\n !!view && !!generatedView?.viewId && generatedView.from !== \"config\";\n const [viewsWithTitle, setViewsWithTitle] = useState<\n Array<\n GraphGeneratedView & {\n title?: string;\n }\n >\n >(views);\n\n useEffect(() => {\n setView(null);\n let ignore = false;\n generatedView?.asyncConstructedView?.then((view) => {\n if (!ignore) {\n setView(view);\n }\n });\n return () => {\n ignore = true;\n };\n }, [generatedView]);\n\n useEffect(() => {\n Promise.all(\n views.map(async (v) => {\n const view = await v.view.asyncConstructedView;\n return {\n ...v,\n title: (view?.entry?.defaultExport as ModulePartOfComponent)?.title,\n };\n })\n ).then((result) => {\n setViewsWithTitle(result);\n });\n }, [views]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n if (!view) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertView(view, {\n rootId,\n workspace,\n expanded: true,\n withContexts: view.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context, functions, templates } = convertedView;\n await rootRef.current?.render(brick, { context, functions, templates });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, workspace, view]);\n\n const handleClose = useCallback(() => {\n setActiveExpandedViewJobId(null);\n }, [setActiveExpandedViewJobId]);\n\n return (\n <div className={styles[\"expanded-view\"]}>\n {loading && (\n <div className={styles.loading}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n <div\n className={classNames(styles.body, {\n // [styles.small]: sizeSmall,\n })}\n ref={containerRef}\n data-root-id={rootId}\n />\n <ul className={styles.nav}>\n {viewsWithTitle.map((view) => (\n <li key={view.id}>\n <button\n className={classNames(styles[\"nav-button\"], {\n [styles.active]: activeExpandedViewJobId === view.id,\n })}\n onClick={() => setActiveExpandedViewJobId(view.id)}\n >\n {view.title ?? \"…\"}\n </button>\n </li>\n ))}\n </ul>\n <div className={styles.buttons}>\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <WrappedIconButton\n icon={ICON_FEEDBACK}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n />\n )}\n {!!(\n generatedView?.viewId &&\n !generatedView.withContexts &&\n previewUrlTemplate\n ) && (\n <WrappedIconButton\n icon={ICON_EXTERNAL_LINK}\n onClick={() => {\n window.open(\n `${getBasePath().slice(0, -1)}${parseTemplate(\n previewUrlTemplate,\n {\n viewId: generatedView.viewId,\n }\n )}`,\n \"_blank\"\n );\n }}\n />\n )}\n <WrappedIconButton icon={ICON_CLOSE} onClick={handleClose} />\n </div>\n </div>\n );\n}\n","export const NS_LIBS_DATETIME = \"libs-datetime\";\n\nexport enum K {\n TODAY = \"TODAY\",\n YESTERDAY = \"YESTERDAY\",\n FUTURE_AFTER = \"FUTURE_AFTER\",\n FORMAT_MEDIUM_DATETIME = \"FORMAT_MEDIUM_DATETIME\",\n FORMAT_MEDIUM_DATE = \"FORMAT_MEDIUM_DATE\",\n FORMAT_SHORT_DATETIME = \"FORMAT_SHORT_DATETIME\",\n FORMAT_SHORT_DATE = \"FORMAT_SHORT_DATE\",\n FORMAT_SHORT_DAY_DATETIME = \"FORMAT_SHORT_DAY_DATETIME\",\n FORMAT_SHORT_DAY_DATE = \"FORMAT_SHORT_DAY_DATE\",\n SECONDS = \"SECONDS\",\n MILL_SECONDS = \"MILL_SECONDS\",\n MINUTES = \"MINUTES\",\n HOURS = \"HOURS\",\n DAYS = \"DARS\",\n MONTHS = \"MONTHS\",\n}\n\nexport type Locale = { [key in K]: string };\n","import { Locale, K } from \"../constants.js\";\n\nconst locale: Locale = {\n [K.YESTERDAY]: \"Yesterday\",\n [K.TODAY]: \"Today\",\n [K.FUTURE_AFTER]: \"After {{time}}\",\n [K.FORMAT_MEDIUM_DATETIME]: \"LLL\",\n [K.FORMAT_MEDIUM_DATE]: \"LL\",\n [K.FORMAT_SHORT_DATETIME]: \"MMM D ah:mm\",\n [K.FORMAT_SHORT_DATE]: \"MMM D\",\n [K.FORMAT_SHORT_DAY_DATETIME]: \"MMM D HH:mm\",\n [K.FORMAT_SHORT_DAY_DATE]: \"MMM D\",\n [K.MONTHS]: \"months\",\n [K.HOURS]: \"hours\",\n [K.SECONDS]: \"seconds\",\n [K.MILL_SECONDS]: \"millseconds\",\n [K.DAYS]: \"days\",\n [K.MINUTES]: \"minutes\",\n};\n\nexport default locale;\n","import { Locale, K } from \"../constants.js\";\n\nconst locale: Locale = {\n [K.YESTERDAY]: \"昨天\",\n [K.TODAY]: \"今天\",\n [K.FUTURE_AFTER]: \"{{time}}后\",\n [K.FORMAT_MEDIUM_DATETIME]: \"LL ah:mm\",\n [K.FORMAT_MEDIUM_DATE]: \"LL\",\n [K.FORMAT_SHORT_DATETIME]: \"MMMD日 ah:mm\",\n [K.FORMAT_SHORT_DATE]: \"MMMD日\",\n [K.FORMAT_SHORT_DAY_DATETIME]: \"MMMD日 HH:mm\",\n [K.FORMAT_SHORT_DAY_DATE]: \"MMMD日\",\n [K.MONTHS]: \"个月\",\n [K.HOURS]: \"小时\",\n [K.SECONDS]: \"秒\",\n [K.MILL_SECONDS]: \"毫秒\",\n [K.DAYS]: \"天\",\n [K.MINUTES]: \"分钟\",\n};\n\nexport default locale;\n","import { initializeI18n } from \"@next-core/i18n\";\nimport { NS_LIBS_DATETIME } from \"./constants.js\";\nimport en from \"./locales/en.js\";\nimport zh from \"./locales/zh.js\";\n\nexport function addResourceBundle(): void {\n initializeI18n(NS_LIBS_DATETIME, { en, zh });\n}\n","import moment from \"moment\";\nimport { i18n } from \"@next-core/i18n\";\nimport { NS_LIBS_DATETIME, K } from \"./i18n/constants.js\";\nimport { addResourceBundle } from \"./i18n/index.js\";\n\naddResourceBundle();\n\nconst TIME_OFFSET = 0;\n\nexport enum HumanizeTimeFormat {\n full = \"full\",\n default = \"default\",\n relative = \"relative\",\n past = \"past\",\n future = \"future\",\n accurate = \"accurate\",\n auto = \"auto\",\n}\n\nexport const humanizeTime = (\n time: moment.MomentInput,\n format: HumanizeTimeFormat = HumanizeTimeFormat.auto,\n /** 默认为 \"datetime\" */\n type?: \"datetime\" | \"date\"\n): string | null => {\n if (\n time === undefined ||\n time === null ||\n time === -Infinity ||\n time === Infinity\n ) {\n return null;\n }\n const m = moment(time);\n const now = moment().add(TIME_OFFSET);\n const fFull = type === \"date\" ? \"LL\" : \"LL HH:mm\";\n const fMedium = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_MEDIUM_DATE : K.FORMAT_MEDIUM_DATETIME}`\n );\n const fShort = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_SHORT_DATE : K.FORMAT_SHORT_DATETIME}`\n );\n const fShort24 = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_SHORT_DAY_DATE : K.FORMAT_SHORT_DAY_DATETIME}`\n );\n const fDefault = type === \"date\" ? \"LL\" : \"LL HH:mm:ss\";\n const fHourMinute = \"HH:mm\";\n let text;\n\n /* 用于精确显示时间的参数\n * 今天与昨天,显示:今天(昨天)x:x的格式,如:今天12:21、昨天16:33\n * 昨天以前的时间,显示:x月x日x时:x分,如:11月23日11:22\n * 今年以前的时间,显示:x年x月x日x时:x分,如:2016年11月11日11:11\n */\n const getAccurateTime = () => {\n const diff = +m.diff(now, \"days\", true).toFixed(1);\n let _text = \"\";\n const retVal =\n m.year() < now.year()\n ? \"lastYear\"\n : diff < -2 || m.isBefore(now.clone().add(-1, \"day\"), \"day\")\n ? \"twoDaysBefore\"\n : m.isSame(now.clone().add(-1, \"day\"), \"day\")\n ? \"yesterday\"\n : m.isSame(now, \"day\")\n ? \"sameDay\"\n : diff < 2 && m.isSame(now.clone().add(1, \"day\"), \"day\")\n ? \"nextDay\"\n : diff < 7\n ? \"nextWeek\"\n : \"default\";\n switch (retVal) {\n case \"sameDay\":\n case \"yesterday\":\n _text = `${i18n.t(`${NS_LIBS_DATETIME}:${retVal === \"yesterday\" ? K.YESTERDAY : K.TODAY}`)}${\n type === \"date\" ? \"\" : ` ${m.format(fHourMinute)}`\n }`;\n break;\n case \"lastYear\":\n _text = m.format(fFull);\n break;\n case \"twoDaysBefore\":\n _text = m.format(fShort24);\n break;\n default:\n _text = m.format(fFull);\n }\n\n return _text;\n };\n\n switch (format) {\n case HumanizeTimeFormat.full:\n text = m.format(fFull);\n break;\n case HumanizeTimeFormat.default:\n text = m.format(fDefault);\n break;\n case HumanizeTimeFormat.relative: {\n const diff = +m - +now;\n text =\n diff <= 0\n ? moment.duration(diff).humanize(true)\n : i18n.t(`${NS_LIBS_DATETIME}:${K.FUTURE_AFTER}`, {\n time: moment.duration(diff).humanize(),\n });\n break;\n }\n case HumanizeTimeFormat.past:\n text = moment.duration(Math.min(+m - +now, 0)).humanize(true);\n break;\n case HumanizeTimeFormat.future:\n text = i18n.t(`${NS_LIBS_DATETIME}:${K.FUTURE_AFTER}`, {\n time: moment.duration(Math.max(+m - +now, 0)).humanize(),\n });\n break;\n case HumanizeTimeFormat.accurate:\n text = getAccurateTime();\n break;\n default:\n text = m.format(m.year() === now.year() ? fShort : fMedium);\n }\n return text;\n};\n","import { get } from \"lodash\";\n\nexport function parseTemplate(\n template: string | undefined,\n context: Record<string, any>\n) {\n return template?.replace(/{{(.*?)}}/g, (_match: string, key: string) => {\n const value = get(context, key.trim());\n return value;\n });\n}\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type {\n DataPart,\n GeneratedView,\n Job,\n JobPatch,\n Message,\n Part,\n Task,\n TextPart,\n} from \"../../shared/interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport { getAsyncConstructedView } from \"../../shared/getAsyncConstructedView\";\n\nexport const tasks: Reducer<Task[], CruiseCanvasAction> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const tasksPatch = action.payload.tasks;\n let tasks = state;\n\n if (!Array.isArray(tasksPatch) || tasksPatch.length === 0) {\n return state;\n }\n\n for (const task of tasksPatch) {\n const taskPatch = pick(task, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"plan\",\n \"startTime\",\n \"endTime\",\n \"jobs\",\n \"aiEmployeeId\",\n ]);\n const previousTaskIndex = tasks.findIndex(\n (task) => task.id === taskPatch.id\n );\n const previousTask = tasks[previousTaskIndex];\n taskPatch.jobs = mergeJobs(\n previousTask?.jobs,\n taskPatch.jobs,\n action.workspace,\n taskPatch.aiEmployeeId ?? previousTask?.aiEmployeeId\n );\n\n if (previousTaskIndex === -1) {\n tasks = [...tasks, taskPatch as Task];\n } else {\n if (!isMatch(previousTask, taskPatch)) {\n tasks = [\n ...tasks.slice(0, previousTaskIndex),\n { ...previousTask, ...taskPatch } as Task,\n ...tasks.slice(previousTaskIndex + 1),\n ];\n }\n }\n }\n\n return tasks;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeJobs(\n previousJobs: Job[] | undefined,\n jobsPatch: JobPatch[] | undefined,\n workspace: string,\n aiEmployeeId: string | undefined\n): Job[] {\n let jobs = previousJobs ?? [];\n for (const jobPatch of jobsPatch ?? []) {\n const previousJobIndex =\n jobs?.findIndex((job) => job.id === jobPatch.id) ?? -1;\n const { messages: messagesPatch, toolCall } = jobPatch;\n\n if (typeof toolCall?.arguments === \"string\") {\n toolCall.originalArguments = toolCall.arguments;\n try {\n toolCall.arguments = JSON.parse(toolCall.arguments);\n } catch (e) {\n // Failed to parse toolCall arguments\n toolCall.arguments = {};\n toolCall.argumentsParseFailed = true;\n toolCall.argumentsParseError = e;\n }\n }\n\n if (previousJobIndex === -1) {\n const patch = {\n ...jobPatch,\n };\n if (aiEmployeeId !== undefined) {\n patch.aiEmployeeId = aiEmployeeId;\n }\n\n if (\n patch.toolCall?.name === \"create_view\" &&\n patch.state === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch, workspace);\n if (generatedView) {\n patch.generatedView = generatedView;\n }\n }\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n jobs = [\n ...jobs,\n {\n ...patch,\n messages: mergeMessages(messagesPatch),\n } as Job,\n ];\n } else {\n jobs = [...jobs, patch as Job];\n }\n } else {\n const previousJob = jobs[previousJobIndex];\n const restMessagesPatch: JobPatch = pick(jobPatch, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"instruction\",\n \"toolCall\",\n \"isError\",\n \"hidden\",\n \"startTime\",\n \"endTime\",\n \"requestHumanAction\",\n \"humanAction\",\n \"username\",\n \"cmd\",\n \"mentionedAiEmployeeId\",\n \"hil\",\n ]);\n if (aiEmployeeId !== undefined) {\n restMessagesPatch.aiEmployeeId = aiEmployeeId;\n }\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n restMessagesPatch.messages = mergeMessages([\n ...(previousJob.messages ?? []),\n ...messagesPatch,\n ]);\n }\n\n if (\n !previousJob.generatedView &&\n ([\"create_view\"] as (string | undefined)[]).includes(\n restMessagesPatch.toolCall?.name ?? previousJob.toolCall?.name\n ) &&\n (restMessagesPatch.state ?? previousJob.state) === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch, workspace);\n if (generatedView) {\n restMessagesPatch.generatedView = generatedView;\n }\n }\n\n if (!previousJob.generatedView && !restMessagesPatch.generatedView) {\n const view = getJobStaticDataView(messagesPatch);\n if (view) {\n view.withContexts = {\n RESPONSE: getJobStaticDataResponse(restMessagesPatch.messages!),\n };\n view.asyncConstructedView = getAsyncConstructedView(view, workspace);\n restMessagesPatch.generatedView = view;\n }\n }\n\n if (!isMatch(previousJob, restMessagesPatch)) {\n jobs = [\n ...jobs.slice(0, previousJobIndex),\n {\n ...previousJob,\n ...restMessagesPatch,\n },\n ...jobs.slice(previousJobIndex + 1),\n ];\n }\n }\n }\n return jobs;\n}\n\nfunction mergeMessages(messages: Message[]): Message[] {\n const merged: Message[] = [];\n let previousRole: Message[\"role\"] | undefined;\n for (const message of messages) {\n if (!previousRole || previousRole !== message.role) {\n merged.push({ ...message });\n } else {\n const lastMessage = merged[merged.length - 1];\n lastMessage.parts = [...lastMessage.parts, ...message.parts];\n }\n previousRole = message.role;\n }\n\n for (const message of merged) {\n message.parts = mergeMessageParts(message.parts);\n }\n\n return merged;\n}\n\nfunction mergeMessageParts(parts: Part[]): Part[] {\n const merged: Part[] = [];\n let previousType: Part[\"type\"] | undefined;\n let previousDataType: string | undefined;\n for (const part of parts) {\n if (previousType === \"text\" && part.type === \"text\") {\n const lastPart = merged[merged.length - 1] as TextPart;\n lastPart.text += part.text;\n } else if (\n // Assert: previousType is data when previousDataType is defined\n previousDataType === \"stream\" &&\n part.type === \"data\" &&\n part.data?.type === \"stream\"\n ) {\n const lastPart = merged[merged.length - 1] as DataPart;\n lastPart.data.message += part.data.message;\n } else {\n merged.push({ ...part });\n }\n\n previousType = part.type;\n previousDataType = part.type === \"data\" ? part.data?.type : undefined;\n }\n return merged;\n}\n\nfunction getJobGeneratedView(\n messages: Message[] | undefined,\n workspace: string\n): GeneratedView | undefined {\n if (!messages) {\n return;\n }\n\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"text\") {\n try {\n const view = JSON.parse(part.text) as GeneratedView;\n view.asyncConstructedView = getAsyncConstructedView(\n view,\n workspace\n );\n return view;\n } catch {\n // Do nothing, continue to next part\n }\n }\n }\n }\n }\n}\n\nfunction getJobStaticDataView(\n messages: Message[] | undefined\n): GeneratedView | undefined {\n if (!messages) {\n return;\n }\n\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"data\" && part.data?.type === \"static_data_view\") {\n const view: GeneratedView = {\n viewId: part.data.viewId,\n code: part.data.code,\n from: part.data.from,\n isStaticData: true,\n };\n return view;\n }\n }\n }\n }\n}\n\nfunction getJobStaticDataResponse(messages: Message[]) {\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"text\") {\n try {\n return JSON.parse(part.text);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse static data response as JSON:\", e);\n }\n }\n }\n }\n }\n\n return null;\n}\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type {\n ActivityRun,\n ServiceFlowPatch,\n ServiceFlowRun,\n StageRun,\n} from \"../../shared/interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const serviceFlows: Reducer<ServiceFlowRun[], CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const serviceFlowsPatch = action.payload.serviceFlows;\n let serviceFlows = state;\n\n if (!Array.isArray(serviceFlowsPatch) || serviceFlowsPatch.length === 0) {\n return state;\n }\n\n for (const flow of serviceFlowsPatch) {\n const flowPatch = pick(flow, [\n \"taskId\",\n \"flowInstanceId\",\n \"name\",\n \"spec\",\n \"space\",\n ]) as Omit<ServiceFlowPatch, \"fullSpec\">;\n const previousFlowIndex = serviceFlows.findIndex(\n (f) => f.taskId === flowPatch.taskId\n );\n const previousFlow = serviceFlows[previousFlowIndex];\n flowPatch.spec = mergeSpec(\n previousFlow?.spec,\n flowPatch,\n flow.fullSpec\n );\n\n if (previousFlowIndex === -1) {\n serviceFlows = [...serviceFlows, flowPatch as ServiceFlowRun];\n } else {\n if (!isMatch(previousFlow, flowPatch)) {\n serviceFlows = [\n ...serviceFlows.slice(0, previousFlowIndex),\n { ...previousFlow, ...flowPatch } as ServiceFlowRun,\n ...serviceFlows.slice(previousFlowIndex + 1),\n ];\n }\n }\n }\n\n return serviceFlows;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeSpec(\n previousSpec: StageRun[] | undefined,\n flowPatch: ServiceFlowPatch,\n fullSpec: StageRun[] | undefined\n): StageRun[] {\n if (Array.isArray(fullSpec)) {\n return fullSpec;\n }\n if (!Array.isArray(flowPatch.spec)) {\n return previousSpec ?? [];\n }\n const mergedSpec: StageRun[] = previousSpec ? [...previousSpec] : [];\n\n for (const stagePatch of flowPatch.spec) {\n const stageIndex = mergedSpec.findIndex((s) => s.name === stagePatch.name);\n if (stageIndex === -1) {\n const stage = { ...stagePatch };\n stage.serviceFlowActivities ??= [];\n mergedSpec.push(stage as StageRun);\n } else {\n const activities = mergeActivities(\n mergedSpec[stageIndex].serviceFlowActivities,\n stagePatch.serviceFlowActivities\n );\n\n mergedSpec[stageIndex] = {\n ...mergedSpec[stageIndex],\n ...stagePatch,\n serviceFlowActivities: activities,\n };\n }\n }\n\n return mergedSpec;\n}\n\nfunction mergeActivities(\n previousActivities: ActivityRun[] | undefined,\n activitiesPatch: ActivityRun[] | undefined\n): ActivityRun[] {\n let activities = previousActivities ?? [];\n\n if (!Array.isArray(activitiesPatch) || activitiesPatch.length === 0) {\n return activities;\n }\n\n for (const activityPatch of activitiesPatch) {\n const activityIndex = activities.findIndex((activity) =>\n activity.taskId\n ? activity.taskId === activityPatch.taskId\n : activity.name === activityPatch.name\n );\n\n if (activityIndex === -1) {\n activities = [...activities, activityPatch];\n } else {\n activities = [\n ...activities.slice(0, activityIndex),\n { ...activities[activityIndex], ...activityPatch },\n ...activities.slice(activityIndex + 1),\n ];\n }\n }\n\n return activities;\n}\n","import { Reducer } from \"react\";\nimport type { CruiseCanvasAction, CruiseCanvasState } from \"./interfaces\";\nimport { tasks } from \"./tasks\";\nimport { conversation } from \"./conversation\";\nimport { errors } from \"./errors\";\nimport { serviceFlows } from \"./serviceFlows\";\n\ntype ReducersMapObject<S, A> = {\n [K in keyof S]: Reducer<S[K], A>;\n};\n\nfunction combineReducers<S, A>(\n reducers: ReducersMapObject<S, A>\n): Reducer<S, A> {\n return ((state, action) =>\n Object.fromEntries(\n Object.entries<Reducer<any, A>>(reducers).map(([key, value]) => [\n key,\n value(state[key as keyof S], action),\n ])\n )) as Reducer<S, A>;\n}\n\nexport const rootReducer = combineReducers<\n CruiseCanvasState,\n CruiseCanvasAction\n>({\n conversation,\n tasks,\n errors,\n serviceFlows,\n});\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport type { ConversationBaseDetail } from \"../../shared/interfaces\";\n\nexport const conversation: Reducer<\n ConversationBaseDetail | null,\n CruiseCanvasAction\n> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const patch = pick(action.payload, [\n \"id\",\n \"state\",\n \"title\",\n \"startTime\",\n \"endTime\",\n \"projectId\",\n ]);\n\n return (\n state && isMatch(state, patch) ? state : { ...state, ...patch }\n ) as ConversationBaseDetail;\n }\n\n case \"reset\":\n return null;\n\n case \"finished\":\n if (state) {\n return { ...state, finished: true };\n }\n return state;\n }\n return state;\n};\n","import type { Reducer } from \"react\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport type { ConversationError } from \"../../shared/interfaces\";\n\nexport const errors: Reducer<ConversationError[], CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const { error, tasks } = action.payload;\n const lastError = state[state.length - 1];\n\n let taskId: string | undefined;\n if (tasks?.length) {\n taskId = tasks[tasks.length - 1].id;\n } else {\n taskId = lastError?.taskId;\n }\n\n if (typeof error === \"string\" && error) {\n return state.slice(0, -1).concat(\n {\n taskId,\n error,\n },\n { taskId }\n );\n }\n\n if (lastError) {\n if (lastError.error) {\n return state.concat({ taskId });\n }\n if (lastError.taskId !== taskId) {\n return state.slice(0, -1).concat({ taskId });\n }\n return state;\n }\n\n return taskId ? [{ taskId }] : state;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n","// istanbul ignore file\nimport { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport { getBasePath, handleHttpError } from \"@next-core/runtime\";\nimport { rootReducer } from \"./reducers\";\nimport type {\n ConversationPatch,\n ExtraChatPayload,\n RequestStore,\n} from \"../shared/interfaces\";\n\nconst MINIMAL_DELAY = 500;\n\nexport function useConversationDetail(\n conversationId: string,\n initialRequest?: RequestStore | null,\n replay?: boolean,\n replayDelay?: number\n) {\n const [{ conversation, tasks, serviceFlows, errors }, dispatch] = useReducer(\n rootReducer,\n null,\n () => ({\n conversation: null,\n tasks: [],\n serviceFlows: [],\n errors: [],\n })\n );\n\n const humanInputRef =\n useRef<\n (input: string | null, action?: string, extra?: ExtraChatPayload) => void\n >();\n\n const replayListRef = useRef<ConversationPatch[]>([]);\n const replayRef = useRef(replay);\n const replayDelayRef = useRef((replayDelay ?? 2) * 1000);\n const replayResolveRef = useRef<(() => void) | null>(null);\n\n const skipToResults = useCallback(() => {\n replayRef.current = false;\n if (replayResolveRef.current) {\n replayResolveRef.current();\n replayResolveRef.current = null;\n }\n }, []);\n\n const watchAgain = useCallback(async () => {\n replayRef.current = true;\n dispatch({ type: \"reset\" });\n\n let isInitial = true;\n let previousTime: number | undefined;\n for (const value of replayListRef.current) {\n if (replayRef.current) {\n let delay = replayDelayRef.current;\n if (value.time && previousTime) {\n delay = Math.min(\n Math.max(MINIMAL_DELAY, (value.time - previousTime) * 1000),\n delay\n );\n }\n previousTime = value.time;\n if (!isInitial) {\n await new Promise<void>((resolve) => {\n replayResolveRef.current = resolve;\n setTimeout(resolve, delay);\n });\n replayResolveRef.current = null;\n }\n }\n\n dispatch({ type: \"sse\", payload: value, workspace: conversationId });\n isInitial = false;\n }\n dispatch({ type: \"finished\" });\n }, [conversationId]);\n\n useEffect(() => {\n dispatch({ type: \"reset\" });\n replayListRef.current = [];\n humanInputRef.current = undefined;\n\n let ignore = false;\n let requesting = false;\n let ctrl: AbortController | undefined;\n\n const makeRequest = async (\n content: string | null,\n action?: string,\n extra?: ExtraChatPayload\n ) => {\n if (requesting) {\n return;\n }\n\n requesting = true;\n ctrl = new AbortController();\n try {\n const sseRequest = await (content === null && !action\n ? createSSEStream<ConversationPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations/${conversationId}/stream`,\n {\n signal: ctrl.signal,\n }\n )\n : createSSEStream<ConversationPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations/${conversationId}/messages`,\n {\n signal: ctrl.signal,\n method: \"POST\",\n body: JSON.stringify(\n action ? { action } : { content, ...extra }\n ),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n ));\n const stream = await sseRequest;\n let isInitial = true;\n let previousTime: number | undefined;\n for await (const value of stream) {\n if (ignore) {\n requesting = false;\n return;\n }\n\n if (replayRef.current) {\n let delay = replayDelayRef.current;\n if (value.time && previousTime) {\n delay = Math.min(\n Math.max(MINIMAL_DELAY, (value.time - previousTime) * 1000),\n delay\n );\n }\n previousTime = value.time;\n\n if (!isInitial) {\n await new Promise<void>((resolve) => {\n replayResolveRef.current = resolve;\n setTimeout(resolve, delay);\n });\n replayResolveRef.current = null;\n }\n }\n\n replayListRef.current.push(value);\n dispatch({ type: \"sse\", payload: value, workspace: conversationId });\n isInitial = false;\n }\n dispatch({ type: \"finished\" });\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"sse failed\", e);\n handleHttpError(e);\n } finally {\n requesting = false;\n }\n };\n\n humanInputRef.current = async (\n content: string | null,\n action?: string,\n extra?: ExtraChatPayload\n ) => {\n makeRequest(content, action, extra);\n };\n\n if (initialRequest?.conversationId === conversationId) {\n makeRequest(initialRequest.content, undefined, {\n cmd: initialRequest.cmd,\n files: initialRequest.files,\n aiEmployeeId: initialRequest.aiEmployeeId,\n });\n } else {\n makeRequest(null);\n }\n\n return () => {\n ignore = true;\n ctrl?.abort();\n };\n }, [conversationId, initialRequest]);\n\n return {\n conversation,\n tasks,\n serviceFlows,\n errors,\n humanInputRef,\n skipToResults,\n watchAgain,\n };\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.progress-line--CX_xuAHC{--breathing-color:rgba(205,205,217,0.7);--breathing-color-2:rgba(205,205,217,0);display:flex;flex-direction:column}.progress-line--CX_xuAHC .step--YXd66tSR{position:relative;display:flex;align-items:center;padding:10px 4px 10px 16px;color:rgba(0,0,0,0.5)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5{position:absolute;top:0;bottom:0;left:14px;width:1px}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .line--BUSBjzxD{width:1px;height:100%;background:linear-gradient(172deg,rgba(205,205,217,0) 0%,#cdcdd9 46%,rgba(205,205,217,0) 100%)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .dot--TPMEta87{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:5px;height:5px;background:rgba(205,205,217,1);border-radius:50%}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF{padding:3px;margin:0 8px 0 12px;border-radius:10px;line-height:1;background:#ffffff}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .count--RdZcMYhZ{font-weight:400}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .total--BKoLTm8c{opacity:0.6}.progress-line--CX_xuAHC .step--YXd66tSR .description--AyfMh1_M{flex:1;color:#999}.progress-line--CX_xuAHC .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{font-weight:600}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .line--BUSBjzxD{background:linear-gradient(172deg,rgba(242,76,37,0) 0%,rgba(242,76,37,0.3) 47%,rgba(242,76,37,0) 100%)}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .dot--TPMEta87{background:rgba(255,154,120,1)}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF{background:#ffd6d6}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{color:#f44336}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"progress-line\": `progress-line--CX_xuAHC`,\n\t\"step\": `step--YXd66tSR`,\n\t\"axis\": `axis--T4nVxQt5`,\n\t\"line\": `line--BUSBjzxD`,\n\t\"dot\": `dot--TPMEta87`,\n\t\"progress\": `progress--alc7SspF`,\n\t\"count\": `count--RdZcMYhZ`,\n\t\"total\": `total--BKoLTm8c`,\n\t\"description\": `description--AyfMh1_M`,\n\t\"failed\": `failed--Q9TADo_k`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FloatingButton.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FloatingButton.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n SEND_MESSAGE = \"SEND_MESSAGE\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE = \"CONFIRM_TO_TERMINATE_THE_TASK_TITLE\",\n}\n\nconst en: Locale = {\n SEND_MESSAGE: \"Send message\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"Are you sure to terminate the task?\",\n};\n\nconst zh: Locale = {\n SEND_MESSAGE: \"发送消息\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"确定终止任务吗?\",\n};\n\nexport const NS = \"bricks/ai-portal/ChatBox\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport { showDialog, WrappedChatInput } from \"../bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { TaskContext } from \"../TaskContext\";\nimport type { ConversationState } from \"../interfaces\";\n\ninitializeI18n(NS, locales);\n\nexport interface ChatBoxProps {\n state: ConversationState | undefined;\n canChat: boolean;\n}\n\nexport function ChatBox({ state, canChat }: ChatBoxProps): JSX.Element {\n const { humanInput, onTerminate, supports, uploadOptions } =\n useContext(TaskContext);\n\n const [terminating, setTerminating] = useState(false);\n\n useEffect(() => {\n setTerminating(false);\n }, [state]);\n\n const handleTerminate = useCallback(async () => {\n try {\n await showDialog({\n type: \"confirm\",\n title: t(K.CONFIRM_TO_TERMINATE_THE_TASK_TITLE),\n content: \"\",\n });\n } catch {\n return;\n }\n onTerminate();\n setTerminating(true);\n }, [onTerminate]);\n\n return (\n <WrappedChatInput\n placeholder={t(K.SEND_MESSAGE)}\n autoFocus\n submitDisabled={!canChat}\n supportsTerminate={supports?.intercept}\n terminating={terminating}\n uploadOptions={uploadOptions}\n onChatSubmit={(e) => {\n const { content, ...extra } = e.detail;\n humanInput(content, undefined, extra);\n }}\n onTerminate={handleTerminate}\n />\n );\n}\n","import { getRemoteTsxParserWorker } from \"./workers/tsxParser.js\";\nimport type { GeneratedView, ParsedView } from \"./interfaces.js\";\n\nexport async function getAsyncConstructedView(\n generatedView: GeneratedView,\n workspace: string | undefined\n): Promise<ParsedView | null> {\n try {\n const worker = await getRemoteTsxParserWorker();\n const result = await worker.parseView(generatedView.code, {\n workspace,\n withContexts: generatedView.withContexts\n ? Object.keys(generatedView.withContexts)\n : undefined,\n });\n return {\n ...result,\n viewId: generatedView.viewId,\n withContexts: generatedView.withContexts,\n };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse generated view:\", error);\n return null;\n }\n}\n","import { createContext, type Dispatch } from \"react\";\nimport type { FeedbackDetail } from \"../cruise-canvas/interfaces\";\nimport type {\n ActiveDetail,\n ActiveImages,\n ConversationError,\n ConversationState,\n ExampleProject,\n ExtraChatPayload,\n FileInfo,\n GeneratedView,\n Job,\n ShowCaseType,\n Task,\n UploadOptions,\n} from \"./interfaces\";\n\nexport interface TaskContextValue {\n conversationId?: string;\n conversationState?: ConversationState;\n tasks: Task[];\n errors: ConversationError[];\n workspace?: string;\n previewUrlTemplate?: string;\n replay?: boolean;\n showCases?: ShowCaseType[];\n exampleProjects?: ExampleProject[];\n uploadOptions?: UploadOptions;\n\n humanInput: (\n input: string | null,\n action?: string,\n extra?: ExtraChatPayload\n ) => void;\n onShare: () => void;\n onTerminate: () => void;\n supports?: Record<string, boolean>;\n\n activeExpandedViewJobId: string | null;\n setActiveExpandedViewJobId: Dispatch<React.SetStateAction<string | null>>;\n activeDetail: ActiveDetail | null;\n setActiveDetail: Dispatch<React.SetStateAction<ActiveDetail | null>>;\n subActiveDetail: ActiveDetail | null;\n setSubActiveDetail: Dispatch<React.SetStateAction<ActiveDetail | null>>;\n\n submittingFeedback: boolean;\n submittedFeedback: boolean;\n onSubmitFeedback: (detail: FeedbackDetail) => void;\n setShowFeedback: Dispatch<React.SetStateAction<boolean>>;\n\n showJsxEditor?: boolean;\n activeJsxEditorJob?: Job;\n setActiveJsxEditorJob?: Dispatch<React.SetStateAction<Job | undefined>>;\n manuallyUpdatedViews?: Map<string, GeneratedView>;\n updateView?: (jobId: string, view: GeneratedView) => void;\n showFeedbackOnView?: boolean;\n onFeedbackOnView?: (viewId: string) => void;\n feedbackDoneViews?: Set<string>;\n\n skipToResults?: () => void;\n watchAgain?: () => void;\n tryItOut?: () => void;\n separateInstructions?: boolean;\n activeFile: FileInfo | null;\n setActiveFile: Dispatch<React.SetStateAction<FileInfo | null>>;\n activeImages: ActiveImages | null;\n setActiveImages: Dispatch<React.SetStateAction<ActiveImages | null>>;\n}\n\nexport const TaskContext = createContext<TaskContextValue>({\n tasks: [],\n errors: [],\n humanInput: () => {},\n onShare: () => {},\n onTerminate: () => {},\n activeExpandedViewJobId: null,\n setActiveExpandedViewJobId: () => {},\n activeDetail: null,\n setActiveDetail: () => {},\n subActiveDetail: null,\n setSubActiveDetail: () => {},\n submittingFeedback: false,\n submittedFeedback: false,\n onSubmitFeedback: () => {},\n setShowFeedback: () => {},\n activeFile: null,\n setActiveFile: () => {},\n activeImages: null,\n setActiveImages: () => {},\n});\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ReadableCommand.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ReadableCommand.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport type { CommandPayload } from \"../interfaces\";\nimport styles from \"./ReadableCommand.module.css\";\nimport { fetchEmployee } from \"../fetchEmployee\";\n\nexport interface ReadableCommandProps {\n cmd?: CommandPayload;\n mentionedAiEmployeeId?: string;\n size?: \"medium\" | \"small\";\n}\n\nexport function ReadableCommand({\n cmd,\n mentionedAiEmployeeId /* , size */,\n}: ReadableCommandProps) {\n const [content, setContent] = useState(() =>\n getInitialContent(cmd, mentionedAiEmployeeId)\n );\n\n useEffect(() => {\n setContent(getInitialContent(cmd, mentionedAiEmployeeId));\n if (!cmd) {\n let ignore = false;\n (async () => {\n const employee = await fetchEmployee(mentionedAiEmployeeId!);\n if (ignore || !employee) return;\n setContent(`@${employee.name}`);\n })();\n return () => {\n ignore = true;\n };\n }\n }, [cmd, mentionedAiEmployeeId]);\n\n return (\n <>\n <span\n className={classNames(styles.command, {\n [styles.small]: true,\n })}\n >\n {content}\n </span>{\" \"}\n </>\n );\n}\n\nfunction getInitialContent(\n cmd?: CommandPayload,\n mentionedAiEmployeeId?: string\n): string {\n if (cmd) {\n switch (cmd.type) {\n case \"serviceFlowStarting\":\n return `/start service flow${[\n cmd.serviceFlowStarting.flowName,\n cmd.serviceFlowStarting.spaceName,\n ]\n .filter(Boolean)\n .slice(0, 1)\n .map((name) => `: ${name}`)\n .join(\"\")}`;\n default:\n return `/${cmd.type}`;\n }\n }\n return `@${mentionedAiEmployeeId!}`;\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-replay--RJPyOwC6{width:var(--cruise-canvas-node-width-large);max-width:100%;background:rgba(255,255,255,0.5);border-radius:12px;border:1px solid rgba(255,255,255,0.4);padding:4px}.finished--DCI6ewIN:not(.chat--YJT4RmwA){max-width:90vw}.node-replay--RJPyOwC6.chat--YJT4RmwA{margin-top:14px}.bar--Pae7qP58{background:rgba(184,187,205,0.3);border-radius:8px;border:1px solid rgba(255,255,255,0.4);-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);height:54px;display:flex;align-items:center;justify-content:space-between;padding:0 16px}.buttons--m0009sdd{display:flex;align-items:center;gap:8px}.label--VlLhkZeC{font-weight:500}.cases--czpvOoLX,\n.projects--W1KI5fUu{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.content--rFWHJyEy{padding:0 16px 16px}.heading--jlFUCX5n{margin:26px 0 10px;color:rgba(0,0,0,0.6);line-height:20px}.tips--FzM5aSiq{font-size:12px;line-height:20px;color:rgba(0,0,0,0.35);margin:-3px 0 10px}.project--BSu5VIGZ{width:100%}.project--BSu5VIGZ::part(link){height:48px;background:rgba(255,255,255,0.5);border-radius:12px;border:1px solid rgba(255,255,255,0.4);display:flex;align-items:center;padding:0 16px;gap:6px;font-weight:500;color:#262626}.project--BSu5VIGZ::part(link):hover{color:var(--elevo-color-brand)}.tag--Hp8eFjie{display:inline-block;padding:0 4px;background:rgba(37,64,255,0.1);border-radius:4px;color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-replay\": `node-replay--RJPyOwC6`,\n\t\"finished\": `finished--DCI6ewIN`,\n\t\"chat\": `chat--YJT4RmwA`,\n\t\"bar\": `bar--Pae7qP58`,\n\t\"buttons\": `buttons--m0009sdd`,\n\t\"label\": `label--VlLhkZeC`,\n\t\"cases\": `cases--czpvOoLX`,\n\t\"projects\": `projects--W1KI5fUu`,\n\t\"content\": `content--rFWHJyEy`,\n\t\"heading\": `heading--jlFUCX5n`,\n\t\"tips\": `tips--FzM5aSiq`,\n\t\"project\": `project--BSu5VIGZ`,\n\t\"tag\": `tag--Hp8eFjie`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.toolbar--ELlNUAti{position:absolute;display:flex;align-items:center;padding:3px 5px;-webkit-user-select:none;user-select:none;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3)}.divider--JeH8feaX{background:rgba(0,0,0,0.15);width:1px;height:16px}.toolbar--ELlNUAti > :not(:last-child){margin-right:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"toolbar\": `toolbar--ELlNUAti`,\n\t\"divider\": `divider--JeH8feaX`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.command--PjYZ4uqH{display:inline-block;background:rgba(37,64,255,0.06);border-radius:8px;color:#2540ff;padding:4px 6px;line-height:22px}.small--dUc9qGKv{padding:2px 6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"command\": `command--PjYZ4uqH`,\n\t\"small\": `small--dUc9qGKv`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.preview--sJLzdFVa{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:#f9fafb;display:flex;flex-direction:column;align-items:center}.header--TIurJRMB{display:flex;align-items:center;justify-content:center;padding:16px 16px 80px}.body--DbDekAy2{display:flex;align-items:center;flex:1;min-height:0;width:100%;padding:0 16px}.aside--H9sLGJQ1{padding:0 16px}.aside--H9sLGJQ1 button{width:36px;height:36px;color:#595959}.content--x9hjJT92{flex:1;min-width:0;height:100%;overflow:hidden;display:flex;align-items:center;justify-content:center}.content--x9hjJT92 img{max-width:100%;max-height:100%;object-fit:contain}.footer--pNM7uUz2{display:flex;justify-content:center;overflow-x:auto;width:100%}.images--Aro5zeU2{list-style:none;margin:0;padding:38px 0;display:flex;align-items:center;height:154px;gap:8px}.images--Aro5zeU2 li{height:60px;width:60px;border:1px solid #e8e8e8;display:flex;align-items:center;justify-content:center;border-radius:8px;overflow:hidden;opacity:0.5;cursor:pointer;transition:width 0.15s ease-in-out,height 0.15s ease-in-out}.images--Aro5zeU2 li.active--zWUDZJUd{opacity:1;height:78px;width:78px}.images--Aro5zeU2 li:not(.active--zWUDZJUd):hover{opacity:0.7}.images--Aro5zeU2 img{max-height:100%;max-width:100%;object-fit:contain}.close--pVovgmNU{position:absolute;top:16px;right:16px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"preview\": `preview--sJLzdFVa`,\n\t\"header\": `header--TIurJRMB`,\n\t\"body\": `body--DbDekAy2`,\n\t\"aside\": `aside--H9sLGJQ1`,\n\t\"content\": `content--x9hjJT92`,\n\t\"footer\": `footer--pNM7uUz2`,\n\t\"images\": `images--Aro5zeU2`,\n\t\"active\": `active--zWUDZJUd`,\n\t\"close\": `close--pVovgmNU`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n UNTITLED = \"UNTITLED\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX\",\n DOWNLOAD = \"DOWNLOAD\",\n SHOW_ALL_FILES = \"SHOW_ALL_FILES\",\n COLLAPSE = \"COLLAPSE\",\n}\n\nconst en: Locale = {\n UNTITLED: \"Untitled\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX:\n \"This file is unpreviewable currently, you can\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"and view it locally.\",\n DOWNLOAD: \"Download\",\n SHOW_ALL_FILES: \"Show all files\",\n COLLAPSE: \"Collapse\",\n};\n\nconst zh: Locale = {\n UNTITLED: \"未命名\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX: \"该类型文件暂不支持预览,您可以\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"查看。\",\n DOWNLOAD: \"下载\",\n SHOW_ALL_FILES: \"显示所有文件\",\n COLLAPSE: \"收起\",\n};\n\nexport const NS = \"bricks/ai-portal/FilePreview\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.expanded-view--Pl3PL2nR{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:rgba(247,248,250,0.5);-webkit-backdrop-filter:blur(74px);backdrop-filter:blur(74px);padding:106px var(--page-padding-right) 40px var(--page-padding-left);overflow-y:auto;display:flex;flex-direction:column;align-items:center}.nav--dLWwzH3E{position:absolute;top:39px;left:50%;transform:translate(-50%,0);list-style:none;margin:0 0 25px;padding:4px;display:flex;justify-content:start;align-items:center;background:rgba(2,0,102,0.05);box-shadow:inset 0px 1px 2px 0px #cdd1d7;border-radius:21px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}.nav-button--zv2Yj10m{display:flex;align-items:center;height:34px;padding:0 26px;background:none;border:none;color:#595959;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.nav-button--zv2Yj10m:not(:last-child){margin-right:12px}.nav-button--zv2Yj10m.active--MHyqtaKu{background:rgba(255,255,255,0.6);border-radius:20px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px);color:var(--elevo-color-brand);text-shadow:-0.02ex 0 0 currentColor,0.02ex 0 0 currentColor}.nav-button--zv2Yj10m:hover{color:var(--elevo-color-brand)}.body--edodw95r{width:100%;max-width:1556px}.body--edodw95r.small--Y90AL_bt{max-width:804px}.loading--UxfFogUY{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.buttons--ZZYyY2LU{position:absolute;top:24px;right:24px;display:flex;gap:12px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"expanded-view\": `expanded-view--Pl3PL2nR`,\n\t\"nav\": `nav--dLWwzH3E`,\n\t\"nav-button\": `nav-button--zv2Yj10m`,\n\t\"active\": `active--MHyqtaKu`,\n\t\"body\": `body--edodw95r`,\n\t\"small\": `small--Y90AL_bt`,\n\t\"loading\": `loading--UxfFogUY`,\n\t\"buttons\": `buttons--ZZYyY2LU`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.view-toolbar--kVhd3X5H{display:flex;align-items:center;gap:8px}.button--f3fGXpYl{display:flex;background:none;border:none;padding:3px;cursor:pointer;color:#595959}.button-lucide--J7U9FEo_{font-size:16px;padding:2px}.button--f3fGXpYl:hover{color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"view-toolbar\": `view-toolbar--kVhd3X5H`,\n\t\"button\": `button--f3fGXpYl`,\n\t\"button-lucide\": `button-lucide--J7U9FEo_`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./toolbar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./toolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CreatedView.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CreatedView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport classNames from \"classnames\";\nimport { uniqueId } from \"lodash\";\nimport { convertView } from \"@next-shared/tsx-converter\";\nimport type { ModulePartOfComponent } from \"@next-shared/tsx-parser\";\nimport styles from \"./CreatedView.module.css\";\nimport sharedStyles from \"../../cruise-canvas/shared.module.css\";\nimport type { Job, ParsedView } from \"../../shared/interfaces\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { TaskContext } from \"../TaskContext\";\nimport { ICON_LOADING } from \"../constants\";\nimport { ViewToolbar } from \"./ViewToolbar\";\nimport type { BrickConf } from \"@next-core/types\";\n\nexport interface CreatedViewProps {\n job: Job;\n noHeading?: boolean;\n onSizeChange?: (size: \"medium\" | \"large\") => void;\n}\n\nexport function CreatedView({\n job,\n noHeading,\n onSizeChange,\n}: CreatedViewProps): JSX.Element {\n const rootId = useMemo(() => uniqueId(), []);\n const { workspace, manuallyUpdatedViews } = useContext(TaskContext);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const generatedView = manuallyUpdatedViews?.get(job.id) ?? job.generatedView!;\n const [view, setView] = useState<ParsedView | null>(null);\n const canFeedback =\n !!view && !!generatedView.viewId && generatedView.from !== \"config\";\n\n useEffect(() => {\n setView(null);\n let ignore = false;\n generatedView.asyncConstructedView?.then((view) => {\n if (!ignore) {\n setView(view);\n }\n });\n return () => {\n ignore = true;\n };\n }, [generatedView]);\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n const [sizeLarge, setSizeLarge] = useState(false);\n\n useEffect(() => {\n setLoading(true);\n if (!view) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertView(view, {\n rootId,\n workspace,\n withContexts: view.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context, functions, templates } = convertedView;\n\n setSizeLarge(preferSizeLarge(brick));\n\n await rootRef.current?.render(brick, { context, functions, templates });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, workspace, view]);\n\n useEffect(() => {\n onSizeChange?.(sizeLarge ? \"large\" : \"medium\");\n }, [onSizeChange, sizeLarge]);\n\n const viewTitle = useMemo(\n () => (view?.entry?.defaultExport as ModulePartOfComponent)?.title,\n [view]\n );\n\n return (\n <>\n {noHeading ? null : (\n <div className={styles.heading}>\n <div\n className={classNames(styles.title, {\n [sharedStyles[\"shine-text\"]]: view && loading,\n })}\n >\n {view ? viewTitle : <WrappedIcon {...ICON_LOADING} />}\n </div>\n <ViewToolbar job={job} canFeedback={canFeedback} />\n </div>\n )}\n <div data-root-id={rootId} ref={ref} />\n </>\n );\n}\n\nfunction traverseBricks(\n bricks: BrickConf[],\n callback: (bricks: BrickConf) => boolean\n) {\n for (const brick of bricks) {\n if (callback(brick)) {\n break;\n }\n if (Array.isArray(brick.children)) {\n traverseBricks(brick.children, callback);\n }\n }\n}\n\nfunction preferSizeLarge(brick: BrickConf | BrickConf[]): boolean {\n let large = false;\n traverseBricks(([] as BrickConf[]).concat(brick), (b) => {\n if (b.brick === \"eo-next-table\") {\n large = true;\n return true;\n }\n if (\n b.brick === \"div\" &&\n (b.properties?.dataset as Record<string, string>)?.component ===\n \"dashboard\"\n ) {\n const widgets = b.children;\n if (Array.isArray(widgets) && widgets.length >= 7) {\n large = true;\n return true;\n }\n }\n return false;\n });\n return large;\n}\n","import { useMemo } from \"react\";\nimport type { ActivityWithFlow, ServiceFlowRun } from \"./interfaces\";\n\nexport function useFlowAndActivityMap(serviceFlows: ServiceFlowRun[]) {\n return useMemo(() => {\n const flowMap = new Map<string, ServiceFlowRun>();\n const activityMap = new Map<string, ActivityWithFlow>();\n\n for (const flow of serviceFlows) {\n if (flow.taskId) {\n flowMap.set(flow.taskId, flow);\n }\n for (const stage of flow.spec) {\n for (const activity of stage.serviceFlowActivities) {\n if (activity.taskId) {\n activityMap.set(activity.taskId, { activity, flow });\n }\n }\n }\n }\n\n return { flowMap, activityMap };\n }, [serviceFlows]);\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ViewToolbar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ViewToolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n FULLSCREEN = \"FULLSCREEN\",\n FEEDBACK = \"FEEDBACK\",\n OPEN_PREVIEW = \"OPEN_PREVIEW\",\n}\n\nconst en: Locale = {\n FULLSCREEN: \"Fullscreen\",\n FEEDBACK: \"Feedback\",\n OPEN_PREVIEW: \"Open preview\",\n};\n\nconst zh: Locale = {\n FULLSCREEN: \"全屏\",\n FEEDBACK: \"反馈\",\n OPEN_PREVIEW: \"打开预览\",\n};\n\nexport const NS = \"bricks/ai-portal/CreatedView\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext } from \"react\";\nimport { getBasePath } from \"@next-core/runtime\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./ViewToolbar.module.css\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { TaskContext } from \"../TaskContext\";\nimport { ICON_FEEDBACK } from \"../constants\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\nimport { parseTemplate } from \"../parseTemplate\";\nimport type { Job } from \"../interfaces\";\n\ninitializeI18n(NS, locales);\n\nexport interface ViewToolbarProps {\n job: Job;\n canFeedback?: boolean;\n}\n\nexport function ViewToolbar({\n job,\n canFeedback: propCanFeedback,\n}: ViewToolbarProps) {\n const {\n previewUrlTemplate,\n showJsxEditor,\n setActiveExpandedViewJobId,\n setActiveJsxEditorJob,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\n\n const generatedView = manuallyUpdatedViews?.get(job.id) ?? job.generatedView!;\n const feedbackDone =\n useViewFeedbackDone(generatedView.viewId, showFeedbackOnView) ||\n feedbackDoneViews?.has(generatedView.viewId);\n const canFeedback =\n propCanFeedback &&\n !!generatedView.viewId &&\n generatedView.from !== \"config\";\n\n const handleExpandClick = useCallback(() => {\n setActiveExpandedViewJobId(job.id);\n }, [job.id, setActiveExpandedViewJobId]);\n\n return (\n <div className={styles[\"view-toolbar\"]}>\n {showJsxEditor && (\n <button\n className={styles.button}\n onClick={() => {\n setActiveJsxEditorJob?.(job);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"bug\" />\n </button>\n )}\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <button\n className={`${styles.button} ${styles[\"button-lucide\"]}`}\n title={t(K.FEEDBACK)}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n >\n <WrappedIcon {...ICON_FEEDBACK} />\n </button>\n )}\n {!!(\n generatedView.viewId &&\n !generatedView.withContexts &&\n previewUrlTemplate\n ) && (\n <button\n className={`${styles.button} ${styles[\"button-lucide\"]}`}\n title={t(K.OPEN_PREVIEW)}\n onClick={() => {\n window.open(\n `${getBasePath().slice(0, -1)}${parseTemplate(\n previewUrlTemplate,\n {\n viewId: generatedView.viewId,\n }\n )}`,\n \"_blank\"\n );\n }}\n >\n <WrappedIcon lib=\"lucide\" icon=\"external-link\" />\n </button>\n )}\n <button\n className={styles.button}\n title={t(K.FULLSCREEN)}\n onClick={handleExpandClick}\n >\n <WrappedIcon lib=\"easyops\" icon=\"expand\" />\n </button>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.human-action--WMMvJhMD{margin-top:22px}.canvas--mQCtCDkd{display:flex;justify-content:center;align-items:center;padding:24px 12px;background:rgba(62,67,102,0.05);box-shadow:0px 1px 0px 0px rgba(255,255,255,0.5);border-radius:9px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"human-action\": `human-action--WMMvJhMD`,\n\t\"canvas\": `canvas--mQCtCDkd`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.shine-text--t2t9tIJp{color:transparent;background:linear-gradient(to right,var(--shine-text-color) 0%,var(--shine-text-color) 40%,var(--shine-text-highlight-color) 50%,var(--shine-text-color) 60%,var(--shine-text-color) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:shineText--ycIJ4nxc 2s infinite linear}@keyframes shineText--ycIJ4nxc{0%{background-position:-50% 50%}100%{background-position:-250% 50%}}.markdown--t5EHw6k4 a{color:var(--elevo-color-brand)}.markdown--t5EHw6k4 a:hover{color:var(--elevo-color-brand-hover)}.markdown--t5EHw6k4 a:active{color:var(--elevo-color-brand-active)}.markdown--t5EHw6k4 .shiki{font-family:\"Fira Code\",\"Fira Mono\",Menlo,Consolas,\"DejaVu Sans Mono\",monospace;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none;font-size:13px;padding:1em;margin:0.5em 0;overflow-x:auto;border-radius:9px}.markdown--t5EHw6k4 .shiki.light-plus{background:hsl(230,1%,98%)!important}.markdown--t5EHw6k4 table{width:100%;overflow-x:auto;border-collapse:collapse}.markdown--t5EHw6k4 tr{border-top:1px solid #ccd1de}.markdown--t5EHw6k4 td,.markdown--t5EHw6k4 th{border:1px solid #ccd1de;padding:6px 13px}.markdown--t5EHw6k4{overflow-wrap:break-word}.markdown--t5EHw6k4:not(:first-child){margin-top:6px}.markdown--t5EHw6k4 p{margin:1em 0}.markdown--t5EHw6k4 > :first-child,\n.markdown-wrapper--TGg3xHyX > :first-child{margin-top:0}.markdown--t5EHw6k4 > :last-child,\n.markdown-wrapper--TGg3xHyX > :last-child{margin-bottom:0}.table-container--hekbaxrD{padding:8px 8px 10px;border-radius:12px;border:1px solid #e2e2ec;background:#ffffff}.table-container--hekbaxrD:not(:first-child){margin-top:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"shine-text\": `shine-text--t2t9tIJp`,\n\t\"shineText\": `shineText--ycIJ4nxc`,\n\t\"markdown\": `markdown--t5EHw6k4`,\n\t\"markdown-wrapper\": `markdown-wrapper--TGg3xHyX`,\n\t\"table-container\": `table-container--hekbaxrD`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport { useEffect, useState } from \"react\";\n\nconst cache = new Map<string, Promise<boolean>>();\n\nexport function useViewFeedbackDone(\n viewId: string | undefined,\n showFeedbackOnView?: boolean\n) {\n const [done, setDone] = useState(true);\n\n useEffect(() => {\n if (!viewId || !showFeedbackOnView) {\n setDone(true);\n return;\n }\n let promise = cache.get(viewId);\n if (promise === undefined) {\n promise = fetchViewFeedbackDone(viewId);\n cache.set(viewId, promise);\n }\n let ignore = false;\n promise.then((value) => {\n if (!ignore) {\n setDone(value);\n }\n });\n return () => {\n ignore = true;\n };\n }, [viewId, showFeedbackOnView]);\n\n return done;\n}\n\nasync function fetchViewFeedbackDone(viewId: string): Promise<boolean> {\n const response = await InstanceApi_getDetail(\n \"LLM_WEB_VIEW_INFO@EASYOPS\",\n viewId,\n {\n fields: \"feedback.instanceId\",\n },\n {\n priority: \"low\",\n }\n );\n return !!response?.feedback?.length;\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n SUBMIT = \"SUBMIT\",\n RESET = \"RESET\",\n FEEDBACK_NODE_TITLE = \"FEEDBACK_NODE_TITLE\",\n PROBLEM_FEEDBACK = \"PROBLEM_FEEDBACK\",\n PROBLEM_FEEDBACK_PLACEHOLDER = \"PROBLEM_FEEDBACK_PLACEHOLDER\",\n IS_THE_TASK_PLAN_COMPLETE = \"IS_THE_TASK_PLAN_COMPLETE\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT = \"IS_THE_TASK_PLAN_LOGICALLY_CORRECT\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE = \"ARE_THE_TASK_PLAN_STEPS_CONCISE\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE = \"ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT = \"IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT\",\n THANKS_FOR_YOUR_FEEDBACK = \"THANKS_FOR_YOUR_FEEDBACK\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n SUBMIT: \"Submit\",\n RESET: \"Reset\",\n FEEDBACK_NODE_TITLE: \"How do you think Elevo has done this task?\",\n PROBLEM_FEEDBACK: \"Problem feedback\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"Please describe the problem you encountered.\",\n IS_THE_TASK_PLAN_COMPLETE: \"Is the task plan complete:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"Is the task plan logically correct:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"Are the task plan steps concise:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE:\n \"Are the analytical conclusions accurate:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"Is the evidence supporting the conclusions sufficient:\",\n THANKS_FOR_YOUR_FEEDBACK: \"Thank you for helping us become better.\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n SUBMIT: \"提交\",\n RESET: \"重置\",\n FEEDBACK_NODE_TITLE: \"Elevo 完成这项任务的效果如何?\",\n PROBLEM_FEEDBACK: \"问题反馈\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"欢迎留下您的意见\",\n IS_THE_TASK_PLAN_COMPLETE: \"任务计划是否完备:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"任务计划是否逻辑正确:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"任务计划步骤是否精简:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE: \"分析结论是否准确:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"结论的支撑证据是否充足:\",\n THANKS_FOR_YOUR_FEEDBACK: \"感谢你帮我们变得更好。\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeFeedback\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeFeedback.module.css\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { WrappedButton, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\n\nlet checks:\n | Array<{\n label: string;\n value: string;\n group: \"plan\" | \"result\";\n }>\n | undefined;\n\nfunction getChecks() {\n if (!checks) {\n checks = [\n {\n label: `1. ${t(K.IS_THE_TASK_PLAN_COMPLETE)}`,\n value: \"计划完备\",\n group: \"plan\",\n },\n {\n label: `2. ${t(K.IS_THE_TASK_PLAN_LOGICALLY_CORRECT)}`,\n value: \"逻辑正确\",\n group: \"plan\",\n },\n {\n label: `3. ${t(K.ARE_THE_TASK_PLAN_STEPS_CONCISE)}`,\n value: \"步骤精简\",\n group: \"plan\",\n },\n {\n label: `4. ${t(K.ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE)}`,\n value: \"结论准确\",\n group: \"result\",\n },\n {\n label: `5. ${t(K.IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT)}`,\n value: \"支撑证据充足\",\n group: \"result\",\n },\n ];\n }\n return checks;\n}\n\nexport interface NodeFeedbackProps {\n className?: string;\n}\n\nexport function NodeFeedback({ className }: NodeFeedbackProps): JSX.Element {\n const {\n submittingFeedback,\n submittedFeedback,\n setShowFeedback,\n onSubmitFeedback,\n } = useContext(TaskContext);\n const formRef = useRef<HTMLFormElement>(null);\n const checks = getChecks();\n const [triedSubmit, setTriedSubmit] = useState(false);\n\n const handleSubmit = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(true);\n if (!formRef.current?.reportValidity()) {\n return;\n }\n const formData = new FormData(formRef.current!);\n const plan: string[] = [];\n const result: string[] = [];\n for (let i = 0; i < checks.length; i++) {\n const value = formData.get(`feedback-check-${i}`);\n if (value) {\n if (checks[i].group === \"plan\") {\n plan.push(value as string);\n } else {\n result.push(value as string);\n }\n }\n }\n onSubmitFeedback({\n plan,\n result,\n feedback: (formData.get(\"feedback\") ?? \"\") as string,\n });\n },\n [checks, onSubmitFeedback]\n );\n\n const handleReset = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(false);\n formRef.current?.reset();\n }, []);\n\n if (submittedFeedback) {\n return (\n <div\n className={classNames(\n styles[\"node-feedback\"],\n styles.submitted,\n className\n )}\n >\n {t(K.THANKS_FOR_YOUR_FEEDBACK)}\n </div>\n );\n }\n\n return (\n <div className={classNames(styles[\"node-feedback\"], className)}>\n <div className={styles.heading}>\n <div className={styles.title}>{t(K.FEEDBACK_NODE_TITLE)}</div>\n <WrappedIconButton\n icon={ICON_CLOSE}\n variant=\"mini\"\n onClick={() => setShowFeedback(false)}\n />\n </div>\n <form\n className={classNames(styles.form, { [styles.validate]: triedSubmit })}\n ref={formRef}\n >\n {checks.map((check, index) => (\n <div\n key={index}\n className={`${styles[\"form-item\"]} ${styles.horizontal}`}\n >\n <div className={styles.label}>{check.label}</div>\n <div className={styles.options}>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value={check.value}\n />\n <span>{t(K.YES)}</span>\n </label>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value=\"\"\n />\n <span>{t(K.NO)}</span>\n </label>\n </div>\n </div>\n ))}\n <div className={`${styles[\"form-item\"]} ${styles.vertical}`}>\n <label htmlFor=\"feedback-content\">{t(K.PROBLEM_FEEDBACK)}</label>\n <textarea\n id=\"feedback-content\"\n name=\"feedback\"\n placeholder={t(K.PROBLEM_FEEDBACK_PLACEHOLDER)}\n rows={2}\n />\n </div>\n <div className={styles.submit}>\n <WrappedButton themeVariant=\"elevo\" type=\"text\" onClick={handleReset}>\n {t(K.RESET)}\n </WrappedButton>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n shape=\"round\"\n onClick={handleSubmit}\n disabled={submittingFeedback}\n >\n {t(K.SUBMIT)}\n </WrappedButton>\n </div>\n </form>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.files--CibolWoq{display:grid;grid-template-columns:repeat(auto-fit,minmax(204px,1fr));gap:4px;list-style:none;margin:12px 0 0;padding:0}.large--ucsZMWES{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.file--VpyjvXGt{background:rgba(0,0,0,0.04);border-radius:6px;display:flex;height:60px;align-items:center;padding:0 14px}.file--VpyjvXGt,\n.file--VpyjvXGt:hover{color:var(--elevo-color-brand)}.file--VpyjvXGt:hover{background:rgba(0,0,0,0.08)}.content--aY05qnew{min-width:0;flex:1}.icon--TVyjPp5x{margin-right:11px}.name--FehravZW,\n.metadata--ntXgq62x{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.name--FehravZW{color:rgba(0,0,0,0.88)}.metadata--ntXgq62x{color:rgba(0,0,0,0.45);font-size:12px;margin-top:3px}.chat--Vk4IEN60{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-left:auto;margin-top:12px;width:-moz-fit-content;width:fit-content}.chat--Vk4IEN60.images--k6XJWVhb{max-width:412px}.chat--Vk4IEN60:not(.images--k6XJWVhb){gap:8px;max-width:766px}.chat--Vk4IEN60 .file--VpyjvXGt{width:250px}.images--k6XJWVhb{display:flex;flex-wrap:wrap}.images--k6XJWVhb > li{width:100px;height:100px}.images--k6XJWVhb.single--cqRGD9YQ > li{width:200px;height:200px}.image--fvQwfADO{border:1px solid rgba(0,0,0,0.1);border-radius:6px;width:100%;height:100%;display:flex;align-items:center;justify-content:center;cursor:zoom-in;position:relative}.image--fvQwfADO img{max-width:100%;max-height:100%;object-fit:contain}.mask--K81A9CNt{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,0.18);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:6px}.overlay--g3Xz6kGg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;cursor:pointer;font-weight:500;font-size:20px;color:#fff}.expand--JhudzGgf{font-size:12px;color:rgba(0,0,0,0.45);display:flex;align-items:center;gap:6px;margin:12px auto 0;background:none;border:none;cursor:pointer}.chat--Vk4IEN60 + .expand--JhudzGgf{margin-right:0}.files--CibolWoq:not(.chat--Vk4IEN60) + .expand--JhudzGgf eo-icon{display:none}.expand--JhudzGgf:hover{color:rgba(0,0,0,0.65)}.expand--JhudzGgf:focus{outline:none}.expand--JhudzGgf.collapsed--rqhtueyy eo-icon{transform:rotate(180deg)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"files\": `files--CibolWoq`,\n\t\"large\": `large--ucsZMWES`,\n\t\"file\": `file--VpyjvXGt`,\n\t\"content\": `content--aY05qnew`,\n\t\"icon\": `icon--TVyjPp5x`,\n\t\"name\": `name--FehravZW`,\n\t\"metadata\": `metadata--ntXgq62x`,\n\t\"chat\": `chat--Vk4IEN60`,\n\t\"images\": `images--k6XJWVhb`,\n\t\"single\": `single--cqRGD9YQ`,\n\t\"image\": `image--fvQwfADO`,\n\t\"mask\": `mask--K81A9CNt`,\n\t\"overlay\": `overlay--g3Xz6kGg`,\n\t\"expand\": `expand--JhudzGgf`,\n\t\"collapsed\": `collapsed--rqhtueyy`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { getBasePath } from \"@next-core/runtime\";\n\nexport function getImageUrl(uri: string): string {\n return new URL(uri, `${location.origin}${getBasePath()}`).toString();\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeReplay.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeReplay.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n WATCH_AGAIN = \"WATCH_AGAIN\",\n TRY_IT_OUT = \"TRY_IT_OUT\",\n CASE_REPLAYING = \"CASE_REPLAYING\",\n CASE_REPLAY_FINISHED = \"CASE_REPLAY_FINISHED\",\n SKIP_TO_RESULTS = \"SKIP_TO_RESULTS\",\n OTHER_CASES = \"OTHER_CASES\",\n PROJECT_TIPS = \"PROJECT_TIPS\",\n GET_STARTED_WITH_PROJECTS_PREFIX = \"GET_STARTED_WITH_PROJECTS_PREFIX\",\n PROJECTS = \"PROJECTS\",\n GET_STARTED_WITH_PROJECTS_SUFFIX = \"GET_STARTED_WITH_PROJECTS_SUFFIX\",\n}\n\nconst en: Locale = {\n WATCH_AGAIN: \"Watch again\",\n TRY_IT_OUT: \"Try it out\",\n CASE_REPLAYING: \"The case is replaying...\",\n CASE_REPLAY_FINISHED: \"The case replay has finished.\",\n SKIP_TO_RESULTS: \"Skip to results\",\n OTHER_CASES: \"Other cases\",\n PROJECT_TIPS:\n \"Start your project collaboration journey and achieve shared goals with team members and AI employees.\",\n GET_STARTED_WITH_PROJECTS_PREFIX: \"Get started with \",\n PROJECTS: \"Projects\",\n GET_STARTED_WITH_PROJECTS_SUFFIX: \"\",\n};\n\nconst zh: Locale = {\n WATCH_AGAIN: \"再次观看\",\n TRY_IT_OUT: \"尝试同款\",\n CASE_REPLAYING: \"案例回放中...\",\n CASE_REPLAY_FINISHED: \"案例回放完成\",\n SKIP_TO_RESULTS: \"跳转到结果\",\n OTHER_CASES: \"其他案例\",\n PROJECT_TIPS:\n \"开启项目协作之旅,和团队成员及多位AI数字人一起实现共同制定的目标。\",\n GET_STARTED_WITH_PROJECTS_PREFIX: \"开启 \",\n PROJECTS: \"项目\",\n GET_STARTED_WITH_PROJECTS_SUFFIX: \" 体验\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeReplay\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useContext } from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeReplay.module.css\";\nimport {\n WrappedButton,\n WrappedIcon,\n WrappedLink,\n WrappedShowCase,\n} from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ICON_LOADING } from \"../../shared/constants\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport projectIcon from \"./project@2x.png\";\nimport classNames from \"classnames\";\n\ninitializeI18n(NS, locales);\n\nexport interface NodeReplayProps {\n finished?: boolean;\n ui?: \"chat\" | \"canvas\";\n}\n\nexport function NodeReplay({ finished, ui }: NodeReplayProps) {\n const {\n conversationId,\n showCases,\n exampleProjects,\n skipToResults,\n watchAgain,\n tryItOut,\n } = useContext(TaskContext);\n\n return (\n <div\n className={classNames(styles[\"node-replay\"], {\n [styles.finished]: finished,\n [styles.chat]: ui === \"chat\",\n })}\n >\n <div className={styles.bar}>\n <div className={styles.label}>\n {finished ? t(K.CASE_REPLAY_FINISHED) : t(K.CASE_REPLAYING)}\n </div>\n <div className={styles.buttons}>\n {finished ? (\n <WrappedButton themeVariant=\"elevo\" onClick={watchAgain}>\n {t(K.WATCH_AGAIN)}\n </WrappedButton>\n ) : (\n <WrappedButton themeVariant=\"elevo\" onClick={skipToResults}>\n {t(K.SKIP_TO_RESULTS)}\n </WrappedButton>\n )}\n <WrappedButton type=\"primary\" themeVariant=\"elevo\" onClick={tryItOut}>\n {t(K.TRY_IT_OUT)}\n </WrappedButton>\n </div>\n </div>\n {finished && (\n <div className={styles.content}>\n {!showCases ||\n (showCases.length > 0 && (\n <>\n <div className={styles.heading}>{t(K.OTHER_CASES)}</div>\n {showCases ? (\n <ul className={styles.cases}>\n {showCases\n .filter((item) => item.conversationId !== conversationId)\n .slice(0, 3)\n .map((item) => (\n <li key={item.conversationId}>\n <WrappedShowCase\n caseTitle={item.title}\n summary={item.summary}\n url={item.url}\n />\n </li>\n ))}\n </ul>\n ) : (\n <WrappedIcon className={styles.loading} {...ICON_LOADING} />\n )}\n </>\n ))}\n {!exampleProjects ||\n (exampleProjects.length > 0 && (\n <>\n <div className={styles.heading}>\n {t(K.GET_STARTED_WITH_PROJECTS_PREFIX)}\n <span className={styles.tag}>{t(K.PROJECTS)}</span>\n {t(K.GET_STARTED_WITH_PROJECTS_SUFFIX)}\n </div>\n <div className={styles.tips}>{t(K.PROJECT_TIPS)}</div>\n {exampleProjects ? (\n <ul className={styles.projects}>\n {exampleProjects.slice(0, 2).map((item) => (\n <li key={item.instanceId}>\n <WrappedLink className={styles.project} url={item.url}>\n <img src={projectIcon} width={16} height={16} />\n {item.name}\n </WrappedLink>\n </li>\n ))}\n </ul>\n ) : (\n <WrappedIcon className={styles.loading} {...ICON_LOADING} />\n )}\n </>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useFulfilledActiveDetail","activeDetail","jobMap","flowMap","activityMap","useMemo","type","job","get","id","flow","activityWithFlow","activity","downloadFile","file","bytes","uri","mimeType","name","filename","t","K","UNTITLED","saveAs","Blob","Uint8Array","from","atob","c","charCodeAt","link","document","createElement","href","getImageUrl","download","target","body","appendChild","click","removeChild","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","undefined","ImagesPreview","_ref","images","files","currentFile","setCurrentFile","useState","setActiveImages","useContext","TaskContext","useEffect","go","useCallback","diff","newIndex","indexOf","length","onKeyDown","e","key","preventDefault","stopPropagation","addEventListener","removeEventListener","React","className","styles","preview","header","WrappedIconButton","icon","ICON_DOWNLOAD","onClick","DOWNLOAD","aside","floatingStyles","WrappedIcon","lib","content","src","alt","footer","map","f","index","isActive","active","fetchPriority","close","ICON_CLOSE","___CSS_LOADER_EXPORT___","push","module","WrappedCodeWrapper","wrapBrick","MarkdownPre","_props$className","node","props","preProps","showCopyButton","includes","themeVariant","cache","Map","fetchEmployee","aiEmployeeId","cached","promise","async","_response$list","employee","ElevoApi_listElevoAiEmployees","employeeId","list","doFetchEmployee","set","components","pre","shikiOptions","theme","EnhancedMarkdown","ref","useRef","setHoverOnScrollableContent","CanvasContext","handleMouseMove","found","el","nativeEvent","composedPath","current","HTMLTableElement","HTMLPreElement","scrollWidth","clientWidth","handleMouseLeave","onMouseMove","onMouseLeave","MarkdownComponent","_extends","shiki","WrappedButton","WrappedLink","WrappedDrawer","onClose","onOpen","WrappedChatInput","onChatSubmit","onTerminate","WrappedShowCase","WrappedCodeBlock","WrappedBlankState","WrappedRunningFlow","onActiveChange","showDialog","unwrapProvider","createContext","onNodeResize","setActiveNodeId","hoverOnScrollableContent","useHandleEscape","activeExpandedViewJobId","activeFile","activeImages","subActiveDetail","setActiveFile","setActiveExpandedViewJobId","setActiveDetail","setSubActiveDetail","compositionRef","onCompositionStart","onCompositionEnd","RequestHumanAction","action","ui","humanInput","replay","disabled","setDisabled","classNames","canvas","shape","confirmText","FilePreview","getMimeTypeByFilename","status","setStatus","setContent","isMarkdown","embeddable","isImage","startsWith","revokeUrl","ignore","response","fetch","ok","Error","statusText","text","blob","URL","createObjectURL","error","console","revokeObjectURL","title","toolbar","toolbarStyles","divider","loading","ICON_LOADING","imageUnpreviewable","width","height","FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX","FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX","image","embed","markdown","shareStyles","initializeI18n","NS","locales","ToolProgressLine","progress","failed","data","step","axis","line","dot","count","total","description","message","getToolDataProgress","toolCallMessages","progressPart","findLast","_message$parts","parts","part","_part$data","ToolCallStatus","_toolCall$annotations","variant","separateInstructions","toolCall","toolTitle","annotations","jobTitle","instruction","hasToolCallResponse","_job$messages","messages","filter","msg","role","some","readOnly","handleClick","newActiveDetail","prev","isEqual","toolState","state","isError","prefix","spinning","startTime","timing","humanizeTime","HumanizeTimeFormat","accurate","endTime","moment","humanize","ss","DONE_STATES","GENERAL_DONE_STATES","NON_WORKING_STATES","ICON_CANVAS","ICON_CHAT","ICON_FEEDBACK","ICON_EXTERNAL_LINK","ICON_UP","LIST_SPLIT_THRESHOLD","SHOW_AS_TABLE_THRESHOLD","BUILTIN_FN_STRINGIFY","CmdbInstanceDetail","objectId","detail","outputSchema","rootId","uniqueId","rootRef","container","portal","createPortal","root","unstable_createRoot","supportsUseChildren","unmount","remove","setLoading","_rootRef$current","bricks","context","_schema","schema","JSON","parse","modals","value","builtinFnStringify","convertArrayOfObjects","valueAccessor","label","idPrefix","needContext","_props$","getOrderedProps","modalId","normalizeIdentifier","contextId","modal","brick","properties","dataset","modalTitle","hideCancelButton","maskClosable","keyboard","columns","tableChildren","k","v","useChildren","items","upperFirst","slot","convertObject","dataIndex","children","dataSource","pagination","bordered","clickHandler","args","method","if","style","display","alignItems","gap","textContent","stringify","outline","cursor","events","_props$2","column","_ref2","field","Object","entries","_ref3","def","isEmptyValue","Array","isArray","contextName","useBrick","isComplexType","join","isObject","keys","convertCmdbInstanceDetail","render","hasOwnProperty","identifier","replace","String","_schema$required","required","propKeys","orderBy","_ref4","requiredIndex","FileList","large","filesWithDisplayInfo","displayType","getFileTypeAndIcon","imageFiles","allImages","limit","exceeded","expanded","setExpanded","filteredList","slice","single","chat","mask","overlay","metadata","size","formatFileSize","expand","collapsed","COLLAPSE","SHOW_ALL_FILES","getOrderedNodes","nodes","downstreamMap","roots","rootChildren","childMap","parent","_node$upstream2","up","_node$upstream","upstream","downstream","visitedNodes","Set","queue","leaves","shift","has","add","getFlatChunks","tasks","errors","skipActivitySubTasks","taskTree","taskIds","taskMap","processedTaskMap","taskId","task","jobs","buildTaskTreeNode","processedTask","jobIds","jobId","subTaskId","subTask","getTaskTree","chunks","collectChunks","taskNode","level","shouldSkip","every","hil","fromSkippedSubTask","taskErrors","collectJobs","bundledLanguages","json","javascript","js","typescript","ts","html","html-derivative","xml","css","md","mermaid","mmd","jsx","tsx","shellscript","bash","sh","shell","zsh","python","py","sql","bundledThemes","lightPlus","darkPlus","createHighlighter","createdBundledHighlighter","langs","themes","engine","createOnigurumaEngine","codeToHtml","codeToHast","codeToTokensBase","codeToTokens","codeToTokensWithThemes","getSingletonHighlighter","getLastGrammarState","createSingletonShorthands","guessEmbeddedLanguages","code","lang","mermaidPromise","parser","DOMParser","serializer","XMLSerializer","rehypeMermaid","promises","visit","tree","tagName","classListItem","toLowerCase","getCodeLanguage","svg","default","initialize","startOnLoad","themeVariables","fontSize","lineColor","primaryColor","primaryBorderColor","doLoadMermaid","toString","_document$getElementB","getElementById","parseFromString","svgElement","querySelector","defs","createElementNS","innerHTML","prepend","modifiedSvg","serializeToString","replacements","fromHtmlIsomorphic","fragment","splice","concat","Promise","all","production","Fragment","jsxs","preloadHighlighter","_shiki$theme","reactContent","setReactContent","highlighter","vFile","unified","use","remarkParse","remarkGfm","remarkToRehype","rehypeShikiFromHighlighter","lazy","defaultLanguage","rehypeReact","passNode","process","result","MIME_TYPES","unit","pipes","unitFormat","number","Math","round","fileOther","fileText","filePdf","fileDoc","fileXls","filePpt","_MIME_TYPES$get","ext","matches","match","ExpandedView","_manuallyUpdatedViews","_views$find","views","workspace","previewUrlTemplate","manuallyUpdatedViews","showFeedbackOnView","onFeedbackOnView","feedbackDoneViews","containerRef","generatedView","find","view","feedbackDone","useViewFeedbackDone","viewId","setView","canFeedback","viewsWithTitle","setViewsWithTitle","_generatedView$asyncC","asyncConstructedView","then","_view$entry","entry","defaultExport","convertedView","convertView","withContexts","functions","templates","handleClose","nav","_view$title","buttons","window","open","getBasePath","parseTemplate","NS_LIBS_DATETIME","YESTERDAY","TODAY","FUTURE_AFTER","FORMAT_MEDIUM_DATETIME","FORMAT_MEDIUM_DATE","FORMAT_SHORT_DATETIME","FORMAT_SHORT_DATE","FORMAT_SHORT_DAY_DATETIME","FORMAT_SHORT_DAY_DATE","MONTHS","HOURS","SECONDS","MILL_SECONDS","DAYS","MINUTES","en","zh","time","format","arguments","auto","Infinity","m","now","fFull","fMedium","i18n","fShort","fShort24","fDefault","full","relative","past","min","future","max","getAccurateTime","toFixed","_text","retVal","year","isBefore","clone","isSame","template","_match","trim","mergeJobs","previousJobs","jobsPatch","jobPatch","_jobs$findIndex","_jobs","previousJobIndex","findIndex","messagesPatch","originalArguments","argumentsParseFailed","argumentsParseError","_patch$toolCall","patch","getJobGeneratedView","mergeMessages","_restMessagesPatch$to","_restMessagesPatch$to2","_previousJob$toolCall","_restMessagesPatch$st","previousJob","restMessagesPatch","pick","_previousJob$messages","getJobStaticDataView","RESPONSE","getJobStaticDataResponse","getAsyncConstructedView","isMatch","merged","previousRole","lastMessage","mergeMessageParts","previousType","previousDataType","_part$data2","_part$data3","isStaticData","mergeSpec","previousSpec","flowPatch","fullSpec","spec","mergedSpec","stagePatch","stageIndex","s","_stage$serviceFlowAct","stage","serviceFlowActivities","activities","mergeActivities","previousActivities","activitiesPatch","activityPatch","activityIndex","rootReducer","reducers","conversation","payload","finished","tasksPatch","_taskPatch$aiEmployee","taskPatch","previousTaskIndex","previousTask","lastError","serviceFlows","serviceFlowsPatch","previousFlowIndex","previousFlow","fromEntries","MINIMAL_DELAY","useConversationDetail","conversationId","initialRequest","replayDelay","dispatch","useReducer","humanInputRef","replayListRef","replayRef","replayDelayRef","replayResolveRef","skipToResults","watchAgain","previousTime","isInitial","delay","resolve","setTimeout","ctrl","requesting","makeRequest","extra","AbortController","sseRequest","createSSEStream","signal","headers","stream","handleHttpError","cmd","_ctrl","abort","getFixedT","ChatBox","canChat","supports","uploadOptions","terminating","setTerminating","handleTerminate","CONFIRM_TO_TERMINATE_THE_TASK_TITLE","placeholder","SEND_MESSAGE","autoFocus","submitDisabled","supportsTerminate","intercept","worker","getRemoteTsxParserWorker","parseView","onShare","submittingFeedback","submittedFeedback","onSubmitFeedback","setShowFeedback","ReadableCommand","mentionedAiEmployeeId","getInitialContent","command","small","serviceFlowStarting","flowName","spaceName","Boolean","CreatedView","noHeading","onSizeChange","sizeLarge","setSizeLarge","traverseBricks","b","_b$properties","component","widgets","preferSizeLarge","viewTitle","heading","sharedStyles","ViewToolbar","callback","useFlowAndActivityMap","propCanFeedback","showJsxEditor","setActiveJsxEditorJob","handleExpandClick","button","FEEDBACK","OPEN_PREVIEW","FULLSCREEN","done","setDone","_response$feedback","InstanceApi_getDetail","fields","priority","feedback","fetchViewFeedbackDone","checks","getChecks","IS_THE_TASK_PLAN_COMPLETE","group","IS_THE_TASK_PLAN_LOGICALLY_CORRECT","ARE_THE_TASK_PLAN_STEPS_CONCISE","ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE","IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT","NodeFeedback","formRef","triedSubmit","setTriedSubmit","handleSubmit","_formRef$current","_formData$get","reportValidity","formData","FormData","plan","i","handleReset","_formRef$current2","reset","submitted","THANKS_FOR_YOUR_FEEDBACK","FEEDBACK_NODE_TITLE","form","validate","check","horizontal","radio","YES","NO","vertical","htmlFor","PROBLEM_FEEDBACK","PROBLEM_FEEDBACK_PLACEHOLDER","rows","submit","RESET","SUBMIT","location","origin","NodeReplay","showCases","exampleProjects","tryItOut","bar","CASE_REPLAY_FINISHED","CASE_REPLAYING","WATCH_AGAIN","SKIP_TO_RESULTS","TRY_IT_OUT","OTHER_CASES","cases","item","caseTitle","summary","url","GET_STARTED_WITH_PROJECTS_PREFIX","tag","PROJECTS","GET_STARTED_WITH_PROJECTS_SUFFIX","tips","PROJECT_TIPS","projects","instanceId","project","projectIcon"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"chunks/5712.c566ad78.js","mappings":"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","sources":["webpack:///./src/shared/useFulfilledActiveDetail.ts","webpack:///./src/shared/FilePreview/downloadFile.ts","webpack:///./src/shared/FilePreview/ImagesPreview.module.css?b629","webpack:///./src/shared/FilePreview/ImagesPreview.tsx","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css","webpack:///./src/shared/CreatedView/CreatedView.module.css","webpack:///./src/shared/MarkdownPre.module.css?da10","webpack:///./src/shared/MarkdownPre.tsx","webpack:///./src/shared/MarkdownPre.module.css","webpack:///./src/shared/fetchEmployee.ts","webpack:///./src/cruise-canvas/EnhancedMarkdown/EnhancedMarkdown.tsx","webpack:///./src/shared/bricks.ts","webpack:///./src/cruise-canvas/CanvasContext.ts","webpack:///./src/shared/useHandleEscape.ts","webpack:///./src/shared/FloatingButton.module.css","webpack:///./src/shared/RequestHumanAction/RequestHumanAction.module.css?91ef","webpack:///./src/shared/RequestHumanAction/RequestHumanAction.tsx","webpack:///./src/cruise-canvas/shared.module.css?c988","webpack:///./src/shared/FilePreview/FilePreview.module.css","webpack:///./src/shared/FilePreview/FilePreview.module.css?db00","webpack:///./src/shared/FilePreview/FilePreview.tsx","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css?1d0e","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.tsx","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css?6208","webpack:///./src/cruise-canvas/utils/getToolDataProgress.ts","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.tsx","webpack:///./src/shared/constants.ts","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css?7513","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.tsx","webpack:///./src/shared/FilePreview/FileList.module.css?3ed2","webpack:///./src/shared/FilePreview/FileList.tsx","webpack:///./src/shared/getOrderedNodes.ts","webpack:///./src/shared/getFlatChunks.ts","webpack:///./src/shared/getTaskTree.ts","webpack:///../../src/index.ts","webpack:///../../src/rehypeMermaid.ts","webpack:///../../src/utils.ts","webpack:///../../src/MarkdownComponent.tsx","webpack:///./src/cruise-canvas/CmdbInstanceDetail/CmdbInstanceDetail.module.css","webpack:///./src/cruise-canvas/utils/file.ts","webpack:///./src/shared/ExpandedView/ExpandedView.module.css?985a","webpack:///./src/shared/ExpandedView/ExpandedView.tsx","webpack:///../../../src/i18n/constants.ts","webpack:///../../../../src/i18n/locales/en.ts","webpack:///../../../../src/i18n/locales/zh.ts","webpack:///../../../src/i18n/index.ts","webpack:///../../src/humanizeTime.ts","webpack:///./src/shared/parseTemplate.ts","webpack:///./src/cruise-canvas/reducers/tasks.ts","webpack:///./src/cruise-canvas/reducers/serviceFlows.ts","webpack:///./src/cruise-canvas/reducers/index.ts","webpack:///./src/cruise-canvas/reducers/conversation.ts","webpack:///./src/cruise-canvas/reducers/errors.ts","webpack:///./src/cruise-canvas/useConversationDetail.ts","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css","webpack:///./src/shared/FloatingButton.module.css?87dc","webpack:///./src/shared/ChatBox/i18n.ts","webpack:///./src/shared/ChatBox/ChatBox.tsx","webpack:///./src/shared/getAsyncConstructedView.ts","webpack:///./src/shared/TaskContext.ts","webpack:///./src/shared/ReadableCommand/ReadableCommand.module.css?7a0c","webpack:///./src/shared/ReadableCommand/ReadableCommand.tsx","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.module.css","webpack:///./src/cruise-canvas/toolbar.module.css","webpack:///./src/shared/ReadableCommand/ReadableCommand.module.css","webpack:///./src/shared/FilePreview/ImagesPreview.module.css","webpack:///./src/shared/FilePreview/i18n.ts","webpack:///./src/shared/ExpandedView/ExpandedView.module.css","webpack:///./src/shared/CreatedView/ViewToolbar.module.css","webpack:///./src/cruise-canvas/toolbar.module.css?a4b4","webpack:///./src/shared/CreatedView/CreatedView.module.css?fa62","webpack:///./src/shared/CreatedView/CreatedView.tsx","webpack:///./src/shared/useFlowAndActivityMap.ts","webpack:///./src/shared/CreatedView/ViewToolbar.module.css?4751","webpack:///./src/shared/CreatedView/i18n.ts","webpack:///./src/shared/CreatedView/ViewToolbar.tsx","webpack:///./src/shared/RequestHumanAction/RequestHumanAction.module.css","webpack:///./src/cruise-canvas/shared.module.css","webpack:///./src/shared/useViewFeedbackDone.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css?99d4","webpack:///./src/shared/NodeFeedback/i18n.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.tsx","webpack:///./src/shared/FilePreview/FileList.module.css","webpack:///./src/shared/FilePreview/getImageUrl.ts","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.module.css?d0bd","webpack:///./src/cruise-canvas/NodeReplay/i18n.ts","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type {\n ActiveDetail,\n ActivityWithFlow,\n FulfilledActiveDetail,\n Job,\n ServiceFlowRun,\n} from \"./interfaces\";\n\nexport function useFulfilledActiveDetail(\n activeDetail: ActiveDetail | null,\n jobMap: Map<string, Job> | undefined,\n flowMap: Map<string, ServiceFlowRun>,\n activityMap: Map<string, ActivityWithFlow>\n) {\n return useMemo<FulfilledActiveDetail | null>(() => {\n if (!activeDetail) {\n return null;\n }\n switch (activeDetail.type) {\n case \"job\": {\n const job = jobMap?.get(activeDetail.id);\n if (job) {\n return {\n type: \"job\",\n job,\n };\n }\n break;\n }\n case \"flow\": {\n const flow = flowMap?.get(activeDetail.id);\n if (flow) {\n return {\n type: \"flow\",\n flow,\n };\n }\n break;\n }\n case \"activity\": {\n const activityWithFlow = activityMap?.get(activeDetail.id);\n if (activityWithFlow) {\n return {\n type: \"activity\",\n flow: activityWithFlow.flow,\n activity: activityWithFlow.activity,\n };\n }\n break;\n }\n }\n return null;\n }, [activeDetail, activityMap, flowMap, jobMap]);\n}\n","import { saveAs } from \"file-saver\";\nimport type { FileInfo } from \"../interfaces\";\nimport { K, t } from \"./i18n\";\nimport { getImageUrl } from \"./getImageUrl\";\n\nexport function downloadFile(file: FileInfo): void {\n const { bytes, uri, mimeType, name } = file;\n const filename = name || t(K.UNTITLED);\n if (bytes) {\n saveAs(\n new Blob([Uint8Array.from(atob(bytes), (c) => c.charCodeAt(0))], {\n type: mimeType,\n }),\n filename\n );\n } else if (uri) {\n const link = document.createElement(\"a\");\n link.href = getImageUrl(uri);\n link.download = filename;\n link.target = \"_blank\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ImagesPreview.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ImagesPreview.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport type { ActiveImages, FileInfo } from \"../interfaces\";\nimport styles from \"./ImagesPreview.module.css\";\nimport { WrappedIcon, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE, ICON_DOWNLOAD } from \"../constants\";\nimport { downloadFile } from \"./downloadFile\";\nimport { getImageUrl } from \"./getImageUrl\";\nimport { TaskContext } from \"../TaskContext\";\nimport { K, t } from \"./i18n\";\nimport floatingStyles from \"../FloatingButton.module.css\";\n\nexport interface ImagesPreviewProps {\n images: ActiveImages;\n}\n\nexport function ImagesPreview({ images: { files, file } }: ImagesPreviewProps) {\n const [currentFile, setCurrentFile] = useState<FileInfo>(file);\n const { setActiveImages } = useContext(TaskContext);\n\n useEffect(() => {\n setCurrentFile(file);\n }, [file]);\n\n const go = useCallback(\n (diff: number) => {\n const currentIndex = files.indexOf(currentFile);\n let newIndex = currentIndex + diff;\n if (newIndex < 0) {\n newIndex = files.length - 1;\n } else if (newIndex >= files.length) {\n newIndex = 0;\n }\n setCurrentFile(files[newIndex]);\n },\n [currentFile, files]\n );\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"ArrowLeft\") {\n go(-1);\n } else if (e.key === \"ArrowRight\") {\n go(1);\n } else {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [go, setActiveImages]);\n\n return (\n <div className={styles.preview}>\n <div className={styles.header}>\n <WrappedIconButton\n icon={ICON_DOWNLOAD}\n onClick={() => {\n downloadFile(currentFile);\n }}\n >\n {t(K.DOWNLOAD)}\n </WrappedIconButton>\n </div>\n <div className={styles.body}>\n <div className={styles.aside}>\n <button\n className={floatingStyles[\"floating-button\"]}\n onClick={() => {\n go(-1);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"left\" />\n </button>\n </div>\n <div className={styles.content}>\n <img src={getImageUrl(currentFile.uri!)} alt={currentFile.name} />\n </div>\n <div className={styles.aside}>\n <button\n className={floatingStyles[\"floating-button\"]}\n onClick={() => {\n go(1);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"right\" />\n </button>\n </div>\n </div>\n <div className={styles.footer}>\n <ul className={styles.images}>\n {files.map((f, index) => {\n const isActive = f === currentFile;\n return (\n <li\n key={index}\n className={isActive ? styles.active : undefined}\n onClick={() => setCurrentFile(f)}\n >\n <img\n src={getImageUrl(f.uri!)}\n alt={f.name}\n fetchPriority=\"low\"\n />\n </li>\n );\n })}\n </ul>\n </div>\n <WrappedIconButton\n className={styles.close}\n icon={ICON_CLOSE}\n onClick={() => {\n setActiveImages(null);\n }}\n />\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-feedback--qSAvjvCa{width:var(--cruise-canvas-node-width-medium);background:rgba(255,255,255,0.2);border-radius:12px;border:1px solid rgba(255,255,255,0.3);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:20px 28px}.heading--zbbPDsFk{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.title--l9cmJRhB{font-weight:500}.form-item--wtgYuM1v{font-size:12px;line-height:17px;color:rgba(0,0,0,0.88)}.form-item--wtgYuM1v.horizontal--zqc5U1Jh{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:1em}.form-item--wtgYuM1v.vertical--i26lXOiT{margin-top:16px}.form-item--wtgYuM1v.vertical--i26lXOiT label{display:block;color:rgba(0,0,0,0.45);margin-bottom:8px}.form-item--wtgYuM1v textarea{width:100%;background:none;border-radius:8px;border:1px solid rgba(0,0,0,0.15);padding:8px;color:#262626}.form-item--wtgYuM1v textarea:focus{outline:none;border-color:rgba(0,0,0,0.25)}.options--Cak4FPTk{display:flex;align-items:center}.radio--P5Vo_D45{position:relative;cursor:pointer}.radio--P5Vo_D45 input{width:0px;height:0px;position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none}.radio--P5Vo_D45 span{display:flex;align-items:center;justify-content:center;width:64px;height:28px;border-radius:8px;background:none;border:1px solid rgba(0,0,0,0.15)}.radio--P5Vo_D45 input:checked + span{background:rgba(255,255,255,0.5);border:none}.radio--P5Vo_D45 input:not(:checked) + span:hover{background:rgba(255,255,255,0.3);border:none}.radio--P5Vo_D45 + .radio--P5Vo_D45{margin-left:8px}.submit--eCyA49Nq{display:flex;justify-content:end;margin-top:18px;gap:8px}.validate--krlXob4C .form-item--wtgYuM1v:has(input:invalid) .label--U8YsN4Mm{color:#f24c25}.submitted--XxktB9y5{background:#d0e7d6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:none;font-weight:500;color:#009929;padding:17px;text-align:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-feedback\": `node-feedback--qSAvjvCa`,\n\t\"heading\": `heading--zbbPDsFk`,\n\t\"title\": `title--l9cmJRhB`,\n\t\"form-item\": `form-item--wtgYuM1v`,\n\t\"horizontal\": `horizontal--zqc5U1Jh`,\n\t\"vertical\": `vertical--i26lXOiT`,\n\t\"options\": `options--Cak4FPTk`,\n\t\"radio\": `radio--P5Vo_D45`,\n\t\"submit\": `submit--eCyA49Nq`,\n\t\"validate\": `validate--krlXob4C`,\n\t\"label\": `label--U8YsN4Mm`,\n\t\"submitted\": `submitted--XxktB9y5`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.heading--Mi2u66PA{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.title--t7OpwWbH{font-size:12px;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(38,38,38,0.65);--shine-text-highlight-color:#dcdcdc}ai-portal\\\\.cruise-canvas .title--t7OpwWbH{text-indent:4px}ai-portal\\\\.cruise-canvas .heading--Mi2u66PA{margin-bottom:10px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"heading\": `heading--Mi2u66PA`,\n\t\"title\": `title--t7OpwWbH`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MarkdownPre.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./MarkdownPre.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport {\n CodeWrapper,\n type CodeWrapperProps,\n} from \"@next-bricks/presentational/code-wrapper\";\nimport styles from \"./MarkdownPre.module.css\";\n\nconst WrappedCodeWrapper = wrapBrick<CodeWrapper, CodeWrapperProps>(\n \"presentational.code-wrapper\"\n);\n\nexport type MarkdownComponentProps = JSX.IntrinsicElements[\"pre\"] & {\n node?: unknown;\n};\n\nexport function MarkdownPre({ node, ...props }: MarkdownComponentProps) {\n return (\n <WrappedCodeWrapper\n className={styles[\"code-wrapper\"]}\n preProps={props}\n showCopyButton={!!props.className?.includes(\"shiki\")}\n themeVariant=\"elevo\"\n />\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.code-wrapper--jieEbxla::part(pre){border:1px solid #ccd1de}.code-wrapper--jieEbxla::part(mermaid){border:none;background:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"code-wrapper\": `code-wrapper--jieEbxla`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import {\n ElevoApi_listElevoAiEmployees,\n type ElevoApi_ListElevoAiEmployeesResponseItem,\n} from \"@next-api-sdk/llm-sdk\";\n\nconst cache = new Map<\n string,\n Promise<ElevoApi_ListElevoAiEmployeesResponseItem | undefined>\n>();\n\nexport function fetchEmployee(\n aiEmployeeId: string\n): Promise<ElevoApi_ListElevoAiEmployeesResponseItem | undefined> {\n const cached = cache.get(aiEmployeeId);\n if (cached) {\n return cached;\n }\n const promise = doFetchEmployee(aiEmployeeId);\n cache.set(aiEmployeeId, promise);\n return promise;\n}\n\nasync function doFetchEmployee(aiEmployeeId: string) {\n const response = await ElevoApi_listElevoAiEmployees({\n employeeId: aiEmployeeId,\n } as any);\n const employee = response.list?.[0];\n return employee?.employeeId === aiEmployeeId ? employee : undefined;\n}\n\nexport function clearCache() {\n cache.clear();\n}\n","import React, { useCallback, useContext, useRef } from \"react\";\nimport {\n MarkdownComponent,\n type MarkdownComponentProps,\n} from \"@next-shared/markdown\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { MarkdownPre } from \"../../shared/MarkdownPre\";\n\nconst components: MarkdownComponentProps[\"components\"] = {\n pre: MarkdownPre,\n};\n\nconst shikiOptions: MarkdownComponentProps[\"shiki\"] = {\n theme: \"light-plus\",\n};\n\nexport interface EnhancedMarkdownProps extends MarkdownComponentProps {\n className?: string;\n}\n\nexport function EnhancedMarkdown({\n className,\n ...props\n}: EnhancedMarkdownProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { setHoverOnScrollableContent } = useContext(CanvasContext);\n\n const handleMouseMove = useCallback(\n (e: React.MouseEvent) => {\n let found = false;\n for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (\n (el instanceof HTMLTableElement || el instanceof HTMLPreElement) &&\n el.scrollWidth > el.clientWidth\n ) {\n found = true;\n break;\n }\n }\n setHoverOnScrollableContent(found);\n },\n [setHoverOnScrollableContent]\n );\n\n const handleMouseLeave = useCallback(() => {\n setHoverOnScrollableContent(false);\n }, [setHoverOnScrollableContent]);\n\n return (\n <div\n className={className}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <MarkdownComponent\n {...props}\n components={components}\n shiki={shikiOptions}\n />\n </div>\n );\n}\n","import { wrapBrick } from \"@next-core/react-element\";\nimport { unwrapProvider } from \"@next-core/utils/general\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Button, ButtonProps } from \"@next-bricks/basic/button\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type { EoTooltip, ToolTipProps } from \"@next-bricks/basic/tooltip\";\nimport type {\n Drawer,\n DrawerProps,\n DrawerEvents,\n DrawerMapEvents,\n} from \"@next-bricks/containers/drawer\";\nimport type { showDialog as _showDialog } from \"@next-bricks/basic/data-providers/show-dialog/show-dialog\";\nimport type { copyToClipboard as _copyToClipboard } from \"@next-bricks/basic/data-providers/copy-to-clipboard\";\nimport {\n CodeBlock,\n CodeBlockProps,\n} from \"@next-bricks/presentational/code-block\";\nimport type { IconButton, IconButtonProps } from \"../icon-button\";\nimport type {\n ChatInput,\n ChatInputEvents,\n ChatInputMapEvents,\n ChatInputProps,\n} from \"../chat-input\";\nimport type { ShowCase, ShowCaseProps } from \"../show-case\";\nimport type {\n RunningFlow,\n RunningFlowEvents,\n RunningFlowMapEvents,\n RunningFlowProps,\n} from \"../running-flow\";\nimport type { BlankState, BlankStateProps } from \"../blank-state\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport const WrappedButton = wrapBrick<Button, ButtonProps>(\"eo-button\");\n\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\n\nexport const WrappedTooltip = wrapBrick<EoTooltip, ToolTipProps>(\"eo-tooltip\");\n\nexport const WrappedDrawer = wrapBrick<\n Drawer,\n DrawerProps & {\n keyboard?: boolean;\n themeVariant?: \"default\" | \"elevo\";\n },\n DrawerEvents,\n DrawerMapEvents\n>(\"eo-drawer\", {\n onClose: \"close\",\n onOpen: \"open\",\n});\n\nexport const WrappedIconButton = wrapBrick<IconButton, IconButtonProps>(\n \"ai-portal.icon-button\"\n);\n\nexport const WrappedChatInput = wrapBrick<\n ChatInput,\n ChatInputProps,\n ChatInputEvents,\n ChatInputMapEvents\n>(\"ai-portal.chat-input\", {\n onChatSubmit: \"chat.submit\",\n onTerminate: \"terminate\",\n});\n\nexport const WrappedShowCase = wrapBrick<ShowCase, ShowCaseProps>(\n \"ai-portal.show-case\"\n);\n\nexport const WrappedCodeBlock = wrapBrick<CodeBlock, CodeBlockProps>(\n \"eo-code-block\"\n);\n\nexport const WrappedBlankState = wrapBrick<BlankState, BlankStateProps>(\n \"ai-portal.blank-state\"\n);\n\nexport const WrappedRunningFlow = wrapBrick<\n RunningFlow,\n RunningFlowProps,\n RunningFlowEvents,\n RunningFlowMapEvents\n>(\"ai-portal.running-flow\", {\n onActiveChange: \"active.change\",\n});\n\nexport const showDialog =\n unwrapProvider<typeof _showDialog>(\"basic.show-dialog\");\n\nexport const copyToClipboard = unwrapProvider<typeof _copyToClipboard>(\n \"basic.copy-to-clipboard\"\n);\n","import { createContext, type Dispatch } from \"react\";\nimport type { SizeTuple } from \"./interfaces\";\n\nexport interface CanvasContextValue {\n onNodeResize: (id: string, size: SizeTuple | null) => void;\n setActiveNodeId: Dispatch<React.SetStateAction<string | null>>;\n hoverOnScrollableContent: boolean;\n setHoverOnScrollableContent: Dispatch<React.SetStateAction<boolean>>;\n supports?: Record<string, boolean>;\n}\n\nexport const CanvasContext = createContext<CanvasContextValue>({\n onNodeResize: () => {},\n setActiveNodeId: () => {},\n hoverOnScrollableContent: false,\n setHoverOnScrollableContent: () => {},\n});\n","import { useEffect, useRef } from \"react\";\nimport type { TaskContextValue } from \"./TaskContext\";\n\nexport function useHandleEscape({\n activeDetail,\n activeExpandedViewJobId,\n activeFile,\n activeImages,\n subActiveDetail,\n setActiveFile,\n setActiveImages,\n setActiveExpandedViewJobId,\n setActiveDetail,\n setSubActiveDetail,\n}: TaskContextValue) {\n const compositionRef = useRef(false);\n\n useEffect(() => {\n const onCompositionStart = () => {\n compositionRef.current = true;\n };\n const onCompositionEnd = () => {\n compositionRef.current = false;\n };\n document.addEventListener(\"compositionstart\", onCompositionStart);\n document.addEventListener(\"compositionend\", onCompositionEnd);\n return () => {\n document.removeEventListener(\"compositionstart\", onCompositionStart);\n document.removeEventListener(\"compositionend\", onCompositionEnd);\n };\n }, []);\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (compositionRef.current) {\n // Ignore key events during composition\n return;\n }\n if (e.key === \"Escape\") {\n if (activeFile) {\n setActiveFile(null);\n } else if (activeImages) {\n setActiveImages(null);\n } else if (activeExpandedViewJobId) {\n setActiveExpandedViewJobId(null);\n } else if (subActiveDetail) {\n setSubActiveDetail(null);\n } else if (activeDetail) {\n setActiveDetail(null);\n }\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [\n activeDetail,\n activeExpandedViewJobId,\n activeFile,\n activeImages,\n subActiveDetail,\n setActiveFile,\n setActiveImages,\n setActiveExpandedViewJobId,\n setActiveDetail,\n setSubActiveDetail,\n ]);\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.floating-button--s8FIucxe{display:flex;align-items:center;justify-content:center;padding:0;background:#fff;box-shadow:0px 4px 8px 0px rgba(0,0,0,0.06);border:1px solid rgba(0,0,0,0.02);border-radius:999px;cursor:pointer}.floating-button--s8FIucxe:hover{box-shadow:0px 6px 12px 0px rgba(0,0,0,0.1);border-color:rgba(0,0,0,0.08)}.floating-button--s8FIucxe:focus{outline:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"floating-button\": `floating-button--s8FIucxe`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./RequestHumanAction.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./RequestHumanAction.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext, useState } from \"react\";\nimport styles from \"./RequestHumanAction.module.css\";\n// import { K, t } from \"../i18n.js\";\nimport { WrappedButton } from \"../bricks\";\nimport { TaskContext } from \"../TaskContext\";\nimport type { HumanAction } from \"../interfaces\";\nimport classNames from \"classnames\";\n\nexport function RequestHumanAction({\n action,\n ui,\n}: {\n action: HumanAction;\n ui?: \"canvas\" | \"chat\";\n}): JSX.Element | null {\n const { humanInput, replay } = useContext(TaskContext);\n const [disabled, setDisabled] = useState(false);\n\n if (action.type === \"select\") {\n return null;\n }\n\n return (\n <div\n className={classNames(styles[\"human-action\"], {\n [styles.canvas]: ui !== \"chat\",\n })}\n >\n <WrappedButton\n type=\"primary\"\n themeVariant=\"elevo\"\n shape={ui === \"chat\" ? undefined : \"round\"}\n disabled={disabled}\n onClick={() => {\n if (replay) {\n return;\n }\n humanInput(null, action.confirmText || \"确认\");\n setDisabled(true);\n }}\n >\n {action.confirmText || \"确认\"}\n </WrappedButton>\n </div>\n );\n}\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./shared.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./shared.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.preview--F7764WOO{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:#fff;display:flex;flex-direction:column;align-items:center}.header--EVmpMZbh{width:100%;height:56px;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 16px 0 28px;border:1px solid rgba(0,0,0,0.15)}.title--tp251JEp{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toolbar--aQsOJ8rv{display:flex;align-items:center;gap:8px}.body--KvpRjkhv{flex:1;width:100%;min-height:0;overflow-y:auto}.markdown--CmPqEPJK{margin:0 auto;padding:36px;max-width:800px}.loading--MekXOCp8{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:var(--text-color-secondary)}.error--SkRwiReO{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding-bottom:20%;display:flex;flex-direction:column;align-items:center;color:#8c8c8c}.error--SkRwiReO eo-button{margin:0 14px}.embed--vYmQk5XW{display:block}.image--hQpy_1OM{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.image--hQpy_1OM img{max-width:100%;max-height:100%;object-fit:contain}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"preview\": `preview--F7764WOO`,\n\t\"header\": `header--EVmpMZbh`,\n\t\"title\": `title--tp251JEp`,\n\t\"toolbar\": `toolbar--aQsOJ8rv`,\n\t\"body\": `body--KvpRjkhv`,\n\t\"markdown\": `markdown--CmPqEPJK`,\n\t\"loading\": `loading--MekXOCp8`,\n\t\"error\": `error--SkRwiReO`,\n\t\"embed\": `embed--vYmQk5XW`,\n\t\"image\": `image--hQpy_1OM`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FilePreview.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FilePreview.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport type { FileInfo } from \"../../shared/interfaces\";\nimport {\n WrappedIcon,\n WrappedButton,\n WrappedIconButton,\n} from \"../../shared/bricks\";\nimport styles from \"./FilePreview.module.css\";\nimport shareStyles from \"../../cruise-canvas/shared.module.css\";\nimport { EnhancedMarkdown } from \"../../cruise-canvas/EnhancedMarkdown/EnhancedMarkdown\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport {\n ICON_CLOSE,\n ICON_DOWNLOAD,\n ICON_LOADING,\n} from \"../../shared/constants\";\nimport { getMimeTypeByFilename } from \"../../cruise-canvas/utils/file\";\nimport imageUnpreviewable from \"./unpreviewable.png\";\nimport { downloadFile } from \"./downloadFile\";\nimport { getImageUrl } from \"./getImageUrl\";\nimport toolbarStyles from \"../../cruise-canvas/toolbar.module.css\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\n\nexport interface FilePreviewProps {\n file: FileInfo;\n}\n\nexport function FilePreview({ file }: FilePreviewProps) {\n const { setActiveFile } = useContext(TaskContext);\n const { bytes, uri, mimeType, name } = file;\n const type = mimeType || getMimeTypeByFilename(name);\n const [status, setStatus] = useState<\"loading\" | \"loaded\" | \"error\">(\n \"loading\"\n );\n\n // For PDF, content is the object URL or data URL\n // For markdown, content is the content text\n const [content, setContent] = useState<string | undefined>();\n\n const isMarkdown = type === \"text/markdown\" || type === \"text/x-markdown\";\n const embeddable = type === \"application/pdf\";\n const isImage = type.startsWith(\"image/\");\n\n useEffect(() => {\n // When using `<embed>` to display PDF from a URL, which responses with\n // `Content-Disposition: attachment`, the PDF will be downloaded instead of\n // being displayed by the browser. So we need to fetch the file and create an object URL.\n setStatus(\"loading\");\n\n if (!isMarkdown && !embeddable && !isImage) {\n setStatus(\"error\");\n return;\n }\n\n if (bytes) {\n if (isMarkdown) {\n setContent(atob(bytes));\n } else {\n setContent(`data:application/pdf;base64,${bytes}`);\n }\n setStatus(\"loaded\");\n return;\n }\n\n if (uri) {\n let ignore = false;\n let revokeUrl: string | undefined;\n (async () => {\n try {\n const response = await fetch(getImageUrl(uri));\n if (!response.ok) {\n throw new Error(`Failed to fetch file: ${response.statusText}`);\n }\n let text: string;\n if (isMarkdown) {\n text = await response.text();\n } else {\n const blob = await response.blob();\n revokeUrl = text = URL.createObjectURL(blob);\n }\n if (ignore) {\n return;\n }\n setContent(text);\n setStatus(\"loaded\");\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error fetching file:\", error);\n setStatus(\"error\");\n }\n })();\n return () => {\n ignore = true;\n if (revokeUrl) {\n URL.revokeObjectURL(revokeUrl);\n }\n };\n }\n }, [bytes, isImage, isMarkdown, embeddable, uri]);\n\n const download = useCallback(() => {\n downloadFile(file);\n }, [file]);\n\n return (\n <div className={styles.preview}>\n <div className={styles.header}>\n <div className={styles.title}>{file.name || t(K.UNTITLED)}</div>\n <div className={styles.toolbar}>\n <WrappedIconButton\n icon={ICON_DOWNLOAD}\n onClick={() => {\n download();\n }}\n />\n <div className={toolbarStyles.divider} />\n <WrappedIconButton\n icon={ICON_CLOSE}\n onClick={() => {\n setActiveFile(null);\n }}\n />\n </div>\n </div>\n <div className={styles.body}>\n {status === \"loading\" ? (\n <div className={styles.loading}>\n <WrappedIcon {...ICON_LOADING} />\n </div>\n ) : status === \"error\" ? (\n <div className={styles.error}>\n <img\n src={imageUnpreviewable}\n alt=\"Unpreviewable\"\n width={591}\n height={249}\n />\n <p>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX)}\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n onClick={download}\n >\n {t(K.DOWNLOAD)}\n </WrappedButton>\n {t(K.FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX)}\n </p>\n </div>\n ) : isImage ? (\n <div className={styles.image}>\n <img src={content} alt={name} />\n </div>\n ) : embeddable ? (\n <embed\n className={styles.embed}\n src={content}\n type={type}\n title={name}\n width=\"100%\"\n height=\"100%\"\n />\n ) : (\n <div className={classNames(styles.markdown, shareStyles.markdown)}>\n <EnhancedMarkdown content={content} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolProgressLine.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolProgressLine.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./ToolProgressLine.module.css\";\nimport { DataPart } from \"../../shared/interfaces\";\n\nexport interface ToolProgressLineProps {\n progress: DataPart;\n /**\n * 暂定失败肯定是最后一个\n */\n failed?: boolean;\n}\n\nexport function ToolProgressLine({\n progress,\n failed,\n}: ToolProgressLineProps): JSX.Element {\n const data = progress.data;\n\n return (\n <div\n className={classNames(styles[\"progress-line\"], {\n [styles[\"failed\"]]: failed,\n })}\n >\n <div className={classNames(styles.step)} key={data.progress}>\n <div className={styles.axis}>\n <div className={styles.line} />\n <div className={styles.dot} />\n </div>\n <div className={styles.progress}>\n <span className={styles.count}>{data.progress}</span>\n <span>/</span>\n <span className={styles.total}>{data.total}</span>\n </div>\n <div className={styles.description}>{data.message}</div>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallStatus.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallStatus.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import type { DataPart, Message } from \"../../shared/interfaces\";\n\nexport const getToolDataProgress = (\n toolCallMessages: Message[] | undefined\n): DataPart | undefined => {\n let progressPart: DataPart | undefined;\n toolCallMessages?.findLast((message) => {\n progressPart = message.parts?.findLast((part) => {\n return part.type === \"data\" && part.data?.type === \"progress\";\n }) as DataPart | undefined;\n return !!progressPart;\n });\n return progressPart;\n};\n","import React, { useCallback, useContext, useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport { isEqual } from \"lodash\";\nimport { humanizeTime, HumanizeTimeFormat } from \"@next-shared/datetime\";\nimport styles from \"./ToolCallStatus.module.css\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { getToolDataProgress } from \"../utils/getToolDataProgress\";\nimport type { ActiveDetail, Job, JobState } from \"../../shared/interfaces\";\n\nexport interface NodeJobToolCallProps {\n job: Job;\n variant?: \"default\" | \"read-only\";\n}\n\nexport function ToolCallStatus({\n job,\n variant,\n}: NodeJobToolCallProps): JSX.Element {\n const { setActiveDetail, separateInstructions } = useContext(TaskContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title || toolCall.name;\n const jobTitle = separateInstructions\n ? toolTitle\n : job.instruction || toolTitle;\n const [progress, hasToolCallResponse] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n return [\n getToolDataProgress(toolCallMessages),\n toolCallMessages?.some((msg) =>\n msg.parts.some((part) => part.type === \"text\")\n ),\n ];\n }, [job.messages]);\n\n const readOnly = useMemo(() => {\n return variant === \"read-only\";\n }, [variant]);\n\n const handleClick = useCallback(() => {\n if (variant === \"read-only\") {\n return;\n }\n const newActiveDetail: ActiveDetail = {\n type: \"job\",\n id: job.id,\n };\n setActiveDetail((prev) =>\n isEqual(prev, newActiveDetail) ? prev : newActiveDetail\n );\n }, [job.id, variant, setActiveDetail]);\n\n const toolState =\n [\"working\", \"input-required\"].includes(job.state) && hasToolCallResponse\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <div\n className={classNames(styles[\"tool-call\"], {\n [styles.failed]: failed,\n [styles[\"read-only\"]]: readOnly,\n })}\n onClick={handleClick}\n >\n <div className={classNames(styles.status)}>\n {job.isError || toolState === \"failed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"xmark\"\n />\n ) : toolState === \"completed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"check\"\n />\n ) : toolState === \"working\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n ) : toolState === \"input-required\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-user\"\n />\n ) : toolState === \"canceled\" ||\n toolState === (\"terminated\" as JobState) ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-stop\"\n />\n ) : (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"clock\"\n />\n )}\n <span className={styles.name}>\n {variant === \"read-only\" ? toolTitle : jobTitle}\n </span>\n {job.startTime ? (\n <span className={styles.timing}>\n {`${humanizeTime(job.startTime * 1000, HumanizeTimeFormat.accurate)}${\n job.endTime\n ? ` (${moment.duration(job.endTime * 1000 - job.startTime * 1000).humanize({ ss: -1 })})`\n : \"\"\n }`}\n </span>\n ) : null}\n </div>\n {!!progress && !readOnly && (\n <ToolProgressLine progress={progress} failed={failed} />\n )}\n </div>\n );\n}\n","import type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport type { ConversationState, JobState, TaskState } from \"./interfaces.js\";\n\nexport const DONE_STATES = [\n \"completed\",\n \"failed\",\n \"canceled\",\n \"terminated\",\n] as (ConversationState | TaskState | JobState | undefined)[];\n\nexport const GENERAL_DONE_STATES = [...DONE_STATES, \"paused\"] as (\n | ConversationState\n | TaskState\n | JobState\n | undefined\n)[];\n\nexport const NON_WORKING_STATES = [...GENERAL_DONE_STATES, \"input-required\"];\n\nexport const ICON_CLOSE: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"x\",\n};\n\nexport const ICON_LOADING: GeneralIconProps = {\n lib: \"antd\",\n icon: \"loading-3-quarters\",\n spinning: true,\n};\n\nexport const ICON_CANVAS: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"network\",\n} as GeneralIconProps;\n\nexport const ICON_CHAT: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"messages-square\",\n} as GeneralIconProps;\n\nexport const ICON_FEEDBACK: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"message-square\",\n};\n\nexport const ICON_EXTERNAL_LINK: GeneralIconProps = {\n lib: \"lucide\",\n icon: \"external-link\",\n};\n\nexport const ICON_UP: GeneralIconProps = {\n lib: \"fa\",\n icon: \"angle-up\",\n};\n\nexport const ICON_DOWNLOAD: GeneralIconProps = {\n lib: \"antd\",\n icon: \"download\",\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.tool-call--aTh276av{--failed-color:#f24c25;--border-color:#e2e2ec;--status-border-color:rgba(226,226,236,0.8);font-size:13px;color:#595959;border-radius:10px;border:1px solid var(--border-color);background:#e6e9f3}.tool-call--aTh276av:not(.read-only--xWUswNds):hover{background:#e4e9fb;border:1px solid #b8c1ff}.tool-call--aTh276av:not(:last-child){margin-bottom:10px}.tool-call--aTh276av:not(.read-only--xWUswNds){cursor:pointer}.tool-call--aTh276av .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid var(--status-border-color)}.read-only--xWUswNds{font-size:14px;padding:4px}.failed--sz70SlSa{background:#fef5f3}.failed--sz70SlSa:not(.read-only--xWUswNds):hover{background:#fee7e1;border:1px solid #ffc3b5}.failed--sz70SlSa .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid rgba(253,225,218,0.8)}.status--V5ZXGYOG{height:24px;display:flex;align-items:center;padding:0 12px;color:#262626}.timing--GjuZkMuV{display:none;color:#8c8c8c}.read-only--xWUswNds .timing--GjuZkMuV,\n[class^=\"node-job--\"]:hover .timing--GjuZkMuV,\n.status--V5ZXGYOG:hover .timing--GjuZkMuV{display:block}.icon--LTp5Jjna{margin-right:8px;color:#8c8c8c}.failed--sz70SlSa .icon--LTp5Jjna{color:var(--failed-color)}.name--FwiqyIlQ{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tool-call\": `tool-call--aTh276av`,\n\t\"read-only\": `read-only--xWUswNds`,\n\t\"status\": `status--V5ZXGYOG`,\n\t\"failed\": `failed--sz70SlSa`,\n\t\"timing\": `timing--GjuZkMuV`,\n\t\"icon\": `icon--LTp5Jjna`,\n\t\"name\": `name--FwiqyIlQ`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CmdbInstanceDetail.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CmdbInstanceDetail.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { orderBy, uniqueId, upperFirst } from \"lodash\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport {\n // UseBrickConf,\n type BrickConf,\n type BrickEventHandler,\n type ContextConf,\n type UseSingleBrickConf,\n} from \"@next-core/types\";\nimport { hasOwnProperty, isObject } from \"@next-core/utils/general\";\nimport type { DescriptionItem } from \"@next-bricks/presentational/descriptions\";\nimport type { CmdbInstanceDetailData } from \"../interfaces\";\n// import { getPreGeneratedAttrViews } from \"../utils/converters/getPreGeneratedAttrViews\";\n// import { convertToStoryboard } from \"../utils/converters/raw-data-generate/convert\";\nimport type { JSONSchema, JSONSchemaObject } from \"../json-schema\";\nimport styles from \"./CmdbInstanceDetail.module.css\";\nimport { createPortal } from \"../utils/createPortal\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { ICON_LOADING } from \"../../shared/constants\";\n\n/**\n * 如果属性数量超过阈值,则使用两列布局\n */\nconst LIST_SPLIT_THRESHOLD = 6;\n\n/**\n * 如果条目数量超过阈值,则使用表格显示\n */\nconst SHOW_AS_TABLE_THRESHOLD = 2;\n\nconst BUILTIN_FN_STRINGIFY = \"__builtin_fn_stringify\";\n\nexport function CmdbInstanceDetail({\n objectId,\n detail,\n outputSchema,\n}: CmdbInstanceDetailData) {\n const rootId = useMemo(() => uniqueId(), []);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n setLoading(true);\n try {\n const { bricks, context } = await convertCmdbInstanceDetail(\n detail,\n objectId,\n outputSchema,\n rootId\n );\n if (ignore) {\n return;\n }\n await rootRef.current?.render(bricks, { context });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [detail, objectId, outputSchema, rootId]);\n\n return (\n <div className={styles.container}>\n {loading && <WrappedIcon className={styles.loading} {...ICON_LOADING} />}\n <div data-root-id={rootId} ref={ref} />\n </div>\n );\n}\n\nfunction isComplexType(type: JSONSchema[\"type\"] | undefined): boolean {\n return !type || type === \"object\" || type === \"array\";\n}\n\nfunction isEmptyValue(detail: Record<string, any>, key: string) {\n return (\n !hasOwnProperty(detail, key) ||\n detail[key] == null ||\n detail[key] === \"\" ||\n (Array.isArray(detail[key]) && detail[key].length === 0)\n );\n}\n\nasync function convertCmdbInstanceDetail(\n detail: Record<string, any>,\n objectId: string,\n outputSchema: JSONSchema | string | undefined,\n rootId: string\n): Promise<{ bricks: BrickConf[]; context: ContextConf[] }> {\n // const attrViews = await getPreGeneratedAttrViews(objectId, 1);\n\n let schema: JSONSchema | undefined;\n if (typeof outputSchema === \"string\") {\n try {\n schema = JSON.parse(outputSchema) as JSONSchema;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse outputSchema as JSON\", e);\n }\n } else {\n schema = outputSchema;\n }\n\n let list: DescriptionItem[];\n const modals: BrickConf[] = [];\n const context: ContextConf[] = [\n {\n name: BUILTIN_FN_STRINGIFY,\n value: builtinFnStringify,\n },\n ];\n\n function convertArrayOfObjects(\n valueAccessor: string,\n schema: JSONSchemaObject,\n label: string,\n idPrefix: string,\n needContext?: boolean\n ): UseSingleBrickConf {\n const props = getOrderedProps(schema);\n const key = props.length > 0 ? props[0][0] : null;\n const modalId = normalizeIdentifier(`modal__${idPrefix}`);\n const contextId = normalizeIdentifier(`context__${idPrefix}`);\n if (needContext) {\n context.push({\n name: contextId,\n });\n }\n\n const modal: BrickConf = {\n brick: \"eo-modal\",\n portal: true,\n properties: {\n dataset: {\n modalId,\n },\n width: \"800px\",\n themeVariant: \"elevo\",\n modalTitle: label,\n hideCancelButton: true,\n maskClosable: true,\n keyboard: true,\n },\n };\n\n modals.push(modal);\n\n const columns: {\n key: string;\n dataIndex: string;\n title: string;\n useChildren?: string;\n }[] = [];\n const tableChildren: UseSingleBrickConf[] = [];\n\n for (const [k, v] of props) {\n let useChildren: string | undefined;\n if (v.type === \"array\" && v.items.type === \"object\") {\n useChildren = `[${k}]`;\n tableChildren.push({\n ...convertArrayOfObjects(\n \"DATA.cellData\",\n v.items,\n v.description || upperFirst(k),\n `${idPrefix}__${k}`,\n true\n ),\n slot: useChildren,\n });\n } else if (v.type === \"object\") {\n useChildren = `[${k}]`;\n tableChildren.push({\n ...convertObject(\n \"DATA.cellData\",\n v,\n v.description || upperFirst(k),\n `${idPrefix}__${k}`,\n true\n ),\n slot: useChildren,\n });\n }\n\n columns.push({\n key: k,\n dataIndex: k,\n title: v.description || upperFirst(k),\n useChildren,\n });\n }\n\n modal.children = [\n {\n brick: \"eo-next-table\",\n properties: {\n dataSource: needContext\n ? `<%= { list: CTX.${contextId} } %>`\n : `<% { list: (${valueAccessor}) } %>`,\n columns,\n themeVariant: \"elevo\",\n pagination: false,\n bordered: true,\n },\n children: tableChildren,\n },\n ];\n\n const clickHandler: BrickEventHandler[] = [\n ...((needContext\n ? [\n {\n action: \"context.replace\",\n args: [\n {\n name: contextId,\n value: `<% ${valueAccessor} %>`,\n },\n ],\n },\n ]\n : []) as BrickEventHandler[]),\n {\n target: `[data-root-id=\"${rootId}\"] [data-modal-id=\"${modalId}\"]`,\n method: \"open\",\n },\n ];\n\n return {\n brick: \"span\",\n if: `<% !!(${valueAccessor}) %>`,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \":forEach\",\n dataSource: `<% (${valueAccessor}).slice(0, ${SHOW_AS_TABLE_THRESHOLD}) %>`,\n children: [\n {\n brick: \"eo-tag\",\n properties: {\n textContent: `<% CTX.${BUILTIN_FN_STRINGIFY}(ITEM, ${JSON.stringify(key)}, ${JSON.stringify(props[0]?.[1].type)}) %>`,\n outline: true,\n style: {\n cursor: \"pointer\",\n },\n },\n events: {\n click: clickHandler,\n },\n },\n ],\n },\n {\n brick: \"eo-link\",\n if: `<% (${valueAccessor}).length > ${SHOW_AS_TABLE_THRESHOLD} %>`,\n properties: {\n textContent: `<% \\`+\\${(${valueAccessor}).length - ${SHOW_AS_TABLE_THRESHOLD}}\\` %>`,\n },\n events: {\n click: clickHandler,\n },\n },\n ],\n };\n }\n\n function convertObject(\n valueAccessor: string,\n schema: JSONSchemaObject,\n label: string,\n idPrefix: string,\n needContext?: boolean\n ): UseSingleBrickConf {\n const props = getOrderedProps(schema);\n const key = props.length > 0 ? props[0][0] : null;\n const modalId = normalizeIdentifier(`modal__${idPrefix}`);\n const contextId = normalizeIdentifier(`context__${idPrefix}`);\n if (needContext) {\n context.push({\n name: contextId,\n });\n }\n\n modals.push({\n brick: \"eo-modal\",\n portal: true,\n properties: {\n dataset: {\n modalId,\n },\n themeVariant: \"elevo\",\n modalTitle: label,\n hideCancelButton: true,\n maskClosable: true,\n keyboard: true,\n },\n children: [\n {\n brick: \"eo-descriptions\",\n properties: {\n themeVariant: \"elevo\",\n column: 1,\n dataSource: needContext\n ? `<%= CTX.${contextId} %>`\n : `<% ${valueAccessor} %> `,\n list: props.map(([k, v]) => ({\n label: v.description || upperFirst(k),\n field: k,\n })),\n },\n },\n ],\n });\n\n return {\n brick: \"span\",\n if: `<% !!(${valueAccessor}) %>`,\n properties: {\n style: {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"0.5em\",\n },\n },\n children: [\n {\n brick: \"eo-tag\",\n properties: {\n textContent: `<% CTX.${BUILTIN_FN_STRINGIFY}(${valueAccessor}, ${JSON.stringify(key)}, ${JSON.stringify(props[0]?.[1].type)}) %>`,\n outline: true,\n style: {\n cursor: \"pointer\",\n },\n },\n events: {\n click: [\n ...((needContext\n ? [\n {\n action: \"context.replace\",\n args: [\n {\n name: contextId,\n value: `<% ${valueAccessor} %>`,\n },\n ],\n },\n ]\n : []) as BrickEventHandler[]),\n {\n target: `[data-root-id=\"${rootId}\"] [data-modal-id=\"${modalId}\"]`,\n method: \"open\",\n },\n ],\n },\n },\n ],\n };\n }\n\n if (schema?.type === \"object\") {\n const entries = Object.entries<JSONSchema>(schema.properties);\n list = entries.map<DescriptionItem>(([key, def]) => {\n const { description, type } = def;\n const label = description || upperFirst(key);\n\n if (isEmptyValue(detail, key)) {\n return {\n label,\n text: \"\",\n };\n }\n\n if (type === \"array\" && Array.isArray(detail[key])) {\n const { items } = def;\n if (items?.type === \"object\") {\n const contextName = normalizeIdentifier(`context__${key}`);\n context.push({\n name: contextName,\n value: detail[key],\n });\n\n return {\n label,\n useBrick: convertArrayOfObjects(\n `CTX.${contextName}`,\n items,\n label,\n key\n ),\n };\n }\n\n if (!isComplexType(items?.type)) {\n return {\n label,\n text: detail[key].join(\", \"),\n };\n }\n }\n\n if (type === \"object\" && isObject(detail[key])) {\n const contextName = normalizeIdentifier(`context__${key}`);\n context.push({\n name: contextName,\n value: detail[key],\n });\n\n return {\n label,\n useBrick: convertObject(`CTX.${contextName}`, def, label, key),\n };\n }\n\n if (isComplexType(type)) {\n return {\n label,\n text: JSON.stringify(detail[key], null, 2),\n };\n }\n\n // const candidate = attrViews?.get(key);\n // if (candidate) {\n // const brick = convertToStoryboard(candidate, key, {\n // ignoreStyle: true,\n // });\n // if (brick) {\n // return {\n // label,\n // useBrick: brick as UseBrickConf,\n // };\n // }\n // }\n\n return {\n label,\n field: key,\n };\n });\n } else {\n list = Object.keys(detail).map((key) => ({\n label: upperFirst(key),\n field: key,\n }));\n }\n\n return {\n bricks: [\n {\n brick: \"eo-descriptions\",\n properties: {\n themeVariant: \"elevo\",\n column: list.length > LIST_SPLIT_THRESHOLD ? 2 : 1,\n dataSource: detail,\n list,\n },\n },\n ...modals,\n ],\n context,\n };\n}\n\nfunction normalizeIdentifier(identifier: string): string {\n return identifier.replace(/[^a-zA-Z0-9_]+/g, \"_\");\n}\n\nfunction builtinFnStringify(\n value: Record<string, unknown>,\n key: string | null,\n type: JSONSchema[\"type\"] | undefined\n): string {\n if (key === null || isEmptyValue(value, key)) {\n return \"\";\n }\n const v = value[key];\n if (isComplexType(type) && isObject(v)) {\n return JSON.stringify(v, null, 2);\n }\n return String(v);\n}\n\nfunction getOrderedProps(schema: JSONSchemaObject) {\n const props = Object.entries(schema.properties);\n if (!schema.required?.length) {\n return props;\n }\n const propKeys = Object.keys(schema.properties);\n return orderBy(\n props,\n [\n ([k]) => {\n const requiredIndex = schema.required!.indexOf(k);\n if (requiredIndex === -1) {\n return schema.required!.length + propKeys.indexOf(k);\n }\n return requiredIndex;\n },\n ],\n [\"asc\"]\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FileList.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FileList.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useContext, useMemo, useState } from \"react\";\nimport classNames from \"classnames\";\nimport type { FileInfo } from \"../interfaces\";\nimport styles from \"./FileList.module.css\";\nimport { K, t } from \"./i18n\";\nimport {\n formatFileSize,\n getFileTypeAndIcon,\n} from \"../../cruise-canvas/utils/file\";\nimport { getImageUrl } from \"../FilePreview/getImageUrl\";\nimport { TaskContext } from \"../TaskContext\";\nimport { WrappedIcon } from \"../bricks\";\nimport { ICON_UP } from \"../constants\";\n\nexport interface FileListProps {\n files: FileInfo[];\n large?: boolean;\n ui?: \"canvas\" | \"chat\";\n}\n\nexport function FileList({ files, large, ui }: FileListProps) {\n const { setActiveFile, setActiveImages } = useContext(TaskContext);\n\n const filesWithDisplayInfo = useMemo(() => {\n return files.map((file) => {\n const [displayType, icon] = getFileTypeAndIcon(file.mimeType, file.name);\n return {\n file,\n displayType,\n icon,\n };\n });\n }, [files]);\n\n const imageFiles = filesWithDisplayInfo\n .filter((file) => file.displayType === \"Image\" && file.file.uri)\n .map((f) => f.file);\n const allImages = imageFiles.length === files.length;\n // 超出数量,多余的收起来\n const limit = allImages ? 8 : 6;\n const exceeded = files.length > limit;\n const [expanded, setExpanded] = useState(false);\n const filteredList = expanded\n ? filesWithDisplayInfo\n : filesWithDisplayInfo.slice(0, limit);\n\n return (\n <>\n <ul\n className={classNames(styles.files, {\n [styles.large]: large,\n [styles.images]: allImages,\n [styles.single]: filesWithDisplayInfo.length === 1,\n [styles.chat]: ui === \"chat\",\n })}\n >\n {filteredList.map(({ file, displayType, icon }, index) => {\n return (\n <li key={index}>\n <a\n className={allImages ? styles.image : styles.file}\n onClick={() => {\n if (displayType === \"Image\" && file.uri) {\n setActiveImages({\n files: imageFiles,\n file,\n });\n } else {\n setActiveFile(file);\n }\n }}\n >\n {allImages ? (\n <>\n <img src={getImageUrl(file.uri!)} fetchPriority=\"low\" />\n {exceeded && index === limit - 1 && (\n <>\n <div className={styles.mask} />\n <div className={styles.overlay}>\n {`+${files.length - limit + 1}`}\n </div>\n </>\n )}\n </>\n ) : (\n <>\n <img\n className={styles.icon}\n src={icon}\n width={26}\n height={32}\n />\n <div className={styles.content}>\n <div className={styles.name}>\n {file.name || t(K.UNTITLED)}\n </div>\n <div className={styles.metadata}>\n {`${displayType}${file.size ? ` · ${formatFileSize(file.size)}` : \"\"}`}\n </div>\n </div>\n </>\n )}\n </a>\n </li>\n );\n })}\n </ul>\n {exceeded && !allImages && (\n <button\n className={classNames(styles.expand, {\n [styles.collapsed]: !expanded,\n })}\n onClick={() => setExpanded((prev) => !prev)}\n >\n <WrappedIcon {...ICON_UP} />\n {expanded ? t(K.COLLAPSE) : t(K.SHOW_ALL_FILES)}\n </button>\n )}\n </>\n );\n}\n","export interface GeneralNode {\n id: string;\n upstream?: string[];\n parent?: string;\n hidden?: boolean;\n}\n\nexport function getOrderedNodes<T extends GeneralNode>(nodes: T[]) {\n const map = new Map<string, T>();\n const downstreamMap = new Map<string, string[]>();\n const roots: string[] = [];\n const rootChildren: string[] = [];\n const childMap: Map<string, string> = new Map();\n\n // Ignore sub nodes\n for (const node of nodes) {\n map.set(node.id, node);\n if (node.parent) {\n childMap.set(node.parent, node.id);\n } else {\n rootChildren.push(node.id);\n }\n }\n\n // Setup downstream relations\n for (const node of nodes) {\n for (const up of node.upstream ?? []) {\n let downstream = downstreamMap.get(up);\n if (!downstream) {\n downstreamMap.set(up, (downstream = []));\n }\n downstream.push(node.id);\n }\n\n if (\n !node.parent &&\n !node.upstream?.length /* &&\n (showHiddenNodes || !node.hidden) */\n ) {\n roots.push(node.id);\n }\n }\n\n // Get BFS order of nodes\n const list: string[] = [];\n const visitedNodes = new Set<string>();\n const queue: string[] = [...roots];\n const leaves: string[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n if (visitedNodes.has(id)) {\n continue;\n }\n visitedNodes.add(id);\n list.push(id);\n const downstream = downstreamMap.get(id);\n if (downstream?.length) {\n queue.push(...downstream);\n } else {\n leaves.push(id);\n }\n }\n\n return { list, map, roots, leaves, childMap, downstreamMap };\n}\n","import type { MessageChunk } from \"../chat-stream/interfaces\";\nimport type {\n Task,\n ServiceFlowRun,\n ActivityWithFlow,\n ConversationError,\n Job,\n} from \"../shared/interfaces\";\nimport { getTaskTree, type TaskTreeNode } from \"./getTaskTree\";\n\nexport function getFlatChunks(\n tasks: Task[],\n errors: ConversationError[],\n flowMap?: Map<string, ServiceFlowRun>,\n activityMap?: Map<string, ActivityWithFlow>,\n skipActivitySubTasks?: boolean\n) {\n const taskTree = getTaskTree(tasks);\n const chunks: MessageChunk[] = [];\n const jobMap = new Map<string, Job>();\n\n const collectChunks = (taskNode: TaskTreeNode, level: number) => {\n const flow = flowMap?.get(taskNode.task.id);\n\n const activityWithFlow = activityMap?.get(taskNode.task.id);\n if (activityWithFlow) {\n chunks.push({\n type: \"activity\",\n activity: activityWithFlow.activity,\n flow: activityWithFlow.flow,\n task: taskNode.task,\n });\n }\n\n const shouldSkip = activityWithFlow && skipActivitySubTasks;\n\n for (const { job, subTask } of taskNode.children) {\n if (shouldSkip) {\n if (\n (job.state === \"completed\" &&\n job.messages?.length &&\n job.messages.every((msg) => msg.role === \"user\")) ||\n job.hil\n ) {\n chunks.push({\n type: \"job\",\n job,\n level,\n fromSkippedSubTask: true,\n });\n }\n continue;\n }\n\n if (job.type === \"serviceFlow\") {\n if (flow) {\n chunks.push({\n type: \"flow\",\n flow,\n task: taskNode.task,\n });\n }\n } else if (subTask) {\n collectChunks(subTask, level + 1);\n } else {\n chunks.push({\n type: \"job\",\n job,\n level,\n });\n }\n }\n\n const taskErrors = errors.filter(\n (error) => error.taskId === taskNode.task.id && error.error\n );\n for (const error of taskErrors) {\n chunks.push({\n type: \"error\",\n error: error.error!,\n });\n }\n };\n\n const collectJobs = (taskNode: TaskTreeNode) => {\n for (const { job, subTask } of taskNode.children) {\n jobMap.set(job.id, job);\n if (subTask) {\n collectJobs(subTask);\n }\n }\n };\n\n // Get flattened jobs\n for (const taskNode of taskTree) {\n collectChunks(taskNode, 0);\n collectJobs(taskNode);\n }\n\n for (const error of errors) {\n if (!error.taskId && error.error) {\n chunks.push({\n type: \"error\",\n error: error.error,\n });\n }\n }\n\n return { chunks, jobMap };\n}\n","import type { Task, Job } from \"../shared/interfaces\";\nimport { getOrderedNodes } from \"./getOrderedNodes\";\n\nexport interface TaskTreeNode {\n task: Task;\n children: JobTreeNode[];\n}\n\nexport interface JobTreeNode {\n job: Job;\n subTask?: TaskTreeNode;\n}\n\nexport function getTaskTree(tasks: Task[]): TaskTreeNode[] {\n const { list: taskIds, map: taskMap, childMap } = getOrderedNodes(tasks);\n\n const processedTaskMap = new Map(\n [...taskMap.entries()].map(([taskId, task]) => {\n return [taskId, getOrderedNodes(task.jobs)];\n })\n );\n\n const buildTaskTreeNode = (taskId: string): TaskTreeNode => {\n const task = taskMap.get(taskId)!;\n const processedTask = processedTaskMap.get(taskId)!;\n const { list: jobIds, map: jobMap } = processedTask;\n\n const children: JobTreeNode[] = jobIds.map((jobId) => {\n const job = jobMap.get(jobId)!;\n const subTaskId = childMap.get(job.id);\n if (subTaskId) {\n return {\n job,\n subTask: buildTaskTreeNode(subTaskId),\n };\n }\n return { job };\n });\n\n return {\n task,\n children,\n };\n };\n\n return taskIds.map((taskId) => buildTaskTreeNode(taskId));\n}\n","// istanbul ignore file\n\n/*\nnpx shiki-codegen \\\n --langs json,javascript,typescript,html,html-derivative,xml,css,markdown,mermaid,jsx,tsx,shellscript,python,go,sql \\\n --themes light-plus,dark-plus \\\n --engine oniguruma \\\n ./shared/shiki/src/bundle.ts\n*/\n\nimport lightPlus from \"@shikijs/themes/light-plus\";\nimport darkPlus from \"@shikijs/themes/dark-plus\";\n\n/* Generate by @shikijs/codegen */\nimport type {\n DynamicImportLanguageRegistration,\n HighlighterGeneric,\n ThemeInput,\n} from \"@shikijs/types\";\nimport {\n createSingletonShorthands,\n createdBundledHighlighter,\n} from \"@shikijs/core\";\nimport { createOnigurumaEngine } from \"@shikijs/engine-oniguruma\";\n\ntype BundledLanguage =\n | \"json\"\n | \"javascript\"\n | \"js\"\n | \"typescript\"\n | \"ts\"\n | \"html\"\n | \"html-derivative\"\n | \"xml\"\n | \"css\"\n | \"markdown\"\n | \"md\"\n | \"mermaid\"\n | \"mmd\"\n | \"jsx\"\n | \"tsx\"\n | \"shellscript\"\n | \"bash\"\n | \"sh\"\n | \"shell\"\n | \"zsh\"\n | \"python\"\n | \"py\"\n | \"go\"\n | \"sql\";\ntype BundledTheme = \"light-plus\" | \"dark-plus\";\ntype Highlighter = HighlighterGeneric<BundledLanguage, BundledTheme>;\n\nconst bundledLanguages = {\n json: () => import(\"@shikijs/langs/json\"),\n javascript: () => import(\"@shikijs/langs/javascript\"),\n js: () => import(\"@shikijs/langs/javascript\"),\n typescript: () => import(\"@shikijs/langs/typescript\"),\n ts: () => import(\"@shikijs/langs/typescript\"),\n html: () => import(\"@shikijs/langs/html\"),\n \"html-derivative\": () => import(\"@shikijs/langs/html-derivative\"),\n xml: () => import(\"@shikijs/langs/xml\"),\n css: () => import(\"@shikijs/langs/css\"),\n markdown: () => import(\"@shikijs/langs/markdown\"),\n md: () => import(\"@shikijs/langs/markdown\"),\n mermaid: () => import(\"@shikijs/langs/mermaid\"),\n mmd: () => import(\"@shikijs/langs/mermaid\"),\n jsx: () => import(\"@shikijs/langs/jsx\"),\n tsx: () => import(\"@shikijs/langs/tsx\"),\n shellscript: () => import(\"@shikijs/langs/shellscript\"),\n bash: () => import(\"@shikijs/langs/shellscript\"),\n sh: () => import(\"@shikijs/langs/shellscript\"),\n shell: () => import(\"@shikijs/langs/shellscript\"),\n zsh: () => import(\"@shikijs/langs/shellscript\"),\n python: () => import(\"@shikijs/langs/python\"),\n py: () => import(\"@shikijs/langs/python\"),\n go: () => import(\"@shikijs/langs/go\"),\n sql: () => import(\"@shikijs/langs/sql\"),\n} as Record<BundledLanguage, DynamicImportLanguageRegistration>;\n\nconst bundledThemes = {\n \"light-plus\": lightPlus,\n \"dark-plus\": darkPlus,\n} as Record<BundledTheme, ThemeInput>;\n\nconst createHighlighter = /* @__PURE__ */ createdBundledHighlighter<\n BundledLanguage,\n BundledTheme\n>({\n langs: bundledLanguages,\n themes: bundledThemes,\n engine: () => createOnigurumaEngine(import(\"shiki/wasm\")),\n});\n\nconst {\n codeToHtml,\n codeToHast,\n codeToTokensBase,\n codeToTokens,\n codeToTokensWithThemes,\n getSingletonHighlighter,\n getLastGrammarState,\n} = /* @__PURE__ */ createSingletonShorthands<BundledLanguage, BundledTheme>(\n createHighlighter,\n {\n guessEmbeddedLanguages(code, lang) {\n if (lang === \"markdown\" || lang === \"md\") {\n return [\"mermaid\"];\n }\n },\n }\n);\n\nexport {\n bundledLanguages,\n bundledThemes,\n codeToHast,\n codeToHtml,\n codeToTokens,\n codeToTokensBase,\n codeToTokensWithThemes,\n getLastGrammarState,\n getSingletonHighlighter,\n};\nexport type { BundledLanguage, BundledTheme, Highlighter };\n","import { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport type { Element } from \"hast\";\nimport type Mermaid from \"mermaid\";\nimport { fromHtmlIsomorphic } from \"hast-util-from-html-isomorphic\";\nimport { getCodeLanguage } from \"./utils.js\";\n\nlet mermaidPromise: Promise<typeof Mermaid> | undefined;\n\nfunction loadMermaid() {\n if (mermaidPromise) {\n return mermaidPromise;\n }\n mermaidPromise = doLoadMermaid();\n return mermaidPromise;\n}\n\nasync function doLoadMermaid() {\n const mermaid = (await import(\"mermaid\")).default;\n mermaid.initialize({\n startOnLoad: false,\n theme: \"base\",\n themeVariables: {\n fontSize: \"14px\",\n lineColor: \"#979797\",\n primaryColor: \"#DCD2F3\",\n primaryBorderColor: \"#0000001A\",\n },\n });\n return mermaid;\n}\n\nlet count = 0;\n\nconst parser = new DOMParser();\nconst serializer = new XMLSerializer();\n\n// Reference https://github.com/remcohaszing/rehype-mermaid\nexport function rehypeMermaid() {\n return async (tree: Element) => {\n const promises: Promise<void>[] = [];\n\n visit(tree, \"element\", (node, index, parent) => {\n if (\n !parent ||\n parent.type !== \"element\" ||\n parent.tagName !== \"pre\" ||\n node.tagName !== \"code\"\n ) {\n return;\n }\n\n const lang = getCodeLanguage(node);\n\n if (lang !== \"mermaid\") {\n return;\n }\n\n promises.push(\n (async () => {\n const id = `mermaid-${count++}`;\n let svg: string;\n try {\n const mermaid = await loadMermaid();\n const result = await mermaid.render(id, toString(node));\n svg = result.svg;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error rendering mermaid diagram:\", error);\n document.getElementById(id)?.remove();\n return;\n }\n const root = parser.parseFromString(svg, \"text/html\");\n const svgElement = root.querySelector(\"svg\") as SVGSVGElement;\n\n const defs = root.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"defs\"\n );\n defs.innerHTML = `<linearGradient id=\"linear-gradient-${id}\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stop-color=\"#F0EBFA\" />\n <stop offset=\"75%\" stop-color=\"#DED4F4\" />\n <stop offset=\"100%\" stop-color=\"#C5C7FA\" />\n</linearGradient>`;\n svgElement.prepend(defs);\n\n const style = root.createElementNS(\n \"http://www.w3.org/2000/svg\",\n \"style\"\n );\n style.textContent = `\n#${id} .node rect,\n#${id} .node circle,\n#${id} .node ellipse,\n#${id} .node polygon,\n#${id} .node path {\n fill: url(#linear-gradient-${id});\n}\n#${id} .node rect {\n rx: 4;\n ry: 4;\n}\n#${id} .labelBkg {\n background-color: #f5f8ff;\n}\n#${id} .edgeLabel,\n#${id} .edgeLabel p {\n background-color: transparent;\n}\n#${id} .edgeLabel {\n color: #8c8c8c;\n font-size: 12px;\n}\n`;\n svgElement.appendChild(style);\n\n const modifiedSvg = serializer.serializeToString(svgElement);\n\n const replacements = fromHtmlIsomorphic(modifiedSvg, {\n fragment: true,\n }).children as Element[];\n parent.children.splice(index!, 1, ...replacements);\n parent.properties.className = (\n (parent.properties.className as string[]) || []\n ).concat(\"mermaid\");\n })()\n );\n });\n\n await Promise.all(promises);\n };\n}\n","import type { Element } from \"hast\";\n\nexport function getCodeLanguage(node: Element) {\n const className = (node.properties.className as string[]) || [];\n\n for (const classListItem of className) {\n if (classListItem.slice(0, 9) === \"language-\") {\n return classListItem.slice(9).toLowerCase();\n }\n }\n\n return null;\n}\n","import { useEffect, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkToRehype from \"remark-rehype\";\nimport rehypeReact, { Options as RehypeReactOptions } from \"rehype-react\";\nimport type { Components } from \"hast-util-to-jsx-runtime\";\nimport rehypeShikiFromHighlighter from \"@shikijs/rehype/core\";\nimport { getSingletonHighlighter } from \"@next-shared/shiki\";\nimport { rehypeMermaid } from \"./rehypeMermaid.js\";\n\nconst production = { Fragment, jsx, jsxs };\n\nexport interface MarkdownComponentProps {\n content?: string;\n components?: Partial<Components>;\n shiki?: {\n /** @default \"dark-plus\" */\n theme?: \"light-plus\" | \"dark-plus\";\n };\n}\n\nexport async function preloadHighlighter(\n theme: \"light-plus\" | \"dark-plus\"\n): Promise<void> {\n await getSingletonHighlighter({\n themes: [theme],\n });\n}\n\n// Reference https://github.com/remarkjs/react-remark/blob/39553e5f5c9e9b903bebf261788ff45130668de0/src/index.ts\nexport function MarkdownComponent({\n content,\n components,\n shiki,\n}: MarkdownComponentProps): JSX.Element | null {\n const [reactContent, setReactContent] = useState<JSX.Element | null>(null);\n const theme = shiki?.theme ?? \"dark-plus\";\n\n useEffect(() => {\n let ignore = false;\n (async () => {\n try {\n const highlighter = await getSingletonHighlighter({\n themes: [theme],\n });\n if (ignore) {\n return;\n }\n const vFile = await unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkToRehype)\n .use(rehypeMermaid)\n .use(rehypeShikiFromHighlighter, highlighter as any, {\n theme,\n lazy: true,\n defaultLanguage: \"text\",\n })\n .use(rehypeReact, {\n ...production,\n passNode: true,\n components,\n } as RehypeReactOptions)\n .process(content);\n if (!ignore) {\n setReactContent(vFile.result);\n }\n } catch (error) {\n if (!ignore) {\n // eslint-disable-next-line no-console\n console.error(\"Convert markdown failed:\", error);\n setReactContent(null);\n }\n }\n })();\n return () => {\n ignore = true;\n };\n }, [components, content, theme]);\n\n return reactContent;\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.container--YostHfxu{background:var(--elevo-component-background);-webkit-backdrop-filter:var(--elevo-component-backdrop-filter);backdrop-filter:var(--elevo-component-backdrop-filter);border-radius:var(--elevo-border-radius);padding:16px}.container--YostHfxu:not(:first-child){margin-top:10px}ai-portal\\\\.chat-stream .container--YostHfxu{background:rgba(255,255,255,0.6);border-radius:8px;border:1px solid rgba(0,0,0,0.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:12px 20px}.loading--FzSrGTPm{position:absolute;top:calc(50% - 7px);left:calc(50% - 7px)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--YostHfxu`,\n\t\"loading\": `loading--FzSrGTPm`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { pipes } from \"@easyops-cn/brick-next-pipes\";\nimport fileText from \"../images/file-text@2x.png\";\nimport filePdf from \"../images/file-pdf@2x.png\";\nimport fileDoc from \"../images/file-doc@2x.png\";\nimport filePpt from \"../images/file-ppt@2x.png\";\nimport fileXls from \"../images/file-xls@2x.png\";\nimport fileOther from \"../images/file-other@2x.png\";\n\nconst MIME_TYPES = new Map<string, string>([\n [\"md\", \"text/markdown\"],\n [\"pdf\", \"application/pdf\"],\n [\"doc\", \"application/msword\"],\n [\n \"docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n ],\n [\"txt\", \"text/plain\"],\n [\"csv\", \"text/csv\"],\n [\"xls\", \"application/vnd.ms-excel\"],\n [\"xlsx\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],\n [\"ppt\", \"application/vnd.ms-powerpoint\"],\n [\n \"pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ],\n [\"jpg\", \"image/jpeg\"],\n [\"jpeg\", \"image/jpeg\"],\n [\"png\", \"image/png\"],\n [\"gif\", \"image/gif\"],\n [\"bmp\", \"image/bmp\"],\n [\"webp\", \"image/webp\"],\n [\"svg\", \"image/svg+xml\"],\n]);\n\nexport function formatFileSize(size: number) {\n const [value, unit] = pipes.unitFormat(size, \"bytes\", 1);\n const number = +value;\n return `${number > 100 ? Math.round(number) : number} ${unit}`;\n}\n\nexport function getFileTypeAndIcon(\n mimeType: string | undefined,\n filename: string | undefined\n): [type: string, icon: string] {\n const type = mimeType || getMimeTypeByFilename(filename);\n\n if (type.startsWith(\"image/\")) {\n return [\"Image\", fileOther];\n }\n\n switch (type) {\n case \"text/markdown\":\n case \"text/x-markdown\":\n return [\"Markdown\", fileText];\n case \"application/pdf\":\n return [\"PDF\", filePdf];\n case \"application/msword\":\n case \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":\n return [\"Word\", fileDoc];\n case \"application/vnd.ms-excel\":\n case \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\n return [\"Excel\", fileXls];\n case \"application/vnd.ms-powerpoint\":\n case \"application/vnd.openxmlformats-officedocument.presentationml.presentation\":\n return [\"PowerPoint\", filePpt];\n }\n\n if (type.startsWith(\"text/\")) {\n return [\"Text\", fileText];\n }\n\n return [\"File\", fileOther];\n}\n\nexport function getMimeTypeByFilename(filename: string | undefined): string {\n let ext = \"\";\n const matches = filename?.match(/\\.([^.]+)$/);\n if (matches) {\n ext = matches[1].toLowerCase();\n }\n return MIME_TYPES.get(ext) ?? \"unknown\";\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ExpandedView.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ExpandedView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { getBasePath, unstable_createRoot } from \"@next-core/runtime\";\nimport { uniqueId } from \"lodash\";\nimport { convertView } from \"@next-shared/tsx-converter\";\nimport type { GraphGeneratedView } from \"../../cruise-canvas/interfaces\";\nimport styles from \"./ExpandedView.module.css\";\nimport { WrappedIcon, WrappedIconButton } from \"../../shared/bricks\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { ICON_CLOSE, ICON_EXTERNAL_LINK, ICON_FEEDBACK } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\nimport { parseTemplate } from \"../parseTemplate\";\nimport type { ParsedView } from \"../interfaces\";\nimport type { ModulePartOfComponent } from \"@next-shared/tsx-parser\";\n\nexport interface ExpandedViewProps {\n views: GraphGeneratedView[];\n}\n\nexport function ExpandedView({ views }: ExpandedViewProps) {\n const rootId = useMemo(() => uniqueId(), []);\n const {\n workspace,\n previewUrlTemplate,\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const generatedView = activeExpandedViewJobId\n ? (manuallyUpdatedViews?.get(activeExpandedViewJobId) ??\n views.find((v) => v.id === activeExpandedViewJobId)?.view)\n : null;\n const feedbackDone =\n useViewFeedbackDone(generatedView?.viewId, showFeedbackOnView) ||\n (generatedView && feedbackDoneViews?.has(generatedView.viewId));\n const [view, setView] = useState<ParsedView | null>(null);\n const canFeedback =\n !!view && !!generatedView?.viewId && generatedView.from !== \"config\";\n const [viewsWithTitle, setViewsWithTitle] = useState<\n Array<\n GraphGeneratedView & {\n title?: string;\n }\n >\n >(views);\n\n useEffect(() => {\n setView(null);\n let ignore = false;\n generatedView?.asyncConstructedView?.then((view) => {\n if (!ignore) {\n setView(view);\n }\n });\n return () => {\n ignore = true;\n };\n }, [generatedView]);\n\n useEffect(() => {\n Promise.all(\n views.map(async (v) => {\n const view = await v.view.asyncConstructedView;\n return {\n ...v,\n title: (view?.entry?.defaultExport as ModulePartOfComponent)?.title,\n };\n })\n ).then((result) => {\n setViewsWithTitle(result);\n });\n }, [views]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n if (!view) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertView(view, {\n rootId,\n workspace,\n expanded: true,\n withContexts: view.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context, functions, templates } = convertedView;\n await rootRef.current?.render(brick, { context, functions, templates });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, workspace, view]);\n\n const handleClose = useCallback(() => {\n setActiveExpandedViewJobId(null);\n }, [setActiveExpandedViewJobId]);\n\n return (\n <div className={styles[\"expanded-view\"]}>\n {loading && (\n <div className={styles.loading}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n <div\n className={classNames(styles.body, {\n // [styles.small]: sizeSmall,\n })}\n ref={containerRef}\n data-root-id={rootId}\n />\n <ul className={styles.nav}>\n {viewsWithTitle.map((view) => (\n <li key={view.id}>\n <button\n className={classNames(styles[\"nav-button\"], {\n [styles.active]: activeExpandedViewJobId === view.id,\n })}\n onClick={() => setActiveExpandedViewJobId(view.id)}\n >\n {view.title ?? \"…\"}\n </button>\n </li>\n ))}\n </ul>\n <div className={styles.buttons}>\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <WrappedIconButton\n icon={ICON_FEEDBACK}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n />\n )}\n {!!(\n generatedView?.viewId &&\n !generatedView.withContexts &&\n previewUrlTemplate\n ) && (\n <WrappedIconButton\n icon={ICON_EXTERNAL_LINK}\n onClick={() => {\n window.open(\n `${getBasePath().slice(0, -1)}${parseTemplate(\n previewUrlTemplate,\n {\n viewId: generatedView.viewId,\n }\n )}`,\n \"_blank\"\n );\n }}\n />\n )}\n <WrappedIconButton icon={ICON_CLOSE} onClick={handleClose} />\n </div>\n </div>\n );\n}\n","export const NS_LIBS_DATETIME = \"libs-datetime\";\n\nexport enum K {\n TODAY = \"TODAY\",\n YESTERDAY = \"YESTERDAY\",\n FUTURE_AFTER = \"FUTURE_AFTER\",\n FORMAT_MEDIUM_DATETIME = \"FORMAT_MEDIUM_DATETIME\",\n FORMAT_MEDIUM_DATE = \"FORMAT_MEDIUM_DATE\",\n FORMAT_SHORT_DATETIME = \"FORMAT_SHORT_DATETIME\",\n FORMAT_SHORT_DATE = \"FORMAT_SHORT_DATE\",\n FORMAT_SHORT_DAY_DATETIME = \"FORMAT_SHORT_DAY_DATETIME\",\n FORMAT_SHORT_DAY_DATE = \"FORMAT_SHORT_DAY_DATE\",\n SECONDS = \"SECONDS\",\n MILL_SECONDS = \"MILL_SECONDS\",\n MINUTES = \"MINUTES\",\n HOURS = \"HOURS\",\n DAYS = \"DARS\",\n MONTHS = \"MONTHS\",\n}\n\nexport type Locale = { [key in K]: string };\n","import { Locale, K } from \"../constants.js\";\n\nconst locale: Locale = {\n [K.YESTERDAY]: \"Yesterday\",\n [K.TODAY]: \"Today\",\n [K.FUTURE_AFTER]: \"After {{time}}\",\n [K.FORMAT_MEDIUM_DATETIME]: \"LLL\",\n [K.FORMAT_MEDIUM_DATE]: \"LL\",\n [K.FORMAT_SHORT_DATETIME]: \"MMM D ah:mm\",\n [K.FORMAT_SHORT_DATE]: \"MMM D\",\n [K.FORMAT_SHORT_DAY_DATETIME]: \"MMM D HH:mm\",\n [K.FORMAT_SHORT_DAY_DATE]: \"MMM D\",\n [K.MONTHS]: \"months\",\n [K.HOURS]: \"hours\",\n [K.SECONDS]: \"seconds\",\n [K.MILL_SECONDS]: \"millseconds\",\n [K.DAYS]: \"days\",\n [K.MINUTES]: \"minutes\",\n};\n\nexport default locale;\n","import { Locale, K } from \"../constants.js\";\n\nconst locale: Locale = {\n [K.YESTERDAY]: \"昨天\",\n [K.TODAY]: \"今天\",\n [K.FUTURE_AFTER]: \"{{time}}后\",\n [K.FORMAT_MEDIUM_DATETIME]: \"LL ah:mm\",\n [K.FORMAT_MEDIUM_DATE]: \"LL\",\n [K.FORMAT_SHORT_DATETIME]: \"MMMD日 ah:mm\",\n [K.FORMAT_SHORT_DATE]: \"MMMD日\",\n [K.FORMAT_SHORT_DAY_DATETIME]: \"MMMD日 HH:mm\",\n [K.FORMAT_SHORT_DAY_DATE]: \"MMMD日\",\n [K.MONTHS]: \"个月\",\n [K.HOURS]: \"小时\",\n [K.SECONDS]: \"秒\",\n [K.MILL_SECONDS]: \"毫秒\",\n [K.DAYS]: \"天\",\n [K.MINUTES]: \"分钟\",\n};\n\nexport default locale;\n","import { initializeI18n } from \"@next-core/i18n\";\nimport { NS_LIBS_DATETIME } from \"./constants.js\";\nimport en from \"./locales/en.js\";\nimport zh from \"./locales/zh.js\";\n\nexport function addResourceBundle(): void {\n initializeI18n(NS_LIBS_DATETIME, { en, zh });\n}\n","import moment from \"moment\";\nimport { i18n } from \"@next-core/i18n\";\nimport { NS_LIBS_DATETIME, K } from \"./i18n/constants.js\";\nimport { addResourceBundle } from \"./i18n/index.js\";\n\naddResourceBundle();\n\nconst TIME_OFFSET = 0;\n\nexport enum HumanizeTimeFormat {\n full = \"full\",\n default = \"default\",\n relative = \"relative\",\n past = \"past\",\n future = \"future\",\n accurate = \"accurate\",\n auto = \"auto\",\n}\n\nexport const humanizeTime = (\n time: moment.MomentInput,\n format: HumanizeTimeFormat = HumanizeTimeFormat.auto,\n /** 默认为 \"datetime\" */\n type?: \"datetime\" | \"date\"\n): string | null => {\n if (\n time === undefined ||\n time === null ||\n time === -Infinity ||\n time === Infinity\n ) {\n return null;\n }\n const m = moment(time);\n const now = moment().add(TIME_OFFSET);\n const fFull = type === \"date\" ? \"LL\" : \"LL HH:mm\";\n const fMedium = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_MEDIUM_DATE : K.FORMAT_MEDIUM_DATETIME}`\n );\n const fShort = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_SHORT_DATE : K.FORMAT_SHORT_DATETIME}`\n );\n const fShort24 = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_SHORT_DAY_DATE : K.FORMAT_SHORT_DAY_DATETIME}`\n );\n const fDefault = type === \"date\" ? \"LL\" : \"LL HH:mm:ss\";\n const fHourMinute = \"HH:mm\";\n let text;\n\n /* 用于精确显示时间的参数\n * 今天与昨天,显示:今天(昨天)x:x的格式,如:今天12:21、昨天16:33\n * 昨天以前的时间,显示:x月x日x时:x分,如:11月23日11:22\n * 今年以前的时间,显示:x年x月x日x时:x分,如:2016年11月11日11:11\n */\n const getAccurateTime = () => {\n const diff = +m.diff(now, \"days\", true).toFixed(1);\n let _text = \"\";\n const retVal =\n m.year() < now.year()\n ? \"lastYear\"\n : diff < -2 || m.isBefore(now.clone().add(-1, \"day\"), \"day\")\n ? \"twoDaysBefore\"\n : m.isSame(now.clone().add(-1, \"day\"), \"day\")\n ? \"yesterday\"\n : m.isSame(now, \"day\")\n ? \"sameDay\"\n : diff < 2 && m.isSame(now.clone().add(1, \"day\"), \"day\")\n ? \"nextDay\"\n : diff < 7\n ? \"nextWeek\"\n : \"default\";\n switch (retVal) {\n case \"sameDay\":\n case \"yesterday\":\n _text = `${i18n.t(`${NS_LIBS_DATETIME}:${retVal === \"yesterday\" ? K.YESTERDAY : K.TODAY}`)}${\n type === \"date\" ? \"\" : ` ${m.format(fHourMinute)}`\n }`;\n break;\n case \"lastYear\":\n _text = m.format(fFull);\n break;\n case \"twoDaysBefore\":\n _text = m.format(fShort24);\n break;\n default:\n _text = m.format(fFull);\n }\n\n return _text;\n };\n\n switch (format) {\n case HumanizeTimeFormat.full:\n text = m.format(fFull);\n break;\n case HumanizeTimeFormat.default:\n text = m.format(fDefault);\n break;\n case HumanizeTimeFormat.relative: {\n const diff = +m - +now;\n text =\n diff <= 0\n ? moment.duration(diff).humanize(true)\n : i18n.t(`${NS_LIBS_DATETIME}:${K.FUTURE_AFTER}`, {\n time: moment.duration(diff).humanize(),\n });\n break;\n }\n case HumanizeTimeFormat.past:\n text = moment.duration(Math.min(+m - +now, 0)).humanize(true);\n break;\n case HumanizeTimeFormat.future:\n text = i18n.t(`${NS_LIBS_DATETIME}:${K.FUTURE_AFTER}`, {\n time: moment.duration(Math.max(+m - +now, 0)).humanize(),\n });\n break;\n case HumanizeTimeFormat.accurate:\n text = getAccurateTime();\n break;\n default:\n text = m.format(m.year() === now.year() ? fShort : fMedium);\n }\n return text;\n};\n","import { get } from \"lodash\";\n\nexport function parseTemplate(\n template: string | undefined,\n context: Record<string, any>\n) {\n return template?.replace(/{{(.*?)}}/g, (_match: string, key: string) => {\n const value = get(context, key.trim());\n return value;\n });\n}\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type {\n DataPart,\n GeneratedView,\n Job,\n JobPatch,\n Message,\n Part,\n Task,\n TextPart,\n} from \"../../shared/interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport { getAsyncConstructedView } from \"../../shared/getAsyncConstructedView\";\n\nexport const tasks: Reducer<Task[], CruiseCanvasAction> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const tasksPatch = action.payload.tasks;\n let tasks = state;\n\n if (!Array.isArray(tasksPatch) || tasksPatch.length === 0) {\n return state;\n }\n\n for (const task of tasksPatch) {\n const taskPatch = pick(task, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"plan\",\n \"startTime\",\n \"endTime\",\n \"jobs\",\n \"aiEmployeeId\",\n ]);\n const previousTaskIndex = tasks.findIndex(\n (task) => task.id === taskPatch.id\n );\n const previousTask = tasks[previousTaskIndex];\n taskPatch.jobs = mergeJobs(\n previousTask?.jobs,\n taskPatch.jobs,\n action.workspace,\n taskPatch.aiEmployeeId ?? previousTask?.aiEmployeeId\n );\n\n if (previousTaskIndex === -1) {\n tasks = [...tasks, taskPatch as Task];\n } else {\n if (!isMatch(previousTask, taskPatch)) {\n tasks = [\n ...tasks.slice(0, previousTaskIndex),\n { ...previousTask, ...taskPatch } as Task,\n ...tasks.slice(previousTaskIndex + 1),\n ];\n }\n }\n }\n\n return tasks;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeJobs(\n previousJobs: Job[] | undefined,\n jobsPatch: JobPatch[] | undefined,\n workspace: string,\n aiEmployeeId: string | undefined\n): Job[] {\n let jobs = previousJobs ?? [];\n for (const jobPatch of jobsPatch ?? []) {\n const previousJobIndex =\n jobs?.findIndex((job) => job.id === jobPatch.id) ?? -1;\n const { messages: messagesPatch, toolCall } = jobPatch;\n\n if (typeof toolCall?.arguments === \"string\") {\n toolCall.originalArguments = toolCall.arguments;\n try {\n toolCall.arguments = JSON.parse(toolCall.arguments);\n } catch (e) {\n // Failed to parse toolCall arguments\n toolCall.arguments = {};\n toolCall.argumentsParseFailed = true;\n toolCall.argumentsParseError = e;\n }\n }\n\n if (previousJobIndex === -1) {\n const patch = {\n ...jobPatch,\n };\n if (aiEmployeeId !== undefined) {\n patch.aiEmployeeId = aiEmployeeId;\n }\n\n if (\n patch.toolCall?.name === \"create_view\" &&\n patch.state === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch, workspace);\n if (generatedView) {\n patch.generatedView = generatedView;\n }\n }\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n jobs = [\n ...jobs,\n {\n ...patch,\n messages: mergeMessages(messagesPatch),\n } as Job,\n ];\n } else {\n jobs = [...jobs, patch as Job];\n }\n } else {\n const previousJob = jobs[previousJobIndex];\n const restMessagesPatch: JobPatch = pick(jobPatch, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"instruction\",\n \"toolCall\",\n \"isError\",\n \"hidden\",\n \"startTime\",\n \"endTime\",\n \"requestHumanAction\",\n \"humanAction\",\n \"username\",\n \"cmd\",\n \"mentionedAiEmployeeId\",\n \"hil\",\n ]);\n if (aiEmployeeId !== undefined) {\n restMessagesPatch.aiEmployeeId = aiEmployeeId;\n }\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n restMessagesPatch.messages = mergeMessages([\n ...(previousJob.messages ?? []),\n ...messagesPatch,\n ]);\n }\n\n if (\n !previousJob.generatedView &&\n ([\"create_view\"] as (string | undefined)[]).includes(\n restMessagesPatch.toolCall?.name ?? previousJob.toolCall?.name\n ) &&\n (restMessagesPatch.state ?? previousJob.state) === \"completed\"\n ) {\n const generatedView = getJobGeneratedView(messagesPatch, workspace);\n if (generatedView) {\n restMessagesPatch.generatedView = generatedView;\n }\n }\n\n if (!previousJob.generatedView && !restMessagesPatch.generatedView) {\n const view = getJobStaticDataView(messagesPatch);\n if (view) {\n view.withContexts = {\n RESPONSE: getJobStaticDataResponse(restMessagesPatch.messages!),\n };\n view.asyncConstructedView = getAsyncConstructedView(view, workspace);\n restMessagesPatch.generatedView = view;\n }\n }\n\n if (!isMatch(previousJob, restMessagesPatch)) {\n jobs = [\n ...jobs.slice(0, previousJobIndex),\n {\n ...previousJob,\n ...restMessagesPatch,\n },\n ...jobs.slice(previousJobIndex + 1),\n ];\n }\n }\n }\n return jobs;\n}\n\nfunction mergeMessages(messages: Message[]): Message[] {\n const merged: Message[] = [];\n let previousRole: Message[\"role\"] | undefined;\n for (const message of messages) {\n if (!previousRole || previousRole !== message.role) {\n merged.push({ ...message });\n } else {\n const lastMessage = merged[merged.length - 1];\n lastMessage.parts = [...lastMessage.parts, ...message.parts];\n }\n previousRole = message.role;\n }\n\n for (const message of merged) {\n message.parts = mergeMessageParts(message.parts);\n }\n\n return merged;\n}\n\nfunction mergeMessageParts(parts: Part[]): Part[] {\n const merged: Part[] = [];\n let previousType: Part[\"type\"] | undefined;\n let previousDataType: string | undefined;\n for (const part of parts) {\n if (previousType === \"text\" && part.type === \"text\") {\n const lastPart = merged[merged.length - 1] as TextPart;\n lastPart.text += part.text;\n } else if (\n // Assert: previousType is data when previousDataType is defined\n previousDataType === \"stream\" &&\n part.type === \"data\" &&\n part.data?.type === \"stream\"\n ) {\n const lastPart = merged[merged.length - 1] as DataPart;\n lastPart.data.message += part.data.message;\n } else {\n merged.push({ ...part });\n }\n\n previousType = part.type;\n previousDataType = part.type === \"data\" ? part.data?.type : undefined;\n }\n return merged;\n}\n\nfunction getJobGeneratedView(\n messages: Message[] | undefined,\n workspace: string\n): GeneratedView | undefined {\n if (!messages) {\n return;\n }\n\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"text\") {\n try {\n const view = JSON.parse(part.text) as GeneratedView;\n view.asyncConstructedView = getAsyncConstructedView(\n view,\n workspace\n );\n return view;\n } catch {\n // Do nothing, continue to next part\n }\n }\n }\n }\n }\n}\n\nfunction getJobStaticDataView(\n messages: Message[] | undefined\n): GeneratedView | undefined {\n if (!messages) {\n return;\n }\n\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"data\" && part.data?.type === \"static_data_view\") {\n const view: GeneratedView = {\n viewId: part.data.viewId,\n code: part.data.code,\n from: part.data.from,\n isStaticData: true,\n };\n return view;\n }\n }\n }\n }\n}\n\nfunction getJobStaticDataResponse(messages: Message[]) {\n for (const message of messages) {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"text\") {\n try {\n return JSON.parse(part.text);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse static data response as JSON:\", e);\n }\n }\n }\n }\n }\n\n return null;\n}\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type {\n ActivityRun,\n ServiceFlowPatch,\n ServiceFlowRun,\n StageRun,\n} from \"../../shared/interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const serviceFlows: Reducer<ServiceFlowRun[], CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const serviceFlowsPatch = action.payload.serviceFlows;\n let serviceFlows = state;\n\n if (!Array.isArray(serviceFlowsPatch) || serviceFlowsPatch.length === 0) {\n return state;\n }\n\n for (const flow of serviceFlowsPatch) {\n const flowPatch = pick(flow, [\n \"taskId\",\n \"flowInstanceId\",\n \"name\",\n \"spec\",\n \"space\",\n ]) as Omit<ServiceFlowPatch, \"fullSpec\">;\n const previousFlowIndex = serviceFlows.findIndex(\n (f) => f.taskId === flowPatch.taskId\n );\n const previousFlow = serviceFlows[previousFlowIndex];\n flowPatch.spec = mergeSpec(\n previousFlow?.spec,\n flowPatch,\n flow.fullSpec\n );\n\n if (previousFlowIndex === -1) {\n serviceFlows = [...serviceFlows, flowPatch as ServiceFlowRun];\n } else {\n if (!isMatch(previousFlow, flowPatch)) {\n serviceFlows = [\n ...serviceFlows.slice(0, previousFlowIndex),\n { ...previousFlow, ...flowPatch } as ServiceFlowRun,\n ...serviceFlows.slice(previousFlowIndex + 1),\n ];\n }\n }\n }\n\n return serviceFlows;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeSpec(\n previousSpec: StageRun[] | undefined,\n flowPatch: ServiceFlowPatch,\n fullSpec: StageRun[] | undefined\n): StageRun[] {\n if (Array.isArray(fullSpec)) {\n return fullSpec;\n }\n if (!Array.isArray(flowPatch.spec)) {\n return previousSpec ?? [];\n }\n const mergedSpec: StageRun[] = previousSpec ? [...previousSpec] : [];\n\n for (const stagePatch of flowPatch.spec) {\n const stageIndex = mergedSpec.findIndex((s) => s.name === stagePatch.name);\n if (stageIndex === -1) {\n const stage = { ...stagePatch };\n stage.serviceFlowActivities ??= [];\n mergedSpec.push(stage as StageRun);\n } else {\n const activities = mergeActivities(\n mergedSpec[stageIndex].serviceFlowActivities,\n stagePatch.serviceFlowActivities\n );\n\n mergedSpec[stageIndex] = {\n ...mergedSpec[stageIndex],\n ...stagePatch,\n serviceFlowActivities: activities,\n };\n }\n }\n\n return mergedSpec;\n}\n\nfunction mergeActivities(\n previousActivities: ActivityRun[] | undefined,\n activitiesPatch: ActivityRun[] | undefined\n): ActivityRun[] {\n let activities = previousActivities ?? [];\n\n if (!Array.isArray(activitiesPatch) || activitiesPatch.length === 0) {\n return activities;\n }\n\n for (const activityPatch of activitiesPatch) {\n const activityIndex = activities.findIndex((activity) =>\n activity.taskId\n ? activity.taskId === activityPatch.taskId\n : activity.name === activityPatch.name\n );\n\n if (activityIndex === -1) {\n activities = [...activities, activityPatch];\n } else {\n activities = [\n ...activities.slice(0, activityIndex),\n { ...activities[activityIndex], ...activityPatch },\n ...activities.slice(activityIndex + 1),\n ];\n }\n }\n\n return activities;\n}\n","import { Reducer } from \"react\";\nimport type { CruiseCanvasAction, CruiseCanvasState } from \"./interfaces\";\nimport { tasks } from \"./tasks\";\nimport { conversation } from \"./conversation\";\nimport { errors } from \"./errors\";\nimport { serviceFlows } from \"./serviceFlows\";\n\ntype ReducersMapObject<S, A> = {\n [K in keyof S]: Reducer<S[K], A>;\n};\n\nfunction combineReducers<S, A>(\n reducers: ReducersMapObject<S, A>\n): Reducer<S, A> {\n return ((state, action) =>\n Object.fromEntries(\n Object.entries<Reducer<any, A>>(reducers).map(([key, value]) => [\n key,\n value(state[key as keyof S], action),\n ])\n )) as Reducer<S, A>;\n}\n\nexport const rootReducer = combineReducers<\n CruiseCanvasState,\n CruiseCanvasAction\n>({\n conversation,\n tasks,\n errors,\n serviceFlows,\n});\n","import type { Reducer } from \"react\";\nimport { isMatch, pick } from \"lodash\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport type { ConversationBaseDetail } from \"../../shared/interfaces\";\n\nexport const conversation: Reducer<\n ConversationBaseDetail | null,\n CruiseCanvasAction\n> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const patch = pick(action.payload, [\n \"id\",\n \"state\",\n \"title\",\n \"startTime\",\n \"endTime\",\n \"projectId\",\n ]);\n\n return (\n state && isMatch(state, patch) ? state : { ...state, ...patch }\n ) as ConversationBaseDetail;\n }\n\n case \"reset\":\n return null;\n\n case \"finished\":\n if (state) {\n return { ...state, finished: true };\n }\n return state;\n }\n return state;\n};\n","import type { Reducer } from \"react\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\nimport type { ConversationError } from \"../../shared/interfaces\";\n\nexport const errors: Reducer<ConversationError[], CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const { error, tasks } = action.payload;\n const lastError = state[state.length - 1];\n\n let taskId: string | undefined;\n if (tasks?.length) {\n taskId = tasks[tasks.length - 1].id;\n } else {\n taskId = lastError?.taskId;\n }\n\n if (typeof error === \"string\" && error) {\n return state.slice(0, -1).concat(\n {\n taskId,\n error,\n },\n { taskId }\n );\n }\n\n if (lastError) {\n if (lastError.error) {\n return state.concat({ taskId });\n }\n if (lastError.taskId !== taskId) {\n return state.slice(0, -1).concat({ taskId });\n }\n return state;\n }\n\n return taskId ? [{ taskId }] : state;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n","// istanbul ignore file\nimport { useCallback, useEffect, useReducer, useRef } from \"react\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport { getBasePath, handleHttpError } from \"@next-core/runtime\";\nimport { rootReducer } from \"./reducers\";\nimport type {\n ConversationPatch,\n ExtraChatPayload,\n RequestStore,\n} from \"../shared/interfaces\";\n\nconst MINIMAL_DELAY = 500;\n\nexport function useConversationDetail(\n conversationId: string,\n initialRequest?: RequestStore | null,\n replay?: boolean,\n replayDelay?: number\n) {\n const [{ conversation, tasks, serviceFlows, errors }, dispatch] = useReducer(\n rootReducer,\n null,\n () => ({\n conversation: null,\n tasks: [],\n serviceFlows: [],\n errors: [],\n })\n );\n\n const humanInputRef =\n useRef<\n (input: string | null, action?: string, extra?: ExtraChatPayload) => void\n >();\n\n const replayListRef = useRef<ConversationPatch[]>([]);\n const replayRef = useRef(replay);\n const replayDelayRef = useRef((replayDelay ?? 2) * 1000);\n const replayResolveRef = useRef<(() => void) | null>(null);\n\n const skipToResults = useCallback(() => {\n replayRef.current = false;\n if (replayResolveRef.current) {\n replayResolveRef.current();\n replayResolveRef.current = null;\n }\n }, []);\n\n const watchAgain = useCallback(async () => {\n replayRef.current = true;\n dispatch({ type: \"reset\" });\n\n let isInitial = true;\n let previousTime: number | undefined;\n for (const value of replayListRef.current) {\n if (replayRef.current) {\n let delay = replayDelayRef.current;\n if (value.time && previousTime) {\n delay = Math.min(\n Math.max(MINIMAL_DELAY, (value.time - previousTime) * 1000),\n delay\n );\n }\n previousTime = value.time;\n if (!isInitial) {\n await new Promise<void>((resolve) => {\n replayResolveRef.current = resolve;\n setTimeout(resolve, delay);\n });\n replayResolveRef.current = null;\n }\n }\n\n dispatch({ type: \"sse\", payload: value, workspace: conversationId });\n isInitial = false;\n }\n dispatch({ type: \"finished\" });\n }, [conversationId]);\n\n useEffect(() => {\n dispatch({ type: \"reset\" });\n replayListRef.current = [];\n humanInputRef.current = undefined;\n\n let ignore = false;\n let requesting = false;\n let ctrl: AbortController | undefined;\n\n const makeRequest = async (\n content: string | null,\n action?: string,\n extra?: ExtraChatPayload\n ) => {\n if (requesting) {\n return;\n }\n\n requesting = true;\n ctrl = new AbortController();\n try {\n const sseRequest = await (content === null && !action\n ? createSSEStream<ConversationPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations/${conversationId}/stream`,\n {\n signal: ctrl.signal,\n }\n )\n : createSSEStream<ConversationPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations/${conversationId}/messages`,\n {\n signal: ctrl.signal,\n method: \"POST\",\n body: JSON.stringify(\n action ? { action } : { content, ...extra }\n ),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n ));\n const stream = await sseRequest;\n let isInitial = true;\n let previousTime: number | undefined;\n for await (const value of stream) {\n if (ignore) {\n requesting = false;\n return;\n }\n\n if (replayRef.current) {\n let delay = replayDelayRef.current;\n if (value.time && previousTime) {\n delay = Math.min(\n Math.max(MINIMAL_DELAY, (value.time - previousTime) * 1000),\n delay\n );\n }\n previousTime = value.time;\n\n if (!isInitial) {\n await new Promise<void>((resolve) => {\n replayResolveRef.current = resolve;\n setTimeout(resolve, delay);\n });\n replayResolveRef.current = null;\n }\n }\n\n replayListRef.current.push(value);\n dispatch({ type: \"sse\", payload: value, workspace: conversationId });\n isInitial = false;\n }\n dispatch({ type: \"finished\" });\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"sse failed\", e);\n handleHttpError(e);\n } finally {\n requesting = false;\n }\n };\n\n humanInputRef.current = async (\n content: string | null,\n action?: string,\n extra?: ExtraChatPayload\n ) => {\n makeRequest(content, action, extra);\n };\n\n if (initialRequest?.conversationId === conversationId) {\n makeRequest(initialRequest.content, undefined, {\n cmd: initialRequest.cmd,\n files: initialRequest.files,\n aiEmployeeId: initialRequest.aiEmployeeId,\n });\n } else {\n makeRequest(null);\n }\n\n return () => {\n ignore = true;\n ctrl?.abort();\n };\n }, [conversationId, initialRequest]);\n\n return {\n conversation,\n tasks,\n serviceFlows,\n errors,\n humanInputRef,\n skipToResults,\n watchAgain,\n };\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.progress-line--CX_xuAHC{--breathing-color:rgba(205,205,217,0.7);--breathing-color-2:rgba(205,205,217,0);display:flex;flex-direction:column}.progress-line--CX_xuAHC .step--YXd66tSR{position:relative;display:flex;align-items:center;padding:10px 4px 10px 16px;color:rgba(0,0,0,0.5)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5{position:absolute;top:0;bottom:0;left:14px;width:1px}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .line--BUSBjzxD{width:1px;height:100%;background:linear-gradient(172deg,rgba(205,205,217,0) 0%,#cdcdd9 46%,rgba(205,205,217,0) 100%)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .dot--TPMEta87{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:5px;height:5px;background:rgba(205,205,217,1);border-radius:50%}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF{padding:3px;margin:0 8px 0 12px;border-radius:10px;line-height:1;background:#ffffff}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .count--RdZcMYhZ{font-weight:400}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .total--BKoLTm8c{opacity:0.6}.progress-line--CX_xuAHC .step--YXd66tSR .description--AyfMh1_M{flex:1;color:#999}.progress-line--CX_xuAHC .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{font-weight:600}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .line--BUSBjzxD{background:linear-gradient(172deg,rgba(242,76,37,0) 0%,rgba(242,76,37,0.3) 47%,rgba(242,76,37,0) 100%)}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .dot--TPMEta87{background:rgba(255,154,120,1)}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF{background:#ffd6d6}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{color:#f44336}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"progress-line\": `progress-line--CX_xuAHC`,\n\t\"step\": `step--YXd66tSR`,\n\t\"axis\": `axis--T4nVxQt5`,\n\t\"line\": `line--BUSBjzxD`,\n\t\"dot\": `dot--TPMEta87`,\n\t\"progress\": `progress--alc7SspF`,\n\t\"count\": `count--RdZcMYhZ`,\n\t\"total\": `total--BKoLTm8c`,\n\t\"description\": `description--AyfMh1_M`,\n\t\"failed\": `failed--Q9TADo_k`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FloatingButton.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./FloatingButton.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n SEND_MESSAGE = \"SEND_MESSAGE\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE = \"CONFIRM_TO_TERMINATE_THE_TASK_TITLE\",\n}\n\nconst en: Locale = {\n SEND_MESSAGE: \"Send message\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"Are you sure to terminate the task?\",\n};\n\nconst zh: Locale = {\n SEND_MESSAGE: \"发送消息\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"确定终止任务吗?\",\n};\n\nexport const NS = \"bricks/ai-portal/ChatBox\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport { showDialog, WrappedChatInput } from \"../bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { TaskContext } from \"../TaskContext\";\nimport type { ConversationState } from \"../interfaces\";\n\ninitializeI18n(NS, locales);\n\nexport interface ChatBoxProps {\n state: ConversationState | undefined;\n canChat: boolean;\n}\n\nexport function ChatBox({ state, canChat }: ChatBoxProps): JSX.Element {\n const { humanInput, onTerminate, supports, uploadOptions } =\n useContext(TaskContext);\n\n const [terminating, setTerminating] = useState(false);\n\n useEffect(() => {\n setTerminating(false);\n }, [state]);\n\n const handleTerminate = useCallback(async () => {\n try {\n await showDialog({\n type: \"confirm\",\n title: t(K.CONFIRM_TO_TERMINATE_THE_TASK_TITLE),\n content: \"\",\n });\n } catch {\n return;\n }\n onTerminate();\n setTerminating(true);\n }, [onTerminate]);\n\n return (\n <WrappedChatInput\n placeholder={t(K.SEND_MESSAGE)}\n autoFocus\n submitDisabled={!canChat}\n supportsTerminate={supports?.intercept}\n terminating={terminating}\n uploadOptions={uploadOptions}\n onChatSubmit={(e) => {\n const { content, ...extra } = e.detail;\n humanInput(content, undefined, extra);\n }}\n onTerminate={handleTerminate}\n />\n );\n}\n","import { getRemoteTsxParserWorker } from \"./workers/tsxParser.js\";\nimport type { GeneratedView, ParsedView } from \"./interfaces.js\";\n\nexport async function getAsyncConstructedView(\n generatedView: GeneratedView,\n workspace: string | undefined\n): Promise<ParsedView | null> {\n try {\n const worker = await getRemoteTsxParserWorker();\n const result = await worker.parseView(generatedView.code, {\n workspace,\n withContexts: generatedView.withContexts\n ? Object.keys(generatedView.withContexts)\n : undefined,\n });\n return {\n ...result,\n viewId: generatedView.viewId,\n withContexts: generatedView.withContexts,\n };\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse generated view:\", error);\n return null;\n }\n}\n","import { createContext, type Dispatch } from \"react\";\nimport type { FeedbackDetail } from \"../cruise-canvas/interfaces\";\nimport type {\n ActiveDetail,\n ActiveImages,\n ConversationError,\n ConversationState,\n ExampleProject,\n ExtraChatPayload,\n FileInfo,\n GeneratedView,\n Job,\n ShowCaseType,\n Task,\n UploadOptions,\n} from \"./interfaces\";\n\nexport interface TaskContextValue {\n conversationId?: string;\n conversationState?: ConversationState;\n tasks: Task[];\n errors: ConversationError[];\n workspace?: string;\n previewUrlTemplate?: string;\n replay?: boolean;\n showCases?: ShowCaseType[];\n exampleProjects?: ExampleProject[];\n uploadOptions?: UploadOptions;\n\n humanInput: (\n input: string | null,\n action?: string,\n extra?: ExtraChatPayload\n ) => void;\n onShare: () => void;\n onTerminate: () => void;\n supports?: Record<string, boolean>;\n\n activeExpandedViewJobId: string | null;\n setActiveExpandedViewJobId: Dispatch<React.SetStateAction<string | null>>;\n activeDetail: ActiveDetail | null;\n setActiveDetail: Dispatch<React.SetStateAction<ActiveDetail | null>>;\n subActiveDetail: ActiveDetail | null;\n setSubActiveDetail: Dispatch<React.SetStateAction<ActiveDetail | null>>;\n\n submittingFeedback: boolean;\n submittedFeedback: boolean;\n onSubmitFeedback: (detail: FeedbackDetail) => void;\n setShowFeedback: Dispatch<React.SetStateAction<boolean>>;\n\n showJsxEditor?: boolean;\n activeJsxEditorJob?: Job;\n setActiveJsxEditorJob?: Dispatch<React.SetStateAction<Job | undefined>>;\n manuallyUpdatedViews?: Map<string, GeneratedView>;\n updateView?: (jobId: string, view: GeneratedView) => void;\n showFeedbackOnView?: boolean;\n onFeedbackOnView?: (viewId: string) => void;\n feedbackDoneViews?: Set<string>;\n\n skipToResults?: () => void;\n watchAgain?: () => void;\n tryItOut?: () => void;\n separateInstructions?: boolean;\n activeFile: FileInfo | null;\n setActiveFile: Dispatch<React.SetStateAction<FileInfo | null>>;\n activeImages: ActiveImages | null;\n setActiveImages: Dispatch<React.SetStateAction<ActiveImages | null>>;\n}\n\nexport const TaskContext = createContext<TaskContextValue>({\n tasks: [],\n errors: [],\n humanInput: () => {},\n onShare: () => {},\n onTerminate: () => {},\n activeExpandedViewJobId: null,\n setActiveExpandedViewJobId: () => {},\n activeDetail: null,\n setActiveDetail: () => {},\n subActiveDetail: null,\n setSubActiveDetail: () => {},\n submittingFeedback: false,\n submittedFeedback: false,\n onSubmitFeedback: () => {},\n setShowFeedback: () => {},\n activeFile: null,\n setActiveFile: () => {},\n activeImages: null,\n setActiveImages: () => {},\n});\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ReadableCommand.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ReadableCommand.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport type { CommandPayload } from \"../interfaces\";\nimport styles from \"./ReadableCommand.module.css\";\nimport { fetchEmployee } from \"../fetchEmployee\";\n\nexport interface ReadableCommandProps {\n cmd?: CommandPayload;\n mentionedAiEmployeeId?: string;\n size?: \"medium\" | \"small\";\n}\n\nexport function ReadableCommand({\n cmd,\n mentionedAiEmployeeId /* , size */,\n}: ReadableCommandProps) {\n const [content, setContent] = useState(() =>\n getInitialContent(cmd, mentionedAiEmployeeId)\n );\n\n useEffect(() => {\n setContent(getInitialContent(cmd, mentionedAiEmployeeId));\n if (!cmd) {\n let ignore = false;\n (async () => {\n const employee = await fetchEmployee(mentionedAiEmployeeId!);\n if (ignore || !employee) return;\n setContent(`@${employee.name}`);\n })();\n return () => {\n ignore = true;\n };\n }\n }, [cmd, mentionedAiEmployeeId]);\n\n return (\n <>\n <span\n className={classNames(styles.command, {\n [styles.small]: true,\n })}\n >\n {content}\n </span>{\" \"}\n </>\n );\n}\n\nexport function getInitialContent(\n cmd?: CommandPayload,\n mentionedAiEmployeeId?: string\n): string {\n if (cmd) {\n switch (cmd.type) {\n case \"serviceFlowStarting\":\n return `/start service flow${[\n cmd.serviceFlowStarting.flowName,\n cmd.serviceFlowStarting.spaceName,\n ]\n .filter(Boolean)\n .slice(0, 1)\n .map((name) => `: ${name}`)\n .join(\"\")}`;\n default:\n return `/${cmd.type}`;\n }\n }\n return `@${mentionedAiEmployeeId!}`;\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-replay--RJPyOwC6{width:var(--cruise-canvas-node-width-large);max-width:100%;background:rgba(255,255,255,0.5);border-radius:12px;border:1px solid rgba(255,255,255,0.4);padding:4px}.finished--DCI6ewIN:not(.chat--YJT4RmwA){max-width:90vw}.node-replay--RJPyOwC6.chat--YJT4RmwA{margin-top:14px}.bar--Pae7qP58{background:rgba(184,187,205,0.3);border-radius:8px;border:1px solid rgba(255,255,255,0.4);-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);height:54px;display:flex;align-items:center;justify-content:space-between;padding:0 16px}.buttons--m0009sdd{display:flex;align-items:center;gap:8px}.label--VlLhkZeC{font-weight:500}.cases--czpvOoLX,\n.projects--W1KI5fUu{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.content--rFWHJyEy{padding:0 16px 16px}.heading--jlFUCX5n{margin:26px 0 10px;color:rgba(0,0,0,0.6);line-height:20px}.tips--FzM5aSiq{font-size:12px;line-height:20px;color:rgba(0,0,0,0.35);margin:-3px 0 10px}.project--BSu5VIGZ{width:100%}.project--BSu5VIGZ::part(link){height:48px;background:rgba(255,255,255,0.5);border-radius:12px;border:1px solid rgba(255,255,255,0.4);display:flex;align-items:center;padding:0 16px;gap:6px;font-weight:500;color:#262626}.project--BSu5VIGZ::part(link):hover{color:var(--elevo-color-brand)}.tag--Hp8eFjie{display:inline-block;padding:0 4px;background:rgba(37,64,255,0.1);border-radius:4px;color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-replay\": `node-replay--RJPyOwC6`,\n\t\"finished\": `finished--DCI6ewIN`,\n\t\"chat\": `chat--YJT4RmwA`,\n\t\"bar\": `bar--Pae7qP58`,\n\t\"buttons\": `buttons--m0009sdd`,\n\t\"label\": `label--VlLhkZeC`,\n\t\"cases\": `cases--czpvOoLX`,\n\t\"projects\": `projects--W1KI5fUu`,\n\t\"content\": `content--rFWHJyEy`,\n\t\"heading\": `heading--jlFUCX5n`,\n\t\"tips\": `tips--FzM5aSiq`,\n\t\"project\": `project--BSu5VIGZ`,\n\t\"tag\": `tag--Hp8eFjie`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.toolbar--ELlNUAti{position:absolute;display:flex;align-items:center;padding:3px 5px;-webkit-user-select:none;user-select:none;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3)}.divider--JeH8feaX{background:rgba(0,0,0,0.15);width:1px;height:16px}.toolbar--ELlNUAti > :not(:last-child){margin-right:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"toolbar\": `toolbar--ELlNUAti`,\n\t\"divider\": `divider--JeH8feaX`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.command--PjYZ4uqH{display:inline-block;background:rgba(37,64,255,0.06);border-radius:8px;color:#2540ff;padding:4px 6px;line-height:22px}.small--dUc9qGKv{padding:2px 6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"command\": `command--PjYZ4uqH`,\n\t\"small\": `small--dUc9qGKv`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.preview--sJLzdFVa{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:#f9fafb;display:flex;flex-direction:column;align-items:center}.header--TIurJRMB{display:flex;align-items:center;justify-content:center;padding:16px 16px 80px}.body--DbDekAy2{display:flex;align-items:center;flex:1;min-height:0;width:100%;padding:0 16px}.aside--H9sLGJQ1{padding:0 16px}.aside--H9sLGJQ1 button{width:36px;height:36px;color:#595959}.content--x9hjJT92{flex:1;min-width:0;height:100%;overflow:hidden;display:flex;align-items:center;justify-content:center}.content--x9hjJT92 img{max-width:100%;max-height:100%;object-fit:contain}.footer--pNM7uUz2{display:flex;justify-content:center;overflow-x:auto;width:100%}.images--Aro5zeU2{list-style:none;margin:0;padding:38px 0;display:flex;align-items:center;height:154px;gap:8px}.images--Aro5zeU2 li{height:60px;width:60px;border:1px solid #e8e8e8;display:flex;align-items:center;justify-content:center;border-radius:8px;overflow:hidden;opacity:0.5;cursor:pointer;transition:width 0.15s ease-in-out,height 0.15s ease-in-out}.images--Aro5zeU2 li.active--zWUDZJUd{opacity:1;height:78px;width:78px}.images--Aro5zeU2 li:not(.active--zWUDZJUd):hover{opacity:0.7}.images--Aro5zeU2 img{max-height:100%;max-width:100%;object-fit:contain}.close--pVovgmNU{position:absolute;top:16px;right:16px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"preview\": `preview--sJLzdFVa`,\n\t\"header\": `header--TIurJRMB`,\n\t\"body\": `body--DbDekAy2`,\n\t\"aside\": `aside--H9sLGJQ1`,\n\t\"content\": `content--x9hjJT92`,\n\t\"footer\": `footer--pNM7uUz2`,\n\t\"images\": `images--Aro5zeU2`,\n\t\"active\": `active--zWUDZJUd`,\n\t\"close\": `close--pVovgmNU`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n UNTITLED = \"UNTITLED\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX = \"FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX\",\n DOWNLOAD = \"DOWNLOAD\",\n SHOW_ALL_FILES = \"SHOW_ALL_FILES\",\n COLLAPSE = \"COLLAPSE\",\n}\n\nconst en: Locale = {\n UNTITLED: \"Untitled\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX:\n \"This file is unpreviewable currently, you can\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"and view it locally.\",\n DOWNLOAD: \"Download\",\n SHOW_ALL_FILES: \"Show all files\",\n COLLAPSE: \"Collapse\",\n};\n\nconst zh: Locale = {\n UNTITLED: \"未命名\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX: \"该类型文件暂不支持预览,您可以\",\n FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX: \"查看。\",\n DOWNLOAD: \"下载\",\n SHOW_ALL_FILES: \"显示所有文件\",\n COLLAPSE: \"收起\",\n};\n\nexport const NS = \"bricks/ai-portal/FilePreview\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.expanded-view--Pl3PL2nR{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:rgba(247,248,250,0.5);-webkit-backdrop-filter:blur(74px);backdrop-filter:blur(74px);padding:106px var(--page-padding-right) 40px var(--page-padding-left);overflow-y:auto;display:flex;flex-direction:column;align-items:center}.nav--dLWwzH3E{position:absolute;top:39px;left:50%;transform:translate(-50%,0);list-style:none;margin:0 0 25px;padding:4px;display:flex;justify-content:start;align-items:center;background:rgba(2,0,102,0.05);box-shadow:inset 0px 1px 2px 0px #cdd1d7;border-radius:21px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}.nav-button--zv2Yj10m{display:flex;align-items:center;height:34px;padding:0 26px;background:none;border:none;color:#595959;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.nav-button--zv2Yj10m:not(:last-child){margin-right:12px}.nav-button--zv2Yj10m.active--MHyqtaKu{background:rgba(255,255,255,0.6);border-radius:20px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px);color:var(--elevo-color-brand);text-shadow:-0.02ex 0 0 currentColor,0.02ex 0 0 currentColor}.nav-button--zv2Yj10m:hover{color:var(--elevo-color-brand)}.body--edodw95r{width:100%;max-width:1556px}.body--edodw95r.small--Y90AL_bt{max-width:804px}.loading--UxfFogUY{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.buttons--ZZYyY2LU{position:absolute;top:24px;right:24px;display:flex;gap:12px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"expanded-view\": `expanded-view--Pl3PL2nR`,\n\t\"nav\": `nav--dLWwzH3E`,\n\t\"nav-button\": `nav-button--zv2Yj10m`,\n\t\"active\": `active--MHyqtaKu`,\n\t\"body\": `body--edodw95r`,\n\t\"small\": `small--Y90AL_bt`,\n\t\"loading\": `loading--UxfFogUY`,\n\t\"buttons\": `buttons--ZZYyY2LU`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.view-toolbar--kVhd3X5H{display:flex;align-items:center;gap:8px}.button--f3fGXpYl{display:flex;background:none;border:none;padding:3px;cursor:pointer;color:#595959}.button-lucide--J7U9FEo_{font-size:16px;padding:2px}.button--f3fGXpYl:hover{color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"view-toolbar\": `view-toolbar--kVhd3X5H`,\n\t\"button\": `button--f3fGXpYl`,\n\t\"button-lucide\": `button-lucide--J7U9FEo_`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./toolbar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./toolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CreatedView.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./CreatedView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport { unstable_createRoot } from \"@next-core/runtime\";\nimport classNames from \"classnames\";\nimport { uniqueId } from \"lodash\";\nimport { convertView } from \"@next-shared/tsx-converter\";\nimport type { ModulePartOfComponent } from \"@next-shared/tsx-parser\";\nimport styles from \"./CreatedView.module.css\";\nimport sharedStyles from \"../../cruise-canvas/shared.module.css\";\nimport type { Job, ParsedView } from \"../../shared/interfaces\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { TaskContext } from \"../TaskContext\";\nimport { ICON_LOADING } from \"../constants\";\nimport { ViewToolbar } from \"./ViewToolbar\";\nimport type { BrickConf } from \"@next-core/types\";\n\nexport interface CreatedViewProps {\n job: Job;\n noHeading?: boolean;\n onSizeChange?: (size: \"medium\" | \"large\") => void;\n}\n\nexport function CreatedView({\n job,\n noHeading,\n onSizeChange,\n}: CreatedViewProps): JSX.Element {\n const rootId = useMemo(() => uniqueId(), []);\n const { workspace, manuallyUpdatedViews } = useContext(TaskContext);\n const ref = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const generatedView = manuallyUpdatedViews?.get(job.id) ?? job.generatedView!;\n const [view, setView] = useState<ParsedView | null>(null);\n const canFeedback =\n !!view && !!generatedView.viewId && generatedView.from !== \"config\";\n\n useEffect(() => {\n setView(null);\n let ignore = false;\n generatedView.asyncConstructedView?.then((view) => {\n if (!ignore) {\n setView(view);\n }\n });\n return () => {\n ignore = true;\n };\n }, [generatedView]);\n\n useEffect(() => {\n const container = ref.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n const [sizeLarge, setSizeLarge] = useState(false);\n\n useEffect(() => {\n setLoading(true);\n if (!view) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertView(view, {\n rootId,\n workspace,\n withContexts: view.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context, functions, templates } = convertedView;\n\n setSizeLarge(preferSizeLarge(brick));\n\n await rootRef.current?.render(brick, { context, functions, templates });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, workspace, view]);\n\n useEffect(() => {\n onSizeChange?.(sizeLarge ? \"large\" : \"medium\");\n }, [onSizeChange, sizeLarge]);\n\n const viewTitle = useMemo(\n () => (view?.entry?.defaultExport as ModulePartOfComponent)?.title,\n [view]\n );\n\n return (\n <>\n {noHeading ? null : (\n <div className={styles.heading}>\n <div\n className={classNames(styles.title, {\n [sharedStyles[\"shine-text\"]]: view && loading,\n })}\n >\n {view ? viewTitle : <WrappedIcon {...ICON_LOADING} />}\n </div>\n <ViewToolbar job={job} canFeedback={canFeedback} />\n </div>\n )}\n <div data-root-id={rootId} ref={ref} />\n </>\n );\n}\n\nfunction traverseBricks(\n bricks: BrickConf[],\n callback: (bricks: BrickConf) => boolean\n) {\n for (const brick of bricks) {\n if (callback(brick)) {\n break;\n }\n if (Array.isArray(brick.children)) {\n traverseBricks(brick.children, callback);\n }\n }\n}\n\nfunction preferSizeLarge(brick: BrickConf | BrickConf[]): boolean {\n let large = false;\n traverseBricks(([] as BrickConf[]).concat(brick), (b) => {\n if (b.brick === \"eo-next-table\") {\n large = true;\n return true;\n }\n if (\n b.brick === \"div\" &&\n (b.properties?.dataset as Record<string, string>)?.component ===\n \"dashboard\"\n ) {\n const widgets = b.children;\n if (Array.isArray(widgets) && widgets.length >= 7) {\n large = true;\n return true;\n }\n }\n return false;\n });\n return large;\n}\n","import { useMemo } from \"react\";\nimport type { ActivityWithFlow, ServiceFlowRun } from \"./interfaces\";\n\nexport function useFlowAndActivityMap(serviceFlows: ServiceFlowRun[]) {\n return useMemo(() => {\n const flowMap = new Map<string, ServiceFlowRun>();\n const activityMap = new Map<string, ActivityWithFlow>();\n\n for (const flow of serviceFlows) {\n if (flow.taskId) {\n flowMap.set(flow.taskId, flow);\n }\n for (const stage of flow.spec) {\n for (const activity of stage.serviceFlowActivities) {\n if (activity.taskId) {\n activityMap.set(activity.taskId, { activity, flow });\n }\n }\n }\n }\n\n return { flowMap, activityMap };\n }, [serviceFlows]);\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ViewToolbar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ViewToolbar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n FULLSCREEN = \"FULLSCREEN\",\n FEEDBACK = \"FEEDBACK\",\n OPEN_PREVIEW = \"OPEN_PREVIEW\",\n}\n\nconst en: Locale = {\n FULLSCREEN: \"Fullscreen\",\n FEEDBACK: \"Feedback\",\n OPEN_PREVIEW: \"Open preview\",\n};\n\nconst zh: Locale = {\n FULLSCREEN: \"全屏\",\n FEEDBACK: \"反馈\",\n OPEN_PREVIEW: \"打开预览\",\n};\n\nexport const NS = \"bricks/ai-portal/CreatedView\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext } from \"react\";\nimport { getBasePath } from \"@next-core/runtime\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./ViewToolbar.module.css\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { TaskContext } from \"../TaskContext\";\nimport { ICON_FEEDBACK } from \"../constants\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\nimport { parseTemplate } from \"../parseTemplate\";\nimport type { Job } from \"../interfaces\";\n\ninitializeI18n(NS, locales);\n\nexport interface ViewToolbarProps {\n job: Job;\n canFeedback?: boolean;\n}\n\nexport function ViewToolbar({\n job,\n canFeedback: propCanFeedback,\n}: ViewToolbarProps) {\n const {\n previewUrlTemplate,\n showJsxEditor,\n setActiveExpandedViewJobId,\n setActiveJsxEditorJob,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\n\n const generatedView = manuallyUpdatedViews?.get(job.id) ?? job.generatedView!;\n const feedbackDone =\n useViewFeedbackDone(generatedView.viewId, showFeedbackOnView) ||\n feedbackDoneViews?.has(generatedView.viewId);\n const canFeedback =\n propCanFeedback &&\n !!generatedView.viewId &&\n generatedView.from !== \"config\";\n\n const handleExpandClick = useCallback(() => {\n setActiveExpandedViewJobId(job.id);\n }, [job.id, setActiveExpandedViewJobId]);\n\n return (\n <div className={styles[\"view-toolbar\"]}>\n {showJsxEditor && (\n <button\n className={styles.button}\n onClick={() => {\n setActiveJsxEditorJob?.(job);\n }}\n >\n <WrappedIcon lib=\"antd\" icon=\"bug\" />\n </button>\n )}\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <button\n className={`${styles.button} ${styles[\"button-lucide\"]}`}\n title={t(K.FEEDBACK)}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n >\n <WrappedIcon {...ICON_FEEDBACK} />\n </button>\n )}\n {!!(\n generatedView.viewId &&\n !generatedView.withContexts &&\n previewUrlTemplate\n ) && (\n <button\n className={`${styles.button} ${styles[\"button-lucide\"]}`}\n title={t(K.OPEN_PREVIEW)}\n onClick={() => {\n window.open(\n `${getBasePath().slice(0, -1)}${parseTemplate(\n previewUrlTemplate,\n {\n viewId: generatedView.viewId,\n }\n )}`,\n \"_blank\"\n );\n }}\n >\n <WrappedIcon lib=\"lucide\" icon=\"external-link\" />\n </button>\n )}\n <button\n className={styles.button}\n title={t(K.FULLSCREEN)}\n onClick={handleExpandClick}\n >\n <WrappedIcon lib=\"easyops\" icon=\"expand\" />\n </button>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.human-action--WMMvJhMD{margin-top:22px}.canvas--mQCtCDkd{display:flex;justify-content:center;align-items:center;padding:24px 12px;background:rgba(62,67,102,0.05);box-shadow:0px 1px 0px 0px rgba(255,255,255,0.5);border-radius:9px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"human-action\": `human-action--WMMvJhMD`,\n\t\"canvas\": `canvas--mQCtCDkd`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.shine-text--t2t9tIJp{color:transparent;background:linear-gradient(to right,var(--shine-text-color) 0%,var(--shine-text-color) 40%,var(--shine-text-highlight-color) 50%,var(--shine-text-color) 60%,var(--shine-text-color) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:shineText--ycIJ4nxc 2s infinite linear}@keyframes shineText--ycIJ4nxc{0%{background-position:-50% 50%}100%{background-position:-250% 50%}}.markdown--t5EHw6k4 a{color:var(--elevo-color-brand)}.markdown--t5EHw6k4 a:hover{color:var(--elevo-color-brand-hover)}.markdown--t5EHw6k4 a:active{color:var(--elevo-color-brand-active)}.markdown--t5EHw6k4 .shiki{font-family:\"Fira Code\",\"Fira Mono\",Menlo,Consolas,\"DejaVu Sans Mono\",monospace;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none;font-size:13px;padding:1em;margin:0.5em 0;overflow-x:auto;border-radius:9px}.markdown--t5EHw6k4 .shiki.light-plus{background:hsl(230,1%,98%)!important}.markdown--t5EHw6k4 table{width:100%;overflow-x:auto;border-collapse:collapse}.markdown--t5EHw6k4 tr{border-top:1px solid #ccd1de}.markdown--t5EHw6k4 td,.markdown--t5EHw6k4 th{border:1px solid #ccd1de;padding:6px 13px}.markdown--t5EHw6k4{overflow-wrap:break-word}.markdown--t5EHw6k4:not(:first-child){margin-top:6px}.markdown--t5EHw6k4 p{margin:1em 0}.markdown--t5EHw6k4 > :first-child,\n.markdown-wrapper--TGg3xHyX > :first-child{margin-top:0}.markdown--t5EHw6k4 > :last-child,\n.markdown-wrapper--TGg3xHyX > :last-child{margin-bottom:0}.table-container--hekbaxrD{padding:8px 8px 10px;border-radius:12px;border:1px solid #e2e2ec;background:#ffffff}.table-container--hekbaxrD:not(:first-child){margin-top:6px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"shine-text\": `shine-text--t2t9tIJp`,\n\t\"shineText\": `shineText--ycIJ4nxc`,\n\t\"markdown\": `markdown--t5EHw6k4`,\n\t\"markdown-wrapper\": `markdown-wrapper--TGg3xHyX`,\n\t\"table-container\": `table-container--hekbaxrD`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { InstanceApi_getDetail } from \"@next-api-sdk/cmdb-sdk\";\nimport { useEffect, useState } from \"react\";\n\nconst cache = new Map<string, Promise<boolean>>();\n\nexport function useViewFeedbackDone(\n viewId: string | undefined,\n showFeedbackOnView?: boolean\n) {\n const [done, setDone] = useState(true);\n\n useEffect(() => {\n if (!viewId || !showFeedbackOnView) {\n setDone(true);\n return;\n }\n let promise = cache.get(viewId);\n if (promise === undefined) {\n promise = fetchViewFeedbackDone(viewId);\n cache.set(viewId, promise);\n }\n let ignore = false;\n promise.then((value) => {\n if (!ignore) {\n setDone(value);\n }\n });\n return () => {\n ignore = true;\n };\n }, [viewId, showFeedbackOnView]);\n\n return done;\n}\n\nasync function fetchViewFeedbackDone(viewId: string): Promise<boolean> {\n const response = await InstanceApi_getDetail(\n \"LLM_WEB_VIEW_INFO@EASYOPS\",\n viewId,\n {\n fields: \"feedback.instanceId\",\n },\n {\n priority: \"low\",\n }\n );\n return !!response?.feedback?.length;\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n SUBMIT = \"SUBMIT\",\n RESET = \"RESET\",\n FEEDBACK_NODE_TITLE = \"FEEDBACK_NODE_TITLE\",\n PROBLEM_FEEDBACK = \"PROBLEM_FEEDBACK\",\n PROBLEM_FEEDBACK_PLACEHOLDER = \"PROBLEM_FEEDBACK_PLACEHOLDER\",\n IS_THE_TASK_PLAN_COMPLETE = \"IS_THE_TASK_PLAN_COMPLETE\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT = \"IS_THE_TASK_PLAN_LOGICALLY_CORRECT\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE = \"ARE_THE_TASK_PLAN_STEPS_CONCISE\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE = \"ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT = \"IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT\",\n THANKS_FOR_YOUR_FEEDBACK = \"THANKS_FOR_YOUR_FEEDBACK\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n SUBMIT: \"Submit\",\n RESET: \"Reset\",\n FEEDBACK_NODE_TITLE: \"How do you think Elevo has done this task?\",\n PROBLEM_FEEDBACK: \"Problem feedback\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"Please describe the problem you encountered.\",\n IS_THE_TASK_PLAN_COMPLETE: \"Is the task plan complete:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"Is the task plan logically correct:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"Are the task plan steps concise:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE:\n \"Are the analytical conclusions accurate:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"Is the evidence supporting the conclusions sufficient:\",\n THANKS_FOR_YOUR_FEEDBACK: \"Thank you for helping us become better.\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n SUBMIT: \"提交\",\n RESET: \"重置\",\n FEEDBACK_NODE_TITLE: \"Elevo 完成这项任务的效果如何?\",\n PROBLEM_FEEDBACK: \"问题反馈\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"欢迎留下您的意见\",\n IS_THE_TASK_PLAN_COMPLETE: \"任务计划是否完备:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"任务计划是否逻辑正确:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"任务计划步骤是否精简:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE: \"分析结论是否准确:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"结论的支撑证据是否充足:\",\n THANKS_FOR_YOUR_FEEDBACK: \"感谢你帮我们变得更好。\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeFeedback\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeFeedback.module.css\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { WrappedButton, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\n\nlet checks:\n | Array<{\n label: string;\n value: string;\n group: \"plan\" | \"result\";\n }>\n | undefined;\n\nfunction getChecks() {\n if (!checks) {\n checks = [\n {\n label: `1. ${t(K.IS_THE_TASK_PLAN_COMPLETE)}`,\n value: \"计划完备\",\n group: \"plan\",\n },\n {\n label: `2. ${t(K.IS_THE_TASK_PLAN_LOGICALLY_CORRECT)}`,\n value: \"逻辑正确\",\n group: \"plan\",\n },\n {\n label: `3. ${t(K.ARE_THE_TASK_PLAN_STEPS_CONCISE)}`,\n value: \"步骤精简\",\n group: \"plan\",\n },\n {\n label: `4. ${t(K.ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE)}`,\n value: \"结论准确\",\n group: \"result\",\n },\n {\n label: `5. ${t(K.IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT)}`,\n value: \"支撑证据充足\",\n group: \"result\",\n },\n ];\n }\n return checks;\n}\n\nexport interface NodeFeedbackProps {\n className?: string;\n}\n\nexport function NodeFeedback({ className }: NodeFeedbackProps): JSX.Element {\n const {\n submittingFeedback,\n submittedFeedback,\n setShowFeedback,\n onSubmitFeedback,\n } = useContext(TaskContext);\n const formRef = useRef<HTMLFormElement>(null);\n const checks = getChecks();\n const [triedSubmit, setTriedSubmit] = useState(false);\n\n const handleSubmit = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(true);\n if (!formRef.current?.reportValidity()) {\n return;\n }\n const formData = new FormData(formRef.current!);\n const plan: string[] = [];\n const result: string[] = [];\n for (let i = 0; i < checks.length; i++) {\n const value = formData.get(`feedback-check-${i}`);\n if (value) {\n if (checks[i].group === \"plan\") {\n plan.push(value as string);\n } else {\n result.push(value as string);\n }\n }\n }\n onSubmitFeedback({\n plan,\n result,\n feedback: (formData.get(\"feedback\") ?? \"\") as string,\n });\n },\n [checks, onSubmitFeedback]\n );\n\n const handleReset = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(false);\n formRef.current?.reset();\n }, []);\n\n if (submittedFeedback) {\n return (\n <div\n className={classNames(\n styles[\"node-feedback\"],\n styles.submitted,\n className\n )}\n >\n {t(K.THANKS_FOR_YOUR_FEEDBACK)}\n </div>\n );\n }\n\n return (\n <div className={classNames(styles[\"node-feedback\"], className)}>\n <div className={styles.heading}>\n <div className={styles.title}>{t(K.FEEDBACK_NODE_TITLE)}</div>\n <WrappedIconButton\n icon={ICON_CLOSE}\n variant=\"mini\"\n onClick={() => setShowFeedback(false)}\n />\n </div>\n <form\n className={classNames(styles.form, { [styles.validate]: triedSubmit })}\n ref={formRef}\n >\n {checks.map((check, index) => (\n <div\n key={index}\n className={`${styles[\"form-item\"]} ${styles.horizontal}`}\n >\n <div className={styles.label}>{check.label}</div>\n <div className={styles.options}>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value={check.value}\n />\n <span>{t(K.YES)}</span>\n </label>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value=\"\"\n />\n <span>{t(K.NO)}</span>\n </label>\n </div>\n </div>\n ))}\n <div className={`${styles[\"form-item\"]} ${styles.vertical}`}>\n <label htmlFor=\"feedback-content\">{t(K.PROBLEM_FEEDBACK)}</label>\n <textarea\n id=\"feedback-content\"\n name=\"feedback\"\n placeholder={t(K.PROBLEM_FEEDBACK_PLACEHOLDER)}\n rows={2}\n />\n </div>\n <div className={styles.submit}>\n <WrappedButton themeVariant=\"elevo\" type=\"text\" onClick={handleReset}>\n {t(K.RESET)}\n </WrappedButton>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n shape=\"round\"\n onClick={handleSubmit}\n disabled={submittingFeedback}\n >\n {t(K.SUBMIT)}\n </WrappedButton>\n </div>\n </form>\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.files--CibolWoq{display:grid;grid-template-columns:repeat(auto-fit,minmax(204px,1fr));gap:4px;list-style:none;margin:12px 0 0;padding:0}.large--ucsZMWES{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.file--VpyjvXGt{background:rgba(0,0,0,0.04);border-radius:6px;display:flex;height:60px;align-items:center;padding:0 14px}.file--VpyjvXGt,\n.file--VpyjvXGt:hover{color:var(--elevo-color-brand)}.file--VpyjvXGt:hover{background:rgba(0,0,0,0.08)}.content--aY05qnew{min-width:0;flex:1}.icon--TVyjPp5x{margin-right:11px}.name--FehravZW,\n.metadata--ntXgq62x{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.name--FehravZW{color:rgba(0,0,0,0.88)}.metadata--ntXgq62x{color:rgba(0,0,0,0.45);font-size:12px;margin-top:3px}.chat--Vk4IEN60{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-left:auto;margin-top:12px;width:-moz-fit-content;width:fit-content}.chat--Vk4IEN60.images--k6XJWVhb{max-width:412px}.chat--Vk4IEN60:not(.images--k6XJWVhb){gap:8px;max-width:766px}.chat--Vk4IEN60 .file--VpyjvXGt{width:250px}.images--k6XJWVhb{display:flex;flex-wrap:wrap}.images--k6XJWVhb > li{width:100px;height:100px}.images--k6XJWVhb.single--cqRGD9YQ > li{width:200px;height:200px}.image--fvQwfADO{border:1px solid rgba(0,0,0,0.1);border-radius:6px;width:100%;height:100%;display:flex;align-items:center;justify-content:center;cursor:zoom-in;position:relative}.image--fvQwfADO img{max-width:100%;max-height:100%;object-fit:contain}.mask--K81A9CNt{position:absolute;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,0.18);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:6px}.overlay--g3Xz6kGg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;cursor:pointer;font-weight:500;font-size:20px;color:#fff}.expand--JhudzGgf{font-size:12px;color:rgba(0,0,0,0.45);display:flex;align-items:center;gap:6px;margin:12px auto 0;background:none;border:none;cursor:pointer}.chat--Vk4IEN60 + .expand--JhudzGgf{margin-right:0}.files--CibolWoq:not(.chat--Vk4IEN60) + .expand--JhudzGgf eo-icon{display:none}.expand--JhudzGgf:hover{color:rgba(0,0,0,0.65)}.expand--JhudzGgf:focus{outline:none}.expand--JhudzGgf.collapsed--rqhtueyy eo-icon{transform:rotate(180deg)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"files\": `files--CibolWoq`,\n\t\"large\": `large--ucsZMWES`,\n\t\"file\": `file--VpyjvXGt`,\n\t\"content\": `content--aY05qnew`,\n\t\"icon\": `icon--TVyjPp5x`,\n\t\"name\": `name--FehravZW`,\n\t\"metadata\": `metadata--ntXgq62x`,\n\t\"chat\": `chat--Vk4IEN60`,\n\t\"images\": `images--k6XJWVhb`,\n\t\"single\": `single--cqRGD9YQ`,\n\t\"image\": `image--fvQwfADO`,\n\t\"mask\": `mask--K81A9CNt`,\n\t\"overlay\": `overlay--g3Xz6kGg`,\n\t\"expand\": `expand--JhudzGgf`,\n\t\"collapsed\": `collapsed--rqhtueyy`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { getBasePath } from \"@next-core/runtime\";\n\nexport function getImageUrl(uri: string): string {\n return new URL(uri, `${location.origin}${getBasePath()}`).toString();\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeReplay.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeReplay.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n WATCH_AGAIN = \"WATCH_AGAIN\",\n TRY_IT_OUT = \"TRY_IT_OUT\",\n CASE_REPLAYING = \"CASE_REPLAYING\",\n CASE_REPLAY_FINISHED = \"CASE_REPLAY_FINISHED\",\n SKIP_TO_RESULTS = \"SKIP_TO_RESULTS\",\n OTHER_CASES = \"OTHER_CASES\",\n PROJECT_TIPS = \"PROJECT_TIPS\",\n GET_STARTED_WITH_PROJECTS_PREFIX = \"GET_STARTED_WITH_PROJECTS_PREFIX\",\n PROJECTS = \"PROJECTS\",\n GET_STARTED_WITH_PROJECTS_SUFFIX = \"GET_STARTED_WITH_PROJECTS_SUFFIX\",\n}\n\nconst en: Locale = {\n WATCH_AGAIN: \"Watch again\",\n TRY_IT_OUT: \"Try it out\",\n CASE_REPLAYING: \"The case is replaying...\",\n CASE_REPLAY_FINISHED: \"The case replay has finished.\",\n SKIP_TO_RESULTS: \"Skip to results\",\n OTHER_CASES: \"Other cases\",\n PROJECT_TIPS:\n \"Start your project collaboration journey and achieve shared goals with team members and AI employees.\",\n GET_STARTED_WITH_PROJECTS_PREFIX: \"Get started with \",\n PROJECTS: \"Projects\",\n GET_STARTED_WITH_PROJECTS_SUFFIX: \"\",\n};\n\nconst zh: Locale = {\n WATCH_AGAIN: \"再次观看\",\n TRY_IT_OUT: \"尝试同款\",\n CASE_REPLAYING: \"案例回放中...\",\n CASE_REPLAY_FINISHED: \"案例回放完成\",\n SKIP_TO_RESULTS: \"跳转到结果\",\n OTHER_CASES: \"其他案例\",\n PROJECT_TIPS:\n \"开启项目协作之旅,和团队成员及多位AI数字人一起实现共同制定的目标。\",\n GET_STARTED_WITH_PROJECTS_PREFIX: \"开启 \",\n PROJECTS: \"项目\",\n GET_STARTED_WITH_PROJECTS_SUFFIX: \" 体验\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeReplay\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useContext } from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeReplay.module.css\";\nimport {\n WrappedButton,\n WrappedIcon,\n WrappedLink,\n WrappedShowCase,\n} from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ICON_LOADING } from \"../../shared/constants\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport projectIcon from \"./project@2x.png\";\nimport classNames from \"classnames\";\n\ninitializeI18n(NS, locales);\n\nexport interface NodeReplayProps {\n finished?: boolean;\n ui?: \"chat\" | \"canvas\";\n}\n\nexport function NodeReplay({ finished, ui }: NodeReplayProps) {\n const {\n conversationId,\n showCases,\n exampleProjects,\n skipToResults,\n watchAgain,\n tryItOut,\n } = useContext(TaskContext);\n\n return (\n <div\n className={classNames(styles[\"node-replay\"], {\n [styles.finished]: finished,\n [styles.chat]: ui === \"chat\",\n })}\n >\n <div className={styles.bar}>\n <div className={styles.label}>\n {finished ? t(K.CASE_REPLAY_FINISHED) : t(K.CASE_REPLAYING)}\n </div>\n <div className={styles.buttons}>\n {finished ? (\n <WrappedButton themeVariant=\"elevo\" onClick={watchAgain}>\n {t(K.WATCH_AGAIN)}\n </WrappedButton>\n ) : (\n <WrappedButton themeVariant=\"elevo\" onClick={skipToResults}>\n {t(K.SKIP_TO_RESULTS)}\n </WrappedButton>\n )}\n <WrappedButton type=\"primary\" themeVariant=\"elevo\" onClick={tryItOut}>\n {t(K.TRY_IT_OUT)}\n </WrappedButton>\n </div>\n </div>\n {finished && (\n <div className={styles.content}>\n {!showCases ||\n (showCases.length > 0 && (\n <>\n <div className={styles.heading}>{t(K.OTHER_CASES)}</div>\n {showCases ? (\n <ul className={styles.cases}>\n {showCases\n .filter((item) => item.conversationId !== conversationId)\n .slice(0, 3)\n .map((item) => (\n <li key={item.conversationId}>\n <WrappedShowCase\n caseTitle={item.title}\n summary={item.summary}\n url={item.url}\n />\n </li>\n ))}\n </ul>\n ) : (\n <WrappedIcon className={styles.loading} {...ICON_LOADING} />\n )}\n </>\n ))}\n {!exampleProjects ||\n (exampleProjects.length > 0 && (\n <>\n <div className={styles.heading}>\n {t(K.GET_STARTED_WITH_PROJECTS_PREFIX)}\n <span className={styles.tag}>{t(K.PROJECTS)}</span>\n {t(K.GET_STARTED_WITH_PROJECTS_SUFFIX)}\n </div>\n <div className={styles.tips}>{t(K.PROJECT_TIPS)}</div>\n {exampleProjects ? (\n <ul className={styles.projects}>\n {exampleProjects.slice(0, 2).map((item) => (\n <li key={item.instanceId}>\n <WrappedLink className={styles.project} url={item.url}>\n <img src={projectIcon} width={16} height={16} />\n {item.name}\n </WrappedLink>\n </li>\n ))}\n </ul>\n ) : (\n <WrappedIcon className={styles.loading} {...ICON_LOADING} />\n )}\n </>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useFulfilledActiveDetail","activeDetail","jobMap","flowMap","activityMap","useMemo","type","job","get","id","flow","activityWithFlow","activity","downloadFile","file","bytes","uri","mimeType","name","filename","t","K","UNTITLED","saveAs","Blob","Uint8Array","from","atob","c","charCodeAt","link","document","createElement","href","getImageUrl","download","target","body","appendChild","click","removeChild","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","undefined","ImagesPreview","_ref","images","files","currentFile","setCurrentFile","useState","setActiveImages","useContext","TaskContext","useEffect","go","useCallback","diff","newIndex","indexOf","length","onKeyDown","e","key","preventDefault","stopPropagation","addEventListener","removeEventListener","React","className","styles","preview","header","WrappedIconButton","icon","ICON_DOWNLOAD","onClick","DOWNLOAD","aside","floatingStyles","WrappedIcon","lib","content","src","alt","footer","map","f","index","isActive","active","fetchPriority","close","ICON_CLOSE","___CSS_LOADER_EXPORT___","push","module","WrappedCodeWrapper","wrapBrick","MarkdownPre","_props$className","node","props","preProps","showCopyButton","includes","themeVariant","cache","Map","fetchEmployee","aiEmployeeId","cached","promise","async","_response$list","employee","ElevoApi_listElevoAiEmployees","employeeId","list","doFetchEmployee","set","components","pre","shikiOptions","theme","EnhancedMarkdown","ref","useRef","setHoverOnScrollableContent","CanvasContext","handleMouseMove","found","el","nativeEvent","composedPath","current","HTMLTableElement","HTMLPreElement","scrollWidth","clientWidth","handleMouseLeave","onMouseMove","onMouseLeave","MarkdownComponent","_extends","shiki","WrappedButton","WrappedLink","WrappedDrawer","onClose","onOpen","WrappedChatInput","onChatSubmit","onTerminate","WrappedShowCase","WrappedCodeBlock","WrappedBlankState","WrappedRunningFlow","onActiveChange","showDialog","unwrapProvider","createContext","onNodeResize","setActiveNodeId","hoverOnScrollableContent","useHandleEscape","activeExpandedViewJobId","activeFile","activeImages","subActiveDetail","setActiveFile","setActiveExpandedViewJobId","setActiveDetail","setSubActiveDetail","compositionRef","onCompositionStart","onCompositionEnd","RequestHumanAction","action","ui","humanInput","replay","disabled","setDisabled","classNames","canvas","shape","confirmText","FilePreview","getMimeTypeByFilename","status","setStatus","setContent","isMarkdown","embeddable","isImage","startsWith","revokeUrl","ignore","response","fetch","ok","Error","statusText","text","blob","URL","createObjectURL","error","console","revokeObjectURL","title","toolbar","toolbarStyles","divider","loading","ICON_LOADING","imageUnpreviewable","width","height","FILE_PREVIEW_UNPREVIEWABLE_TIP_PREFIX","FILE_PREVIEW_UNPREVIEWABLE_TIP_SUFFIX","image","embed","markdown","shareStyles","initializeI18n","NS","locales","ToolProgressLine","progress","failed","data","step","axis","line","dot","count","total","description","message","getToolDataProgress","toolCallMessages","progressPart","findLast","_message$parts","parts","part","_part$data","ToolCallStatus","_toolCall$annotations","variant","separateInstructions","toolCall","toolTitle","annotations","jobTitle","instruction","hasToolCallResponse","_job$messages","messages","filter","msg","role","some","readOnly","handleClick","newActiveDetail","prev","isEqual","toolState","state","isError","prefix","spinning","startTime","timing","humanizeTime","HumanizeTimeFormat","accurate","endTime","moment","humanize","ss","DONE_STATES","GENERAL_DONE_STATES","NON_WORKING_STATES","ICON_CANVAS","ICON_CHAT","ICON_FEEDBACK","ICON_EXTERNAL_LINK","ICON_UP","LIST_SPLIT_THRESHOLD","SHOW_AS_TABLE_THRESHOLD","BUILTIN_FN_STRINGIFY","CmdbInstanceDetail","objectId","detail","outputSchema","rootId","uniqueId","rootRef","container","portal","createPortal","root","unstable_createRoot","supportsUseChildren","unmount","remove","setLoading","_rootRef$current","bricks","context","_schema","schema","JSON","parse","modals","value","builtinFnStringify","convertArrayOfObjects","valueAccessor","label","idPrefix","needContext","_props$","getOrderedProps","modalId","normalizeIdentifier","contextId","modal","brick","properties","dataset","modalTitle","hideCancelButton","maskClosable","keyboard","columns","tableChildren","k","v","useChildren","items","upperFirst","slot","convertObject","dataIndex","children","dataSource","pagination","bordered","clickHandler","args","method","if","style","display","alignItems","gap","textContent","stringify","outline","cursor","events","_props$2","column","_ref2","field","Object","entries","_ref3","def","isEmptyValue","Array","isArray","contextName","useBrick","isComplexType","join","isObject","keys","convertCmdbInstanceDetail","render","hasOwnProperty","identifier","replace","String","_schema$required","required","propKeys","orderBy","_ref4","requiredIndex","FileList","large","filesWithDisplayInfo","displayType","getFileTypeAndIcon","imageFiles","allImages","limit","exceeded","expanded","setExpanded","filteredList","slice","single","chat","mask","overlay","metadata","size","formatFileSize","expand","collapsed","COLLAPSE","SHOW_ALL_FILES","getOrderedNodes","nodes","downstreamMap","roots","rootChildren","childMap","parent","_node$upstream2","up","_node$upstream","upstream","downstream","visitedNodes","Set","queue","leaves","shift","has","add","getFlatChunks","tasks","errors","skipActivitySubTasks","taskTree","taskIds","taskMap","processedTaskMap","taskId","task","jobs","buildTaskTreeNode","processedTask","jobIds","jobId","subTaskId","subTask","getTaskTree","chunks","collectChunks","taskNode","level","shouldSkip","every","hil","fromSkippedSubTask","taskErrors","collectJobs","bundledLanguages","json","javascript","js","typescript","ts","html","html-derivative","xml","css","md","mermaid","mmd","jsx","tsx","shellscript","bash","sh","shell","zsh","python","py","sql","bundledThemes","lightPlus","darkPlus","createHighlighter","createdBundledHighlighter","langs","themes","engine","createOnigurumaEngine","codeToHtml","codeToHast","codeToTokensBase","codeToTokens","codeToTokensWithThemes","getSingletonHighlighter","getLastGrammarState","createSingletonShorthands","guessEmbeddedLanguages","code","lang","mermaidPromise","parser","DOMParser","serializer","XMLSerializer","rehypeMermaid","promises","visit","tree","tagName","classListItem","toLowerCase","getCodeLanguage","svg","default","initialize","startOnLoad","themeVariables","fontSize","lineColor","primaryColor","primaryBorderColor","doLoadMermaid","toString","_document$getElementB","getElementById","parseFromString","svgElement","querySelector","defs","createElementNS","innerHTML","prepend","modifiedSvg","serializeToString","replacements","fromHtmlIsomorphic","fragment","splice","concat","Promise","all","production","Fragment","jsxs","preloadHighlighter","_shiki$theme","reactContent","setReactContent","highlighter","vFile","unified","use","remarkParse","remarkGfm","remarkToRehype","rehypeShikiFromHighlighter","lazy","defaultLanguage","rehypeReact","passNode","process","result","MIME_TYPES","unit","pipes","unitFormat","number","Math","round","fileOther","fileText","filePdf","fileDoc","fileXls","filePpt","_MIME_TYPES$get","ext","matches","match","ExpandedView","_manuallyUpdatedViews","_views$find","views","workspace","previewUrlTemplate","manuallyUpdatedViews","showFeedbackOnView","onFeedbackOnView","feedbackDoneViews","containerRef","generatedView","find","view","feedbackDone","useViewFeedbackDone","viewId","setView","canFeedback","viewsWithTitle","setViewsWithTitle","_generatedView$asyncC","asyncConstructedView","then","_view$entry","entry","defaultExport","convertedView","convertView","withContexts","functions","templates","handleClose","nav","_view$title","buttons","window","open","getBasePath","parseTemplate","NS_LIBS_DATETIME","YESTERDAY","TODAY","FUTURE_AFTER","FORMAT_MEDIUM_DATETIME","FORMAT_MEDIUM_DATE","FORMAT_SHORT_DATETIME","FORMAT_SHORT_DATE","FORMAT_SHORT_DAY_DATETIME","FORMAT_SHORT_DAY_DATE","MONTHS","HOURS","SECONDS","MILL_SECONDS","DAYS","MINUTES","en","zh","time","format","arguments","auto","Infinity","m","now","fFull","fMedium","i18n","fShort","fShort24","fDefault","full","relative","past","min","future","max","getAccurateTime","toFixed","_text","retVal","year","isBefore","clone","isSame","template","_match","trim","mergeJobs","previousJobs","jobsPatch","jobPatch","_jobs$findIndex","_jobs","previousJobIndex","findIndex","messagesPatch","originalArguments","argumentsParseFailed","argumentsParseError","_patch$toolCall","patch","getJobGeneratedView","mergeMessages","_restMessagesPatch$to","_restMessagesPatch$to2","_previousJob$toolCall","_restMessagesPatch$st","previousJob","restMessagesPatch","pick","_previousJob$messages","getJobStaticDataView","RESPONSE","getJobStaticDataResponse","getAsyncConstructedView","isMatch","merged","previousRole","lastMessage","mergeMessageParts","previousType","previousDataType","_part$data2","_part$data3","isStaticData","mergeSpec","previousSpec","flowPatch","fullSpec","spec","mergedSpec","stagePatch","stageIndex","s","_stage$serviceFlowAct","stage","serviceFlowActivities","activities","mergeActivities","previousActivities","activitiesPatch","activityPatch","activityIndex","rootReducer","reducers","conversation","payload","finished","tasksPatch","_taskPatch$aiEmployee","taskPatch","previousTaskIndex","previousTask","lastError","serviceFlows","serviceFlowsPatch","previousFlowIndex","previousFlow","fromEntries","MINIMAL_DELAY","useConversationDetail","conversationId","initialRequest","replayDelay","dispatch","useReducer","humanInputRef","replayListRef","replayRef","replayDelayRef","replayResolveRef","skipToResults","watchAgain","previousTime","isInitial","delay","resolve","setTimeout","ctrl","requesting","makeRequest","extra","AbortController","sseRequest","createSSEStream","signal","headers","stream","handleHttpError","cmd","_ctrl","abort","getFixedT","ChatBox","canChat","supports","uploadOptions","terminating","setTerminating","handleTerminate","CONFIRM_TO_TERMINATE_THE_TASK_TITLE","placeholder","SEND_MESSAGE","autoFocus","submitDisabled","supportsTerminate","intercept","worker","getRemoteTsxParserWorker","parseView","onShare","submittingFeedback","submittedFeedback","onSubmitFeedback","setShowFeedback","ReadableCommand","mentionedAiEmployeeId","getInitialContent","command","small","serviceFlowStarting","flowName","spaceName","Boolean","CreatedView","noHeading","onSizeChange","sizeLarge","setSizeLarge","traverseBricks","b","_b$properties","component","widgets","preferSizeLarge","viewTitle","heading","sharedStyles","ViewToolbar","callback","useFlowAndActivityMap","propCanFeedback","showJsxEditor","setActiveJsxEditorJob","handleExpandClick","button","FEEDBACK","OPEN_PREVIEW","FULLSCREEN","done","setDone","_response$feedback","InstanceApi_getDetail","fields","priority","feedback","fetchViewFeedbackDone","checks","getChecks","IS_THE_TASK_PLAN_COMPLETE","group","IS_THE_TASK_PLAN_LOGICALLY_CORRECT","ARE_THE_TASK_PLAN_STEPS_CONCISE","ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE","IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT","NodeFeedback","formRef","triedSubmit","setTriedSubmit","handleSubmit","_formRef$current","_formData$get","reportValidity","formData","FormData","plan","i","handleReset","_formRef$current2","reset","submitted","THANKS_FOR_YOUR_FEEDBACK","FEEDBACK_NODE_TITLE","form","validate","check","horizontal","radio","YES","NO","vertical","htmlFor","PROBLEM_FEEDBACK","PROBLEM_FEEDBACK_PLACEHOLDER","rows","submit","RESET","SUBMIT","location","origin","NodeReplay","showCases","exampleProjects","tryItOut","bar","CASE_REPLAY_FINISHED","CASE_REPLAYING","WATCH_AGAIN","SKIP_TO_RESULTS","TRY_IT_OUT","OTHER_CASES","cases","item","caseTitle","summary","url","GET_STARTED_WITH_PROJECTS_PREFIX","tag","PROJECTS","GET_STARTED_WITH_PROJECTS_SUFFIX","tips","PROJECT_TIPS","projects","instanceId","project","projectIcon"],"sourceRoot":""}
|