@mybricks/plugin-ai 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/dist/_virtual/_rollupPluginBabelHelpers.js +164 -0
  2. package/dist/_virtual/_rollupPluginBabelHelpers.js.map +1 -0
  3. package/dist/agents/app.js +335 -0
  4. package/dist/agents/app.js.map +1 -0
  5. package/dist/agents/common.js +483 -0
  6. package/dist/agents/common.js.map +1 -0
  7. package/dist/agents/custom.js +16 -0
  8. package/dist/agents/custom.js.map +1 -0
  9. package/dist/agents/index.js +38 -0
  10. package/dist/agents/index.js.map +1 -0
  11. package/dist/agents/knowledges/knowledge-base.js +579 -0
  12. package/dist/agents/knowledges/knowledge-base.js.map +1 -0
  13. package/dist/agents/knowledges/knowledge-node.js +228 -0
  14. package/dist/agents/knowledges/knowledge-node.js.map +1 -0
  15. package/dist/agents/knowledges/types.js +105 -0
  16. package/dist/agents/knowledges/types.js.map +1 -0
  17. package/dist/agents/utils/config.js +229 -0
  18. package/dist/agents/utils/config.js.map +1 -0
  19. package/dist/agents/workspace/coding-manager.js +20 -0
  20. package/dist/agents/workspace/coding-manager.js.map +1 -0
  21. package/dist/agents/workspace/components-manager.js +113 -0
  22. package/dist/agents/workspace/components-manager.js.map +1 -0
  23. package/dist/agents/workspace/outline-focus.js +167 -0
  24. package/dist/agents/workspace/outline-focus.js.map +1 -0
  25. package/dist/agents/workspace/outline-info.js +430 -0
  26. package/dist/agents/workspace/outline-info.js.map +1 -0
  27. package/dist/agents/workspace/page-tree-generator.js +70 -0
  28. package/dist/agents/workspace/page-tree-generator.js.map +1 -0
  29. package/dist/agents/workspace/workspace.js +251 -0
  30. package/dist/agents/workspace/workspace.js.map +1 -0
  31. package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js +100 -0
  32. package/dist/agents/workspace-by-knowledges/providers/component-docs-provider.js.map +1 -0
  33. package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js +120 -0
  34. package/dist/agents/workspace-by-knowledges/providers/focus-info-provider.js.map +1 -0
  35. package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js +146 -0
  36. package/dist/agents/workspace-by-knowledges/providers/project-info-provider.js.map +1 -0
  37. package/dist/agents/workspace-by-knowledges/test.js +242 -0
  38. package/dist/agents/workspace-by-knowledges/test.js.map +1 -0
  39. package/dist/agents/workspace-by-knowledges/utils/components-manager.js +132 -0
  40. package/dist/agents/workspace-by-knowledges/utils/components-manager.js.map +1 -0
  41. package/dist/agents/workspace-by-knowledges/utils/outline-focus.js +167 -0
  42. package/dist/agents/workspace-by-knowledges/utils/outline-focus.js.map +1 -0
  43. package/dist/agents/workspace-by-knowledges/utils/outline-info.js +430 -0
  44. package/dist/agents/workspace-by-knowledges/utils/outline-info.js.map +1 -0
  45. package/dist/agents/workspace-by-knowledges/workspace.js +169 -0
  46. package/dist/agents/workspace-by-knowledges/workspace.js.map +1 -0
  47. package/dist/api/cloud-components.js +85 -0
  48. package/dist/api/cloud-components.js.map +1 -0
  49. package/dist/api-record-replay/manager.js +168 -0
  50. package/dist/api-record-replay/manager.js.map +1 -0
  51. package/{src/api-record-replay/recorder.ts → dist/api-record-replay/recorder.js} +22 -32
  52. package/dist/api-record-replay/recorder.js.map +1 -0
  53. package/dist/api-record-replay/replayer.js +136 -0
  54. package/dist/api-record-replay/replayer.js.map +1 -0
  55. package/dist/components/attachments/index.js +124 -0
  56. package/dist/components/attachments/index.js.map +1 -0
  57. package/dist/components/attachments/index.less.js +8 -0
  58. package/dist/components/attachments/index.less.js.map +1 -0
  59. package/dist/components/icons/index.js +112 -0
  60. package/dist/components/icons/index.js.map +1 -0
  61. package/dist/components/icons/index.less.js +8 -0
  62. package/dist/components/icons/index.less.js.map +1 -0
  63. package/dist/components/mention/index.js +19 -0
  64. package/dist/components/mention/index.js.map +1 -0
  65. package/dist/components/mention/index.less.js +8 -0
  66. package/dist/components/mention/index.less.js.map +1 -0
  67. package/dist/components/messages/index.js +429 -0
  68. package/dist/components/messages/index.js.map +1 -0
  69. package/dist/components/messages/index.less.js +8 -0
  70. package/dist/components/messages/index.less.js.map +1 -0
  71. package/dist/components/sender/index.js +244 -0
  72. package/dist/components/sender/index.js.map +1 -0
  73. package/dist/components/sender/index.less.js +8 -0
  74. package/dist/components/sender/index.less.js.map +1 -0
  75. package/dist/context/RequestStatusTracker.js +44 -0
  76. package/dist/context/RequestStatusTracker.js.map +1 -0
  77. package/dist/context/index.js +45 -0
  78. package/dist/context/index.js.map +1 -0
  79. package/dist/data.js +4 -0
  80. package/dist/data.js.map +1 -0
  81. package/dist/index.js +306 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js +27 -0
  84. package/dist/plugin-ai/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
  85. package/dist/plugin-ai/package.json.js +8 -0
  86. package/dist/plugin-ai/package.json.js.map +1 -0
  87. package/dist/plugin-ai/test/index.js +206 -0
  88. package/dist/plugin-ai/test/index.js.map +1 -0
  89. package/dist/preset/createTemplates.js +29 -0
  90. package/dist/preset/createTemplates.js.map +1 -0
  91. package/dist/preset/index.js +13 -0
  92. package/dist/preset/index.js.map +1 -0
  93. package/dist/preset/prompts.js +34 -0
  94. package/dist/preset/prompts.js.map +1 -0
  95. package/{src/preset/user.ts → dist/preset/user.js} +4 -3
  96. package/dist/preset/user.js.map +1 -0
  97. package/dist/requestAsStream.js +269 -0
  98. package/dist/requestAsStream.js.map +1 -0
  99. package/dist/rxai/node_modules/idb/build/index.js +277 -0
  100. package/dist/rxai/node_modules/idb/build/index.js.map +1 -0
  101. package/dist/rxai/src/agent/base.js +16 -0
  102. package/dist/rxai/src/agent/base.js.map +1 -0
  103. package/dist/rxai/src/agent/planning.js +1076 -0
  104. package/dist/rxai/src/agent/planning.js.map +1 -0
  105. package/dist/rxai/src/agent/rxai.js +254 -0
  106. package/dist/rxai/src/agent/rxai.js.map +1 -0
  107. package/dist/rxai/src/error/base.js +39 -0
  108. package/dist/rxai/src/error/base.js.map +1 -0
  109. package/dist/rxai/src/prompt/base.js +11 -0
  110. package/dist/rxai/src/prompt/base.js.map +1 -0
  111. package/dist/rxai/src/prompt/planning.js +23 -0
  112. package/dist/rxai/src/prompt/planning.js.map +1 -0
  113. package/dist/rxai/src/prompt/tool.js +14 -0
  114. package/dist/rxai/src/prompt/tool.js.map +1 -0
  115. package/dist/rxai/src/request/request.js +123 -0
  116. package/dist/rxai/src/request/request.js.map +1 -0
  117. package/dist/rxai/src/tool/getHistoryRecords.js +65 -0
  118. package/dist/rxai/src/tool/getHistoryRecords.js.map +1 -0
  119. package/dist/rxai/src/tool/util.js +424 -0
  120. package/dist/rxai/src/tool/util.js.map +1 -0
  121. package/dist/rxai/src/utils/events.js +43 -0
  122. package/dist/rxai/src/utils/events.js.map +1 -0
  123. package/dist/rxai/src/utils/idb.js +240 -0
  124. package/dist/rxai/src/utils/idb.js.map +1 -0
  125. package/dist/rxai/src/utils/retry.js +32 -0
  126. package/dist/rxai/src/utils/retry.js.map +1 -0
  127. package/dist/rxai/src/utils/uuid.js +7 -0
  128. package/dist/rxai/src/utils/uuid.js.map +1 -0
  129. package/dist/startView/components/header/header.js +12 -0
  130. package/dist/startView/components/header/header.js.map +1 -0
  131. package/dist/startView/components/header/header.less.js +8 -0
  132. package/dist/startView/components/header/header.less.js.map +1 -0
  133. package/dist/startView/index.js +62 -0
  134. package/dist/startView/index.js.map +1 -0
  135. package/dist/startView/index.less.js +8 -0
  136. package/dist/startView/index.less.js.map +1 -0
  137. package/dist/tools/analyze-and-expand-prd.js +116 -0
  138. package/dist/tools/analyze-and-expand-prd.js.map +1 -0
  139. package/dist/tools/analyze-requirement-and-components.js +208 -0
  140. package/dist/tools/analyze-requirement-and-components.js.map +1 -0
  141. package/dist/tools/answer.js +33 -0
  142. package/dist/tools/answer.js.map +1 -0
  143. package/dist/tools/build-process.js +550 -0
  144. package/dist/tools/build-process.js.map +1 -0
  145. package/dist/tools/coding-subagent-as-tool.js +101 -0
  146. package/dist/tools/coding-subagent-as-tool.js.map +1 -0
  147. package/dist/tools/generate-ui-content.js +528 -0
  148. package/dist/tools/generate-ui-content.js.map +1 -0
  149. package/dist/tools/index.js +31 -0
  150. package/dist/tools/index.js.map +1 -0
  151. package/dist/tools/open-dsl.js +49 -0
  152. package/dist/tools/open-dsl.js.map +1 -0
  153. package/dist/tools/refactor-ui-content.js +292 -0
  154. package/dist/tools/refactor-ui-content.js.map +1 -0
  155. package/dist/tools/utils.js +832 -0
  156. package/dist/tools/utils.js.map +1 -0
  157. package/dist/types/index.js +8 -0
  158. package/dist/types/index.js.map +1 -0
  159. package/dist/view/components/header/header.js +59 -0
  160. package/dist/view/components/header/header.js.map +1 -0
  161. package/dist/view/components/header/header.less.js +8 -0
  162. package/dist/view/components/header/header.less.js.map +1 -0
  163. package/dist/view/index.js +184 -0
  164. package/dist/view/index.js.map +1 -0
  165. package/dist/view/index.less.js +8 -0
  166. package/dist/view/index.less.js.map +1 -0
  167. package/package.json +28 -6
  168. package/src/agents/app.ts +0 -301
  169. package/src/agents/common.ts +0 -471
  170. package/src/agents/custom.ts +0 -14
  171. package/src/agents/index.ts +0 -37
  172. package/src/agents/knowledges/README.md +0 -614
  173. package/src/agents/knowledges/SUMMARY.md +0 -527
  174. package/src/agents/knowledges/index.ts +0 -8
  175. package/src/agents/knowledges/knowledge-base.ts +0 -565
  176. package/src/agents/knowledges/knowledge-node.ts +0 -266
  177. package/src/agents/knowledges/types.ts +0 -208
  178. package/src/agents/utils/config.ts +0 -427
  179. package/src/agents/workspace/coding-manager.ts +0 -31
  180. package/src/agents/workspace/components-manager.ts +0 -124
  181. package/src/agents/workspace/outline-focus.ts +0 -188
  182. package/src/agents/workspace/outline-info.ts +0 -520
  183. package/src/agents/workspace/page-tree-generator.ts +0 -83
  184. package/src/agents/workspace/workspace.ts +0 -319
  185. package/src/agents/workspace-by-knowledges/MIGRATION.md +0 -568
  186. package/src/agents/workspace-by-knowledges/README.md +0 -521
  187. package/src/agents/workspace-by-knowledges/index.ts +0 -11
  188. package/src/agents/workspace-by-knowledges/providers/component-docs-provider.ts +0 -92
  189. package/src/agents/workspace-by-knowledges/providers/focus-info-provider.ts +0 -131
  190. package/src/agents/workspace-by-knowledges/providers/index.ts +0 -8
  191. package/src/agents/workspace-by-knowledges/providers/project-info-provider.ts +0 -151
  192. package/src/agents/workspace-by-knowledges/test.ts +0 -240
  193. package/src/agents/workspace-by-knowledges/types.ts +0 -56
  194. package/src/agents/workspace-by-knowledges/utils/components-manager.ts +0 -145
  195. package/src/agents/workspace-by-knowledges/utils/index.ts +0 -8
  196. package/src/agents/workspace-by-knowledges/utils/outline-focus.ts +0 -178
  197. package/src/agents/workspace-by-knowledges/utils/outline-info.ts +0 -521
  198. package/src/agents/workspace-by-knowledges/workspace.ts +0 -166
  199. package/src/api/cloud-components.ts +0 -129
  200. package/src/api-record-replay/README.md +0 -187
  201. package/src/api-record-replay/index.ts +0 -11
  202. package/src/api-record-replay/manager.ts +0 -168
  203. package/src/api-record-replay/replayer.ts +0 -148
  204. package/src/components/attachments/index.less +0 -117
  205. package/src/components/attachments/index.tsx +0 -136
  206. package/src/components/icons/index.less +0 -8
  207. package/src/components/icons/index.tsx +0 -44
  208. package/src/components/index.less +0 -34
  209. package/src/components/mention/index.less +0 -23
  210. package/src/components/mention/index.tsx +0 -19
  211. package/src/components/messages/index.less +0 -1013
  212. package/src/components/messages/index.tsx +0 -519
  213. package/src/components/sender/index.less +0 -203
  214. package/src/components/sender/index.tsx +0 -298
  215. package/src/components/types.ts +0 -31
  216. package/src/constants/index.ts +0 -8
  217. package/src/context/RequestStatusTracker.ts +0 -50
  218. package/src/context/index.ts +0 -83
  219. package/src/data.ts +0 -5
  220. package/src/global.d.ts +0 -100
  221. package/src/index.tsx +0 -264
  222. package/src/mock.ts +0 -1267
  223. package/src/preset/agents.ts +0 -380
  224. package/src/preset/createTemplates.ts +0 -25
  225. package/src/preset/index.ts +0 -12
  226. package/src/preset/prompts.ts +0 -235
  227. package/src/preset/requestAsStream.ts +0 -246
  228. package/src/startView/components/header/header.less +0 -17
  229. package/src/startView/components/header/header.tsx +0 -15
  230. package/src/startView/components/index.ts +0 -1
  231. package/src/startView/index.less +0 -34
  232. package/src/startView/index.tsx +0 -61
  233. package/src/tools/analyze-and-expand-prd.ts +0 -272
  234. package/src/tools/analyze-requirement-and-components.ts +0 -589
  235. package/src/tools/answer.ts +0 -59
  236. package/src/tools/build-process.ts +0 -1174
  237. package/src/tools/coding-subagent-as-tool.ts +0 -119
  238. package/src/tools/generate-ui-content.ts +0 -1083
  239. package/src/tools/index.ts +0 -28
  240. package/src/tools/open-dsl.ts +0 -69
  241. package/src/tools/refactor-ui-content.ts +0 -801
  242. package/src/tools/type.d.ts +0 -12
  243. package/src/tools/utils.ts +0 -914
  244. package/src/types/index.ts +0 -4
  245. package/src/view/components/header/header.less +0 -51
  246. package/src/view/components/header/header.tsx +0 -60
  247. package/src/view/components/index.ts +0 -1
  248. package/src/view/index.less +0 -5
  249. package/src/view/index.tsx +0 -168
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-ui-content.js","sources":["../../src/tools/generate-ui-content.ts"],"sourcesContent":["import { fileFormat } from '@mybricks/rxai'\nimport { getFiles, createActionsParser, getComponentOperationSummary, stripFileBlocks, createVarActionsParser, PromiseStack, ComIdTransform, uuid } from './utils'\nimport { context } from \"../context\";\nimport { ComponentsManager } from \"../agents/workspace/components-manager\";\n\ninterface GenerateUiContentParams {\n /** 当前根组件信息 */\n getRootComponentDoc: () => string;\n getTargetId: () => string;\n getRootIdByPageId: (id: string) => string | undefined;\n componentIdToTitleMap: Map<string, string>;\n /** 应用特殊上下文信息 */\n appendPrompt?: string;\n /** 返回示例 */\n fewShots?: string;\n /** 当所有actions返回时 */\n onActions: (actions: any[], status: string) => void\n onAddCodingBlock: (com: any) => void;\n /** 清空当前画布信息 */\n onClearPage: () => void\n}\n\nconst NAME = 'clear-and-generate-canvas'\ngenerateUiContent.toolName = NAME;\n\nclass UITree {\n nodeMap = new Map();\n comIdToNamespace = new Map();\n comIdTransform = new ComIdTransform([]);\n varIdTransform = new ComIdTransform([]);\n \n getComId(comId: string) {\n return this.comIdTransform.getComId(comId);\n }\n\n addNode(node: any) {\n const { id, parent } = node;\n const namespace = this.comIdToNamespace.get(parent.id);\n let scope = false\n if (namespace) {\n const component = ComponentsManager.getAiComponent(namespace);\n if (component?.all?.slots?.find((slot: any) => slot.id === parent.slotId)?.type === \"scope\") {\n scope = true;\n }\n }\n this.nodeMap.set(id, {\n id,\n parent: {\n ...parent,\n scope\n }\n });\n }\n\n getScope(nodeId: any) {\n let node = this.nodeMap.get(nodeId);\n while (node) {\n if (node.parent.id === \"_root_\") {\n return node.parent;\n }\n if (node.parent.scope) {\n return node.parent;\n }\n\n node = this.nodeMap.get(node.parent.id);\n }\n }\n\n setNamespace(comId: string, namespace: string) {\n this.comIdToNamespace.set(comId, namespace);\n }\n}\n\nexport default function generateUiContent(config: GenerateUiContentParams): any {\n const streamActionsParser = createActionsParser({ enabledActionTags: context.enabledActionTags });\n const excuteActionsParser = createActionsParser({ enabledActionTags: context.enabledActionTags });\n\n const streamVarActionsParser = createVarActionsParser();\n\n const pageId = config?.getTargetId();\n const rootId = config?.getRootIdByPageId(pageId);\n\n let fileNameToContent: Record<string, string> = {};\n let displayContent = \"\";\n\n const diagrams: Record<string, string> = {};\n const promiseStack = new PromiseStack();\n const uiTree = new UITree();\n\n return {\n name: NAME,\n displayName: \"生成搭建内容\",\n description: `根据需求/附件图片,一次性搭建并生成符合需求的 MyBricks UI内容。\n参数:无\n工具分类:操作执行类;\n作用:清空之前的画布内容,在当前画布中生成一个完整的UI内容;\n要求:需要聚焦到一个具体的画布上;\n前置依赖:必须确保前一个工具执行过「需求整理和组件选型」,用于获取组件文档,否则无法生成;\n`,\n aiRole: \"expert\",\n getPrompts(params) {\n return `<工具总览>\n 你是一个生成 MyBricks UI区域的工具,你作为MyBricks的资深搭建助手及客服专家,经验丰富、实事求是、逻辑严谨。\n <任务目标>\n 你的任务是通过两段 actions 序列完成用户的目标。\n 1. 搭建UI的 actions 序列。\n 2. 搭建初始化数据的 actions 序列。\n </任务目标>\n</工具总览>\n\n<特别注意>\n - 如果附件中有图片,需要在搭建过程中作为重要的参考,要注意分辨设计稿(或者截图)或者用户绘制的线框图,对于前者、要求最大程度还原图片中的各项功能要素与视觉设计要素,总体要求考虑到功能一致完整与合理性、注意外观视觉美观大方、富有现代感.\n</特别注意>\n\n<当前画布根组件信息>\n${config.getRootComponentDoc()}\n\nIMPORTANT: 生成UI的根组件ID必须使用此文档信息。\n</当前画布根组件信息>\n\n<如何搭建UI以及修改>\n 通过一系列的action来分步骤实现用户需求。\n \n ${fileFormat({\n content: `[comId, target, type, params]`,\n fileName: '操作步骤.json'\n })}\n\n <关于actions>\n actions.json文件由多个action构成,每个 action 在结构上都严格遵循以下格式:[comId, target, type, params];\n - comId 代表要操作的目标组件的id;\n - target 指的是组件的整体或某个部分,以选择器的形式表示,注意当type=addChild时,target为插槽id;\n - type action的类型,包括了 setLayout、doConfig、addChild、delete 几类动作;\n - params 为不同type类型对应的参数;\n \n 综合而言,每个action的语义是:对某个组件(comId)的整体或某个部分(target),执行某个动作(type),并传入参数(params)。\n \n 注意:\n - 在返回多个步骤时,务必注意其逻辑顺序,例如有些action需要先完成,后续的action(可能受控于ifVisible,只有ifVislble返回true才能使用)才能进行;\n - 有些修改需要先完成整体、再进行局部的修改;\n \n 各action详细说明如下:\n \n <setLayout>\n - 设置组件的布局和尺寸信息,params的格式以Typescript的形式说明如下:\n \n \\`\\`\\`typescript\n /**\n * 宽高尺寸\n * number - 具体的px值\n * fit-content - 适应内容\n * 100% - 填充,仅允许100%,不允许其他百分比宽度\n * auto - 自动填充,等同于flex=1\n * 只能是三者其一,明确不允许使用其他属性,比如calc等方法\n */\n type Size = number | \"fit-content\" | \"100%\" | \"auto\"\n \n /** flex中子组件定位,可配置如下layout */\n type setLayout_flex_params = {\n width?: Size;\n height?: Size;\n /** 上外边距 */\n marginTop?: number;\n /** 右外边距 */\n marginRight?: number;\n /** 下外边距 */\n marginBottom?: number;\n /** 左外边距 */\n marginLeft?: number;\n }\n \\`\\`\\`\n \n 注意:\n - 1. 只有在flex布局中的组件,可以在layout中使用margin相关配置;\n\n \\`\\`\\`typescript\n /** 对于flex布局的插槽,我们可以添加absolute定位的组件 */\n type setLayout_absolute_params = {\n position: 'absolute';\n width?: Size;\n height?: Size;\n /** 距离左侧 */\n left?: number;\n /** 距离右侧 */\n right?: number;\n /** 距离上方 */\n top?: number;\n /** 距离下方 */\n bottom?: number;\n }\n \\`\\`\\`\n \n \\`\\`\\`typescript\n /** 如果组件本身是fixed类型定位,可配置如下layout */\n type setLayout_fixed_params = {\n position: 'fixed';\n width?: Size;\n height?: Size;\n /** 距离左侧 */\n left?: number;\n /** 距离右侧 */\n right?: number;\n /** 距离上方 */\n top?: number;\n /** 距离下方 */\n bottom?: number;\n }\n \\`\\`\\`\n \n 例如,当用户要求将当前组件的宽度设置为200px,可以返回以下内容:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"setLayout\",{\"width\":200}]`,\n fileName: '样式配置步骤.json'\n })}\n \n 注意:当需要修改布局和尺寸信息时,仅返回用户要求的内容即可,无需返回所有的布局和尺寸信息属性。\n </setLayout>\n \n <doConfig>\n - 配置组件,使用<组件可配置的内容/>的配置项,对组件的属性或样式进行配置;\n - 如果配置项的type在 <常见editType的使用 /> 中有说明,务必遵守其中的说明及注意事项;\n \n - params的格式以Typescript的形式说明如下:\n \n \\`\\`\\`typescript\n //配置样式\n type configStyle_params = {\n path:string,//在<当前组件可配置的内容/>中对应的配置项path\n style: {\n [key: string]: propertyValue; //元素的内联样式对象,仅能配置style编辑器description中声明的属性,不要超出范围。\n }\n }\n \n //配置属性\n type configProperty_params = {\n path:string,//在<当前组件可配置的内容/>中对应的配置项path\n value: any//需要配置的value\n }\n \\`\\`\\`\n \n 例如:\n - 属性的配置:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"doConfig\",{\"path\":\"常规/标题\",\"value\":\"标题内容\"}]`,\n fileName: '样式配置步骤.json'\n })}\n \n - 样式的配置:\n ${fileFormat({\n content: `[\"u_ou1rs\",\":root\",\"doConfig\",{\"path\":\"常规/banner样式\",\"style\":{\"backgroundColor\":\"red\"}}]`,\n fileName: '样式配置步骤.json'\n })}\n \n 注意:\n - 当需要修改组件的样式时,只允许修改style编辑器description中声明的属性;\n - 当需要修改组件的样式时,背景统一使用background,而非backgroundColor等属性;\n </doConfig>\n \n <addChild>\n - addChild代表向目标组件的插槽中添加UI组件,需要满足两个条件:\n 1. 目标组件中目前有定义插槽,且已知插槽的id是什么;\n 2. 被添加的组件只能使用 <允许添加的组件/> 中声明的*UI组件*;\n - params的格式以Typescript的形式说明如下:\n \n \\`\\`\\`typescript\n type add_params = {\n title:string //被添加组件的标题\n ns:string //在 <允许添加的组件 /> 中声明的UI组件namespace\n comId:string // 新添加的组件5位uuid,禁止重复,在所有UI组件中唯一\n layout?: setLayout_flex_params | setLayout_fixed_params | setLayout_absolute_params //可选,添加组件时可以指定位置和尺寸信息\n configs?: Array<configStyle_params | configProperty_params> // 添加组件可以配置的信息\n // 渲染优化\n ignore?: boolean //可选,是否添加ignore标记\n enhance?: boolean //可选,是否添加enhance标记\n }\n \\`\\`\\`\n \n 例如:\n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"添加的文本组件\",\"ns\":\"namespace占位\",\"comId\":\"u_iysd7\"}]`,\n fileName: '添加文本组件步骤.json'\n })}\n\n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"背景图\",\"ns\":\"namespace占位\",\"comId\":\"u_ko4sn\",\"layout\":{\"width\":\"100%\",\"height\":200,\"marginTop\":8,\"marginLeft\":12,\"marginRight\":12},\"configs\":[{\"path\":\"常规/图片地址\",\"value\":\"https://ai.mybricks.world/image-search?term=风景\"},{\"path\":\"样式/图片\",\"style\":{\"borderRadius\":\"8px\"}}]}]`,\n fileName: '添加带配置属性的步骤.json'\n })}\n \n ${fileFormat({\n content: `[\"u_ou1rs\",\"content\",\"addChild\",{\"title\":\"添加的布局组件\",\"ns\":\"namespace占位\",\"comId\":\"u_nb5yg\",\"ignore\": true}]`,\n fileName: '添加带ignore标记的步骤.json'\n })}\n \n 注意:\n - 新添加的组件ID必须使用5位唯一的字母数字组合,禁止重复,在所有UI组件中唯一;\n </addChild>\n\n <delete>\n - 删除组件\n\n 例如,当用户要求删除组件u_o21rs,可以返回以下内容:\n ${fileFormat({\n content: `[\"u_o21rs\",\":root\",\"delete\"]`,\n fileName: '删除组件整体.json'\n })}\n 注意:删除时,必须删除组件的整体,不能删除组件的某个部分,所以使用:root选择器。\n </delete>\n \n 注意:actions文件每一行遵循 JSON 语法,禁止非法代码,禁止出现内容省略提示、单行注释、省略字符。\n - actions返回的内容格式需要一行一个action,每一个action需要压缩,不要包含缩进等多余的空白字符;\n - 禁止包含任何注释(包括单行//和多行/* */)\n - 禁止出现省略号(...)或任何占位符\n - 确保所有代码都是完整可执行的,不包含示例片段\n - 禁止使用{}、{{}}这类变量绑定语法,并不支持此语法\n - 禁止使用非法字符或特殊符号\n - 所有内容均为静态数据,禁止解构,禁止使用变量\n \n 注意:\n - 返回actions文件内容时,务必注意操作步骤的先后顺序;\n - 有些操作需要在前面操作完成后才能进行;\n - 有些操作需要在其他操作开启(布尔类型的配置项)后才能进行;\n - 禁止重复使用相同的action;\n </关于actions>\n\n <UI搭建原则>\n 界面只有两类基本要素:组件、以及组件的插槽,组件的插槽可以嵌套其他组件。\n\n 搭建只能使用「UI组件」,不可使用「逻辑计算组件」。\n \n <组件的定位原则>\n 组件的定位有三种方式:flex定位、fixed、absolute定位。\n\n **flex定位**\n - 组件会相对于所在的插槽进行定位;\n - 通过尺寸(width、height) + 外间距(margin)来进行定位;\n - flex布局下的组件不允许使用left、top、right、bottom等定位属性;\n \n **fixed定位**\n - 组件会相对于当前组件的插槽进行定位,且脱离文档流;\n - 通过尺寸(width、height) + 位置(left、top、right、bottom)来进行定位;\n - fixed定位的组件不允许使用margin;\n \n 使用fixed定位的例子:\n ${fileFormat({\n content: `[\"_root_\",\"_rootSlot_\",\"addChild\",{\"title\":\"添加一个固定定位组件\",\"comId\":\"u_fu3nr\",\"ns\":\"组件\",\"layout\":{\"position\":\"fixed\",\"width\":\"100%\",\"height\":84,\"bottom\":0,\"left\":0},\"configs\":[]}]`,\n fileName: '添加一个fixed定位组件.json'\n })}\n\n 在插槽的不同布局下,组件的定位由所在插槽的布局方式决定:\n - 在当前组件的插槽中,可以添加fixed定位的组件,禁止在其他插槽中添加fixed定位的组件;\n - 如果插槽是flex布局,则子组件主要使用flex定位,特殊情况下使用absolute定位;\n </组件的定位原则>\n \n <布局原则>\n 插槽的布局(display=flex)指的是对于内部组件(仅对其直接子组件,对于子组件插槽中的子组件无影响)的布局约束:\n \n **flex布局**\n (基本等同于CSS3规范中的flex布局)插槽中的所有子组件通过宽高和margin进行布局。\n\n <辅助标记说明>\n 在 addChild 操作中,可以通过对布局类组件添加辅助标记来指导最终的渲染和布局行为。这些标记是可选的,但合理使用可以极大提升UI的性能和美观度。目前支持以下标记:\n 1. ignore(结构优化标记)\n 作用:当一个容器(通常是布局组件)只用于排列其内部元素(如分栏、对齐),而本身不需要任何可见样式(无背景、无边框、无圆角)且不响应交互(如点击)时,可以添加 ignore=true 标记。系统在最终渲染时,可以将这个布局容器优化掉,减少不必要的嵌套层级。\n 决策流程:(从上往下执行)\n - 检查父级:父组件是根组件 _root_ 吗?是,则 ignore=false;\n - 检查父级:父级是否为布局容器?不是,则 ignore=false;\n - 检查当前组件属性:组件本身是否配置了样式(背景色、边框、圆角、内间距等)?是,则 ignore=false;\n - 猜测当前组件意图:组件是否可能作为整体被点击(如一个卡片)?是,则 ignore=false;\n - 检查当前组件插槽:组件是否存在非flex布局的插槽?是,则 ignore=false;\n - 否则(即:它只是一个纯粹的透明容器,仅用于 flex 布局,且父级也是布局容器),ignore=true。\n\n 2. enhance(布局优化标记)\n 作用:当一个flex容器(通常是布局组件)需要进行布局优化时,即从flex布局优化成自由布局,可以添加 enhance=true 标记。\n 决策流程:(从上往下执行)\n - 检查当前组件属性:组件是否配置了 ignore=true?是,则 enhance=false;\n - 检查当前组件插槽:组件是否不存在flex布局的插槽?是,则 enhance=false;\n - 最后检查是否属于图文信息排列展示容器,且配置了flex布局?是,则 enhance=true。\n\n 例子:第一个布局组件仅承担布局功能,可以添加ignore标记;第二个布局组件承担样式功能,不能添加ignore标记,第二个组件里添加了一个居中的文本,判断为信息卡片,添加enhance标记。\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"第一个布局\",\"comId\":\"u_dk98v\",\"ignore\":true,\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"第二个布局\",\"comId\":\"u_sdj3k\",\"enhance\":true,\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}},{\"path\":\"样式/样式\",\"style\":{\"background\":\"#FFFFFF\"}}]}]\n [\"u_sdj3k\",\"插槽id占位\",\"addChild\",{\"title\":\"文本\",\"comId\":\"u_tn5ix\",\"ns\":\"组件\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"常规/文本内容\",\"value\":\"居中文本\"}]}]\n `,\n fileName: '标记使用.json'\n })}\n </辅助标记说明>\n \n <布局使用示例>\n **flex布局**\n 子组件通过嵌套来搭建,无需考虑子组件的宽度和高度。\n\n 下面的例子使用flex实现左侧固定宽度,右侧自适应宽度布局,右侧宽度配置width=auto:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex0\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"u_flex0\",\"插槽id占位\",\"addChild\",{\"title\":\"左侧固定宽度组件\",\"comId\":\"u_lf4x1\",\"ns\":\"组件\",\"layout\":{\"width\":60,\"height\":40,\"marginRight\":8},\"configs\":[]}]\n [\"u_flex0\",\"插槽id占位\",\"addChild\",{\"title\":\"右侧自适应组件\",\"comId\":\"u_rfo1x\",\"ns\":\"组件\",\"layout\":{\"width\":\"auto\",\"height\":40},\"configs\":[]}]\n `,\n fileName: '左侧固定宽度+右侧自适应宽度.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明,关注justifyContent效果,默认为flex-start;\n - 左侧组件使用固定宽度,右侧组件使用width=auto(效果等同于flex=1)实现自适应宽度;\n - 通过marginRight配置左侧组件与右侧组件的间距;\n \n \n 下面的例子使用flex进行嵌套,来实现左侧图标+文本,右侧箭头的布局:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex1\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex1\",\"插槽id占位\",\"addChild\",{\"title\":\"左侧布局组件\",\"comId\":\"u_pl92s\",\"ignore\": true,\"ns\":\"布局组件\",\"layout\":{\"width\":\"fit-content\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\", \"justifyContent\": \"flex-start\"}}]}]\n [\"u_pl92s\",\"插槽id占位\",\"addChild\",{\"title\":\"图标组件\",\"comId\":\"u_i98js\",\"ns\":\"图标组件\",\"layout\":{\"width\":24,\"height\":24,\"marginRight\":8},\"configs\":[]}]\n [\"u_pl92s\",\"插槽id占位\",\"addChild\",{\"title\":\"文本组件\",\"comId\":\"u_tsdo2\",\"ns\":\"文本组件\",\"layout\":{\"width\":\"100%\",\"height\":\"fit-content\"},\"configs\":[]}]\n [\"u_flex1\",\"插槽id占位\",\"addChild\",{\"title\":\"箭头图标组件\",\"comId\":\"u_ar762\",\"ns\":\"图标组件\",\"layout\":{\"width\":24,\"height\":24},\"configs\":[]}]\n `,\n fileName: 'flex嵌套实现左右布局.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 使用嵌套布局来完成左侧多元素 + 右侧单元素的布局,默认justifyContent=flex-start,所以左侧布局无需设置;\n - 左侧的图标+文本使用嵌套布局实现,且添加ignore标记,表示仅承担布局功能;\n\n 下面的例子使用flex实现垂直居中布局:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex2\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\"}}]}]\n [\"u_flex2\",\"插槽id占位\",\"addChild\",{\"title\":\"子组件\",\"comId\":\"u_child\",\"ns\":\"组件\",\"layout\":{\"width\":80,\"height\":80},\"configs\":[]}]\n `,\n fileName: '垂直居中布局.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection声明成column;\n - 通过alignItems来实现子组件的垂直居中; \n \n 下面的例子使用flex进行横向左右均分布局,实现各占一半的效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex3\",\"ignore\": true,\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex3\",\"插槽id占位\",\"addChild\",{\"title\":\"A组件\",\"comId\":\"u_a321s\",\"ns\":\"组件\",\"layout\":{\"width\":\"auto\",\"height\":40,\"marginRight\":8},\"configs\":[]}]\n [\"u_flex3\",\"插槽id占位\",\"addChild\",{\"title\":\"B组件\",\"comId\":\"u_b321s\",\"ns\":\"组件\",\"layout\":{\"width\":\"auto\",\"height\":40},\"configs\":[]}]\n `,\n fileName: '左右各占一半布局.json'\n })}\n 在上例中:\n - 为了实现各占一半,配置A组件和B组件的宽度都为自适应auto(效果等同于flex=1),实现各占一半的效果;\n - 注意:不允许配置百分比宽度;\n - 判断仅布局,添加ignore标记,优化搭建内容。\n - 通过marginRight配置左侧组件与右侧组件的间距;\n\n 下面的例子使用flex进行横向均分或等分布局,实现一行N列的效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex4\",\"ignore\": true,\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":120},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"justifyContent\":\"space-between\",\"alignItems\":\"center\"}}]}]\n [\"u_flex4\",\"插槽id占位\",\"addChild\",{\"title\":\"A组件\",\"comId\":\"u_aksi\",\"ns\":\"组件\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n [\"u_flex4\",\"插槽id占位\",\"addChild\",{\"title\":\"B组件\",\"comId\":\"u_b293e\",\"ns\":\"组件\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n [\"u_flex4\",\"插槽id占位\",\"addChild\",{\"title\":\"C组件\",\"comId\":\"u_csim2\",\"ns\":\"组件\",\"layout\":{\"width\":40,\"height\":40},\"configs\":[]}]\n `,\n fileName: '一行N列布局.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 针对内容元素的尺寸,配置合理的高度,防止内容溢出;\n - 为了实现均分,保证卡片之间存在间距,配置卡片宽度和高度都为固定值\n - 注意:不允许配置百分比宽度;\n - 判断仅布局,添加ignore标记,优化搭建内容。\n \n 下面的例子展示flex布局中负margin的妙用,通过负margin实现背景层+内容层重叠的效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex6\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":\"fit-content\"},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"column\"}}]}]\n [\"u_flex6\",\"插槽id占位\",\"addChild\",{\"title\":\"背景层\",\"comId\":\"u_asds6\",\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":60},\"configs\":[]}]\n [\"u_flex6\",\"插槽id占位\",\"addChild\",{\"title\":\"内容层\",\"comId\":\"u_csdt6\",\"ns\":\"组件\",\"layout\":{\"width\":\"100%\",\"height\":100, \"marginTop\": -30},\"configs\":[]}]\n `,\n fileName: '负margin实现背景层+内容层重叠.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 通过负margin实现背景层+内容层重叠的效果;\n\n 特殊地,在flex布局中的元素还可以配置position=absolute,用于实现绝对定位效果:\n ${fileFormat({\n content: `[\"目标组件id\",\"插槽id占位\",\"addChild\",{\"title\":\"添加一个布局组件\",\"comId\":\"u_flex5\",\"ns\":\"布局组件\",\"layout\":{\"width\":\"100%\",\"height\":200},\"configs\":[{\"path\":\"常规/布局\",\"value\":{\"display\":\"flex\",\"flexDirection\":\"row\",\"alignItems\":\"center\"}}]}]\n [\"u_flex5\",\"插槽id占位\",\"addChild\",{\"title\":\"绝对定位组件\",\"comId\":\"u_abs12\",\"ns\":\"组件\",\"layout\":{\"position\":\"absolute\",\"width\":100,\"height\":40,\"top\":20,\"left\":20},\"configs\":[]}]\n [\"u_flex5\",\"插槽id占位\",\"addChild\",{\"title\":\"普通组件\",\"comId\":\"u_nor12\",\"ns\":\"组件\",\"layout\":{\"width\":80,\"height\":80},\"configs\":[]}]\n `,\n fileName: '绝对定位效果.json'\n })}\n 在上例中:\n - 声明布局编辑器的值,注意布局编辑器必须声明,其中flexDirection也必须声明;\n - 通过layout中的属性,设置成绝对定位效果,在一些特殊的角标等场景下很有效果;\n \n </布局使用示例>\n\n <布局注意事项>\n - 布局相关组件在添加时必须配置布局编辑器的值,尤其需要配置flexDirection和justifyContent;\n - 对于flexDirection,必须配置,仅允许配置row或column;\n - 优先考虑fit-content,如果要使用固定宽高,必须考虑到固定宽高会不会溢出导出布局错乱的问题;\n <布局注意事项>\n \n </布局原则>\n \n <最佳实践>\n 1.永远保证UI的美观以及和谐统一,在基础组件的使用上遵循美观统一原则;\n 2.在搭建开始前,我们建议对每个组件进行全面评估,特别是思考是否需要 <辅助标记 />,这能极大提升后续维护性;\n\n <关于美观>\n 组件使用:\n - 对于文本:注意保持视觉的统一性,选用合适的文本大小粗细,同时尽量配置文本省略,防止文本换行导致效果不佳。\n - 对于图标:为了保证视觉的统一与专业性,我们的共识是统一使用图标组件。请避免使用 Emoji 或特殊字符,它们可能导致在不同设备上的显示差异。\n - 对于图片:图片是传递信息与氛围的关键。我们建议根据其用途选择合适的来源:\n - https://placehold.co/600x400/orange/ffffff?text=hello,可以配置一个橙色背景带白色hello文字的色块占位图片;\n - https://ai.mybricks.world/image-search?term=搜索词&w=宽&h=高,可以配置一个高质量的摄影图片;\n 对于海报/写实图片:我们建议使用高质量的摄影图片;\n 对于品牌/Logo:我们建议使用色块占位图片;\n 对于插画/装饰性图形:我们优先推荐使用图标来点缀;如果确实需要图片,也可以使用色块占位图片,防止摄影图片过于跳脱;\n 布局使用:一个组件的位置、尺寸、margin,永远需要参考其父容器。时刻牢记这一点,可以从根本上解决绝大多数的重叠与溢出问题。\n 占位使用:如果某个区域当前无法实现,我们推荐使用一个与整体风格协调的「卡片+文本」作为占位符,并简要说明。这既保证了界面的完整性,也为后续开发留下了线索。\n </关于美观>\n\n <选用组件>\n 对于重复性元素:当遇到相似元素重复出现时,我们的判断标准是:\n 若内容是动态的(如用户列表),应选用列表类组件。\n 若内容是静态的(如功能入口),布局组件(N行M列)是更高效的选择\n </选用组件>\n </最佳实践>\n </UI搭建原则>\n</如何搭建UI以及修改>\n\n<如何搭建初始化数据以及修改>\n通过一系列的action来分步骤实现初始化数据需求。\n初始化数据,需要通过创建变量,通过变量的值更新事件调用UI组件的输入,或者绑定UI组件的配置项实现。\n\n${fileFormat({\n content: `[actionType,params]`,\n fileName: '初始化数据操作步骤.json'\n})}\n\n <关于作用域插槽的说明>\n 在组件说明的<slots>内标记了\"作用域插槽\"的插槽。\n 禁止跨作用域的<connect>。\n </关于作用域插槽的说明>\n\n <作用域插槽定位规则>\n - 根级作用域:comId为\"_root_\",slotId为\"_rootSlot_\"\n - 组件级作用域:根据具体组件的comId和对应的作用域slotId定位\n </作用域插槽定位规则>\n\n <关于actions>\n 各action详细说明如下:\n\n <createVar>\n 创建变量,在结构上严格遵循以下格式:[\"createVar\",params]\n - 在作用域插槽内创建变量\n - params的格式以Typescript的形式说明如下:\n \\`\\`\\`typescript\n type CreateVarParams {\n target: { // 创建变量的作用域插槽定位\n comId: string; // 目标组件的id\n slotId: string; // 目标组件的作用域插槽id\n inputId?: string; // 如果创建在组件级作用域插槽内,必须声明插槽的输入id,根据<slots>下作用域插槽下的输入说明分析如何使用\n }\n title: string; // 定义语义化的变量名\n schema: Schema; // 标准JSON Schema协议,用于定义类型\n value: Schema; // 默认值,类型需要与 schema 定义保持一致,尽量扩写mock数据,不要出现空值的情况\n comId: string; // 变量的唯一id,禁止重复\n }\n \\`\\`\\`\n </createVar>\n\n <connect>\n 连接,将变量与UI组件的输入连接\n 在结构上严格遵循以下格式:[\"connect\",varParams,comParams]\n - 禁止跨作用域的连接\n - varParams的格式以Typescript的形式说明如下:\n \\`\\`\\`typescript\n type VarParams {\n comId: string; // 变量id\n xpath: string; // 变量值的属性路径,使用举例:需要变量a,则值为\"\"。需要变量a的b属性,则值为\"/b\"。需要变量a的b属性的c属性,则值为\"/b/c\"。以/开头,以/分割。\n }\n \\`\\`\\`\n - comParams的格式以Typescript的形式说明如下:\n \\`\\`\\`typescript\n type ComParams {\n comId: string; // UI组件id\n inputId: string; // 在选择inputId时,必须仔细阅读目标UI组件文档中<inputs>部分的描述,确保其语义与变量的用途完全匹配;\n }\n \\`\\`\\`\n - 如果目标UI组件在<inputs>部分中没有找到任何可用的输入与变量语义匹配、或者<inputs>内容为“无”,则**严禁**生成<connect>。\n </connect>\n </关于actions>\n\n <示例>\n *用户信息*:\n ${fileFormat({\n content: `[\"createVar\",{\"target\":{\"comId\":\"comId\",\"slotId\":\"作用域slotId\"},\"title\":\"用户信息\",\"schema\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"age\":{\"type\":\"number\"}}},\"value\":{\"name\":\"张三\",\"age\":18},\"comId\":\"u_userinfo\"}]\n[\"connect\",{\"comId\":\"u_userinfo\",\"xpath\":\"/name\"},{\"comId\":\"u_username\",\"inputId\":\"设置内容\"}]\n[\"connect\",{\"comId\":\"u_userinfo\",\"xpath\":\"/age\"},{\"comId\":\"u_userage\",\"inputId\":\"设置内容\"}]`,\n fileName: '初始化数据操作步骤.json'\n })}\n\n *列表渲染*:\n ${fileFormat({\n content: `[\"createVar\",{\"target\":{\"comId\":\"comId\",\"slotId\":\"作用域slotId\"},\"title\":\"商品列表\",\"schema\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"number\"},\"image\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"}}}},\"value\":[{\"id\":\"1\",\"name\":\"iPhone 15\",\"price\":5999,\"image\":\"https://example.com/iphone15.jpg\",\"description\":\"最新款iPhone\"},{\"id\":\"2\",\"name\":\"MacBook Pro\",\"price\":12999,\"image\":\"https://example.com/macbook.jpg\",\"description\":\"专业级笔记本电脑\"},{\"id\":\"3\",\"name\":\"AirPods Pro\",\"price\":1999,\"image\":\"https://example.com/airpods.jpg\",\"description\":\"降噪耳机\"}],\"comId\":\"u_productList\"}]\n[\"connect\",{\"comId\":\"u_productList\",\"xpath\":\"\"},{\"comId\":\"u_listContainer\",\"inputId\":\"数据源\"}]\n[\"createVar\",{\"target\":{\"comId\":\"u_listContainer\",\"slotId\":\"itemSlot\",\"inputId\":\"当前项\"},\"title\":\"当前商品\",\"schema\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"price\":{\"type\":\"number\"},\"image\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"}}},\"value\":{\"id\":\"\",\"name\":\"\",\"price\":0,\"image\":\"\",\"description\":\"\"},\"comId\":\"u_currentProduct\"}]\n[\"connect\",{\"comId\":\"u_currentProduct\",\"xpath\":\"/name\"},{\"comId\":\"u_productName\",\"inputId\":\"设置内容\"}]\n[\"connect\",{\"comId\":\"u_currentProduct\",\"xpath\":\"/price\"},{\"comId\":\"u_productPrice\",\"inputId\":\"设置内容\"}]\n[\"connect\",{\"comId\":\"u_currentProduct\",\"xpath\":\"/image\"},{\"comId\":\"u_productImage\",\"inputId\":\"图片地址\"}]\n[\"connect\",{\"comId\":\"u_currentProduct\",\"xpath\":\"/description\"},{\"comId\":\"u_productDesc\",\"inputId\":\"设置内容\"}]`,\n fileName: '初始化数据操作步骤.json'\n })}\n </示例>\n\n <注意>\n - 创建的变量必须覆盖<需求文档>中列出的所有*初始化数据*条目,确保不遗漏任何一项,缺少变量会带来不可挽回的损失;\n - 无论UI组件是否已经有静态配置或默认值,都必须通过变量进行驱动更新,确保初始化数据的正确性;\n </注意>\n\n <最佳实践>\n 1. 阅读<需求文档>里*初始化数据*条目,并思考:\n - 各变量的含义和作用\n - 是否有可以合并的变量,例如(表格数据源 + 分页信息、用户头像 + 用户信息等)\n - 变量需要驱动哪个UI组件,该UI组件位于哪一个作用域插槽内\n - 根据UI组件的<使用说明>以及<slots>相关信息,识别是否需要在其作用域插槽内创建变量,例如(列表类、需要循环渲染子组件的组件,需要额外创建作用域子项的变量)\n 2. 创建变量,并思考:\n - 按需创建变量,创建的变量必须要被使用,否则禁止创建;\n - 所需创建变量的Schema和value,做到按需创建,创建的key都能够connect到具体的UI组件;\n - 变量驱动UI是否需要取内部属性;\n - 如果取内部属性,属性是否都用上了,例如:用户信息变量(name,age,add,等),需要把所有属性都connect到具体的UI组件。\n - 依赖数组类型数据驱动的组件,如果有作用域插槽,需要思考是否要在作用域插槽内创建变量来驱动子组件。\n 3. 通过connect操作,将变量连接到UI组件的输入,并思考:\n - 连接的UI组件是否存在作用域插槽隔离\n - 阅读UI组件文档的<inputs>,判断输入是否满足数据驱动需求,如果满足使用对应的inputId值,不满足的禁止连接。\n </最佳实践>\n</如何搭建初始化数据以及修改>\n\n${config.appendPrompt ? `<对于项目环境的说明>\n${config.appendPrompt}\n</对于项目环境的说明>` : ''}\n\n<生成UI思路>\n按照以下步骤完成:\n 1、总体分析,按照以下步骤进行:\n 1)确定总体的功能;\n 2)保持总体UI设计简洁大方、符合现代审美、富有设计感,重点注意:\n - 建立清晰的视觉层次:通过字体大小、粗细、颜色、间距建立信息层级;\n - 使用现代设计元素:渐变背景、圆角卡片、轻微阴影、毛玻璃效果等;\n - 保持设计统一性:统一圆角值、间距系统、色彩方案、字体层级;\n - 色彩和谐:使用协调的配色方案,确保对比度和可读性;\n - 细节精致:注意圆角、阴影、边框等细节,体现专业感和现代感;\n 3) 如果需要还原附件图片中的视觉设计效果:\n 特别关注整体的布局、定位、颜色、字体颜色、背景色、尺寸、间距、边框、圆角等UI信息,按照以下的流程还原参考图片:\n - 提取图片中的关键UI信息并总结;\n - 根据总结和图片将所有UI信息细节使用actions一比一还原出来,注意适配画布尺寸;\n - 忠于图片/设计稿进行搭建,而不是文字性的总结,文字总结会有歧义;\n - 注意每一个元素的以及邻近元素的位置,上下左右元素,以及子组件的布局方式,务必保证与设计稿对齐;\n\n 2、选择合适的组件与插槽,留意(知识库有更新)的提示,注意使用的组件不要超出当前【知识库】的范围:\n 1)按照自上而下、从左向右的方式分析形成组件方案以及采用的插槽;\n 2)选用合理的布局;\n \n 3、详细分析各个组件,按照以下要点展开:\n - 标题(title):组件的标题;\n - 布局(layout):组件的宽高与外间距信息,只能声明width、height、margin,不允许使用padding等属性;\n - 样式(styleAry):根据组件声明的css给出合理的设计实现;\n - 数据(data):根据【知识库】中该组件的data声明进行实现;\n\n 4、返回搭建UI的actions操作步骤文件内容,注意:\n - 每一个action符合JSON规范,每一行为一个action\n - 禁止包含任何注释(包括单行//和多行/* */)\n - 禁止出现省略号(...)或任何占位符\n - 确保所有代码都是完整可执行的,不包含示例片段\n - 禁止使用非法字符或特殊符号\n - 所有内容均为静态数据,禁止解构,禁止使用变量\n\n 5、最后,根据搭建UI的actions操作步骤文件内容,返回搭建初始化数据的actions操作步骤文件内容,注意:·\n - 每一个action符合JSON规范,每一行为一个action\n - 禁止包含任何注释(包括单行//和多行/* */)\n - 禁止出现省略号(...)或任何占位符\n - 确保所有代码都是完整可执行的,不包含示例片段\n - 禁止使用非法字符或特殊符号\n - 所有内容均为静态数据,禁止解构,禁止使用变量\n</生成UI思路>\n\n<生成UI限制>\n生成UI必须从根组件_root_开始配置,以及从插槽_rootSlot_开始添加组件。\n</生成UI限制>\n\n${config.fewShots ? `<examples>\n\n${config.fewShots}\n\n</examples>` : ''}`\n },\n stream({ files, status, replaceContent }) {\n let actions = [];\n let varActions = [];\n\n const actionsFile = getFiles([files[0] || {}], {extName: 'json' })\n const varActionsFile = getFiles([files[1] || {}], {extName: 'json' })\n\n if (actionsFile) {\n actions = streamActionsParser(actionsFile.content ?? \"\", actionsFile?.isComplete);\n if (!fileNameToContent[actionsFile!.fileName]) {\n fileNameToContent[actionsFile!.fileName] = \"\";\n }\n }\n\n if (varActionsFile) {\n varActions = streamVarActionsParser(varActionsFile.content ?? \"\");\n }\n\n actions = fixActions(actions, {\n rootId,\n pageId\n })\n\n if (status === 'start') {\n config.onClearPage()\n }\n \n if (actions.length > 0 || varActions.length > 0 || status === 'start' || status === 'complete') {\n const currentStatus = status === 'complete' ? \"ing\" : status;\n const copiedActions = JSON.parse(JSON.stringify(actions));\n try {\n // config.onActions(actions, status)\n actions.forEach((action) => {\n if (action.type === \"addChild\") {\n const childComId = action.params.comId;\n // 对于addChild操作,每次添加时都生成新的UUID映射\n action.params.comId = uiTree.comIdTransform.addComId(childComId);\n uiTree.setNamespace(action.params.comId, action.params.namespace);\n\n const parentComId = action.comId;\n\n if (parentComId !== \"_root_\") {\n // 获取父组件时,使用最近添加的comId\n action.comId = uiTree.getComId(parentComId);\n }\n\n uiTree.addNode({\n id: action.params.comId,\n parent: {\n id: action.comId,\n slotId: action.target,\n }\n })\n\n if (action.params.comId && action.params.configs?.[0]?.path === '常规/需求文档') {\n\n config?.onAddCodingBlock?.({\n comId: action.params.comId,\n requirement: action.params.configs[0].value.replace(/# /, ''),\n })\n // action.params.configs = [];\n }\n\n } else if (action.type === \"doConfig\") {\n const comId = action.comId;\n if (comId !== \"_root_\") {\n // 获取组件时,使用最近添加的comId\n action.comId = uiTree.getComId(comId);\n }\n }\n })\n actions.forEach((action: any) => {\n promiseStack.add(() => config.onActions([action], currentStatus))\n })\n } catch (error) {\n console.error('generate-page onActions error', error);\n }\n const actionsContent = getComponentOperationSummary(copiedActions, config.componentIdToTitleMap)\n\n if (actionsFile) {\n if (!fileNameToContent[actionsFile!.fileName]) {\n fileNameToContent[actionsFile!.fileName] = actionsContent.trim();\n } else {\n fileNameToContent[actionsFile!.fileName] += `\\n${actionsContent.trim()}`;\n }\n }\n\n try {\n varActions.forEach((action: any) => {\n if (action[0] === \"createVar\") {\n const { comId, schema, target, title, value } = action[1];\n\n const targetComId = target.comId === \"_root_\" ? null : uiTree.getComId(target.comId);\n const varComId = uiTree.varIdTransform.getComId(comId);\n uiTree.addNode({\n id: varComId,\n parent: {\n id: targetComId || \"_root_\",\n slotId: target.slotId,\n }\n })\n\n const newAction = {\n type: \"defineVar\",\n params: {\n comId: targetComId,\n slotId: target.slotId === \"_rootSlot_\" ? \"_root_\" : target.slotId,\n id: varComId,\n title,\n schema,\n initValue: value\n }\n }\n promiseStack.add(() => {\n console.log(\"[创建变量]\", newAction)\n return config.onActions([newAction], currentStatus)\n })\n if (target.inputId) {\n // 创建插槽输入到变量的赋值\n const varInstanceId = uuid()\n const newActions = [\n // 创建变量节点\n {\n type: \"createCom\",\n params: {\n type: \"var\",\n varId: varComId,\n inputId: \"set\",\n instanceId: varInstanceId,\n }\n },\n {\n type: \"connectTo\",\n params: {\n from: {\n type: \"frame\",\n comId: targetComId,\n frameId: target.slotId,\n outputId: target.inputId\n },\n to: {\n type: \"com\",\n inputId: \"set\",\n instanceId: varInstanceId\n }\n }\n },\n ]\n promiseStack.add(() => {\n const diagramId = context.designer?.getDiagramInfo?.(targetComId, target.slotId).id;\n diagrams[`${targetComId}_${target.slotId}`] = diagramId;\n return context.designer?.updateDiagram?.(diagramId, newActions, \"start\")\n })\n }\n } else if (action[0] === \"connect\") {\n const varParams = action[1];\n const uiComParams = action[2]\n const varComId = uiTree.varIdTransform.getComId(varParams.comId);\n const uiComId = uiTree.getComId(uiComParams.comId);\n\n const scope: any = {\n status: currentStatus,\n }\n\n const uiScope = uiTree.getScope(uiComId);\n const varScope = uiTree.getScope(varComId);\n let diagramKey = varComId\n\n if ((uiScope.id !== varScope.id) || (uiScope.slotId !== varScope.slotId)) {\n diagramKey = `${uiScope.id}_${uiScope.slotId}_${varComId}`;\n\n if (!diagrams[diagramKey]) {\n diagrams[diagramKey] = \"pending\"\n const newAction = {\n type: \"defineListener\",\n params: {\n comId: uiScope.id,\n slotId: uiScope.slotId,\n varId: varComId\n }\n }\n promiseStack.add(() => config.onActions([newAction], currentStatus))\n promiseStack.add(() => {\n diagrams[diagramKey] = context.designer?.getDiagramInfoByListenerInfo?.(uiScope.id, uiScope.slotId, varComId).id;\n scope.status = \"start\";\n })\n }\n } else {\n if (!diagrams[diagramKey]) {\n promiseStack.add(() => {\n diagrams[diagramKey] = context.designer?.getDiagramInfoByVarId?.(varComId).id;\n scope.status = \"start\";\n })\n }\n }\n\n const varInstanceId = uuid()\n const uiComInstanceId = uuid()\n const newActions = varParams.xpath ? [\n // 创建变量节点\n {\n type: \"createCom\",\n params: {\n type: \"var\",\n varId: varComId,\n inputId: \"get\",\n instanceId: varInstanceId,\n xpath: varParams.xpath,\n }\n },\n // 创建UI组件节点\n {\n type: \"createCom\",\n params: {\n type: \"uiCom\",\n comId: uiComId,\n inputId: uiComParams.inputId,\n instanceId: uiComInstanceId\n }\n },\n // 变量值变更到读变量\n {\n type: \"connectTo\",\n params: {\n from: {\n type: \"com\",\n comId: varComId,\n outputId: \"changed\",\n },\n to: {\n type: \"com\",\n inputId: \"get\",\n instanceId: varInstanceId\n }\n }\n },\n // 变量return值到ui组件的输入\n {\n type: \"connectTo\",\n params: {\n from: {\n type: \"com\",\n instanceId: varInstanceId,\n outputId: \"return\"\n },\n to: {\n type: \"com\",\n instanceId: uiComInstanceId,\n inputId: uiComParams.inputId\n }\n }\n },\n ] : [\n // 创建UI组件节点\n {\n type: \"createCom\",\n params: {\n type: \"uiCom\",\n comId: uiComId,\n inputId: uiComParams.inputId,\n instanceId: uiComInstanceId\n }\n },\n // 变量值变更到UI组件\n {\n type: \"connectTo\",\n params: {\n from: {\n type: \"com\",\n comId: varComId,\n outputId: \"changed\",\n },\n to: {\n type: \"com\",\n instanceId: uiComInstanceId,\n inputId: uiComParams.inputId\n }\n }\n },\n ]\n console.log(\"[连接ui组件]\", newActions)\n promiseStack.add(() => {\n return context.designer?.updateDiagram?.(diagrams[diagramKey], newActions, scope.status)\n })\n }\n })\n } catch (error) {\n console.error('generate-page onVarActions error', error);\n }\n \n if (status === \"complete\") {\n promiseStack.add(() => {\n config.onActions([], status)\n Object.entries(diagrams).forEach(([_, id]) => {\n context.designer?.updateDiagram?.(id, [], status)\n })\n })\n }\n }\n\n return displayContent = Object.entries(fileNameToContent).reduce((pre, [fileName, content]) => {\n return pre.replace(fileName, content);\n }, replaceContent)\n },\n execute({ files, content }) {\n let actions: any = [];\n const actionsFile = getFiles(files, {extName: 'json' })\n\n console.log(\"[files]\", files);\n console.log(\"[uiTree]\", uiTree)\n\n if (!actionsFile) {\n return {\n llmContent: content,\n displayContent: content\n }\n }\n actions = excuteActionsParser(actionsFile.content ?? \"\");\n // let actions: any = [];\n // const actionsFile = getFiles(files, {extName: 'json' })\n // if (actionsFile) {\n // actions = actionsParser(actionsFile.content ?? \"\");\n // }\n // config.onActions(actions)\n\n actions = fixActions(actions, {\n rootId,\n pageId\n })\n\n console.log('generate-page actions=', JSON.parse(JSON.stringify(actions)));\n\n try {\n const llmContent = stripFileBlocks(content);\n const actionsContent = actions?.length ? getComponentOperationSummary(actions, config.componentIdToTitleMap) : \"\"\n const summary = (llmContent ? `${llmContent}\\n\\n` : \"\") + (actionsContent ? `修改内容如下\\n${actionsContent}` : \"当前没有内容修改\");\n\n return {\n llmContent: summary,\n displayContent: summary\n }\n // const summary = getComponentOperationSummary(actions, config.componentIdToTitleMap)\n\n // return {\n // llmContent: `根据需求,执行以下操作\n // ${summary}`,\n // displayContent: `根据需求,执行以下操作\n // ${summary}`\n // }\n } catch (error) {\n \n }\n\n return {\n llmContent: '已执行所有操作',\n displayContent: '已执行所有操作'\n }\n },\n }\n}\n\nfunction fixActions(actions: any[], {\n rootId,\n pageId\n}: {\n rootId?: string,\n pageId?: string\n}) {\n return (actions ?? []).map(action => {\n if (action.comId === rootId && action.type === 'addChild' && action.target === '_rootSlot_') {\n action.comId = '_root_'\n }\n\n if (action.comId === pageId) {\n action.comId = '_root_'\n }\n return action;\n })\n}\n\n/** 生成UI内容的简化参数(用于 MyBricksTools) */\nexport interface GenerateUiContentConfigParams {\n fewShots: string;\n}\n\n/** 生成UI内容的工具配置函数(用于 MyBricksTools) */\nexport function GenerateUiContent(params: GenerateUiContentConfigParams) {\n return {\n name: NAME,\n params: {\n fewShots: params?.fewShots,\n },\n }\n}"],"names":["NAME","generateUiContent","toolName","UITree","constructor","_defineProperty","Map","ComIdTransform","getComId","comId","comIdTransform","addNode","node","id","parent","namespace","comIdToNamespace","get","scope","_component$all","component","ComponentsManager","getAiComponent","all","slots","find","slot","slotId","type","nodeMap","set","_objectSpread","getScope","nodeId","setNamespace","config","streamActionsParser","createActionsParser","enabledActionTags","context","excuteActionsParser","streamVarActionsParser","createVarActionsParser","pageId","getTargetId","rootId","getRootIdByPageId","fileNameToContent","diagrams","promiseStack","PromiseStack","uiTree","name","displayName","description","aiRole","getPrompts","params","concat","getRootComponentDoc","fileFormat","content","fileName","appendPrompt","fewShots","stream","_ref","files","status","replaceContent","actions","varActions","actionsFile","getFiles","extName","varActionsFile","_actionsFile$content","isComplete","_varActionsFile$conte","fixActions","onClearPage","length","currentStatus","copiedActions","JSON","parse","stringify","forEach","action","_action$params$config","childComId","addComId","parentComId","target","configs","path","_config$onAddCodingBl","onAddCodingBlock","call","requirement","value","replace","add","onActions","error","console","actionsContent","getComponentOperationSummary","componentIdToTitleMap","trim","schema","title","targetComId","varComId","varIdTransform","newAction","initValue","log","inputId","varInstanceId","uuid","newActions","varId","instanceId","from","frameId","outputId","to","_context$designer","_context$designer$get","_context$designer2","_context$designer2$up","diagramId","designer","getDiagramInfo","updateDiagram","varParams","uiComParams","uiComId","uiScope","varScope","diagramKey","_context$designer3","_context$designer3$ge","getDiagramInfoByListenerInfo","_context$designer4","_context$designer4$ge","getDiagramInfoByVarId","uiComInstanceId","xpath","_context$designer5","_context$designer5$up","Object","entries","_ref2","_context$designer6","_context$designer6$up","_","reduce","pre","_ref3","execute","_ref4","_actionsFile$content2","llmContent","displayContent","_actions","stripFileBlocks","summary","_ref5","map","GenerateUiContent"],"mappings":";;;;;;;;AAsBA,IAAMA,IAAI,GAAG,2BAA2B;AACxCC,iBAAiB,CAACC,QAAQ,GAAGF,IAAI;AAEjC,MAAMG,MAAM,CAAC;EAAAC,WAAAA,GAAA;AAAAC,IAAAA,eAAA,CAAA,IAAA,EAAA,SAAA,EACD,IAAIC,GAAG,EAAE,CAAA;AAAAD,IAAAA,eAAA,CAAA,IAAA,EAAA,kBAAA,EACA,IAAIC,GAAG,EAAE,CAAA;AAAAD,IAAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EACX,IAAIE,cAAc,CAAC,EAAE,CAAC,CAAA;AAAAF,IAAAA,eAAA,CAAA,IAAA,EAAA,gBAAA,EACtB,IAAIE,cAAc,CAAC,EAAE,CAAC,CAAA;AAAA,EAAA;EAEvCC,QAAQA,CAACC,KAAa,EAAE;AACtB,IAAA,OAAO,IAAI,CAACC,cAAc,CAACF,QAAQ,CAACC,KAAK,CAAC;AAC5C,EAAA;EAEAE,OAAOA,CAACC,IAAS,EAAE;IACjB,IAAM;MAAEC,EAAE;AAAEC,MAAAA;AAAO,KAAC,GAAGF,IAAI;IAC3B,IAAMG,SAAS,GAAG,IAAI,CAACC,gBAAgB,CAACC,GAAG,CAACH,MAAM,CAACD,EAAE,CAAC;IACtD,IAAIK,KAAK,GAAG,KAAK;AACjB,IAAA,IAAIH,SAAS,EAAE;AAAA,MAAA,IAAAI,cAAA;AACb,MAAA,IAAMC,SAAS,GAAGC,iBAAiB,CAACC,cAAc,CAACP,SAAS,CAAC;MAC7D,IAAI,CAAAK,SAAS,KAAA,IAAA,IAATA,SAAS,gBAAAD,cAAA,GAATC,SAAS,CAAEG,GAAG,cAAAJ,cAAA,KAAA,MAAA,IAAA,CAAAA,cAAA,GAAdA,cAAA,CAAgBK,KAAK,MAAA,IAAA,IAAAL,cAAA,KAAA,MAAA,IAAA,CAAAA,cAAA,GAArBA,cAAA,CAAuBM,IAAI,CAAEC,IAAS,IAAKA,IAAI,CAACb,EAAE,KAAKC,MAAM,CAACa,MAAM,CAAC,cAAAR,cAAA,KAAA,MAAA,GAAA,MAAA,GAArEA,cAAA,CAAuES,IAAI,MAAK,OAAO,EAAE;AAC3FV,QAAAA,KAAK,GAAG,IAAI;AACd,MAAA;AACF,IAAA;AACA,IAAA,IAAI,CAACW,OAAO,CAACC,GAAG,CAACjB,EAAE,EAAE;MACnBA,EAAE;AACFC,MAAAA,MAAM,EAAAiB,cAAA,CAAAA,cAAA,KACDjB,MAAM,CAAA,EAAA,EAAA,EAAA;AACTI,QAAAA;AAAK,OAAA;AAET,KAAC,CAAC;AACJ,EAAA;EAEAc,QAAQA,CAACC,MAAW,EAAE;IACpB,IAAIrB,IAAI,GAAG,IAAI,CAACiB,OAAO,CAACZ,GAAG,CAACgB,MAAM,CAAC;AACnC,IAAA,OAAOrB,IAAI,EAAE;AACX,MAAA,IAAIA,IAAI,CAACE,MAAM,CAACD,EAAE,KAAK,QAAQ,EAAE;QAC/B,OAAOD,IAAI,CAACE,MAAM;AACpB,MAAA;AACA,MAAA,IAAIF,IAAI,CAACE,MAAM,CAACI,KAAK,EAAE;QACrB,OAAON,IAAI,CAACE,MAAM;AACpB,MAAA;AAEAF,MAAAA,IAAI,GAAG,IAAI,CAACiB,OAAO,CAACZ,GAAG,CAACL,IAAI,CAACE,MAAM,CAACD,EAAE,CAAC;AACzC,IAAA;AACF,EAAA;AAEAqB,EAAAA,YAAYA,CAACzB,KAAa,EAAEM,SAAiB,EAAE;IAC7C,IAAI,CAACC,gBAAgB,CAACc,GAAG,CAACrB,KAAK,EAAEM,SAAS,CAAC;AAC7C,EAAA;AACF;AAEe,SAASd,iBAAiBA,CAACkC,MAA+B,EAAO;EAC9E,IAAMC,mBAAmB,GAAGC,mBAAmB,CAAC;IAAEC,iBAAiB,EAAEC,OAAO,CAACD;AAAkB,GAAC,CAAC;EACjG,IAAME,mBAAmB,GAAGH,mBAAmB,CAAC;IAAEC,iBAAiB,EAAEC,OAAO,CAACD;AAAkB,GAAC,CAAC;AAEjG,EAAA,IAAMG,sBAAsB,GAAGC,sBAAsB,EAAE;EAEvD,IAAMC,MAAM,GAAGR,MAAM,KAAA,IAAA,IAANA,MAAM,uBAANA,MAAM,CAAES,WAAW,EAAE;EACpC,IAAMC,MAAM,GAAGV,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,MAAA,GAAA,MAAA,GAANA,MAAM,CAAEW,iBAAiB,CAACH,MAAM,CAAC;EAEhD,IAAII,iBAAyC,GAAG,EAAE;EAGlD,IAAMC,QAAgC,GAAG,EAAE;AAC3C,EAAA,IAAMC,YAAY,GAAG,IAAIC,YAAY,EAAE;AACvC,EAAA,IAAMC,MAAM,GAAG,IAAIhD,MAAM,EAAE;EAE3B,OAAO;AACLiD,IAAAA,IAAI,EAAEpD,IAAI;AACVqD,IAAAA,WAAW,EAAE,QAAQ;AACrBC,IAAAA,WAAW,EAAA,+yBAMd;AACGC,IAAAA,MAAM,EAAE,QAAQ;IAChBC,UAAUA,CAACC,MAAM,EAAE;MACjB,OAAA,+8CAAA,CAAAC,MAAA,CAcJvB,MAAM,CAACwB,mBAAmB,EAAE,EAAA,gWAAA,CAAA,CAAAD,MAAA,CAQ1BE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,+BAAiC;AACxCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,m1IAAA,CAAA,CAAAJ,MAAA,CAoFIE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,uDAAiD;AACxDC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,4vDAAA,CAAA,CAAAJ,MAAA,CA6BAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,sHAAkE;AACzEC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,gEAAA,CAAA,CAAAJ,MAAA,CAGAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,6HAA2F;AAClGC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,8hEAAA,CAAA,CAAAJ,MAAA,CA2BAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,0JAA6F;AACpGC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,YAAA,CAAA,CAAAJ,MAAA,CAEAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,8bAAuT;AAC9TC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,cAAA,CAAA,CAAAJ,MAAA,CAEAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,2KAA4G;AACnHC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,8dAAA,CAAA,CAAAJ,MAAA,CAUAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,oCAAgC;AACvCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,8jHAAA,CAAA,CAAAJ,MAAA,CAuCEE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,iRAAmL;AAC1LC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,kxKAAA,CAAA,CAAAJ,MAAA,CAiCEE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,+oCAGR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,4gBAAA,CAAA,CAAAJ,MAAA,CAQAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,u3BAGR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,i4BAAA,CAAA,CAAAJ,MAAA,CAQAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,yjDAKR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,k1BAAA,CAAA,CAAAJ,MAAA,CAOAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,gmBAER;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,4iBAAA,CAAA,CAAAJ,MAAA,CAMAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,o3BAGR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,02BAAA,CAAA,CAAAJ,MAAA,CAQAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,6hCAIR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,2kCAAA,CAAA,CAAAJ,MAAA,CASAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,g0BAGR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,ukBAAA,CAAA,CAAAJ,MAAA,CAMAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,o3BAGR;AACCC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,q2LAAA,CAAA,CAAAJ,MAAA,CA8CVE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,qBAAuB;AAC9BC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,m8HAAA,CAAA,CAAAJ,MAAA,CA0DEE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,8jBAE8E;AACrFC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,4CAAA,CAAA,CAAAJ,MAAA,CAGAE,UAAU,CAAC;AACXC,QAAAA,OAAO,EAAA,2gEAMgG;AACvGC,QAAAA,QAAQ,EAAE;AACZ,OAAC,CAAC,EAAA,o5GAAA,CAAA,CAAAJ,MAAA,CA0BFvB,MAAM,CAAC4B,YAAY,GAAA,4DAAA,CAAAL,MAAA,CACnBvB,MAAM,CAAC4B,YAAY,EAAA,6DAAA,CAAA,GACL,EAAE,EAAA,yvLAAA,CAAA,CAAAL,MAAA,CAkDhBvB,MAAM,CAAC6B,QAAQ,GAAA,gBAAA,CAAAN,MAAA,CAEfvB,MAAM,CAAC6B,QAAQ,EAAA,iBAAA,CAAA,GAEF,EAAE,CAAA;IACb,CAAC;IACDC,MAAMA,CAAAC,IAAA,EAAoC;MAAA,IAAnC;QAAEC,KAAK;QAAEC,MAAM;AAAEC,QAAAA;AAAe,OAAC,GAAAH,IAAA;MACtC,IAAII,OAAO,GAAG,EAAE;MAChB,IAAIC,UAAU,GAAG,EAAE;AAEnB,MAAA,IAAMC,WAAW,GAAGC,QAAQ,CAAC,CAACN,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAACO,QAAAA,OAAO,EAAE;AAAO,OAAC,CAAC;AAClE,MAAA,IAAMC,cAAc,GAAGF,QAAQ,CAAC,CAACN,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;AAACO,QAAAA,OAAO,EAAE;AAAO,OAAC,CAAC;AAErE,MAAA,IAAIF,WAAW,EAAE;AAAA,QAAA,IAAAI,oBAAA;QACfN,OAAO,GAAGlC,mBAAmB,CAAA,CAAAwC,oBAAA,GAACJ,WAAW,CAACX,OAAO,MAAA,IAAA,IAAAe,oBAAA,KAAA,MAAA,GAAAA,oBAAA,GAAI,EAAE,EAAEJ,WAAW,KAAA,IAAA,IAAXA,WAAW,KAAA,MAAA,GAAA,MAAA,GAAXA,WAAW,CAAEK,UAAU,CAAC;AACjF,QAAA,IAAI,CAAC9B,iBAAiB,CAACyB,WAAW,CAAEV,QAAQ,CAAC,EAAE;AAC7Cf,UAAAA,iBAAiB,CAACyB,WAAW,CAAEV,QAAQ,CAAC,GAAG,EAAE;AAC/C,QAAA;AACF,MAAA;AAEA,MAAA,IAAIa,cAAc,EAAE;AAAA,QAAA,IAAAG,qBAAA;AAClBP,QAAAA,UAAU,GAAG9B,sBAAsB,CAAA,CAAAqC,qBAAA,GAACH,cAAc,CAACd,OAAO,MAAA,IAAA,IAAAiB,qBAAA,KAAA,MAAA,GAAAA,qBAAA,GAAI,EAAE,CAAC;AACnE,MAAA;AAEAR,MAAAA,OAAO,GAAGS,UAAU,CAACT,OAAO,EAAE;QAC5BzB,MAAM;AACNF,QAAAA;AACF,OAAC,CAAC;MAEF,IAAIyB,MAAM,KAAK,OAAO,EAAE;QACtBjC,MAAM,CAAC6C,WAAW,EAAE;AACtB,MAAA;AAEA,MAAA,IAAIV,OAAO,CAACW,MAAM,GAAG,CAAC,IAAIV,UAAU,CAACU,MAAM,GAAG,CAAC,IAAIb,MAAM,KAAK,OAAO,IAAIA,MAAM,KAAK,UAAU,EAAE;QAC9F,IAAMc,aAAa,GAAGd,MAAM,KAAK,UAAU,GAAG,KAAK,GAAGA,MAAM;AAC5D,QAAA,IAAMe,aAAa,GAAGC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAAChB,OAAO,CAAC,CAAC;QACzD,IAAI;AACF;AACAA,UAAAA,OAAO,CAACiB,OAAO,CAAEC,MAAM,IAAK;AAC1B,YAAA,IAAIA,MAAM,CAAC5D,IAAI,KAAK,UAAU,EAAE;AAAA,cAAA,IAAA6D,qBAAA;AAC9B,cAAA,IAAMC,UAAU,GAAGF,MAAM,CAAC/B,MAAM,CAAChD,KAAK;AACtC;AACA+E,cAAAA,MAAM,CAAC/B,MAAM,CAAChD,KAAK,GAAG0C,MAAM,CAACzC,cAAc,CAACiF,QAAQ,CAACD,UAAU,CAAC;AAChEvC,cAAAA,MAAM,CAACjB,YAAY,CAACsD,MAAM,CAAC/B,MAAM,CAAChD,KAAK,EAAE+E,MAAM,CAAC/B,MAAM,CAAC1C,SAAS,CAAC;AAEjE,cAAA,IAAM6E,WAAW,GAAGJ,MAAM,CAAC/E,KAAK;cAEhC,IAAImF,WAAW,KAAK,QAAQ,EAAE;AAC5B;gBACAJ,MAAM,CAAC/E,KAAK,GAAG0C,MAAM,CAAC3C,QAAQ,CAACoF,WAAW,CAAC;AAC7C,cAAA;cAEAzC,MAAM,CAACxC,OAAO,CAAC;AACbE,gBAAAA,EAAE,EAAE2E,MAAM,CAAC/B,MAAM,CAAChD,KAAK;AACvBK,gBAAAA,MAAM,EAAE;kBACND,EAAE,EAAE2E,MAAM,CAAC/E,KAAK;kBAChBkB,MAAM,EAAE6D,MAAM,CAACK;AACjB;AACF,eAAC,CAAC;AAEF,cAAA,IAAIL,MAAM,CAAC/B,MAAM,CAAChD,KAAK,IAAI,CAAA,CAAAgF,qBAAA,GAAAD,MAAM,CAAC/B,MAAM,CAACqC,OAAO,MAAA,IAAA,IAAAL,qBAAA,KAAA,KAAA,CAAA,IAAA,CAAAA,qBAAA,GAArBA,qBAAA,CAAwB,CAAC,CAAC,MAAA,IAAA,IAAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA1BA,qBAAA,CAA4BM,IAAI,MAAK,SAAS,EAAE;AAAA,gBAAA,IAAAC,qBAAA;AAEzE7D,gBAAAA,MAAM,aAANA,MAAM,KAAA,KAAA,CAAA,IAAA,CAAA6D,qBAAA,GAAN7D,MAAM,CAAE8D,gBAAgB,MAAA,IAAA,IAAAD,qBAAA,eAAxBA,qBAAA,CAAAE,IAAA,CAAA/D,MAAM,EAAqB;AACzB1B,kBAAAA,KAAK,EAAE+E,MAAM,CAAC/B,MAAM,CAAChD,KAAK;AAC1B0F,kBAAAA,WAAW,EAAEX,MAAM,CAAC/B,MAAM,CAACqC,OAAO,CAAC,CAAC,CAAC,CAACM,KAAK,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE;AAC9D,iBAAC,CAAC;AACF;AACF,cAAA;AAEF,YAAA,CAAC,MAAM,IAAIb,MAAM,CAAC5D,IAAI,KAAK,UAAU,EAAE;AACrC,cAAA,IAAMnB,KAAK,GAAG+E,MAAM,CAAC/E,KAAK;cAC1B,IAAIA,KAAK,KAAK,QAAQ,EAAE;AACtB;gBACA+E,MAAM,CAAC/E,KAAK,GAAG0C,MAAM,CAAC3C,QAAQ,CAACC,KAAK,CAAC;AACvC,cAAA;AACF,YAAA;AACF,UAAA,CAAC,CAAC;AACF6D,UAAAA,OAAO,CAACiB,OAAO,CAAEC,MAAW,IAAK;AAC/BvC,YAAAA,YAAY,CAACqD,GAAG,CAAC,MAAMnE,MAAM,CAACoE,SAAS,CAAC,CAACf,MAAM,CAAC,EAAEN,aAAa,CAAC,CAAC;AACnE,UAAA,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOsB,KAAK,EAAE;AACdC,UAAAA,OAAO,CAACD,KAAK,CAAC,+BAA+B,EAAEA,KAAK,CAAC;AACvD,QAAA;QACA,IAAME,cAAc,GAAGC,4BAA4B,CAACxB,aAAa,EAAEhD,MAAM,CAACyE,qBAAqB,CAAC;AAEhG,QAAA,IAAIpC,WAAW,EAAE;AACf,UAAA,IAAI,CAACzB,iBAAiB,CAACyB,WAAW,CAAEV,QAAQ,CAAC,EAAE;YAC7Cf,iBAAiB,CAACyB,WAAW,CAAEV,QAAQ,CAAC,GAAG4C,cAAc,CAACG,IAAI,EAAE;AAClE,UAAA,CAAC,MAAM;AACL9D,YAAAA,iBAAiB,CAACyB,WAAW,CAAEV,QAAQ,CAAC,IAAA,IAAA,CAAAJ,MAAA,CAASgD,cAAc,CAACG,IAAI,EAAE,CAAE;AAC1E,UAAA;AACF,QAAA;QAEA,IAAI;AACFtC,UAAAA,UAAU,CAACgB,OAAO,CAAEC,MAAW,IAAK;AAClC,YAAA,IAAIA,MAAM,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;cAC7B,IAAM;gBAAE/E,KAAK;gBAAEqG,MAAM;gBAAEjB,MAAM;gBAAEkB,KAAK;AAAEX,gBAAAA;AAAM,eAAC,GAAGZ,MAAM,CAAC,CAAC,CAAC;AAEzD,cAAA,IAAMwB,WAAW,GAAGnB,MAAM,CAACpF,KAAK,KAAK,QAAQ,GAAG,IAAI,GAAG0C,MAAM,CAAC3C,QAAQ,CAACqF,MAAM,CAACpF,KAAK,CAAC;cACpF,IAAMwG,QAAQ,GAAG9D,MAAM,CAAC+D,cAAc,CAAC1G,QAAQ,CAACC,KAAK,CAAC;cACtD0C,MAAM,CAACxC,OAAO,CAAC;AACbE,gBAAAA,EAAE,EAAEoG,QAAQ;AACZnG,gBAAAA,MAAM,EAAE;kBACND,EAAE,EAAEmG,WAAW,IAAI,QAAQ;kBAC3BrF,MAAM,EAAEkE,MAAM,CAAClE;AACjB;AACF,eAAC,CAAC;AAEF,cAAA,IAAMwF,SAAS,GAAG;AAChBvF,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACNhD,kBAAAA,KAAK,EAAEuG,WAAW;kBAClBrF,MAAM,EAAEkE,MAAM,CAAClE,MAAM,KAAK,YAAY,GAAG,QAAQ,GAAGkE,MAAM,CAAClE,MAAM;AACjEd,kBAAAA,EAAE,EAAEoG,QAAQ;kBACZF,KAAK;kBACLD,MAAM;AACNM,kBAAAA,SAAS,EAAEhB;AACb;eACD;cACDnD,YAAY,CAACqD,GAAG,CAAC,MAAM;AACrBG,gBAAAA,OAAO,CAACY,GAAG,CAAC,QAAQ,EAAEF,SAAS,CAAC;gBAChC,OAAOhF,MAAM,CAACoE,SAAS,CAAC,CAACY,SAAS,CAAC,EAAEjC,aAAa,CAAC;AACrD,cAAA,CAAC,CAAC;cACF,IAAIW,MAAM,CAACyB,OAAO,EAAE;AAClB;AACA,gBAAA,IAAMC,aAAa,GAAGC,IAAI,EAAE;AAC5B,gBAAA,IAAMC,UAAU,GAAG;AACjB;AACA,gBAAA;AACE7F,kBAAAA,IAAI,EAAE,WAAW;AACjB6B,kBAAAA,MAAM,EAAE;AACN7B,oBAAAA,IAAI,EAAE,KAAK;AACX8F,oBAAAA,KAAK,EAAET,QAAQ;AACfK,oBAAAA,OAAO,EAAE,KAAK;AACdK,oBAAAA,UAAU,EAAEJ;AACd;AACF,iBAAC,EACD;AACE3F,kBAAAA,IAAI,EAAE,WAAW;AACjB6B,kBAAAA,MAAM,EAAE;AACNmE,oBAAAA,IAAI,EAAE;AACJhG,sBAAAA,IAAI,EAAE,OAAO;AACbnB,sBAAAA,KAAK,EAAEuG,WAAW;sBAClBa,OAAO,EAAEhC,MAAM,CAAClE,MAAM;sBACtBmG,QAAQ,EAAEjC,MAAM,CAACyB;qBAClB;AACDS,oBAAAA,EAAE,EAAE;AACFnG,sBAAAA,IAAI,EAAE,KAAK;AACX0F,sBAAAA,OAAO,EAAE,KAAK;AACdK,sBAAAA,UAAU,EAAEJ;AACd;AACF;AACF,iBAAC,CACN;gBACDtE,YAAY,CAACqD,GAAG,CAAC,MAAM;AAAA,kBAAA,IAAA0B,iBAAA,EAAAC,qBAAA,EAAAC,kBAAA,EAAAC,qBAAA;AACrB,kBAAA,IAAMC,SAAS,GAAA,CAAAJ,iBAAA,GAAGzF,OAAO,CAAC8F,QAAQ,MAAA,IAAA,IAAAL,iBAAA,KAAA,KAAA,CAAA,IAAA,CAAAC,qBAAA,GAAhBD,iBAAA,CAAkBM,cAAc,MAAA,IAAA,IAAAL,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAhCA,qBAAA,CAAA/B,IAAA,CAAA8B,iBAAA,EAAmChB,WAAW,EAAEnB,MAAM,CAAClE,MAAM,CAAC,CAACd,EAAE;AACnFmC,kBAAAA,QAAQ,CAAA,EAAA,CAAAU,MAAA,CAAIsD,WAAW,EAAA,GAAA,CAAA,CAAAtD,MAAA,CAAImC,MAAM,CAAClE,MAAM,CAAA,CAAG,GAAGyG,SAAS;kBACvD,OAAA,CAAAF,kBAAA,GAAO3F,OAAO,CAAC8F,QAAQ,MAAA,IAAA,IAAAH,kBAAA,KAAA,KAAA,CAAA,IAAA,CAAAC,qBAAA,GAAhBD,kBAAA,CAAkBK,aAAa,MAAA,IAAA,IAAAJ,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA/BA,qBAAA,CAAAjC,IAAA,CAAAgC,kBAAA,EAAkCE,SAAS,EAAEX,UAAU,EAAE,OAAO,CAAC;AAC1E,gBAAA,CAAC,CAAC;AACA,cAAA;YACF,CAAC,MAAM,IAAIjC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAClC,cAAA,IAAMgD,SAAS,GAAGhD,MAAM,CAAC,CAAC,CAAC;AAC3B,cAAA,IAAMiD,WAAW,GAAGjD,MAAM,CAAC,CAAC,CAAC;cAC7B,IAAMyB,SAAQ,GAAG9D,MAAM,CAAC+D,cAAc,CAAC1G,QAAQ,CAACgI,SAAS,CAAC/H,KAAK,CAAC;cAChE,IAAMiI,OAAO,GAAGvF,MAAM,CAAC3C,QAAQ,CAACiI,WAAW,CAAChI,KAAK,CAAC;AAElD,cAAA,IAAMS,KAAU,GAAG;AACjBkD,gBAAAA,MAAM,EAAEc;eACT;AAED,cAAA,IAAMyD,OAAO,GAAGxF,MAAM,CAACnB,QAAQ,CAAC0G,OAAO,CAAC;AACxC,cAAA,IAAME,QAAQ,GAAGzF,MAAM,CAACnB,QAAQ,CAACiF,SAAQ,CAAC;cAC1C,IAAI4B,UAAU,GAAG5B,SAAQ;AAEzB,cAAA,IAAK0B,OAAO,CAAC9H,EAAE,KAAK+H,QAAQ,CAAC/H,EAAE,IAAM8H,OAAO,CAAChH,MAAM,KAAKiH,QAAQ,CAACjH,MAAO,EAAE;AACxEkH,gBAAAA,UAAU,MAAAnF,MAAA,CAAMiF,OAAO,CAAC9H,EAAE,EAAA,GAAA,CAAA,CAAA6C,MAAA,CAAIiF,OAAO,CAAChH,MAAM,EAAA,GAAA,CAAA,CAAA+B,MAAA,CAAIuD,SAAQ,CAAE;AAE1D,gBAAA,IAAI,CAACjE,QAAQ,CAAC6F,UAAU,CAAC,EAAE;AACzB7F,kBAAAA,QAAQ,CAAC6F,UAAU,CAAC,GAAG,SAAS;AAChC,kBAAA,IAAM1B,UAAS,GAAG;AAChBvF,oBAAAA,IAAI,EAAE,gBAAgB;AACtB6B,oBAAAA,MAAM,EAAE;sBACNhD,KAAK,EAAEkI,OAAO,CAAC9H,EAAE;sBACjBc,MAAM,EAAEgH,OAAO,CAAChH,MAAM;AACtB+F,sBAAAA,KAAK,EAAET;AACT;mBACD;AACHhE,kBAAAA,YAAY,CAACqD,GAAG,CAAC,MAAMnE,MAAM,CAACoE,SAAS,CAAC,CAACY,UAAS,CAAC,EAAEjC,aAAa,CAAC,CAAC;kBACpEjC,YAAY,CAACqD,GAAG,CAAC,MAAM;oBAAA,IAAAwC,kBAAA,EAAAC,qBAAA;AACrB/F,oBAAAA,QAAQ,CAAC6F,UAAU,CAAC,GAAA,CAAAC,kBAAA,GAAGvG,OAAO,CAAC8F,QAAQ,MAAA,IAAA,IAAAS,kBAAA,KAAA,KAAA,CAAA,IAAA,CAAAC,qBAAA,GAAhBD,kBAAA,CAAkBE,4BAA4B,MAAA,IAAA,IAAAD,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA9CA,qBAAA,CAAA7C,IAAA,CAAA4C,kBAAA,EAAiDH,OAAO,CAAC9H,EAAE,EAAE8H,OAAO,CAAChH,MAAM,EAAEsF,SAAQ,CAAC,CAACpG,EAAE;oBAChHK,KAAK,CAACkD,MAAM,GAAG,OAAO;AACxB,kBAAA,CAAC,CAAC;AACF,gBAAA;AACJ,cAAA,CAAC,MAAM;AACL,gBAAA,IAAI,CAACpB,QAAQ,CAAC6F,UAAU,CAAC,EAAE;kBACzB5F,YAAY,CAACqD,GAAG,CAAC,MAAM;oBAAA,IAAA2C,kBAAA,EAAAC,qBAAA;AACrBlG,oBAAAA,QAAQ,CAAC6F,UAAU,CAAC,GAAA,CAAAI,kBAAA,GAAG1G,OAAO,CAAC8F,QAAQ,MAAA,IAAA,IAAAY,kBAAA,KAAA,KAAA,CAAA,IAAA,CAAAC,qBAAA,GAAhBD,kBAAA,CAAkBE,qBAAqB,MAAA,IAAA,IAAAD,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAvCA,qBAAA,CAAAhD,IAAA,CAAA+C,kBAAA,EAA0ChC,SAAQ,CAAC,CAACpG,EAAE;oBAC7EK,KAAK,CAACkD,MAAM,GAAG,OAAO;AACxB,kBAAA,CAAC,CAAC;AACJ,gBAAA;AACF,cAAA;AAEE,cAAA,IAAMmD,cAAa,GAAGC,IAAI,EAAE;AAC5B,cAAA,IAAM4B,eAAe,GAAG5B,IAAI,EAAE;AAC9B,cAAA,IAAMC,WAAU,GAAGe,SAAS,CAACa,KAAK,GAAG;AACnC;AACA,cAAA;AACEzH,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACN7B,kBAAAA,IAAI,EAAE,KAAK;AACX8F,kBAAAA,KAAK,EAAET,SAAQ;AACfK,kBAAAA,OAAO,EAAE,KAAK;AACdK,kBAAAA,UAAU,EAAEJ,cAAa;kBACzB8B,KAAK,EAAEb,SAAS,CAACa;AACnB;eACD;AACD;AACA,cAAA;AACEzH,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACN7B,kBAAAA,IAAI,EAAE,OAAO;AACbnB,kBAAAA,KAAK,EAAEiI,OAAO;kBACdpB,OAAO,EAAEmB,WAAW,CAACnB,OAAO;AAC5BK,kBAAAA,UAAU,EAAEyB;AACd;eACD;AACD;AACA,cAAA;AACExH,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACNmE,kBAAAA,IAAI,EAAE;AACJhG,oBAAAA,IAAI,EAAE,KAAK;AACXnB,oBAAAA,KAAK,EAAEwG,SAAQ;AACfa,oBAAAA,QAAQ,EAAE;mBACX;AACDC,kBAAAA,EAAE,EAAE;AACFnG,oBAAAA,IAAI,EAAE,KAAK;AACX0F,oBAAAA,OAAO,EAAE,KAAK;AACdK,oBAAAA,UAAU,EAAEJ;AACd;AACF;eACD;AACD;AACA,cAAA;AACE3F,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACNmE,kBAAAA,IAAI,EAAE;AACJhG,oBAAAA,IAAI,EAAE,KAAK;AACX+F,oBAAAA,UAAU,EAAEJ,cAAa;AACzBO,oBAAAA,QAAQ,EAAE;mBACX;AACDC,kBAAAA,EAAE,EAAE;AACFnG,oBAAAA,IAAI,EAAE,KAAK;AACX+F,oBAAAA,UAAU,EAAEyB,eAAe;oBAC3B9B,OAAO,EAAEmB,WAAW,CAACnB;AACvB;AACF;AACF,eAAC,CACF,GAAG;AACF;AACA,cAAA;AACE1F,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACN7B,kBAAAA,IAAI,EAAE,OAAO;AACbnB,kBAAAA,KAAK,EAAEiI,OAAO;kBACdpB,OAAO,EAAEmB,WAAW,CAACnB,OAAO;AAC5BK,kBAAAA,UAAU,EAAEyB;AACd;eACD;AACD;AACA,cAAA;AACExH,gBAAAA,IAAI,EAAE,WAAW;AACjB6B,gBAAAA,MAAM,EAAE;AACNmE,kBAAAA,IAAI,EAAE;AACJhG,oBAAAA,IAAI,EAAE,KAAK;AACXnB,oBAAAA,KAAK,EAAEwG,SAAQ;AACfa,oBAAAA,QAAQ,EAAE;mBACX;AACDC,kBAAAA,EAAE,EAAE;AACFnG,oBAAAA,IAAI,EAAE,KAAK;AACX+F,oBAAAA,UAAU,EAAEyB,eAAe;oBAC3B9B,OAAO,EAAEmB,WAAW,CAACnB;AACvB;AACF;AACF,eAAC,CACJ;AACDb,cAAAA,OAAO,CAACY,GAAG,CAAC,UAAU,EAAEI,WAAU,CAAC;cACnCxE,YAAY,CAACqD,GAAG,CAAC,MAAM;gBAAA,IAAAgD,kBAAA,EAAAC,qBAAA;AACrB,gBAAA,OAAA,CAAAD,kBAAA,GAAO/G,OAAO,CAAC8F,QAAQ,MAAA,IAAA,IAAAiB,kBAAA,KAAA,KAAA,CAAA,IAAA,CAAAC,qBAAA,GAAhBD,kBAAA,CAAkBf,aAAa,cAAAgB,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAA/BA,qBAAA,CAAArD,IAAA,CAAAoD,kBAAA,EAAkCtG,QAAQ,CAAC6F,UAAU,CAAC,EAAEpB,WAAU,EAAEvG,KAAK,CAACkD,MAAM,CAAC;AAC1F,cAAA,CAAC,CAAC;AACF,YAAA;AACF,UAAA,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOoC,KAAK,EAAE;AACdC,UAAAA,OAAO,CAACD,KAAK,CAAC,kCAAkC,EAAEA,KAAK,CAAC;AAC1D,QAAA;QAEF,IAAIpC,MAAM,KAAK,UAAU,EAAE;UACzBnB,YAAY,CAACqD,GAAG,CAAC,MAAM;AACrBnE,YAAAA,MAAM,CAACoE,SAAS,CAAC,EAAE,EAAEnC,MAAM,CAAC;YAC5BoF,MAAM,CAACC,OAAO,CAACzG,QAAQ,CAAC,CAACuC,OAAO,CAACmE,KAAA,IAAa;cAAA,IAAAC,kBAAA,EAAAC,qBAAA;AAAA,cAAA,IAAZ,CAACC,CAAC,EAAEhJ,EAAE,CAAC,GAAA6I,KAAA;cACvC,CAAAC,kBAAA,GAAApH,OAAO,CAAC8F,QAAQ,MAAA,IAAA,IAAAsB,kBAAA,KAAA,MAAA,IAAA,CAAAC,qBAAA,GAAhBD,kBAAA,CAAkBpB,aAAa,MAAA,IAAA,IAAAqB,qBAAA,KAAA,MAAA,IAA/BA,qBAAA,CAAA1D,IAAA,CAAAyD,kBAAA,EAAkC9I,EAAE,EAAE,EAAE,EAAEuD,MAAM,CAAC;AACnD,YAAA,CAAC,CAAC;AACJ,UAAA,CAAC,CAAC;AACJ,QAAA;AACA,MAAA;AAEA,MAAA,OAAwBoF,MAAM,CAACC,OAAO,CAAC1G,iBAAiB,CAAC,CAAC+G,MAAM,CAAC,CAACC,GAAG,EAAAC,KAAA,KAA0B;AAAA,QAAA,IAAxB,CAAClG,QAAQ,EAAED,OAAO,CAAC,GAAAmG,KAAA;AACxF,QAAA,OAAOD,GAAG,CAAC1D,OAAO,CAACvC,QAAQ,EAAED,OAAO,CAAC;MACvC,CAAC,EAAEQ,cAAc,CAAC;IACpB,CAAC;IACD4F,OAAOA,CAAAC,KAAA,EAAqB;AAAA,MAAA,IAAAC,qBAAA;MAAA,IAApB;QAAEhG,KAAK;AAAEN,QAAAA;AAAQ,OAAC,GAAAqG,KAAA;MACxB,IAAI5F,OAAY,GAAG,EAAE;AACrB,MAAA,IAAME,WAAW,GAAGC,QAAQ,CAACN,KAAK,EAAE;AAACO,QAAAA,OAAO,EAAE;AAAO,OAAC,CAAC;AAEvD+B,MAAAA,OAAO,CAACY,GAAG,CAAC,SAAS,EAAElD,KAAK,CAAC;AAC7BsC,MAAAA,OAAO,CAACY,GAAG,CAAC,UAAU,EAAElE,MAAM,CAAC;MAE/B,IAAI,CAACqB,WAAW,EAAE;QAChB,OAAO;AACL4F,UAAAA,UAAU,EAAEvG,OAAO;AACnBwG,UAAAA,cAAc,EAAExG;SACjB;AACH,MAAA;AACAS,MAAAA,OAAO,GAAG9B,mBAAmB,CAAA,CAAA2H,qBAAA,GAAC3F,WAAW,CAACX,OAAO,MAAA,IAAA,IAAAsG,qBAAA,KAAA,MAAA,GAAAA,qBAAA,GAAI,EAAE,CAAC;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA7F,MAAAA,OAAO,GAAGS,UAAU,CAACT,OAAO,EAAE;QAC5BzB,MAAM;AACNF,QAAAA;AACF,OAAC,CAAC;AAEF8D,MAAAA,OAAO,CAACY,GAAG,CAAC,wBAAwB,EAAEjC,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAAChB,OAAO,CAAC,CAAC,CAAC;MAE1E,IAAI;AAAA,QAAA,IAAAgG,QAAA;AACF,QAAA,IAAMF,UAAU,GAAGG,eAAe,CAAC1G,OAAO,CAAC;QAC3C,IAAM6C,cAAc,GAAG,CAAA4D,QAAA,GAAAhG,OAAO,MAAA,IAAA,IAAAgG,QAAA,KAAA,KAAA,CAAA,IAAPA,QAAA,CAASrF,MAAM,GAAG0B,4BAA4B,CAACrC,OAAO,EAAEnC,MAAM,CAACyE,qBAAqB,CAAC,GAAG,EAAE;AACjH,QAAA,IAAM4D,OAAO,GAAG,CAACJ,UAAU,GAAA,EAAA,CAAA1G,MAAA,CAAM0G,UAAU,EAAA,MAAA,CAAA,GAAS,EAAE,KAAK1D,cAAc,GAAA,wCAAA,CAAAhD,MAAA,CAAcgD,cAAc,CAAA,GAAK,UAAU,CAAC;QAErH,OAAO;AACL0D,UAAAA,UAAU,EAAEI,OAAO;AACnBH,UAAAA,cAAc,EAAEG;SACjB;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACI,MAAA,CAAC,CAAC,OAAOhE,KAAK,EAAE,CAEhB;MAEA,OAAO;AACL4D,QAAAA,UAAU,EAAE,SAAS;AACrBC,QAAAA,cAAc,EAAE;OACjB;AACH,IAAA;GACD;AACH;AAEA,SAAStF,UAAUA,CAACT,OAAc,EAAAmG,KAAA,EAM/B;EAAA,IANiC;IAClC5H,MAAM;AACNF,IAAAA;AAIF,GAAC,GAAA8H,KAAA;AACC,EAAA,OAAO,CAACnG,OAAO,KAAA,IAAA,IAAPA,OAAO,KAAA,MAAA,GAAPA,OAAO,GAAI,EAAE,EAAEoG,GAAG,CAAClF,MAAM,IAAI;AACnC,IAAA,IAAIA,MAAM,CAAC/E,KAAK,KAAKoC,MAAM,IAAI2C,MAAM,CAAC5D,IAAI,KAAK,UAAU,IAAI4D,MAAM,CAACK,MAAM,KAAK,YAAY,EAAE;MAC3FL,MAAM,CAAC/E,KAAK,GAAG,QAAQ;AACzB,IAAA;AAEA,IAAA,IAAI+E,MAAM,CAAC/E,KAAK,KAAKkC,MAAM,EAAE;MAC3B6C,MAAM,CAAC/E,KAAK,GAAG,QAAQ;AACzB,IAAA;AACA,IAAA,OAAO+E,MAAM;AACf,EAAA,CAAC,CAAC;AACJ;;AAEA;;AAKA;AACO,SAASmF,iBAAiBA,CAAClH,MAAqC,EAAE;EACvE,OAAO;AACLL,IAAAA,IAAI,EAAEpD,IAAI;AACVyD,IAAAA,MAAM,EAAE;AACNO,MAAAA,QAAQ,EAAEP,MAAM,KAAA,IAAA,IAANA,MAAM,KAAA,MAAA,GAAA,MAAA,GAANA,MAAM,CAAEO;AACpB;GACD;AACH;;;;"}
@@ -0,0 +1,31 @@
1
+ import generateUiContent, { GenerateUiContent } from './generate-ui-content.js';
2
+ import analyzeRequirementAndComponents, { AnalyzeRequirementAndComponents } from './analyze-requirement-and-components.js';
3
+ import refactorUiContent, { RefactorUiContent } from './refactor-ui-content.js';
4
+ import analyzeAndExpandPrd from './analyze-and-expand-prd.js';
5
+ import openDsl from './open-dsl.js';
6
+ import answerUserQuestion from './answer.js';
7
+ import buildProcess, { BuildProcess } from './build-process.js';
8
+ import codingSubagentAsTool from './coding-subagent-as-tool.js';
9
+ import '../_virtual/_rollupPluginBabelHelpers.js';
10
+ import 'jsonrepair';
11
+ import '../agents/workspace/components-manager.js';
12
+
13
+ var MYBRICKS_TOOLS = {
14
+ GenerateUiContent: generateUiContent,
15
+ AnalyzeRequirementAndComponents: analyzeRequirementAndComponents,
16
+ RefactorUiContent: refactorUiContent,
17
+ AnalyzeAndExpandPrd: analyzeAndExpandPrd,
18
+ OpenDsl: openDsl,
19
+ Answer: answerUserQuestion,
20
+ BuildProcess: buildProcess,
21
+ CodingSubagentAsTool: codingSubagentAsTool
22
+ };
23
+ var MyBricksParamsTools = {
24
+ GenerateUiContent: GenerateUiContent,
25
+ AnalyzeRequirementAndComponents: AnalyzeRequirementAndComponents,
26
+ RefactorUiContent: RefactorUiContent,
27
+ BuildProcess: BuildProcess
28
+ };
29
+
30
+ export { MYBRICKS_TOOLS, MyBricksParamsTools };
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/tools/index.ts"],"sourcesContent":["import GenerateUiContent, { GenerateUiContent as GenerateUiContentParamsTool } from './generate-ui-content';\nimport AnalyzeRequirementAndComponents, { AnalyzeRequirementAndComponents as AnalyzeRequirementAndComponentsParamsTool } from './analyze-requirement-and-components';\nimport RefactorUiContent, { RefactorUiContent as RefactorUiContentParamsTool } from './refactor-ui-content'\nimport AnalyzeAndExpandPrd from './analyze-and-expand-prd';\nimport OpenDsl from './open-dsl';\nimport Answer from './answer';\nimport BuildProcess, { BuildProcess as BuildProcessParamsTool } from \"./build-process\";\nimport CodingSubagentAsTool from './coding-subagent-as-tool';\n\nexport const MYBRICKS_TOOLS = {\n GenerateUiContent,\n AnalyzeRequirementAndComponents,\n RefactorUiContent,\n AnalyzeAndExpandPrd,\n OpenDsl,\n Answer,\n BuildProcess,\n CodingSubagentAsTool\n}\n\nexport const MyBricksParamsTools = {\n GenerateUiContent: GenerateUiContentParamsTool,\n AnalyzeRequirementAndComponents: AnalyzeRequirementAndComponentsParamsTool,\n RefactorUiContent: RefactorUiContentParamsTool,\n BuildProcess: BuildProcessParamsTool,\n}\n\nexport * from './utils'"],"names":["MYBRICKS_TOOLS","GenerateUiContent","AnalyzeRequirementAndComponents","RefactorUiContent","AnalyzeAndExpandPrd","OpenDsl","Answer","BuildProcess","CodingSubagentAsTool","MyBricksParamsTools","GenerateUiContentParamsTool","AnalyzeRequirementAndComponentsParamsTool","RefactorUiContentParamsTool","BuildProcessParamsTool"],"mappings":";;;;;;;;;;;;AASO,IAAMA,cAAc,GAAG;qBAC5BC,iBAAiB;mCACjBC,+BAA+B;qBAC/BC,iBAAiB;uBACjBC,mBAAmB;WACnBC,OAAO;UACPC,kBAAM;gBACNC,YAAY;AACZC,wBAAAA;AACF;AAEO,IAAMC,mBAAmB,GAAG;AACjCR,EAAAA,iBAAiB,EAAES,iBAA2B;AAC9CR,EAAAA,+BAA+B,EAAES,+BAAyC;AAC1ER,EAAAA,iBAAiB,EAAES,iBAA2B;AAC9CL,EAAAA,YAAY,EAAEM;AAChB;;;;"}
@@ -0,0 +1,49 @@
1
+ import '../_virtual/_rollupPluginBabelHelpers.js';
2
+ import { RxaiError } from '../rxai/src/error/base.js';
3
+ import '../rxai/node_modules/idb/build/index.js';
4
+ import 'node-forge';
5
+
6
+ var NAME = 'open-dsl-document';
7
+ openDsl.toolName = NAME;
8
+ function openDsl(config) {
9
+ return {
10
+ name: NAME,
11
+ displayName: "读取上下文",
12
+ description: "\u6253\u5F00\u5E76\u83B7\u53D6\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u9700\u6C42\u6240\u5173\u8054\u7684DSL\u6587\u6863\uFF08\u5305\u542B\u5F53\u524D\u753B\u5E03/\u7EC4\u4EF6DSL\u53CA\u5176\u6240\u6709\u5B50\u7EC4\u4EF6DSL\uFF09\uFF0C\u7528\u4E8E\u540E\u7EED\u5B8C\u6210\u9700\u6C42\u4F7F\u7528\u3002\n\u53C2\u6570(ids)\uFF1A\u753B\u5E03ID/\u7EC4\u4EF6ID\u5217\u8868\uFF0C\u652F\u6301\u6279\u91CF\uFF0C\u6279\u91CFID\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF1B\n\u5DE5\u5177\u5206\u7C7B\uFF1A\u4FE1\u606F\u83B7\u53D6\u7C7B\n\u4F55\u65F6\u4F7F\u7528\uFF1A\u4EFB\u4F55\u65F6\u5019\u548C\u642D\u5EFA\u6709\u5173\u7684\u63D0\u95EE\uFF0C\u90FD\u5E94\u8BE5\u5148\u83B7\u53D6DSL\u6587\u6863\u770B\u770B\uFF0C\u6709\u53EF\u80FD\u9700\u8981\u53C2\u8003\u753B\u5E03\u7EA7DSL\uFF08\u6BD4\u5982\u9875\u9762DSL\uFF09\u6765\u7406\u89E3\u5F53\u524D\u9700\u6C42\u3002\n\nDSL\u5B9A\u4E49\uFF1A\u5C06\u642D\u5EFA\u4FE1\u606F\u603B\u7ED3\u6210\u53EF\u89C6\u5316\u7684\u7C7BJSX\u6811\u72B6\u7ED3\u6784\uFF0C\u5305\u542B\u5F53\u524D\u7EC4\u4EF6\u53CA\u5176\u5B50\u7EC4\u4EF6\u7684\u5C3A\u5BF8\u3001\u4F4D\u7F6E\u3001\u6837\u5F0F\u3001\u6807\u9898\u3001\u7EC4\u4EF6\u914D\u7F6E\u7B49\u4FE1\u606F\u3002\n\n\u805A\u7126\u4FE1\u606F\u91CC\u7ED9\u51FA\u4E86\u7B80\u7565\u7684\u6587\u6863\u4FE1\u606F\uFF0C\u5982\u679C\u6CA1\u53D1\u73B0\u5EFA\u8BAE\u641C\u7D22\u66F4\u4E0A\u5C42\u7684\u8303\u56F4\u53BB\u67E5\u627E\u3002\n\n**DSL \u6587\u6863\u9009\u53D6\u7B56\u7565\uFF1A**\n1. \u4F18\u5148\u83B7\u53D6\u6700\u8FD1\u5171\u540C\u7956\u5148 DSL\uFF08\u5173\u952E\u539F\u5219\uFF09\uFF1A\u7531\u4E8E\u5305\u542B\u6240\u6709\u5B50\u7EC4\u4EF6DSL\uFF0C\u6240\u4EE5\u83B7\u53D6\u5171\u540C\u7956\u5148\u662F\u6700\u7B80\u5355\u7684\u65B9\u5F0F\uFF0C\u6BD4\u5982\n 1.1 \u9700\u6C42\u662F\u201C\u53C2\u8003\u7EC4\u4EF6 A \u4FEE\u6539\u7EC4\u4EF6 B\u201D\uFF0C\u5219\u5E94\u83B7\u53D6 A \u4E0E B \u7684\u6700\u8FD1\u5171\u540C\u7956\u5148 DSL\uFF1B\n 1.2 \u5F53\u4F20\u5165\u591A\u4E2A\u7EC4\u4EF6 ID \u65F6\uFF0C\u5E94\u4F18\u5148\u67E5\u627E\u5E76\u8FD4\u56DE\u5B83\u4EEC\u6700\u8FD1\u7684\u6700\u8FD1\u5171\u540C\u7956\u5148 DSL \u6587\u6863\uFF1B\n2. \u907F\u514D\u91CD\u590D\u52A0\u8F7D\uFF1A\u82E5\u5DF2\u52A0\u8F7D\u67D0\u753B\u5E03\u7684\u5B8C\u6574 DSL\uFF0C\u5219\u65E0\u9700\u518D\u5355\u72EC\u52A0\u8F7D\u8BE5\u753B\u5E03\u5185\u7684\u7EC4\u4EF6 DSL;\n3. \u5B8C\u6574\u5305\u542B\uFF1A\u8981\u4FEE\u6539\u7684\u76EE\u6807\u53EF\u80FD\u4E0D\u5728\u805A\u7126\u7684\u7EC4\u4EF6\u5185\uFF0C\u4E5F\u9700\u8981\u83B7\u53D6\u5176DSL;\n\n**\u91CD\u8981\u8BF4\u660E\uFF1A** \n- \u907F\u514D\u8FC7\u5EA6\u52A0\u8F7D\u65E0\u5173\u5C42\u7EA7\u6216\u5197\u4F59\u5185\u5BB9\u3002\n- \u6240\u6709\u901A\u8FC7\u672C\u64CD\u4F5C\u6253\u5F00\u7684 DSL \u6587\u4EF6\u4EC5\u5728\u5F53\u524D\u8F6E\u6B21\u6709\u6548\u3002 \n- \u82E5\u9700\u4F7F\u7528\u5386\u53F2\u5BF9\u8BDD\u4E2D\u66FE\u6253\u5F00\u8FC7\u7684\u6587\u4EF6\uFF0C\u5FC5\u987B\u5728\u672C\u8F6E\u91CD\u65B0\u8C03\u7528\u6253\u5F00\u64CD\u4F5C\u3002 \n\n> \u26A0\uFE0F \u6CE8\u610F\uFF1A\u5728\u8C03\u7528\u4EFB\u4F55\u5DE5\u5177\u524D\uFF0C\u5FC5\u987B\u5148\u6267\u884C\u672C\u6307\u4EE4\u4EE5\u786E\u4FDD\u83B7\u53D6\u6B63\u786E\u7684\u4E0A\u4E0B\u6587 DSL\u3002\n",
13
+ execute(_ref) {
14
+ var {
15
+ params
16
+ } = _ref;
17
+ var ids = params.ids;
18
+
19
+ // 兼容key使用错误的情况
20
+ if (!ids && Object.keys(params).length) {
21
+ ids = params[Object.keys(params)[0]];
22
+ }
23
+ if (ids && ids.split(',')) {
24
+ var idsAry = ids.split(',');
25
+ if (idsAry.length === 0) {
26
+ throw new RxaiError("\u5DE5\u5177 ".concat(NAME, " \u7684\u8C03\u7528\u7F3A\u5C11 ids \u53C2\u6570\uFF0C\u8BF7\u91CD\u65B0\u89C4\u5212"), "retry", '没有要读取的上下文,请重试');
27
+ }
28
+ idsAry.forEach(id => {
29
+ try {
30
+ var _config$onOpen;
31
+ (_config$onOpen = config.onOpen) === null || _config$onOpen === void 0 || _config$onOpen.call(config, id);
32
+ } catch (error) {
33
+ console.warn(error);
34
+ throw new RxaiError("\u5DE5\u5177 ".concat(NAME, " \u7684\u8C03\u7528\u5931\u8D25\uFF0C\u8BFB\u53D6").concat(id, "\u7684\u6587\u6863\u5931\u8D25\uFF0C\u9519\u8BEF\u4FE1\u606F\u4E3A").concat(error === null || error === void 0 ? void 0 : error.message, "\uFF0C\u8BF7\u91CD\u65B0\u89C4\u5212"), "retry", "\u8BFB\u53D6\u4E0A\u4E0B\u6587".concat(id, "\u7684\u4FE1\u606F\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"));
35
+ }
36
+ });
37
+ } else {
38
+ throw new RxaiError("\u5DE5\u5177 ".concat(NAME, " \u7684\u8C03\u7528\u7F3A\u5C11 ids \u53C2\u6570\uFF0C\u8BF7\u91CD\u65B0\u89C4\u5212"), "retry", '读取上下文失败,请重试');
39
+ }
40
+ return {
41
+ llmContent: "已打开",
42
+ displayContent: "已成功读取上下文"
43
+ };
44
+ }
45
+ };
46
+ }
47
+
48
+ export { openDsl as default };
49
+ //# sourceMappingURL=open-dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-dsl.js","sources":["../../src/tools/open-dsl.ts"],"sourcesContent":["import { fileFormat, RxaiError } from '@mybricks/rxai'\n\ninterface ToolParams {\n onOpen?: (id: string) => void\n}\n\nconst NAME = 'open-dsl-document'\nopenDsl.toolName = NAME\n\nexport default function openDsl(config: ToolParams, ): any {\n return {\n name: NAME,\n displayName: \"读取上下文\",\n description: `打开并获取工作空间中需求所关联的DSL文档(包含当前画布/组件DSL及其所有子组件DSL),用于后续完成需求使用。\n参数(ids):画布ID/组件ID列表,支持批量,批量ID用英文逗号分隔;\n工具分类:信息获取类\n何时使用:任何时候和搭建有关的提问,都应该先获取DSL文档看看,有可能需要参考画布级DSL(比如页面DSL)来理解当前需求。\n\nDSL定义:将搭建信息总结成可视化的类JSX树状结构,包含当前组件及其子组件的尺寸、位置、样式、标题、组件配置等信息。\n\n聚焦信息里给出了简略的文档信息,如果没发现建议搜索更上层的范围去查找。\n\n**DSL 文档选取策略:**\n1. 优先获取最近共同祖先 DSL(关键原则):由于包含所有子组件DSL,所以获取共同祖先是最简单的方式,比如\n 1.1 需求是“参考组件 A 修改组件 B”,则应获取 A 与 B 的最近共同祖先 DSL;\n 1.2 当传入多个组件 ID 时,应优先查找并返回它们最近的最近共同祖先 DSL 文档;\n2. 避免重复加载:若已加载某画布的完整 DSL,则无需再单独加载该画布内的组件 DSL;\n3. 完整包含:要修改的目标可能不在聚焦的组件内,也需要获取其DSL;\n\n**重要说明:** \n- 避免过度加载无关层级或冗余内容。\n- 所有通过本操作打开的 DSL 文件仅在当前轮次有效。 \n- 若需使用历史对话中曾打开过的文件,必须在本轮重新调用打开操作。 \n\n> ⚠️ 注意:在调用任何工具前,必须先执行本指令以确保获取正确的上下文 DSL。\n`,\n execute({ params }) {\n let ids = params.ids\n\n // 兼容key使用错误的情况\n if (!ids && Object.keys(params).length) {\n ids = params[Object.keys(params)[0]]\n }\n\n if (ids && ids.split(',')) {\n const idsAry = ids.split(',')\n\n if (idsAry.length === 0) {\n throw new RxaiError(`工具 ${NAME} 的调用缺少 ids 参数,请重新规划`, \"retry\", '没有要读取的上下文,请重试')\n }\n\n idsAry.forEach(id => {\n try {\n config.onOpen?.(id)\n } catch (error) {\n console.warn(error)\n throw new RxaiError(`工具 ${NAME} 的调用失败,读取${id}的文档失败,错误信息为${error?.message},请重新规划`, \"retry\", `读取上下文${id}的信息失败,请重试`)\n }\n })\n } else {\n throw new RxaiError(`工具 ${NAME} 的调用缺少 ids 参数,请重新规划`, \"retry\", '读取上下文失败,请重试')\n }\n return {\n llmContent: \"已打开\",\n displayContent: \"已成功读取上下文\"\n }\n },\n }\n}"],"names":["NAME","openDsl","toolName","config","name","displayName","description","execute","_ref","params","ids","Object","keys","length","split","idsAry","RxaiError","concat","forEach","id","_config$onOpen","onOpen","call","error","console","warn","message","llmContent","displayContent"],"mappings":";;;;;AAMA,IAAMA,IAAI,GAAG,mBAAmB;AAChCC,OAAO,CAACC,QAAQ,GAAGF,IAAI;AAER,SAASC,OAAOA,CAACE,MAAkB,EAAS;EACzD,OAAO;AACLC,IAAAA,IAAI,EAAEJ,IAAI;AACVK,IAAAA,WAAW,EAAE,OAAO;AACpBC,IAAAA,WAAW,EAAA,onGAsBd;IACGC,OAAOA,CAAAC,IAAA,EAAa;MAAA,IAAZ;AAAEC,QAAAA;AAAO,OAAC,GAAAD,IAAA;AAChB,MAAA,IAAIE,GAAG,GAAGD,MAAM,CAACC,GAAG;;AAEpB;MACA,IAAI,CAACA,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,CAACI,MAAM,EAAE;AACtCH,QAAAA,GAAG,GAAGD,MAAM,CAACE,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACtC,MAAA;MAEA,IAAIC,GAAG,IAAIA,GAAG,CAACI,KAAK,CAAC,GAAG,CAAC,EAAE;AACzB,QAAA,IAAMC,MAAM,GAAGL,GAAG,CAACI,KAAK,CAAC,GAAG,CAAC;AAE7B,QAAA,IAAIC,MAAM,CAACF,MAAM,KAAK,CAAC,EAAE;UACvB,MAAM,IAAIG,SAAS,CAAA,eAAA,CAAAC,MAAA,CAAOjB,IAAI,EAAA,sFAAA,CAAA,EAAuB,OAAO,EAAE,eAAe,CAAC;AAChF,QAAA;AAEAe,QAAAA,MAAM,CAACG,OAAO,CAACC,EAAE,IAAI;UACnB,IAAI;AAAA,YAAA,IAAAC,cAAA;AACF,YAAA,CAAAA,cAAA,GAAAjB,MAAM,CAACkB,MAAM,MAAA,IAAA,IAAAD,cAAA,KAAA,KAAA,CAAA,IAAbA,cAAA,CAAAE,IAAA,CAAAnB,MAAM,EAAUgB,EAAE,CAAC;UACrB,CAAC,CAAC,OAAOI,KAAK,EAAE;AACdC,YAAAA,OAAO,CAACC,IAAI,CAACF,KAAK,CAAC;YACnB,MAAM,IAAIP,SAAS,CAAA,eAAA,CAAAC,MAAA,CAAOjB,IAAI,EAAA,mDAAA,CAAA,CAAAiB,MAAA,CAAYE,EAAE,EAAA,oEAAA,CAAA,CAAAF,MAAA,CAAcM,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,MAAA,GAAA,MAAA,GAALA,KAAK,CAAEG,OAAO,EAAA,sCAAA,CAAA,EAAU,OAAO,EAAA,gCAAA,CAAAT,MAAA,CAAUE,EAAE,EAAA,wDAAA,CAAW,CAAC;AACnH,UAAA;AACF,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,MAAM;QACL,MAAM,IAAIH,SAAS,CAAA,eAAA,CAAAC,MAAA,CAAOjB,IAAI,EAAA,sFAAA,CAAA,EAAuB,OAAO,EAAE,aAAa,CAAC;AAC9E,MAAA;MACA,OAAO;AACL2B,QAAAA,UAAU,EAAE,KAAK;AACjBC,QAAAA,cAAc,EAAE;OACjB;AACH,IAAA;GACD;AACH;;;;"}