digitalsee-ai-flow-cli 0.1.7 → 0.1.8
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/.github/workflows/ci.yml +24 -0
- package/.github/workflows/publish.yml +21 -0
- package/CHANGELOG.md +72 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +4 -4
- package/dist/api/client.js.map +1 -1
- package/dist/api/flow.d.ts.map +1 -1
- package/dist/api/flow.js +16 -13
- package/dist/api/flow.js.map +1 -1
- package/dist/api/knowledge.d.ts.map +1 -1
- package/dist/api/knowledge.js +3 -3
- package/dist/api/knowledge.js.map +1 -1
- package/dist/api/node.d.ts.map +1 -1
- package/dist/api/node.js +4 -4
- package/dist/api/node.js.map +1 -1
- package/dist/api/variables.d.ts.map +1 -1
- package/dist/api/variables.js +1 -1
- package/dist/api/variables.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +44 -34
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +24 -26
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/flow/account.d.ts.map +1 -1
- package/dist/commands/flow/account.js +17 -16
- package/dist/commands/flow/account.js.map +1 -1
- package/dist/commands/flow/analyze.d.ts.map +1 -1
- package/dist/commands/flow/analyze.js +42 -42
- package/dist/commands/flow/analyze.js.map +1 -1
- package/dist/commands/flow/create.d.ts.map +1 -1
- package/dist/commands/flow/create.js +7 -6
- package/dist/commands/flow/create.js.map +1 -1
- package/dist/commands/flow/edge.d.ts.map +1 -1
- package/dist/commands/flow/edge.js +36 -35
- package/dist/commands/flow/edge.js.map +1 -1
- package/dist/commands/flow/helpers.d.ts.map +1 -1
- package/dist/commands/flow/helpers.js +84 -74
- package/dist/commands/flow/helpers.js.map +1 -1
- package/dist/commands/flow/list.d.ts.map +1 -1
- package/dist/commands/flow/list.js +7 -7
- package/dist/commands/flow/list.js.map +1 -1
- package/dist/commands/flow/node.d.ts.map +1 -1
- package/dist/commands/flow/node.js +150 -137
- package/dist/commands/flow/node.js.map +1 -1
- package/dist/commands/flow/test.d.ts.map +1 -1
- package/dist/commands/flow/test.js +14 -14
- package/dist/commands/flow/test.js.map +1 -1
- package/dist/commands/flow/update.js +5 -5
- package/dist/commands/flow/update.js.map +1 -1
- package/dist/commands/flow/variables.d.ts.map +1 -1
- package/dist/commands/flow/variables.js +45 -43
- package/dist/commands/flow/variables.js.map +1 -1
- package/dist/commands/flow.d.ts.map +1 -1
- package/dist/commands/flow.js +1 -3
- package/dist/commands/flow.js.map +1 -1
- package/dist/commands/knowledge.d.ts.map +1 -1
- package/dist/commands/knowledge.js +68 -70
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/index.js +31 -20
- package/dist/index.js.map +1 -1
- package/dist/services/flowAnalyzer.d.ts.map +1 -1
- package/dist/services/flowAnalyzer.js +256 -203
- package/dist/services/flowAnalyzer.js.map +1 -1
- package/dist/services/skillGenerator.d.ts.map +1 -1
- package/dist/services/skillGenerator.js +31 -31
- package/dist/services/skillGenerator.js.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +12 -10
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/encoding.d.ts.map +1 -1
- package/dist/utils/encoding.js +3 -3
- package/dist/utils/encoding.js.map +1 -1
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/utils/format.js +234 -220
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/oauth.d.ts.map +1 -1
- package/dist/utils/oauth.js +54 -78
- package/dist/utils/oauth.js.map +1 -1
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +20 -16
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/updateCheck.d.ts.map +1 -0
- package/dist/utils/updateCheck.js +138 -0
- package/dist/utils/updateCheck.js.map +1 -0
- package/package.json +15 -7
- package/tsconfig.json +1 -1
- package/dist/utils/auth.d.ts.map +0 -1
- package/dist/utils/auth.js +0 -213
- package/dist/utils/auth.js.map +0 -1
|
@@ -7,16 +7,16 @@ const format_1 = require("@/utils/format");
|
|
|
7
7
|
const output_1 = require("@/utils/output");
|
|
8
8
|
function registerFlowTest(flowCmd) {
|
|
9
9
|
flowCmd
|
|
10
|
-
.command(
|
|
11
|
-
.description(
|
|
12
|
-
.option(
|
|
13
|
-
.option(
|
|
14
|
-
.option(
|
|
10
|
+
.command('test <nodeId>')
|
|
11
|
+
.description('测试指定连接流的指定节点')
|
|
12
|
+
.option('--flow-id <flowId>', '连接流 ID')
|
|
13
|
+
.option('--data-file <path>', 'JSON 文件路径,格式 {"properties": {...}},用于覆盖节点配置')
|
|
14
|
+
.option('--data <json>', 'JSON 字符串,格式 {"properties": {...}},用于覆盖节点配置')
|
|
15
15
|
.action(async (nodeId, options) => {
|
|
16
16
|
try {
|
|
17
17
|
const configValues = (0, helpers_1.resolveDataOption)(options, helpers_1.NODE_CONFIG_DATA_SCHEMA);
|
|
18
18
|
if (configValues) {
|
|
19
|
-
(0, output_1.printInfo)(
|
|
19
|
+
(0, output_1.printInfo)('正在获取节点详情...');
|
|
20
20
|
const nodeDetail = await (0, node_1.getNodeDetail)(nodeId);
|
|
21
21
|
if (!nodeDetail) {
|
|
22
22
|
(0, output_1.printError)(`未找到节点 ${nodeId}`);
|
|
@@ -28,23 +28,23 @@ function registerFlowTest(flowCmd) {
|
|
|
28
28
|
if (validationErrors.length > 0) {
|
|
29
29
|
(0, output_1.printWarning)(`节点配置值校验发现 ${validationErrors.length} 个问题:`);
|
|
30
30
|
for (const err of validationErrors) {
|
|
31
|
-
const ruleLabel = err.rule ===
|
|
31
|
+
const ruleLabel = err.rule === 'required' ? '必填' : '类型';
|
|
32
32
|
(0, output_1.printWarning)(` [${ruleLabel}] ${err.message}`);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
const specialErrors = (0, format_1.validateSpecialNodeType)(nodeDetail.node_type, nodeDetail);
|
|
36
|
+
const specialErrors = (0, format_1.validateSpecialNodeType)(String(nodeDetail.node_type), nodeDetail);
|
|
37
37
|
if (specialErrors.length > 0) {
|
|
38
38
|
(0, output_1.printWarning)(`特殊节点参数校验发现 ${specialErrors.length} 个问题:`);
|
|
39
39
|
for (const err of specialErrors) {
|
|
40
|
-
const ruleLabel = err.rule ===
|
|
40
|
+
const ruleLabel = err.rule === 'required' ? '必填' : '类型';
|
|
41
41
|
(0, output_1.printWarning)(` [${ruleLabel}] ${err.message}`);
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
const updatePayload = (0, format_1.deepMerge)(nodeDetail, configValues);
|
|
45
|
-
(0, output_1.printInfo)(
|
|
45
|
+
(0, output_1.printInfo)('正在更新节点配置...');
|
|
46
46
|
await (0, node_1.updateNode)(nodeId, updatePayload);
|
|
47
|
-
(0, output_1.printSuccess)(
|
|
47
|
+
(0, output_1.printSuccess)('节点配置已更新');
|
|
48
48
|
}
|
|
49
49
|
if (options.flowId) {
|
|
50
50
|
(0, output_1.printInfo)(`在连接流 ${options.flowId} 中测试节点 ${nodeId}`);
|
|
@@ -52,9 +52,9 @@ function registerFlowTest(flowCmd) {
|
|
|
52
52
|
(0, output_1.printInfo)(`正在测试运行节点 ${nodeId}...`);
|
|
53
53
|
const result = await (0, node_1.testRunNode)(nodeId);
|
|
54
54
|
if (result.success) {
|
|
55
|
-
(0, output_1.printSuccess)(
|
|
56
|
-
(0, output_1.printHeader)(
|
|
57
|
-
if (typeof result.data ===
|
|
55
|
+
(0, output_1.printSuccess)('节点测试成功');
|
|
56
|
+
(0, output_1.printHeader)('测试结果');
|
|
57
|
+
if (typeof result.data === 'object') {
|
|
58
58
|
(0, output_1.printJson)(result.data);
|
|
59
59
|
}
|
|
60
60
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/flow/test.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/flow/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,9 @@ const flow_1 = require("@/api/flow");
|
|
|
5
5
|
const output_1 = require("@/utils/output");
|
|
6
6
|
function registerFlowUpdate(flowCmd) {
|
|
7
7
|
flowCmd
|
|
8
|
-
.command(
|
|
9
|
-
.description(
|
|
10
|
-
.option(
|
|
8
|
+
.command('update <flowId>')
|
|
9
|
+
.description('更新连接流')
|
|
10
|
+
.option('--name <name>', '新的连接流名称')
|
|
11
11
|
.action(async (flowId, options) => {
|
|
12
12
|
try {
|
|
13
13
|
const updateData = {};
|
|
@@ -15,12 +15,12 @@ function registerFlowUpdate(flowCmd) {
|
|
|
15
15
|
updateData.name = options.name;
|
|
16
16
|
}
|
|
17
17
|
if (Object.keys(updateData).length === 0) {
|
|
18
|
-
(0, output_1.printError)(
|
|
18
|
+
(0, output_1.printError)('请至少指定一个要更新的字段(如 --name)');
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
(0, output_1.printInfo)(`正在更新连接流 ${flowId}...`);
|
|
22
22
|
await (0, flow_1.updateFlow)(flowId, updateData);
|
|
23
|
-
(0, output_1.printSuccess)(
|
|
23
|
+
(0, output_1.printSuccess)('连接流更新成功');
|
|
24
24
|
}
|
|
25
25
|
catch (error) {
|
|
26
26
|
(0, output_1.printError)(`更新连接流失败: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/flow/update.ts"],"names":[],"mappings":";;AAIA,gDAyBC;AA5BD,qCAAwC;AACxC,2CAAqE;AAErE,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/flow/update.ts"],"names":[],"mappings":";;AAIA,gDAyBC;AA5BD,qCAAwC;AACxC,2CAAqE;AAErE,SAAgB,kBAAkB,CAAC,OAAgB;IACjD,OAAO;SACJ,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,UAAU,GAA4B,EAAE,CAAC;YAE/C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACjC,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzC,IAAA,mBAAU,EAAC,yBAAyB,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,IAAA,kBAAS,EAAC,WAAW,MAAM,KAAK,CAAC,CAAC;YAClC,MAAM,IAAA,iBAAU,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACrC,IAAA,qBAAY,EAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAA,mBAAU,EAAC,YAAa,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/commands/flow/variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/commands/flow/variables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgL5D"}
|
|
@@ -12,22 +12,20 @@ const format_1 = require("@/utils/format");
|
|
|
12
12
|
const helpers_1 = require("@/commands/flow/helpers");
|
|
13
13
|
const output_1 = require("@/utils/output");
|
|
14
14
|
function registerFlowVariables(flowCmd) {
|
|
15
|
-
const varCmd = flowCmd
|
|
16
|
-
.command("variables")
|
|
17
|
-
.description("变量操作");
|
|
15
|
+
const varCmd = flowCmd.command('variables').description('变量操作');
|
|
18
16
|
varCmd
|
|
19
|
-
.command(
|
|
20
|
-
.description(
|
|
21
|
-
.option(
|
|
22
|
-
.option(
|
|
23
|
-
.option(
|
|
17
|
+
.command('show <flowId>')
|
|
18
|
+
.description('获取连接流中可用的节点变量')
|
|
19
|
+
.option('--node-id <nodeId>', '指定目标节点 ID')
|
|
20
|
+
.option('--global', '同时显示全局变量')
|
|
21
|
+
.option('--format <format>', '输出格式: table | json', 'table')
|
|
24
22
|
.action(async (flowId, options) => {
|
|
25
23
|
try {
|
|
26
24
|
(0, output_1.printInfo)(`获取连接流 ${flowId} 的详情...`);
|
|
27
25
|
const flow = await (0, flow_1.getFlowDetail)(flowId);
|
|
28
26
|
const targetNodeId = options.nodeId || flow.nodes[0]?.n_id || flow.nodes[0]?.id;
|
|
29
27
|
if (!targetNodeId) {
|
|
30
|
-
(0, output_1.printWarning)(
|
|
28
|
+
(0, output_1.printWarning)('连接流中没有节点');
|
|
31
29
|
return;
|
|
32
30
|
}
|
|
33
31
|
const edges = flow.edges || [];
|
|
@@ -38,14 +36,18 @@ function registerFlowVariables(flowCmd) {
|
|
|
38
36
|
};
|
|
39
37
|
(0, output_1.printInfo)(`获取节点 ${targetNodeId} 的上游变量...`);
|
|
40
38
|
const outputTree = await (0, variables_1.getFlowOutputTree)(flowId, treeReq);
|
|
41
|
-
if (options.format ===
|
|
42
|
-
const result = {
|
|
39
|
+
if (options.format === 'json') {
|
|
40
|
+
const result = {
|
|
41
|
+
flowId,
|
|
42
|
+
targetNodeId,
|
|
43
|
+
upstreamNodes: outputTree,
|
|
44
|
+
};
|
|
43
45
|
if (options.global) {
|
|
44
46
|
try {
|
|
45
47
|
result.globalVariables = await (0, variables_1.getGlobalVariables)();
|
|
46
48
|
}
|
|
47
49
|
catch {
|
|
48
|
-
result.globalVariables = { error:
|
|
50
|
+
result.globalVariables = { error: '获取全局变量失败' };
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
(0, output_1.printJson)(result);
|
|
@@ -53,12 +55,12 @@ function registerFlowVariables(flowCmd) {
|
|
|
53
55
|
}
|
|
54
56
|
(0, output_1.printHeader)(`节点变量: ${flow.name || flowId}`);
|
|
55
57
|
(0, output_1.printKeyValue)([
|
|
56
|
-
[
|
|
57
|
-
[
|
|
58
|
-
[
|
|
58
|
+
['Flow ID', flowId],
|
|
59
|
+
['目标节点', targetNodeId],
|
|
60
|
+
['上游节点数', String(outputTree.length)],
|
|
59
61
|
]);
|
|
60
62
|
if (outputTree.length === 0) {
|
|
61
|
-
(0, output_1.printInfo)(
|
|
63
|
+
(0, output_1.printInfo)('没有上游节点输出变量');
|
|
62
64
|
}
|
|
63
65
|
else {
|
|
64
66
|
for (const nodeOutput of outputTree) {
|
|
@@ -68,20 +70,20 @@ function registerFlowVariables(flowCmd) {
|
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
if (options.global) {
|
|
71
|
-
(0, output_1.printSubHeader)(
|
|
73
|
+
(0, output_1.printSubHeader)('全局变量');
|
|
72
74
|
try {
|
|
73
75
|
const globalResult = await (0, variables_1.getGlobalVariables)();
|
|
74
76
|
const globalVars = globalResult.items || [];
|
|
75
77
|
if (globalVars.length === 0) {
|
|
76
|
-
(0, output_1.printInfo)(
|
|
78
|
+
(0, output_1.printInfo)('无全局变量');
|
|
77
79
|
}
|
|
78
80
|
else {
|
|
79
|
-
const headers = [
|
|
81
|
+
const headers = ['变量名', 'Key', '类型', '值'];
|
|
80
82
|
const rows = globalVars.map((v) => [
|
|
81
|
-
v.name ||
|
|
82
|
-
v.key ||
|
|
83
|
-
v.type ||
|
|
84
|
-
JSON.stringify(v.value) ??
|
|
83
|
+
v.name || '-',
|
|
84
|
+
v.key || '-',
|
|
85
|
+
v.type || '-',
|
|
86
|
+
JSON.stringify(v.value) ?? '-',
|
|
85
87
|
]);
|
|
86
88
|
(0, output_1.printTable)(headers, rows);
|
|
87
89
|
}
|
|
@@ -90,37 +92,37 @@ function registerFlowVariables(flowCmd) {
|
|
|
90
92
|
(0, output_1.printError)(`获取全局变量失败: ${error.message}`);
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
|
-
(0, output_1.printSuccess)(
|
|
95
|
+
(0, output_1.printSuccess)('变量查询完成');
|
|
94
96
|
}
|
|
95
97
|
catch (error) {
|
|
96
98
|
(0, output_1.printError)(`获取变量失败: ${error.message}`);
|
|
97
99
|
}
|
|
98
100
|
});
|
|
99
101
|
varCmd
|
|
100
|
-
.command(
|
|
101
|
-
.description(
|
|
102
|
-
.option(
|
|
103
|
-
.option(
|
|
104
|
-
.option(
|
|
102
|
+
.command('inject <flowId> <nodeId>')
|
|
103
|
+
.description('在节点配置中注入变量引用')
|
|
104
|
+
.option('--data-file <path>', 'JSON 文件路径,格式 {"properties": {...}},包含变量占位符')
|
|
105
|
+
.option('--data <json>', 'JSON 字符串,格式 {"properties": {...}},包含变量占位符')
|
|
106
|
+
.option('--dry-run', '仅预览替换结果,不实际更新节点', false)
|
|
105
107
|
.action(async (flowId, nodeId, options) => {
|
|
106
108
|
try {
|
|
107
109
|
const configValues = (0, helpers_1.resolveDataOption)(options, helpers_1.NODE_CONFIG_DATA_SCHEMA);
|
|
108
110
|
if (!configValues) {
|
|
109
|
-
(0, output_1.printError)(
|
|
111
|
+
(0, output_1.printError)('需要提供 --data <json> 或 --data-file <path>');
|
|
110
112
|
return;
|
|
111
113
|
}
|
|
112
114
|
const configStr = JSON.stringify(configValues);
|
|
113
115
|
const refs = (0, format_1.parseVariableRefs)(configStr);
|
|
114
116
|
if (refs.length === 0) {
|
|
115
|
-
(0, output_1.printWarning)(
|
|
117
|
+
(0, output_1.printWarning)('未在配置中发现变量引用(格式: {{N<nodeId>.<fieldPath>}})');
|
|
116
118
|
}
|
|
117
119
|
else {
|
|
118
120
|
(0, output_1.printInfo)(`发现 ${refs.length} 个变量引用:`);
|
|
119
121
|
for (const ref of refs) {
|
|
120
|
-
console.log(` ${chalk_1.default.cyan(ref.raw)} → 节点${ref.nodeId}的${ref.path ||
|
|
122
|
+
console.log(` ${chalk_1.default.cyan(ref.raw)} → 节点${ref.nodeId}的${ref.path || '输出'}`);
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
|
-
(0, output_1.printInfo)(
|
|
125
|
+
(0, output_1.printInfo)('获取上游节点变量以验证引用...');
|
|
124
126
|
const flow = await (0, flow_1.getFlowDetail)(flowId);
|
|
125
127
|
const edges = flow.edges || [];
|
|
126
128
|
const treeReq = {
|
|
@@ -137,7 +139,7 @@ function registerFlowVariables(flowCmd) {
|
|
|
137
139
|
}
|
|
138
140
|
}
|
|
139
141
|
if (unresolvedRefs.length > 0) {
|
|
140
|
-
(0, output_1.printWarning)(`以下变量引用无法在上游节点中找到: ${unresolvedRefs.join(
|
|
142
|
+
(0, output_1.printWarning)(`以下变量引用无法在上游节点中找到: ${unresolvedRefs.join(', ')}`);
|
|
141
143
|
}
|
|
142
144
|
(0, output_1.printInfo)(`获取节点 ${nodeId} 的详情...`);
|
|
143
145
|
const nodeDetail = await (0, node_1.getNodeDetail)(nodeId);
|
|
@@ -147,25 +149,25 @@ function registerFlowVariables(flowCmd) {
|
|
|
147
149
|
}
|
|
148
150
|
const updatePayload = (0, format_1.deepMerge)(nodeDetail, configValues);
|
|
149
151
|
if (options.dryRun) {
|
|
150
|
-
(0, output_1.printHeader)(
|
|
151
|
-
(0, output_1.printSubHeader)(
|
|
152
|
+
(0, output_1.printHeader)('预览: 带变量注入的配置');
|
|
153
|
+
(0, output_1.printSubHeader)('变量引用列表');
|
|
152
154
|
for (const ref of refs) {
|
|
153
155
|
const resolved = availableNodes.has(ref.nodeId)
|
|
154
|
-
? chalk_1.default.green(
|
|
155
|
-
: chalk_1.default.red(
|
|
156
|
+
? chalk_1.default.green('✓ 可解析')
|
|
157
|
+
: chalk_1.default.red('✗ 无法解析');
|
|
156
158
|
console.log(` ${resolved} ${ref.raw}`);
|
|
157
159
|
}
|
|
158
|
-
(0, output_1.printSubHeader)(
|
|
160
|
+
(0, output_1.printSubHeader)('待提交的配置');
|
|
159
161
|
(0, output_1.printJson)(updatePayload);
|
|
160
|
-
(0, output_1.printInfo)(
|
|
162
|
+
(0, output_1.printInfo)('dry-run 模式,未实际更新节点');
|
|
161
163
|
return;
|
|
162
164
|
}
|
|
163
165
|
if (unresolvedRefs.length > 0) {
|
|
164
|
-
(0, output_1.printWarning)(
|
|
166
|
+
(0, output_1.printWarning)('存在无法解析的变量引用,继续更新节点...');
|
|
165
167
|
}
|
|
166
|
-
(0, output_1.printInfo)(
|
|
168
|
+
(0, output_1.printInfo)('正在更新节点配置...');
|
|
167
169
|
await (0, node_1.updateNode)(nodeId, updatePayload);
|
|
168
|
-
(0, output_1.printSuccess)(
|
|
170
|
+
(0, output_1.printSuccess)('节点配置已更新(含变量引用)');
|
|
169
171
|
}
|
|
170
172
|
catch (error) {
|
|
171
173
|
(0, output_1.printError)(`变量注入失败: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/commands/flow/variables.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/commands/flow/variables.ts"],"names":[],"mappings":";;;;;AAwBA,sDAgLC;AAvMD,kDAA0B;AAC1B,qCAA2C;AAC3C,qCAAuD;AACvD,+CAAwE;AACxE,2CAA8D;AAC9D,qDAIiC;AACjC,2CAUwB;AAGxB,SAAgB,qBAAqB,CAAC,OAAgB;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAEhE,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,eAAe,CAAC;SAC5B,MAAM,CAAC,oBAAoB,EAAE,WAAW,CAAC;SACzC,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC;SAC9B,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,EAAE,OAAO,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,IAAA,kBAAS,EAAC,SAAS,MAAM,SAAS,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAAC,MAAM,CAAC,CAAC;YAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAChF,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG;gBACd,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,YAAY;gBACrB,KAAK;aACN,CAAC;YAEF,IAAA,kBAAS,EAAC,QAAQ,YAAY,WAAW,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAqB,MAAM,IAAA,6BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE9E,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAA4B;oBACtC,MAAM;oBACN,YAAY;oBACZ,aAAa,EAAE,UAAU;iBAC1B,CAAC;gBACF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,IAAI,CAAC;wBACH,MAAM,CAAC,eAAe,GAAG,MAAM,IAAA,8BAAkB,GAAE,CAAC;oBACtD,CAAC;oBAAC,MAAM,CAAC;wBACP,MAAM,CAAC,eAAe,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;oBACjD,CAAC;gBACH,CAAC;gBACD,IAAA,kBAAS,EAAC,MAAM,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,IAAA,oBAAW,EAAC,SAAS,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;YAC5C,IAAA,sBAAa,EAAC;gBACZ,CAAC,SAAS,EAAE,MAAM,CAAC;gBACnB,CAAC,MAAM,EAAE,YAAY,CAAC;gBACtB,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACrC,CAAC,CAAC;YAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAA,kBAAS,EAAC,YAAY,CAAC,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,CAAC;oBACpC,IAAA,uBAAc,EACZ,GAAG,UAAU,CAAC,cAAc,MAAM,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC,OAAO,GAAG,CACnF,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACzD,IAAA,2BAAiB,EAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAA,uBAAc,EAAC,MAAM,CAAC,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,IAAA,8BAAkB,GAAE,CAAC;oBAChD,MAAM,UAAU,GAAqB,YAAY,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC5B,IAAA,kBAAS,EAAC,OAAO,CAAC,CAAC;oBACrB,CAAC;yBAAM,CAAC;wBACN,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;wBAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;4BACjC,CAAC,CAAC,IAAI,IAAI,GAAG;4BACb,CAAC,CAAC,GAAG,IAAI,GAAG;4BACZ,CAAC,CAAC,IAAI,IAAI,GAAG;4BACb,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG;yBAC/B,CAAC,CAAC;wBACH,IAAA,mBAAU,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACxB,IAAA,mBAAU,EAAC,aAAc,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;YAED,IAAA,qBAAY,EAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAA,mBAAU,EAAC,WAAY,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,MAAM;SACH,OAAO,CAAC,0BAA0B,CAAC;SACnC,WAAW,CAAC,cAAc,CAAC;SAC3B,MAAM,CAAC,oBAAoB,EAAE,4CAA4C,CAAC;SAC1E,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC;SACpE,MAAM,CAAC,WAAW,EAAE,iBAAiB,EAAE,KAAK,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,MAAc,EAAE,OAAO,EAAE,EAAE;QACxD,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAA,2BAAiB,EAAC,OAAO,EAAE,iCAAuB,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,IAAA,mBAAU,EAAC,yCAAyC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAA,0BAAiB,EAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAA,qBAAY,EAAC,4CAA4C,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACN,IAAA,kBAAS,EAAC,MAAM,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;gBACtC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;YAED,IAAA,kBAAS,EAAC,kBAAkB,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAa,EAAC,MAAM,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,MAAM;gBACf,KAAK;aACN,CAAC;YACF,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE5D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACjE,MAAM,cAAc,GAAa,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAA,qBAAY,EAAC,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,IAAA,kBAAS,EAAC,QAAQ,MAAM,SAAS,CAAC,CAAC;YACnC,MAAM,UAAU,GAAG,MAAM,IAAA,oBAAa,EAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,IAAA,mBAAU,EAAC,SAAS,MAAM,EAAE,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,MAAM,aAAa,GAAG,IAAA,kBAAS,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAE1D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,IAAA,oBAAW,EAAC,cAAc,CAAC,CAAC;gBAC5B,IAAA,uBAAc,EAAC,QAAQ,CAAC,CAAC;gBACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;wBAC7C,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC;wBACtB,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC1C,CAAC;gBACD,IAAA,uBAAc,EAAC,QAAQ,CAAC,CAAC;gBACzB,IAAA,kBAAS,EAAC,aAAa,CAAC,CAAC;gBACzB,IAAA,kBAAS,EAAC,oBAAoB,CAAC,CAAC;gBAChC,OAAO;YACT,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,IAAA,qBAAY,EAAC,uBAAuB,CAAC,CAAC;YACxC,CAAC;YAED,IAAA,kBAAS,EAAC,aAAa,CAAC,CAAC;YACzB,MAAM,IAAA,iBAAU,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACxC,IAAA,qBAAY,EAAC,gBAAgB,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAA,mBAAU,EAAC,WAAY,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAY1D"}
|
package/dist/commands/flow.js
CHANGED
|
@@ -11,9 +11,7 @@ const variables_1 = require("@/commands/flow/variables");
|
|
|
11
11
|
const create_1 = require("@/commands/flow/create");
|
|
12
12
|
const update_1 = require("@/commands/flow/update");
|
|
13
13
|
function registerFlowCommand(program) {
|
|
14
|
-
const flowCmd = program
|
|
15
|
-
.command("flow")
|
|
16
|
-
.description("连接流操作");
|
|
14
|
+
const flowCmd = program.command('flow').description('连接流操作');
|
|
17
15
|
(0, create_1.registerFlowCreate)(flowCmd);
|
|
18
16
|
(0, update_1.registerFlowUpdate)(flowCmd);
|
|
19
17
|
(0, list_1.registerFlowList)(flowCmd);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":";;AAWA,
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/commands/flow.ts"],"names":[],"mappings":";;AAWA,kDAYC;AAtBD,+CAAwD;AACxD,qDAA8D;AAC9D,+CAAwD;AACxD,+CAAwD;AACxD,qDAA8D;AAC9D,+CAAwD;AACxD,yDAAkE;AAClE,mDAA4D;AAC5D,mDAA4D;AAE5D,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;IAC5B,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;IAC5B,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;IAC7B,IAAA,uBAAgB,EAAC,OAAO,CAAC,CAAC;IAC1B,IAAA,iCAAqB,EAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/commands/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/commands/knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgN/D"}
|
|
@@ -11,28 +11,26 @@ const output_1 = require("@/utils/output");
|
|
|
11
11
|
const format_1 = require("@/utils/format");
|
|
12
12
|
const chalk_1 = __importDefault(require("chalk"));
|
|
13
13
|
function registerKnowledgeCommand(program) {
|
|
14
|
-
const knowledgeCmd = program
|
|
15
|
-
.command("knowledge")
|
|
16
|
-
.description("获取节点类型知识");
|
|
14
|
+
const knowledgeCmd = program.command('knowledge').description('获取节点类型知识');
|
|
17
15
|
knowledgeCmd
|
|
18
|
-
.command(
|
|
19
|
-
.description(
|
|
20
|
-
.option(
|
|
16
|
+
.command('categories')
|
|
17
|
+
.description('列出所有节点分类')
|
|
18
|
+
.option('--type <type>', '分类类型: trigger|action|tool|mcp|model|memory')
|
|
21
19
|
.action(async (options) => {
|
|
22
20
|
try {
|
|
23
21
|
const categories = await (0, knowledge_1.getNodeCategories)({ type: options.type });
|
|
24
22
|
(0, output_1.printHeader)(`节点分类 (共 ${categories.length} 个)`);
|
|
25
23
|
for (const cat of categories) {
|
|
26
|
-
const key = String(cat.name ||
|
|
24
|
+
const key = String(cat.name || '');
|
|
27
25
|
const label = String(cat.label || cat.name || key);
|
|
28
|
-
const desc = String(cat.desc ||
|
|
26
|
+
const desc = String(cat.desc || '');
|
|
29
27
|
console.log(` ${chalk_1.default.cyan(key.padEnd(20))} ${chalk_1.default.white(label)} ${chalk_1.default.gray(desc)}`);
|
|
30
28
|
const children = cat.next;
|
|
31
29
|
if (children && Array.isArray(children) && children.length > 0) {
|
|
32
30
|
for (const child of children) {
|
|
33
|
-
const childKey = String(child.name ||
|
|
31
|
+
const childKey = String(child.name || '');
|
|
34
32
|
const childLabel = String(child.label || childKey);
|
|
35
|
-
console.log(` ${chalk_1.default.gray(
|
|
33
|
+
console.log(` ${chalk_1.default.gray('└─')} ${chalk_1.default.dim(childKey)} ${chalk_1.default.dim(childLabel)}`);
|
|
36
34
|
}
|
|
37
35
|
}
|
|
38
36
|
}
|
|
@@ -42,48 +40,49 @@ function registerKnowledgeCommand(program) {
|
|
|
42
40
|
}
|
|
43
41
|
});
|
|
44
42
|
knowledgeCmd
|
|
45
|
-
.command(
|
|
46
|
-
.description(
|
|
47
|
-
.option(
|
|
48
|
-
.option(
|
|
49
|
-
.option(
|
|
50
|
-
.option(
|
|
51
|
-
.option(
|
|
52
|
-
.option(
|
|
43
|
+
.command('nodes [category]')
|
|
44
|
+
.description('搜索节点,展示匹配的 connector 及 actions(含 nodeType)')
|
|
45
|
+
.option('--name <name>', '按名称搜索')
|
|
46
|
+
.option('--trigger', '仅触发器')
|
|
47
|
+
.option('--flow-id <flowId>', '连接流 ID')
|
|
48
|
+
.option('--page <number>', '页码', '1')
|
|
49
|
+
.option('--size <number>', '每页数量', '50')
|
|
50
|
+
.option('--json', '以 JSON 格式输出')
|
|
53
51
|
.action(async (category, options) => {
|
|
52
|
+
const opts = options || {};
|
|
54
53
|
try {
|
|
55
54
|
const result = await (0, knowledge_1.searchNodesByCategory)({
|
|
56
55
|
app_domain_category: category,
|
|
57
|
-
name:
|
|
58
|
-
trigger:
|
|
59
|
-
flow_id:
|
|
60
|
-
page: Number(
|
|
61
|
-
size: Number(
|
|
56
|
+
name: opts.name,
|
|
57
|
+
trigger: opts.trigger || false,
|
|
58
|
+
flow_id: opts.flowId,
|
|
59
|
+
page: Number(opts.page),
|
|
60
|
+
size: Number(opts.size),
|
|
62
61
|
});
|
|
63
|
-
if (
|
|
62
|
+
if (opts.json) {
|
|
64
63
|
(0, output_1.printJson)(result);
|
|
65
64
|
return;
|
|
66
65
|
}
|
|
67
66
|
const items = result.items || [];
|
|
68
|
-
(0, output_1.printHeader)(`节点列表${category ? ` [${category}]` :
|
|
67
|
+
(0, output_1.printHeader)(`节点列表${category ? ` [${category}]` : ''} (共 ${result.total} 个)`);
|
|
69
68
|
for (const item of items) {
|
|
70
69
|
const c = item.connector;
|
|
71
|
-
console.log(`\n${chalk_1.default.bold.blue(
|
|
70
|
+
console.log(`\n${chalk_1.default.bold.blue('▸')} ${chalk_1.default.bold.white(c.name)} ${chalk_1.default.gray(`(${c.id})`)}`);
|
|
72
71
|
const pairs = [
|
|
73
|
-
[
|
|
74
|
-
[
|
|
72
|
+
['描述', (c.description || '-').substring(0, 80)],
|
|
73
|
+
['类型', c.build_type || c.deployment_type || '-'],
|
|
75
74
|
];
|
|
76
75
|
if (item.match_type) {
|
|
77
|
-
pairs.push([
|
|
76
|
+
pairs.push(['匹配方式', item.match_type]);
|
|
78
77
|
}
|
|
79
|
-
(0, output_1.printKeyValue)(pairs,
|
|
80
|
-
let actions = item.matched_actions;
|
|
81
|
-
if (
|
|
78
|
+
(0, output_1.printKeyValue)(pairs, ' ');
|
|
79
|
+
let actions = item.matched_actions || [];
|
|
80
|
+
if (opts.name) {
|
|
82
81
|
try {
|
|
83
82
|
actions = await (0, node_1.getActions)({
|
|
84
83
|
linkId: c.id,
|
|
85
|
-
name:
|
|
86
|
-
trigger:
|
|
84
|
+
name: opts.name,
|
|
85
|
+
trigger: opts.trigger || false,
|
|
87
86
|
});
|
|
88
87
|
}
|
|
89
88
|
catch {
|
|
@@ -92,10 +91,11 @@ function registerKnowledgeCommand(program) {
|
|
|
92
91
|
}
|
|
93
92
|
if (actions && actions.length > 0) {
|
|
94
93
|
console.log(chalk_1.default.gray(` 匹配动作 (${actions.length}):`));
|
|
95
|
-
for (const
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
|
|
94
|
+
for (const a of actions) {
|
|
95
|
+
const action = a;
|
|
96
|
+
const triggerTag = action.is_trigger ? chalk_1.default.yellow(' [trigger]') : '';
|
|
97
|
+
const nodeType = action.action_type || '-';
|
|
98
|
+
console.log(` ${chalk_1.default.cyan(String(action.action_key || action.id))} ${action.name} ${chalk_1.default.gray('nodeType:')} ${chalk_1.default.green(String(nodeType))}${triggerTag} ${chalk_1.default.gray('nodeId:')} ${action.id} ${chalk_1.default.gray('connectorId:')} ${action.connector_id}`);
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -108,10 +108,10 @@ function registerKnowledgeCommand(program) {
|
|
|
108
108
|
}
|
|
109
109
|
});
|
|
110
110
|
knowledgeCmd
|
|
111
|
-
.command(
|
|
112
|
-
.description(
|
|
113
|
-
.option(
|
|
114
|
-
.option(
|
|
111
|
+
.command('actions <linkId>')
|
|
112
|
+
.description('列出连接器的所有动作及配置 schema')
|
|
113
|
+
.option('--trigger', '仅触发器')
|
|
114
|
+
.option('--json', '以 JSON 格式输出')
|
|
115
115
|
.action(async (linkId, options) => {
|
|
116
116
|
try {
|
|
117
117
|
const actions = await (0, node_1.getActions)({
|
|
@@ -124,32 +124,30 @@ function registerKnowledgeCommand(program) {
|
|
|
124
124
|
}
|
|
125
125
|
(0, output_1.printHeader)(`连接器动作 (共 ${actions.length} 个) — Link: ${linkId}`);
|
|
126
126
|
for (const action of actions) {
|
|
127
|
-
console.log(`\n${chalk_1.default.bold.blue(
|
|
127
|
+
console.log(`\n${chalk_1.default.bold.blue('▸')} ${chalk_1.default.bold.white(action.name)} ${chalk_1.default.gray(`[${action.action_key}]`)}`);
|
|
128
128
|
const pairs = [
|
|
129
|
-
[
|
|
130
|
-
[
|
|
131
|
-
[
|
|
132
|
-
[
|
|
133
|
-
[
|
|
134
|
-
[
|
|
129
|
+
['ID', action.id],
|
|
130
|
+
['描述', action.description || '(无)'],
|
|
131
|
+
['Trigger', action.is_trigger ? '是' : '否'],
|
|
132
|
+
['nodeType', action.action_type || '-'],
|
|
133
|
+
['协议', action.protocol || '-'],
|
|
134
|
+
['状态', action.status],
|
|
135
135
|
];
|
|
136
|
-
(0, output_1.printKeyValue)(pairs,
|
|
136
|
+
(0, output_1.printKeyValue)(pairs, ' ');
|
|
137
137
|
const params = (0, format_1.configSchemaToParams)(action.config_schema?.sub_params);
|
|
138
138
|
if (params.length > 0) {
|
|
139
139
|
console.log(chalk_1.default.gray(` 配置参数 (${params.length}):`));
|
|
140
140
|
for (const p of params) {
|
|
141
|
-
const required = p.required ? chalk_1.default.red(
|
|
142
|
-
console.log(` ${required} ${chalk_1.default.cyan(p.name)} ${chalk_1.default.gray(`[${p.type}]`)} ${p.display_name} — ${p.description ||
|
|
141
|
+
const required = p.required ? chalk_1.default.red(' *') : ' ';
|
|
142
|
+
console.log(` ${required} ${chalk_1.default.cyan(p.name)} ${chalk_1.default.gray(`[${p.type}]`)} ${p.display_name} — ${p.description || '-'}`);
|
|
143
143
|
if (p.options && p.options.length > 0) {
|
|
144
|
-
const optStr = p.options
|
|
145
|
-
|
|
146
|
-
.join(", ");
|
|
147
|
-
console.log(` ${chalk_1.default.dim("可选值:")} ${chalk_1.default.dim(optStr)}`);
|
|
144
|
+
const optStr = p.options.map((o) => `${o.key}:${o.label}`).join(', ');
|
|
145
|
+
console.log(` ${chalk_1.default.dim('可选值:')} ${chalk_1.default.dim(optStr)}`);
|
|
148
146
|
}
|
|
149
147
|
}
|
|
150
148
|
}
|
|
151
149
|
else {
|
|
152
|
-
(0, output_1.printInfo)(
|
|
150
|
+
(0, output_1.printInfo)(' 无配置参数');
|
|
153
151
|
}
|
|
154
152
|
}
|
|
155
153
|
}
|
|
@@ -158,24 +156,24 @@ function registerKnowledgeCommand(program) {
|
|
|
158
156
|
}
|
|
159
157
|
});
|
|
160
158
|
knowledgeCmd
|
|
161
|
-
.command(
|
|
162
|
-
.description(
|
|
159
|
+
.command('generate-skills [outDir]')
|
|
160
|
+
.description('为所有节点生成 skills 文件(.md + .json)')
|
|
163
161
|
.action(async (outDir) => {
|
|
164
|
-
const outputDir = outDir ||
|
|
165
|
-
(0, output_1.printHeader)(
|
|
162
|
+
const outputDir = outDir || './skills';
|
|
163
|
+
(0, output_1.printHeader)('生成 Skills 文件');
|
|
166
164
|
(0, output_1.printInfo)(`输出目录: ${outputDir}`);
|
|
167
|
-
(0, output_1.printInfo)(
|
|
168
|
-
(0, output_1.printInfo)(
|
|
165
|
+
(0, output_1.printInfo)('正在获取所有节点分类、节点和动作信息...');
|
|
166
|
+
(0, output_1.printInfo)('这可能需要一些时间,请耐心等待...\n');
|
|
169
167
|
try {
|
|
170
168
|
const progress = await (0, skillGenerator_1.generateAllSkills)(outputDir);
|
|
171
|
-
(0, output_1.printHeader)(
|
|
169
|
+
(0, output_1.printHeader)('生成完成');
|
|
172
170
|
(0, output_1.printKeyValue)([
|
|
173
|
-
[
|
|
174
|
-
[
|
|
175
|
-
[
|
|
176
|
-
[
|
|
177
|
-
[
|
|
178
|
-
[
|
|
171
|
+
['分类数', `${progress.processedCategories}/${progress.totalCategories}`],
|
|
172
|
+
['节点数', `${progress.processedNodes}/${progress.totalNodes}`],
|
|
173
|
+
['动作数', `${progress.processedActions}/${progress.totalActions}`],
|
|
174
|
+
['生成 Skills', String(progress.skillsGenerated)],
|
|
175
|
+
['Markdown 目录', `${outputDir}/markdown/`],
|
|
176
|
+
['JSON 目录', `${outputDir}/json/`],
|
|
179
177
|
]);
|
|
180
178
|
if (progress.errors.length > 0) {
|
|
181
179
|
(0, output_1.printWarning)(`\n遇到 ${progress.errors.length} 个错误:`);
|