@next-bricks/ai-portal 0.61.2 → 0.61.4

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.
Files changed (36) hide show
  1. package/dist/bricks.json +31 -31
  2. package/dist/chunks/1770.48e868f8.js +2 -0
  3. package/dist/chunks/1770.48e868f8.js.map +1 -0
  4. package/dist/chunks/2232.1e92a135.js +2 -0
  5. package/dist/chunks/2232.1e92a135.js.map +1 -0
  6. package/dist/chunks/3186.7220c09a.js +2 -0
  7. package/dist/chunks/3186.7220c09a.js.map +1 -0
  8. package/dist/chunks/7729.1ccf3e2a.js +2 -0
  9. package/dist/chunks/7729.1ccf3e2a.js.map +1 -0
  10. package/dist/chunks/9164.abc412b7.js +2 -0
  11. package/dist/chunks/{9164.34a6f72c.js.map → 9164.abc412b7.js.map} +1 -1
  12. package/dist/chunks/cruise-canvas.bfae3138.js +2 -0
  13. package/dist/chunks/{cruise-canvas.c1a7bc9f.js.map → cruise-canvas.bfae3138.js.map} +1 -1
  14. package/dist/chunks/main.e666b2e6.js +2 -0
  15. package/dist/chunks/main.e666b2e6.js.map +1 -0
  16. package/dist/examples.json +18 -18
  17. package/dist/index.9e75c766.js +2 -0
  18. package/dist/index.9e75c766.js.map +1 -0
  19. package/dist/manifest.json +198 -198
  20. package/dist/types.json +1090 -1090
  21. package/dist-types/cruise-canvas/ToolCallDetail/ToolCallDetailDrawer.d.ts +5 -0
  22. package/dist-types/cruise-canvas/ToolCallDetail/i18n.d.ts +17 -0
  23. package/dist-types/cruise-canvas/i18n.d.ts +0 -3
  24. package/package.json +2 -2
  25. package/dist/chunks/1480.a7ffdf61.js +0 -2
  26. package/dist/chunks/1480.a7ffdf61.js.map +0 -1
  27. package/dist/chunks/2232.06e10f13.js +0 -2
  28. package/dist/chunks/2232.06e10f13.js.map +0 -1
  29. package/dist/chunks/5712.6b8e0a77.js +0 -2
  30. package/dist/chunks/5712.6b8e0a77.js.map +0 -1
  31. package/dist/chunks/9164.34a6f72c.js +0 -2
  32. package/dist/chunks/cruise-canvas.c1a7bc9f.js +0 -2
  33. package/dist/chunks/main.08d6c690.js +0 -2
  34. package/dist/chunks/main.08d6c690.js.map +0 -1
  35. package/dist/index.c67576ad.js +0 -2
  36. package/dist/index.c67576ad.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/3186.7220c09a.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/i18n.ts","webpack:///./src/cruise-canvas/Nav/Nav.module.css","webpack:///../../src/mergeRects.ts","webpack:///./src/cruise-canvas/styles.module.css?7c94","webpack:///./src/cruise-canvas/constants.ts","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css?69ec","webpack:///./src/cruise-canvas/useZoom.ts","webpack:///./src/cruise-canvas/useLayout.ts","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css?7d53","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.tsx","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css?c135","webpack:///./src/cruise-canvas/NodeStart/NodeStart.tsx","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css?7927","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.tsx","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css?5e68","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.tsx","webpack:///./src/cruise-canvas/AIEmployeeAvatar/AIEmployeeAvatar.module.css?6f51","webpack:///./src/cruise-canvas/AIEmployeeAvatar/AIEmployeeAvatar.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.tsx","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css?bd4b","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.tsx","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetailDrawer.tsx","webpack:///./src/cruise-canvas/utils/handleKeyboardNav.ts","webpack:///./src/cruise-canvas/Nav/Nav.module.css?7d2d","webpack:///./src/cruise-canvas/Nav/Nav.tsx","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.module.css?c803","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.tsx","webpack:///./src/shared/JsxEditor/JsxEditor.module.css?1c9c","webpack:///./src/shared/JsxEditor/JsxEditor.tsx","webpack:///./src/cruise-canvas/NodeError/NodeError.module.css?3e0b","webpack:///./src/cruise-canvas/NodeError/NodeError.tsx","webpack:///./src/cruise-canvas/NodeChunk/NodeChunk.tsx","webpack:///./src/cruise-canvas/CruiseCanvas.tsx","webpack:///./src/cruise-canvas/useConversationGraph.ts","webpack:///./src/cruise-canvas/useAutoCenter.ts","webpack:///./src/cruise-canvas/utils/getScrollTo.ts","webpack:///./src/cruise-canvas/NodeLoading/NodeLoading.module.css","webpack:///./src/cruise-canvas/AIEmployeeAvatar/AIEmployeeAvatar.module.css","webpack:///./src/cruise-canvas/styles.module.css","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css","webpack:///./src/shared/JsxEditor/JsxEditor.module.css","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css","webpack:///./src/cruise-canvas/NodeError/NodeError.module.css"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n TASK_COMPLETED = \"TASK_COMPLETED\",\n SHARE = \"SHARE\",\n TYPE_YOUR_MESSAGE_HERE = \"TYPE_YOUR_MESSAGE_HERE\",\n SWITCH_TO_CHAT = \"SWITCH_TO_CHAT\",\n BACK_TO_CENTER = \"BACK_TO_CENTER\",\n ZOOM_IN = \"ZOOM_IN\",\n ZOOM_OUT = \"ZOOM_OUT\",\n FULLSCREEN = \"FULLSCREEN\",\n SEND_MESSAGE = \"SEND_MESSAGE\",\n UNTITLED = \"UNTITLED\",\n DOWNLOAD = \"DOWNLOAD\",\n INITIATING_SERVICE_FLOW = \"INITIATING_SERVICE_FLOW\",\n STARTING_SERVICE_FLOW_ACTIVITY = \"STARTING_SERVICE_FLOW_ACTIVITY\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n TASK_COMPLETED: \"Task completed\",\n SHARE: \"Share\",\n TYPE_YOUR_MESSAGE_HERE: \"Type your message here\",\n SWITCH_TO_CHAT: \"Switch to chat\",\n BACK_TO_CENTER: \"Back to center\",\n ZOOM_IN: \"Zoom in\",\n ZOOM_OUT: \"Zoom out\",\n FULLSCREEN: \"Fullscreen\",\n SEND_MESSAGE: \"Send message\",\n UNTITLED: \"Untitled\",\n DOWNLOAD: \"Download\",\n INITIATING_SERVICE_FLOW: \"Initiating service flow: {{ name }}\",\n STARTING_SERVICE_FLOW_ACTIVITY: \"Starting service flow activity: {{ name }}\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n TASK_COMPLETED: \"任务完成\",\n SHARE: \"分享\",\n TYPE_YOUR_MESSAGE_HERE: \"在这里输入信息\",\n SWITCH_TO_CHAT: \"切换为聊天\",\n BACK_TO_CENTER: \"回中\",\n ZOOM_IN: \"放大\",\n ZOOM_OUT: \"缩小\",\n FULLSCREEN: \"全屏\",\n SEND_MESSAGE: \"发送消息\",\n UNTITLED: \"未命名\",\n DOWNLOAD: \"下载\",\n INITIATING_SERVICE_FLOW: \"发起业务流:{{ name }}\",\n STARTING_SERVICE_FLOW_ACTIVITY: \"开始业务流活动:{{ name }}\",\n};\n\nexport const NS = \"bricks/ai-portal/cruise-canvas\";\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, `.container--nviLvTo4{position:absolute;right:0;top:72px;bottom:72px;padding:48px 0;overflow-y:auto;scrollbar-width:none;pointer-events:none}.nav--lm9zwHhG{list-style:none;margin:0;padding:20px 0;background:rgba(255,255,255,0);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);pointer-events:auto}.container--nviLvTo4,\n.nav--lm9zwHhG{border-radius:8px 0px 0px 8px}.link--sJDeRfjL{display:flex;align-items:center;width:170px;height:36px;border-radius:18px 0 0 18px;padding:0 24px 0 16px;font-size:13px}.link--sJDeRfjL,\n.link--sJDeRfjL:hover{color:rgba(93,105,126,0.7)}.link--sJDeRfjL.disabled--UpGab11N{cursor:default}.item--B4GvcxMx:not(:first-child){margin-top:12px}.icon--YLvYVRdC{margin-right:12px;font-size:14px;color:#abaab7}.text--PwKz_ODc{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.link--sJDeRfjL:not(.disabled--UpGab11N):hover,\n.item--B4GvcxMx.active--DwuLIQY_ .link--sJDeRfjL{background-color:rgba(255,255,255,0.2)}.item--B4GvcxMx.active--DwuLIQY_ .link--sJDeRfjL{font-size:14px;color:#424a58;padding-right:16px}.completed--ZPZ8DEeN .icon--YLvYVRdC{color:#0fbe59}.failed--dxvB8UKT .icon--YLvYVRdC{color:#f24c25}.working--IbqFvpPm .icon--YLvYVRdC{color:var(--elevo-color-brand)}.input-required--zcO5ZufK .icon--YLvYVRdC{color:#12aacc}.canceled--GqvLm_YF .icon--YLvYVRdC{color:#fcaa07}@media (max-height: 639px){.container--nviLvTo4{padding:0}}@media (max-width: 719px){.container--nviLvTo4{display:none}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--nviLvTo4`,\n\t\"nav\": `nav--lm9zwHhG`,\n\t\"link\": `link--sJDeRfjL`,\n\t\"disabled\": `disabled--UpGab11N`,\n\t\"item\": `item--B4GvcxMx`,\n\t\"icon\": `icon--YLvYVRdC`,\n\t\"text\": `text--PwKz_ODc`,\n\t\"active\": `active--DwuLIQY_`,\n\t\"completed\": `completed--ZPZ8DEeN`,\n\t\"failed\": `failed--dxvB8UKT`,\n\t\"working\": `working--IbqFvpPm`,\n\t\"input-required\": `input-required--zcO5ZufK`,\n\t\"canceled\": `canceled--GqvLm_YF`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","export interface Rect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * Merges multiple rectangles into a single bounding rectangle.\n */\nexport function mergeRects(rects: Rect[]): Rect {\n let left = Infinity;\n let top = Infinity;\n let right = -Infinity;\n let bottom = -Infinity;\n for (const rect of rects) {\n const r = rect.x + rect.width;\n const b = rect.y + rect.height;\n if (rect.x < left) {\n left = rect.x;\n }\n if (r > right) {\n right = r;\n }\n if (rect.y < top) {\n top = rect.y;\n }\n if (b > bottom) {\n bottom = b;\n }\n }\n\n const width = right - left;\n const height = bottom - top;\n\n return { x: left, y: top, width, height };\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]!./styles.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]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","export const DEFAULT_SCALE_RANGE_MIN = 0.5;\nexport const DEFAULT_SCALE_RANGE_MAX = 2;\nexport const START_NODE_ID = \"<START>\";\nexport const END_NODE_ID = \"<END>\";\nexport const FEEDBACK_NODE_ID = \"<FEEDBACK>\";\nexport const REQUIREMENT_NODE_ID = \"<REQUIREMENT>\";\nexport const LOADING_NODE_ID = \"<LOADING>\";\nexport const ERROR_NODE_ID = \"<ERROR>\";\nexport const REPLAY_NODE_ID = \"<REPLAY>\";\nexport const CANVAS_PADDING_TOP = 20;\nexport const CANVAS_PADDING_RIGHT = 20;\n// 20 + 48 + 8 + 26 + 20\nexport const CANVAS_PADDING_BOTTOM = 122;\nexport const CANVAS_PADDING_LEFT = 160;\nexport const RANK_SEP = 40;\nexport const NODE_SEP = 42;\nexport const EDGE_SEP = 10;\n\n// istanbul ignore next\nexport const IS_MAC = /mac/i.test(\n (\n navigator as Navigator & {\n userAgentData?: {\n platform: string;\n };\n }\n ).userAgentData?.platform ??\n navigator.platform ??\n navigator.userAgent\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]!./NodeJob.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]!./NodeJob.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: hard to test with d3-zoom\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { select } from \"d3-selection\";\nimport { zoom, type ZoomBehavior } from \"d3-zoom\";\nimport type {\n RangeTuple,\n TransformLiteral /* , ActiveTarget */,\n} from \"./interfaces\";\nimport {\n DEFAULT_SCALE_RANGE_MIN,\n DEFAULT_SCALE_RANGE_MAX,\n IS_MAC,\n} from \"./constants\";\n// import type { ActiveTarget } from \"./interfaces\";\nimport jobStyles from \"./NodeJob/NodeJob.module.css\";\n\nexport interface UseZoomOptions {\n rootRef: React.RefObject<HTMLDivElement>;\n zoomable?: boolean;\n scrollable?: boolean;\n pannable?: boolean;\n pannableWithCtrl?: boolean;\n scaleRange?: RangeTuple;\n manualScrolledUpRef: React.MutableRefObject<boolean>;\n onSwitchActiveTarget?(target: unknown | null): void;\n}\n\nexport interface UseZoomResult {\n grabbing: boolean;\n transform: TransformLiteral;\n transformRef: React.MutableRefObject<TransformLiteral>;\n scaleRange: RangeTuple;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n}\n\n// istanbul ignore next\nfunction wheelData(event: WheelEvent) {\n // On Windows with normal mouse, deltaY is too big when scroll with ctrlKey pressed,\n // which cause the zooming too fast.\n // While on mac OS, we need to keep default behavior of d3-zoom.\n return (\n -event.deltaY *\n (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) *\n (event.ctrlKey && IS_MAC ? 10 : 1)\n );\n}\n\nexport function useZoom({\n rootRef,\n zoomable,\n scrollable,\n pannable,\n pannableWithCtrl,\n scaleRange: _scaleRange,\n manualScrolledUpRef,\n onSwitchActiveTarget,\n}: UseZoomOptions): UseZoomResult {\n const [grabbing, setGrabbing] = useState(false);\n const [transform, setTransform] = useState<TransformLiteral>({\n k: 1,\n x: 0,\n y: 0,\n });\n const transformRef = useRef(transform);\n\n const scaleRange = useMemo(\n () =>\n _scaleRange ??\n ([DEFAULT_SCALE_RANGE_MIN, DEFAULT_SCALE_RANGE_MAX] as RangeTuple),\n [_scaleRange]\n );\n\n const zoomer = useMemo(\n () => zoom<HTMLDivElement, unknown>().wheelDelta(wheelData),\n []\n );\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n let moved = false;\n zoomer\n .scaleExtent(zoomable ? scaleRange : [1, 1])\n .on(\"start\", () => {\n moved = false;\n setGrabbing(true);\n })\n .on(\"zoom\", (e: { transform: TransformLiteral }) => {\n moved = true;\n setTransform(e.transform);\n transformRef.current = e.transform;\n })\n .on(\"end\", () => {\n setGrabbing(false);\n if (!moved) {\n onSwitchActiveTarget?.(null);\n }\n })\n .filter(\n (event) =>\n // For wheel event, ignore d3 default behavior, because we control it manually.\n // Except for the trackpad pinch event on Mac OS (with ctrlKey).\n (event.type === \"wheel\"\n ? event.ctrlKey\n : pannableWithCtrl\n ? pannable || event.ctrlKey\n : !event.ctrlKey) && !event.button\n );\n }, [\n onSwitchActiveTarget,\n scaleRange,\n zoomable,\n zoomer,\n pannableWithCtrl,\n pannable,\n ]);\n\n useEffect(() => {\n if (pannableWithCtrl) {\n const onContextMenu = (e: MouseEvent) => {\n if (e.ctrlKey) {\n e.preventDefault();\n }\n };\n document.addEventListener(\"contextmenu\", onContextMenu, true);\n return () => {\n document.removeEventListener(\"contextmenu\", onContextMenu, true);\n };\n }\n }, [pannableWithCtrl]);\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n const root = rootRef.current;\n if (!root) {\n return;\n }\n\n const rootSelection = select(root);\n\n const unsetZoom = () => {\n rootSelection\n .on(\".zoom\", null)\n .on(\".zoom.custom\", null)\n .on(\"wheel\", null);\n };\n\n if (!(zoomable || scrollable || pannable)) {\n unsetZoom();\n return;\n }\n\n if (zoomable || scrollable) {\n // Do not override default d3 zoom handler.\n // Only handles *panning*\n rootSelection.on(\n \"wheel.zoom.custom\",\n (e: WheelEvent & { wheelDeltaX: number; wheelDeltaY: number }) => {\n // Mac OS trackpad pinch event is emitted as a wheel.zoom and d3.event.ctrlKey set to true\n if (!e.ctrlKey && scrollable) {\n const node = (e.target as HTMLElement).closest(\n `.${jobStyles.body}`\n );\n if (node) {\n if (checkScrollableY(node, e.deltaY)) {\n return;\n }\n }\n\n if (e.cancelable) {\n if (e.deltaY < 0) {\n manualScrolledUpRef.current = true;\n }\n e.preventDefault();\n zoomer.translateBy(\n rootSelection,\n e.wheelDeltaX / 5,\n e.wheelDeltaY / 5\n );\n }\n }\n // zoomer.scaleBy(rootSelection, Math.pow(2, defaultWheelDelta(e)))\n }\n );\n }\n\n rootSelection\n .call(zoomer)\n .on(\"wheel\", (e: WheelEvent) => {\n if (scrollable || (zoomable && e.ctrlKey)) {\n e.preventDefault();\n }\n })\n .on(\"dblclick.zoom\", null);\n\n if (!pannable && !pannableWithCtrl) {\n rootSelection.on(\"mousedown.zoom\", null);\n }\n\n if (!pannable) {\n rootSelection\n .on(\"touchstart.zoom\", null)\n .on(\"touchmove.zoom\", null)\n .on(\"touchend.zoom\", null);\n }\n\n return unsetZoom;\n }, [\n pannableWithCtrl,\n pannable,\n rootRef,\n manualScrolledUpRef,\n scrollable,\n zoomable,\n zoomer,\n ]);\n\n return { grabbing, transform, transformRef, zoomer, scaleRange };\n}\n\n// 检查元素是否还能滚动\nfunction checkScrollableY(element: Element, delta: number) {\n if (!delta) {\n return false;\n }\n const isScrollingDown = delta > 0;\n // 还能向下滚动 或 还能向上滚动\n if (isScrollingDown) {\n const maxScroll = element.scrollHeight - element.clientHeight;\n return element.scrollTop <= maxScroll - 1;\n }\n return element.scrollTop >= 1;\n}\n\n// 检查元素是否还能滚动\n// function checkScrollableX(element: Element, delta: number) {\n// if (!delta) {\n// return false;\n// }\n// const isScrollingRight = delta > 0; // Updated variable name for clarity\n// // 还能向右滚动 或 还能向左滚动\n// if (isScrollingRight) {\n// const maxScroll = element.scrollWidth - element.clientWidth; // Changed to scrollWidth and clientWidth\n// return element.scrollLeft <= maxScroll - 1; // Changed to scrollLeft\n// }\n// return element.scrollLeft >= 1;\n// }\n","import dagre from \"@dagrejs/dagre\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n NodePosition,\n NodeRect,\n GraphEdge,\n GraphNode,\n SizeTuple,\n} from \"./interfaces\";\nimport {\n EDGE_SEP,\n END_NODE_ID,\n FEEDBACK_NODE_ID,\n NODE_SEP,\n RANK_SEP,\n REPLAY_NODE_ID,\n START_NODE_ID,\n} from \"./constants\";\n\nexport interface UseLayoutOptions {\n rawNodes: GraphNode[] | undefined;\n rawEdges: GraphEdge[] | undefined;\n sizeMap: Map<string, SizeTuple> | null;\n completed?: boolean;\n failed?: boolean;\n finished?: boolean;\n showFeedback?: boolean;\n showFeedbackAfterFailed?: boolean;\n replay?: boolean;\n noTasks?: boolean;\n}\n\nexport function useLayout({\n rawNodes: _rawNodes,\n rawEdges: _rawEdges,\n sizeMap,\n completed,\n failed,\n finished,\n showFeedback,\n showFeedbackAfterFailed,\n replay,\n noTasks,\n}: UseLayoutOptions) {\n const memoizedPositionsRef = useRef<Map<string, NodePosition> | null>(null);\n\n const { initialNodes, initialEdges } = useMemo(() => {\n const initialNodes: GraphNode[] = [\n {\n type: \"start\",\n id: START_NODE_ID,\n },\n ];\n const initialEdges: GraphEdge[] = [];\n const finishedNodeIds: string[] = [];\n const rawNodes = _rawNodes ?? [];\n const rawEdges = _rawEdges ?? [];\n\n const hasSource = new Set<string>(rawEdges.map((edge) => edge.target));\n const failedFeedback = failed && showFeedback && showFeedbackAfterFailed;\n const shouldAppend = replay\n ? finished\n : !noTasks && (completed || failedFeedback);\n const hasTarget = shouldAppend\n ? new Set<string>(rawEdges.map((edge) => edge.source))\n : null;\n\n for (const node of rawNodes) {\n if (!hasSource.has(node.id)) {\n initialEdges.push({\n source: START_NODE_ID,\n target: node.id,\n });\n }\n\n if (shouldAppend && !hasTarget!.has(node.id)) {\n finishedNodeIds.push(node.id);\n }\n }\n\n initialNodes.push(...rawNodes);\n initialEdges.push(...rawEdges);\n\n if (finishedNodeIds.length > 0) {\n let sourceIds = finishedNodeIds;\n\n if (replay && finished) {\n initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...sourceIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\n }))\n );\n initialNodes.push({\n id: REPLAY_NODE_ID,\n type: \"replay\",\n });\n initialEdges.push({\n source: END_NODE_ID,\n target: REPLAY_NODE_ID,\n });\n } else {\n if (completed) {\n initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...sourceIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\n }))\n );\n sourceIds = [END_NODE_ID];\n }\n\n if (showFeedback && !noTasks && (completed || failedFeedback)) {\n initialNodes.push({\n id: FEEDBACK_NODE_ID,\n type: \"feedback\",\n });\n for (const id of sourceIds) {\n initialEdges.push({\n source: id,\n target: FEEDBACK_NODE_ID,\n });\n }\n }\n }\n }\n\n const memoizedPositions = memoizedPositionsRef.current;\n if (memoizedPositions) {\n for (const node of initialNodes) {\n const view = memoizedPositions.get(node.id);\n if (view) {\n node.view = view as NodeRect;\n }\n }\n }\n\n return { initialNodes, initialEdges };\n }, [\n _rawNodes,\n _rawEdges,\n completed,\n failed,\n finished,\n showFeedback,\n showFeedbackAfterFailed,\n replay,\n ]);\n\n const startNodePositionRef = useRef<NodePosition | null>(null);\n\n return useMemo(() => {\n for (const node of initialNodes) {\n if (!sizeMap?.has(node.id)) {\n return { sizeReady: false, nodes: initialNodes, edges: [] };\n }\n }\n\n const graph = new dagre.graphlib.Graph();\n graph.setGraph({\n rankdir: \"TB\",\n nodesep: NODE_SEP,\n edgesep: EDGE_SEP,\n ranksep: RANK_SEP,\n });\n // Default to assigning a new object as a label for each new edge.\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n for (const edge of initialEdges) {\n graph.setEdge(edge.source, edge.target);\n }\n for (const node of initialNodes) {\n const [width, height] = sizeMap!.get(node.id)!;\n graph.setNode(node.id, {\n id: node.id,\n width,\n height,\n });\n }\n dagre.layout(graph);\n\n // Make the start node position unchanged\n let offsets: NodePosition | null = null;\n\n const nodes = initialNodes.map<GraphNode>((node) => {\n const nodeView = graph.node(node.id);\n const x = nodeView.x - nodeView.width / 2;\n const y = nodeView.y - nodeView.height / 2;\n\n if (node.type === \"start\") {\n if (startNodePositionRef.current) {\n offsets = {\n x: startNodePositionRef.current.x - x,\n y: startNodePositionRef.current.y - y,\n };\n } else {\n startNodePositionRef.current = { x, y };\n }\n }\n\n return {\n ...node,\n view: {\n x,\n y,\n width: nodeView.width,\n height: nodeView.height,\n },\n };\n });\n\n if (offsets) {\n for (const node of nodes) {\n Object.assign(node.view!, getPositionWithOffsets(node.view!, offsets));\n }\n }\n\n const memoizedPositions = (memoizedPositionsRef.current ??= new Map());\n for (const node of nodes) {\n const { x, y } = node.view!;\n memoizedPositions.set(node.id, { x, y });\n }\n\n const edges = initialEdges.map((edge) => {\n const source = graph.node(edge.source);\n const sourcePosition = getPositionWithOffsets(source, offsets);\n const target = graph.node(edge.target);\n const targetPosition = getPositionWithOffsets(target, offsets);\n // const turnY =\n // (sourcePosition.y +\n // source.height / 2 +\n // targetPosition.y -\n // target.height / 2) /\n // 2;\n const turnY = targetPosition.y - (target.height + RANK_SEP) / 2;\n const points: NodePosition[] = [\n { x: sourcePosition.x, y: sourcePosition.y + source.height / 2 },\n { x: sourcePosition.x, y: turnY },\n { x: targetPosition.x, y: turnY },\n { x: targetPosition.x, y: targetPosition.y - target.height / 2 },\n ];\n\n return {\n ...edge,\n points,\n };\n });\n\n return {\n sizeReady: true,\n nodes,\n edges,\n };\n }, [initialEdges, initialNodes, sizeMap]);\n}\n\nfunction getPositionWithOffsets<T extends NodePosition>(\n position: T,\n offsets: NodePosition | null\n): NodePosition {\n if (!offsets) {\n return {\n x: position.x,\n y: position.y,\n };\n }\n return {\n x: position.x + offsets.x,\n y: position.y + offsets.y,\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]!./ZoomBar.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]!./ZoomBar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useCallback } from \"react\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport styles from \"./ZoomBar.module.css\";\nimport toolbarStyles from \"../toolbar.module.css\";\nimport { WrappedIconButton } from \"../../shared/bricks\";\nimport { K, t } from \"../i18n\";\nimport { ICON_CHAT } from \"../../shared/constants\";\n\nconst ICON_BACK_TO_CENTER: GeneralIconProps = {\n lib: \"easyops\",\n icon: \"back-to-center\",\n};\nconst ICON_ZOOM_OUT: GeneralIconProps = {\n lib: \"antd\",\n icon: \"minus-circle\",\n};\nconst ICON_ZOOM_IN: GeneralIconProps = {\n lib: \"antd\",\n icon: \"plus-circle\",\n};\n\nexport interface ZoomBarProps {\n scale: number;\n showUiSwitch?: boolean;\n onScaleChange?: (scale: number) => void;\n onReCenter?: () => void;\n onSwitchToChat?: () => void;\n}\n\nexport function ZoomBar({\n scale,\n showUiSwitch,\n onScaleChange,\n onReCenter,\n onSwitchToChat,\n}: ZoomBarProps): JSX.Element {\n const handleZoomIn = useCallback(() => {\n onScaleChange?.(scale + 0.1);\n }, [onScaleChange, scale]);\n\n const handleZoomOut = useCallback(() => {\n onScaleChange?.(scale - 0.1);\n }, [onScaleChange, scale]);\n\n return (\n <div className={`${toolbarStyles.toolbar} ${styles[\"zoom-bar\"]}`}>\n {showUiSwitch && (\n <>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_CHAT}\n onClick={onSwitchToChat}\n />\n <div className={toolbarStyles.divider}></div>\n </>\n )}\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_BACK_TO_CENTER}\n onClick={onReCenter}\n title={t(K.BACK_TO_CENTER)}\n />\n <div className={toolbarStyles.divider}></div>\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_ZOOM_OUT}\n onClick={handleZoomOut}\n title={t(K.ZOOM_OUT)}\n />\n <WrappedIconButton\n variant=\"mini\"\n icon={ICON_ZOOM_IN}\n onClick={handleZoomIn}\n title={t(K.ZOOM_IN)}\n />\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]!./NodeStart.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]!./NodeStart.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeStart.module.css\";\n\nexport function NodeStart(): JSX.Element {\n return (\n <div className={styles[\"node-start\"]}>\n <div className={styles.icon} />\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]!./NodeRequirement.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]!./NodeRequirement.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeRequirement.module.css\";\nimport type { CommandPayload, FileInfo } from \"../../shared/interfaces\";\nimport { ReadableCommand } from \"../../shared/ReadableCommand/ReadableCommand\";\nimport { FileList } from \"../../shared/FilePreview/FileList\";\n\nconst WrappedEasyOpsAvatar = wrapBrick<EoEasyopsAvatar, EoEasyopsAvatarProps>(\n \"eo-easyops-avatar\"\n);\n\nexport interface NodeRequirementProps {\n username?: string;\n content?: string;\n startTime?: number;\n active?: boolean;\n cmd?: CommandPayload;\n mentionedAiEmployeeId?: string;\n files?: FileInfo[];\n}\n\nexport function NodeRequirement({\n username,\n content,\n startTime,\n active,\n cmd,\n mentionedAiEmployeeId,\n files,\n}: NodeRequirementProps): JSX.Element {\n return (\n <div\n className={classNames(styles[\"node-requirement\"], {\n [styles.active]: active,\n })}\n >\n <div className={styles.heading}>\n <WrappedEasyOpsAvatar\n className={styles.avatar}\n nameOrInstanceId={username}\n showName\n size=\"xs\"\n />\n <div className={styles.time}>\n {startTime && moment(startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div className={styles.body}>\n {(cmd || mentionedAiEmployeeId) && (\n <ReadableCommand\n cmd={cmd}\n mentionedAiEmployeeId={mentionedAiEmployeeId}\n size=\"small\"\n />\n )}\n {content}\n {files?.length ? <FileList files={files} /> : null}\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]!./NodeInstruction.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]!./NodeInstruction.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeInstruction.module.css\";\nimport sharedStyles from \"../shared.module.css\";\n\nexport interface NodeInstructionProps {\n content?: string;\n loading?: boolean;\n}\n\nexport function NodeInstruction({\n content,\n loading,\n}: NodeInstructionProps): JSX.Element {\n return (\n <div className={styles[\"node-instruction\"]}>\n <div\n className={classNames(styles.text, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n title={content}\n >\n {content}\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]!./AIEmployeeAvatar.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]!./AIEmployeeAvatar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { Suspense, use, useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport type { AvatarProps, EoAvatar } from \"@next-bricks/basic/avatar\";\nimport type { ElevoApi_ListElevoAiEmployeesResponseItem } from \"@next-api-sdk/llm-sdk\";\nimport fallbackAvatar from \"./fallback-avatar.png\";\nimport styles from \"./AIEmployeeAvatar.module.css\";\nimport { fetchEmployee } from \"../../shared/fetchEmployee\";\n\nconst WrappedAvatar = wrapBrick<EoAvatar, AvatarProps>(\"eo-avatar\");\n\nexport interface AIEmployeeAvatarProps {\n aiEmployeeId: string;\n}\n\nexport function AIEmployeeAvatar({ aiEmployeeId }: AIEmployeeAvatarProps) {\n return (\n <Suspense\n fallback={\n <WrappedAvatar\n className={styles.avatar}\n showName\n size=\"xs\"\n name={aiEmployeeId}\n src={fallbackAvatar}\n />\n }\n >\n <LegacyAIEmployeeAvatar aiEmployeeId={aiEmployeeId} />\n </Suspense>\n );\n}\n\nfunction LegacyAIEmployeeAvatar({ aiEmployeeId }: AIEmployeeAvatarProps) {\n const employeePromise = useMemo(() => {\n return fetchEmployee(aiEmployeeId);\n }, [aiEmployeeId]);\n\n const employee = use(employeePromise);\n\n const props = useMemo(() => {\n if (!employee) {\n return {\n name: aiEmployeeId,\n src: fallbackAvatar,\n };\n }\n const { name, avatar } =\n employee as ElevoApi_ListElevoAiEmployeesResponseItem & {\n avatar?: string;\n };\n const src = avatar\n ? new URL(avatar, location.origin).toString()\n : fallbackAvatar;\n return {\n name,\n src,\n };\n }, [employee, aiEmployeeId]);\n\n return (\n <WrappedAvatar className={styles.avatar} showName size=\"xs\" {...props} />\n );\n}\n","// istanbul ignore file: experimental\nimport React, {\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeJob.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport type { CmdbInstanceDetailData } from \"../interfaces\";\nimport { FileInfo, Job } from \"../../shared/interfaces\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus.js\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { CmdbInstanceDetail } from \"../CmdbInstanceDetail/CmdbInstanceDetail\";\nimport { FileList } from \"../../shared/FilePreview/FileList\";\nimport { RequestHumanAction } from \"../../shared/RequestHumanAction/RequestHumanAction\";\nimport { AIEmployeeAvatar } from \"../AIEmployeeAvatar/AIEmployeeAvatar\";\nimport { CreatedView } from \"../../shared/CreatedView/CreatedView\";\nimport { CanvasContext } from \"../CanvasContext\";\nimport { ViewToolbar } from \"../../shared/CreatedView/ViewToolbar\";\n\n// 当 markdown 中包含超过 4 列的表格时,对节点使用大尺寸样式\nconst RegExpLargeTableInMarkdown = /^\\s*\\|(?:\\s*:?-+:?\\s*\\|){4,}\\s*$/m;\n\nexport interface NodeJobProps {\n job: Job;\n active?: boolean;\n isLeaf?: boolean;\n}\n\nexport function NodeJob({ job, active, isLeaf }: NodeJobProps): JSX.Element {\n const toolName = job.toolCall?.name;\n\n const [toolMarkdownContent, cmdbInstanceDetails, files, sizeLarge] =\n useMemo(() => {\n const contents: string[] = [];\n const instanceDetails: CmdbInstanceDetailData[] = [];\n const files: FileInfo[] = [];\n let large = toolName === \"llm_answer\";\n job.messages?.forEach((message) => {\n if (message.role === \"tool\") {\n for (const part of message.parts) {\n if (part.type === \"data\") {\n switch (part.data?.type) {\n case \"markdown\":\n contents.push(part.data.content);\n break;\n case \"cmdb_instance_detail\":\n instanceDetails.push(part.data as CmdbInstanceDetailData);\n if (!large) {\n large =\n Object.keys(\n part.data?.outputSchema?.type === \"object\"\n ? part.data.outputSchema.properties\n : part.data.detail\n ).length > 6;\n }\n break;\n }\n } else if (part.type === \"file\") {\n files.push(part.file);\n }\n }\n }\n });\n\n const markdownContent = contents.join(\"\");\n\n large = large || RegExpLargeTableInMarkdown.test(markdownContent);\n\n return [markdownContent, instanceDetails, files, large] as const;\n }, [job.messages, toolName]);\n\n const [viewSize, setViewSize] = useState<\"medium\" | \"large\">(\"medium\");\n\n const handleViewSizeChange = useCallback((value: \"medium\" | \"large\") => {\n setViewSize(value);\n }, []);\n\n return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.error]: job.isError,\n [styles.active]: active,\n [styles.large]: sizeLarge || viewSize === \"large\",\n })}\n >\n <div className={styles.background} />\n {job.aiEmployeeId ? (\n <div className={styles.heading}>\n <AIEmployeeAvatar aiEmployeeId={job.aiEmployeeId} />\n {job.generatedView ? <ViewToolbar job={job} /> : null}\n </div>\n ) : null}\n <div className={styles.body}>\n {job.toolCall && <ToolCallStatus job={job} />}\n {job.messages?.map((message, index) =>\n message.role === \"tool\" ? null : (\n <div\n key={index}\n className={classNames(styles.message, sharedStyles.markdown, {\n [styles[\"role-user\"]]:\n message.role === \"tool\" || message.role === \"user\",\n })}\n >\n {message.parts?.map((part, partIndex) => (\n <React.Fragment key={partIndex}>\n {part.type === \"text\" && (\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={part.text}\n />\n )}\n </React.Fragment>\n ))}\n </div>\n )\n )}\n {toolMarkdownContent && (\n <div\n className={classNames(styles.message, sharedStyles.markdown)}\n style={{ padding: \"0 8px\" }}\n >\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={toolMarkdownContent}\n />\n </div>\n )}\n {cmdbInstanceDetails.map((detail, index) => (\n <CmdbInstanceDetail key={index} {...detail} />\n ))}\n {files.length > 0 && <FileList files={files} large={sizeLarge} />}\n {isLeaf &&\n !job.humanAction &&\n job.requestHumanAction &&\n (job.state === \"working\" || job.state === \"input-required\") && (\n <RequestHumanAction action={job.requestHumanAction} />\n )}\n </div>\n {job.generatedView ? (\n <ViewContainer job={job} onSizeChange={handleViewSizeChange} />\n ) : null}\n </div>\n );\n}\n\ninterface ViewContainerProps {\n job: Job;\n onSizeChange?: (value: \"medium\" | \"large\") => void;\n}\n\nfunction ViewContainer({ job, onSizeChange }: ViewContainerProps) {\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 let scrollableContent: HTMLElement | undefined;\n for (const el of e.nativeEvent.composedPath()) {\n if (el === ref.current) {\n break;\n }\n if (!(el instanceof HTMLElement)) {\n continue;\n }\n if (el.tagName === \"PRE\") {\n if (el.scrollWidth > el.clientWidth) {\n found = true;\n break;\n }\n } else if (el.classList.contains(\"ant-table-content\")) {\n scrollableContent = el;\n } else if (\n el.classList.contains(\"ant-table\") &&\n el.classList.contains(\"ant-table-scroll-horizontal\")\n ) {\n if (\n scrollableContent &&\n scrollableContent.scrollWidth > scrollableContent.clientWidth\n ) {\n found = true;\n break;\n }\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={styles[\"view-container\"]}\n ref={ref}\n onMouseMove={handleMouseMove}\n onMouseLeave={handleMouseLeave}\n >\n <CreatedView job={job} noHeading onSizeChange={onSizeChange} />\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]!./NodeEnd.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]!./NodeEnd.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useContext } from \"react\";\nimport styles from \"./NodeEnd.module.css\";\nimport { K, t } from \"../i18n\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\n\nexport function NodeEnd(): JSX.Element {\n const { onShare, replay, conversationState } = useContext(TaskContext);\n\n return (\n <div className={styles[\"node-end\"]}>\n {replay && conversationState === \"completed\" && (\n <div className={styles.content}>\n <span className={styles.icon}>\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"check\" />\n </span>\n <span className={styles.text}>{t(K.TASK_COMPLETED)}</span>\n </div>\n )}\n {!replay && (\n <button className={styles.button} onClick={onShare}>\n {t(K.SHARE)}\n </button>\n )}\n </div>\n );\n}\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { Drawer } from \"@next-bricks/containers/drawer\";\nimport type { Job } from \"../../shared/interfaces\";\nimport { WrappedDrawer } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolCallStatus } from \"../ToolCallStatus/ToolCallStatus\";\nimport { ToolCallDetail } from \"./ToolCallDetail\";\n\nexport interface ToolCallDetailDrawerProps {\n job: Job;\n}\n\nfunction getDrawerWidth() {\n const { innerWidth } = window;\n return innerWidth < 800\n ? Math.min(500, innerWidth)\n : innerWidth < 1000\n ? innerWidth * 0.8\n : 800;\n}\n\nexport function ToolCallDetailDrawer({\n job,\n}: ToolCallDetailDrawerProps): JSX.Element {\n const { setActiveDetail } = useContext(TaskContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title;\n\n const handleClose = useCallback(() => {\n setTimeout(() => {\n setActiveDetail(null);\n }, 300);\n }, [setActiveDetail]);\n\n const ref = useRef<Drawer>(null);\n\n useEffect(() => {\n setTimeout(() => {\n ref.current?.open();\n });\n }, []);\n\n const [width, setWidth] = useState(getDrawerWidth);\n\n useEffect(() => {\n const onResize = () => {\n setWidth(getDrawerWidth);\n };\n window.addEventListener(\"resize\", onResize);\n return () => {\n window.removeEventListener(\"resize\", onResize);\n };\n }, []);\n\n return (\n <WrappedDrawer\n ref={ref}\n customTitle={toolTitle || toolCall.name}\n width={width}\n closable\n mask\n maskClosable\n keyboard\n themeVariant=\"elevo\"\n onClose={handleClose}\n >\n <ToolCallStatus job={job} variant=\"read-only\" />\n <ToolCallDetail job={job} />\n </WrappedDrawer>\n );\n}\n","import { maxBy, minBy } from \"lodash\";\nimport type { GraphNode, NodePosition, NodeRect } from \"../interfaces\";\nimport { IS_MAC } from \"../constants\";\n\nexport type KeyboardAction =\n | KeyboardActionSwitchActiveNode\n | KeyboardActionEnter\n | KeyboardActionScroll;\n\nexport interface KeyboardActionSwitchActiveNode {\n action: \"switch-active-node\";\n node: GraphNode | null;\n}\n\nexport interface KeyboardActionEnter {\n action: \"enter\";\n node: GraphNode;\n}\n\nexport interface KeyboardActionScroll {\n action: \"scroll\";\n direction: \"up\" | \"down\" | \"left\" | \"right\";\n range: \"line\" | \"page\" | \"document\";\n node?: undefined;\n}\n\n/**\n * Keyboard navigation:\n * - When no node is active, simulate browser page scrolling shortcuts:\n * - Space: scroll down (or up with shift) by page\n * - Arrow keys: scroll by line in the direction of the arrow\n * - Arrow up/down with ⌘ on Mac: scroll to top/bottom of document\n * - Home/end: scroll to top/bottom of document\n * - When a node is active:\n * - Arrow keys: switch active node in the direction of the arrow\n * - Arrow up/down with ⌘ on Mac: switch active node to the top/bottom most node\n * - Escape: clear active node\n * - Enter: Enter the detail of the active node\n */\nexport function handleKeyboardNav(\n event: KeyboardEvent,\n {\n activeNodeId,\n nodes,\n }: {\n activeNodeId: string | null;\n nodes: GraphNode[];\n }\n): KeyboardAction | undefined {\n if (event.ctrlKey || event.altKey) {\n return;\n }\n\n const activeNode = activeNodeId\n ? nodes.find((node) => node.id === activeNodeId)\n : null;\n\n const key = event.key;\n\n if (!activeNode) {\n if (key === \" \" && !event.metaKey) {\n return {\n action: \"scroll\",\n direction: event.shiftKey ? \"down\" : \"up\",\n range: \"page\",\n };\n }\n\n if (event.shiftKey || (!IS_MAC && event.metaKey)) {\n return;\n }\n\n switch (key) {\n case \"Home\":\n return {\n action: \"scroll\",\n direction: \"up\",\n range: \"document\",\n };\n case \"End\":\n return {\n action: \"scroll\",\n direction: \"down\",\n range: \"document\",\n };\n case \"ArrowUp\":\n case \"ArrowDown\": {\n const direction = key === \"ArrowUp\" ? \"up\" : \"down\";\n if (event.metaKey) {\n return {\n action: \"scroll\",\n direction,\n range: \"document\",\n };\n }\n return {\n action: \"scroll\",\n direction,\n range: \"line\",\n };\n }\n case \"ArrowLeft\":\n case \"ArrowRight\":\n if (!event.metaKey) {\n return {\n action: \"scroll\",\n direction: key === \"ArrowLeft\" ? \"left\" : \"right\",\n range: \"line\",\n };\n }\n }\n\n // Move up or down by arrow keys\n\n return;\n }\n\n if (event.shiftKey || (!IS_MAC && event.metaKey)) {\n return;\n }\n\n const moveOnAxis = (axis: \"x\" | \"y\", direction: 1 | -1) => {\n if (event.metaKey && axis === \"x\") {\n return;\n }\n const oppositeAxis = axis === \"x\" ? \"y\" : \"x\";\n const activePosition = getCenterPosition(activeNode.view!);\n const candidates = nodes.filter((node) => {\n let diff: number;\n let position: NodePosition;\n return (\n node !== activeNode &&\n node.type !== \"start\" &&\n node.type !== \"end\" &&\n node.type !== \"feedback\" &&\n node.type !== \"error\" &&\n node.type !== \"replay\" &&\n node.type !== \"instruction\" &&\n ((position = getCenterPosition(node.view!)),\n (diff = (position[axis] - activePosition[axis]) * direction),\n diff > 0) &&\n diff > Math.abs(activePosition[oppositeAxis] - position[oppositeAxis])\n );\n });\n return (event.metaKey ? maxBy : minBy)(candidates, (node) => {\n const position = getCenterPosition(node.view!);\n return (\n (activePosition[oppositeAxis] - position[oppositeAxis]) ** 2 +\n (activePosition[axis] - position[axis]) ** 2\n );\n });\n };\n\n let node: GraphNode | undefined | null;\n let action: \"switch-active-node\" | \"enter\" | undefined;\n\n switch (key) {\n case \"ArrowLeft\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"x\", -1);\n break;\n case \"ArrowUp\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"y\", -1);\n break;\n case \"ArrowRight\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"x\", 1);\n break;\n case \"ArrowDown\":\n action = \"switch-active-node\";\n node = moveOnAxis(\"y\", 1);\n break;\n case \"Escape\":\n action = \"switch-active-node\";\n node = null;\n break;\n case \"Enter\":\n action = \"enter\";\n node = activeNode;\n break;\n }\n\n if (action && node !== undefined) {\n return { action, node: node! };\n }\n}\n\nfunction getCenterPosition(view: NodeRect): NodePosition {\n return {\n x: view.x + view.width / 2,\n y: view.y + view.height / 2,\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]!./Nav.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]!./Nav.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { useEffect, useMemo, useRef } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./Nav.module.css\";\nimport type { GraphNavItem } from \"../interfaces\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { DONE_STATES } from \"../../shared/constants\";\nimport type {\n ConversationState,\n JobState,\n TaskState,\n} from \"../../shared/interfaces\";\n\nexport interface NavProps {\n nav: GraphNavItem[] | undefined;\n currentNavId: string | null;\n taskState: TaskState | ConversationState | undefined;\n onClick: (jobId: string) => void;\n}\n\ninterface MergedNavItem extends Omit<GraphNavItem, \"state\"> {\n disabled?: boolean;\n state?: JobState;\n}\n\nexport function Nav({ nav, currentNavId, taskState, onClick }: NavProps) {\n const ref = useRef<HTMLUListElement>(null);\n useEffect(() => {\n const navElement = ref.current;\n if (!navElement || !currentNavId) {\n return;\n }\n navElement\n .querySelector(`[data-job-id=\"${currentNavId}\"]`)\n ?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }, [currentNavId]);\n\n useEffect(() => {\n const navElement = ref.current;\n if (!navElement || currentNavId) {\n return;\n }\n\n const lastActiveItem = nav?.findLast(\n (item) =>\n DONE_STATES.includes(item.state || \"unknown\") ||\n item.state === \"working\" ||\n item.state === \"input-required\"\n );\n if (lastActiveItem) {\n navElement\n .querySelector(`[data-job-id=\"${lastActiveItem.id}\"]`)\n ?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n });\n }\n }, [currentNavId, nav]);\n\n return (\n <div className={styles.container}>\n <ul className={styles.nav} ref={ref}>\n {nav?.map((item) => (\n <NavItem\n key={item.id}\n {...item}\n currentNavId={currentNavId}\n taskState={taskState}\n onClick={onClick}\n />\n ))}\n </ul>\n </div>\n );\n}\n\ninterface NavItemProps extends MergedNavItem {\n currentNavId: string | null;\n taskState: TaskState | ConversationState | undefined;\n onClick: (jobId: string) => void;\n}\n\nfunction NavItem({\n id,\n title,\n state,\n level,\n taskState,\n currentNavId,\n disabled,\n onClick,\n}: NavItemProps) {\n const { className, icon } = useMemo(() => {\n return getClassNameAndIconProps(state, taskState);\n }, [state, taskState]);\n\n return (\n <li\n className={classNames(styles.item, {\n [styles.active]: currentNavId === id,\n })}\n style={{ marginLeft: `${level * 20}px` }}\n >\n <a\n className={classNames(styles.link, className, {\n [styles.disabled]: disabled,\n })}\n data-job-id={id}\n title={title}\n onClick={() => {\n if (!disabled) {\n onClick(id);\n }\n }}\n >\n <WrappedIcon className={styles.icon} {...icon} />\n <span className={styles.text}>{title}</span>\n </a>\n </li>\n );\n}\n\nfunction getClassNameAndIconProps(\n state: JobState | undefined,\n taskState: TaskState | ConversationState | undefined\n) {\n switch (state) {\n case \"completed\":\n return {\n className: styles.completed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"check\",\n },\n };\n case \"submitted\":\n case \"working\":\n if (taskState === \"terminated\") {\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n },\n };\n }\n return {\n className: styles.working,\n icon: {\n lib: \"antd\",\n theme: \"outlined\",\n icon: \"loading-3-quarters\",\n spinning: true,\n },\n };\n case \"input-required\":\n return {\n className: styles[\"input-required\"],\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-user\",\n },\n };\n case \"failed\":\n return {\n className: styles.failed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"xmark\",\n },\n };\n case \"canceled\":\n case \"terminated\" as JobState:\n return {\n className: styles.canceled,\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n },\n };\n case \"skipped\":\n return {\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"ban\",\n },\n };\n default:\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"clock\",\n },\n };\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]!./NodeLoading.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]!./NodeLoading.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeLoading.module.css\";\n\nexport function NodeLoading(): JSX.Element {\n return (\n <div className={styles.loading}>\n <div className={styles.inner} />\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]!./JsxEditor.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]!./JsxEditor.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, { Suspense, useContext, useMemo, useState } from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\nimport type { CodeEditor, CodeEditorProps } from \"@next-bricks/vs/code-editor\";\nimport nextTsxDefinition from \"@next-tsx/core/index.d.ts?raw\";\nimport componentsDefinition from \"@next-tsx/converter/lib/components.d.ts?raw\";\nimport styles from \"./JsxEditor.module.css\";\nimport { WrappedButton, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport { getAsyncConstructedView } from \"../getAsyncConstructedView\";\n\ninterface CodeEditorEvents {\n \"code.change\": CustomEvent<string>;\n}\n\ninterface CodeEditorMapEvents {\n onCodeChange: \"code.change\";\n}\n\nconst editorLibs: CodeEditorProps[\"extraLibs\"] = [\n {\n filePath: \"/node_modules/next-tsx/components.d.ts\",\n content: componentsDefinition.replaceAll(\"export interface\", \"interface\"),\n },\n {\n filePath: \"/node_modules/next-tsx/package.json\",\n content: JSON.stringify({\n name: \"next-tsx\",\n types: \"./index.d.ts\",\n }),\n },\n {\n filePath: \"/node_modules/next-tsx/index.d.ts\",\n content: nextTsxDefinition,\n },\n {\n filePath: \"/node_modules/next-tsx/contracts.d.ts\",\n content: `type ContractMap = Record<string, any>;`,\n },\n];\n\nconst AsyncWrappedCodeEditor = React.lazy(async () => ({\n default: await asyncWrapBrick<\n CodeEditor,\n CodeEditorProps,\n CodeEditorEvents,\n CodeEditorMapEvents\n >(\"vs.code-editor\", {\n onCodeChange: \"code.change\",\n }),\n}));\n\nexport function JsxEditor() {\n const {\n workspace,\n manuallyUpdatedViews,\n updateView,\n activeJsxEditorJob,\n setActiveJsxEditorJob,\n } = useContext(TaskContext);\n const view =\n manuallyUpdatedViews?.get(activeJsxEditorJob!.id) ??\n activeJsxEditorJob!.generatedView!;\n const source = view.code;\n const [code, setCode] = useState(source);\n\n const libs = useMemo(() => {\n const commonLibs = editorLibs!;\n if (view.withContexts?.RESPONSE) {\n return [\n ...commonLibs,\n {\n filePath: \"tsx-view/response.d.ts\",\n content: `const RESPONSE_VALUE = ${JSON.stringify(view.withContexts.RESPONSE, null, 2)};\n\ndeclare const RESPONSE: typeof RESPONSE_VALUE;`,\n },\n ];\n }\n return commonLibs;\n }, [view.withContexts?.RESPONSE]);\n\n return (\n <div className={styles.container}>\n <div className={styles.editor}>\n <div className={styles.header}>\n <span className={styles.title}>JSX Editor</span>\n <WrappedIconButton\n icon={ICON_CLOSE}\n onClick={() => {\n setActiveJsxEditorJob?.(undefined);\n }}\n />\n </div>\n <div className={styles.body}>\n <div className={styles.content}>\n <Suspense fallback=\"Loading...\">\n <AsyncWrappedCodeEditor\n value={source}\n onCodeChange={(e) => {\n setCode(e.detail);\n }}\n language=\"typescript\"\n uri=\"file:///view.tsx\"\n automaticLayout=\"fit-container\"\n theme=\"tm-vs-dark\"\n extraLibs={libs}\n data-override-theme=\"dark-v2\"\n />\n </Suspense>\n </div>\n </div>\n <div className={styles.footer}>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n onClick={() => {\n const newView = {\n ...view,\n code,\n };\n newView.asyncConstructedView = getAsyncConstructedView(\n newView,\n workspace\n );\n updateView?.(activeJsxEditorJob!.id, newView);\n setActiveJsxEditorJob?.(undefined);\n }}\n >\n Save\n </WrappedButton>\n </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]!./NodeError.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]!./NodeError.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport styles from \"./NodeError.module.css\";\nimport jobStyles from \"../NodeJob/NodeJob.module.css\";\nimport classNames from \"classnames\";\n\nexport interface NodeErrorProps {\n content: string;\n}\n\nexport function NodeError({ content }: NodeErrorProps) {\n return (\n <div className={classNames(jobStyles[\"node-job\"], jobStyles.error)}>\n <div className={styles.error}>{content}</div>\n </div>\n );\n}\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"../NodeJob/NodeJob.module.css\";\nimport type { ActivityRun, ServiceFlowRun } from \"../../shared/interfaces\";\nimport { K, t } from \"../i18n\";\n\nexport interface NodeChunkProps {\n type: \"flow\" | \"activity\";\n active?: boolean;\n flow: ServiceFlowRun;\n activity?: ActivityRun;\n}\n\nexport function NodeChunk({ type, active, flow, activity }: NodeChunkProps) {\n return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.active]: active,\n })}\n >\n <div className={styles.background} />\n <div className={styles.body}>\n {type === \"flow\"\n ? t(K.INITIATING_SERVICE_FLOW, { name: flow.name })\n : t(K.STARTING_SERVICE_FLOW_ACTIVITY, { name: activity!.name })}\n </div>\n </div>\n );\n}\n","// istanbul ignore file: experimental\nimport React, {\n memo,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { getBasePath, getRuntime } from \"@next-core/runtime\";\nimport \"@next-core/theme\";\nimport classNames from \"classnames\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport { select, type Selection, type TransitionLike } from \"d3-selection\";\nimport { ZoomTransform } from \"d3-zoom\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport styles from \"./styles.module.css\";\nimport { useZoom } from \"./useZoom.js\";\nimport type {\n SizeTuple,\n GraphNode,\n RequirementGraphNode,\n JobGraphNode,\n ZoomAction,\n FeedbackDetail,\n FlowGraphNode,\n ActivityGraphNode,\n} from \"./interfaces.js\";\nimport { useAutoCenter } from \"./useAutoCenter.js\";\nimport { useLayout } from \"./useLayout.js\";\nimport { useConversationDetail } from \"./useConversationDetail\";\nimport { useConversationGraph } from \"./useConversationGraph\";\nimport { ZoomBar } from \"./ZoomBar/ZoomBar.js\";\nimport { NodeStart } from \"./NodeStart/NodeStart.js\";\nimport { NodeRequirement } from \"./NodeRequirement/NodeRequirement.js\";\nimport { NodeInstruction } from \"./NodeInstruction/NodeInstruction.js\";\nimport { NodeJob } from \"./NodeJob/NodeJob.js\";\nimport { NodeEnd } from \"./NodeEnd/NodeEnd.js\";\nimport {\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_TOP,\n END_NODE_ID,\n FEEDBACK_NODE_ID,\n REPLAY_NODE_ID,\n} from \"./constants.js\";\nimport { DONE_STATES, GENERAL_DONE_STATES } from \"../shared/constants.js\";\nimport { WrappedIcon } from \"../shared/bricks\";\nimport { CanvasContext } from \"./CanvasContext.js\";\nimport { ToolCallDetailDrawer } from \"./ToolCallDetail/ToolCallDetailDrawer\";\nimport { getScrollTo } from \"./utils/getScrollTo.js\";\nimport { handleKeyboardNav } from \"./utils/handleKeyboardNav.js\";\nimport { ExpandedView } from \"../shared/ExpandedView/ExpandedView.js\";\nimport { Nav } from \"./Nav/Nav.js\";\nimport { ChatBox } from \"../shared/ChatBox/ChatBox.js\";\nimport { NodeFeedback } from \"../shared/NodeFeedback/NodeFeedback.js\";\nimport { TaskContext } from \"../shared/TaskContext.js\";\nimport { NodeLoading } from \"./NodeLoading/NodeLoading.js\";\nimport { JsxEditor } from \"../shared/JsxEditor/JsxEditor.js\";\nimport { NodeError } from \"./NodeError/NodeError.js\";\nimport type {\n GeneratedView,\n FileInfo,\n Job,\n CommandPayload,\n ActiveDetail,\n ServiceFlowRun,\n ActivityRun,\n ExtraChatPayload,\n ActiveImages,\n} from \"../shared/interfaces\";\nimport { NodeReplay } from \"./NodeReplay/NodeReplay.js\";\nimport type { ConversationDetail, CruiseCanvasProps } from \".\";\nimport { useFlowAndActivityMap } from \"../shared/useFlowAndActivityMap\";\nimport { useFulfilledActiveDetail } from \"../shared/useFulfilledActiveDetail\";\nimport { NodeChunk } from \"./NodeChunk/NodeChunk\";\nimport { FilePreview } from \"../shared/FilePreview/FilePreview\";\nimport { ImagesPreview } from \"../shared/FilePreview/ImagesPreview\";\nimport { useHandleEscape } from \"../shared/useHandleEscape\";\n\nconst MemoizedNodeComponent = memo(NodeComponent);\n\ninterface CruiseCanvasComponentProps extends CruiseCanvasProps {\n conversationId: string;\n onShare: () => void;\n onTerminate: () => void;\n onSubmitFeedback: (detail: FeedbackDetail) => void;\n onSwitchToChat: () => void;\n onFeedbackOnView: (viewId: string) => void;\n onDetailChange: (detail: ConversationDetail) => void;\n}\n\ninterface ScrollToOptions {\n nodeId?: string;\n jobId?: string;\n\n /**\n * @default \"auto\"\n */\n behavior?: \"smooth\" | \"instant\" | \"auto\";\n\n /**\n * When set to \"start\", force scroll even if the node is fully visible.\n *\n * @default \"nearest\"\n */\n block?: \"start\" | \"nearest\";\n}\n\nexport interface CruiseCanvasRef {\n resumed?: () => void;\n feedbackSubmitDone: () => void;\n feedbackSubmitFailed: () => void;\n feedbackOnViewDone: (viewId: string) => void;\n}\n\nexport function CruiseCanvasComponent(\n {\n conversationId,\n initialRequest,\n replay,\n replayDelay,\n supports,\n showHiddenJobs,\n showHumanActions,\n showFeedback: propShowFeedback,\n showFeedbackAfterFailed,\n showFeedbackOnView,\n showUiSwitch,\n showJsxEditor,\n previewUrlTemplate,\n showCases,\n exampleProjects,\n tryItOutUrl,\n separateInstructions,\n aiEmployees,\n commands,\n uploadOptions,\n onShare,\n onTerminate,\n onSubmitFeedback,\n onSwitchToChat,\n onFeedbackOnView,\n onDetailChange,\n }: CruiseCanvasComponentProps,\n ref: React.Ref<CruiseCanvasRef>\n) {\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n conversation,\n tasks,\n serviceFlows,\n errors,\n humanInputRef,\n skipToResults,\n watchAgain,\n } = useConversationDetail(\n conversationId,\n initialRequest,\n replay,\n replayDelay\n );\n const { flowMap, activityMap } = useFlowAndActivityMap(serviceFlows);\n const graph = useConversationGraph(\n conversation,\n tasks,\n errors,\n flowMap,\n activityMap,\n {\n showHiddenJobs,\n showHumanActions,\n separateInstructions,\n }\n );\n const rawNodes = graph?.nodes;\n const rawEdges = graph?.edges;\n const nav = graph?.nav;\n const views = graph?.views;\n const jobMap = graph?.jobMap;\n const pageTitle = conversation?.title ?? \"\";\n const conversationState = conversation?.state;\n const [activeNodeId, setActiveNodeId] = useState<string | null>(null);\n const currentNavId = useMemo(() => {\n if (activeNodeId) {\n const [type, jobId] = activeNodeId.split(\":\");\n if (type === \"job\" || type === \"view\") {\n return jobId;\n }\n }\n return null;\n }, [activeNodeId]);\n\n useEffect(() => {\n onDetailChange({\n projectId: conversation?.projectId,\n });\n }, [onDetailChange, conversation?.projectId]);\n\n const [submittingFeedback, setSubmittingFeedback] = useState(false);\n const [submittedFeedback, setSubmittedFeedback] = useState(false);\n const [showFeedback, setShowFeedback] = useState<boolean>(!!propShowFeedback);\n useEffect(() => {\n setShowFeedback(!!propShowFeedback);\n }, [propShowFeedback]);\n const [feedbackDoneViews, setFeedbackDoneViews] = useState<\n Set<string> | undefined\n >();\n\n const handleSubmitFeedback = useCallback(\n (detail: FeedbackDetail) => {\n setSubmittingFeedback(true);\n onSubmitFeedback(detail);\n },\n [onSubmitFeedback]\n );\n\n useImperativeHandle(\n ref,\n () => ({\n feedbackSubmitDone: () => {\n setSubmittedFeedback(true);\n setTimeout(() => {\n setShowFeedback(false);\n }, 3000);\n },\n feedbackSubmitFailed: () => {\n setSubmittingFeedback(false);\n },\n feedbackOnViewDone: (viewId: string) => {\n setFeedbackDoneViews((prev) => {\n const newSet = new Set(prev);\n newSet.add(viewId);\n return newSet;\n });\n },\n }),\n []\n );\n\n // Enable transition after 3 seconds to avoid initial flicker\n const transitionEnabledRef = useRef(false);\n useEffect(() => {\n const timer = setTimeout(() => {\n transitionEnabledRef.current = true;\n }, 3e3);\n return () => {\n clearTimeout(timer);\n };\n }, []);\n\n useEffect(() => {\n getRuntime().applyPageTitle(pageTitle);\n }, [pageTitle]);\n\n const humanInput = useCallback(\n (input: string | null, action?: string, extra?: ExtraChatPayload) => {\n humanInputRef.current?.(input, action, extra);\n },\n [humanInputRef]\n );\n\n const [sizeMap, setSizeMap] = useState<Map<string, SizeTuple> | null>(null);\n const onNodeResize = useCallback((id: string, size: SizeTuple | null) => {\n // Handle resize logic here\n setSizeMap((prev) => {\n if (!size) {\n if (!prev) {\n return null;\n }\n const newMap = new Map(prev);\n const deleted = newMap.delete(id);\n return deleted ? newMap : prev;\n }\n return prev ? new Map(prev).set(id, size) : new Map([[id, size]]);\n });\n }, []);\n\n const { sizeReady, nodes, edges } = useLayout({\n rawNodes,\n rawEdges,\n completed: conversationState === \"completed\",\n failed: conversationState === \"failed\",\n finished: conversation?.finished,\n sizeMap,\n showFeedback,\n showFeedbackAfterFailed,\n replay,\n noTasks: tasks.length === 0,\n });\n\n // Disable auto scroll when the user manually scrolled up\n const detectScrolledUpRef = useRef(false);\n const manualScrolledUpRef = useRef(false);\n\n const [hoverOnScrollableContent, setHoverOnScrollableContent] =\n useState(false);\n\n const { grabbing, transform, transformRef, zoomer /* , scaleRange */ } =\n useZoom({\n rootRef,\n zoomable: sizeReady,\n scrollable: sizeReady && !hoverOnScrollableContent,\n pannable: sizeReady,\n manualScrolledUpRef,\n });\n\n const transitionRef = useRef(false);\n\n const pushZoomTransition = useMemo(() => {\n let nextAction: ZoomAction | null = null;\n\n const run = (action: ZoomAction) => {\n const current = transformRef.current;\n const target = typeof action === \"function\" ? action(current) : action;\n\n if (!target) {\n return;\n }\n\n const { transform, translateBy } = target;\n\n let selection:\n | Selection<HTMLDivElement, unknown, null, undefined>\n | TransitionLike<HTMLDivElement, unknown> = select(rootRef.current!);\n\n if (transitionEnabledRef.current && target.duration !== 0) {\n transitionRef.current = true;\n selection = selection\n .transition()\n .duration(target.duration ?? 300)\n .ease((t) => t * (2 - t)) // Ease in-out\n .on(\"end\", () => {\n transitionRef.current = false;\n if (nextAction) {\n const next = nextAction;\n nextAction = null;\n run(next);\n }\n });\n }\n\n if (transform) {\n zoomer.transform(\n selection,\n new ZoomTransform(\n transform.k ?? current.k,\n transform.x ?? current.x,\n transform.y ?? current.y\n )\n );\n } else {\n zoomer.translateBy(selection, translateBy[0] ?? 0, translateBy[1] ?? 0);\n }\n };\n\n return (action: ZoomAction) => {\n if (transitionRef.current) {\n nextAction = action;\n } else {\n run(action);\n }\n };\n }, [transformRef, zoomer]);\n\n const { centered, setCentered, reCenterRef } = useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n pushZoomTransition,\n });\n\n const conversationDone = DONE_STATES.includes(conversationState);\n const canChat = conversationDone || conversationState === \"input-required\";\n\n const nonLeafNodes = useMemo(() => {\n return new Set<string>(edges.map((edge) => edge.source));\n }, [edges]);\n\n const bottom = useMemo(() => {\n if (!sizeReady) {\n return null;\n }\n\n const leafNodes: GraphNode[] = [];\n for (const node of nodes) {\n if (!nonLeafNodes.has(node.id)) {\n leafNodes.push(node);\n }\n }\n if (leafNodes.length > 0) {\n const y1 = Math.max(\n ...leafNodes.map((node) => node.view!.y + node.view!.height)\n );\n return y1;\n }\n\n return null;\n }, [nodes, nonLeafNodes, sizeReady]);\n\n const bottomRef = useRef<number | null>(null);\n useEffect(() => {\n bottomRef.current = bottom;\n }, [bottom]);\n\n // Make the latest (bottom most) node visible\n useEffect(() => {\n const root = rootRef.current;\n if (\n !root ||\n bottom === null ||\n (detectScrolledUpRef.current && manualScrolledUpRef.current)\n ) {\n return;\n }\n pushZoomTransition((current) => {\n const { offsetHeight } = root;\n const transformedBottom = bottom * current.k + current.y;\n const diffY = offsetHeight - CANVAS_PADDING_BOTTOM - transformedBottom;\n if (diffY < 0) {\n // Use `zoomer.transform()` which will not be restricted to its translate/scale extent\n return {\n transform: {\n y: current.y + diffY,\n },\n duration: diffY > -100 ? 100 : diffY < -500 ? 300 : 200,\n };\n }\n return null;\n });\n }, [bottom, pushZoomTransition]);\n\n // Detect if the user scrolled up manually\n useEffect(() => {\n const bottom = bottomRef.current;\n const root = rootRef.current;\n if (!root || bottom === null || transitionRef.current) {\n return;\n }\n const { offsetHeight } = root;\n const transformedBottom = bottom * transform.k + transform.y;\n\n const diffY = offsetHeight - CANVAS_PADDING_BOTTOM - transformedBottom;\n detectScrolledUpRef.current = diffY < 0;\n }, [transform, zoomer]);\n\n const handleReCenter = useCallback(() => {\n reCenterRef.current = true;\n setCentered(false);\n }, [reCenterRef, setCentered]);\n\n const handleScaleChange = useCallback(\n (scale: number) => {\n zoomer.scaleTo(select(rootRef.current!), scale);\n },\n [zoomer]\n );\n\n const fullRect = useMemo(() => {\n if (!sizeReady) {\n return null;\n }\n return mergeRects(nodes.map((node) => node.view!));\n }, [nodes, sizeReady]);\n\n useEffect(() => {\n if (!fullRect) {\n return;\n }\n const root = rootRef.current;\n if (!root) {\n return;\n }\n\n const distance = 20;\n const { offsetWidth, offsetHeight } = root;\n const viewportWidth = offsetWidth / transform.k;\n const viewportHeight = offsetHeight / transform.k;\n const minX = -(viewportWidth - distance - fullRect.x);\n const maxX = viewportWidth - distance + (fullRect.x + fullRect.width);\n const minY = -(viewportHeight - distance - fullRect.y);\n const maxY = viewportHeight - distance + (fullRect.y + fullRect.height);\n\n zoomer.translateExtent([\n [minX, minY],\n [maxX, maxY],\n ]);\n }, [zoomer, transform.k, fullRect]);\n\n const scrollTo = useCallback(\n ({ nodeId, jobId, behavior, block }: ScrollToOptions) => {\n /**\n * - When the node is fully visible, take no action.\n * - Otherwise, scroll to make it fully visible while make the scroll\n * distance as small as possible.\n * - Special cases:\n * - When the node is higher or wider than the viewport, scroll to\n * the top or left of the node.\n */\n const root = rootRef.current;\n const targets = nodes.filter((n) => {\n if (nodeId && n.id !== nodeId) {\n return false;\n }\n if (jobId && (n as JobGraphNode).job?.id !== jobId) {\n return false;\n }\n return true;\n });\n if (!root || targets.length === 0) {\n return;\n }\n const rect = mergeRects(targets.map((node) => node.view!));\n\n const { x, y } = getScrollTo(\n rect,\n [root.offsetWidth, root.offsetHeight],\n [\n CANVAS_PADDING_TOP,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n ],\n transformRef.current,\n block\n );\n\n if (x || y) {\n pushZoomTransition({\n translateBy: [x, y],\n duration: behavior === \"instant\" ? 0 : undefined,\n });\n }\n },\n [nodes, pushZoomTransition, transformRef]\n );\n\n const scrollBy = useCallback(\n (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n range: \"line\" | \"page\" | \"document\"\n ) => {\n const root = rootRef.current;\n if (!root || !sizeReady) {\n return;\n }\n let x = 0;\n let y = 0;\n let duration = 300;\n let distance: number;\n const isHorizontal = direction === \"left\" || direction === \"right\";\n if (range === \"line\") {\n const lineHeight = 40;\n distance =\n lineHeight * (direction === \"up\" || direction === \"left\" ? 1 : -1);\n duration = 150;\n } else if (range === \"page\") {\n const pageHeight = root.offsetHeight - CANVAS_PADDING_BOTTOM;\n distance = pageHeight * (direction === \"up\" ? -1 : 1);\n } else {\n const { y: top, height } = mergeRects(nodes.map((node) => node.view!));\n\n if (direction === \"down\") {\n const bottom = top + height;\n const targetHeight = bottom - top + CANVAS_PADDING_BOTTOM;\n distance = root.offsetHeight - targetHeight - transformRef.current.y;\n } else {\n distance = top + CANVAS_PADDING_TOP - transformRef.current.y;\n }\n }\n\n if (isHorizontal) {\n x = distance;\n } else {\n y = distance;\n }\n\n if (x || y) {\n pushZoomTransition({\n translateBy: [x, y],\n duration,\n });\n }\n },\n [nodes, pushZoomTransition, sizeReady, transformRef]\n );\n\n const [activeDetail, setActiveDetail] = useState<ActiveDetail | null>(null);\n const [subActiveDetail, setSubActiveDetail] = useState<ActiveDetail | null>(\n null\n );\n\n const [activeExpandedViewJobId, setActiveExpandedViewJobId] = useState<\n string | null\n >(null);\n const [activeFile, setActiveFile] = React.useState<FileInfo | null>(null);\n const [activeJsxEditorJob, setActiveJsxEditorJob] = useState<\n Job | undefined\n >();\n const [manuallyUpdatedViews, setManuallyUpdatedViews] = useState<\n Map<string, GeneratedView> | undefined\n >();\n const updateView = useCallback((jobId: string, view: GeneratedView) => {\n setManuallyUpdatedViews((prev) => {\n const next = new Map(prev);\n next.set(jobId, view);\n return next;\n });\n }, []);\n\n const firstNode = rawNodes?.[0];\n const requirementNode = firstNode?.type === \"requirement\" ? firstNode : null;\n\n const [activeImages, setActiveImages] = useState<ActiveImages | null>(null);\n\n const workspace = conversationId;\n\n const taskContextValue = useMemo(\n () => ({\n conversationId,\n conversationState,\n tasks,\n errors,\n workspace,\n previewUrlTemplate,\n replay,\n showCases,\n exampleProjects,\n aiEmployees,\n commands,\n uploadOptions,\n\n humanInput,\n onShare,\n onTerminate,\n supports,\n\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n activeDetail,\n setActiveDetail,\n subActiveDetail,\n setSubActiveDetail,\n\n submittingFeedback,\n submittedFeedback,\n onSubmitFeedback: handleSubmitFeedback,\n setShowFeedback,\n\n showJsxEditor,\n activeJsxEditorJob,\n setActiveJsxEditorJob,\n manuallyUpdatedViews,\n updateView,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n\n skipToResults,\n watchAgain() {\n watchAgain();\n setCentered(false);\n },\n tryItOut() {\n const win = window.open(\n `${getBasePath().slice(0, -1)}${tryItOutUrl ?? \"/elevo\"}`,\n \"_blank\"\n );\n if (win) {\n win.__elevo_try_it_out = requirementNode\n ? {\n content: requirementNode.content,\n cmd: requirementNode.cmd,\n mentionedAiEmployeeId: requirementNode.mentionedAiEmployeeId,\n }\n : {};\n }\n },\n separateInstructions,\n activeFile,\n setActiveFile,\n activeImages,\n setActiveImages,\n }),\n [\n conversationId,\n conversationState,\n tasks,\n errors,\n workspace,\n previewUrlTemplate,\n replay,\n showCases,\n exampleProjects,\n aiEmployees,\n commands,\n uploadOptions,\n\n humanInput,\n onTerminate,\n onShare,\n supports,\n\n activeExpandedViewJobId,\n activeDetail,\n subActiveDetail,\n\n submittingFeedback,\n submittedFeedback,\n handleSubmitFeedback,\n\n showJsxEditor,\n activeJsxEditorJob,\n manuallyUpdatedViews,\n updateView,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n\n skipToResults,\n watchAgain,\n setCentered,\n requirementNode,\n tryItOutUrl,\n separateInstructions,\n activeFile,\n activeImages,\n ]\n );\n\n const canvasContextValue = useMemo(\n () => ({\n onNodeResize,\n setActiveNodeId,\n hoverOnScrollableContent,\n setHoverOnScrollableContent,\n }),\n [hoverOnScrollableContent, onNodeResize]\n );\n\n const fulfilledActiveDetail = useFulfilledActiveDetail(\n activeDetail,\n jobMap,\n flowMap,\n activityMap\n );\n\n const handleRootClick = useCallback((e: React.MouseEvent) => {\n for (const element of e.nativeEvent.composedPath()) {\n if (\n element instanceof HTMLElement &&\n element.classList.contains(styles.node)\n ) {\n // If the click is on a node, do not reset active node\n return;\n }\n if (element === rootRef.current) {\n break;\n }\n }\n setActiveNodeId(null);\n }, []);\n\n useEffect(() => {\n const root = rootRef.current;\n if (\n !root ||\n fulfilledActiveDetail ||\n activeExpandedViewJobId ||\n activeFile\n ) {\n return;\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (\n document.activeElement &&\n document.activeElement !== document.body &&\n document.activeElement !== root\n ) {\n return;\n }\n\n const keyboardAction = handleKeyboardNav(e, { activeNodeId, nodes });\n if (!keyboardAction) {\n return;\n }\n const { action, node } = keyboardAction;\n\n if (action === \"scroll\") {\n scrollBy(keyboardAction.direction, keyboardAction.range);\n } else if (action === \"enter\") {\n if (\n node.type !== \"job\" /* &&\n node.type !== \"flow\" &&\n node.type !== \"activity\" */\n ) {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n if (action === \"enter\") {\n if (node.type === \"job\") {\n setActiveDetail({\n type: node.type,\n id: (node as JobGraphNode).job.id,\n });\n } /* else {\n setActiveDetail({\n type: node.type as \"flow\",\n id: (node as FlowGraphNode).taskId,\n });\n } */\n } else if (action === \"switch-active-node\") {\n if (node) {\n setActiveNodeId(node.id);\n if (node.type === \"job\") {\n scrollTo({\n jobId: node.job.id,\n behavior: \"smooth\",\n });\n } else {\n scrollTo({\n nodeId: node.id,\n behavior: \"smooth\",\n });\n }\n } else {\n setActiveNodeId(null);\n }\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n activeDetail,\n fulfilledActiveDetail,\n activeNodeId,\n activeExpandedViewJobId,\n activeFile,\n nodes,\n scrollTo,\n scrollBy,\n ]);\n\n useHandleEscape(taskContextValue);\n\n return (\n <TaskContext.Provider value={taskContextValue}>\n <CanvasContext.Provider value={canvasContextValue}>\n <div\n className={classNames(styles.root, {\n [styles.loading]: !conversation,\n })}\n ref={rootRef}\n style={{\n cursor: grabbing ? \"grabbing\" : \"grab\",\n }}\n tabIndex={-1}\n onClick={handleRootClick}\n >\n {!conversation && (\n <div className={styles[\"loading-icon\"]}>\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </div>\n )}\n <div\n className={classNames(styles.canvas, {\n [styles.ready]: sizeReady && centered,\n })}\n style={{\n transform: `translate3d(${transform.x}px, ${transform.y}px, 0) scale(${transform.k})`,\n }}\n >\n <svg className={styles.edges}>\n {edges.map((edge) =>\n edge.target === END_NODE_ID ||\n edge.target === REPLAY_NODE_ID ||\n edge.target === FEEDBACK_NODE_ID ? null : (\n <path\n className={styles.edge}\n key={`${edge.source}-${edge.target}`}\n d={edge\n .points!.map(\n ({ x, y }, i) => `${i === 0 ? \"M\" : \"L\"}${x},${y}`\n )\n .join(\" \")}\n />\n )\n )}\n </svg>\n {nodes.map((node) => (\n <MemoizedNodeComponent\n key={node.id}\n id={node.id}\n type={node.type}\n username={(node as RequirementGraphNode).username}\n content={(node as RequirementGraphNode).content}\n cmd={(node as RequirementGraphNode).cmd}\n mentionedAiEmployeeId={\n (node as RequirementGraphNode).mentionedAiEmployeeId\n }\n files={(node as RequirementGraphNode).files}\n job={(node as JobGraphNode).job}\n flow={(node as FlowGraphNode).flow}\n activity={(node as ActivityGraphNode).activity}\n startTime={conversation?.startTime}\n instructionLoading={\n node.type === \"instruction\" &&\n !nonLeafNodes.has(node.id) &&\n !DONE_STATES.includes(node.state!) &&\n !GENERAL_DONE_STATES.includes(conversationState!)\n }\n isLeaf={!nonLeafNodes.has(node.id)}\n x={node.view?.x}\n y={node.view?.y}\n active={activeNodeId === node.id}\n />\n ))}\n </div>\n </div>\n <div className={styles.widgets}>\n <Nav\n nav={nav}\n currentNavId={currentNavId}\n taskState={conversationState}\n onClick={(jobId: string) => {\n setActiveNodeId(`job:${jobId}`);\n scrollTo({ jobId, block: \"start\" });\n }}\n />\n <ZoomBar\n scale={transform.k}\n showUiSwitch={showUiSwitch}\n onScaleChange={handleScaleChange}\n onReCenter={handleReCenter}\n onSwitchToChat={onSwitchToChat}\n />\n {replay ? (\n !conversation?.finished && (\n <div className={styles[\"footer-container\"]}>\n <NodeReplay />\n </div>\n )\n ) : supports?.chat ? (\n <div className={styles[\"footer-container\"]}>\n <ChatBox state={conversationState} canChat={canChat} />\n </div>\n ) : null}\n </div>\n {fulfilledActiveDetail?.type === \"job\" && (\n <ToolCallDetailDrawer job={fulfilledActiveDetail.job} />\n )}\n {activeExpandedViewJobId && <ExpandedView views={views!} />}\n {activeFile && <FilePreview file={activeFile} />}\n {activeImages && <ImagesPreview images={activeImages} />}\n {showJsxEditor && activeJsxEditorJob && <JsxEditor />}\n </CanvasContext.Provider>\n </TaskContext.Provider>\n );\n}\n\ninterface NodeComponentProps {\n id: string;\n type: GraphNode[\"type\"];\n username?: string;\n content?: string;\n job?: Job;\n flow?: ServiceFlowRun;\n activity?: ActivityRun;\n startTime?: number;\n instructionLoading?: boolean;\n isLeaf?: boolean;\n x?: number;\n y?: number;\n active?: boolean;\n cmd?: CommandPayload;\n mentionedAiEmployeeId?: string;\n files?: FileInfo[];\n}\n\nfunction NodeComponent({\n id,\n type,\n job,\n flow,\n activity,\n username,\n content,\n startTime,\n instructionLoading,\n isLeaf,\n x,\n y,\n active,\n cmd,\n mentionedAiEmployeeId,\n files,\n}: NodeComponentProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const { onNodeResize, setActiveNodeId } = useContext(CanvasContext);\n\n useEffect(() => {\n const element = nodeRef.current;\n if (!element) {\n return;\n }\n const observer = new ResizeObserver(() => {\n onNodeResize(id, [element.offsetWidth, element.offsetHeight]);\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n onNodeResize(id, null);\n };\n }, [id, onNodeResize]);\n\n useEffect(() => {\n const element = nodeRef.current;\n if (!element) {\n return;\n }\n const handleMouseDown = (e: MouseEvent) => {\n e.stopPropagation();\n };\n element.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n element.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, []);\n\n const handleClick = useCallback(() => {\n if (type !== \"start\" && type !== \"instruction\") {\n setActiveNodeId(id);\n }\n }, [id, setActiveNodeId, type]);\n\n return (\n <div\n className={classNames(styles.node, {\n [styles.ready]: x != null && y != null,\n })}\n ref={nodeRef}\n style={{\n left: x,\n top: y,\n }}\n onClick={handleClick}\n >\n {type === \"start\" ? (\n <NodeStart />\n ) : type === \"end\" ? (\n <NodeEnd />\n ) : type === \"feedback\" ? (\n <NodeFeedback />\n ) : type === \"requirement\" ? (\n <NodeRequirement\n username={username}\n content={content}\n startTime={startTime}\n active={active}\n cmd={cmd}\n mentionedAiEmployeeId={mentionedAiEmployeeId}\n files={files}\n />\n ) : type === \"loading\" ? (\n <NodeLoading />\n ) : type === \"error\" ? (\n <NodeError content={content!} />\n ) : type === \"replay\" ? (\n <NodeReplay finished />\n ) : type === \"flow\" || type === \"activity\" ? (\n <NodeChunk\n type={type}\n active={active}\n flow={flow!}\n activity={activity}\n />\n ) : type === \"instruction\" ? (\n <NodeInstruction\n content={job!.instruction}\n loading={instructionLoading}\n />\n ) : (\n <NodeJob job={job!} active={active} isLeaf={isLeaf} />\n )}\n </div>\n );\n}\n","import { useMemo } from \"react\";\nimport type {\n GraphEdge,\n GraphNode,\n GraphNavItem,\n GraphGeneratedView,\n} from \"./interfaces\";\nimport { LOADING_NODE_ID } from \"./constants\";\nimport type {\n ActivityWithFlow,\n ConversationBaseDetail,\n ConversationError,\n ServiceFlowRun,\n Task,\n} from \"../shared/interfaces\";\nimport { getFlatChunks } from \"../shared/getFlatChunks\";\nimport { DONE_STATES } from \"../shared/constants\";\n\nexport function useConversationGraph(\n conversation: ConversationBaseDetail | null | undefined,\n tasks: Task[],\n errors: ConversationError[],\n flowMap?: Map<string, ServiceFlowRun>,\n activityMap?: Map<string, ActivityWithFlow>,\n options?: {\n showHiddenJobs?: boolean;\n showHumanActions?: boolean;\n separateInstructions?: boolean;\n }\n) {\n const { /* showHiddenJobs, */ showHumanActions, separateInstructions } =\n options ?? {};\n\n return useMemo(() => {\n if (!conversation) {\n return null;\n }\n\n const { chunks, jobMap } = getFlatChunks(\n tasks,\n errors,\n flowMap,\n activityMap\n );\n\n const nodes: GraphNode[] = [];\n const edges: GraphEdge[] = [];\n const nav: GraphNavItem[] = [];\n const views: GraphGeneratedView[] = [];\n const jobLevels = new Map<string, number>();\n\n const userInputNodes: string[] = [];\n let username: string | undefined;\n let previousNodeId: string | undefined;\n\n for (const chunk of chunks) {\n const nodeIds: string[] = [];\n\n if (chunk.type === \"job\") {\n const job = chunk.job;\n jobLevels.set(job.id, chunk.level);\n const { messages } = job;\n const hasMessages =\n (Array.isArray(messages) && messages.length > 0) || job.toolCall;\n\n const userInput = messages\n ?.find((msg) => msg.role === \"user\")\n ?.parts?.find((part) => part.type === \"text\")?.text;\n\n const isRequirementJob =\n userInput !== undefined &&\n (chunk === chunks[0] || messages!.length === 1);\n if (isRequirementJob) {\n const requirementId = `requirement:${job.id}`;\n username = job.username;\n nodes.push({\n type: \"requirement\",\n id: requirementId,\n content: userInput,\n username,\n cmd: job.cmd,\n mentionedAiEmployeeId: job.mentionedAiEmployeeId,\n files: messages\n ?.filter((msg) => msg.role === \"user\")\n .flatMap((msg) => msg.parts)\n .filter((part) => part.type === \"file\")\n .map((part) => part.file),\n });\n nodeIds.push(requirementId);\n userInputNodes.push(requirementId);\n } else {\n if (job.instruction) {\n if (separateInstructions || !job.toolCall) {\n const instructionNodeId = `instruction:${job.id}`;\n nodes.push({\n type: \"instruction\",\n id: instructionNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(instructionNodeId);\n }\n\n nav.push({\n id: job.id,\n title: job.instruction,\n state: job.state,\n level: chunk.level,\n });\n } else if (job.toolCall?.annotations?.title) {\n nav.push({\n id: job.id,\n title: job.toolCall.annotations.title,\n state: job.state,\n level: chunk.level,\n });\n }\n\n const jobNodeId = `job:${job.id}`;\n if (hasMessages) {\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n const view = job.generatedView;\n if (view) {\n views.push({\n id: job.id,\n view,\n });\n }\n\n if (showHumanActions && job.humanAction) {\n const humanActionNodeId = `human-action:${job.id}`;\n nodes.push({\n type: \"requirement\",\n id: humanActionNodeId,\n content: job.humanAction,\n username,\n });\n nodeIds.push(humanActionNodeId);\n }\n\n // Make sure every job in the list has at least one corresponding node\n if (nodeIds.length === 0) {\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n if (userInput !== undefined && job.state === \"completed\") {\n userInputNodes.push(nodeIds[nodeIds.length - 1]);\n }\n }\n } else if (chunk.type === \"error\") {\n const errorNodeId = `error:${nodes.length}`;\n nodes.push({\n type: \"error\",\n id: errorNodeId,\n content: chunk.error,\n });\n nodeIds.push(errorNodeId);\n } else {\n const nodeId = `${chunk.type}:${chunk.task.id}`;\n nodes.push({\n type: chunk.type,\n id: nodeId,\n taskId: chunk.task.id,\n flow: chunk.flow,\n ...(chunk.type === \"activity\" ? { activity: chunk.activity } : null),\n } as GraphNode);\n nodeIds.push(nodeId);\n }\n\n for (let i = 1; i < nodeIds.length; i++) {\n edges.push({\n source: nodeIds[i - 1],\n target: nodeIds[i],\n });\n }\n if (nodeIds.length > 0) {\n if (previousNodeId) {\n edges.push({\n source: previousNodeId,\n target: nodeIds[0],\n });\n }\n previousNodeId = nodeIds[nodeIds.length - 1];\n }\n }\n\n if (!DONE_STATES.includes(conversation.state)) {\n if (nodes.length === 0) {\n nodes.push({\n type: \"loading\",\n id: LOADING_NODE_ID,\n });\n } else {\n let counter = 0;\n for (const nodeId of userInputNodes) {\n if (!edges.some((edge) => edge.source === nodeId)) {\n const loadingId = `${LOADING_NODE_ID}:${counter++}`;\n nodes.push({\n type: \"loading\",\n id: loadingId,\n });\n edges.push({\n source: nodeId,\n target: loadingId,\n });\n }\n }\n }\n }\n\n return {\n nodes,\n edges,\n nav,\n views,\n jobMap,\n };\n }, [\n conversation,\n errors,\n separateInstructions,\n // showHiddenJobs,\n showHumanActions,\n tasks,\n flowMap,\n activityMap,\n ]);\n}\n","import { useEffect, useRef, useState, type RefObject } from \"react\";\nimport type { ZoomBehavior } from \"d3-zoom\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport type { GraphNode, ZoomAction } from \"./interfaces\";\nimport { CANVAS_PADDING_BOTTOM } from \"./constants\";\n\nexport interface UseAutoCenterOptions {\n nodes: GraphNode[];\n sizeReady: boolean;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n rootRef: RefObject<HTMLDivElement>;\n pushZoomTransition: (action: ZoomAction) => void;\n}\n\nexport function useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n pushZoomTransition,\n}: UseAutoCenterOptions) {\n const [centered, setCentered] = useState(false);\n const reCenterRef = useRef(false);\n\n // Transform to horizontal center once.\n useEffect(() => {\n const root = rootRef.current;\n if (sizeReady && root && !centered && nodes.length > 0) {\n const {\n x: left,\n y: top,\n width,\n height,\n } = mergeRects(nodes.map((node) => node.view!));\n const right = left + width;\n const bottom = top + height;\n\n const x = (root.clientWidth - (right + left)) / 2;\n let y = 30;\n if (reCenterRef.current) {\n const height = bottom - top + CANVAS_PADDING_BOTTOM;\n const diffY = height - root.clientHeight;\n if (diffY > 0) {\n y = -diffY - top;\n } else {\n y = (root.clientHeight - (bottom + top)) / 2;\n }\n }\n pushZoomTransition({\n transform: { k: 1, x, y },\n duration: reCenterRef.current ? undefined : 0,\n });\n setCentered(true);\n }\n\n reCenterRef.current = false;\n }, [centered, nodes, rootRef, sizeReady, zoomer, pushZoomTransition]);\n\n return { centered, setCentered, reCenterRef };\n}\n","import type { NodeRect, SizeTuple, TransformLiteral } from \"../interfaces\";\n\n/**\n * Get the scroll movement so that the given rectangle is visible in container.\n */\nexport function getScrollTo(\n rect: NodeRect,\n containerSize: SizeTuple,\n padding: [top: number, right: number, bottom: number, left: number],\n transform: TransformLiteral,\n block?: \"start\" | \"nearest\"\n) {\n const [containerWidth, containerHeight] = containerSize;\n const [paddingTop, paddingRight, paddingBottom, paddingLeft] = padding;\n const { x: left, y: top, width, height } = rect;\n const right = left + width;\n const bottom = top + height;\n\n const transformedTop = top * transform.k + transform.y;\n const transformedBottom = bottom * transform.k + transform.y;\n\n const diffYTop = paddingTop - transformedTop;\n const diffYBottom = containerHeight - paddingBottom - transformedBottom;\n const y =\n diffYTop > 0 || block === \"start\"\n ? diffYTop / transform.k\n : diffYBottom < 0\n ? diffYBottom / transform.k\n : 0;\n\n const transformedLeft = left * transform.k + transform.x;\n const transformedRight = right * transform.k + transform.x;\n\n const diffXLeft = paddingLeft - transformedLeft;\n const diffXRight = containerWidth - paddingRight - transformedRight;\n const x =\n diffXLeft > 0\n ? diffXLeft / transform.k\n : diffXRight < 0\n ? diffXRight / transform.k\n : 0;\n\n return { x, y };\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, `.loading--LlSQxd6c{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(69,94,255,0.5);border-radius:24px;animation:loading--LlSQxd6c 1s infinite linear}.inner--I4b7rAPw{width:12px;height:12px;background:rgb(69,94,255);border-radius:12px}@keyframes loading--LlSQxd6c{0%{transform:scale(1);opacity:1}100%{transform:scale(1.5);opacity:0}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"loading\": `loading--LlSQxd6c`,\n\t\"inner\": `inner--I4b7rAPw`\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, `.avatar--v2FiKghW::part(avatar){background-color:rgb(213,214,230);padding:1px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"avatar\": `avatar--v2FiKghW`\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"./images/background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `ai-portal\\\\.cruise-canvas{display:block;position:relative;width:100%;height:100%;overflow:hidden;background-color:#fff;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:cover;background-repeat:no-repeat;background-position:center;background-attachment:fixed;color:#262626;--cruise-canvas-node-border:1px solid gray;--cruise-canvas-node-width-small:330px;--cruise-canvas-node-width-medium:453px;--cruise-canvas-node-width-large:800px;--cruise-canvas-primary-color:var(--elevo-color-brand);--cruise-canvas-input-background:rgba(255,255,255,0.8);--cruise-canvas-input-box-shadow:0px 1px 0px 0px #ffffff,inset 0px 2px 4px 0px #b3bcf9}.root--z6jdb_BU{width:100%;height:100%;position:relative}.widgets--r6lUPOu2{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none}.root--z6jdb_BU.loading--m5r507Hp .canvas--u6C26uH_,\n.root--z6jdb_BU.loading--m5r507Hp + .widgets--r6lUPOu2{visibility:hidden}.loading-icon--UkRBMlBy{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.widgets--r6lUPOu2 > *{pointer-events:auto;-webkit-user-select:text;user-select:text}.canvas--u6C26uH_,\n.edges--uNPQGWZg{width:100%;height:100%;position:absolute;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}.node--IBGywwp4{position:absolute;-webkit-user-select:text;user-select:text;cursor:auto}.node--IBGywwp4:not(.ready--pmh440go),\n.canvas--u6C26uH_:not(.ready--pmh440go) > .edges--uNPQGWZg{visibility:hidden}svg.edges--uNPQGWZg{pointer-events:none;overflow:visible}.edge--muRUWYG1{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.go-back--myNmSpSv{position:absolute;top:20px;left:20px}.go-back--myNmSpSv::part(link){width:32px;height:32px;display:flex;justify-content:center;align-items:center;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);color:inherit;box-sizing:border-box}.go-back--myNmSpSv::part(link):hover{background:rgba(255,255,255,0.5)}.go-back--myNmSpSv::part(link):active{background:rgba(255,255,255,0.3)}.footer-container--sTjEGP7I{position:absolute;bottom:28px;left:50%;transform:translate(-50%,0);width:var(--cruise-canvas-node-width-large);max-width:80%}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"root\": `root--z6jdb_BU`,\n\t\"widgets\": `widgets--r6lUPOu2`,\n\t\"loading\": `loading--m5r507Hp`,\n\t\"canvas\": `canvas--u6C26uH_`,\n\t\"loading-icon\": `loading-icon--UkRBMlBy`,\n\t\"edges\": `edges--uNPQGWZg`,\n\t\"node\": `node--IBGywwp4`,\n\t\"ready\": `ready--pmh440go`,\n\t\"edge\": `edge--muRUWYG1`,\n\t\"go-back\": `go-back--myNmSpSv`,\n\t\"footer-container\": `footer-container--sTjEGP7I`\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/requirement@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-requirement--aVjY3LFY{width:var(--cruise-canvas-node-width-medium);max-width:90vw;background-color:rgba(255,255,255,0.4);background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-position:center bottom;background-size:var(--cruise-canvas-node-width-medium) 128px;background-repeat:no-repeat;box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-radius:12px;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);border:1px solid rgba(255,255,255,0.4);padding:8px;white-space:pre-wrap;position:relative}.node-requirement--aVjY3LFY.active--aEZLkOZe{border-color:#a1b5ff}.heading--F8b1aIJT{display:flex;align-items:center;margin-bottom:11px;font-size:13px}.avatar--BbtS9D46{flex:1;min-width:0}.avatar--BbtS9D46::part(avatar){border:1px solid #fff}.time--IRwoiblW{color:#8c8c8c}.body--JYv_r9n_{background:#f1f6ff;box-shadow:0px 1px 0px 0px #ffffff;border-radius:9px;padding:15px 10px;overflow-wrap:break-word}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-requirement\": `node-requirement--aVjY3LFY`,\n\t\"active\": `active--aEZLkOZe`,\n\t\"heading\": `heading--F8b1aIJT`,\n\t\"avatar\": `avatar--BbtS9D46`,\n\t\"time\": `time--IRwoiblW`,\n\t\"body\": `body--JYv_r9n_`\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, `.container--qJxxNcfJ{position:fixed;top:0;right:0;bottom:0;left:0;padding:20px;background-color:var(--mask-bg)}.editor--SCuHEqYM{height:100%;max-width:1200px;margin:0 auto;background:#ffffff;box-shadow:1px 1px 10px 0px rgba(0,10,26,0.1);border-radius:12px;display:flex;flex-direction:column}.header--nRP4oDyL{height:52px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid rgba(0,0,0,0.15);padding:0 20px}.title--Tq8TUpVz{font-weight:500;font-size:16px;color:#262626}.body--uTZ0qYhS{flex:1;min-height:0;padding:20px;display:flex;flex-direction:column}.content--_WNf_qJr{height:100%}.footer--cblnjGHn{padding:12px 20px;border-top:1px solid rgba(0,0,0,0.15)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": `container--qJxxNcfJ`,\n\t\"editor\": `editor--SCuHEqYM`,\n\t\"header\": `header--nRP4oDyL`,\n\t\"title\": `title--Tq8TUpVz`,\n\t\"body\": `body--uTZ0qYhS`,\n\t\"content\": `content--_WNf_qJr`,\n\t\"footer\": `footer--cblnjGHn`\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/job-background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-job--soTYrcA7{width:var(--cruise-canvas-node-width-medium);max-width:90vw;background:linear-gradient(180deg,#f5f8ff 0%,#edf0f9 100%);box-shadow:0px 4px 10px 0px rgba(177,149,207,0.4),0px 2px 4px 0px rgba(0,0,0,0.06);border-radius:12px;border:1px solid rgba(255,255,255,0.5);padding:8px;position:relative}.node-job--soTYrcA7.active--WIcgH7xW{border-color:#a1b5ff}.background--CKldFV7M{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:12px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-repeat:no-repeat;background-position:top right;z-index:0;transition:opacity 0.15s;opacity:0}.node-job--soTYrcA7.active--WIcgH7xW .background--CKldFV7M,\n.node-job--soTYrcA7:hover .background--CKldFV7M{opacity:1}.background--CKldFV7M ~ *{position:relative;z-index:1}.fit-content--HuAZHd31{min-width:var(--cruise-canvas-node-width-medium);width:min-content}.node-job--soTYrcA7.large--bn_n8RL5{width:var(--cruise-canvas-node-width-large)}.error--IwtdD0T6{box-shadow:inset 0px 0px 8px 2px rgba(242,76,37,0.6);border-color:rgba(242,76,37,0.6)}.heading--GZqrhPqL{display:flex;align-items:center;justify-content:space-between;padding:0 5px 5px;font-size:13px;color:#8c8c8c}.body--V34MsV9R{padding:9px 4px 4px}.scrollable--LudR_5Pj{max-height:462px;overflow-y:auto}.message--iVQBlD6k:not(:first-child){margin-top:6px}.role-assistant--Y8vd9Oms,\n.role-user--nAW4Hzsu{background:var(--cruise-canvas-input-background);border-radius:9px;border:1px solid #ccd1de;padding:6px 16px}.role-user--nAW4Hzsu{white-space:pre-wrap}.role-user--nAW4Hzsu:empty{display:none}.human-input--wFc6ovnT{margin-top:1em;display:block;width:100%;padding:10px 16px;color:inherit;background:var(--cruise-canvas-input-background);box-shadow:var(--cruise-canvas-input-box-shadow);border-radius:9px;border:none;font-size:14px;line-height:22px;height:64px}.human-input--wFc6ovnT:focus{outline:none}.human-input--wFc6ovnT::placeholder{color:#bfbfbf}.node-job--soTYrcA7 *::-webkit-scrollbar{width:5px;height:5px;background:transparent}.node-job--soTYrcA7 *::-webkit-scrollbar-thumb{background-color:#d8d8d8;border-radius:3px}.node-job--soTYrcA7 *::-webkit-scrollbar-track{background:transparent}.view-container--ra1sVc4C{margin-top:10px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-job\": `node-job--soTYrcA7`,\n\t\"active\": `active--WIcgH7xW`,\n\t\"background\": `background--CKldFV7M`,\n\t\"fit-content\": `fit-content--HuAZHd31`,\n\t\"large\": `large--bn_n8RL5`,\n\t\"error\": `error--IwtdD0T6`,\n\t\"heading\": `heading--GZqrhPqL`,\n\t\"body\": `body--V34MsV9R`,\n\t\"scrollable\": `scrollable--LudR_5Pj`,\n\t\"message\": `message--iVQBlD6k`,\n\t\"role-assistant\": `role-assistant--Y8vd9Oms`,\n\t\"role-user\": `role-user--nAW4Hzsu`,\n\t\"human-input\": `human-input--wFc6ovnT`,\n\t\"view-container\": `view-container--ra1sVc4C`\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/start@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-start--Mrh1iP5r{width:65px;height:65px;position:relative;overflow:visible}.icon--NxC4u6Wl{width:75px;height:75px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:75px 75px;background-repeat:no-repeat;background-position:center;position:absolute;left:-5px;top:-1px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-start\": `node-start--Mrh1iP5r`,\n\t\"icon\": `icon--NxC4u6Wl`\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, `.node-instruction--Gu7k6RDs{max-width:437px;max-width:min(437px,90vw);background:rgba(255,255,255,0.2);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.08);border-radius:9999px;border:1px solid rgba(255,255,255,0.284);padding:6px 16px;color:rgba(0,0,0,0.45)}.text--jsSeLl7B{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(0,0,0,0.45);--shine-text-highlight-color:#dcdcdc}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-instruction\": `node-instruction--Gu7k6RDs`,\n\t\"text\": `text--jsSeLl7B`\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, `.node-end--yzRaOZnC{display:flex;flex-direction:column;align-items:center;gap:20px}.content--iXSH199p{display:flex;align-items:center}.icon--IVcHjGFO{width:18px;height:18px;display:flex;align-items:center;justify-content:center;color:#fff;background:#29cc49;border-radius:18px;font-size:14px;margin-right:6px}.text--dW7Y74et{font-weight:500}.button--mkIwsPzt{width:120px;height:30px;background:rgba(0,0,0,0.04);border:none;border-radius:15px;text-align:center;cursor:pointer}.button--mkIwsPzt:hover{background:rgba(0,0,0,0.08)}.button--mkIwsPzt:active{background:rgba(0,0,0,0.15)}.button--mkIwsPzt:focus{outline:none}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-end\": `node-end--yzRaOZnC`,\n\t\"content\": `content--iXSH199p`,\n\t\"icon\": `icon--IVcHjGFO`,\n\t\"text\": `text--dW7Y74et`,\n\t\"button\": `button--mkIwsPzt`\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, `.zoom-bar--MTw5VGPl{left:20px;bottom:20px}@media (max-width: 1123px){.zoom-bar--MTw5VGPl{left:auto;bottom:auto;top:20px;right:80px}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"zoom-bar\": `zoom-bar--MTw5VGPl`\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, `.error--D_UJOZDA{color:var(--color-error);padding:8px;white-space:pre-wrap;word-break:break-word}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"error\": `error--D_UJOZDA`\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["K","NS","locales","en","YES","NO","TASK_COMPLETED","SHARE","TYPE_YOUR_MESSAGE_HERE","SWITCH_TO_CHAT","BACK_TO_CENTER","ZOOM_IN","ZOOM_OUT","FULLSCREEN","SEND_MESSAGE","UNTITLED","DOWNLOAD","INITIATING_SERVICE_FLOW","STARTING_SERVICE_FLOW_ACTIVITY","zh","t","i18n","getFixedT","___CSS_LOADER_EXPORT___","push","module","id","locals","mergeRects","rects","left","Infinity","top","right","bottom","rect","r","x","width","b","y","height","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","DEFAULT_SCALE_RANGE_MIN","DEFAULT_SCALE_RANGE_MAX","START_NODE_ID","END_NODE_ID","FEEDBACK_NODE_ID","LOADING_NODE_ID","REPLAY_NODE_ID","CANVAS_PADDING_TOP","CANVAS_PADDING_RIGHT","CANVAS_PADDING_BOTTOM","CANVAS_PADDING_LEFT","RANK_SEP","NODE_SEP","EDGE_SEP","IS_MAC","test","_ref","_userAgentData$platfo","_userAgentData","navigator","userAgentData","platform","userAgent","wheelData","event","deltaY","deltaMode","ctrlKey","getPositionWithOffsets","position","offsets","ICON_BACK_TO_CENTER","lib","icon","ICON_ZOOM_OUT","ICON_ZOOM_IN","ZoomBar","scale","showUiSwitch","onScaleChange","onReCenter","onSwitchToChat","handleZoomIn","useCallback","handleZoomOut","React","className","toolbarStyles","toolbar","styles","WrappedIconButton","variant","ICON_CHAT","onClick","divider","title","NodeStart","WrappedEasyOpsAvatar","wrapBrick","NodeRequirement","username","content","startTime","active","cmd","mentionedAiEmployeeId","files","classNames","heading","avatar","nameOrInstanceId","showName","size","time","moment","format","body","ReadableCommand","length","FileList","NodeInstruction","loading","text","sharedStyles","WrappedAvatar","AIEmployeeAvatar","aiEmployeeId","Suspense","fallback","name","src","fallbackAvatar","LegacyAIEmployeeAvatar","_ref2","employeePromise","useMemo","fetchEmployee","employee","use","props","URL","location","origin","toString","_extends","RegExpLargeTableInMarkdown","NodeJob","_job$toolCall","_job$messages2","job","isLeaf","toolName","toolCall","toolMarkdownContent","cmdbInstanceDetails","sizeLarge","_job$messages","contents","instanceDetails","large","messages","forEach","message","role","part","parts","_part$data","type","data","_part$data2","Object","keys","outputSchema","properties","detail","file","markdownContent","join","viewSize","setViewSize","useState","handleViewSizeChange","value","error","isError","background","generatedView","ViewToolbar","ToolCallStatus","map","index","_message$parts","key","markdown","partIndex","EnhancedMarkdown","style","padding","CmdbInstanceDetail","humanAction","requestHumanAction","state","RequestHumanAction","action","ViewContainer","onSizeChange","ref","useRef","setHoverOnScrollableContent","useContext","CanvasContext","handleMouseMove","e","scrollableContent","found","el","nativeEvent","composedPath","current","HTMLElement","tagName","scrollWidth","clientWidth","classList","contains","handleMouseLeave","onMouseMove","onMouseLeave","CreatedView","noHeading","NodeEnd","onShare","replay","conversationState","TaskContext","WrappedIcon","prefix","button","getDrawerWidth","innerWidth","window","Math","min","ToolCallDetailDrawer","_toolCall$annotations","setActiveDetail","toolTitle","annotations","handleClose","setTimeout","useEffect","_ref$current","open","setWidth","onResize","addEventListener","removeEventListener","WrappedDrawer","customTitle","closable","mask","maskClosable","keyboard","themeVariant","onClose","ToolCallDetail","getCenterPosition","view","Nav","nav","currentNavId","taskState","_navElement$querySele","navElement","querySelector","scrollIntoView","behavior","block","lastActiveItem","findLast","item","DONE_STATES","includes","_navElement$querySele2","container","NavItem","level","disabled","completed","working","theme","spinning","failed","canceled","getClassNameAndIconProps","marginLeft","link","NodeLoading","inner","editorLibs","filePath","componentsDefinition","replaceAll","JSON","stringify","types","nextTsxDefinition","AsyncWrappedCodeEditor","async","default","asyncWrapBrick","onCodeChange","JsxEditor","_manuallyUpdatedViews","_view$withContexts2","workspace","manuallyUpdatedViews","updateView","activeJsxEditorJob","setActiveJsxEditorJob","get","source","code","setCode","libs","_view$withContexts","commonLibs","withContexts","RESPONSE","editor","header","ICON_CLOSE","language","uri","automaticLayout","extraLibs","footer","WrappedButton","newView","asyncConstructedView","getAsyncConstructedView","NodeError","jobStyles","NodeChunk","flow","activity","MemoizedNodeComponent","memo","NodeComponent","CruiseCanvasComponent","_conversation$title","conversationId","initialRequest","replayDelay","supports","showHiddenJobs","showHumanActions","showFeedback","propShowFeedback","showFeedbackAfterFailed","showFeedbackOnView","showJsxEditor","previewUrlTemplate","showCases","exampleProjects","tryItOutUrl","separateInstructions","aiEmployees","commands","uploadOptions","onTerminate","onSubmitFeedback","onFeedbackOnView","onDetailChange","rootRef","conversation","tasks","serviceFlows","errors","humanInputRef","skipToResults","watchAgain","useConversationDetail","flowMap","activityMap","useFlowAndActivityMap","graph","chunks","jobMap","getFlatChunks","nodes","edges","views","jobLevels","Map","userInputNodes","previousNodeId","chunk","nodeIds","_messages$find","set","hasMessages","Array","isArray","userInput","find","msg","instruction","instructionNodeId","jobNodeId","humanActionNodeId","requirementId","filter","flatMap","errorNodeId","nodeId","task","taskId","i","target","counter","some","edge","loadingId","useConversationGraph","rawNodes","rawEdges","pageTitle","activeNodeId","setActiveNodeId","jobId","split","projectId","submittingFeedback","setSubmittingFeedback","submittedFeedback","setSubmittedFeedback","setShowFeedback","feedbackDoneViews","setFeedbackDoneViews","handleSubmitFeedback","useImperativeHandle","feedbackSubmitDone","feedbackSubmitFailed","feedbackOnViewDone","viewId","prev","newSet","Set","add","transitionEnabledRef","timer","clearTimeout","getRuntime","applyPageTitle","humanInput","input","extra","_humanInputRef$curren","call","sizeMap","setSizeMap","onNodeResize","newMap","delete","sizeReady","_rawNodes","_rawEdges","finished","noTasks","memoizedPositionsRef","initialNodes","initialEdges","finishedNodeIds","hasSource","failedFeedback","shouldAppend","hasTarget","node","has","sourceIds","memoizedPositions","startNodePositionRef","_memoizedPositionsRef","dagre","Graph","setGraph","rankdir","nodesep","edgesep","ranksep","setDefaultEdgeLabel","setEdge","setNode","nodeView","assign","sourcePosition","targetPosition","turnY","points","useLayout","detectScrolledUpRef","manualScrolledUpRef","hoverOnScrollableContent","grabbing","transform","transformRef","zoomer","zoomable","scrollable","pannable","pannableWithCtrl","scaleRange","_scaleRange","onSwitchActiveTarget","setGrabbing","setTransform","k","zoom","wheelDelta","moved","scaleExtent","on","onContextMenu","preventDefault","document","root","rootSelection","select","unsetZoom","closest","element","delta","maxScroll","scrollHeight","clientHeight","scrollTop","checkScrollableY","cancelable","translateBy","wheelDeltaX","wheelDeltaY","useZoom","transitionRef","pushZoomTransition","nextAction","run","selection","_target$duration","_transform$k","_transform$x","_transform$y","_translateBy$","_translateBy$2","duration","transition","ease","next","ZoomTransform","centered","setCentered","reCenterRef","diffY","useAutoCenter","canChat","nonLeafNodes","leafNodes","max","bottomRef","offsetHeight","transformedBottom","handleReCenter","handleScaleChange","scaleTo","fullRect","offsetWidth","viewportWidth","viewportHeight","minX","maxX","minY","maxY","translateExtent","scrollTo","targets","n","_job","containerSize","containerWidth","containerHeight","paddingTop","paddingRight","paddingBottom","paddingLeft","diffYTop","diffYBottom","diffXLeft","diffXRight","getScrollTo","scrollBy","direction","range","distance","isHorizontal","targetHeight","activeDetail","subActiveDetail","setSubActiveDetail","activeExpandedViewJobId","setActiveExpandedViewJobId","activeFile","setActiveFile","setManuallyUpdatedViews","firstNode","requirementNode","activeImages","setActiveImages","taskContextValue","tryItOut","win","getBasePath","slice","__elevo_try_it_out","canvasContextValue","fulfilledActiveDetail","useFulfilledActiveDetail","handleRootClick","handleKeyDown","activeElement","keyboardAction","altKey","activeNode","metaKey","shiftKey","moveOnAxis","axis","oppositeAxis","activePosition","candidates","diff","abs","maxBy","minBy","handleKeyboardNav","stopPropagation","useHandleEscape","Provider","cursor","tabIndex","canvas","ready","d","_ref3","_node$view","_node$view2","instructionLoading","GENERAL_DONE_STATES","widgets","NodeReplay","chat","ChatBox","ExpandedView","FilePreview","ImagesPreview","images","_ref4","nodeRef","observer","ResizeObserver","observe","disconnect","handleMouseDown","handleClick","NodeFeedback","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_REPLACEMENT_0___"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[7729],{7729:(e,n,a)=>{a.r(n),a.d(n,{default:()=>t});const t=[Object.freeze(JSON.parse('{"displayName":"YAML","fileTypes":["yaml","yml","rviz","reek","clang-format","yaml-tmlanguage","syntax","sublime-syntax"],"firstLineMatch":"^%YAML( ?1.\\\\d+)?","name":"yaml","patterns":[{"include":"#comment"},{"include":"#property"},{"include":"#directive"},{"match":"^---","name":"entity.other.document.begin.yaml"},{"match":"^\\\\.{3}","name":"entity.other.document.end.yaml"},{"include":"#node"}],"repository":{"block-collection":{"patterns":[{"include":"#block-sequence"},{"include":"#block-mapping"}]},"block-mapping":{"patterns":[{"include":"#block-pair"}]},"block-node":{"patterns":[{"include":"#prototype"},{"include":"#block-scalar"},{"include":"#block-collection"},{"include":"#flow-scalar-plain-out"},{"include":"#flow-node"}]},"block-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"1":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=\\\\?)|^ *(:)|(:)","endCaptures":{"1":{"name":"punctuation.separator.key-value.mapping.yaml"},"2":{"name":"invalid.illegal.expected-newline.yaml"}},"name":"meta.block-mapping.yaml","patterns":[{"include":"#block-node"}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?]\\\\S)([^:\\\\s]|:\\\\S|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?]\\\\S","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},{"match":":(?=\\\\s|$)","name":"punctuation.separator.key-value.mapping.yaml"}]},"block-scalar":{"begin":"(?:(\\\\|)|(>))([1-9])?([-+])?(.*\\\\n?)","beginCaptures":{"1":{"name":"keyword.control.flow.block-scalar.literal.yaml"},"2":{"name":"keyword.control.flow.block-scalar.folded.yaml"},"3":{"name":"constant.numeric.indentation-indicator.yaml"},"4":{"name":"storage.modifier.chomping-indicator.yaml"},"5":{"patterns":[{"include":"#comment"},{"match":".+","name":"invalid.illegal.expected-comment-or-newline.yaml"}]}},"end":"^(?=\\\\S)|(?!\\\\G)","patterns":[{"begin":"^( +)(?! )","end":"^(?!\\\\1|\\\\s*$)","name":"string.unquoted.block.yaml"}]},"block-sequence":{"match":"(-)(?!\\\\S)","name":"punctuation.definition.block.sequence.item.yaml"},"comment":{"begin":"(?:^([\\\\t ]*)|[\\\\t ]+)(?=#\\\\p{print}*$)","beginCaptures":{"1":{"name":"punctuation.whitespace.comment.leading.yaml"}},"end":"(?!\\\\G)","patterns":[{"begin":"#","beginCaptures":{"0":{"name":"punctuation.definition.comment.yaml"}},"end":"\\\\n","name":"comment.line.number-sign.yaml"}]},"directive":{"begin":"^%","beginCaptures":{"0":{"name":"punctuation.definition.directive.begin.yaml"}},"end":"(?=$|[\\\\t ]+($|#))","name":"meta.directive.yaml","patterns":[{"captures":{"1":{"name":"keyword.other.directive.yaml.yaml"},"2":{"name":"constant.numeric.yaml-version.yaml"}},"match":"\\\\G(YAML)[\\\\t ]+(\\\\d+\\\\.\\\\d+)"},{"captures":{"1":{"name":"keyword.other.directive.tag.yaml"},"2":{"name":"storage.type.tag-handle.yaml"},"3":{"name":"support.type.tag-prefix.yaml"}},"match":"\\\\G(TAG)(?:[\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\t ]+(!(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])*|(?![]!,\\\\[{}])(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+))?)?"},{"captures":{"1":{"name":"support.other.directive.reserved.yaml"},"2":{"name":"string.unquoted.directive-name.yaml"},"3":{"name":"string.unquoted.directive-parameter.yaml"}},"match":"\\\\G(\\\\w+)(?:[\\\\t ]+(\\\\w+)(?:[\\\\t ]+(\\\\w+))?)?"},{"match":"\\\\S+","name":"invalid.illegal.unrecognized.yaml"}]},"flow-alias":{"captures":{"1":{"name":"keyword.control.flow.alias.yaml"},"2":{"name":"punctuation.definition.alias.yaml"},"3":{"name":"variable.other.alias.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"((\\\\*))([^],/\\\\[{}\\\\s]+)([^],}\\\\s]\\\\S*)?"},"flow-collection":{"patterns":[{"include":"#flow-sequence"},{"include":"#flow-mapping"}]},"flow-mapping":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.mapping.begin.yaml"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.mapping.end.yaml"}},"name":"meta.flow-mapping.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.mapping.yaml"},{"include":"#flow-pair"}]},"flow-node":{"patterns":[{"include":"#prototype"},{"include":"#flow-alias"},{"include":"#flow-collection"},{"include":"#flow-scalar"}]},"flow-pair":{"patterns":[{"begin":"\\\\?","beginCaptures":{"0":{"name":"punctuation.definition.key-value.begin.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.explicit.yaml","patterns":[{"include":"#prototype"},{"include":"#flow-pair"},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","beginCaptures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","patterns":[{"include":"#flow-value"}]}]},{"begin":"(?=(?:[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s])([^],:\\\\[{}\\\\s]|:[^],\\\\[{}\\\\s]|\\\\s+(?![#\\\\s]))*\\\\s*:(\\\\s|$))","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"meta.flow-pair.key.yaml","patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","beginCaptures":{"0":{"name":"entity.name.tag.yaml"}},"contentName":"entity.name.tag.yaml","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},{"include":"#flow-node"},{"begin":":(?=\\\\s|$|[],\\\\[{}])","captures":{"0":{"name":"punctuation.separator.key-value.mapping.yaml"}},"end":"(?=[],}])","name":"meta.flow-pair.yaml","patterns":[{"include":"#flow-value"}]}]},"flow-scalar":{"patterns":[{"include":"#flow-scalar-double-quoted"},{"include":"#flow-scalar-single-quoted"},{"include":"#flow-scalar-plain-in"}]},"flow-scalar-double-quoted":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\\"","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.double.yaml","patterns":[{"match":"\\\\\\\\([ \\"/0LN\\\\\\\\_abefnprtv]|x\\\\d\\\\d|u\\\\d{4}|U\\\\d{8})","name":"constant.character.escape.yaml"},{"match":"\\\\\\\\\\\\n","name":"constant.character.escape.double-quoted.newline.yaml"}]},"flow-scalar-plain-in":{"patterns":[{"include":"#flow-scalar-plain-in-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?][^],\\\\[{}\\\\s]","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])","name":"string.unquoted.plain.in.yaml"}]},"flow-scalar-plain-in-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$)|\\\\s*:[],\\\\[{}]|\\\\s*[],\\\\[{}])"}]},"flow-scalar-plain-out":{"patterns":[{"include":"#flow-scalar-plain-out-implicit-type"},{"begin":"[^-\\\\]!\\"#%\\\\&\'*,:>?@\\\\[`{|}\\\\s]|[-:?]\\\\S","end":"(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))","name":"string.unquoted.plain.out.yaml"}]},"flow-scalar-plain-out-implicit-type":{"patterns":[{"captures":{"1":{"name":"constant.language.null.yaml"},"2":{"name":"constant.language.boolean.yaml"},"3":{"name":"constant.numeric.integer.yaml"},"4":{"name":"constant.numeric.float.yaml"},"5":{"name":"constant.other.timestamp.yaml"},"6":{"name":"constant.language.value.yaml"},"7":{"name":"constant.language.merge.yaml"}},"match":"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))|(\\\\d{4}-\\\\d{2}-\\\\d{2}|\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}(?:[Tt]|[\\\\t ]+)\\\\d{1,2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d*)?(?:[\\\\t ]*Z|[-+]\\\\d{1,2}(?::\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\s*$|\\\\s+#|\\\\s*:(\\\\s|$))"}]},"flow-scalar-single-quoted":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.yaml"}},"end":"\'(?!\')","endCaptures":{"0":{"name":"punctuation.definition.string.end.yaml"}},"name":"string.quoted.single.yaml","patterns":[{"match":"\'\'","name":"constant.character.escape.single-quoted.yaml"}]},"flow-sequence":{"begin":"\\\\[","beginCaptures":{"0":{"name":"punctuation.definition.sequence.begin.yaml"}},"end":"]","endCaptures":{"0":{"name":"punctuation.definition.sequence.end.yaml"}},"name":"meta.flow-sequence.yaml","patterns":[{"include":"#prototype"},{"match":",","name":"punctuation.separator.sequence.yaml"},{"include":"#flow-pair"},{"include":"#flow-node"}]},"flow-value":{"patterns":[{"begin":"\\\\G(?![],}])","end":"(?=[],}])","name":"meta.flow-pair.value.yaml","patterns":[{"include":"#flow-node"}]}]},"node":{"patterns":[{"include":"#block-node"}]},"property":{"begin":"(?=[!\\\\&])","end":"(?!\\\\G)","name":"meta.property.yaml","patterns":[{"captures":{"1":{"name":"keyword.control.property.anchor.yaml"},"2":{"name":"punctuation.definition.anchor.yaml"},"3":{"name":"entity.name.type.anchor.yaml"},"4":{"name":"invalid.illegal.character.anchor.yaml"}},"match":"\\\\G((&))([^],/\\\\[{}\\\\s]+)(\\\\S+)?"},{"match":"\\\\G!(?:<(?:%\\\\h{2}|[]!#$\\\\&-;=?-\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\h{2}|[#$\\\\&-+\\\\--;=?-Z_a-z~])+|)(?=[\\\\t ]|$)","name":"storage.type.tag-handle.yaml"},{"match":"\\\\S+","name":"invalid.illegal.tag-handle.yaml"}]},"prototype":{"patterns":[{"include":"#comment"},{"include":"#property"}]}},"scopeName":"source.yaml","aliases":["yml"]}'))]}}]);
2
+ //# sourceMappingURL=7729.1ccf3e2a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/7729.1ccf3e2a.js","mappings":"0KAAA,MAEA,GAFaA,OAAOC,OAAOC,KAAKC,MAAM,ktU","sources":["webpack:///../../node_modules/@shikijs/langs/dist/yaml.mjs"],"sourcesContent":["const lang = Object.freeze(JSON.parse(\"{\\\"displayName\\\":\\\"YAML\\\",\\\"fileTypes\\\":[\\\"yaml\\\",\\\"yml\\\",\\\"rviz\\\",\\\"reek\\\",\\\"clang-format\\\",\\\"yaml-tmlanguage\\\",\\\"syntax\\\",\\\"sublime-syntax\\\"],\\\"firstLineMatch\\\":\\\"^%YAML( ?1.\\\\\\\\d+)?\\\",\\\"name\\\":\\\"yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#comment\\\"},{\\\"include\\\":\\\"#property\\\"},{\\\"include\\\":\\\"#directive\\\"},{\\\"match\\\":\\\"^---\\\",\\\"name\\\":\\\"entity.other.document.begin.yaml\\\"},{\\\"match\\\":\\\"^\\\\\\\\.{3}\\\",\\\"name\\\":\\\"entity.other.document.end.yaml\\\"},{\\\"include\\\":\\\"#node\\\"}],\\\"repository\\\":{\\\"block-collection\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#block-sequence\\\"},{\\\"include\\\":\\\"#block-mapping\\\"}]},\\\"block-mapping\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#block-pair\\\"}]},\\\"block-node\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#prototype\\\"},{\\\"include\\\":\\\"#block-scalar\\\"},{\\\"include\\\":\\\"#block-collection\\\"},{\\\"include\\\":\\\"#flow-scalar-plain-out\\\"},{\\\"include\\\":\\\"#flow-node\\\"}]},\\\"block-pair\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\?\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.definition.key-value.begin.yaml\\\"}},\\\"end\\\":\\\"(?=\\\\\\\\?)|^ *(:)|(:)\\\",\\\"endCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.mapping.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"invalid.illegal.expected-newline.yaml\\\"}},\\\"name\\\":\\\"meta.block-mapping.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#block-node\\\"}]},{\\\"begin\\\":\\\"(?=(?:[^-\\\\\\\\]!\\\\\\\"#%\\\\\\\\&'*,:>?@\\\\\\\\[`{|}\\\\\\\\s]|[-:?]\\\\\\\\S)([^:\\\\\\\\s]|:\\\\\\\\S|\\\\\\\\s+(?![#\\\\\\\\s]))*\\\\\\\\s*:(\\\\\\\\s|$))\\\",\\\"end\\\":\\\"(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$))\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-scalar-plain-out-implicit-type\\\"},{\\\"begin\\\":\\\"[^-\\\\\\\\]!\\\\\\\"#%\\\\\\\\&'*,:>?@\\\\\\\\[`{|}\\\\\\\\s]|[-:?]\\\\\\\\S\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"entity.name.tag.yaml\\\"}},\\\"contentName\\\":\\\"entity.name.tag.yaml\\\",\\\"end\\\":\\\"(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$))\\\",\\\"name\\\":\\\"string.unquoted.plain.out.yaml\\\"}]},{\\\"match\\\":\\\":(?=\\\\\\\\s|$)\\\",\\\"name\\\":\\\"punctuation.separator.key-value.mapping.yaml\\\"}]},\\\"block-scalar\\\":{\\\"begin\\\":\\\"(?:(\\\\\\\\|)|(>))([1-9])?([-+])?(.*\\\\\\\\n?)\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.flow.block-scalar.literal.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"keyword.control.flow.block-scalar.folded.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.indentation-indicator.yaml\\\"},\\\"4\\\":{\\\"name\\\":\\\"storage.modifier.chomping-indicator.yaml\\\"},\\\"5\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#comment\\\"},{\\\"match\\\":\\\".+\\\",\\\"name\\\":\\\"invalid.illegal.expected-comment-or-newline.yaml\\\"}]}},\\\"end\\\":\\\"^(?=\\\\\\\\S)|(?!\\\\\\\\G)\\\",\\\"patterns\\\":[{\\\"begin\\\":\\\"^( +)(?! )\\\",\\\"end\\\":\\\"^(?!\\\\\\\\1|\\\\\\\\s*$)\\\",\\\"name\\\":\\\"string.unquoted.block.yaml\\\"}]},\\\"block-sequence\\\":{\\\"match\\\":\\\"(-)(?!\\\\\\\\S)\\\",\\\"name\\\":\\\"punctuation.definition.block.sequence.item.yaml\\\"},\\\"comment\\\":{\\\"begin\\\":\\\"(?:^([\\\\\\\\t ]*)|[\\\\\\\\t ]+)(?=#\\\\\\\\p{print}*$)\\\",\\\"beginCaptures\\\":{\\\"1\\\":{\\\"name\\\":\\\"punctuation.whitespace.comment.leading.yaml\\\"}},\\\"end\\\":\\\"(?!\\\\\\\\G)\\\",\\\"patterns\\\":[{\\\"begin\\\":\\\"#\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.comment.yaml\\\"}},\\\"end\\\":\\\"\\\\\\\\n\\\",\\\"name\\\":\\\"comment.line.number-sign.yaml\\\"}]},\\\"directive\\\":{\\\"begin\\\":\\\"^%\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.directive.begin.yaml\\\"}},\\\"end\\\":\\\"(?=$|[\\\\\\\\t ]+($|#))\\\",\\\"name\\\":\\\"meta.directive.yaml\\\",\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.other.directive.yaml.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"constant.numeric.yaml-version.yaml\\\"}},\\\"match\\\":\\\"\\\\\\\\G(YAML)[\\\\\\\\t ]+(\\\\\\\\d+\\\\\\\\.\\\\\\\\d+)\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.other.directive.tag.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"storage.type.tag-handle.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"support.type.tag-prefix.yaml\\\"}},\\\"match\\\":\\\"\\\\\\\\G(TAG)(?:[\\\\\\\\t ]+(!(?:[-0-9A-Za-z]*!)?)(?:[\\\\\\\\t ]+(!(?:%\\\\\\\\h{2}|[]!#$\\\\\\\\&-;=?-\\\\\\\\[_a-z~])*|(?![]!,\\\\\\\\[{}])(?:%\\\\\\\\h{2}|[]!#$\\\\\\\\&-;=?-\\\\\\\\[_a-z~])+))?)?\\\"},{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"support.other.directive.reserved.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"string.unquoted.directive-name.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"string.unquoted.directive-parameter.yaml\\\"}},\\\"match\\\":\\\"\\\\\\\\G(\\\\\\\\w+)(?:[\\\\\\\\t ]+(\\\\\\\\w+)(?:[\\\\\\\\t ]+(\\\\\\\\w+))?)?\\\"},{\\\"match\\\":\\\"\\\\\\\\S+\\\",\\\"name\\\":\\\"invalid.illegal.unrecognized.yaml\\\"}]},\\\"flow-alias\\\":{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.flow.alias.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.alias.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"variable.other.alias.yaml\\\"},\\\"4\\\":{\\\"name\\\":\\\"invalid.illegal.character.anchor.yaml\\\"}},\\\"match\\\":\\\"((\\\\\\\\*))([^],/\\\\\\\\[{}\\\\\\\\s]+)([^],}\\\\\\\\s]\\\\\\\\S*)?\\\"},\\\"flow-collection\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-sequence\\\"},{\\\"include\\\":\\\"#flow-mapping\\\"}]},\\\"flow-mapping\\\":{\\\"begin\\\":\\\"\\\\\\\\{\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.mapping.begin.yaml\\\"}},\\\"end\\\":\\\"}\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.mapping.end.yaml\\\"}},\\\"name\\\":\\\"meta.flow-mapping.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#prototype\\\"},{\\\"match\\\":\\\",\\\",\\\"name\\\":\\\"punctuation.separator.mapping.yaml\\\"},{\\\"include\\\":\\\"#flow-pair\\\"}]},\\\"flow-node\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#prototype\\\"},{\\\"include\\\":\\\"#flow-alias\\\"},{\\\"include\\\":\\\"#flow-collection\\\"},{\\\"include\\\":\\\"#flow-scalar\\\"}]},\\\"flow-pair\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\?\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.key-value.begin.yaml\\\"}},\\\"end\\\":\\\"(?=[],}])\\\",\\\"name\\\":\\\"meta.flow-pair.explicit.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#prototype\\\"},{\\\"include\\\":\\\"#flow-pair\\\"},{\\\"include\\\":\\\"#flow-node\\\"},{\\\"begin\\\":\\\":(?=\\\\\\\\s|$|[],\\\\\\\\[{}])\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.mapping.yaml\\\"}},\\\"end\\\":\\\"(?=[],}])\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-value\\\"}]}]},{\\\"begin\\\":\\\"(?=(?:[^-\\\\\\\\]!\\\\\\\"#%\\\\\\\\&'*,:>?@\\\\\\\\[`{|}\\\\\\\\s]|[-:?][^],\\\\\\\\[{}\\\\\\\\s])([^],:\\\\\\\\[{}\\\\\\\\s]|:[^],\\\\\\\\[{}\\\\\\\\s]|\\\\\\\\s+(?![#\\\\\\\\s]))*\\\\\\\\s*:(\\\\\\\\s|$))\\\",\\\"end\\\":\\\"(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$)|\\\\\\\\s*:[],\\\\\\\\[{}]|\\\\\\\\s*[],\\\\\\\\[{}])\\\",\\\"name\\\":\\\"meta.flow-pair.key.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-scalar-plain-in-implicit-type\\\"},{\\\"begin\\\":\\\"[^-\\\\\\\\]!\\\\\\\"#%\\\\\\\\&'*,:>?@\\\\\\\\[`{|}\\\\\\\\s]|[-:?][^],\\\\\\\\[{}\\\\\\\\s]\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"entity.name.tag.yaml\\\"}},\\\"contentName\\\":\\\"entity.name.tag.yaml\\\",\\\"end\\\":\\\"(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$)|\\\\\\\\s*:[],\\\\\\\\[{}]|\\\\\\\\s*[],\\\\\\\\[{}])\\\",\\\"name\\\":\\\"string.unquoted.plain.in.yaml\\\"}]},{\\\"include\\\":\\\"#flow-node\\\"},{\\\"begin\\\":\\\":(?=\\\\\\\\s|$|[],\\\\\\\\[{}])\\\",\\\"captures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.separator.key-value.mapping.yaml\\\"}},\\\"end\\\":\\\"(?=[],}])\\\",\\\"name\\\":\\\"meta.flow-pair.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-value\\\"}]}]},\\\"flow-scalar\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-scalar-double-quoted\\\"},{\\\"include\\\":\\\"#flow-scalar-single-quoted\\\"},{\\\"include\\\":\\\"#flow-scalar-plain-in\\\"}]},\\\"flow-scalar-double-quoted\\\":{\\\"begin\\\":\\\"\\\\\\\"\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.begin.yaml\\\"}},\\\"end\\\":\\\"\\\\\\\"\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.end.yaml\\\"}},\\\"name\\\":\\\"string.quoted.double.yaml\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"\\\\\\\\\\\\\\\\([ \\\\\\\"/0LN\\\\\\\\\\\\\\\\_abefnprtv]|x\\\\\\\\d\\\\\\\\d|u\\\\\\\\d{4}|U\\\\\\\\d{8})\\\",\\\"name\\\":\\\"constant.character.escape.yaml\\\"},{\\\"match\\\":\\\"\\\\\\\\\\\\\\\\\\\\\\\\n\\\",\\\"name\\\":\\\"constant.character.escape.double-quoted.newline.yaml\\\"}]},\\\"flow-scalar-plain-in\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-scalar-plain-in-implicit-type\\\"},{\\\"begin\\\":\\\"[^-\\\\\\\\]!\\\\\\\"#%\\\\\\\\&'*,:>?@\\\\\\\\[`{|}\\\\\\\\s]|[-:?][^],\\\\\\\\[{}\\\\\\\\s]\\\",\\\"end\\\":\\\"(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$)|\\\\\\\\s*:[],\\\\\\\\[{}]|\\\\\\\\s*[],\\\\\\\\[{}])\\\",\\\"name\\\":\\\"string.unquoted.plain.in.yaml\\\"}]},\\\"flow-scalar-plain-in-implicit-type\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"constant.language.null.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"constant.language.boolean.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.integer.yaml\\\"},\\\"4\\\":{\\\"name\\\":\\\"constant.numeric.float.yaml\\\"},\\\"5\\\":{\\\"name\\\":\\\"constant.other.timestamp.yaml\\\"},\\\"6\\\":{\\\"name\\\":\\\"constant.language.value.yaml\\\"},\\\"7\\\":{\\\"name\\\":\\\"constant.language.merge.yaml\\\"}},\\\"match\\\":\\\"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\\\\\.[0-9_]*|[-+]?\\\\\\\\.(?:inf|Inf|INF)|\\\\\\\\.(?:nan|NaN|NAN))|(\\\\\\\\d{4}-\\\\\\\\d{2}-\\\\\\\\d{2}|\\\\\\\\d{4}-\\\\\\\\d{1,2}-\\\\\\\\d{1,2}(?:[Tt]|[\\\\\\\\t ]+)\\\\\\\\d{1,2}:\\\\\\\\d{2}:\\\\\\\\d{2}(?:\\\\\\\\.\\\\\\\\d*)?(?:[\\\\\\\\t ]*Z|[-+]\\\\\\\\d{1,2}(?::\\\\\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$)|\\\\\\\\s*:[],\\\\\\\\[{}]|\\\\\\\\s*[],\\\\\\\\[{}])\\\"}]},\\\"flow-scalar-plain-out\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-scalar-plain-out-implicit-type\\\"},{\\\"begin\\\":\\\"[^-\\\\\\\\]!\\\\\\\"#%\\\\\\\\&'*,:>?@\\\\\\\\[`{|}\\\\\\\\s]|[-:?]\\\\\\\\S\\\",\\\"end\\\":\\\"(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$))\\\",\\\"name\\\":\\\"string.unquoted.plain.out.yaml\\\"}]},\\\"flow-scalar-plain-out-implicit-type\\\":{\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"constant.language.null.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"constant.language.boolean.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"constant.numeric.integer.yaml\\\"},\\\"4\\\":{\\\"name\\\":\\\"constant.numeric.float.yaml\\\"},\\\"5\\\":{\\\"name\\\":\\\"constant.other.timestamp.yaml\\\"},\\\"6\\\":{\\\"name\\\":\\\"constant.language.value.yaml\\\"},\\\"7\\\":{\\\"name\\\":\\\"constant.language.merge.yaml\\\"}},\\\"match\\\":\\\"(?:(null|Null|NULL|~)|([Yy]|yes|Yes|YES|[Nn]|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)|([-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[_\\\\\\\\h]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)|([-+]?(?:[0-9][0-9_]*)?\\\\\\\\.[.0-9]*(?:[Ee][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\\\\\.[0-9_]*|[-+]?\\\\\\\\.(?:inf|Inf|INF)|\\\\\\\\.(?:nan|NaN|NAN))|(\\\\\\\\d{4}-\\\\\\\\d{2}-\\\\\\\\d{2}|\\\\\\\\d{4}-\\\\\\\\d{1,2}-\\\\\\\\d{1,2}(?:[Tt]|[\\\\\\\\t ]+)\\\\\\\\d{1,2}:\\\\\\\\d{2}:\\\\\\\\d{2}(?:\\\\\\\\.\\\\\\\\d*)?(?:[\\\\\\\\t ]*Z|[-+]\\\\\\\\d{1,2}(?::\\\\\\\\d{1,2})?)?)|(=)|(<<))(?=\\\\\\\\s*$|\\\\\\\\s+#|\\\\\\\\s*:(\\\\\\\\s|$))\\\"}]},\\\"flow-scalar-single-quoted\\\":{\\\"begin\\\":\\\"'\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.begin.yaml\\\"}},\\\"end\\\":\\\"'(?!')\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.string.end.yaml\\\"}},\\\"name\\\":\\\"string.quoted.single.yaml\\\",\\\"patterns\\\":[{\\\"match\\\":\\\"''\\\",\\\"name\\\":\\\"constant.character.escape.single-quoted.yaml\\\"}]},\\\"flow-sequence\\\":{\\\"begin\\\":\\\"\\\\\\\\[\\\",\\\"beginCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.sequence.begin.yaml\\\"}},\\\"end\\\":\\\"]\\\",\\\"endCaptures\\\":{\\\"0\\\":{\\\"name\\\":\\\"punctuation.definition.sequence.end.yaml\\\"}},\\\"name\\\":\\\"meta.flow-sequence.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#prototype\\\"},{\\\"match\\\":\\\",\\\",\\\"name\\\":\\\"punctuation.separator.sequence.yaml\\\"},{\\\"include\\\":\\\"#flow-pair\\\"},{\\\"include\\\":\\\"#flow-node\\\"}]},\\\"flow-value\\\":{\\\"patterns\\\":[{\\\"begin\\\":\\\"\\\\\\\\G(?![],}])\\\",\\\"end\\\":\\\"(?=[],}])\\\",\\\"name\\\":\\\"meta.flow-pair.value.yaml\\\",\\\"patterns\\\":[{\\\"include\\\":\\\"#flow-node\\\"}]}]},\\\"node\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#block-node\\\"}]},\\\"property\\\":{\\\"begin\\\":\\\"(?=[!\\\\\\\\&])\\\",\\\"end\\\":\\\"(?!\\\\\\\\G)\\\",\\\"name\\\":\\\"meta.property.yaml\\\",\\\"patterns\\\":[{\\\"captures\\\":{\\\"1\\\":{\\\"name\\\":\\\"keyword.control.property.anchor.yaml\\\"},\\\"2\\\":{\\\"name\\\":\\\"punctuation.definition.anchor.yaml\\\"},\\\"3\\\":{\\\"name\\\":\\\"entity.name.type.anchor.yaml\\\"},\\\"4\\\":{\\\"name\\\":\\\"invalid.illegal.character.anchor.yaml\\\"}},\\\"match\\\":\\\"\\\\\\\\G((&))([^],/\\\\\\\\[{}\\\\\\\\s]+)(\\\\\\\\S+)?\\\"},{\\\"match\\\":\\\"\\\\\\\\G!(?:<(?:%\\\\\\\\h{2}|[]!#$\\\\\\\\&-;=?-\\\\\\\\[_a-z~])+>|(?:[-0-9A-Za-z]*!)?(?:%\\\\\\\\h{2}|[#$\\\\\\\\&-+\\\\\\\\--;=?-Z_a-z~])+|)(?=[\\\\\\\\t ]|$)\\\",\\\"name\\\":\\\"storage.type.tag-handle.yaml\\\"},{\\\"match\\\":\\\"\\\\\\\\S+\\\",\\\"name\\\":\\\"invalid.illegal.tag-handle.yaml\\\"}]},\\\"prototype\\\":{\\\"patterns\\\":[{\\\"include\\\":\\\"#comment\\\"},{\\\"include\\\":\\\"#property\\\"}]}},\\\"scopeName\\\":\\\"source.yaml\\\",\\\"aliases\\\":[\\\"yml\\\"]}\"))\n\nexport default [\nlang\n]\n"],"names":["Object","freeze","JSON","parse"],"sourceRoot":""}