wechen-agent-editor-v1 1.0.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.
- package/LICENSE +21 -0
- package/README.md +196 -0
- package/dist/WechenAgentEditor.d.ts +51 -0
- package/dist/WechenAgentEditor.d.ts.map +1 -0
- package/dist/WechenAgentEditorContext.d.ts +10 -0
- package/dist/WechenAgentEditorContext.d.ts.map +1 -0
- package/dist/config/componentLibraryConfig.d.ts +77 -0
- package/dist/config/componentLibraryConfig.d.ts.map +1 -0
- package/dist/config/componentLibraryDynamic.d.ts +10 -0
- package/dist/config/componentLibraryDynamic.d.ts.map +1 -0
- package/dist/config/componentLibraryIconTypes.d.ts +6 -0
- package/dist/config/componentLibraryIconTypes.d.ts.map +1 -0
- package/dist/flow/WechenAgentEdgeFlowStyles.d.ts +6 -0
- package/dist/flow/WechenAgentEdgeFlowStyles.d.ts.map +1 -0
- package/dist/flow/dragPayload.d.ts +11 -0
- package/dist/flow/dragPayload.d.ts.map +1 -0
- package/dist/flow/dropNodes.d.ts +12 -0
- package/dist/flow/dropNodes.d.ts.map +1 -0
- package/dist/flow/flowJsonUtils.d.ts +15 -0
- package/dist/flow/flowJsonUtils.d.ts.map +1 -0
- package/dist/flow/initialFlow.d.ts +9 -0
- package/dist/flow/initialFlow.d.ts.map +1 -0
- package/dist/flow/mergeNodeData.d.ts +11 -0
- package/dist/flow/mergeNodeData.d.ts.map +1 -0
- package/dist/flow/nodeTypes.d.ts +9 -0
- package/dist/flow/nodeTypes.d.ts.map +1 -0
- package/dist/flow/nodes/CardNode.d.ts +3 -0
- package/dist/flow/nodes/CardNode.d.ts.map +1 -0
- package/dist/flow/nodes/MainAgentNode.d.ts +3 -0
- package/dist/flow/nodes/MainAgentNode.d.ts.map +1 -0
- package/dist/flow/nodes/PillNode.d.ts +3 -0
- package/dist/flow/nodes/PillNode.d.ts.map +1 -0
- package/dist/flow/wechenAgentEdgeTypes.d.ts +11 -0
- package/dist/flow/wechenAgentEdgeTypes.d.ts.map +1 -0
- package/dist/flowTypes.d.ts +118 -0
- package/dist/flowTypes.d.ts.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9309 -0
- package/dist/index.js.map +1 -0
- package/dist/panels/ComponentLibraryPanel.d.ts +6 -0
- package/dist/panels/ComponentLibraryPanel.d.ts.map +1 -0
- package/dist/panels/EdgeConfigPanel.d.ts +8 -0
- package/dist/panels/EdgeConfigPanel.d.ts.map +1 -0
- package/dist/panels/NodeConfigPanel.d.ts +25 -0
- package/dist/panels/NodeConfigPanel.d.ts.map +1 -0
- package/dist/panels/RightConfigPanel.d.ts +17 -0
- package/dist/panels/RightConfigPanel.d.ts.map +1 -0
- package/dist/panels/libraryIconRender.d.ts +7 -0
- package/dist/panels/libraryIconRender.d.ts.map +1 -0
- package/dist/panels/libraryPalette.d.ts +5 -0
- package/dist/panels/libraryPalette.d.ts.map +1 -0
- package/dist/panels/paletteAntIcon.d.ts +18 -0
- package/dist/panels/paletteAntIcon.d.ts.map +1 -0
- package/dist/wechenAgentConfigPanel.d.ts +32 -0
- package/dist/wechenAgentConfigPanel.d.ts.map +1 -0
- package/package.json +75 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# @li/wechen-agent
|
|
2
|
+
|
|
3
|
+
**@li/wechen-agent** 是一个可发布的 **Agent 流程编排编辑器** React 组件库:**画布上的图语义为可执行的 AI 流程**——**节点** 表示 **功能模块**,**连线** 表示 **执行顺序 / 控制流**(不是仅画关系图);持久化的 `flow` 供宿主 **运行时或执行引擎** 消费。技术形态为左侧组件库(**可拖入画布**)、中间 **@xyflow/react** 画布、右侧 **节点 / 连线** 配置(antd + **Monaco Editor** 编辑 System Prompt 等)。适用于在宿主应用中嵌入「可执行 Agent / MCP 编排」类界面。
|
|
4
|
+
|
|
5
|
+
> **BREAKING(包名)**:若你曾使用旧包名 `my-react-antd-widget`,请改为安装本包并更新 import。
|
|
6
|
+
> **BREAKING(peer)**:自 Monaco 集成起,宿主必须安装 **`monaco-editor`** 与 **`@monaco-editor/react`**,并配置 **Monaco worker**(见下文)。
|
|
7
|
+
> **BREAKING(initialFlow)**:未传 `initialFlow` 时为 **空画布**(无内置示例节点)。若依赖旧版「零配置即出现示例图」,请显式传入 `initialFlow={cloneWechenAgentFlow(defaultInitialFlow)}`(需同时 import `cloneWechenAgentFlow` 与 `defaultInitialFlow`)。
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 依赖(peer)
|
|
11
|
+
|
|
12
|
+
宿主应用 **必须** 自行安装:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @li/wechen-agent react react-dom antd @xyflow/react monaco-editor @monaco-editor/react
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
若你发布为 **非 scoped** 包,将命令中的 `@li/wechen-agent` 换成 `package.json` 里的实际 `name`。
|
|
19
|
+
|
|
20
|
+
- `react` / `react-dom`:建议 18+
|
|
21
|
+
- `antd`:建议 5+
|
|
22
|
+
- `@xyflow/react`:建议 12+(React Flow,拖拽编排核心)
|
|
23
|
+
- `monaco-editor` + `@monaco-editor/react`:与根目录 `peerDependencies` 大版本对齐(用于 System Prompt 等代码编辑)
|
|
24
|
+
|
|
25
|
+
### 从包导入(ESM)
|
|
26
|
+
|
|
27
|
+
本包以 **ESM** 发布(`package.json` 的 `exports["."].import`)。典型写法:
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import "@xyflow/react/dist/style.css";
|
|
31
|
+
import {
|
|
32
|
+
WechenAgentEditor,
|
|
33
|
+
cloneWechenAgentFlow,
|
|
34
|
+
defaultInitialFlow,
|
|
35
|
+
type WechenAgentEditorRef,
|
|
36
|
+
type WechenAgentSnapshot,
|
|
37
|
+
} from "@li/wechen-agent";
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**主要导出一览**(完整列表以 `src/index.ts` 为准):
|
|
41
|
+
|
|
42
|
+
| 类别 | 示例符号 |
|
|
43
|
+
|------|-----------|
|
|
44
|
+
| 组件 | `WechenAgentEditor` |
|
|
45
|
+
| Ref / 快照 / Flow | `WechenAgentEditorRef`, `WechenAgentSnapshot`, `WechenAgentFlowJson` |
|
|
46
|
+
| 顶栏自定义 | `WechenAgentHeaderActionsRenderContext`(与 `renderHeaderActions` 搭配) |
|
|
47
|
+
| 右侧配置扩展 | `WechenAgentRenderConfigPanelFn`、`WechenAgentConfigPanelContext` 等 |
|
|
48
|
+
| 组件库 | `getDefaultComponentLibraryGroups`、`COMPONENT_LIBRARY_GROUP_MAIN`、动态 `appendComponentToLibrary` … |
|
|
49
|
+
| Flow 工具 | `cloneWechenAgentFlow`、`parseWechenAgentFlowJson`、`mergeNodeData`、`emptyInitialFlow` … |
|
|
50
|
+
| 拖放协议 | `WECHEN_AGENT_FLOW_DRAG_MIME`、`encodePaletteDragPayload` … |
|
|
51
|
+
|
|
52
|
+
### 样式
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import "@xyflow/react/dist/style.css";
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Monaco 由 `@monaco-editor/react` 加载;**worker 需在宿主侧配置**,否则编辑器无法初始化。可选方式:
|
|
59
|
+
|
|
60
|
+
1. **Vite**:在入口最早执行处设置 `MonacoEnvironment` 并使用 `monaco-editor/.../editor.worker?worker` 等(参考本仓库 `playground/src/monacoBootstrap.ts`)。
|
|
61
|
+
2. **官方文档**:[Monaco Editor](https://github.com/microsoft/monaco-editor) 与 [@monaco-editor/react](https://github.com/suren-atoyan/monaco-react) 中的 Vite / Webpack 说明。
|
|
62
|
+
|
|
63
|
+
## 使用示例
|
|
64
|
+
|
|
65
|
+
```tsx
|
|
66
|
+
import "@xyflow/react/dist/style.css";
|
|
67
|
+
import { ConfigProvider } from "antd";
|
|
68
|
+
import {
|
|
69
|
+
WechenAgentEditor,
|
|
70
|
+
type WechenAgentSnapshot,
|
|
71
|
+
} from "@li/wechen-agent";
|
|
72
|
+
|
|
73
|
+
export function AgentPage() {
|
|
74
|
+
return (
|
|
75
|
+
<ConfigProvider>
|
|
76
|
+
<WechenAgentEditor
|
|
77
|
+
title="Agent 编辑"
|
|
78
|
+
onSave={(s: WechenAgentSnapshot) => {
|
|
79
|
+
/* 持久化 s.nodes / s.edges */
|
|
80
|
+
}}
|
|
81
|
+
onTestRun={(s) => {
|
|
82
|
+
/* 触发试运行 */
|
|
83
|
+
}}
|
|
84
|
+
/>
|
|
85
|
+
</ConfigProvider>
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
未传 `initialFlow` 时画布为空;需要旧版内置示例图见上文 **BREAKING(initialFlow)** 一行。
|
|
91
|
+
|
|
92
|
+
**画布连线**:在节点上从 **source** Handle 拖到 **target** Handle 可新建边;**新建边默认带流动动画**(`defaultEdgeOptions`)。选中 **节点** 时右侧为「节点配置」;选中 **连线** 时右侧为「连线配置」,可开关 **动画**、选择 **正向/反向** 流动(`edge.data.wechenFlowDirection`)、编辑可选 **文字标签**,并有 **重连 / Delete 删除** 说明。
|
|
93
|
+
|
|
94
|
+
**节点 data 合并**:表单与 `renderNodeConfig` 回写使用 **`mergeNodeData`**(亦导出):嵌套 **对象** 深度合并;**数组** 字段在补丁中出现时 **整段替换**(`Form.List` 常见行为)。自定义 `data` 请保持可 JSON 化。
|
|
95
|
+
|
|
96
|
+
**`patchNode` / `patchNodeData` 形状**(与 `mergeNodeData` 的 `patch` 一致):
|
|
97
|
+
|
|
98
|
+
- **`patch` 表示 `node.data` 上的部分字段**,不是整颗 `Node`;**一次调用可传多个顶层键**(统一保存多字段),例如:
|
|
99
|
+
`patchNode({ label: "x", config: { a: 1 } })` → 同时更新 `data.label` 并对 `data.config` 做深度合并。
|
|
100
|
+
- **嵌套对象**:`patchNode({ config: { a: 1 } })` 与已有 `data.config` 按 `mergeNodeData` 规则合并,未出现在补丁里的兄弟键保留(除非被空值覆盖)。
|
|
101
|
+
- **何时才用 `patch` 里的 `data` 键**:仅当你的业务模型里 **`node.data` 下确有名 `data` 的嵌套对象** 时,才使用 `patchNode({ data: { ... } })`;否则该写法更新的是 **`node.data.data.*`**,容易与「把整个业务 payload 放进 `data` 键」的误解混淆。
|
|
102
|
+
|
|
103
|
+
**`patchNode` / `patchNodeData` 与 `patchEdge` 作用层级**:
|
|
104
|
+
|
|
105
|
+
- **节点**:`patchNode`(右侧统一配置)与 ref 的 **`patchNodeData(nodeId, patch)`** 都是把 `patch` **合并进 `node.data`**。`patch` 的**顶层键就是 `data` 上的键**,例如 `patchNode({ label: "标题" })` 只改 `node.data.label`,不会替换整颗节点,也不会动 `id` / `type` / `position`。可一次传入多键:`patchNode({ label, foo: 1 })`。嵌套用 `patchNode({ config: { a: 1 } })`(与 `mergeNodeData` 深度合并规则一致)。**不要**误以为需要写成 `patchNode({ data: { label } })` 才能写进 data——那种写法表示更新的是 **`node.data.data.label`**(仅当你的业务字段里真的有一层名叫 `data` 的对象时才对)。
|
|
106
|
+
- **边**:`patchEdge` 将 **`Partial<Edge>` 浅合并到边对象顶层**(如 `animated`、`label`),与节点 `data` 不是同一套模型。
|
|
107
|
+
|
|
108
|
+
**统一右侧配置 `renderConfigPanel`**(可选):单一函数同时覆盖 **节点** 与 **连线** 右侧栏。入参为判别联合 `kind: "node" | "edge"`,并提供 **`patchNode`** / **`patchEdge`**,由宿主决定何时调用(不必依赖 Form 即时合并)。对某一选中态返回 **`undefined`** 时回退内置「节点配置」或「连线配置」。与 `renderNodeConfig` 同时传入时,**`renderConfigPanel` 优先**(仅当其对当前选中返回 `undefined` 时再走内置)。类型见导出的 `WechenAgentRenderConfigPanelFn`、`WechenAgentConfigPanelContext`。
|
|
109
|
+
|
|
110
|
+
**顶栏右侧自定义 `renderHeaderActions`**(可选):替换顶栏 **右侧** 的「保存」「测试运行」按钮区(左侧 CRAFT 标签与标题不变)。入参为 **`WechenAgentHeaderActionsRenderContext`**:
|
|
111
|
+
|
|
112
|
+
- **`save`** / **`testRun`**:与默认按钮、`ref.save()` / `ref.testRun()` 相同,会触发 **`onSave` / `onTestRun`**(若已传入)。
|
|
113
|
+
- **`editorRef`**:与 `<WechenAgentEditor ref={...} />` 为 **同一 ref 对象**(推荐使用对象 `useRef`),可在自定义工具条中调用 **`getSnapshot`**、`patchNodeData`、`fitView` 等任意 ref API。挂载完成前 **`current` 可能为 `null`**,请在点击回调或 `useEffect` 内使用。
|
|
114
|
+
|
|
115
|
+
未传 `renderHeaderActions` 时保持默认两个按钮。传入后若返回 **`null` / `undefined`**,右侧 **不显示任何内容**(也不显示默认按钮);若需要默认 UI,请勿传该 prop。
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
import { Button, Space } from "antd";
|
|
119
|
+
import type { WechenAgentHeaderActionsRenderContext } from "@li/wechen-agent";
|
|
120
|
+
|
|
121
|
+
<WechenAgentEditor
|
|
122
|
+
renderHeaderActions={(ctx: WechenAgentHeaderActionsRenderContext) => (
|
|
123
|
+
<Space>
|
|
124
|
+
<Button onClick={ctx.save}>Save</Button>
|
|
125
|
+
<Button type="primary" onClick={ctx.testRun}>
|
|
126
|
+
Test run
|
|
127
|
+
</Button>
|
|
128
|
+
</Space>
|
|
129
|
+
)}
|
|
130
|
+
/>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
宿主入口需在渲染编辑器 **之前** 完成 Monaco worker 引导(见 `playground/src/main.tsx` 与 `monacoBootstrap.ts`)。
|
|
134
|
+
|
|
135
|
+
## 本地开发(维护本仓库)
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm install
|
|
139
|
+
npm install --prefix playground
|
|
140
|
+
npm run dev
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
浏览器打开终端提示的地址(默认 `http://localhost:5173`)。
|
|
144
|
+
|
|
145
|
+
## 构建与发布到 npm
|
|
146
|
+
|
|
147
|
+
维护者或 CI 在发版前建议完成下列 **自检**:
|
|
148
|
+
|
|
149
|
+
1. **依赖**:宿主侧 peer 与业务线 lockfile 可解析(见上文版本范围)。
|
|
150
|
+
2. **构建**:`npm run build` 成功,生成 `dist/index.js` 与 `dist/index.d.ts`。
|
|
151
|
+
3. **打包内容**:`npm run pack:check`(即 `npm pack --dry-run`)仅包含 `package.json` 声明的 `files`(当前为 **`dist`**),无意外把 `playground` 或源码打进包。
|
|
152
|
+
4. **测试**(可选):`npm test`(Vitest,见 `src/**/*.test.ts`)。
|
|
153
|
+
5. **版本号**:在 `package.json` 提升 `version`;若团队维护变更说明,可同步更新 **CHANGELOG**(本仓库未强制附带该文件,由发布流程决定)。
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
npm run build
|
|
157
|
+
npm run pack:check
|
|
158
|
+
npm test
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
执行 `npm publish`(或 `npm run publish`)时,npm 会先运行 **`prepublishOnly`**(已设为 `npm run build`),再上传。**`files`** 显式包含 **`dist/`** 与 **`LICENSE`**;`README` 等会按 npm 默认规则一并打入包。不含 `monaco-editor` 源码树与 `playground`。
|
|
162
|
+
|
|
163
|
+
### 首次发布到 npm(操作清单)
|
|
164
|
+
|
|
165
|
+
**版本号含义**:`package.json` 中 **`version`** 当前为 **1.0.0**,表示以 **语义化版本** 首次公开发布;之后 **`MAJOR`** 不兼容 API 变更、**`MINOR`** 向后兼容功能、**`PATCH`** 修订。若需先发预览版,可改用 **0.x** 并在文档中说明。
|
|
166
|
+
|
|
167
|
+
**发布入口(宿主应使用)**:仅通过包名根路径导入,例如 `import { WechenAgentEditor } from "@li/wechen-agent"`。**构建产物**为 **`dist/index.js`**(类型声明 **`dist/index.d.ts`**),由源码 **`src/index.ts`** 聚合导出;请勿依赖未文档化的深层路径。**公开 API** 概览见上文「主要导出一览」,完整符号以 `src/index.ts` 分组为准。
|
|
168
|
+
|
|
169
|
+
**发布前**:将 `package.json` 中 **`repository` / `bugs` / `homepage`** 里的占位地址(`your-org/wechen-agent`)替换为 **真实 Git 仓库** URL,便于 npm 页展示与问题反馈。
|
|
170
|
+
|
|
171
|
+
**前置条件**:已安装 **Node.js(建议 LTS)** 与 **npm**;在 [npmjs.com](https://www.npmjs.com/) 拥有账号。发布 **`@li/...` scoped 包** 前,确认你对 **`@li` 组织** 具有 **publish** 权限(或由组织管理员授权)。
|
|
172
|
+
|
|
173
|
+
1. **本地校验**
|
|
174
|
+
- `npm install`(或 CI 用 `npm ci`)
|
|
175
|
+
- `npm run build`
|
|
176
|
+
- `npm test`(可选,Vitest)
|
|
177
|
+
- `npm run pack:check` 查看将要上传的 tarball 内容
|
|
178
|
+
|
|
179
|
+
2. **登录 npm**
|
|
180
|
+
- `npm login`(若仅用 scope:`npm login --scope=@li`)
|
|
181
|
+
- `npm whoami` 确认当前用户
|
|
182
|
+
|
|
183
|
+
3. **发布**(scoped 包首次需公开作用域)
|
|
184
|
+
- `npm publish --access public`
|
|
185
|
+
- 或:`npm run publish`(脚本已等价包含上述参数)
|
|
186
|
+
|
|
187
|
+
4. **发后验证**
|
|
188
|
+
- `npm view @li/wechen-agent version`
|
|
189
|
+
- 在空目录新建最小项目:`npm install @li/wechen-agent`,再 `import { WechenAgentEditor } from "@li/wechen-agent"` 做一次烟测
|
|
190
|
+
|
|
191
|
+
## 技术说明
|
|
192
|
+
|
|
193
|
+
- 构建:Vite `build.lib`,`react`、`react-dom`、`antd`、`@xyflow/react`、`monaco-editor`、`@monaco-editor/react` 均为 **external**。
|
|
194
|
+
- 组件库条目拖入画布时,使用 MIME `application/reactflow` 与载荷前缀 `scope:"wechen-agent"`;宿主可 import `WECHEN_AGENT_FLOW_DRAG_MIME` 与编解码函数以对齐自定义侧栏。
|
|
195
|
+
- 顶栏 **保存** / **测试运行** 通过 `onSave`、`onTestRun` 传出 `WechenAgentSnapshot`:`flow` 为与 `initialFlow` 同形的 **完整对象**(推荐);`flowJson` 为兼容用字符串。
|
|
196
|
+
- 画布 **Controls** 使用 `showInteractive={false}` 时隐藏「锁定交互」开关,**缩放 / 适应视图** 仍可用。
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ComponentLibraryGroup, WechenAgentComponentLibraryList } from './config/componentLibraryConfig';
|
|
3
|
+
import { WechenAgentEditorRef, WechenAgentFlowJson, WechenAgentHeaderActionsRenderContext, WechenAgentSnapshot } from './flowTypes';
|
|
4
|
+
import { WechenAgentRenderFlowNodeFn } from './WechenAgentEditorContext';
|
|
5
|
+
import { WechenAgentRenderNodeConfigFn } from './panels/NodeConfigPanel';
|
|
6
|
+
import { WechenAgentRenderConfigPanelFn } from './wechenAgentConfigPanel';
|
|
7
|
+
export interface WechenAgentEditorProps {
|
|
8
|
+
/** 顶栏标题;不传则使用 `initialFlow.title`,再没有则使用内置 `DEFAULT_TITLE` */
|
|
9
|
+
title?: string;
|
|
10
|
+
/**
|
|
11
|
+
* 初始画布,结构与保存时 **`WechenAgentSnapshot.flow`** 完全一致(`WechenAgentFlowJson`:`title?` + `nodes` + `edges`)。
|
|
12
|
+
* 可将上次 **`onSave` / `onTestRun` 收到的 `snapshot.flow`** 直接再传入以回显。
|
|
13
|
+
* **不传**时为 **空画布**;需要示例图请传入 `defaultInitialFlow` 或使用 `parseWechenAgentFlowJson(存储字符串)`。
|
|
14
|
+
* 传入时同样会先深拷贝,避免画布编辑反写父级对象。
|
|
15
|
+
*/
|
|
16
|
+
initialFlow?: WechenAgentFlowJson;
|
|
17
|
+
/** 左侧组件库分组;不传则使用 `getDefaultComponentLibraryGroups()` */
|
|
18
|
+
libraryGroups?: ComponentLibraryGroup[];
|
|
19
|
+
/**
|
|
20
|
+
* 传入时:先把当前数据源(`libraryGroups` 或默认)转成 `{ name, groupKey?, children }[]`,
|
|
21
|
+
* 再用**本函数返回值**映射回内部分组并**仅渲染该结果**。
|
|
22
|
+
*/
|
|
23
|
+
mapComponentLibraryList?: (list: WechenAgentComponentLibraryList) => WechenAgentComponentLibraryList;
|
|
24
|
+
/**
|
|
25
|
+
* 自定义画布节点渲染;参数为 React Flow `NodeProps`(含 `id`、`data`、`type`、`selected` 等)。
|
|
26
|
+
* 若使用自定义节点,请自行放置 `Handle` 以保留连线能力。
|
|
27
|
+
*/
|
|
28
|
+
renderFlowNode?: WechenAgentRenderFlowNodeFn;
|
|
29
|
+
/**
|
|
30
|
+
* 自定义右侧节点配置区;渲染在 **antd Form 内部**,第二个参数为 `form` 实例,
|
|
31
|
+
* 子组件可调用 `Form.useFormInstance()` 与传入的 `form` 一致。
|
|
32
|
+
*/
|
|
33
|
+
renderNodeConfig?: WechenAgentRenderNodeConfigFn;
|
|
34
|
+
/**
|
|
35
|
+
* 统一自定义右侧配置(**节点 + 连线**)。传入时优先于仅节点的 `renderNodeConfig`;
|
|
36
|
+
* 对当前选中对象返回 **`undefined`** 时回退内置节点/连线面板。
|
|
37
|
+
* 通过 `ctx.patchNode` / `ctx.patchEdge` 自行决定何时写回画布。
|
|
38
|
+
*/
|
|
39
|
+
renderConfigPanel?: WechenAgentRenderConfigPanelFn;
|
|
40
|
+
/**
|
|
41
|
+
* 自定义顶栏 **右侧** 操作区(左侧 CRAFT + 标题不变)。未传时显示默认「保存」「测试运行」。
|
|
42
|
+
* 返回 `null` / `undefined` 时右侧为空白(不显示默认按钮)。
|
|
43
|
+
*/
|
|
44
|
+
renderHeaderActions?: (ctx: WechenAgentHeaderActionsRenderContext) => ReactNode;
|
|
45
|
+
/** 保存:`snapshot.flow` 为完整画布对象(推荐);`snapshot.flowJson` 为兼容用字符串 */
|
|
46
|
+
onSave?: (snapshot: WechenAgentSnapshot) => void;
|
|
47
|
+
/** 测试运行:收到与 `onSave` 同形的 `WechenAgentSnapshot`;具体执行由宿主实现(可为试运行 / 调试) */
|
|
48
|
+
onTestRun?: (snapshot: WechenAgentSnapshot) => void;
|
|
49
|
+
}
|
|
50
|
+
export declare const WechenAgentEditor: import('react').ForwardRefExoticComponent<WechenAgentEditorProps & import('react').RefAttributes<WechenAgentEditorRef>>;
|
|
51
|
+
//# sourceMappingURL=WechenAgentEditor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WechenAgentEditor.d.ts","sourceRoot":"","sources":["../src/WechenAgentEditor.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAa,SAAS,EAAa,MAAM,OAAO,CAAC;AAc7D,OAAO,KAAK,EACV,qBAAqB,EACrB,+BAA+B,EAChC,MAAM,iCAAiC,CAAC;AAazC,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qCAAqC,EACrC,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAU/E,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,yDAAyD;IACzD,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACxC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CACxB,IAAI,EAAE,+BAA+B,KAClC,+BAA+B,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C;;;OAGG;IACH,gBAAgB,CAAC,EAAE,6BAA6B,CAAC;IACjD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,8BAA8B,CAAC;IACnD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,qCAAqC,KAAK,SAAS,CAAC;IAChF,iEAAiE;IACjE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACjD,wEAAwE;IACxE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACrD;AAybD,eAAO,MAAM,iBAAiB,yHA2D7B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { NodeProps } from '@xyflow/react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
export type WechenAgentRenderFlowNodeFn = (props: NodeProps) => ReactNode;
|
|
4
|
+
export interface WechenAgentEditorRenderContextValue {
|
|
5
|
+
/** 自定义画布节点外观;未设置时使用内置 MainAgent / Card / Pill 节点 UI */
|
|
6
|
+
renderFlowNode?: WechenAgentRenderFlowNodeFn;
|
|
7
|
+
}
|
|
8
|
+
export declare const WechenAgentEditorRenderContext: import('react').Context<WechenAgentEditorRenderContextValue | null>;
|
|
9
|
+
export declare function useWechenAgentEditorRender(): WechenAgentEditorRenderContextValue;
|
|
10
|
+
//# sourceMappingURL=WechenAgentEditorContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WechenAgentEditorContext.d.ts","sourceRoot":"","sources":["../src/WechenAgentEditorContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,MAAM,2BAA2B,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;AAE1E,MAAM,WAAW,mCAAmC;IAClD,uDAAuD;IACvD,cAAc,CAAC,EAAE,2BAA2B,CAAC;CAC9C;AAED,eAAO,MAAM,8BAA8B,qEACsB,CAAC;AAElE,wBAAgB,0BAA0B,IAAI,mCAAmC,CAEhF"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ComponentLibraryIconSlot } from './componentLibraryIconTypes';
|
|
3
|
+
export type { ComponentLibraryIconSlot } from './componentLibraryIconTypes';
|
|
4
|
+
export { isLibraryIconSet, isLibraryIconString } from './componentLibraryIconTypes';
|
|
5
|
+
export interface ComponentLibraryItem {
|
|
6
|
+
key: string;
|
|
7
|
+
title: string;
|
|
8
|
+
subtitle?: string;
|
|
9
|
+
/**
|
|
10
|
+
* 列表项前侧:`@ant-design/icons` 导出组件名,或任意 React 节点。
|
|
11
|
+
* 未设置时面板使用默认机器人图标。
|
|
12
|
+
*/
|
|
13
|
+
iconBefore?: ComponentLibraryIconSlot;
|
|
14
|
+
/**
|
|
15
|
+
* 列表项标题后、附加操作前,同上。
|
|
16
|
+
*/
|
|
17
|
+
iconAfter?: ComponentLibraryIconSlot;
|
|
18
|
+
/**
|
|
19
|
+
* 是否显示行尾默认「+」按钮。默认 true;与 `addButtonSlot` 二选一逻辑见下。
|
|
20
|
+
*/
|
|
21
|
+
showAddButton?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* 默认 + 按钮的图标:antd 图标名字符串或 React 节点;不设置则用 `PlusOutlined`。
|
|
24
|
+
*/
|
|
25
|
+
addButtonIcon?: ComponentLibraryIconSlot;
|
|
26
|
+
/**
|
|
27
|
+
* 若**传入该字段**(含 `null`),则整块替换行尾操作区:`null` 表示不展示任何操作;
|
|
28
|
+
* 传入节点时可完全自定义(如下拉、多个按钮)。此时忽略 `showAddButton` / `addButtonIcon`。
|
|
29
|
+
*/
|
|
30
|
+
addButtonSlot?: ReactNode | null;
|
|
31
|
+
}
|
|
32
|
+
export interface ComponentLibraryGroup {
|
|
33
|
+
key: string;
|
|
34
|
+
title: string;
|
|
35
|
+
items: ComponentLibraryItem[];
|
|
36
|
+
}
|
|
37
|
+
/** 主 Agent 分组:拖入画布会创建 mainAgent 节点 */
|
|
38
|
+
export declare const COMPONENT_LIBRARY_GROUP_MAIN: "main";
|
|
39
|
+
/** 应用 Agent 分组:拖入画布会创建 card 节点 */
|
|
40
|
+
export declare const COMPONENT_LIBRARY_GROUP_APP: "app";
|
|
41
|
+
/** 主 Agent 侧可拖拽的规范化组件列表 */
|
|
42
|
+
export declare const defaultMainAgentComponentItems: ComponentLibraryItem[];
|
|
43
|
+
/** 应用 Agent 侧可拖拽的规范化组件列表 */
|
|
44
|
+
export declare const defaultAppAgentComponentItems: ComponentLibraryItem[];
|
|
45
|
+
/** 返回新的分组数组(浅拷贝各组 items),适合作为受控 state 的初始值 */
|
|
46
|
+
export declare function getDefaultComponentLibraryGroups(): ComponentLibraryGroup[];
|
|
47
|
+
/** 回调里「子组件」:展示名在 `name`,可与内部 `title`/`key` 对应 */
|
|
48
|
+
export interface WechenAgentComponentLibraryItemPayload {
|
|
49
|
+
name: string;
|
|
50
|
+
key: string;
|
|
51
|
+
subtitle?: string;
|
|
52
|
+
/** 与 `ComponentLibraryItem.iconBefore` 一致:字符串(图标名)或 React 节点 */
|
|
53
|
+
iconBefore?: ComponentLibraryIconSlot;
|
|
54
|
+
iconAfter?: ComponentLibraryIconSlot;
|
|
55
|
+
showAddButton?: boolean;
|
|
56
|
+
addButtonIcon?: ComponentLibraryIconSlot;
|
|
57
|
+
addButtonSlot?: ReactNode | null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 回调里「分组」:`name` 为分组标题(如主 Agent / 应用 Agent),`children` 为该组组件列表;
|
|
61
|
+
* 业务可自行扩展 `children` 数组后再映射回 `ComponentLibraryGroup` 传入编辑器。
|
|
62
|
+
*/
|
|
63
|
+
export interface WechenAgentComponentLibraryGroupPayload {
|
|
64
|
+
name: string;
|
|
65
|
+
/**
|
|
66
|
+
* 与内部分组 key 一致(`main` / `app` 等);返回列表时建议带上,否则按索引:
|
|
67
|
+
* 0 → main,1 → app,其余 → `ext-{index}`(拖入按 card 处理,除非显式为 `main`)。
|
|
68
|
+
*/
|
|
69
|
+
groupKey?: string;
|
|
70
|
+
children: WechenAgentComponentLibraryItemPayload[];
|
|
71
|
+
}
|
|
72
|
+
export type WechenAgentComponentLibraryList = WechenAgentComponentLibraryGroupPayload[];
|
|
73
|
+
/** 将内部分组结构转为回调用的 `{ name, children }[]` */
|
|
74
|
+
export declare function toWechenAgentComponentLibraryList(groups: ComponentLibraryGroup[]): WechenAgentComponentLibraryList;
|
|
75
|
+
/** 将 `{ name, children, groupKey? }[]` 转回编辑器内部分组(用于 `mapComponentLibraryList` 返回值) */
|
|
76
|
+
export declare function fromWechenAgentComponentLibraryList(list: WechenAgentComponentLibraryList): ComponentLibraryGroup[];
|
|
77
|
+
//# sourceMappingURL=componentLibraryConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentLibraryConfig.d.ts","sourceRoot":"","sources":["../../src/config/componentLibraryConfig.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAG5E,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC;;OAEG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAED,sCAAsC;AACtC,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAC5D,kCAAkC;AAClC,eAAO,MAAM,2BAA2B,OAAiB,CAAC;AAE1D,2BAA2B;AAC3B,eAAO,MAAM,8BAA8B,EAAE,oBAAoB,EAIhE,CAAC;AAEF,4BAA4B;AAC5B,eAAO,MAAM,6BAA6B,EAAE,oBAAoB,EAM/D,CAAC;AAKF,8CAA8C;AAC9C,wBAAgB,gCAAgC,IAAI,qBAAqB,EAAE,CAa1E;AAED,iDAAiD;AACjD,MAAM,WAAW,sCAAsC;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,SAAS,CAAC,EAAE,wBAAwB,CAAC;IACrC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,aAAa,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,uCAAuC;IACtD,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,sCAAsC,EAAE,CAAC;CACpD;AAED,MAAM,MAAM,+BAA+B,GAAG,uCAAuC,EAAE,CAAC;AAExF,2CAA2C;AAC3C,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,qBAAqB,EAAE,GAC9B,+BAA+B,CAmBjC;AAED,sFAAsF;AACtF,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,+BAA+B,GACpC,qBAAqB,EAAE,CA0BzB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComponentLibraryGroup, ComponentLibraryItem } from './componentLibraryConfig';
|
|
2
|
+
/**
|
|
3
|
+
* 在指定分组末尾追加组件;若同 key 已存在则先移除再追加(幂等更新)。
|
|
4
|
+
*/
|
|
5
|
+
export declare function appendComponentToLibrary(groups: ComponentLibraryGroup[], groupKey: string, item: ComponentLibraryItem): ComponentLibraryGroup[];
|
|
6
|
+
/**
|
|
7
|
+
* 从指定分组移除指定 key 的组件。
|
|
8
|
+
*/
|
|
9
|
+
export declare function removeComponentFromLibrary(groups: ComponentLibraryGroup[], groupKey: string, itemKey: string): ComponentLibraryGroup[];
|
|
10
|
+
//# sourceMappingURL=componentLibraryDynamic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentLibraryDynamic.d.ts","sourceRoot":"","sources":["../../src/config/componentLibraryDynamic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAS5F;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,qBAAqB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,oBAAoB,GACzB,qBAAqB,EAAE,CASzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,qBAAqB,EAAE,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,qBAAqB,EAAE,CAMzB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
/** 组件库图标:Ant Design Icons 名字符串,或任意 React 节点 */
|
|
3
|
+
export type ComponentLibraryIconSlot = string | ReactNode;
|
|
4
|
+
export declare function isLibraryIconString(value: ComponentLibraryIconSlot | undefined): value is string;
|
|
5
|
+
export declare function isLibraryIconSet(value: ComponentLibraryIconSlot | undefined): boolean;
|
|
6
|
+
//# sourceMappingURL=componentLibraryIconTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"componentLibraryIconTypes.d.ts","sourceRoot":"","sources":["../../src/config/componentLibraryIconTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,+CAA+C;AAC/C,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1D,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,wBAAwB,GAAG,SAAS,GAC1C,KAAK,IAAI,MAAM,CAEjB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,wBAAwB,GAAG,SAAS,GAC1C,OAAO,CAQT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WechenAgentEdgeFlowStyles.d.ts","sourceRoot":"","sources":["../../src/flow/WechenAgentEdgeFlowStyles.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,yBAAyB,4CAUxC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** MIME type for palette → React Flow drops (xyflow convention). */
|
|
2
|
+
export declare const WECHEN_AGENT_FLOW_DRAG_MIME = "application/reactflow";
|
|
3
|
+
export interface PaletteDragPayload {
|
|
4
|
+
templateKey: string;
|
|
5
|
+
label: string;
|
|
6
|
+
/** Library group id, e.g. `main` / `app` */
|
|
7
|
+
groupKey: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function encodePaletteDragPayload(p: PaletteDragPayload): string;
|
|
10
|
+
export declare function decodePaletteDragPayload(raw: string): PaletteDragPayload | null;
|
|
11
|
+
//# sourceMappingURL=dragPayload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dragPayload.d.ts","sourceRoot":"","sources":["../../src/flow/dragPayload.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,eAAO,MAAM,2BAA2B,0BAA0B,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAEtE;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,GACV,kBAAkB,GAAG,IAAI,CAc3B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Node } from '@xyflow/react';
|
|
2
|
+
import { MainAgentNodeData, SimpleNodeData } from '../flowTypes';
|
|
3
|
+
export declare function newDroppedNodeId(): string;
|
|
4
|
+
export declare function createDroppedCardNode(id: string, position: {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
}, label: string): Node<SimpleNodeData>;
|
|
8
|
+
export declare function createDroppedMainAgentNode(id: string, position: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
}, label: string): Node<MainAgentNodeData>;
|
|
12
|
+
//# sourceMappingURL=dropNodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropNodes.d.ts","sourceRoot":"","sources":["../../src/flow/dropNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEtE,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAED,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAClC,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC,cAAc,CAAC,CAOtB;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAClC,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC,iBAAiB,CAAC,CAgBzB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { WechenAgentFlowJson } from '../flowTypes';
|
|
2
|
+
/**
|
|
3
|
+
* 去掉 React Flow 运行期字段,使 **`flow` 与 `defaultInitialFlow` / 传入的 `initialFlow` 同形**
|
|
4
|
+
*(仅保留 id、type、position、data、edges 上业务相关字段等)。
|
|
5
|
+
* 保存、`JSON.stringify`、回灌 `initialFlow` 前均应使用(`cloneWechenAgentFlow` / `parseWechenAgentFlowJson` 已内置)。
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeWechenAgentFlowJson(flow: WechenAgentFlowJson): WechenAgentFlowJson;
|
|
8
|
+
/**
|
|
9
|
+
* 深拷贝画布 JSON,避免与包内常量或父级 state 共享引用;
|
|
10
|
+
* 拷贝后会 **normalize**,与保存时 **`snapshot.flow`** 形状一致。
|
|
11
|
+
*/
|
|
12
|
+
export declare function cloneWechenAgentFlow(flow: WechenAgentFlowJson): WechenAgentFlowJson;
|
|
13
|
+
/** 将后端/存储中的字符串还原为 `WechenAgentFlowJson`;会去掉运行期字段以与编辑器初始值一致 */
|
|
14
|
+
export declare function parseWechenAgentFlowJson(json: string): WechenAgentFlowJson;
|
|
15
|
+
//# sourceMappingURL=flowJsonUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowJsonUtils.d.ts","sourceRoot":"","sources":["../../src/flow/flowJsonUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AA8BxD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,mBAAmB,CAM3F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,mBAAmB,GAAG,mBAAmB,CAGnF;AAED,8DAA8D;AAC9D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAG1E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Edge, Node } from '@xyflow/react';
|
|
2
|
+
import { MainAgentNodeData, SimpleNodeData, WechenAgentFlowJson } from '../flowTypes';
|
|
3
|
+
export declare const defaultInitialNodes: Node<MainAgentNodeData | SimpleNodeData>[];
|
|
4
|
+
export declare const defaultInitialEdges: Edge[];
|
|
5
|
+
/** 内置默认画布(`nodes` + `edges` 合一) */
|
|
6
|
+
export declare const defaultInitialFlow: WechenAgentFlowJson;
|
|
7
|
+
/** 未传 `initialFlow` 时使用的空画布(无预置节点与连线) */
|
|
8
|
+
export declare const emptyInitialFlow: WechenAgentFlowJson;
|
|
9
|
+
//# sourceMappingURL=initialFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initialFlow.d.ts","sourceRoot":"","sources":["../../src/flow/initialFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACpB,MAAM,cAAc,CAAC;AAEtB,eAAO,MAAM,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,GAAG,cAAc,CAAC,EA6CzE,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,IAAI,EAkBrC,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,kBAAkB,EAAE,mBAIhC,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,EAAE,mBAG9B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将 `patch` 深度合并进 `prev`(节点 `data` 对象)。
|
|
3
|
+
*
|
|
4
|
+
* - **普通对象**:递归合并;未出现在 `patch` 中的键保留。
|
|
5
|
+
* - **数组**:`patch` 中若提供该键,则 **整段替换**(与 antd Form.List 整表回传一致),不逐下标合并。
|
|
6
|
+
* - **原始值 / null**:以 `patch` 为准覆盖。
|
|
7
|
+
*
|
|
8
|
+
* 不处理 Map/Set/函数;`data` 应为可 JSON 化的结构。
|
|
9
|
+
*/
|
|
10
|
+
export declare function mergeNodeData(prev: Record<string, unknown>, patch: Record<string, unknown>): Record<string, unknown>;
|
|
11
|
+
//# sourceMappingURL=mergeNodeData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeNodeData.d.ts","sourceRoot":"","sources":["../../src/flow/mergeNodeData.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBzB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CardNode } from './nodes/CardNode';
|
|
2
|
+
import { MainAgentNode } from './nodes/MainAgentNode';
|
|
3
|
+
import { PillNode } from './nodes/PillNode';
|
|
4
|
+
export declare const wechenAgentNodeTypes: {
|
|
5
|
+
pill: typeof PillNode;
|
|
6
|
+
mainAgent: typeof MainAgentNode;
|
|
7
|
+
card: typeof CardNode;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=nodeTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeTypes.d.ts","sourceRoot":"","sources":["../../src/flow/nodeTypes.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,eAAO,MAAM,oBAAoB;;;;CAIZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/CardNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAIjE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,2CAuBxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MainAgentNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/MainAgentNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAIjE,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,2CAyC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PillNode.d.ts","sourceRoot":"","sources":["../../../src/flow/nodes/PillNode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAIjE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,2CAsBxC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EdgeProps } from '@xyflow/react';
|
|
2
|
+
/** 持久化在 `edge.data.wechenFlowDirection`,与源→目标几何方向相对 */
|
|
3
|
+
export type WechenAgentEdgeFlowDirection = "forward" | "reverse";
|
|
4
|
+
/**
|
|
5
|
+
* 默认边:Bezier + 可选反向流动(`data.wechenFlowDirection === 'reverse'` 时 CSS 反转 dash 动画)。
|
|
6
|
+
*/
|
|
7
|
+
export declare function WechenAgentDefaultEdge(props: EdgeProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const wechenAgentEdgeTypes: {
|
|
9
|
+
default: typeof WechenAgentDefaultEdge;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=wechenAgentEdgeTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wechenAgentEdgeTypes.d.ts","sourceRoot":"","sources":["../../src/flow/wechenAgentEdgeTypes.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE3D,uDAAuD;AACvD,MAAM,MAAM,4BAA4B,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,SAAS,2CAStD;AAED,eAAO,MAAM,oBAAoB;;CAEhC,CAAC"}
|