@xpert-ai/plugin-excalidraw 0.1.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/.xpertai-plugin/plugin.json +118 -0
- package/README.md +5 -0
- package/assets/composerIcon.svg +5 -0
- package/assets/logo.svg +8 -0
- package/dist/docs/excalidraw-agent-skill.md +32 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +153 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/constants.d.ts +24 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +42 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/entities/excalidraw-action-log.entity.d.ts +18 -0
- package/dist/lib/entities/excalidraw-action-log.entity.d.ts.map +1 -0
- package/dist/lib/entities/excalidraw-action-log.entity.js +69 -0
- package/dist/lib/entities/excalidraw-action-log.entity.js.map +1 -0
- package/dist/lib/entities/excalidraw-drawing-version.entity.d.ts +21 -0
- package/dist/lib/entities/excalidraw-drawing-version.entity.d.ts.map +1 -0
- package/dist/lib/entities/excalidraw-drawing-version.entity.js +82 -0
- package/dist/lib/entities/excalidraw-drawing-version.entity.js.map +1 -0
- package/dist/lib/entities/excalidraw-drawing.entity.d.ts +24 -0
- package/dist/lib/entities/excalidraw-drawing.entity.d.ts.map +1 -0
- package/dist/lib/entities/excalidraw-drawing.entity.js +94 -0
- package/dist/lib/entities/excalidraw-drawing.entity.js.map +1 -0
- package/dist/lib/entities/index.d.ts +4 -0
- package/dist/lib/entities/index.d.ts.map +1 -0
- package/dist/lib/entities/index.js +4 -0
- package/dist/lib/entities/index.js.map +1 -0
- package/dist/lib/excalidraw-view.provider.d.ts +14 -0
- package/dist/lib/excalidraw-view.provider.d.ts.map +1 -0
- package/dist/lib/excalidraw-view.provider.js +423 -0
- package/dist/lib/excalidraw-view.provider.js.map +1 -0
- package/dist/lib/excalidraw.middleware.d.ts +10 -0
- package/dist/lib/excalidraw.middleware.d.ts.map +1 -0
- package/dist/lib/excalidraw.middleware.js +173 -0
- package/dist/lib/excalidraw.middleware.js.map +1 -0
- package/dist/lib/excalidraw.plugin.d.ts +8 -0
- package/dist/lib/excalidraw.plugin.d.ts.map +1 -0
- package/dist/lib/excalidraw.plugin.js +27 -0
- package/dist/lib/excalidraw.plugin.js.map +1 -0
- package/dist/lib/excalidraw.service.d.ts +169 -0
- package/dist/lib/excalidraw.service.d.ts.map +1 -0
- package/dist/lib/excalidraw.service.js +441 -0
- package/dist/lib/excalidraw.service.js.map +1 -0
- package/dist/lib/excalidraw.templates.d.ts +3 -0
- package/dist/lib/excalidraw.templates.d.ts.map +1 -0
- package/dist/lib/excalidraw.templates.js +78 -0
- package/dist/lib/excalidraw.templates.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/app.css +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/app.js +5105 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/i18n.d.ts +3 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/i18n.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/i18n.js +103 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/i18n.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/i18n.ts +151 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/main.tsx +1411 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-client-shim.d.ts +3 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-client-shim.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-client-shim.js +4 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-client-shim.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-client-shim.ts +4 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-shim.d.ts +11 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-shim.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-shim.js +11 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-shim.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-dom-shim.ts +11 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-jsx-runtime-shim.d.ts +5 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-jsx-runtime-shim.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-jsx-runtime-shim.js +8 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-jsx-runtime-shim.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-jsx-runtime-shim.ts +8 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-shim.d.ts +36 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-shim.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-shim.js +36 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-shim.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/react-shim.ts +36 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/runtime.d.ts +21 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/runtime.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/runtime.js +198 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/runtime.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/runtime.ts +228 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/styles.d.ts +2 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/styles.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/styles.js +324 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/styles.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/styles.ts +323 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/vendor.d.ts +4 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/vendor.d.ts.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/vendor.js +4 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/vendor.js.map +1 -0
- package/dist/lib/remote-components/excalidraw-workbench/src/vendor.ts +3 -0
- package/dist/lib/types.d.ts +74 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/xpert-excalidraw-assistant.yaml +129 -0
- package/package.json +87 -0
- package/skills/index/SKILL.md +46 -0
- package/skills/index/agents/xpertai.yaml +6 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Injectable } from '@nestjs/common';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import { dirname, join } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { renderRemoteReactIframeHtml, ViewExtensionProvider } from '@xpert-ai/plugin-sdk';
|
|
9
|
+
import { AGENT_WORKBENCH_FIXED_SLOT, AGENT_WORKBENCH_MAIN_SLOT, ASSISTANT_CHAT_SEND_MESSAGE_COMMAND, EXCALIDRAW_FEATURE, EXCALIDRAW_ICON, EXCALIDRAW_MIDDLEWARE_TOOL_NAMES, EXCALIDRAW_PLUGIN_NAME, EXCALIDRAW_PROVIDER_KEY, EXCALIDRAW_REMOTE_ENTRY_KEY, EXCALIDRAW_WORKBENCH_VIEW_KEY } from './constants.js';
|
|
10
|
+
import { ExcalidrawService } from './excalidraw.service.js';
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = dirname(__filename);
|
|
13
|
+
const requireFromHere = createRequire(__filename);
|
|
14
|
+
const text = (en_US, zh_Hans) => ({ en_US, zh_Hans });
|
|
15
|
+
let ExcalidrawViewProvider = class ExcalidrawViewProvider {
|
|
16
|
+
constructor(service) {
|
|
17
|
+
this.service = service;
|
|
18
|
+
}
|
|
19
|
+
supports(context) {
|
|
20
|
+
return context.hostType === 'agent';
|
|
21
|
+
}
|
|
22
|
+
getViewManifests(context, slot) {
|
|
23
|
+
if (context.hostType !== 'agent' || (slot !== AGENT_WORKBENCH_MAIN_SLOT && slot !== AGENT_WORKBENCH_FIXED_SLOT)) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const fixed = slot === AGENT_WORKBENCH_FIXED_SLOT;
|
|
27
|
+
return [
|
|
28
|
+
{
|
|
29
|
+
key: EXCALIDRAW_WORKBENCH_VIEW_KEY,
|
|
30
|
+
title: text('Excalidraw Workbench', 'Excalidraw 绘图工作台'),
|
|
31
|
+
description: text('Create, review, edit, version, import, export, and convert Agent-generated diagrams.', '创建、审核、编辑、版本化、导入导出并转换 Agent 生成的图形。'),
|
|
32
|
+
icon: {
|
|
33
|
+
type: 'svg',
|
|
34
|
+
value: EXCALIDRAW_ICON,
|
|
35
|
+
color: '#2563eb',
|
|
36
|
+
alt: 'Excalidraw'
|
|
37
|
+
},
|
|
38
|
+
hostType: 'agent',
|
|
39
|
+
slot,
|
|
40
|
+
order: 40,
|
|
41
|
+
refreshable: true,
|
|
42
|
+
activation: {
|
|
43
|
+
requiredFeatures: [EXCALIDRAW_FEATURE]
|
|
44
|
+
},
|
|
45
|
+
...(fixed
|
|
46
|
+
? {
|
|
47
|
+
workbench: {
|
|
48
|
+
fixed: true,
|
|
49
|
+
menu: {
|
|
50
|
+
enabled: true,
|
|
51
|
+
label: text('Excalidraw', 'Excalidraw 绘图'),
|
|
52
|
+
order: 40,
|
|
53
|
+
icon: {
|
|
54
|
+
type: 'svg',
|
|
55
|
+
value: EXCALIDRAW_ICON,
|
|
56
|
+
alt: 'Excalidraw'
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
: {}),
|
|
62
|
+
source: {
|
|
63
|
+
provider: EXCALIDRAW_PROVIDER_KEY,
|
|
64
|
+
plugin: EXCALIDRAW_PLUGIN_NAME
|
|
65
|
+
},
|
|
66
|
+
view: {
|
|
67
|
+
type: 'remote_component',
|
|
68
|
+
runtime: 'react',
|
|
69
|
+
protocolVersion: 1,
|
|
70
|
+
component: {
|
|
71
|
+
isolation: 'iframe',
|
|
72
|
+
entry: EXCALIDRAW_REMOTE_ENTRY_KEY
|
|
73
|
+
},
|
|
74
|
+
dataSource: {
|
|
75
|
+
mode: 'platform'
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
dataSource: {
|
|
79
|
+
mode: 'platform',
|
|
80
|
+
querySchema: {
|
|
81
|
+
supportsPagination: true,
|
|
82
|
+
supportsSearch: true,
|
|
83
|
+
supportsParameters: true,
|
|
84
|
+
defaultPageSize: 20
|
|
85
|
+
},
|
|
86
|
+
cache: {
|
|
87
|
+
enabled: false
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
hostEvents: {
|
|
91
|
+
subscriptions: [
|
|
92
|
+
{
|
|
93
|
+
key: 'excalidraw-tool-completed',
|
|
94
|
+
event: 'assistant.tool.completed',
|
|
95
|
+
filter: {
|
|
96
|
+
sources: ['chatkit'],
|
|
97
|
+
toolNames: [...EXCALIDRAW_MIDDLEWARE_TOOL_NAMES]
|
|
98
|
+
},
|
|
99
|
+
action: {
|
|
100
|
+
type: 'forward',
|
|
101
|
+
debounceMs: 1000
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
clientCommands: [
|
|
107
|
+
{
|
|
108
|
+
key: ASSISTANT_CHAT_SEND_MESSAGE_COMMAND,
|
|
109
|
+
label: text('Send to Assistant Chat', '发送到 Assistant 对话')
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
actions: [
|
|
113
|
+
{ key: 'refresh', label: text('Refresh', '刷新'), icon: 'ri-refresh-line', placement: 'toolbar', actionType: 'refresh' },
|
|
114
|
+
{ key: 'create_drawing', label: text('New Drawing', '新建图形'), icon: 'ri-add-line', placement: 'toolbar', actionType: 'invoke' },
|
|
115
|
+
{ key: 'save_scene_version', label: text('Save Version', '保存版本'), icon: 'ri-save-line', placement: 'toolbar', actionType: 'invoke' },
|
|
116
|
+
{ key: 'restore_version', label: text('Restore Version', '恢复版本'), icon: 'ri-history-line', actionType: 'invoke' },
|
|
117
|
+
{ key: 'mark_reviewed', label: text('Mark Reviewed', '标记已审核'), icon: 'ri-check-line', actionType: 'invoke' },
|
|
118
|
+
{ key: 'mark_draft', label: text('Move Back to Draft', '退回草稿'), icon: 'ri-edit-line', actionType: 'invoke' },
|
|
119
|
+
{ key: 'archive_drawing', label: text('Archive Drawing', '归档图形'), icon: 'ri-archive-line', actionType: 'invoke' },
|
|
120
|
+
{
|
|
121
|
+
key: 'import_scene_file',
|
|
122
|
+
label: text('Import Excalidraw File', '导入 Excalidraw 文件'),
|
|
123
|
+
icon: 'ri-upload-cloud-line',
|
|
124
|
+
placement: 'toolbar',
|
|
125
|
+
actionType: 'invoke',
|
|
126
|
+
transport: 'file'
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
key: 'save_converted_mermaid_scene',
|
|
130
|
+
label: text('Save Converted Mermaid Scene', '保存 Mermaid 转换结果'),
|
|
131
|
+
icon: 'ri-git-branch-line',
|
|
132
|
+
actionType: 'invoke'
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
key: 'prepare_agent_draw_message',
|
|
136
|
+
label: text('Ask Assistant to Draw', '让 Assistant 绘图'),
|
|
137
|
+
icon: 'ri-send-plane-line',
|
|
138
|
+
placement: 'toolbar',
|
|
139
|
+
actionType: 'invoke'
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
];
|
|
144
|
+
}
|
|
145
|
+
async getRemoteComponentEntry(_context, viewKey, component) {
|
|
146
|
+
if (viewKey !== EXCALIDRAW_WORKBENCH_VIEW_KEY || component.entry !== EXCALIDRAW_REMOTE_ENTRY_KEY) {
|
|
147
|
+
return {
|
|
148
|
+
html: '<!doctype html><html><body>Unsupported Excalidraw component.</body></html>',
|
|
149
|
+
contentType: 'text/html; charset=utf-8'
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const componentDir = join(__dirname, 'remote-components', EXCALIDRAW_REMOTE_ENTRY_KEY);
|
|
153
|
+
const appScript = await readFile(join(componentDir, 'app.js'), 'utf8');
|
|
154
|
+
const appCssPath = join(componentDir, 'app.css');
|
|
155
|
+
const appCss = existsSync(appCssPath) ? await readFile(appCssPath, 'utf8') : '';
|
|
156
|
+
const react = await readPackageFile('react', 'umd/react.production.min.js');
|
|
157
|
+
const reactDom = await readPackageFile('react-dom', 'umd/react-dom.production.min.js');
|
|
158
|
+
return {
|
|
159
|
+
html: renderRemoteReactIframeHtml({
|
|
160
|
+
title: 'Excalidraw Workbench',
|
|
161
|
+
lang: 'zh-Hans',
|
|
162
|
+
reactUmd: react,
|
|
163
|
+
reactDomUmd: reactDom,
|
|
164
|
+
appScript,
|
|
165
|
+
appCss
|
|
166
|
+
}),
|
|
167
|
+
contentType: 'text/html; charset=utf-8'
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
async getViewData(context, viewKey, query) {
|
|
171
|
+
if (viewKey !== EXCALIDRAW_WORKBENCH_VIEW_KEY) {
|
|
172
|
+
return {};
|
|
173
|
+
}
|
|
174
|
+
return this.service.getWorkbenchData(scopeFromContext(context), {
|
|
175
|
+
drawingId: getStringParameter(query.parameters, 'drawingId') ?? query.selectionId,
|
|
176
|
+
status: getStringParameter(query.parameters, 'status'),
|
|
177
|
+
kind: getStringParameter(query.parameters, 'kind'),
|
|
178
|
+
search: query.search,
|
|
179
|
+
page: query.page,
|
|
180
|
+
pageSize: query.pageSize
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
async executeViewAction(context, viewKey, actionKey, request) {
|
|
184
|
+
if (viewKey !== EXCALIDRAW_WORKBENCH_VIEW_KEY) {
|
|
185
|
+
return failure('Unsupported view', '不支持的视图');
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const scope = scopeFromContext(context);
|
|
189
|
+
if (actionKey === 'refresh') {
|
|
190
|
+
return success('Excalidraw view refreshed', 'Excalidraw 视图已刷新');
|
|
191
|
+
}
|
|
192
|
+
if (actionKey === 'create_drawing') {
|
|
193
|
+
const result = await this.service.createDrawing(scope, {
|
|
194
|
+
title: requireStringInput(request.input, 'title', 'Drawing title is required.'),
|
|
195
|
+
description: getStringInput(request.input, 'description'),
|
|
196
|
+
kind: getStringInput(request.input, 'kind'),
|
|
197
|
+
tags: getStringArrayInput(request.input, 'tags'),
|
|
198
|
+
source: 'workbench'
|
|
199
|
+
});
|
|
200
|
+
return {
|
|
201
|
+
...success('Drawing created', '图形已创建'),
|
|
202
|
+
data: result
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
if (actionKey === 'save_scene_version' || actionKey === 'save_converted_mermaid_scene') {
|
|
206
|
+
const drawingId = requireDrawingId(request);
|
|
207
|
+
const result = await this.service.saveSceneVersion(scope, {
|
|
208
|
+
drawingId,
|
|
209
|
+
elements: getArrayInput(request.input, 'elements'),
|
|
210
|
+
appState: getRecordInput(request.input, 'appState'),
|
|
211
|
+
files: getRecordInput(request.input, 'files'),
|
|
212
|
+
mermaidSource: getStringInput(request.input, 'mermaidSource'),
|
|
213
|
+
sourceType: actionKey === 'save_converted_mermaid_scene' ? 'workbench_mermaid' : 'workbench',
|
|
214
|
+
changeSummary: getStringInput(request.input, 'changeSummary')
|
|
215
|
+
});
|
|
216
|
+
return {
|
|
217
|
+
...success('Drawing version saved', '图形版本已保存'),
|
|
218
|
+
data: result
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
if (actionKey === 'restore_version') {
|
|
222
|
+
const result = await this.service.restoreVersion(scope, requireDrawingId(request), requireStringInput(request.input, 'versionId', 'Version id is required.'), getStringInput(request.input, 'changeSummary'));
|
|
223
|
+
return {
|
|
224
|
+
...success('Drawing version restored', '图形版本已恢复'),
|
|
225
|
+
data: result
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
if (actionKey === 'archive_drawing') {
|
|
229
|
+
const result = await this.service.updateDrawingStatus(scope, {
|
|
230
|
+
drawingId: requireDrawingId(request),
|
|
231
|
+
status: 'archived',
|
|
232
|
+
reason: getStringInput(request.input, 'reason')
|
|
233
|
+
});
|
|
234
|
+
return {
|
|
235
|
+
...success('Drawing archived', '图形已归档'),
|
|
236
|
+
data: result
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
if (actionKey === 'mark_reviewed' || actionKey === 'mark_draft') {
|
|
240
|
+
const status = actionKey === 'mark_reviewed' ? 'reviewed' : 'draft';
|
|
241
|
+
const result = await this.service.updateDrawingStatus(scope, {
|
|
242
|
+
drawingId: requireDrawingId(request),
|
|
243
|
+
status,
|
|
244
|
+
reason: getStringInput(request.input, 'reason')
|
|
245
|
+
});
|
|
246
|
+
return {
|
|
247
|
+
...success(status === 'reviewed' ? 'Drawing marked as reviewed' : 'Drawing moved back to draft', status === 'reviewed' ? '图形已标记为已审核' : '图形已退回草稿'),
|
|
248
|
+
data: result
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
if (actionKey === 'prepare_agent_draw_message') {
|
|
252
|
+
const prompt = requireStringInput(request.input, 'prompt', 'Drawing request is required.');
|
|
253
|
+
return {
|
|
254
|
+
...success('Assistant draw request prepared', 'Assistant 绘图请求已准备'),
|
|
255
|
+
data: {
|
|
256
|
+
commandKey: ASSISTANT_CHAT_SEND_MESSAGE_COMMAND,
|
|
257
|
+
payload: {
|
|
258
|
+
text: buildAgentDrawPrompt(prompt, getStringInput(request.input, 'drawingId'))
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
refresh: false
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
return failure('Unsupported action', '不支持的操作');
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
const message = getActionErrorMessage(error, 'Excalidraw action failed');
|
|
268
|
+
return {
|
|
269
|
+
success: false,
|
|
270
|
+
message: text(message, message)
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
async executeViewFileAction(context, viewKey, actionKey, request, file) {
|
|
275
|
+
if (viewKey !== EXCALIDRAW_WORKBENCH_VIEW_KEY) {
|
|
276
|
+
return failure('Unsupported view', '不支持的视图');
|
|
277
|
+
}
|
|
278
|
+
if (actionKey !== 'import_scene_file') {
|
|
279
|
+
return failure('Unsupported file action', '不支持的文件操作');
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
const scene = parseExcalidrawJsonFile(file);
|
|
283
|
+
const drawingId = getStringInput(request.input, 'drawingId') ?? getStringParameter(request.parameters, 'drawingId');
|
|
284
|
+
const scope = scopeFromContext(context);
|
|
285
|
+
const result = drawingId
|
|
286
|
+
? await this.service.saveSceneVersion(scope, {
|
|
287
|
+
drawingId,
|
|
288
|
+
elements: scene.elements,
|
|
289
|
+
appState: scene.appState,
|
|
290
|
+
files: scene.files,
|
|
291
|
+
sourceType: 'import',
|
|
292
|
+
changeSummary: `Imported ${file.originalname ?? 'Excalidraw file'}`
|
|
293
|
+
})
|
|
294
|
+
: await this.service.createDrawing(scope, {
|
|
295
|
+
title: getStringInput(request.input, 'title') ?? removeExcalidrawExtension(file.originalname) ?? 'Imported Excalidraw Drawing',
|
|
296
|
+
description: getStringInput(request.input, 'description'),
|
|
297
|
+
kind: 'diagram',
|
|
298
|
+
source: 'import',
|
|
299
|
+
elements: scene.elements,
|
|
300
|
+
appState: scene.appState,
|
|
301
|
+
files: scene.files,
|
|
302
|
+
changeSummary: `Imported ${file.originalname ?? 'Excalidraw file'}`
|
|
303
|
+
});
|
|
304
|
+
return {
|
|
305
|
+
...success('Excalidraw file imported', 'Excalidraw 文件已导入'),
|
|
306
|
+
data: result
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
const message = getActionErrorMessage(error, 'Failed to import Excalidraw file');
|
|
311
|
+
return {
|
|
312
|
+
success: false,
|
|
313
|
+
message: text(message, message)
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
ExcalidrawViewProvider = __decorate([
|
|
319
|
+
Injectable(),
|
|
320
|
+
ViewExtensionProvider(EXCALIDRAW_PROVIDER_KEY),
|
|
321
|
+
__metadata("design:paramtypes", [ExcalidrawService])
|
|
322
|
+
], ExcalidrawViewProvider);
|
|
323
|
+
export { ExcalidrawViewProvider };
|
|
324
|
+
async function readPackageFile(packageName, relativePath) {
|
|
325
|
+
const packageRoot = dirname(requireFromHere.resolve(`${packageName}/package.json`));
|
|
326
|
+
return readFile(join(packageRoot, relativePath), 'utf8');
|
|
327
|
+
}
|
|
328
|
+
function scopeFromContext(context) {
|
|
329
|
+
return {
|
|
330
|
+
tenantId: context.tenantId,
|
|
331
|
+
organizationId: context.organizationId ?? null,
|
|
332
|
+
workspaceId: context.workspaceId ?? null,
|
|
333
|
+
projectId: null,
|
|
334
|
+
userId: context.userId,
|
|
335
|
+
assistantId: context.hostType === 'agent' ? context.hostId : null
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function success(en_US, zh_Hans) {
|
|
339
|
+
return {
|
|
340
|
+
success: true,
|
|
341
|
+
message: text(en_US, zh_Hans),
|
|
342
|
+
refresh: true
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
function failure(en_US, zh_Hans) {
|
|
346
|
+
return {
|
|
347
|
+
success: false,
|
|
348
|
+
message: text(en_US, zh_Hans)
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function requireDrawingId(request) {
|
|
352
|
+
return (getStringInput(request.input, 'drawingId') ??
|
|
353
|
+
getStringParameter(request.parameters, 'drawingId') ??
|
|
354
|
+
requireString(request.targetId, 'Drawing id is required.'));
|
|
355
|
+
}
|
|
356
|
+
function requireStringInput(input, key, message) {
|
|
357
|
+
return requireString(getStringInput(input, key), message);
|
|
358
|
+
}
|
|
359
|
+
function requireString(value, message) {
|
|
360
|
+
const normalized = value?.trim();
|
|
361
|
+
if (!normalized) {
|
|
362
|
+
throw new Error(message);
|
|
363
|
+
}
|
|
364
|
+
return normalized;
|
|
365
|
+
}
|
|
366
|
+
function getStringInput(input, key) {
|
|
367
|
+
const value = input?.[key];
|
|
368
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
369
|
+
}
|
|
370
|
+
function getStringArrayInput(input, key) {
|
|
371
|
+
const value = input?.[key];
|
|
372
|
+
if (!Array.isArray(value)) {
|
|
373
|
+
return undefined;
|
|
374
|
+
}
|
|
375
|
+
return value.filter((item) => typeof item === 'string' && item.trim().length > 0).map((item) => item.trim());
|
|
376
|
+
}
|
|
377
|
+
function getArrayInput(input, key) {
|
|
378
|
+
const value = input?.[key];
|
|
379
|
+
return Array.isArray(value) ? value : [];
|
|
380
|
+
}
|
|
381
|
+
function getRecordInput(input, key) {
|
|
382
|
+
const value = input?.[key];
|
|
383
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
384
|
+
}
|
|
385
|
+
function getStringParameter(parameters, key) {
|
|
386
|
+
const value = parameters?.[key];
|
|
387
|
+
if (typeof value === 'string' && value.trim()) {
|
|
388
|
+
return value.trim();
|
|
389
|
+
}
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
function getActionErrorMessage(error, fallback) {
|
|
393
|
+
return error instanceof Error && error.message ? error.message : fallback;
|
|
394
|
+
}
|
|
395
|
+
function parseExcalidrawJsonFile(file) {
|
|
396
|
+
const raw = file.buffer.toString('utf8');
|
|
397
|
+
const parsed = JSON.parse(raw);
|
|
398
|
+
const elements = Array.isArray(parsed.elements) ? parsed.elements : [];
|
|
399
|
+
const appState = parsed.appState && typeof parsed.appState === 'object' && !Array.isArray(parsed.appState) ? parsed.appState : {};
|
|
400
|
+
const files = parsed.files && typeof parsed.files === 'object' && !Array.isArray(parsed.files) ? parsed.files : {};
|
|
401
|
+
return {
|
|
402
|
+
elements,
|
|
403
|
+
appState: appState,
|
|
404
|
+
files: files
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function removeExcalidrawExtension(name) {
|
|
408
|
+
const normalized = name?.trim();
|
|
409
|
+
if (!normalized) {
|
|
410
|
+
return undefined;
|
|
411
|
+
}
|
|
412
|
+
return normalized.replace(/\.excalidraw(?:\.json)?$/i, '').replace(/\.json$/i, '') || normalized;
|
|
413
|
+
}
|
|
414
|
+
function buildAgentDrawPrompt(prompt, drawingId) {
|
|
415
|
+
const context = drawingId ? `请更新当前 Excalidraw 图形 drawingId=${drawingId}。` : '请创建一张新的 Excalidraw 图形。';
|
|
416
|
+
return `${context}
|
|
417
|
+
|
|
418
|
+
用户绘图需求:
|
|
419
|
+
${prompt}
|
|
420
|
+
|
|
421
|
+
请优先判断是否适合 Mermaid 草稿;流程图、架构流、状态流可调用 excalidraw_save_mermaid_draft。需要精确布局或自由图形时,生成 Excalidraw elements 并调用 excalidraw_create_drawing、excalidraw_save_scene_version 或 excalidraw_patch_scene。更新已有图形前先调用 excalidraw_get_drawing。`;
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=excalidraw-view.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excalidraw-view.provider.js","sourceRoot":"","sources":["../../src/lib/excalidraw-view.provider.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAYxC,OAAO,EAEL,2BAA2B,EAC3B,qBAAqB,EAEtB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,mCAAmC,EACnC,kBAAkB,EAClB,eAAe,EACf,gCAAgC,EAChC,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,6BAA6B,EAC9B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAG3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AACrC,MAAM,eAAe,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;AACjD,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAc,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AAI1E,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAE3D,QAAQ,CAAC,OAAqC;QAC5C,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAA;IACrC,CAAC;IAED,gBAAgB,CAAC,OAAqC,EAAE,IAAY;QAClE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,KAAK,yBAAyB,IAAI,IAAI,KAAK,0BAA0B,CAAC,EAAE,CAAC;YAChH,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,0BAA0B,CAAA;QAEjD,OAAO;YACL;gBACE,GAAG,EAAE,6BAA6B;gBAClC,KAAK,EAAE,IAAI,CAAC,sBAAsB,EAAE,kBAAkB,CAAC;gBACvD,WAAW,EAAE,IAAI,CACf,sFAAsF,EACtF,mCAAmC,CACpC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,eAAe;oBACtB,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,YAAY;iBAClB;gBACD,QAAQ,EAAE,OAAO;gBACjB,IAAI;gBACJ,KAAK,EAAE,EAAE;gBACT,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE;oBACV,gBAAgB,EAAE,CAAC,kBAAkB,CAAC;iBACvC;gBACD,GAAG,CAAC,KAAK;oBACP,CAAC,CAAC;wBACE,SAAS,EAAE;4BACT,KAAK,EAAE,IAAI;4BACX,IAAI,EAAE;gCACJ,OAAO,EAAE,IAAI;gCACb,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC;gCAC1C,KAAK,EAAE,EAAE;gCACT,IAAI,EAAE;oCACJ,IAAI,EAAE,KAAK;oCACX,KAAK,EAAE,eAAe;oCACtB,GAAG,EAAE,YAAY;iCAClB;6BACF;yBACF;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,MAAM,EAAE;oBACN,QAAQ,EAAE,uBAAuB;oBACjC,MAAM,EAAE,sBAAsB;iBAC/B;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,OAAO;oBAChB,eAAe,EAAE,CAAC;oBAClB,SAAS,EAAE;wBACT,SAAS,EAAE,QAAQ;wBACnB,KAAK,EAAE,2BAA2B;qBACnC;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,UAAU;qBACjB;iBACF;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE;wBACX,kBAAkB,EAAE,IAAI;wBACxB,cAAc,EAAE,IAAI;wBACpB,kBAAkB,EAAE,IAAI;wBACxB,eAAe,EAAE,EAAE;qBACpB;oBACD,KAAK,EAAE;wBACL,OAAO,EAAE,KAAK;qBACf;iBACF;gBACD,UAAU,EAAE;oBACV,aAAa,EAAE;wBACb;4BACE,GAAG,EAAE,2BAA2B;4BAChC,KAAK,EAAE,0BAA0B;4BACjC,MAAM,EAAE;gCACN,OAAO,EAAE,CAAC,SAAS,CAAC;gCACpB,SAAS,EAAE,CAAC,GAAG,gCAAgC,CAAC;6BACjD;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,SAAS;gCACf,UAAU,EAAE,IAAI;6BACjB;yBACF;qBACF;iBACF;gBACD,cAAc,EAAE;oBACd;wBACE,GAAG,EAAE,mCAAmC;wBACxC,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;qBAC1D;iBACF;gBACD,OAAO,EAAE;oBACP,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE;oBACtH,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE;oBAC9H,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE;oBACpI,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE;oBACjH,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,QAAQ,EAAE;oBAC5G,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;oBAC5G,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE;oBACjH;wBACE,GAAG,EAAE,mBAAmB;wBACxB,KAAK,EAAE,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,CAAC;wBACzD,IAAI,EAAE,sBAAsB;wBAC5B,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,QAAQ;wBACpB,SAAS,EAAE,MAAM;qBAClB;oBACD;wBACE,GAAG,EAAE,8BAA8B;wBACnC,KAAK,EAAE,IAAI,CAAC,8BAA8B,EAAE,iBAAiB,CAAC;wBAC9D,IAAI,EAAE,oBAAoB;wBAC1B,UAAU,EAAE,QAAQ;qBACrB;oBACD;wBACE,GAAG,EAAE,4BAA4B;wBACjC,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;wBACtD,IAAI,EAAE,oBAAoB;wBAC1B,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,QAAQ;qBACrB;iBACF;aACF;SACF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,QAAsC,EACtC,OAAe,EACf,SAAsD;QAEtD,IAAI,OAAO,KAAK,6BAA6B,IAAI,SAAS,CAAC,KAAK,KAAK,2BAA2B,EAAE,CAAC;YACjG,OAAO;gBACL,IAAI,EAAE,4EAA4E;gBAClF,WAAW,EAAE,0BAA0B;aACxC,CAAA;QACH,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAA;QACtF,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAA;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC/E,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAA;QAC3E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,iCAAiC,CAAC,CAAA;QAEtF,OAAO;YACL,IAAI,EAAE,2BAA2B,CAAC;gBAChC,KAAK,EAAE,sBAAsB;gBAC7B,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,QAAQ;gBACrB,SAAS;gBACT,MAAM;aACP,CAAC;YACF,WAAW,EAAE,0BAA0B;SACxC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAqC,EACrC,OAAe,EACf,KAAqB;QAErB,IAAI,OAAO,KAAK,6BAA6B,EAAE,CAAC;YAC9C,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE;YAC9D,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW;YACjF,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAwC;YAC7F,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAsC;YACvF,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,OAAqC,EACrC,OAAe,EACf,SAAiB,EACjB,OAA+B;QAE/B,IAAI,OAAO,KAAK,6BAA6B,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,OAAO,CAAC,2BAA2B,EAAE,kBAAkB,CAAC,CAAA;YACjE,CAAC;YAED,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE;oBACrD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,4BAA4B,CAAC;oBAC/E,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC;oBACzD,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAsC;oBAChF,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;oBAChD,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAA;gBACF,OAAO;oBACL,GAAG,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;oBACtC,IAAI,EAAE,MAAM;iBACb,CAAA;YACH,CAAC;YAED,IAAI,SAAS,KAAK,oBAAoB,IAAI,SAAS,KAAK,8BAA8B,EAAE,CAAC;gBACvF,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;oBACxD,SAAS;oBACT,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;oBAClD,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;oBACnD,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;oBAC7C,aAAa,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC;oBAC7D,UAAU,EAAE,SAAS,KAAK,8BAA8B,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW;oBAC5F,aAAa,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC;iBAC9D,CAAC,CAAA;gBACF,OAAO;oBACL,GAAG,OAAO,CAAC,uBAAuB,EAAE,SAAS,CAAC;oBAC9C,IAAI,EAAE,MAAM;iBACb,CAAA;YACH,CAAC;YAED,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC9C,KAAK,EACL,gBAAgB,CAAC,OAAO,CAAC,EACzB,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,yBAAyB,CAAC,EACzE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAC/C,CAAA;gBACD,OAAO;oBACL,GAAG,OAAO,CAAC,0BAA0B,EAAE,SAAS,CAAC;oBACjD,IAAI,EAAE,MAAM;iBACb,CAAA;YACH,CAAC;YAED,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE;oBAC3D,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC;oBACpC,MAAM,EAAE,UAAU;oBAClB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;iBAChD,CAAC,CAAA;gBACF,OAAO;oBACL,GAAG,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC;oBACvC,IAAI,EAAE,MAAM;iBACb,CAAA;YACH,CAAC;YAED,IAAI,SAAS,KAAK,eAAe,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;gBAChE,MAAM,MAAM,GAAG,SAAS,KAAK,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAA;gBACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE;oBAC3D,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC;oBACpC,MAAM;oBACN,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;iBAChD,CAAC,CAAA;gBACF,OAAO;oBACL,GAAG,OAAO,CACR,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,6BAA6B,EACpF,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAChD;oBACD,IAAI,EAAE,MAAM;iBACb,CAAA;YACH,CAAC;YAED,IAAI,SAAS,KAAK,4BAA4B,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,8BAA8B,CAAC,CAAA;gBAC1F,OAAO;oBACL,GAAG,OAAO,CAAC,iCAAiC,EAAE,mBAAmB,CAAC;oBAClE,IAAI,EAAE;wBACJ,UAAU,EAAE,mCAAmC;wBAC/C,OAAO,EAAE;4BACP,IAAI,EAAE,oBAAoB,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;yBAC/E;qBACF;oBACD,OAAO,EAAE,KAAK;iBACf,CAAA;YACH,CAAC;YAED,OAAO,OAAO,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAA;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAA;YACxE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;aAChC,CAAA;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,OAAqC,EACrC,OAAe,EACf,SAAiB,EACjB,OAA+B,EAC/B,IAA6B;QAE7B,IAAI,OAAO,KAAK,6BAA6B,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;QAC9C,CAAC;QACD,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAA;QACvD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;YACnH,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;YACvC,MAAM,MAAM,GAAG,SAAS;gBACtB,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE;oBACzC,SAAS;oBACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,UAAU,EAAE,QAAQ;oBACpB,aAAa,EAAE,YAAY,IAAI,CAAC,YAAY,IAAI,iBAAiB,EAAE;iBACpE,CAAC;gBACJ,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE;oBACtC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,6BAA6B;oBAC9H,WAAW,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC;oBACzD,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,aAAa,EAAE,YAAY,IAAI,CAAC,YAAY,IAAI,iBAAiB,EAAE;iBACpE,CAAC,CAAA;YAEN,OAAO;gBACL,GAAG,OAAO,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;gBAC1D,IAAI,EAAE,MAAM;aACb,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAA;YAChF,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;aAChC,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA;AA3VY,sBAAsB;IAFlC,UAAU,EAAE;IACZ,qBAAqB,CAAC,uBAAuB,CAAC;qCAEP,iBAAiB;GAD5C,sBAAsB,CA2VlC;;AAED,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,YAAoB;IACtE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,WAAW,eAAe,CAAC,CAAC,CAAA;IACnF,OAAO,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAqC;IAC7D,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC9C,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;KAClE,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,OAAe;IAC7C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;QAC7B,OAAO,EAAE,IAAI;KACd,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,OAAe;IAC7C,OAAO;QACL,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B;IACvD,OAAO,CACL,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;QAC1C,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;QACnD,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAC3D,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAsC,EAAE,GAAW,EAAE,OAAe;IAC9F,OAAO,aAAa,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,aAAa,CAAC,KAAyB,EAAE,OAAe;IAC/D,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,KAAsC,EAAE,GAAW;IACzE,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7E,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAsC,EAAE,GAAW;IAC9E,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9H,CAAC;AAED,SAAS,aAAa,CAAC,KAAsC,EAAE,GAAW;IACxE,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,KAAsC,EAAE,GAAW;IACzE,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9G,CAAC;AAED,SAAS,kBAAkB,CAAC,UAA+E,EAAE,GAAW;IACtH,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc,EAAE,QAAgB;IAC7D,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAA;AAC3E,CAAC;AAED,SAAS,uBAAuB,CAAC,IAA6B;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAA;IACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACtE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACjI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClH,OAAO;QACL,QAAQ;QACR,QAAQ,EAAE,QAAmC;QAC7C,KAAK,EAAE,KAAgC;KACxC,CAAA;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAwB;IACzD,MAAM,UAAU,GAAG,IAAI,EAAE,IAAI,EAAE,CAAA;IAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,UAAU,CAAA;AAClG,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,SAAkB;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,iCAAiC,SAAS,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAA;IACpG,OAAO,GAAG,OAAO;;;EAGjB,MAAM;;8NAEsN,CAAA;AAC9N,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TAgentMiddlewareMeta } from '@xpert-ai/contracts';
|
|
2
|
+
import { AgentMiddleware, IAgentMiddlewareContext, IAgentMiddlewareStrategy, PromiseOrValue } from '@xpert-ai/plugin-sdk';
|
|
3
|
+
import { ExcalidrawService } from './excalidraw.service.js';
|
|
4
|
+
export declare class ExcalidrawMiddleware implements IAgentMiddlewareStrategy<Record<string, never>> {
|
|
5
|
+
private readonly service;
|
|
6
|
+
readonly meta: TAgentMiddlewareMeta;
|
|
7
|
+
constructor(service: ExcalidrawService);
|
|
8
|
+
createMiddleware(_options: Record<string, never>, context: IAgentMiddlewareContext): PromiseOrValue<AgentMiddleware>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=excalidraw.middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excalidraw.middleware.d.ts","sourceRoot":"","sources":["../../src/lib/excalidraw.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EACL,eAAe,EAEf,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EAEf,MAAM,sBAAsB,CAAA;AAe7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAqF3D,qBAEa,oBAAqB,YAAW,wBAAwB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAwB9E,OAAO,CAAC,QAAQ,CAAC,OAAO;IAvBpC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAqBlC;gBAE4B,OAAO,EAAE,iBAAiB;IAEvD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,uBAAuB,GAAG,cAAc,CAAC,eAAe,CAAC;CA+ErH"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Injectable } from '@nestjs/common';
|
|
3
|
+
import { tool } from '@langchain/core/tools';
|
|
4
|
+
import { AgentMiddlewareStrategy, RequestContext } from '@xpert-ai/plugin-sdk';
|
|
5
|
+
import { z } from 'zod/v3';
|
|
6
|
+
import { EXCALIDRAW_CREATE_DRAWING_TOOL_NAME, EXCALIDRAW_FEATURE, EXCALIDRAW_GET_DRAWING_TOOL_NAME, EXCALIDRAW_ICON, EXCALIDRAW_MIDDLEWARE_NAME, EXCALIDRAW_PATCH_SCENE_TOOL_NAME, EXCALIDRAW_REPORT_FAILURE_TOOL_NAME, EXCALIDRAW_SAVE_MERMAID_DRAFT_TOOL_NAME, EXCALIDRAW_SAVE_SCENE_VERSION_TOOL_NAME, EXCALIDRAW_SEARCH_DRAWINGS_TOOL_NAME, EXCALIDRAW_UPDATE_DRAWING_STATUS_TOOL_NAME } from './constants.js';
|
|
7
|
+
import { ExcalidrawService } from './excalidraw.service.js';
|
|
8
|
+
const drawingKindSchema = z.enum(['diagram', 'whiteboard', 'flowchart', 'architecture', 'wireframe', 'other']);
|
|
9
|
+
const drawingStatusSchema = z.enum(['draft', 'reviewed', 'archived']);
|
|
10
|
+
const versionSourceSchema = z.enum([
|
|
11
|
+
'agent_json',
|
|
12
|
+
'agent_patch',
|
|
13
|
+
'agent_mermaid',
|
|
14
|
+
'workbench',
|
|
15
|
+
'workbench_mermaid',
|
|
16
|
+
'import',
|
|
17
|
+
'restore'
|
|
18
|
+
]);
|
|
19
|
+
const recordSchema = z.record(z.unknown());
|
|
20
|
+
const elementUpdateSchema = z.object({ id: z.string().min(1) }).catchall(z.unknown());
|
|
21
|
+
const sceneSchema = z.object({
|
|
22
|
+
elements: z.array(z.unknown()).optional().describe('Excalidraw element array. Prefer valid Excalidraw element JSON.'),
|
|
23
|
+
appState: recordSchema.optional().describe('Excalidraw appState JSON. Keep only serializable values.'),
|
|
24
|
+
files: recordSchema.optional().describe('Excalidraw binary files map, when available.'),
|
|
25
|
+
mermaidSource: z.string().optional().describe('Original Mermaid source when this scene came from Mermaid.')
|
|
26
|
+
});
|
|
27
|
+
const createDrawingSchema = sceneSchema.extend({
|
|
28
|
+
title: z.string().min(1).describe('Human-readable drawing title.'),
|
|
29
|
+
description: z.string().optional(),
|
|
30
|
+
kind: drawingKindSchema.optional(),
|
|
31
|
+
tags: z.array(z.string()).optional(),
|
|
32
|
+
source: z.string().optional().describe('Short source label, such as user_request, agent_plan, or imported_file.'),
|
|
33
|
+
changeSummary: z.string().optional().describe('Short summary for the initial version.')
|
|
34
|
+
});
|
|
35
|
+
const saveSceneVersionSchema = sceneSchema.extend({
|
|
36
|
+
drawingId: z.string().min(1).describe('Existing Excalidraw drawing id.'),
|
|
37
|
+
sourceType: versionSourceSchema.optional().describe('Where this version came from. Agent-created JSON should use agent_json.'),
|
|
38
|
+
changeSummary: z.string().optional()
|
|
39
|
+
});
|
|
40
|
+
const patchSceneSchema = z.object({
|
|
41
|
+
drawingId: z.string().min(1),
|
|
42
|
+
addElements: z.array(z.unknown()).optional().describe('Elements to append to the current scene.'),
|
|
43
|
+
updateElements: z.array(elementUpdateSchema).optional().describe('Shallow element updates keyed by id.'),
|
|
44
|
+
deleteElementIds: z.array(z.string()).optional().describe('Element ids to remove from the current scene.'),
|
|
45
|
+
appStatePatch: recordSchema.optional().describe('Shallow appState patch.'),
|
|
46
|
+
files: recordSchema.optional().describe('Replacement files map. Omit to keep current files.'),
|
|
47
|
+
mermaidSource: z.string().optional().describe('Replacement Mermaid source. Omit to keep current source.'),
|
|
48
|
+
changeSummary: z.string().optional()
|
|
49
|
+
});
|
|
50
|
+
const saveMermaidDraftSchema = z.object({
|
|
51
|
+
drawingId: z.string().optional().describe('Existing drawing id. Omit to create a new drawing for this Mermaid draft.'),
|
|
52
|
+
title: z.string().optional().describe('Required when drawingId is omitted; otherwise used only as context.'),
|
|
53
|
+
description: z.string().optional(),
|
|
54
|
+
kind: drawingKindSchema.optional(),
|
|
55
|
+
mermaidSource: z.string().min(1).describe('Mermaid diagram source. Flowcharts convert to editable Excalidraw elements best.'),
|
|
56
|
+
changeSummary: z.string().optional()
|
|
57
|
+
});
|
|
58
|
+
const searchDrawingsSchema = z.object({
|
|
59
|
+
status: drawingStatusSchema.optional(),
|
|
60
|
+
kind: drawingKindSchema.optional(),
|
|
61
|
+
search: z.string().optional(),
|
|
62
|
+
page: z.number().int().min(1).optional(),
|
|
63
|
+
pageSize: z.number().int().min(1).max(100).optional()
|
|
64
|
+
});
|
|
65
|
+
const getDrawingSchema = z.object({
|
|
66
|
+
drawingId: z.string().min(1)
|
|
67
|
+
});
|
|
68
|
+
const updateDrawingStatusSchema = z.object({
|
|
69
|
+
drawingId: z.string().min(1),
|
|
70
|
+
status: drawingStatusSchema,
|
|
71
|
+
reason: z.string().optional()
|
|
72
|
+
});
|
|
73
|
+
const reportFailureSchema = z.object({
|
|
74
|
+
drawingId: z.string().optional(),
|
|
75
|
+
versionId: z.string().optional(),
|
|
76
|
+
operation: z.string().min(1),
|
|
77
|
+
errorMessage: z.string().min(1),
|
|
78
|
+
recoverable: z.boolean().optional(),
|
|
79
|
+
evidence: z.unknown().optional()
|
|
80
|
+
});
|
|
81
|
+
let ExcalidrawMiddleware = class ExcalidrawMiddleware {
|
|
82
|
+
constructor(service) {
|
|
83
|
+
this.service = service;
|
|
84
|
+
this.meta = {
|
|
85
|
+
name: EXCALIDRAW_MIDDLEWARE_NAME,
|
|
86
|
+
label: {
|
|
87
|
+
en_US: 'Excalidraw',
|
|
88
|
+
zh_Hans: 'Excalidraw 绘图'
|
|
89
|
+
},
|
|
90
|
+
description: {
|
|
91
|
+
en_US: 'Create, update, version, search, and recover Excalidraw diagrams from an Agent.',
|
|
92
|
+
zh_Hans: '让 Agent 创建、更新、版本化、检索和恢复 Excalidraw 图形。'
|
|
93
|
+
},
|
|
94
|
+
icon: {
|
|
95
|
+
type: 'svg',
|
|
96
|
+
value: EXCALIDRAW_ICON,
|
|
97
|
+
color: '#2563eb'
|
|
98
|
+
},
|
|
99
|
+
features: [EXCALIDRAW_FEATURE],
|
|
100
|
+
configSchema: {
|
|
101
|
+
type: 'object',
|
|
102
|
+
properties: {},
|
|
103
|
+
required: []
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
createMiddleware(_options, context) {
|
|
108
|
+
const scope = scopeFromContext(context);
|
|
109
|
+
return {
|
|
110
|
+
name: EXCALIDRAW_MIDDLEWARE_NAME,
|
|
111
|
+
tools: [
|
|
112
|
+
tool(async (input) => JSON.stringify(await this.service.createDrawing(scope, input), null, 2), {
|
|
113
|
+
name: EXCALIDRAW_CREATE_DRAWING_TOOL_NAME,
|
|
114
|
+
description: 'Create a reviewable Excalidraw drawing. Include initial elements/appState/files when you can produce valid Excalidraw JSON; otherwise create the drawing first and then save a Mermaid draft.',
|
|
115
|
+
schema: createDrawingSchema
|
|
116
|
+
}),
|
|
117
|
+
tool(async (input) => JSON.stringify(await this.service.saveSceneVersion(scope, input), null, 2), {
|
|
118
|
+
name: EXCALIDRAW_SAVE_SCENE_VERSION_TOOL_NAME,
|
|
119
|
+
description: 'Save a complete Excalidraw scene as a new version for an existing drawing. Call excalidraw_get_drawing first when updating an existing user-edited drawing.',
|
|
120
|
+
schema: saveSceneVersionSchema
|
|
121
|
+
}),
|
|
122
|
+
tool(async (input) => JSON.stringify(await this.service.patchScene(scope, input), null, 2), {
|
|
123
|
+
name: EXCALIDRAW_PATCH_SCENE_TOOL_NAME,
|
|
124
|
+
description: 'Apply add/update/delete element changes to the current drawing version and save the result as a new version. Prefer this for small targeted edits.',
|
|
125
|
+
schema: patchSceneSchema
|
|
126
|
+
}),
|
|
127
|
+
tool(async (input) => JSON.stringify(await this.service.saveMermaidDraft(scope, input), null, 2), {
|
|
128
|
+
name: EXCALIDRAW_SAVE_MERMAID_DRAFT_TOOL_NAME,
|
|
129
|
+
description: 'Save Mermaid source for conversion in the Excalidraw workbench. Use this for flowcharts, architecture flows, state diagrams, and sequence-style drafts before manual review.',
|
|
130
|
+
schema: saveMermaidDraftSchema
|
|
131
|
+
}),
|
|
132
|
+
tool(async (input) => JSON.stringify(await this.service.searchDrawings(scope, input), null, 2), {
|
|
133
|
+
name: EXCALIDRAW_SEARCH_DRAWINGS_TOOL_NAME,
|
|
134
|
+
description: 'Search existing Excalidraw drawings by status, kind, keyword, and pagination.',
|
|
135
|
+
schema: searchDrawingsSchema
|
|
136
|
+
}),
|
|
137
|
+
tool(async (input) => JSON.stringify(await this.service.getDrawing(scope, input.drawingId), null, 2), {
|
|
138
|
+
name: EXCALIDRAW_GET_DRAWING_TOOL_NAME,
|
|
139
|
+
description: 'Get a drawing with current version, version history, Mermaid source, and recent action logs before making updates.',
|
|
140
|
+
schema: getDrawingSchema
|
|
141
|
+
}),
|
|
142
|
+
tool(async (input) => JSON.stringify(await this.service.updateDrawingStatus(scope, input), null, 2), {
|
|
143
|
+
name: EXCALIDRAW_UPDATE_DRAWING_STATUS_TOOL_NAME,
|
|
144
|
+
description: 'Update a drawing status to draft, reviewed, or archived after user confirmation or workflow completion.',
|
|
145
|
+
schema: updateDrawingStatusSchema
|
|
146
|
+
}),
|
|
147
|
+
tool(async (input) => JSON.stringify(await this.service.reportFailure(scope, input), null, 2), {
|
|
148
|
+
name: EXCALIDRAW_REPORT_FAILURE_TOOL_NAME,
|
|
149
|
+
description: 'Record a failed drawing or conversion attempt with recoverability and evidence. Use this instead of silently dropping bad source material.',
|
|
150
|
+
schema: reportFailureSchema
|
|
151
|
+
})
|
|
152
|
+
]
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
ExcalidrawMiddleware = __decorate([
|
|
157
|
+
Injectable(),
|
|
158
|
+
AgentMiddlewareStrategy(EXCALIDRAW_MIDDLEWARE_NAME),
|
|
159
|
+
__metadata("design:paramtypes", [ExcalidrawService])
|
|
160
|
+
], ExcalidrawMiddleware);
|
|
161
|
+
export { ExcalidrawMiddleware };
|
|
162
|
+
function scopeFromContext(context) {
|
|
163
|
+
return {
|
|
164
|
+
tenantId: context.tenantId,
|
|
165
|
+
organizationId: context.organizationId === undefined ? RequestContext.getOrganizationId() : context.organizationId,
|
|
166
|
+
workspaceId: context.workspaceId ?? null,
|
|
167
|
+
projectId: context.projectId ?? null,
|
|
168
|
+
userId: context.userId,
|
|
169
|
+
conversationId: context.conversationId ?? null,
|
|
170
|
+
assistantId: context.xpertId ?? null
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=excalidraw.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"excalidraw.middleware.js","sourceRoot":"","sources":["../../src/lib/excalidraw.middleware.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAE5C,OAAO,EAEL,uBAAuB,EAIvB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAA;AAC1B,OAAO,EACL,mCAAmC,EACnC,kBAAkB,EAClB,gCAAgC,EAChC,eAAe,EACf,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,uCAAuC,EACvC,uCAAuC,EACvC,oCAAoC,EACpC,0CAA0C,EAC3C,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAG3D,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;AAC9G,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;AACrE,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,YAAY;IACZ,aAAa;IACb,eAAe;IACf,WAAW;IACX,mBAAmB;IACnB,QAAQ;IACR,SAAS;CACV,CAAC,CAAA;AACF,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AAC1C,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AACrF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IACrH,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IACtG,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IACvF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;CAC5G,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;IACjH,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACxF,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,WAAW,CAAC,MAAM,CAAC;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACxE,UAAU,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;IAC9H,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACjG,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACxG,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC1G,aAAa,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1E,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IAC7F,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IACzG,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IACtH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;IAC5G,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kFAAkF,CAAC;IAC7H,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,EAAE;IACtC,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,mBAAmB;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAA;AAEF,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAA;AAIK,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAwB/B,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;QAvB9C,SAAI,GAAyB;YACpC,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE;gBACL,KAAK,EAAE,YAAY;gBACnB,OAAO,EAAE,eAAe;aACzB;YACD,WAAW,EAAE;gBACX,KAAK,EAAE,iFAAiF;gBACxF,OAAO,EAAE,wCAAwC;aAClD;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,SAAS;aACjB;YACD,QAAQ,EAAE,CAAC,kBAAkB,CAAC;YAC9B,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;aACb;SACF,CAAA;IAEyD,CAAC;IAE3D,gBAAgB,CAAC,QAA+B,EAAE,OAAgC;QAChF,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAEvC,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE;gBACL,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EACxF;oBACE,IAAI,EAAE,mCAAmC;oBACzC,WAAW,EACT,+LAA+L;oBACjM,MAAM,EAAE,mBAAmB;iBAC5B,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAC3F;oBACE,IAAI,EAAE,uCAAuC;oBAC7C,WAAW,EACT,6JAA6J;oBAC/J,MAAM,EAAE,sBAAsB;iBAC/B,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EACrF;oBACE,IAAI,EAAE,gCAAgC;oBACtC,WAAW,EACT,oJAAoJ;oBACtJ,MAAM,EAAE,gBAAgB;iBACzB,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAC3F;oBACE,IAAI,EAAE,uCAAuC;oBAC7C,WAAW,EACT,8KAA8K;oBAChL,MAAM,EAAE,sBAAsB;iBAC/B,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EACzF;oBACE,IAAI,EAAE,oCAAoC;oBAC1C,WAAW,EAAE,+EAA+E;oBAC5F,MAAM,EAAE,oBAAoB;iBAC7B,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAC/F;oBACE,IAAI,EAAE,gCAAgC;oBACtC,WAAW,EACT,oHAAoH;oBACtH,MAAM,EAAE,gBAAgB;iBACzB,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9F;oBACE,IAAI,EAAE,0CAA0C;oBAChD,WAAW,EAAE,yGAAyG;oBACtH,MAAM,EAAE,yBAAyB;iBAClC,CACF;gBACD,IAAI,CACF,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EACxF;oBACE,IAAI,EAAE,mCAAmC;oBACzC,WAAW,EACT,4IAA4I;oBAC9I,MAAM,EAAE,mBAAmB;iBAC5B,CACF;aACF;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAzGY,oBAAoB;IAFhC,UAAU,EAAE;IACZ,uBAAuB,CAAC,0BAA0B,CAAC;qCAyBZ,iBAAiB;GAxB5C,oBAAoB,CAyGhC;;AAED,SAAS,gBAAgB,CAAC,OAAgC;IACxD,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc;QAClH,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC9C,WAAW,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;KACrC,CAAA;AACH,CAAC"}
|