@rishiqing/cli 0.1.5 → 0.1.7
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/README.md +14 -6
- package/dist/cli.js +82 -3
- package/dist/cli.js.map +1 -1
- package/generated/command-catalog.json +1 -1
- package/package.json +1 -1
- package/rishiqing.openapi.json +18 -9
- package/skills/rsq-workflow-createFlowApplication/SKILL.md +36 -17
- package/skills/rsq-workflow-createFlowApplication/references/api-sequence.md +51 -10
- package/skills/rsq-workflow-createFlowApplication/references/field-types.md +28 -0
package/README.md
CHANGED
|
@@ -17,6 +17,14 @@
|
|
|
17
17
|
- Node.js `>= 20`
|
|
18
18
|
- 一个可用的 `X-Rsq-Api-key`(日事清->设置->开发者配置)
|
|
19
19
|
|
|
20
|
+
### 极速开始
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install -g @rishiqing/cli
|
|
24
|
+
rsq-cli install
|
|
25
|
+
rsq-cli config init
|
|
26
|
+
```
|
|
27
|
+
|
|
20
28
|
### 快速开始
|
|
21
29
|
|
|
22
30
|
#### 安装
|
|
@@ -47,12 +55,6 @@ rsq-cli install --dir ~/.my-agent/skills
|
|
|
47
55
|
rsq-cli install --dry-run --json
|
|
48
56
|
```
|
|
49
57
|
|
|
50
|
-
安装完成后确认命令可用:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
rsq-cli --help
|
|
54
|
-
```
|
|
55
|
-
|
|
56
58
|
#### 配置
|
|
57
59
|
|
|
58
60
|
先初始化用户级 API Key 配置:
|
|
@@ -67,6 +69,12 @@ rsq-cli config init
|
|
|
67
69
|
rsq-cli config path
|
|
68
70
|
```
|
|
69
71
|
|
|
72
|
+
查看常用命令:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
rsq-cli --help
|
|
76
|
+
```
|
|
77
|
+
|
|
70
78
|
## Agent 能力
|
|
71
79
|
|
|
72
80
|
`rsq-cli` 既提供内建的 agent contract,也保留了仓库内可复用的 skill。
|
package/dist/cli.js
CHANGED
|
@@ -11,7 +11,7 @@ import { stdin, stdout } from "process";
|
|
|
11
11
|
// package.json
|
|
12
12
|
var package_default = {
|
|
13
13
|
name: "@rishiqing/cli",
|
|
14
|
-
version: "0.1.
|
|
14
|
+
version: "0.1.7",
|
|
15
15
|
description: "Agent-oriented CLI for Rishiqing APIs",
|
|
16
16
|
license: "MIT",
|
|
17
17
|
type: "module",
|
|
@@ -1092,6 +1092,62 @@ function buildCustomCommands() {
|
|
|
1092
1092
|
];
|
|
1093
1093
|
}
|
|
1094
1094
|
|
|
1095
|
+
// src/workflow/field-enum.ts
|
|
1096
|
+
var workflowFieldTypeDefinitions = [
|
|
1097
|
+
{ type: 1 /* Content */, key: "Content", valueText: "Content", chineseName: "\u6587\u672C\u6846", aliases: ["\u6587\u672C\u6846", "\u6587\u672C", "\u5355\u884C\u6587\u672C", "content", "text"] },
|
|
1098
|
+
{ type: 2 /* Number */, key: "Number", valueText: "Number", chineseName: "\u6570\u5B57", aliases: ["\u6570\u5B57", "\u6570\u503C", "number", "numeric"] },
|
|
1099
|
+
{ type: 3 /* Selector */, key: "Selector", valueText: "Selector", chineseName: "\u9009\u9879", aliases: ["\u9009\u9879", "\u5355\u9009", "selector", "option"] },
|
|
1100
|
+
{ type: 4 /* Menu */, key: "Menu", valueText: "Menu", chineseName: "\u4E0B\u62C9\u83DC\u5355", aliases: ["\u4E0B\u62C9\u83DC\u5355", "\u4E0B\u62C9", "\u83DC\u5355", "menu", "dropdown"] },
|
|
1101
|
+
{ type: 5 /* Date */, key: "Date", valueText: "Date", chineseName: "\u65E5\u671F", aliases: ["\u65E5\u671F", "\u65F6\u95F4", "date", "datetime"] },
|
|
1102
|
+
{ type: 6 /* File */, key: "File", valueText: "File", chineseName: "\u9644\u4EF6", aliases: ["\u9644\u4EF6", "\u6587\u4EF6", "\u4E0A\u4F20\u9644\u4EF6", "file", "attachment"] },
|
|
1103
|
+
{ type: 7 /* Line */, key: "Line", valueText: "Line", chineseName: "\u5206\u5272\u7EBF", aliases: ["\u5206\u5272\u7EBF", "\u5206\u9694\u7EBF", "line", "divider"] },
|
|
1104
|
+
{ type: 8 /* WorkHour */, key: "WorkHour", valueText: "WorkHour", chineseName: "\u5DE5\u65F6", aliases: ["\u5DE5\u65F6", "workhour", "work hour"] },
|
|
1105
|
+
{ type: 9 /* Grade */, key: "Grade", valueText: "Grade", chineseName: "\u7B49\u7EA7", aliases: ["\u7B49\u7EA7", "\u8BC4\u5206\u7B49\u7EA7", "grade", "level"] },
|
|
1106
|
+
{ type: 10 /* FromProject */, key: "FromProject", valueText: "FromProject", chineseName: "\u6240\u5C5E\u8BA1\u5212", aliases: ["\u6240\u5C5E\u8BA1\u5212", "fromproject", "from project"] },
|
|
1107
|
+
{ type: 11 /* Confirm */, key: "Confirm", valueText: "Confirm", chineseName: "\u786E\u8BA4\u4EBA", aliases: ["\u786E\u8BA4\u4EBA", "\u786E\u8BA4\u6210\u5458", "confirm"] },
|
|
1108
|
+
{ type: 12 /* PerfScore */, key: "PerfScore", valueText: "PerfScore", chineseName: "\u7EE9\u6548\u5206", aliases: ["\u7EE9\u6548\u5206", "perfscore", "performance score"] },
|
|
1109
|
+
{ type: 13 /* Cost */, key: "Cost", valueText: "Cost", chineseName: "\u6210\u672C", aliases: ["\u6210\u672C", "cost"] },
|
|
1110
|
+
{ type: 14 /* Income */, key: "Income", valueText: "Income", chineseName: "\u6536\u5165", aliases: ["\u6536\u5165", "income"] },
|
|
1111
|
+
{ type: 15 /* RichText */, key: "RichText", valueText: "RichText", chineseName: "\u5BCC\u6587\u672C", aliases: ["\u5BCC\u6587\u672C", "richtext", "rich text", "html"] },
|
|
1112
|
+
{ type: 16 /* Count */, key: "Count", valueText: "Count", chineseName: "\u8BA1\u6570", aliases: ["\u8BA1\u6570", "count"] },
|
|
1113
|
+
{ type: 17 /* Phone */, key: "Phone", valueText: "Phone", chineseName: "\u624B\u673A", aliases: ["\u624B\u673A", "\u624B\u673A\u53F7", "\u7535\u8BDD", "phone", "mobile"] },
|
|
1114
|
+
{ type: 18 /* Email */, key: "Email", valueText: "Email", chineseName: "\u90AE\u7BB1", aliases: ["\u90AE\u7BB1", "\u90AE\u4EF6", "email", "mail"] },
|
|
1115
|
+
{ type: 19 /* Address */, key: "Address", valueText: "Address", chineseName: "\u5730\u5740", aliases: ["\u5730\u5740", "address"] },
|
|
1116
|
+
{ type: 20 /* Table */, key: "Table", valueText: "Table", chineseName: "\u8868\u683C", aliases: ["\u8868\u683C", "table"] },
|
|
1117
|
+
{ type: 21 /* Check */, key: "Check", valueText: "Check", chineseName: "\u68C0\u67E5\u9879", aliases: ["\u68C0\u67E5\u9879", "\u6838\u5BF9\u9879", "check", "checklist"] },
|
|
1118
|
+
{ type: 22 /* Member */, key: "Member", valueText: "Member", chineseName: "\u6210\u5458", aliases: ["\u6210\u5458", "\u4EBA\u5458", "member", "user"] },
|
|
1119
|
+
{ type: 23 /* Task */, key: "Task", valueText: "Task", chineseName: "\u4EFB\u52A1", aliases: ["\u4EFB\u52A1", "task"] },
|
|
1120
|
+
{ type: 24 /* Formula */, key: "Formula", valueText: "Formula", chineseName: "\u516C\u5F0F", aliases: ["\u516C\u5F0F", "\u8BA1\u7B97\u516C\u5F0F", "formula"] },
|
|
1121
|
+
{ type: 27 /* StartProcess */, key: "StartProcess", valueText: "StartProcess", chineseName: "\u53D1\u8D77\u6D41\u7A0B\u3001\u5173\u8054\u6D41\u7A0B", aliases: ["\u53D1\u8D77\u6D41\u7A0B", "\u5173\u8054\u6D41\u7A0B", "\u6D41\u7A0B\u5173\u8054", "startprocess", "start process"] },
|
|
1122
|
+
{ type: 28 /* Explanation */, key: "Explanation", valueText: "Explanation", chineseName: "\u6D41\u7A0B\u8BF4\u660E\u7EC4\u4EF6", aliases: ["\u6D41\u7A0B\u8BF4\u660E\u7EC4\u4EF6", "\u6D41\u7A0B\u8BF4\u660E", "\u8BF4\u660E\u7EC4\u4EF6", "explanation"] },
|
|
1123
|
+
{ type: 29 /* Quote */, key: "Quote", valueText: "Quote", chineseName: "\u5F15\u7528", aliases: ["\u5F15\u7528", "quote"] },
|
|
1124
|
+
{ type: 30 /* PublicArea */, key: "PublicArea", valueText: "PublicArea", chineseName: "\u516C\u5171\u533A", aliases: ["\u516C\u5171\u533A", "publicarea", "public area"] },
|
|
1125
|
+
{ type: 32 /* DataQuery */, key: "DataQuery", valueText: "DataQuery", chineseName: "\u6570\u636E\u67E5\u8BE2", aliases: ["\u6570\u636E\u67E5\u8BE2", "dataquery", "data query"] },
|
|
1126
|
+
{ type: 33 /* DataResult */, key: "DataResult", valueText: "DataResult", chineseName: "\u6570\u636E\u7ED3\u679C", aliases: ["\u6570\u636E\u7ED3\u679C", "dataresult", "data result"] },
|
|
1127
|
+
{ type: 34 /* QueryQuote */, key: "QueryQuote", valueText: "QueryQuote", chineseName: "\u67E5\u8BE2\u5F15\u7528", aliases: ["\u67E5\u8BE2\u5F15\u7528", "queryquote", "query quote"] },
|
|
1128
|
+
{ type: 35 /* DatasheetLink */, key: "DatasheetLink", valueText: "DatasheetLink", chineseName: "\u6570\u636E\u5173\u8054", aliases: ["\u6570\u636E\u5173\u8054", "\u8868\u5173\u8054", "datasheetlink", "datasheet link"] },
|
|
1129
|
+
{ type: 36 /* Dept */, key: "Dept", valueText: "Dept", chineseName: "\u90E8\u95E8", aliases: ["\u90E8\u95E8", "dept", "department"] },
|
|
1130
|
+
{ type: 37 /* UseRole */, key: "UseRole", valueText: "UseRole", chineseName: "\u4F7F\u7528\u89D2\u8272", aliases: ["\u4F7F\u7528\u89D2\u8272", "\u89D2\u8272", "userole", "use role"] },
|
|
1131
|
+
{ type: 38 /* Location */, key: "Location", valueText: "Location", chineseName: "\u5B9A\u4F4D", aliases: ["\u5B9A\u4F4D", "\u4F4D\u7F6E", "location"] },
|
|
1132
|
+
{ type: 39 /* ProcessInfoCreator */, key: "ProcessInfoCreator", valueText: "ProcessInfoCreator", chineseName: "\u53D1\u8D77\u4EBA", aliases: ["\u53D1\u8D77\u4EBA", "\u521B\u5EFA\u4EBA", "processinfocreator", "creator"] },
|
|
1133
|
+
{ type: 40 /* AlterationContent */, key: "AlterationContent", valueText: "AlterationContent", chineseName: "\u53D8\u66F4\u5185\u5BB9", aliases: ["\u53D8\u66F4\u5185\u5BB9", "alterationcontent", "alteration content"] },
|
|
1134
|
+
{ type: 41 /* AlterationReason */, key: "AlterationReason", valueText: "AlterationReason", chineseName: "\u53D8\u66F4\u539F\u56E0", aliases: ["\u53D8\u66F4\u539F\u56E0", "alterationreason", "alteration reason"] },
|
|
1135
|
+
{ type: 42 /* AlterationTask */, key: "AlterationTask", valueText: "AlterationTask", chineseName: "\u53D8\u66F4\u4EFB\u52A1", aliases: ["\u53D8\u66F4\u4EFB\u52A1", "alterationtask", "alteration task"] },
|
|
1136
|
+
{ type: 43 /* AlterationBelongProject */, key: "AlterationBelongProject", valueText: "AlterationBelongProject", chineseName: "\u53D8\u66F4\u6240\u5C5E\u9879\u76EE", aliases: ["\u53D8\u66F4\u6240\u5C5E\u9879\u76EE", "alterationbelongproject", "alteration belong project"] }
|
|
1137
|
+
];
|
|
1138
|
+
var workflowFieldTypeLookup = /* @__PURE__ */ new Map();
|
|
1139
|
+
for (const definition of workflowFieldTypeDefinitions) {
|
|
1140
|
+
for (const candidate of [definition.key, definition.valueText, definition.chineseName, ...definition.aliases]) {
|
|
1141
|
+
workflowFieldTypeLookup.set(normalizeFieldTypeKey(candidate), definition);
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
function listWorkflowFieldTypes() {
|
|
1145
|
+
return workflowFieldTypeDefinitions;
|
|
1146
|
+
}
|
|
1147
|
+
function normalizeFieldTypeKey(value) {
|
|
1148
|
+
return value.toLowerCase().replace(/[\s_\-::,,、/()()]+/g, "");
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1095
1151
|
// src/registry/skill-contract.ts
|
|
1096
1152
|
function getSkillContract() {
|
|
1097
1153
|
return {
|
|
@@ -1159,10 +1215,18 @@ function getSkillContract() {
|
|
|
1159
1215
|
"\u771F\u6B63\u6267\u884C API \u547D\u4EE4\u65F6\uFF0C\u4F18\u5148\u8D70 rsq-cli agent <module> <command> ...\uFF1Bdescribe/search \u7EE7\u7EED\u8D70\u539F\u5165\u53E3\u3002",
|
|
1160
1216
|
"\u6D89\u53CA\u521B\u5EFA\u3001\u66F4\u65B0\u3001\u7ED1\u5B9A\u3001\u5206\u914D\u7B49\u5199\u64CD\u4F5C\u65F6\uFF0C\u4F18\u5148\u4F7F\u7528 --dry-run --json \u9884\u89C8\u3002",
|
|
1161
1217
|
"\u53EA\u8981\u547D\u4EE4\u5E26 request body\uFF0C\u4F18\u5148\u628A JSON \u5199\u5165\u6587\u4EF6\u5E76\u901A\u8FC7 --body-file \u4F20\u5165\uFF0C\u4E0D\u8981\u9ED8\u8BA4\u62FC\u5185\u8054 --body\u3002",
|
|
1218
|
+
"\u521B\u5EFA workflow \u8868\u5355\u5B57\u6BB5\u524D\uFF0C\u5148\u6309 workflowFieldTypes \u91CC\u7684\u679A\u4E3E\u5B9A\u4E49\u8BC6\u522B fieldType\uFF0C\u4E0D\u8981\u51ED\u7ECF\u9A8C\u731C\u6D4B\u3002",
|
|
1162
1219
|
"\u6240\u6709 id \u5B57\u6BB5\u90FD\u5FC5\u987B\u4F20\u524D\u7F00+uuid\u98CE\u683C\u7684\u5B57\u7B26\u4E32\uFF0C\u4F8B\u5982 flowApp_019d6c0c2f03770b8b789ec313076e64\u3002",
|
|
1163
1220
|
"\u4E0D\u8981\u4F20\u6570\u5B57\u7C7B\u578B id\uFF0C\u4E5F\u4E0D\u8981\u4F20\u7EAF\u6570\u5B57\u5B57\u7B26\u4E32 id\u3002",
|
|
1164
1221
|
"\u8C03\u7528\u524D\u4F18\u5148\u9605\u8BFB\u53C2\u6570\u8BF4\u660E\u548C requestBodySchema \u4E2D\u7684\u5B57\u6BB5\u8BF4\u660E\uFF0C\u518D\u7EC4\u88C5\u53C2\u6570\u3002"
|
|
1165
1222
|
],
|
|
1223
|
+
workflowFieldTypes: listWorkflowFieldTypes().map((definition) => ({
|
|
1224
|
+
type: definition.type,
|
|
1225
|
+
key: definition.key,
|
|
1226
|
+
valueText: definition.valueText,
|
|
1227
|
+
chineseName: definition.chineseName,
|
|
1228
|
+
aliases: definition.aliases
|
|
1229
|
+
})),
|
|
1166
1230
|
tools: getRegistry().map((command) => ({
|
|
1167
1231
|
tool: `${command.module}.${command.aliases[0] ?? command.name}`,
|
|
1168
1232
|
canonical: `${command.module}.${command.name}`,
|
|
@@ -1446,7 +1510,7 @@ function registerApiCommand(parent, definition, mode = "direct") {
|
|
|
1446
1510
|
async function executeApiCommand(definition, options, mode) {
|
|
1447
1511
|
const resolvedOptions = await prepareBodyOptions(options, mode);
|
|
1448
1512
|
try {
|
|
1449
|
-
const body = sanitizeRequestBody(definition, await readBody(resolvedOptions));
|
|
1513
|
+
const body = sanitizeRequestBody(definition, resolvedOptions, await readBody(resolvedOptions));
|
|
1450
1514
|
validateRequestBody(definition, body);
|
|
1451
1515
|
const request = buildRequest(definition, resolvedOptions, body);
|
|
1452
1516
|
if (options.dryRun) {
|
|
@@ -1711,10 +1775,25 @@ function buildRequest(definition, options, body) {
|
|
|
1711
1775
|
body
|
|
1712
1776
|
};
|
|
1713
1777
|
}
|
|
1714
|
-
function sanitizeRequestBody(definition, body) {
|
|
1778
|
+
function sanitizeRequestBody(definition, options, body) {
|
|
1715
1779
|
if (body === void 0) {
|
|
1716
1780
|
return void 0;
|
|
1717
1781
|
}
|
|
1782
|
+
if (definition.requestBodySchema?.type === "object" && isRecord(body)) {
|
|
1783
|
+
const mergedBody = { ...body };
|
|
1784
|
+
for (const parameter of definition.parameters) {
|
|
1785
|
+
if (parameter.in !== "path") {
|
|
1786
|
+
continue;
|
|
1787
|
+
}
|
|
1788
|
+
const schemaProperty = definition.requestBodySchema.properties?.[parameter.name];
|
|
1789
|
+
const optionValue = asOptionalString(options[toOptionKey(parameter.name)]);
|
|
1790
|
+
if (!schemaProperty || !optionValue || mergedBody[parameter.name] !== void 0) {
|
|
1791
|
+
continue;
|
|
1792
|
+
}
|
|
1793
|
+
mergedBody[parameter.name] = optionValue;
|
|
1794
|
+
}
|
|
1795
|
+
return mergedBody;
|
|
1796
|
+
}
|
|
1718
1797
|
return body;
|
|
1719
1798
|
}
|
|
1720
1799
|
function validateRequestBody(definition, body) {
|