@next-bricks/ai-portal 0.63.5 → 0.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/bricks.json +38 -38
  2. package/dist/chunks/{1447.1763ddd6.js → 1447.32e6384d.js} +2 -2
  3. package/dist/chunks/1447.32e6384d.js.map +1 -0
  4. package/dist/chunks/{4208.f9256bec.js → 4208.9bc0e6c6.js} +2 -2
  5. package/dist/chunks/4208.9bc0e6c6.js.map +1 -0
  6. package/dist/chunks/4820.95bda425.js +2 -0
  7. package/dist/chunks/4820.95bda425.js.map +1 -0
  8. package/dist/chunks/7059.912e3307.js +3 -0
  9. package/dist/chunks/7059.912e3307.js.map +1 -0
  10. package/dist/chunks/{chat-box.aa5fd1e3.js → chat-box.3ae83b4f.js} +3 -3
  11. package/dist/chunks/chat-box.3ae83b4f.js.map +1 -0
  12. package/dist/chunks/chat-input.e913e9ed.js +3 -0
  13. package/dist/chunks/chat-input.e913e9ed.js.map +1 -0
  14. package/dist/chunks/chat-panel.d451898f.js +2 -0
  15. package/dist/chunks/chat-panel.d451898f.js.map +1 -0
  16. package/dist/chunks/main.cc3dd9a1.js +2 -0
  17. package/dist/chunks/{main.1990c90e.js.map → main.cc3dd9a1.js.map} +1 -1
  18. package/dist/examples.json +14 -14
  19. package/dist/index.5b0a4eb5.js +2 -0
  20. package/dist/index.5b0a4eb5.js.map +1 -0
  21. package/dist/manifest.json +320 -291
  22. package/dist/types.json +2642 -1766
  23. package/dist-types/chat-input/index.d.ts +3 -0
  24. package/dist-types/chat-panel/index.d.ts +11 -0
  25. package/dist-types/elevo-sidebar/SpaceNav.d.ts +4 -0
  26. package/dist-types/jsx.d.ts +5 -1
  27. package/dist-types/shared/interfaces.d.ts +16 -1
  28. package/package.json +2 -2
  29. package/dist/chunks/1447.1763ddd6.js.map +0 -1
  30. package/dist/chunks/4208.f9256bec.js.map +0 -1
  31. package/dist/chunks/4820.9909ab50.js +0 -2
  32. package/dist/chunks/4820.9909ab50.js.map +0 -1
  33. package/dist/chunks/7059.bdb0d78e.js +0 -3
  34. package/dist/chunks/7059.bdb0d78e.js.map +0 -1
  35. package/dist/chunks/chat-box.aa5fd1e3.js.map +0 -1
  36. package/dist/chunks/chat-input.4f3de173.js +0 -3
  37. package/dist/chunks/chat-input.4f3de173.js.map +0 -1
  38. package/dist/chunks/chat-panel.d783204f.js +0 -2
  39. package/dist/chunks/chat-panel.d783204f.js.map +0 -1
  40. package/dist/chunks/main.1990c90e.js +0 -2
  41. package/dist/index.50e29779.js +0 -2
  42. package/dist/index.50e29779.js.map +0 -1
  43. /package/dist/chunks/{7059.bdb0d78e.js.LICENSE.txt → 7059.912e3307.js.LICENSE.txt} +0 -0
  44. /package/dist/chunks/{chat-box.aa5fd1e3.js.LICENSE.txt → chat-box.3ae83b4f.js.LICENSE.txt} +0 -0
  45. /package/dist/chunks/{chat-input.4f3de173.js.LICENSE.txt → chat-input.e913e9ed.js.LICENSE.txt} +0 -0
@@ -14,6 +14,7 @@ export interface ChatInputProps {
14
14
  submitDisabled?: boolean;
15
15
  supportsTerminate?: boolean;
16
16
  terminating?: boolean;
17
+ autoFade?: boolean;
17
18
  uploadOptions?: UploadOptions;
18
19
  aiEmployees?: AIEmployee[];
19
20
  commands?: Command[];
@@ -37,6 +38,7 @@ export declare class ChatInput extends ReactNextElement implements ChatInputProp
37
38
  accessor submitDisabled: boolean | undefined;
38
39
  accessor supportsTerminate: boolean | undefined;
39
40
  accessor terminating: boolean | undefined;
41
+ accessor autoFade: boolean | undefined;
40
42
  accessor uploadOptions: UploadOptions | undefined;
41
43
  accessor aiEmployees: AIEmployee[] | undefined;
42
44
  accessor commands: Command[] | undefined;
@@ -44,5 +46,6 @@ export declare class ChatInput extends ReactNextElement implements ChatInputProp
44
46
  * @default "bottom"
45
47
  */
46
48
  accessor suggestionsPlacement: "top" | "bottom" | undefined;
49
+ setValue(value: string): void;
47
50
  render(): React.JSX.Element;
48
51
  }
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import { ReactNextElement } from "@next-core/react-element";
3
3
  import "@next-core/theme";
4
4
  import type { ChatPayload, CommandPayload, FileInfo, UploadOptions } from "../shared/interfaces";
5
+ import type { UseBrickConf } from "@next-core/types";
5
6
  export interface ChatPanelProps {
6
7
  panelTitle?: string;
7
8
  aiEmployeeId?: string;
@@ -10,6 +11,9 @@ export interface ChatPanelProps {
10
11
  height?: string | number;
11
12
  placeholder?: string;
12
13
  uploadOptions?: UploadOptions;
14
+ help?: {
15
+ useBrick: UseBrickConf;
16
+ };
13
17
  }
14
18
  /**
15
19
  * 弹出式对话面板。
@@ -23,8 +27,15 @@ export declare class ChatPanel extends ReactNextElement implements ChatPanelProp
23
27
  accessor height: string | number | undefined;
24
28
  accessor placeholder: string | undefined;
25
29
  accessor uploadOptions: UploadOptions | undefined;
30
+ /**
31
+ * Show help messages when no conversation exists.
32
+ */
33
+ accessor help: {
34
+ useBrick: UseBrickConf;
35
+ } | undefined;
26
36
  open(): void;
27
37
  close(): void;
38
+ setInputValue(content: string): void;
28
39
  send(payload: ChatPayload): void;
29
40
  showFile(file: FileInfo): void;
30
41
  render(): React.JSX.Element;
@@ -1,11 +1,15 @@
1
1
  import React from "react";
2
2
  import type { SidebarLink } from "./interfaces.js";
3
+ import type { GeneralIconProps } from "@next-bricks/icons/general-icon";
3
4
  export interface SpaceNavProps {
4
5
  returnUrl: string;
5
6
  introUrl: string;
6
7
  spaceDetail: {
7
8
  instanceId: string;
8
9
  name: string;
10
+ icon?: GeneralIconProps & {
11
+ color?: string;
12
+ };
9
13
  };
10
14
  spaceObjects?: SidebarLink[];
11
15
  spaceServiceflows?: SidebarLink[];
@@ -135,7 +135,11 @@ declare global {
135
135
  "ai-portal--tab-list": DetailedHTMLProps<HTMLAttributes<TabList>, TabList> & TabListProps & {
136
136
  onTabClick?: (event: CustomEvent<Tab>) => void;
137
137
  };
138
- "ai-portal--chat-panel": DetailedHTMLProps<HTMLAttributes<ChatPanel>, ChatPanel> & ChatPanelProps;
138
+ "ai-portal--chat-panel": DetailedHTMLProps<HTMLAttributes<ChatPanel>, ChatPanel> & Omit<ChatPanelProps, "help"> & {
139
+ help?: {
140
+ render: () => React.ReactNode;
141
+ };
142
+ };
139
143
  }
140
144
  }
141
145
  }
@@ -164,7 +164,7 @@ export interface ConversationError {
164
164
  taskId?: string;
165
165
  error?: string;
166
166
  }
167
- export type CommandPayload = CommandPayloadServiceFlowStart | CommandPayloadServiceFlowCreate | CommandPayloadServiceFlowEdit | CommandPayloadGoalPlan | LegacyCommandPayloadServiceFlowStarting;
167
+ export type CommandPayload = CommandPayloadServiceFlowStart | CommandPayloadServiceFlowCreate | CommandPayloadServiceFlowEdit | CommandPayloadGoalPlan | CommandPayloadBusinessObjectManagement | CommandPayloadBusinessInstanceManagement | LegacyCommandPayloadServiceFlowStarting;
168
168
  export interface BaseCommandPayload {
169
169
  type: string;
170
170
  payload?: unknown;
@@ -202,6 +202,21 @@ export interface CommandPayloadGoalPlan extends BaseCommandPayload {
202
202
  description?: string;
203
203
  };
204
204
  }
205
+ export interface CommandPayloadBusinessObjectManagement extends BaseCommandPayload {
206
+ type: "serviceObject-createOrEdit";
207
+ payload: {
208
+ spaceInstanceId: string;
209
+ serviceObjectId?: string;
210
+ };
211
+ }
212
+ export interface CommandPayloadBusinessInstanceManagement extends BaseCommandPayload {
213
+ type: "serviceObjectInstance-createOrEdit";
214
+ payload: {
215
+ spaceInstanceId: string;
216
+ serviceObjectId: string;
217
+ instanceId?: string;
218
+ };
219
+ }
205
220
  /** @deprecated Use `payload` instead */
206
221
  export interface LegacyCommandPayloadServiceFlowStarting {
207
222
  type: "serviceFlowStarting";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-bricks/ai-portal",
3
- "version": "0.63.5",
3
+ "version": "0.64.0",
4
4
  "homepage": "https://github.com/easyops-cn/next-advanced-bricks/tree/master/bricks/ai-portal",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,5 +49,5 @@
49
49
  "@next-bricks/presentational": "*",
50
50
  "@next-bricks/vs": "*"
51
51
  },
52
- "gitHead": "deea44c3f2f397d51c4222f2fb8e33249f29aebc"
52
+ "gitHead": "eafbbafdd4f07572dffea642e8652d87f8044272"
53
53
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunks/1447.1763ddd6.js","mappings":"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","sources":["webpack:///./src/shared/useFulfilledActiveDetail.ts","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css?7f00","webpack:///./src/cruise-canvas/ToolCallDetail/i18n.ts","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.tsx","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css","webpack:///./src/shared/useHandleEscape.ts","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css?1d0e","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.tsx","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css?6208","webpack:///./src/cruise-canvas/utils/getToolDataProgress.ts","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.tsx","webpack:///./src/cruise-canvas/ToolCallStatus/ToolCallStatus.module.css","webpack:///./src/shared/ExpandedView/ExpandedView.module.css?985a","webpack:///./src/shared/ExpandedView/ExpandedView.tsx","webpack:///../../../src/i18n/constants.ts","webpack:///../../../../src/i18n/locales/en.ts","webpack:///../../../../src/i18n/locales/zh.ts","webpack:///../../../src/i18n/index.ts","webpack:///../../src/humanizeTime.ts","webpack:///./src/cruise-canvas/ToolProgressLine/ToolProgressLine.module.css","webpack:///./src/shared/ChatBox/i18n.ts","webpack:///./src/shared/ChatBox/ChatBox.tsx","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.module.css","webpack:///./src/shared/ExpandedView/ExpandedView.module.css","webpack:///./src/cruise-canvas/ToolCallDetail/ToolCallDetail.module.css","webpack:///./src/shared/useFlowAndActivityMap.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.module.css?99d4","webpack:///./src/shared/NodeFeedback/i18n.ts","webpack:///./src/shared/NodeFeedback/NodeFeedback.tsx","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.module.css?d0bd","webpack:///./src/cruise-canvas/NodeReplay/i18n.ts","webpack:///./src/cruise-canvas/NodeReplay/NodeReplay.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type {\n ActiveDetail,\n ActivityWithFlow,\n FulfilledActiveDetail,\n Job,\n ServiceFlowRun,\n} from \"./interfaces\";\n\nexport function useFulfilledActiveDetail(\n activeDetail: ActiveDetail | null,\n jobMap: Map<string, Job> | undefined,\n flowMap: Map<string, ServiceFlowRun>,\n activityMap: Map<string, ActivityWithFlow>\n) {\n return useMemo<FulfilledActiveDetail | null>(() => {\n if (!activeDetail) {\n return null;\n }\n switch (activeDetail.type) {\n case \"job\": {\n const job = jobMap?.get(activeDetail.id);\n if (job) {\n return {\n type: \"job\",\n job,\n };\n }\n break;\n }\n case \"flow\": {\n const flow = flowMap?.get(activeDetail.id);\n if (flow) {\n return {\n type: \"flow\",\n flow,\n };\n }\n break;\n }\n case \"activity\": {\n const activityWithFlow = activityMap?.get(activeDetail.id);\n if (activityWithFlow) {\n return {\n type: \"activity\",\n flow: activityWithFlow.flow,\n activity: activityWithFlow.activity,\n };\n }\n break;\n }\n }\n return null;\n }, [activeDetail, activityMap, flowMap, jobMap]);\n}\n","\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]!./ToolCallDetail.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]!./ToolCallDetail.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n ARGUMENTS = \"ARGUMENTS\",\n PROCESS = \"PROCESS\",\n RESPONSE = \"RESPONSE\",\n}\n\nconst en: Locale = {\n ARGUMENTS: \"Arguments\",\n PROCESS: \"Process\",\n RESPONSE: \"Response\",\n};\n\nconst zh: Locale = {\n ARGUMENTS: \"参数\",\n PROCESS: \"过程\",\n RESPONSE: \"响应\",\n};\n\nexport const NS = \"bricks/ai-portal/ToolCallDetail\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport type { DataPart, Job, Part } from \"../../shared/interfaces\";\nimport { WrappedCodeBlock } from \"../../shared/bricks\";\nimport styles from \"./ToolCallDetail.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport { K, t, locales, NS } from \"./i18n\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { EnhancedMarkdown } from \"../EnhancedMarkdown/EnhancedMarkdown\";\nimport { MarkdownPre } from \"../../shared/MarkdownPre\";\n\ninitializeI18n(NS, locales);\n\nexport interface ToolCallDetailProps {\n job: Job;\n}\n\nexport function ToolCallDetail({ job }: ToolCallDetailProps): JSX.Element {\n const toolCall = job.toolCall!;\n\n const [progress, intermediateParts, responseParts] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n const intermediateParts: DataPart[] = [];\n const responseParts: Part[] = [];\n let progress: DataPart | undefined;\n for (const message of toolCallMessages ?? []) {\n for (const part of message.parts) {\n if (part.type === \"data\") {\n switch (part.data?.type) {\n case \"progress\":\n // Take the last progress part\n progress = part;\n continue;\n case \"markdown\":\n case \"cmdb_instance_detail\":\n case \"static_data_view\":\n continue;\n default:\n intermediateParts.push(part);\n continue;\n }\n } else if (part.type === \"file\") {\n continue;\n }\n responseParts.push(part);\n }\n }\n return [progress, intermediateParts, responseParts];\n }, [job.messages]);\n\n const hasProcessParts = intermediateParts.length > 0 || !!progress;\n const hasResponseParts = responseParts.length > 0;\n const toolState =\n ([\"working\", \"input-required\"].includes(job.state) && hasProcessParts) ||\n hasResponseParts\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <>\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.ARGUMENTS)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n <PreComponent\n content={toolCall.originalArguments}\n maybeJson\n fallbackAsMarkdown\n />\n </div>\n </div>\n {hasProcessParts && (\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.PROCESS)}:</div>\n <div className={styles.body}>\n {intermediateParts.map((part, partIndex) =>\n part.data?.type === \"stream\" ? (\n <div\n key={partIndex}\n className={classNames(\n styles[\"stream-message\"],\n sharedStyles.markdown\n )}\n >\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={part.data.message}\n />\n </div>\n ) : (\n <div key={partIndex} className={sharedStyles.markdown}>\n <PreComponent content={JSON.stringify(part)} />\n </div>\n )\n )}\n {!!progress && (\n <div\n className={classNames(styles[\"progress-container\"], {\n [styles[\"progress-fallback\"]]: failed,\n })}\n >\n <ToolProgressLine progress={progress} failed={failed} />\n </div>\n )}\n </div>\n </div>\n )}\n {hasResponseParts && (\n <div className={styles.detail}>\n <div className={styles.heading}>{t(K.RESPONSE)}:</div>\n <div className={`${styles.body} ${sharedStyles.markdown}`}>\n {responseParts.map((part, partIndex) =>\n part.type === \"data\" && part.data?.type === \"progress\" ? null : (\n <PreComponent\n key={partIndex}\n content={\n part.type === \"text\" ? part.text : JSON.stringify(part)\n }\n maybeJson={part.type === \"text\"}\n />\n )\n )}\n </div>\n </div>\n )}\n </>\n );\n}\n\nfunction PreComponent({\n content,\n maybeJson,\n fallbackAsMarkdown,\n}: {\n content?: string;\n maybeJson?: boolean;\n fallbackAsMarkdown?: boolean;\n}): JSX.Element | null {\n const [refinedContent, fallback, asMarkdown] = useMemo(() => {\n if (maybeJson && content) {\n try {\n const json = JSON.parse(content);\n return [JSON.stringify(json, null, 2), false, false];\n } catch {\n // Fallback to original content\n if (fallbackAsMarkdown) {\n return [content, false, true];\n }\n }\n }\n return [content, true, false];\n }, [content, fallbackAsMarkdown, maybeJson]);\n\n return asMarkdown ? (\n <div className={styles[\"markdown-block\"]}>\n <EnhancedMarkdown\n className={sharedStyles[\"markdown-wrapper\"]}\n content={refinedContent}\n />\n </div>\n ) : fallback ? (\n <div className={styles[\"code-fallback\"]}>\n <MarkdownPre>\n <code>{refinedContent}</code>\n </MarkdownPre>\n </div>\n ) : (\n <WrappedCodeBlock\n className={styles[\"code-block\"]}\n source={refinedContent!}\n language=\"json\"\n themeVariant=\"elevo\"\n />\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-feedback--qSAvjvCa{width:var(--cruise-canvas-node-width-medium);background:rgba(255,255,255,0.2);border-radius:12px;border:1px solid rgba(255,255,255,0.3);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:20px 28px}.heading--zbbPDsFk{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.title--l9cmJRhB{font-weight:500}.form-item--wtgYuM1v{font-size:12px;line-height:17px;color:rgba(0,0,0,0.88)}.form-item--wtgYuM1v.horizontal--zqc5U1Jh{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:1em}.form-item--wtgYuM1v.vertical--i26lXOiT{margin-top:16px}.form-item--wtgYuM1v.vertical--i26lXOiT label{display:block;color:rgba(0,0,0,0.45);margin-bottom:8px}.form-item--wtgYuM1v textarea{width:100%;background:none;border-radius:8px;border:1px solid rgba(0,0,0,0.15);padding:8px;color:#262626}.form-item--wtgYuM1v textarea:focus{outline:none;border-color:rgba(0,0,0,0.25)}.options--Cak4FPTk{display:flex;align-items:center}.radio--P5Vo_D45{position:relative;cursor:pointer}.radio--P5Vo_D45 input{width:0px;height:0px;position:absolute;-webkit-appearance:none;-moz-appearance:none;appearance:none}.radio--P5Vo_D45 span{display:flex;align-items:center;justify-content:center;width:64px;height:28px;border-radius:8px;background:none;border:1px solid rgba(0,0,0,0.15)}.radio--P5Vo_D45 input:checked + span{background:rgba(255,255,255,0.5);border:none}.radio--P5Vo_D45 input:not(:checked) + span:hover{background:rgba(255,255,255,0.3);border:none}.radio--P5Vo_D45 + .radio--P5Vo_D45{margin-left:8px}.submit--eCyA49Nq{display:flex;justify-content:end;margin-top:18px;gap:8px}.validate--krlXob4C .form-item--wtgYuM1v:has(input:invalid) .label--U8YsN4Mm{color:#f24c25}.submitted--XxktB9y5{background:#d0e7d6;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:none;font-weight:500;color:#009929;padding:17px;text-align:center}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-feedback\": `node-feedback--qSAvjvCa`,\n\t\"heading\": `heading--zbbPDsFk`,\n\t\"title\": `title--l9cmJRhB`,\n\t\"form-item\": `form-item--wtgYuM1v`,\n\t\"horizontal\": `horizontal--zqc5U1Jh`,\n\t\"vertical\": `vertical--i26lXOiT`,\n\t\"options\": `options--Cak4FPTk`,\n\t\"radio\": `radio--P5Vo_D45`,\n\t\"submit\": `submit--eCyA49Nq`,\n\t\"validate\": `validate--krlXob4C`,\n\t\"label\": `label--U8YsN4Mm`,\n\t\"submitted\": `submitted--XxktB9y5`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { useEffect, useRef } from \"react\";\nimport type { TaskContextValue } from \"./TaskContext\";\n\nexport function useHandleEscape({\n activeDetail,\n activeExpandedViewJobId,\n activeFile,\n activeImages,\n subActiveDetail,\n setActiveFile,\n setActiveImages,\n setActiveExpandedViewJobId,\n setActiveDetail,\n setSubActiveDetail,\n}: TaskContextValue) {\n const compositionRef = useRef(false);\n\n useEffect(() => {\n const onCompositionStart = () => {\n compositionRef.current = true;\n };\n const onCompositionEnd = () => {\n compositionRef.current = false;\n };\n document.addEventListener(\"compositionstart\", onCompositionStart);\n document.addEventListener(\"compositionend\", onCompositionEnd);\n return () => {\n document.removeEventListener(\"compositionstart\", onCompositionStart);\n document.removeEventListener(\"compositionend\", onCompositionEnd);\n };\n }, []);\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (compositionRef.current) {\n // Ignore key events during composition\n return;\n }\n if (e.key === \"Escape\") {\n if (activeFile) {\n setActiveFile(null);\n } else if (activeImages) {\n setActiveImages(null);\n } else if (activeExpandedViewJobId) {\n setActiveExpandedViewJobId(null);\n } else if (subActiveDetail) {\n setSubActiveDetail(null);\n } else if (activeDetail) {\n setActiveDetail(null);\n }\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [\n activeDetail,\n activeExpandedViewJobId,\n activeFile,\n activeImages,\n subActiveDetail,\n setActiveFile,\n setActiveImages,\n setActiveExpandedViewJobId,\n setActiveDetail,\n setSubActiveDetail,\n ]);\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolProgressLine.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolProgressLine.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./ToolProgressLine.module.css\";\nimport { DataPart } from \"../../shared/interfaces\";\n\nexport interface ToolProgressLineProps {\n progress: DataPart;\n /**\n * 暂定失败肯定是最后一个\n */\n failed?: boolean;\n}\n\nexport function ToolProgressLine({\n progress,\n failed,\n}: ToolProgressLineProps): JSX.Element {\n const data = progress.data;\n\n return (\n <div\n className={classNames(styles[\"progress-line\"], {\n [styles[\"failed\"]]: failed,\n })}\n >\n <div className={classNames(styles.step)} key={data.progress}>\n <div className={styles.axis}>\n <div className={styles.line} />\n <div className={styles.dot} />\n </div>\n <div className={styles.progress}>\n <span className={styles.count}>{data.progress}</span>\n <span>/</span>\n <span className={styles.total}>{data.total}</span>\n </div>\n <div className={styles.description}>{data.message}</div>\n </div>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallStatus.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ToolCallStatus.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import type { DataPart, Message } from \"../../shared/interfaces\";\n\nexport const getToolDataProgress = (\n toolCallMessages: Message[] | undefined\n): DataPart | undefined => {\n let progressPart: DataPart | undefined;\n toolCallMessages?.findLast((message) => {\n progressPart = message.parts?.findLast((part) => {\n return part.type === \"data\" && part.data?.type === \"progress\";\n }) as DataPart | undefined;\n return !!progressPart;\n });\n return progressPart;\n};\n","import React, { useCallback, useContext, useMemo } from \"react\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport { isEqual } from \"lodash\";\nimport { humanizeTime, HumanizeTimeFormat } from \"@next-shared/datetime\";\nimport styles from \"./ToolCallStatus.module.css\";\nimport { WrappedIcon } from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ToolProgressLine } from \"../ToolProgressLine/ToolProgressLine\";\nimport { getToolDataProgress } from \"../utils/getToolDataProgress\";\nimport type { ActiveDetail, Job, JobState } from \"../../shared/interfaces\";\n\nexport interface NodeJobToolCallProps {\n job: Job;\n variant?: \"default\" | \"read-only\";\n}\n\nexport function ToolCallStatus({\n job,\n variant,\n}: NodeJobToolCallProps): JSX.Element {\n const { setActiveDetail, separateInstructions } = useContext(TaskContext);\n const toolCall = job.toolCall!;\n const toolTitle = toolCall.annotations?.title || toolCall.name;\n const jobTitle = separateInstructions\n ? toolTitle\n : job.instruction || toolTitle;\n const [progress, hasToolCallResponse] = useMemo(() => {\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n return [\n getToolDataProgress(toolCallMessages),\n toolCallMessages?.some((msg) =>\n msg.parts.some((part) => part.type === \"text\")\n ),\n ];\n }, [job.messages]);\n\n const readOnly = useMemo(() => {\n return variant === \"read-only\";\n }, [variant]);\n\n const handleClick = useCallback(() => {\n if (variant === \"read-only\") {\n return;\n }\n const newActiveDetail: ActiveDetail = {\n type: \"job\",\n id: job.id,\n };\n setActiveDetail((prev) =>\n isEqual(prev, newActiveDetail) ? prev : newActiveDetail\n );\n }, [job.id, variant, setActiveDetail]);\n\n const toolState =\n [\"working\", \"input-required\"].includes(job.state) && hasToolCallResponse\n ? \"completed\"\n : job.state;\n\n const failed = job.isError || toolState === \"failed\";\n\n return (\n <div\n className={classNames(styles[\"tool-call\"], {\n [styles.failed]: failed,\n [styles[\"read-only\"]]: readOnly,\n })}\n onClick={handleClick}\n >\n <div className={classNames(styles.status)}>\n {job.isError || toolState === \"failed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"xmark\"\n />\n ) : toolState === \"completed\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"check\"\n />\n ) : toolState === \"working\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n ) : toolState === \"input-required\" ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-user\"\n />\n ) : toolState === \"canceled\" ||\n toolState === (\"terminated\" as JobState) ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-stop\"\n />\n ) : (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"clock\"\n />\n )}\n <span className={styles.name}>\n {variant === \"read-only\" ? toolTitle : jobTitle}\n </span>\n {job.startTime ? (\n <span className={styles.timing}>\n {`${humanizeTime(job.startTime * 1000, HumanizeTimeFormat.accurate)}${\n job.endTime\n ? ` (${moment.duration(job.endTime * 1000 - job.startTime * 1000).humanize({ ss: -1 })})`\n : \"\"\n }`}\n </span>\n ) : null}\n </div>\n {!!progress && !readOnly && (\n <ToolProgressLine progress={progress} failed={failed} />\n )}\n </div>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.tool-call--aTh276av{--failed-color:#f24c25;--border-color:#e2e2ec;--status-border-color:rgba(226,226,236,0.8);font-size:13px;color:#595959;border-radius:10px;border:1px solid var(--border-color);background:#e6e9f3}.tool-call--aTh276av:not(.read-only--xWUswNds):hover{background:#e4e9fb;border:1px solid #b8c1ff}.tool-call--aTh276av:not(:last-child){margin-bottom:10px}.tool-call--aTh276av:not(.read-only--xWUswNds){cursor:pointer}.tool-call--aTh276av .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid var(--status-border-color)}.read-only--xWUswNds{font-size:14px;padding:4px}.failed--sz70SlSa{background:#fef5f3}.failed--sz70SlSa:not(.read-only--xWUswNds):hover{background:#fee7e1;border:1px solid #ffc3b5}.failed--sz70SlSa .status--V5ZXGYOG:not(:last-child){border-bottom:1px solid rgba(253,225,218,0.8)}.status--V5ZXGYOG{height:24px;display:flex;align-items:center;padding:0 12px;color:#262626}.timing--GjuZkMuV{display:none;color:#8c8c8c}.read-only--xWUswNds .timing--GjuZkMuV,\n[class^=\"node-job--\"]:hover .timing--GjuZkMuV,\n.status--V5ZXGYOG:hover .timing--GjuZkMuV{display:block}.icon--LTp5Jjna{margin-right:8px;color:#8c8c8c}.failed--sz70SlSa .icon--LTp5Jjna{color:var(--failed-color)}.name--FwiqyIlQ{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tool-call\": `tool-call--aTh276av`,\n\t\"read-only\": `read-only--xWUswNds`,\n\t\"status\": `status--V5ZXGYOG`,\n\t\"failed\": `failed--sz70SlSa`,\n\t\"timing\": `timing--GjuZkMuV`,\n\t\"icon\": `icon--LTp5Jjna`,\n\t\"name\": `name--FwiqyIlQ`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ExpandedView.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ExpandedView.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React, {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport classNames from \"classnames\";\nimport { getBasePath, unstable_createRoot } from \"@next-core/runtime\";\nimport { uniqueId } from \"lodash\";\nimport { convertView } from \"@next-tsx/converter\";\nimport type { GraphGeneratedView } from \"../../cruise-canvas/interfaces\";\nimport styles from \"./ExpandedView.module.css\";\nimport { WrappedIcon, WrappedIconButton } from \"../../shared/bricks\";\nimport { createPortal } from \"../../cruise-canvas/utils/createPortal\";\nimport { ICON_CLOSE, ICON_EXTERNAL_LINK, ICON_FEEDBACK } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\nimport { useViewFeedbackDone } from \"../useViewFeedbackDone\";\nimport { parseTemplate } from \"../parseTemplate\";\nimport type { ParsedView } from \"../interfaces\";\nimport type { ModulePartOfComponent } from \"@next-tsx/parser\";\n\nexport interface ExpandedViewProps {\n views: GraphGeneratedView[];\n}\n\nexport function ExpandedView({ views }: ExpandedViewProps) {\n const rootId = useMemo(() => uniqueId(), []);\n const {\n workspace,\n previewUrlTemplate,\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n manuallyUpdatedViews,\n showFeedbackOnView,\n onFeedbackOnView,\n feedbackDoneViews,\n } = useContext(TaskContext);\n const containerRef = useRef<HTMLDivElement>(null);\n const rootRef = useRef<Awaited<\n ReturnType<typeof unstable_createRoot>\n > | null>(null);\n const generatedView = activeExpandedViewJobId\n ? (manuallyUpdatedViews?.get(activeExpandedViewJobId) ??\n views.find((v) => v.id === activeExpandedViewJobId)?.view)\n : null;\n const feedbackDone =\n useViewFeedbackDone(generatedView?.viewId, showFeedbackOnView) ||\n (generatedView && feedbackDoneViews?.has(generatedView.viewId));\n const [view, setView] = useState<ParsedView | null>(null);\n const canFeedback =\n !!view && !!generatedView?.viewId && generatedView.from !== \"config\";\n const [viewsWithTitle, setViewsWithTitle] = useState<\n Array<\n GraphGeneratedView & {\n title?: string;\n }\n >\n >(views);\n\n useEffect(() => {\n setView(null);\n let ignore = false;\n generatedView?.asyncConstructedView?.then((view) => {\n if (!ignore) {\n setView(view);\n }\n });\n return () => {\n ignore = true;\n };\n }, [generatedView]);\n\n useEffect(() => {\n Promise.all(\n views.map(async (v) => {\n const view = await v.view.asyncConstructedView;\n return {\n ...v,\n title: (view?.entry?.defaultExport as ModulePartOfComponent)?.title,\n };\n })\n ).then((result) => {\n setViewsWithTitle(result);\n });\n }, [views]);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n const portal = createPortal(rootId);\n const root = unstable_createRoot(container, {\n portal,\n supportsUseChildren: true,\n } as any);\n rootRef.current = root;\n\n return () => {\n root.unmount();\n portal.remove();\n rootRef.current = null;\n };\n }, [rootId]);\n\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n setLoading(true);\n if (!view) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const convertedView = await convertView(view, {\n rootId,\n workspace,\n expanded: true,\n withContexts: view.withContexts,\n });\n if (ignore) {\n return;\n }\n const { brick, context, functions, templates } = convertedView;\n await rootRef.current?.render(brick, { context, functions, templates });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to render view:\", error);\n }\n if (!ignore) {\n setLoading(false);\n }\n })();\n\n return () => {\n ignore = true;\n };\n }, [rootId, workspace, view]);\n\n const handleClose = useCallback(() => {\n setActiveExpandedViewJobId(null);\n }, [setActiveExpandedViewJobId]);\n\n return (\n <div className={styles[\"expanded-view\"]}>\n {loading && (\n <div className={styles.loading}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n <div\n className={classNames(styles.body, {\n // [styles.small]: sizeSmall,\n })}\n ref={containerRef}\n data-root-id={rootId}\n />\n <ul className={styles.nav}>\n {viewsWithTitle.map((view) => (\n <li key={view.id}>\n <button\n className={classNames(styles[\"nav-button\"], {\n [styles.active]: activeExpandedViewJobId === view.id,\n })}\n onClick={() => setActiveExpandedViewJobId(view.id)}\n >\n {view.title ?? \"…\"}\n </button>\n </li>\n ))}\n </ul>\n <div className={styles.buttons}>\n {showFeedbackOnView && !feedbackDone && canFeedback && (\n <WrappedIconButton\n icon={ICON_FEEDBACK}\n onClick={() => onFeedbackOnView?.(generatedView.viewId)}\n />\n )}\n {!!(\n generatedView?.viewId &&\n !generatedView.withContexts &&\n previewUrlTemplate\n ) && (\n <WrappedIconButton\n icon={ICON_EXTERNAL_LINK}\n onClick={() => {\n window.open(\n `${getBasePath().slice(0, -1)}${parseTemplate(\n previewUrlTemplate,\n {\n viewId: generatedView.viewId,\n }\n )}`,\n \"_blank\"\n );\n }}\n />\n )}\n <WrappedIconButton icon={ICON_CLOSE} onClick={handleClose} />\n </div>\n </div>\n );\n}\n","export const NS_LIBS_DATETIME = \"libs-datetime\";\n\nexport enum K {\n TODAY = \"TODAY\",\n YESTERDAY = \"YESTERDAY\",\n FUTURE_AFTER = \"FUTURE_AFTER\",\n FORMAT_MEDIUM_DATETIME = \"FORMAT_MEDIUM_DATETIME\",\n FORMAT_MEDIUM_DATE = \"FORMAT_MEDIUM_DATE\",\n FORMAT_SHORT_DATETIME = \"FORMAT_SHORT_DATETIME\",\n FORMAT_SHORT_DATE = \"FORMAT_SHORT_DATE\",\n FORMAT_SHORT_DAY_DATETIME = \"FORMAT_SHORT_DAY_DATETIME\",\n FORMAT_SHORT_DAY_DATE = \"FORMAT_SHORT_DAY_DATE\",\n SECONDS = \"SECONDS\",\n MILL_SECONDS = \"MILL_SECONDS\",\n MINUTES = \"MINUTES\",\n HOURS = \"HOURS\",\n DAYS = \"DARS\",\n MONTHS = \"MONTHS\",\n}\n\nexport type Locale = { [key in K]: string };\n","import { Locale, K } from \"../constants.js\";\n\nconst locale: Locale = {\n [K.YESTERDAY]: \"Yesterday\",\n [K.TODAY]: \"Today\",\n [K.FUTURE_AFTER]: \"After {{time}}\",\n [K.FORMAT_MEDIUM_DATETIME]: \"LLL\",\n [K.FORMAT_MEDIUM_DATE]: \"LL\",\n [K.FORMAT_SHORT_DATETIME]: \"MMM D ah:mm\",\n [K.FORMAT_SHORT_DATE]: \"MMM D\",\n [K.FORMAT_SHORT_DAY_DATETIME]: \"MMM D HH:mm\",\n [K.FORMAT_SHORT_DAY_DATE]: \"MMM D\",\n [K.MONTHS]: \"months\",\n [K.HOURS]: \"hours\",\n [K.SECONDS]: \"seconds\",\n [K.MILL_SECONDS]: \"millseconds\",\n [K.DAYS]: \"days\",\n [K.MINUTES]: \"minutes\",\n};\n\nexport default locale;\n","import { Locale, K } from \"../constants.js\";\n\nconst locale: Locale = {\n [K.YESTERDAY]: \"昨天\",\n [K.TODAY]: \"今天\",\n [K.FUTURE_AFTER]: \"{{time}}后\",\n [K.FORMAT_MEDIUM_DATETIME]: \"LL ah:mm\",\n [K.FORMAT_MEDIUM_DATE]: \"LL\",\n [K.FORMAT_SHORT_DATETIME]: \"MMMD日 ah:mm\",\n [K.FORMAT_SHORT_DATE]: \"MMMD日\",\n [K.FORMAT_SHORT_DAY_DATETIME]: \"MMMD日 HH:mm\",\n [K.FORMAT_SHORT_DAY_DATE]: \"MMMD日\",\n [K.MONTHS]: \"个月\",\n [K.HOURS]: \"小时\",\n [K.SECONDS]: \"秒\",\n [K.MILL_SECONDS]: \"毫秒\",\n [K.DAYS]: \"天\",\n [K.MINUTES]: \"分钟\",\n};\n\nexport default locale;\n","import { initializeI18n } from \"@next-core/i18n\";\nimport { NS_LIBS_DATETIME } from \"./constants.js\";\nimport en from \"./locales/en.js\";\nimport zh from \"./locales/zh.js\";\n\nexport function addResourceBundle(): void {\n initializeI18n(NS_LIBS_DATETIME, { en, zh });\n}\n","import moment from \"moment\";\nimport { i18n } from \"@next-core/i18n\";\nimport { NS_LIBS_DATETIME, K } from \"./i18n/constants.js\";\nimport { addResourceBundle } from \"./i18n/index.js\";\n\naddResourceBundle();\n\nconst TIME_OFFSET = 0;\n\nexport enum HumanizeTimeFormat {\n full = \"full\",\n default = \"default\",\n relative = \"relative\",\n past = \"past\",\n future = \"future\",\n accurate = \"accurate\",\n auto = \"auto\",\n}\n\nexport const humanizeTime = (\n time: moment.MomentInput,\n format: HumanizeTimeFormat = HumanizeTimeFormat.auto,\n /** 默认为 \"datetime\" */\n type?: \"datetime\" | \"date\"\n): string | null => {\n if (\n time === undefined ||\n time === null ||\n time === -Infinity ||\n time === Infinity\n ) {\n return null;\n }\n const m = moment(time);\n const now = moment().add(TIME_OFFSET);\n const fFull = type === \"date\" ? \"LL\" : \"LL HH:mm\";\n const fMedium = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_MEDIUM_DATE : K.FORMAT_MEDIUM_DATETIME}`\n );\n const fShort = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_SHORT_DATE : K.FORMAT_SHORT_DATETIME}`\n );\n const fShort24 = i18n.t(\n `${NS_LIBS_DATETIME}:${type === \"date\" ? K.FORMAT_SHORT_DAY_DATE : K.FORMAT_SHORT_DAY_DATETIME}`\n );\n const fDefault = type === \"date\" ? \"LL\" : \"LL HH:mm:ss\";\n const fHourMinute = \"HH:mm\";\n let text;\n\n /* 用于精确显示时间的参数\n * 今天与昨天,显示:今天(昨天)x:x的格式,如:今天12:21、昨天16:33\n * 昨天以前的时间,显示:x月x日x时:x分,如:11月23日11:22\n * 今年以前的时间,显示:x年x月x日x时:x分,如:2016年11月11日11:11\n */\n const getAccurateTime = () => {\n const diff = +m.diff(now, \"days\", true).toFixed(1);\n let _text = \"\";\n const retVal =\n m.year() < now.year()\n ? \"lastYear\"\n : diff < -2 || m.isBefore(now.clone().add(-1, \"day\"), \"day\")\n ? \"twoDaysBefore\"\n : m.isSame(now.clone().add(-1, \"day\"), \"day\")\n ? \"yesterday\"\n : m.isSame(now, \"day\")\n ? \"sameDay\"\n : diff < 2 && m.isSame(now.clone().add(1, \"day\"), \"day\")\n ? \"nextDay\"\n : diff < 7\n ? \"nextWeek\"\n : \"default\";\n switch (retVal) {\n case \"sameDay\":\n case \"yesterday\":\n _text = `${i18n.t(`${NS_LIBS_DATETIME}:${retVal === \"yesterday\" ? K.YESTERDAY : K.TODAY}`)}${\n type === \"date\" ? \"\" : ` ${m.format(fHourMinute)}`\n }`;\n break;\n case \"lastYear\":\n _text = m.format(fFull);\n break;\n case \"twoDaysBefore\":\n _text = m.format(fShort24);\n break;\n default:\n _text = m.format(fFull);\n }\n\n return _text;\n };\n\n switch (format) {\n case HumanizeTimeFormat.full:\n text = m.format(fFull);\n break;\n case HumanizeTimeFormat.default:\n text = m.format(fDefault);\n break;\n case HumanizeTimeFormat.relative: {\n const diff = +m - +now;\n text =\n diff <= 0\n ? moment.duration(diff).humanize(true)\n : i18n.t(`${NS_LIBS_DATETIME}:${K.FUTURE_AFTER}`, {\n time: moment.duration(diff).humanize(),\n });\n break;\n }\n case HumanizeTimeFormat.past:\n text = moment.duration(Math.min(+m - +now, 0)).humanize(true);\n break;\n case HumanizeTimeFormat.future:\n text = i18n.t(`${NS_LIBS_DATETIME}:${K.FUTURE_AFTER}`, {\n time: moment.duration(Math.max(+m - +now, 0)).humanize(),\n });\n break;\n case HumanizeTimeFormat.accurate:\n text = getAccurateTime();\n break;\n default:\n text = m.format(m.year() === now.year() ? fShort : fMedium);\n }\n return text;\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.progress-line--CX_xuAHC{--breathing-color:rgba(205,205,217,0.7);--breathing-color-2:rgba(205,205,217,0);display:flex;flex-direction:column}.progress-line--CX_xuAHC .step--YXd66tSR{position:relative;display:flex;align-items:center;padding:10px 4px 10px 16px;color:rgba(0,0,0,0.5)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5{position:absolute;top:0;bottom:0;left:14px;width:1px}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .line--BUSBjzxD{width:1px;height:100%;background:linear-gradient(172deg,rgba(205,205,217,0) 0%,#cdcdd9 46%,rgba(205,205,217,0) 100%)}.progress-line--CX_xuAHC .step--YXd66tSR .axis--T4nVxQt5 .dot--TPMEta87{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:5px;height:5px;background:rgba(205,205,217,1);border-radius:50%}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF{padding:3px;margin:0 8px 0 12px;border-radius:10px;line-height:1;background:#ffffff}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .count--RdZcMYhZ{font-weight:400}.progress-line--CX_xuAHC .step--YXd66tSR .progress--alc7SspF .total--BKoLTm8c{opacity:0.6}.progress-line--CX_xuAHC .step--YXd66tSR .description--AyfMh1_M{flex:1;color:#999}.progress-line--CX_xuAHC .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{font-weight:600}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .line--BUSBjzxD{background:linear-gradient(172deg,rgba(242,76,37,0) 0%,rgba(242,76,37,0.3) 47%,rgba(242,76,37,0) 100%)}.failed--Q9TADo_k .step--YXd66tSR:last-child .axis--T4nVxQt5 .dot--TPMEta87{background:rgba(255,154,120,1)}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF{background:#ffd6d6}.failed--Q9TADo_k .step--YXd66tSR:last-child .progress--alc7SspF .count--RdZcMYhZ{color:#f44336}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"progress-line\": `progress-line--CX_xuAHC`,\n\t\"step\": `step--YXd66tSR`,\n\t\"axis\": `axis--T4nVxQt5`,\n\t\"line\": `line--BUSBjzxD`,\n\t\"dot\": `dot--TPMEta87`,\n\t\"progress\": `progress--alc7SspF`,\n\t\"count\": `count--RdZcMYhZ`,\n\t\"total\": `total--BKoLTm8c`,\n\t\"description\": `description--AyfMh1_M`,\n\t\"failed\": `failed--Q9TADo_k`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n SEND_MESSAGE = \"SEND_MESSAGE\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE = \"CONFIRM_TO_TERMINATE_THE_TASK_TITLE\",\n}\n\nconst en: Locale = {\n SEND_MESSAGE: \"Send message\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"Are you sure to terminate the task?\",\n};\n\nconst zh: Locale = {\n SEND_MESSAGE: \"发送消息\",\n CONFIRM_TO_TERMINATE_THE_TASK_TITLE: \"确定终止任务吗?\",\n};\n\nexport const NS = \"bricks/ai-portal/ChatBox\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useCallback, useContext, useEffect, useState } from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport { showDialog, WrappedChatInput } from \"../bricks\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { TaskContext } from \"../TaskContext\";\nimport type { ConversationState } from \"../interfaces\";\n\ninitializeI18n(NS, locales);\n\nexport interface ChatBoxProps {\n state: ConversationState | undefined;\n canChat: boolean;\n}\n\nexport function ChatBox({ state, canChat }: ChatBoxProps): JSX.Element {\n const {\n humanInput,\n onTerminate,\n supports,\n aiEmployees,\n commands,\n uploadOptions,\n } = useContext(TaskContext);\n\n const [terminating, setTerminating] = useState(false);\n\n useEffect(() => {\n setTerminating(false);\n }, [state]);\n\n const handleTerminate = useCallback(async () => {\n try {\n await showDialog({\n type: \"confirm\",\n title: t(K.CONFIRM_TO_TERMINATE_THE_TASK_TITLE),\n content: \"\",\n });\n } catch {\n return;\n }\n onTerminate();\n setTerminating(true);\n }, [onTerminate]);\n\n return (\n <WrappedChatInput\n placeholder={t(K.SEND_MESSAGE)}\n autoFocus\n submitDisabled={!canChat}\n supportsTerminate={supports?.intercept}\n terminating={terminating}\n aiEmployees={aiEmployees}\n commands={commands}\n suggestionsPlacement=\"top\"\n uploadOptions={uploadOptions}\n onChatSubmit={(e) => {\n const { content, ...extra } = e.detail;\n humanInput(content, undefined, extra);\n }}\n onTerminate={handleTerminate}\n />\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-replay--RJPyOwC6{width:var(--cruise-canvas-node-width-large);max-width:100%;background:rgba(255,255,255,0.5);border-radius:12px;border:1px solid rgba(255,255,255,0.4);padding:4px}.finished--DCI6ewIN:not(.chat--YJT4RmwA){max-width:90vw}.node-replay--RJPyOwC6.chat--YJT4RmwA{margin-top:14px}.bar--Pae7qP58{background:rgba(184,187,205,0.3);border-radius:8px;border:1px solid rgba(255,255,255,0.4);-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);height:54px;display:flex;align-items:center;justify-content:space-between;padding:0 16px}.buttons--m0009sdd{display:flex;align-items:center;gap:8px}.label--VlLhkZeC{font-weight:500}.cases--czpvOoLX,\n.projects--W1KI5fUu{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.content--rFWHJyEy{padding:0 16px 16px}.heading--jlFUCX5n{margin:26px 0 10px;color:rgba(0,0,0,0.6);line-height:20px}.tips--FzM5aSiq{font-size:12px;line-height:20px;color:rgba(0,0,0,0.35);margin:-3px 0 10px}.project--BSu5VIGZ{width:100%}.project--BSu5VIGZ::part(link){height:48px;background:rgba(255,255,255,0.5);border-radius:12px;border:1px solid rgba(255,255,255,0.4);display:flex;align-items:center;padding:0 16px;gap:6px;font-weight:500;color:#262626}.project--BSu5VIGZ::part(link):hover{color:var(--elevo-color-brand)}.tag--Hp8eFjie{display:inline-block;padding:0 4px;background:rgba(37,64,255,0.1);border-radius:4px;color:var(--elevo-color-brand)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-replay\": `node-replay--RJPyOwC6`,\n\t\"finished\": `finished--DCI6ewIN`,\n\t\"chat\": `chat--YJT4RmwA`,\n\t\"bar\": `bar--Pae7qP58`,\n\t\"buttons\": `buttons--m0009sdd`,\n\t\"label\": `label--VlLhkZeC`,\n\t\"cases\": `cases--czpvOoLX`,\n\t\"projects\": `projects--W1KI5fUu`,\n\t\"content\": `content--rFWHJyEy`,\n\t\"heading\": `heading--jlFUCX5n`,\n\t\"tips\": `tips--FzM5aSiq`,\n\t\"project\": `project--BSu5VIGZ`,\n\t\"tag\": `tag--Hp8eFjie`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.expanded-view--Pl3PL2nR{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3;background:rgba(247,248,250,0.5);-webkit-backdrop-filter:blur(74px);backdrop-filter:blur(74px);padding:106px var(--page-padding-right) 40px var(--page-padding-left);overflow-y:auto;display:flex;flex-direction:column;align-items:center}.nav--dLWwzH3E{position:absolute;top:39px;left:50%;transform:translate(-50%,0);list-style:none;margin:0 0 25px;padding:4px;display:flex;justify-content:start;align-items:center;background:rgba(2,0,102,0.05);box-shadow:inset 0px 1px 2px 0px #cdd1d7;border-radius:21px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px)}.nav-button--zv2Yj10m{display:flex;align-items:center;height:34px;padding:0 26px;background:none;border:none;color:#595959;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}.nav-button--zv2Yj10m:not(:last-child){margin-right:12px}.nav-button--zv2Yj10m.active--MHyqtaKu{background:rgba(255,255,255,0.6);border-radius:20px;-webkit-backdrop-filter:blur(15px);backdrop-filter:blur(15px);color:var(--elevo-color-brand);text-shadow:-0.02ex 0 0 currentColor,0.02ex 0 0 currentColor}.nav-button--zv2Yj10m:hover{color:var(--elevo-color-brand)}.body--edodw95r{width:100%;max-width:1556px}.body--edodw95r.small--Y90AL_bt{max-width:804px}.loading--UxfFogUY{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.buttons--ZZYyY2LU{position:absolute;top:24px;right:24px;display:flex;gap:12px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"expanded-view\": `expanded-view--Pl3PL2nR`,\n\t\"nav\": `nav--dLWwzH3E`,\n\t\"nav-button\": `nav-button--zv2Yj10m`,\n\t\"active\": `active--MHyqtaKu`,\n\t\"body\": `body--edodw95r`,\n\t\"small\": `small--Y90AL_bt`,\n\t\"loading\": `loading--UxfFogUY`,\n\t\"buttons\": `buttons--ZZYyY2LU`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.detail--JiiWugxP{margin-top:20px;color:#595959;margin-bottom:7px}.code-block--wccWPbbW::part(pre){border:1px solid #ccd1de}.code-fallback--a8nCduaZ [class*=\"code-wrapper--\"]::part(pre){white-space:pre-wrap;background:#fef5f3!important}.progress-container--tFUAQo73,\n.stream-message--G0tAm9aa{border-radius:9px;border:1px solid #ccd1de;background:#fff}.progress-container--tFUAQo73{padding:6px 2px}.progress-fallback--Xto82BYu{background:#fef5f3}.stream-message--G0tAm9aa{padding:1em;margin:0.5em 0}.markdown-block--C3siNgW9{border:1px solid #ccd1de;border-radius:9px;padding:1em;background:#fff}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"detail\": `detail--JiiWugxP`,\n\t\"code-block\": `code-block--wccWPbbW`,\n\t\"code-fallback\": `code-fallback--a8nCduaZ`,\n\t\"progress-container\": `progress-container--tFUAQo73`,\n\t\"stream-message\": `stream-message--G0tAm9aa`,\n\t\"progress-fallback\": `progress-fallback--Xto82BYu`,\n\t\"markdown-block\": `markdown-block--C3siNgW9`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { useMemo } from \"react\";\nimport type { ActivityWithFlow, ServiceFlowRun } from \"./interfaces\";\n\nexport function useFlowAndActivityMap(serviceFlows: ServiceFlowRun[]) {\n return useMemo(() => {\n const flowMap = new Map<string, ServiceFlowRun>();\n const activityMap = new Map<string, ActivityWithFlow>();\n\n for (const flow of serviceFlows) {\n if (flow.taskId) {\n flowMap.set(flow.taskId, flow);\n }\n for (const stage of flow.spec) {\n for (const activity of stage.serviceFlowActivities) {\n if (activity.taskId) {\n activityMap.set(activity.taskId, { activity, flow });\n }\n }\n }\n }\n\n return { flowMap, activityMap };\n }, [serviceFlows]);\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeFeedback.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n SUBMIT = \"SUBMIT\",\n RESET = \"RESET\",\n FEEDBACK_NODE_TITLE = \"FEEDBACK_NODE_TITLE\",\n PROBLEM_FEEDBACK = \"PROBLEM_FEEDBACK\",\n PROBLEM_FEEDBACK_PLACEHOLDER = \"PROBLEM_FEEDBACK_PLACEHOLDER\",\n IS_THE_TASK_PLAN_COMPLETE = \"IS_THE_TASK_PLAN_COMPLETE\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT = \"IS_THE_TASK_PLAN_LOGICALLY_CORRECT\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE = \"ARE_THE_TASK_PLAN_STEPS_CONCISE\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE = \"ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT = \"IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT\",\n THANKS_FOR_YOUR_FEEDBACK = \"THANKS_FOR_YOUR_FEEDBACK\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n SUBMIT: \"Submit\",\n RESET: \"Reset\",\n FEEDBACK_NODE_TITLE: \"How do you think Elevo has done this task?\",\n PROBLEM_FEEDBACK: \"Problem feedback\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"Please describe the problem you encountered.\",\n IS_THE_TASK_PLAN_COMPLETE: \"Is the task plan complete:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"Is the task plan logically correct:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"Are the task plan steps concise:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE:\n \"Are the analytical conclusions accurate:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"Is the evidence supporting the conclusions sufficient:\",\n THANKS_FOR_YOUR_FEEDBACK: \"Thank you for helping us become better.\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n SUBMIT: \"提交\",\n RESET: \"重置\",\n FEEDBACK_NODE_TITLE: \"Elevo 完成这项任务的效果如何?\",\n PROBLEM_FEEDBACK: \"问题反馈\",\n PROBLEM_FEEDBACK_PLACEHOLDER: \"欢迎留下您的意见\",\n IS_THE_TASK_PLAN_COMPLETE: \"任务计划是否完备:\",\n IS_THE_TASK_PLAN_LOGICALLY_CORRECT: \"任务计划是否逻辑正确:\",\n ARE_THE_TASK_PLAN_STEPS_CONCISE: \"任务计划步骤是否精简:\",\n ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE: \"分析结论是否准确:\",\n IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT:\n \"结论的支撑证据是否充足:\",\n THANKS_FOR_YOUR_FEEDBACK: \"感谢你帮我们变得更好。\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeFeedback\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// istanbul ignore file: experimental\nimport React, { useCallback, useContext, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeFeedback.module.css\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport { WrappedButton, WrappedIconButton } from \"../bricks\";\nimport { ICON_CLOSE } from \"../constants\";\nimport { TaskContext } from \"../TaskContext\";\n\ninitializeI18n(NS, locales);\n\nlet checks:\n | Array<{\n label: string;\n value: string;\n group: \"plan\" | \"result\";\n }>\n | undefined;\n\nfunction getChecks() {\n if (!checks) {\n checks = [\n {\n label: `1. ${t(K.IS_THE_TASK_PLAN_COMPLETE)}`,\n value: \"计划完备\",\n group: \"plan\",\n },\n {\n label: `2. ${t(K.IS_THE_TASK_PLAN_LOGICALLY_CORRECT)}`,\n value: \"逻辑正确\",\n group: \"plan\",\n },\n {\n label: `3. ${t(K.ARE_THE_TASK_PLAN_STEPS_CONCISE)}`,\n value: \"步骤精简\",\n group: \"plan\",\n },\n {\n label: `4. ${t(K.ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE)}`,\n value: \"结论准确\",\n group: \"result\",\n },\n {\n label: `5. ${t(K.IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT)}`,\n value: \"支撑证据充足\",\n group: \"result\",\n },\n ];\n }\n return checks;\n}\n\nexport interface NodeFeedbackProps {\n className?: string;\n}\n\nexport function NodeFeedback({ className }: NodeFeedbackProps): JSX.Element {\n const {\n submittingFeedback,\n submittedFeedback,\n setShowFeedback,\n onSubmitFeedback,\n } = useContext(TaskContext);\n const formRef = useRef<HTMLFormElement>(null);\n const checks = getChecks();\n const [triedSubmit, setTriedSubmit] = useState(false);\n\n const handleSubmit = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(true);\n if (!formRef.current?.reportValidity()) {\n return;\n }\n const formData = new FormData(formRef.current!);\n const plan: string[] = [];\n const result: string[] = [];\n for (let i = 0; i < checks.length; i++) {\n const value = formData.get(`feedback-check-${i}`);\n if (value) {\n if (checks[i].group === \"plan\") {\n plan.push(value as string);\n } else {\n result.push(value as string);\n }\n }\n }\n onSubmitFeedback({\n plan,\n result,\n feedback: (formData.get(\"feedback\") ?? \"\") as string,\n });\n },\n [checks, onSubmitFeedback]\n );\n\n const handleReset = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n setTriedSubmit(false);\n formRef.current?.reset();\n }, []);\n\n if (submittedFeedback) {\n return (\n <div\n className={classNames(\n styles[\"node-feedback\"],\n styles.submitted,\n className\n )}\n >\n {t(K.THANKS_FOR_YOUR_FEEDBACK)}\n </div>\n );\n }\n\n return (\n <div className={classNames(styles[\"node-feedback\"], className)}>\n <div className={styles.heading}>\n <div className={styles.title}>{t(K.FEEDBACK_NODE_TITLE)}</div>\n <WrappedIconButton\n icon={ICON_CLOSE}\n variant=\"mini\"\n onClick={() => setShowFeedback(false)}\n />\n </div>\n <form\n className={classNames(styles.form, { [styles.validate]: triedSubmit })}\n ref={formRef}\n >\n {checks.map((check, index) => (\n <div\n key={index}\n className={`${styles[\"form-item\"]} ${styles.horizontal}`}\n >\n <div className={styles.label}>{check.label}</div>\n <div className={styles.options}>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value={check.value}\n />\n <span>{t(K.YES)}</span>\n </label>\n <label className={styles.radio}>\n <input\n type=\"radio\"\n required\n name={`feedback-check-${index}`}\n value=\"\"\n />\n <span>{t(K.NO)}</span>\n </label>\n </div>\n </div>\n ))}\n <div className={`${styles[\"form-item\"]} ${styles.vertical}`}>\n <label htmlFor=\"feedback-content\">{t(K.PROBLEM_FEEDBACK)}</label>\n <textarea\n id=\"feedback-content\"\n name=\"feedback\"\n placeholder={t(K.PROBLEM_FEEDBACK_PLACEHOLDER)}\n rows={2}\n />\n </div>\n <div className={styles.submit}>\n <WrappedButton themeVariant=\"elevo\" type=\"text\" onClick={handleReset}>\n {t(K.RESET)}\n </WrappedButton>\n <WrappedButton\n themeVariant=\"elevo\"\n type=\"primary\"\n shape=\"round\"\n onClick={handleSubmit}\n disabled={submittingFeedback}\n >\n {t(K.SUBMIT)}\n </WrappedButton>\n </div>\n </form>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeReplay.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeReplay.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n WATCH_AGAIN = \"WATCH_AGAIN\",\n TRY_IT_OUT = \"TRY_IT_OUT\",\n CASE_REPLAYING = \"CASE_REPLAYING\",\n CASE_REPLAY_FINISHED = \"CASE_REPLAY_FINISHED\",\n SKIP_TO_RESULTS = \"SKIP_TO_RESULTS\",\n OTHER_CASES = \"OTHER_CASES\",\n PROJECT_TIPS = \"PROJECT_TIPS\",\n GET_STARTED_WITH_PROJECTS_PREFIX = \"GET_STARTED_WITH_PROJECTS_PREFIX\",\n PROJECTS = \"PROJECTS\",\n GET_STARTED_WITH_PROJECTS_SUFFIX = \"GET_STARTED_WITH_PROJECTS_SUFFIX\",\n}\n\nconst en: Locale = {\n WATCH_AGAIN: \"Watch again\",\n TRY_IT_OUT: \"Try it out\",\n CASE_REPLAYING: \"The case is replaying...\",\n CASE_REPLAY_FINISHED: \"The case replay has finished.\",\n SKIP_TO_RESULTS: \"Skip to results\",\n OTHER_CASES: \"Other cases\",\n PROJECT_TIPS:\n \"Start your project collaboration journey and achieve shared goals with team members and AI employees.\",\n GET_STARTED_WITH_PROJECTS_PREFIX: \"Get started with \",\n PROJECTS: \"Projects\",\n GET_STARTED_WITH_PROJECTS_SUFFIX: \"\",\n};\n\nconst zh: Locale = {\n WATCH_AGAIN: \"再次观看\",\n TRY_IT_OUT: \"尝试同款\",\n CASE_REPLAYING: \"案例回放中...\",\n CASE_REPLAY_FINISHED: \"案例回放完成\",\n SKIP_TO_RESULTS: \"跳转到结果\",\n OTHER_CASES: \"其他案例\",\n PROJECT_TIPS:\n \"开启项目协作之旅,和团队成员及多位AI数字人一起实现共同制定的目标。\",\n GET_STARTED_WITH_PROJECTS_PREFIX: \"开启 \",\n PROJECTS: \"项目\",\n GET_STARTED_WITH_PROJECTS_SUFFIX: \" 体验\",\n};\n\nexport const NS = \"bricks/ai-portal/NodeReplay\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","import React, { useContext } from \"react\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport styles from \"./NodeReplay.module.css\";\nimport {\n WrappedButton,\n WrappedIcon,\n WrappedLink,\n WrappedShowCase,\n} from \"../../shared/bricks\";\nimport { TaskContext } from \"../../shared/TaskContext\";\nimport { ICON_LOADING } from \"../../shared/constants\";\nimport { K, locales, NS, t } from \"./i18n\";\nimport projectIcon from \"./project@2x.png\";\nimport classNames from \"classnames\";\n\ninitializeI18n(NS, locales);\n\nexport interface NodeReplayProps {\n finished?: boolean;\n ui?: \"chat\" | \"canvas\";\n}\n\nexport function NodeReplay({ finished, ui }: NodeReplayProps) {\n const {\n conversationId,\n showCases,\n exampleProjects,\n skipToResults,\n watchAgain,\n tryItOut,\n } = useContext(TaskContext);\n\n return (\n <div\n className={classNames(styles[\"node-replay\"], {\n [styles.finished]: finished,\n [styles.chat]: ui === \"chat\",\n })}\n >\n <div className={styles.bar}>\n <div className={styles.label}>\n {finished ? t(K.CASE_REPLAY_FINISHED) : t(K.CASE_REPLAYING)}\n </div>\n <div className={styles.buttons}>\n {finished ? (\n <WrappedButton themeVariant=\"elevo\" onClick={watchAgain}>\n {t(K.WATCH_AGAIN)}\n </WrappedButton>\n ) : (\n <WrappedButton themeVariant=\"elevo\" onClick={skipToResults}>\n {t(K.SKIP_TO_RESULTS)}\n </WrappedButton>\n )}\n <WrappedButton type=\"primary\" themeVariant=\"elevo\" onClick={tryItOut}>\n {t(K.TRY_IT_OUT)}\n </WrappedButton>\n </div>\n </div>\n {finished && (\n <div className={styles.content}>\n {!showCases ||\n (showCases.length > 0 && (\n <>\n <div className={styles.heading}>{t(K.OTHER_CASES)}</div>\n {showCases ? (\n <ul className={styles.cases}>\n {showCases\n .filter((item) => item.conversationId !== conversationId)\n .slice(0, 3)\n .map((item) => (\n <li key={item.conversationId}>\n <WrappedShowCase\n caseTitle={item.title}\n summary={item.summary}\n url={item.url}\n />\n </li>\n ))}\n </ul>\n ) : (\n <WrappedIcon className={styles.loading} {...ICON_LOADING} />\n )}\n </>\n ))}\n {!exampleProjects ||\n (exampleProjects.length > 0 && (\n <>\n <div className={styles.heading}>\n {t(K.GET_STARTED_WITH_PROJECTS_PREFIX)}\n <span className={styles.tag}>{t(K.PROJECTS)}</span>\n {t(K.GET_STARTED_WITH_PROJECTS_SUFFIX)}\n </div>\n <div className={styles.tips}>{t(K.PROJECT_TIPS)}</div>\n {exampleProjects ? (\n <ul className={styles.projects}>\n {exampleProjects.slice(0, 2).map((item) => (\n <li key={item.instanceId}>\n <WrappedLink className={styles.project} url={item.url}>\n <img src={projectIcon} width={16} height={16} />\n {item.name}\n </WrappedLink>\n </li>\n ))}\n </ul>\n ) : (\n <WrappedIcon className={styles.loading} {...ICON_LOADING} />\n )}\n </>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"names":["useFulfilledActiveDetail","activeDetail","jobMap","flowMap","activityMap","useMemo","type","job","get","id","flow","activityWithFlow","activity","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","undefined","K","NS","t","i18n","getFixedT","ToolCallDetail","_ref","toolCall","progress","intermediateParts","responseParts","_job$messages","toolCallMessages","messages","filter","msg","role","message","part","parts","_part$data","data","push","hasProcessParts","length","hasResponseParts","toolState","includes","state","failed","isError","React","className","styles","detail","heading","ARGUMENTS","body","sharedStyles","markdown","PreComponent","content","originalArguments","maybeJson","fallbackAsMarkdown","PROCESS","map","partIndex","_part$data2","key","classNames","EnhancedMarkdown","JSON","stringify","ToolProgressLine","RESPONSE","_part$data3","text","_ref2","refinedContent","fallback","asMarkdown","json","parse","MarkdownPre","WrappedCodeBlock","source","language","themeVariant","initializeI18n","en","zh","___CSS_LOADER_EXPORT___","module","useHandleEscape","activeExpandedViewJobId","activeFile","activeImages","subActiveDetail","setActiveFile","setActiveImages","setActiveExpandedViewJobId","setActiveDetail","setSubActiveDetail","compositionRef","useRef","useEffect","onCompositionStart","current","onCompositionEnd","document","addEventListener","removeEventListener","onKeyDown","e","step","axis","line","dot","count","total","description","getToolDataProgress","progressPart","findLast","_message$parts","ToolCallStatus","_toolCall$annotations","variant","separateInstructions","useContext","TaskContext","toolTitle","annotations","title","name","jobTitle","instruction","hasToolCallResponse","some","readOnly","handleClick","useCallback","newActiveDetail","prev","isEqual","onClick","status","WrappedIcon","icon","lib","prefix","theme","spinning","startTime","timing","humanizeTime","HumanizeTimeFormat","accurate","endTime","moment","humanize","ss","ExpandedView","_manuallyUpdatedViews","_views$find","views","rootId","uniqueId","workspace","previewUrlTemplate","manuallyUpdatedViews","showFeedbackOnView","onFeedbackOnView","feedbackDoneViews","containerRef","rootRef","generatedView","find","v","view","feedbackDone","useViewFeedbackDone","viewId","has","setView","useState","canFeedback","from","viewsWithTitle","setViewsWithTitle","_generatedView$asyncC","ignore","asyncConstructedView","then","Promise","all","async","_view$entry","entry","defaultExport","result","container","portal","createPortal","root","unstable_createRoot","supportsUseChildren","unmount","remove","loading","setLoading","_rootRef$current","convertedView","convertView","expanded","withContexts","brick","context","functions","templates","render","error","console","handleClose","ref","nav","_view$title","active","buttons","WrappedIconButton","ICON_FEEDBACK","ICON_EXTERNAL_LINK","window","open","getBasePath","slice","parseTemplate","ICON_CLOSE","NS_LIBS_DATETIME","YESTERDAY","TODAY","FUTURE_AFTER","FORMAT_MEDIUM_DATETIME","FORMAT_MEDIUM_DATE","FORMAT_SHORT_DATETIME","FORMAT_SHORT_DATE","FORMAT_SHORT_DAY_DATETIME","FORMAT_SHORT_DAY_DATE","MONTHS","HOURS","SECONDS","MILL_SECONDS","DAYS","MINUTES","time","format","arguments","auto","Infinity","m","now","add","fFull","fMedium","fShort","fShort24","fDefault","full","default","relative","diff","past","Math","min","future","max","getAccurateTime","toFixed","_text","retVal","year","isBefore","clone","isSame","ChatBox","canChat","humanInput","onTerminate","supports","aiEmployees","commands","uploadOptions","terminating","setTerminating","handleTerminate","showDialog","CONFIRM_TO_TERMINATE_THE_TASK_TITLE","WrappedChatInput","placeholder","SEND_MESSAGE","autoFocus","submitDisabled","supportsTerminate","intercept","suggestionsPlacement","onChatSubmit","extra","useFlowAndActivityMap","serviceFlows","Map","taskId","set","stage","spec","serviceFlowActivities","checks","getChecks","label","IS_THE_TASK_PLAN_COMPLETE","value","group","IS_THE_TASK_PLAN_LOGICALLY_CORRECT","ARE_THE_TASK_PLAN_STEPS_CONCISE","ARE_THE_ANALYTICAL_CONCLUSIONS_ACCURATE","IS_THE_EVIDENCE_SUPPORTING_THE_CONCLUSIONS_SUFFICIENT","NodeFeedback","submittingFeedback","submittedFeedback","setShowFeedback","onSubmitFeedback","formRef","triedSubmit","setTriedSubmit","handleSubmit","_formRef$current","_formData$get","preventDefault","reportValidity","formData","FormData","plan","i","feedback","handleReset","_formRef$current2","reset","submitted","THANKS_FOR_YOUR_FEEDBACK","FEEDBACK_NODE_TITLE","form","validate","check","index","horizontal","radio","required","YES","NO","vertical","htmlFor","PROBLEM_FEEDBACK","PROBLEM_FEEDBACK_PLACEHOLDER","rows","submit","WrappedButton","RESET","shape","disabled","SUBMIT","NodeReplay","finished","ui","conversationId","showCases","exampleProjects","skipToResults","watchAgain","tryItOut","chat","bar","CASE_REPLAY_FINISHED","CASE_REPLAYING","WATCH_AGAIN","SKIP_TO_RESULTS","TRY_IT_OUT","OTHER_CASES","cases","item","WrappedShowCase","caseTitle","summary","url","_extends","ICON_LOADING","GET_STARTED_WITH_PROJECTS_PREFIX","tag","PROJECTS","GET_STARTED_WITH_PROJECTS_SUFFIX","tips","PROJECT_TIPS","projects","instanceId","WrappedLink","project","src","projectIcon","width","height"],"sourceRoot":""}