flycode-mcp 1.9.1 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +69 -18
  2. package/dist/flycode-mcp.min.js +2 -0
  3. package/package.json +21 -8
  4. package/dist/clients/authClient.js +0 -43
  5. package/dist/clients/authClient.js.map +0 -1
  6. package/dist/clients/databaseFunctionClient.js +0 -16
  7. package/dist/clients/databaseFunctionClient.js.map +0 -1
  8. package/dist/clients/entityClient.js +0 -28
  9. package/dist/clients/entityClient.js.map +0 -1
  10. package/dist/clients/formClient.js +0 -30
  11. package/dist/clients/formClient.js.map +0 -1
  12. package/dist/clients/functionClient.js +0 -30
  13. package/dist/clients/functionClient.js.map +0 -1
  14. package/dist/clients/logicClient.js +0 -45
  15. package/dist/clients/logicClient.js.map +0 -1
  16. package/dist/clients/runClient.js +0 -16
  17. package/dist/clients/runClient.js.map +0 -1
  18. package/dist/clients/types.js +0 -7
  19. package/dist/clients/types.js.map +0 -1
  20. package/dist/index.js +0 -53
  21. package/dist/index.js.map +0 -1
  22. package/dist/service/auth.js +0 -84
  23. package/dist/service/auth.js.map +0 -1
  24. package/dist/service/logic.js +0 -261
  25. package/dist/service/logic.js.map +0 -1
  26. package/dist/store/tenant.js +0 -20
  27. package/dist/store/tenant.js.map +0 -1
  28. package/dist/store/token.js +0 -25
  29. package/dist/store/token.js.map +0 -1
  30. package/dist/tools/common.js +0 -61
  31. package/dist/tools/common.js.map +0 -1
  32. package/dist/tools/database-function/read.js +0 -98
  33. package/dist/tools/database-function/read.js.map +0 -1
  34. package/dist/tools/entity/read.js +0 -169
  35. package/dist/tools/entity/read.js.map +0 -1
  36. package/dist/tools/entity/schemas.js +0 -65
  37. package/dist/tools/entity/schemas.js.map +0 -1
  38. package/dist/tools/form/read.js +0 -202
  39. package/dist/tools/form/read.js.map +0 -1
  40. package/dist/tools/function/read.js +0 -187
  41. package/dist/tools/function/read.js.map +0 -1
  42. package/dist/tools/logic/read.js +0 -170
  43. package/dist/tools/logic/read.js.map +0 -1
  44. package/dist/tools/logic/schemas.js +0 -122
  45. package/dist/tools/logic/schemas.js.map +0 -1
  46. package/dist/tools/logic/write.js +0 -296
  47. package/dist/tools/logic/write.js.map +0 -1
  48. package/dist/tools/run/read.js +0 -65
  49. package/dist/tools/run/read.js.map +0 -1
  50. package/dist/utils/config.js +0 -26
  51. package/dist/utils/config.js.map +0 -1
  52. package/dist/utils/date.js +0 -45
  53. package/dist/utils/date.js.map +0 -1
  54. package/dist/utils/error.js +0 -30
  55. package/dist/utils/error.js.map +0 -1
  56. package/dist/utils/mcp-types.js +0 -2
  57. package/dist/utils/mcp-types.js.map +0 -1
  58. package/dist/utils/request.js +0 -74
  59. package/dist/utils/request.js.map +0 -1
  60. package/dist/utils/snowflake.js +0 -119
  61. package/dist/utils/snowflake.js.map +0 -1
  62. package/dist/utils/str-replace.js +0 -353
  63. package/dist/utils/str-replace.js.map +0 -1
@@ -1,122 +0,0 @@
1
- import { z } from 'zod';
2
- /**
3
- * 业务逻辑的“属性”结构(LogicParameterProperties):
4
- * input/output 参数数组中每个对象可能携带的字段级属性。
5
- * 字段类型严格依据 logicClient.ts 中的 LogicParameterProperties 接口声明构建。
6
- * 该结构不含唯一编码字段,故全部字段均声明为可选且可空(匹配 TS 侧 LogicParameterProperties)。
7
- */
8
- export const logicParameterPropertiesSchema = z.array(z.object({
9
- marktype: z.string().optional().nullable().describe('创建标记:0-平台;1-产品;2-租户'),
10
- name: z.string().optional().nullable().describe('此字段的名称,代码中用此名字访问'),
11
- objectcode: z.string().optional().nullable().describe('此字段所属的实体的编码,如果是自定义参数则此编码为空字符串'),
12
- propertycode: z.string().optional().nullable().describe('此字段的编码,只有当此字段有所属实体时才有值,临时创建的自定义实体的字段则为空字符串'),
13
- propertyname: z.string().optional().nullable().describe('此字段的中文名,阅读友好'),
14
- propertytypecode: z.string().optional().nullable().describe('字段类型,整数字符串,含义:1-主键(int8);2-名称(200);3-文本(200);4-长文本;5-整数(int4);6-长整数(int8);10-数字(numeric);7-日期时间(ts);30-时间范围;29-年月日(date);18-状态(int4);16-图片;26-附件;17-定位;19-选项集;200000000000-关联对象;100000000000-业务对象;10000000000-字典对象;300000000000-复杂关联对象;1000000000-本对象;8-创建人(int8);9-修改人(int8);11-创建时间(ts);12-修改时间(ts);31-拼音;100-是否默认;13-手机号;15-固定电话;14-邮箱;27-邮编;20-排序(int4)')
15
- }).catchall(z.unknown()));
16
- /**
17
- * 业务逻辑的“输入/输出参数”结构(LogicParameters):
18
- * input 定义 flycode 中内置对象 IN 可获取到的内容,output 定义赋值给 OUT 的内容。
19
- * 该结构不含唯一编码字段,故全部字段均声明为可选且可空(匹配 TS 侧 LogicParameters)。
20
- */
21
- export const logicParametersSchema = z.array(z.object({
22
- datatype: z.string().optional().nullable().describe('整数字符串:0-单实体;1-数组。0 表示 IN.name 或 OUT.xxx 是个对象;1 表示是个数组'),
23
- marktype: z.string().optional().nullable().describe('创建标记:0-平台;1-产品;2-租户'),
24
- name: z.string().optional().nullable().describe('此参数对象/数组的名字,代码中用此名字访问'),
25
- objectcode: z.string().optional().nullable().describe('此参数关联的实体的编码,如果是自定义参数则此编码为空字符串'),
26
- objectname: z.string().optional().nullable().describe('此参数的中文名称,阅读友好'),
27
- properties: logicParameterPropertiesSchema.optional().nullable().describe('此参数的属性数组:单实体时是 IN.name 这个对象有的属性;数组时是 IN.name 这个数组中的元素对象的属性'),
28
- customcode: z.string().optional().nullable().describe('自定义输出对象的编码(仅自定义输出参数可能携带,如内部函数 output)')
29
- }).catchall(z.unknown()));
30
- /**
31
- * 业务逻辑的操作步骤结构(LogicOperations),flycode 脚本代码即在其中。
32
- * 仅 modellogiccode(唯一编码)保持必填,其余字段均声明为可选且可空(匹配 TS 侧 LogicOperations)。
33
- * 本层及内部 dynamic / templateparams 内联对象均追加 .catchall(z.unknown()),
34
- * 实现对服务端返回未声明字段的原样透传(不剥离、不报错)。
35
- */
36
- export const logicOperationsSchema = z.array(z.object({
37
- dynamic: z.object({
38
- fieldblacklist: z.unknown().optional().nullable().describe('字段黑名单'),
39
- fieldmap: z.unknown().optional().nullable().describe('字段映射')
40
- }).catchall(z.unknown()).optional().nullable().describe('动态配置'),
41
- marktype: z.string().optional().nullable().describe('创建标记'),
42
- modellogiccode: z.string().describe('业务逻辑编码'),
43
- modellogicstepcode: z.string().optional().nullable().describe('业务逻辑步骤编码'),
44
- modellogicstepname: z.string().optional().nullable().describe('业务逻辑步骤名称'),
45
- seq: z.coerce.number().optional().nullable().describe('顺序'),
46
- status: z.string().optional().nullable().describe('状态'),
47
- templateparams: z.object({
48
- flycode: z.string().optional().nullable().describe('flycode 脚本代码字符串'),
49
- sourcemap: z.string().optional().nullable().describe('源映射'),
50
- tempcompiledflycode: z.string().optional().nullable().describe('编译后的 flycode')
51
- }).catchall(z.unknown()).optional().nullable().describe('模板参数,内含具体的 flycode 代码(导出结构仅含 flycode)'),
52
- templateref: z.string().optional().nullable().describe('模板引用')
53
- }).catchall(z.unknown()));
54
- /**
55
- * 导出类业务逻辑的绑定配置(仅 actioncategory=5 导出 时存在)。
56
- * 仅 modelcode(唯一编码)保持必填,其余字段均声明为可选且可空(匹配 TS 侧 LogicBindJson)。
57
- * 本层及内部 bindcols 元素均追加 .catchall(z.unknown()),原样透传未声明字段。
58
- */
59
- export const logicBindJsonSchema = z.object({
60
- bindcols: z.array(z.object({
61
- field: z.string().optional().nullable().describe('字段名(对应业务对象的属性名)'),
62
- column: z.string().optional().nullable().describe('导出后的列标题'),
63
- width: z.string().optional().nullable().describe('列宽'),
64
- type: z.string().optional().nullable().describe('字段类型,如 string'),
65
- dynamictext: z.unknown().optional().nullable().describe('动态文本配置')
66
- }).catchall(z.unknown()).optional().nullable().describe('导出的列定义')),
67
- modelcode: z.string().describe('业务模型编码'),
68
- logiccode: z.string().optional().nullable().describe('业务逻辑编码'),
69
- logicname: z.string().optional().nullable().describe('业务逻辑名称')
70
- }).catchall(z.unknown());
71
- /**
72
- * 完整的业务逻辑对象(LogicResult)的字段形状(ZodRawShape),
73
- * 即 get_model_logic 的返回结构,也是 save_model_logic 入参所需的结构——
74
- * 两者共用同一份字段定义,保证“查到什么就能原样存回”。
75
- *
76
- * 拆成两层导出,以分别匹配 MCP 工具的两种类型要求:
77
- * - logicResultShape:纯字段形状(Record<string, ZodType>),可直接作为 outputSchema 使用;
78
- * - logicResultSchema:由该形状构建的 z.looseObject(保留未声明字段,等价旧版 .passthrough()),
79
- * 作为 write 侧 inputSchema.logic 的单个 ZodType 使用。
80
- *
81
- * 使用宽松 object 的原因:
82
- * - 写侧:保存时必须把 get 返回的完整对象(含 schema 未枚举的字段)原样回传服务端,不能丢字段;
83
- * - 读侧:服务端偶发返回 schema 未覆盖的额外字段时,宽松校验可避免 -32602 Output validation 报错。
84
- *
85
- * 字段可空性约定:除唯一编码字段 modelcode / modellogiccode 保持必填外,
86
- * 其余字段均声明为可选且可空(.optional().nullable()),以匹配 logicClient.ts 中
87
- * LogicResult 的类型定义(所有非唯一编码字段均支持 可选 / null / undefined),
88
- * 从而避免服务端返回 null 时触发 -32602 Output validation 报错。
89
- *
90
- * 透传约定:本层使用 z.looseObject(顶层 passthrough),
91
- * 而 operations / bindjson / rest / input / output 等嵌套结构引用独立 zod schema,
92
- * 这些 schema 内部均追加了 .catchall(z.unknown()),使整条嵌套链路对任意层级的未声明字段都能原样透传。
93
- */
94
- export const logicResultShape = {
95
- actioncategory: z.string().optional().nullable().describe('行为类型,整数,含义:1-flycode接口;2-微服务;3-内部函数;4-导入;5-导出;6-flycode导入;7-flycode导出'),
96
- actiontype: z.string().optional().nullable().describe('操作类型, 整数, 含义:1-列表查询;2-单个查询;3-数据提交;4-批量提交;5-导入;6-导出;7-离线数据获取;8-流程;9-业务调度;10-ipaas接口'),
97
- description: z.string().optional().nullable().describe('对此业务领域的描述说明(微服务结构用 descr 代替)'),
98
- descr: z.string().optional().nullable().describe('描述说明的替用字段,仅微服务(actioncategory=2)返回,等价于 description'),
99
- execmode: z.string().optional().nullable().describe('执行方式,1-同步;2-异步'),
100
- executionmode: z.string().optional().nullable().describe('执行模式,standard-标准模式;strict-严格模式'),
101
- functionname: z.string().optional().nullable().describe('此业务逻辑的函数命名(A业务逻辑中调用B业务逻辑时要写函数名)'),
102
- idempotenttype: z.string().optional().nullable().describe('保留字段,空字符串'),
103
- input: logicParametersSchema.optional().nullable().describe('该字段定义了此业务逻辑的输入:flycode 中的内置对象 IN 中可获取到的内容(微服务结构无此字段)'),
104
- logicscript: z.string().optional().nullable().describe('保留字段,空字符串'),
105
- marktype: z.string().optional().nullable().describe('创建标记:0-平台;1-产品;2-租户'),
106
- message: z.string().optional().nullable().describe('提交信息,每次保存时填写的,类似 git 的提交信息(导出类结构可能缺)'),
107
- modelcode: z.string().describe('此业务逻辑所属的业务模型的唯一编码'),
108
- modellogiccode: z.string().describe('此业务逻辑的编码'),
109
- modellogicname: z.string().optional().nullable().describe('此业务逻辑的标题'),
110
- operations: logicOperationsSchema.optional().nullable().describe('此业务逻辑的操作信息(微服务结构无此字段);通常数组中只有单个元素,该元素对象中就有 flycode 代码字符串'),
111
- output: logicParametersSchema.optional().nullable().describe('该字段定义了此业务逻辑的输出:flycode 中将会赋值给内置对象 OUT 的内容(微服务结构无此字段)'),
112
- rest: z.object({ server: z.string().optional().nullable().describe('微服务地址'), url: z.string().optional().nullable().describe('微服务路径') }).catchall(z.unknown()).optional().nullable().describe('微服务的 REST 配置,仅 actioncategory=2 微服务 时存在'),
113
- bindjson: logicBindJsonSchema.optional().nullable().describe('导出绑定的 Excel 列配置,仅 actioncategory=5 导出 时存在'),
114
- status: z.coerce.number().optional().nullable().describe('状态,1-启用'),
115
- tenantdbcode: z.string().optional().nullable().describe('保留字段,租户数据库编码'),
116
- tenantdbname: z.string().optional().nullable().describe('保留字段,租户数据库操作权限,枚举值含义:只读-数据库只能查询不能增删改;读写-数据库可增删改查;报表-保留字段'),
117
- tenantdbtype: z.string().optional().nullable().describe('tenantdbname 对应的 key 值'),
118
- uilogicscript: z.string().optional().nullable().describe('离线脚本,仅用于 app 端离线数据提交'),
119
- usedatarule: z.string().optional().nullable().describe('1 代表使用数据权限')
120
- };
121
- export const logicResultSchema = z.looseObject(logicResultShape);
122
- //# sourceMappingURL=schemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/tools/logic/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,296 +0,0 @@
1
- import { z } from 'zod';
2
- import { extractError } from '../../utils/error.js';
3
- import { saveModelLogic, simpleSaveFlyCodeModelLogic, replaceFlyCodeSegments } from '../../service/logic.js';
4
- import { logicResultSchema, logicParametersSchema } from './schemas.js';
5
- /**
6
- * 提交信息结构(CommitMessage)。
7
- */
8
- const commitMessageSchema = z.object({
9
- committype: z.enum(['saverecord', 'feature', 'fix', 'stylefix', 'refactor', 'testfix']).describe('提交类型,类型 committype 和名称 committypetext 一一对应'),
10
- committypetext: z.enum(['保存记录', '新功能添加', 'bug修改', '样式修改', '重构', '测试']).describe('提交类型名称,与 committype 一一对应'),
11
- msgbody: z.string().optional().describe('消息内容。提交类型为 saverecord 时忽略(服务端自动填当前时间,格式 yyyy-MM-dd hh:mm);其他类型填写对应提交内容,按 git 提交规范写')
12
- });
13
- /** 写入类工具:新增、更新、保存等会修改数据的操作。 */
14
- export const writeTools = [
15
- {
16
- name: 'save_model_logic',
17
- config: {
18
- title: '保存业务逻辑',
19
- description: `保存(新增或更新)一条业务逻辑。传入从 get_model_logic 查询得到的完整 LogicResult 对象,按需修改其中的 flycode 脚本(operations[].templateparams.flycode)、输入输出参数(input/output)或标题后回传,并附带提交信息 commitMessage。服务端按 overwrite=false 保存(不覆盖他人最新版本)。
20
-
21
- 【构造 LogicResult 的枚举速查】(字段含义与 get_model_logic 返回一致,原样回传即可)
22
- - actioncategory(行为类型):1-flycode接口;2-微服务;3-内部函数;4-导入;5-导出;6-flycode导入;7-flycode导出
23
- - actiontype(操作类型):1-列表查询;2-单个查询;3-数据提交;4-批量提交;5-导入;6-导出;7-离线数据获取;8-流程;9-业务调度;10-ipaas接口
24
- - execmode(执行方式):1-同步;2-异步
25
- - marktype(创建标记):0-平台;1-产品;2-租户
26
- - status(状态):1-启用
27
- - confsource(配置来源):1-IDE配置;2-用户级配置
28
- - input/output[].datatype(参数形态):0-单实体;1-数组
29
- - input/output[].properties[].propertytypecode(字段类型):1-主键(int8);2-名称(200);3-文本(200);4-长文本;5-整数(int4);6-长整数(int8);10-数字(numeric);7-日期时间(ts);30-时间范围;29-年月日(date);18-状态(int4);16-图片;26-附件;17-定位;19-选项集;200000000000-关联对象;100000000000-业务对象;10000000000-字典对象;300000000000-复杂关联对象;1000000000-本对象;8-创建人(int8);9-修改人(int8);11-创建时间(ts);12-修改时间(ts);31-拼音;100-是否默认;13-手机号;15-固定电话;14-邮箱;27-邮编;20-排序(int4)`,
30
- inputSchema: {
31
- logic: logicResultSchema.describe('完整的业务逻辑 JSON 对象(LogicResult),通常来自 get_model_logic 的返回,修改后回传'),
32
- commitMessage: commitMessageSchema.describe('提交信息,类型与名称需一一对应;msgbody 在非 saverecord 时必填')
33
- },
34
- outputSchema: {
35
- result: z.string().describe('保存操作的结果消息(服务端返回的 resp_data 字符串;失败时返回错误体 JSON)')
36
- },
37
- annotations: {
38
- readOnlyHint: false, // 此操作会修改数据
39
- destructiveHint: false, // 保存为非破坏性写入
40
- idempotentHint: false // 重复保存可能产生新的提交版本
41
- }
42
- },
43
- handler: async (args) => {
44
- const { logic, commitMessage } = args;
45
- // 兜底 msgbody:service 仅在 committype==='saverecord' 时自动填当前时间,
46
- // 其他类型若未传则给空字符串,避免把 undefined 透传给服务端。
47
- const commit = {
48
- committype: commitMessage.committype,
49
- committypetext: commitMessage.committypetext,
50
- msgbody: commitMessage.msgbody ?? ''
51
- };
52
- try {
53
- const text = await saveModelLogic(logic, commit);
54
- return {
55
- content: [{
56
- type: 'text',
57
- text
58
- }],
59
- // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
60
- // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
61
- // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
62
- structuredContent: { result: text }
63
- };
64
- }
65
- catch (e) {
66
- // service 层已捕获业务/网络错误并转为字符串返回,理论上极少走到这里;
67
- // 若 saveModelLogic 自身抛错(如入参非法),把原始错误体原样返回。
68
- const text = extractError(e);
69
- return {
70
- isError: true,
71
- content: [{
72
- type: 'text',
73
- text
74
- }],
75
- structuredContent: { result: text }
76
- };
77
- }
78
- }
79
- },
80
- {
81
- name: 'simple_save_flycode_model_logic',
82
- config: {
83
- title: '简易保存 flycode 业务逻辑',
84
- description: `保存(新增或更新)一条"含 flycode 脚本"的业务逻辑,但只需提供少量参数,大幅减少上下文占用。
85
-
86
- 与 save_model_logic 的区别:save_model_logic 需要回传从 get_model_logic 查到的完整 LogicResult 对象(往往很大,易因超长被截断);本工具只需传入 modellogiccode、flycode 以及(可选的)input / output,服务端会自动按 modellogiccode 拉取完整对象并只覆盖这几个字段,其余字段原样保留。
87
-
88
- 适用场景:你正在修改的业务逻辑领域是 flycode(actioncategory 为 1/6/7 等含 flycode 的类型),仅需变更脚本或输入/输出参数时,优先用本工具。
89
- 不适用场景:导出(actioncategory=5)等不含 flycode 的特殊领域,没有 operations 脚本结构,请改用完整的 save_model_logic 工具保存。
90
-
91
- 服务端按 overwrite=false 保存(不覆盖他人最新版本)。
92
-
93
- 【input/output 参数枚举速查】(仅当传 input/output 时需要,结构同 logicParametersSchema)
94
- - datatype(参数形态):0-单实体(IN.name 是对象);1-数组(IN.name 是数组)
95
- - properties[].propertytypecode(字段类型):1-主键(int8);2-名称(200);3-文本(200);4-长文本;5-整数(int4);6-长整数(int8);10-数字(numeric);7-日期时间(ts);30-时间范围;29-年月日(date);18-状态(int4);16-图片;26-附件;17-定位;19-选项集;200000000000-关联对象;100000000000-业务对象;10000000000-字典对象;300000000000-复杂关联对象;1000000000-本对象;8-创建人(int8);9-修改人(int8);11-创建时间(ts);12-修改时间(ts);31-拼音;100-是否默认;13-手机号;15-固定电话;14-邮箱;27-邮编;20-排序(int4)`,
96
- inputSchema: {
97
- modelLogicCode: z.string().describe('要保存的业务逻辑的编码(即 get_model_logic 返回的 modellogiccode)'),
98
- flycode: z.string().describe('flycode 脚本代码字符串,将写入 operations[0].templateparams.flycode,覆盖原有脚本'),
99
- input: logicParametersSchema.optional().describe('输入参数(IN 结构)。不传则保留该业务逻辑原值;传空数组表示清空输入'),
100
- output: logicParametersSchema.optional().describe('输出参数(OUT 结构)。不传则保留该业务逻辑原值;传空数组表示清空输出'),
101
- commitMessage: commitMessageSchema.describe('提交信息,类型与名称需一一对应;msgbody 在非 saverecord 时必填')
102
- },
103
- outputSchema: {
104
- result: z.string().describe('保存操作的结果消息(服务端返回的 resp_data 字符串;失败时返回错误体 JSON)')
105
- },
106
- annotations: {
107
- readOnlyHint: false, // 此操作会修改数据
108
- destructiveHint: false, // 保存为非破坏性写入
109
- idempotentHint: false // 重复保存可能产生新的提交版本
110
- }
111
- },
112
- handler: async (args) => {
113
- const { modelLogicCode, flycode, input, output, commitMessage } = args;
114
- // 兜底 msgbody:service 仅在 committype==='saverecord' 时自动填当前时间,
115
- // 其他类型若未传则给空字符串,避免把 undefined 透传给服务端。
116
- const commit = {
117
- committype: commitMessage.committype,
118
- committypetext: commitMessage.committypetext,
119
- msgbody: commitMessage.msgbody ?? ''
120
- };
121
- try {
122
- const text = await simpleSaveFlyCodeModelLogic(modelLogicCode, flycode, input, output, commit);
123
- return {
124
- content: [{
125
- type: 'text',
126
- text
127
- }],
128
- // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
129
- // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
130
- // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
131
- structuredContent: { result: text }
132
- };
133
- }
134
- catch (e) {
135
- // simpleSaveFlyCodeModelLogic 内 getModelLogic 拉取失败等异常会透传到这里,
136
- // 把原始错误体原样返回。
137
- const text = extractError(e);
138
- return {
139
- isError: true,
140
- content: [{
141
- type: 'text',
142
- text
143
- }],
144
- structuredContent: { result: text }
145
- };
146
- }
147
- }
148
- },
149
- {
150
- name: 'str_replace_flycode',
151
- config: {
152
- title: '批量局部替换 flycode 脚本',
153
- description: `以 str_replace_editor 模式局部修改业务逻辑的 flycode 脚本:只需传入要改动的新旧代码片段(oldString / newString),不必回传整份脚本,由服务端拉取完整对象后完成定位与替换,大幅节省上下文。
154
-
155
- 【何时用本工具 / 何时用别的】
156
- - 改 1~N 处局部片段(最常用)→ 本工具,一次调用可批量提交多个 ops
157
- - 整份脚本重写、大范围重构 → simple_save_flycode_model_logic
158
- - 非 flycode 领域(导出等)或要改 input / output 结构 → save_model_logic
159
-
160
- 【事务性】ops 具备事务性:全部 op 预演成功才会落库,任一 op 失败则整批中止、不产生任何写入(零写入回滚)。实现上整批只发起一次保存请求,不存在写一半的中间态。
161
-
162
- 【执行顺序】ops 按数组顺序依次执行,ops[i+1] 在 ops[i] 的结果上匹配,因此允许「先插入一段代码,再改这段里的某行」这类依赖;反之若 ops[i+1] 的原文已被 ops[i] 删除,则报 NOT_FOUND 并整批中止。
163
-
164
- 【oldString 书写要求(决定成败)】
165
- - 必须非空,且在目标脚本中唯一命中(否则报 NOT_UNIQUE)
166
- - 推荐 3~10 行,务必包含一处能区分于其他位置的上下文;太短容易多命中
167
- - 直接从查询到的脚本原文里复制,不要凭记忆重写;缩进、空行、换行都要一致
168
- - 匹配默认容忍换行符差异(CRLF / LF)与行尾空白差异;需要字节严格相等时把 matchMode 设为 exact
169
- - 命中多处的相同片段:用 occurrence 指定改第几处,或 replaceAll=true 全部替换
170
-
171
- 【失败后的自纠】返回体中 ops[].message 说明原因;NOT_FOUND 时 ops[].suggestions 会给出最相似的候选(含行号与相似度),据此修正 oldString 后重试即可。改动较大或不确定是否唯一时,建议先 dryRun=true 预览 diff 再正式提交。`,
172
- inputSchema: {
173
- modelLogicCode: z.string().describe('要修改的业务逻辑的编码(即 get_model_logic 返回的 modellogiccode)'),
174
- ops: z.array(z.object({
175
- oldString: z.string().describe('待替换的原文片段,必须非空且在目标脚本中唯一命中;请从查询到的脚本原文原样复制(含缩进与换行)'),
176
- newString: z.string().describe('替换后的新文本;传空字符串表示删除 oldString 这段内容'),
177
- operationIndex: z.number().int().nonnegative().optional().describe('作用于第几个 operation 的 flycode 脚本,默认 0。多数业务逻辑只有一个 operation,无需传'),
178
- replaceAll: z.boolean().optional().describe('是否替换全部匹配,默认 false。与 occurrence 互斥,仅在你确认要改掉所有同名片段时置 true'),
179
- occurrence: z.number().int().positive().optional().describe('只替换第 N 个匹配(1-based),用于「多处相同片段只改其中一处」;与 replaceAll 互斥'),
180
- matchMode: z.enum(['exact', 'normalized']).optional().describe('匹配严格度,默认 normalized(容忍 CRLF/LF 与行尾空白差异);exact 为字节严格相等'),
181
- label: z.string().optional().describe('可选标识,仅用于在返回报告中辨认该 op,不影响执行')
182
- })).min(1).describe('替换操作数组,至少一个元素;按数组顺序依次执行,全部成功才落库'),
183
- commitMessage: commitMessageSchema.describe('提交信息,整批 ops 共用一个;类型与名称需一一对应,msgbody 在非 saverecord 时必填'),
184
- dryRun: z.boolean().optional().describe('只预演并输出 diff、不落库,默认 false。改动较大或不确定 oldString 是否唯一时建议先置 true'),
185
- contextLines: z.number().int().min(0).max(10).optional().describe('diff 中每个改动点上下保留的上下文行数,默认 3'),
186
- verify: z.boolean().optional().describe('保存后是否回读校验所有改动已生效,默认 true')
187
- },
188
- outputSchema: {
189
- ok: z.boolean().describe('整体是否成功(dryRun 成功也为 true,但 applied=false)'),
190
- applied: z.boolean().describe('是否已落库;dryRun 或任一 op 预演失败时为 false'),
191
- verified: z.boolean().nullable().describe('保存后回读校验结果:true 全部生效、false 存在异常、null 未落库或未开启校验'),
192
- errorCode: z.string().describe('错误码:OK / DRY_RUN / EMPTY_OPS / FETCH_FAILED / NO_OPERATIONS / OPS_FAILED / SAVE_FAILED / VERIFY_FAILED'),
193
- message: z.string().describe('结果说明;失败时给出可直接执行的处理建议'),
194
- lengthBefore: z.coerce.number().describe('替换前脚本总字符数'),
195
- lengthAfter: z.coerce.number().describe('替换后脚本总字符数'),
196
- diff: z.string().describe('全部 op 的 diff 片段(unified hunk 形态),超长会截断;此处只回改动片段,不回整份脚本'),
197
- ops: z.array(z.object({
198
- index: z.coerce.number().describe('在 ops 数组中的下标'),
199
- label: z.string().nullable().describe('调用方传入的标识'),
200
- status: z.string().describe('该 op 的执行状态:OK / FAILED'),
201
- errorCode: z.string().describe('该 op 的错误码:OK / EMPTY_OLD_STRING / NOT_FOUND / NOT_UNIQUE / NO_TARGET / INVALID_PARAMS / OCCURRENCE_OUT_OF_RANGE'),
202
- message: z.string().nullable().describe('失败原因说明,成功时为 null'),
203
- operationIndex: z.coerce.number().describe('实际作用的 operation 下标'),
204
- matchCount: z.coerce.number().describe('oldString 的匹配总数'),
205
- replacedCount: z.coerce.number().describe('实际替换的处数'),
206
- range: z.object({
207
- startOffset: z.coerce.number().describe('起始字符偏移'),
208
- endOffset: z.coerce.number().describe('结束字符偏移(不含)'),
209
- startLine: z.coerce.number().describe('起始行号,1-based'),
210
- endLine: z.coerce.number().describe('结束行号,1-based')
211
- }).nullable().describe('首个替换点的位置,未执行时为 null'),
212
- suggestions: z.array(z.object({
213
- startLine: z.coerce.number().describe('候选片段起始行号'),
214
- score: z.coerce.number().describe('相似度,0~1'),
215
- preview: z.string().describe('候选片段预览')
216
- })).nullable().describe('NOT_FOUND 时的相似候选,供修正 oldString 参考'),
217
- dependentOnFailedOp: z.boolean().describe('前序 op 已失败时为 true,表示本 op 的结果可能受其影响'),
218
- hunk: z.string().nullable().describe('该 op 产生的 diff 片段')
219
- })).describe('每个 op 的执行结果,与入参 ops 一一对应')
220
- },
221
- annotations: {
222
- readOnlyHint: false, // 此操作会修改数据
223
- destructiveHint: false, // 局部替换为非破坏性写入,且有事务性保护
224
- idempotentHint: false // 成功后重复调用会因 oldString 已不存在而失败(fail-closed)
225
- }
226
- },
227
- handler: async (args) => {
228
- const { modelLogicCode, ops, commitMessage, dryRun = false, contextLines = 3, verify = true } = args;
229
- // 兜底 msgbody:service 仅在 committype==='saverecord' 时自动填当前时间,
230
- // 其他类型若未传则给空字符串,避免把 undefined 透传给服务端。
231
- const commit = {
232
- committype: commitMessage.committype,
233
- committypetext: commitMessage.committypetext,
234
- msgbody: commitMessage.msgbody ?? ''
235
- };
236
- try {
237
- const result = await replaceFlyCodeSegments(modelLogicCode, ops, commit, { dryRun, contextLines, verify });
238
- // content 保持精简:只回状态、每个 op 的结论与 diff,不回整份脚本,
239
- // 避免把大文本塞两份(content 与 structuredContent 各一份)。
240
- return {
241
- isError: !result.ok,
242
- content: [{
243
- type: 'text',
244
- text: JSON.stringify({
245
- ok: result.ok,
246
- applied: result.applied,
247
- verified: result.verified,
248
- errorCode: result.errorCode,
249
- message: result.message,
250
- ops: result.ops.map((o) => ({
251
- index: o.index,
252
- status: o.status,
253
- errorCode: o.errorCode,
254
- message: o.message,
255
- operationIndex: o.operationIndex,
256
- matchCount: o.matchCount,
257
- replacedCount: o.replacedCount,
258
- range: o.range,
259
- suggestions: o.suggestions,
260
- dependentOnFailedOp: o.dependentOnFailedOp
261
- })),
262
- diff: result.diff
263
- })
264
- }],
265
- // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
266
- // structuredContent 与之匹配,否则会抛 -32602。
267
- structuredContent: result
268
- };
269
- }
270
- catch (e) {
271
- // replaceFlyCodeSegments 内部已捕获业务/网络错误,走到这里通常是入参非法等意外;
272
- // 把原始错误体原样返回,并保证 structuredContent 与 outputSchema 形状一致。
273
- const text = extractError(e);
274
- return {
275
- isError: true,
276
- content: [{
277
- type: 'text',
278
- text
279
- }],
280
- structuredContent: {
281
- ok: false,
282
- applied: false,
283
- verified: null,
284
- errorCode: 'SAVE_FAILED',
285
- message: text,
286
- lengthBefore: 0,
287
- lengthAfter: 0,
288
- diff: '',
289
- ops: []
290
- }
291
- };
292
- }
293
- }
294
- }
295
- ];
296
- //# sourceMappingURL=write.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../../src/tools/logic/write.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { z } from 'zod';
2
- import { extractError } from '../../utils/error.js';
3
- import { sqlRun } from '../../clients/runClient.js';
4
- /**
5
- * 执行 SQL 查询结果(SqlRunResult)的 outputSchema 形状。
6
- * 字段类型严格依据 runClient.ts 中的 SqlRunResult 接口声明构建:
7
- * - data:查询结果数据,接口声明为 unknown[] | null(可选且可空),每行是一条记录对象。
8
- * 由于每行内部结构无法提前约束,统一以 z.unknown() 承接,保证服务端返回的任何行都能通过校验。
9
- * - influenceCount:查询结果总数,接口声明为 number | null(可选且可空);对字符串型数字用 z.coerce.number() 容错。
10
- * 使用 z.looseObject 实现服务端偶发返回的额外字段原样透传,避免 -32602 Output validation 报错。
11
- * 描述文字直接采用 runClient.ts 中 SqlRunResult 各字段的注释内容。
12
- */
13
- const sqlRunResultShape = {
14
- data: z.array(z.unknown()).nullable().optional().describe('查询结果数据,数组中的每一项为一条查询结果记录(对象)'),
15
- influenceCount: z.coerce.number().nullable().optional().describe('查询结果总数')
16
- };
17
- /** 只读类工具:查询、列表、读取等不会修改数据的操作。 */
18
- export const readTools = [
19
- {
20
- name: 'run_sql',
21
- config: {
22
- title: '执行 SQL 查询',
23
- description: '在业务库(数据库为 PostgreSQL)中执行一条 SELECT 查询 SQL(接口仅支持 SELECT,一次只能一条 SQL,只能查业务表的数据,需要查表有哪些字段请使用 get_entity ),返回查询结果数据 data 与结果总数 influenceCount。适用于直接探查业务表数据、核对字段值、验证同步结果等只读场景。',
24
- inputSchema: {
25
- sql: z.string().describe('要执行的 SQL 查询语句,只支持 SELECT 查询,一次只能一条 SQL')
26
- },
27
- // z.looseObject 实现有额外字段时原样透传
28
- outputSchema: z.looseObject(sqlRunResultShape),
29
- annotations: {
30
- readOnlyHint: true, // 此操作只执行 SELECT 查询,不会修改数据
31
- destructiveHint: false, // 此操作不具有破坏性
32
- idempotentHint: true // 重复执行同一条 SELECT 结果相同
33
- }
34
- },
35
- handler: async (args) => {
36
- const { sql } = args;
37
- try {
38
- const res = await sqlRun({ sql });
39
- return {
40
- content: [{
41
- type: 'text',
42
- text: JSON.stringify(res.resp_data)
43
- }],
44
- // outputSchema 已在工具上声明,SDK 1.30 要求调用结果必须携带
45
- // structuredContent 与之匹配,否则会抛 -32602;这里同时返回
46
- // 文本(给人/模型阅读)和结构化内容(供 schema 校验)。
47
- structuredContent: res.resp_data
48
- };
49
- }
50
- catch (e) {
51
- // 业务/网络错误:HTTP 非 200 时 Axios 已在传输层抛出,
52
- // 错误体形如 {"error_type":600,"error_code":"token无效,请重新登录","error_params":null}
53
- // 将其原始 JSON 原样返回给模型,不做二次包装。
54
- return {
55
- isError: true,
56
- content: [{
57
- type: 'text',
58
- text: extractError(e)
59
- }]
60
- };
61
- }
62
- }
63
- }
64
- ];
65
- //# sourceMappingURL=read.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/run/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAGnD;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAAG;IACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACxF,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;CACrD,CAAA;AAEvB,gCAAgC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAc;IAClC;QACE,IAAI,EAAE,SAAS;QACf,MAAM,EAAE;YACN,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,yKAAyK;YACtL,WAAW,EAAE;gBACX,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;aACnE;YACD,6BAA6B;YAC7B,YAAY,EAAE,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAA2B;YACxE,WAAW,EAAE;gBACX,YAAY,EAAE,IAAI,EAAM,0BAA0B;gBAClD,eAAe,EAAE,KAAK,EAAE,YAAY;gBACpC,cAAc,EAAE,IAAI,CAAI,sBAAsB;aAC/C;SACF;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;gBACjC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;yBACpC,CAAC;oBACF,2CAA2C;oBAC3C,4CAA4C;oBAC5C,kCAAkC;oBAClC,iBAAiB,EAAE,GAAG,CAAC,SAA+C;iBACvE,CAAA;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,sCAAsC;gBACtC,4EAA4E;gBAC5E,4BAA4B;gBAC5B,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;yBACtB,CAAC;iBACH,CAAA;YACH,CAAC;QACH,CAAC;KACF;CACF,CAAA"}
@@ -1,26 +0,0 @@
1
- export const BASE_URL = "http://mconfig.xuantongkeji.com:51074";
2
- // username=xxx&password=xxx&tenantCode=xxx&envName=xxx
3
- export const USERNAME_KEY = 'username';
4
- export const PASSWORD_KEY = 'password';
5
- export const TENANT_CODE_KEY = 'tenantCode';
6
- export const ENV_NAME_KEY = 'envName';
7
- function req(name, fallback) {
8
- const args = process.argv.slice(2);
9
- const query = args.join('&');
10
- const params = new URLSearchParams(query);
11
- const v = params.get(name);
12
- if (v !== null && v !== '') {
13
- return v;
14
- }
15
- if (fallback !== undefined) {
16
- return fallback;
17
- }
18
- throw new Error(`Missing required arg: ${name}`);
19
- }
20
- export const config = {
21
- username: req(USERNAME_KEY),
22
- password: req(PASSWORD_KEY),
23
- tenantCode: req(TENANT_CODE_KEY),
24
- envName: req(ENV_NAME_KEY),
25
- };
26
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,uCAAuC,CAAA;AAE/D,uDAAuD;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAA;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAA;AACtC,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAA;AAC3C,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAA;AASrC,SAAS,GAAG,CAAC,IAAY,EAAE,QAAiB;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAA;IAEzC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAW;IAC5B,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC;IAC3B,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC;IAC3B,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC;IAChC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC;CAC3B,CAAA"}
@@ -1,45 +0,0 @@
1
- /**
2
- * 将 Date 对象按照给定的格式字符串进行格式化
3
- * @param date - 要格式化的日期对象
4
- * @param format - 格式字符串,支持以下占位符:
5
- * - YYYY / YY : 四位 / 两位年份
6
- * - MM / M : 两位 / 一位月份(1-12)
7
- * - DD / D : 两位 / 一位日期(1-31)
8
- * - HH / H : 两位 / 一位小时(0-23)
9
- * - mm / m : 两位 / 一位分钟(0-59)
10
- * - ss / s : 两位 / 一位秒数(0-59)
11
- * - SSS : 三位毫秒(000-999)
12
- * @returns 格式化后的日期字符串
13
- * @throws 当 date 无效时抛出错误
14
- */
15
- export function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
16
- // 检查日期是否有效
17
- if (isNaN(date.getTime())) {
18
- throw new Error('Invalid date provided');
19
- }
20
- // 定义占位符与对应值的映射(值均为字符串)
21
- const replacements = {
22
- YYYY: date.getFullYear().toString(),
23
- YY: date.getFullYear().toString().slice(-2),
24
- MM: String(date.getMonth() + 1).padStart(2, '0'),
25
- M: String(date.getMonth() + 1),
26
- DD: String(date.getDate()).padStart(2, '0'),
27
- D: String(date.getDate()),
28
- HH: String(date.getHours()).padStart(2, '0'),
29
- H: String(date.getHours()),
30
- mm: String(date.getMinutes()).padStart(2, '0'),
31
- m: String(date.getMinutes()),
32
- ss: String(date.getSeconds()).padStart(2, '0'),
33
- s: String(date.getSeconds()),
34
- SSS: String(date.getMilliseconds()).padStart(3, '0'),
35
- };
36
- // 按占位符长度降序排列,确保优先替换较长的(如 YYYY 先于 YY)
37
- const keys = Object.keys(replacements).sort((a, b) => b.length - a.length);
38
- let result = format;
39
- for (const key of keys) {
40
- // 全局替换,注意转义正则特殊字符(本例中占位符均为字母,无需转义)
41
- result = result.replace(new RegExp(key, 'g'), replacements[key]);
42
- }
43
- return result;
44
- }
45
- //# sourceMappingURL=date.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU,EAAE,MAAM,GAAW,qBAAqB;IAC3E,WAAW;IACX,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC1C,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAA2B;QAC3C,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;QACnC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3C,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAChD,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC9B,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC3C,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC5C,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC9C,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;QAC9C,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;KACrD,CAAA;IAED,qCAAqC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IAE1E,IAAI,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,mCAAmC;QACnC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}