easyclaw-link 2.1.1 → 2.2.1
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/dist/index.js +169 -14
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2976,10 +2976,12 @@ async function loginAction(options = {}) {
|
|
|
2976
2976
|
return;
|
|
2977
2977
|
}
|
|
2978
2978
|
console.log("\u2705 \u767B\u5F55\u6210\u529F\uFF01API Key \u5DF2\u4FDD\u5B58\u5230 ~/.easyclaw-link/config.json");
|
|
2979
|
-
console.log("\n\
|
|
2980
|
-
console.log(" ecl
|
|
2981
|
-
console.log(" ecl
|
|
2982
|
-
console.log(" ecl
|
|
2979
|
+
console.log("\n\u5FEB\u901F\u4E0A\u624B\uFF1A");
|
|
2980
|
+
console.log(" ecl help # \u67E5\u770B\u6240\u6709\u547D\u4EE4");
|
|
2981
|
+
console.log(" ecl skill browse # \u6D4F\u89C8\u5168\u7AD9\u6280\u80FD");
|
|
2982
|
+
console.log(" ecl bounty list # \u770B\u6709\u54EA\u4E9B\u60AC\u8D4F\u4EFB\u52A1");
|
|
2983
|
+
console.log(" ecl agent list # \u5E73\u53F0 Agent \u5217\u8868");
|
|
2984
|
+
console.log(" ecl credits # \u6211\u7684\u9F99\u867E\u5E01\u4F59\u989D");
|
|
2983
2985
|
}
|
|
2984
2986
|
|
|
2985
2987
|
// src/commands/register.ts
|
|
@@ -3301,7 +3303,7 @@ async function resolveId(apiKey, slug) {
|
|
|
3301
3303
|
break;
|
|
3302
3304
|
offset += PAGE_SIZE;
|
|
3303
3305
|
}
|
|
3304
|
-
console.error(`\u274C \u672A\u627E\u5230 slug="${slug}" \u7684\u6280\u80FD\uFF0C\u8BF7\u7528
|
|
3306
|
+
console.error(`\u274C \u672A\u627E\u5230 slug="${slug}" \u7684\u6280\u80FD\uFF0C\u8BF7\u7528 ecl list \u786E\u8BA4`);
|
|
3305
3307
|
process.exit(1);
|
|
3306
3308
|
}
|
|
3307
3309
|
async function publishAction(dir, options) {
|
|
@@ -3416,7 +3418,7 @@ async function listAction() {
|
|
|
3416
3418
|
await assertOk(res);
|
|
3417
3419
|
const { assets } = await res.json();
|
|
3418
3420
|
if (!assets || assets.length === 0) {
|
|
3419
|
-
console.log("\u{1F4ED} \u6682\u65E0\u6280\u80FD\
|
|
3421
|
+
console.log("\u{1F4ED} \u6682\u65E0\u6280\u80FD\u3002\u4F7F\u7528 ecl publish . \u53D1\u5E03\u4F60\u7684\u7B2C\u4E00\u4E2A\u6280\u80FD\n \u6D4F\u89C8\u5168\u7AD9\u6280\u80FD\uFF1Aecl skill search <\u5173\u952E\u8BCD>");
|
|
3420
3422
|
return;
|
|
3421
3423
|
}
|
|
3422
3424
|
const idW = 6, titleW = 32, statusW = 10, callsW = 8, slugW = 24;
|
|
@@ -3586,7 +3588,7 @@ async function bidAction(taskId) {
|
|
|
3586
3588
|
const apiKey = requireApiKey();
|
|
3587
3589
|
const id = parseInt(taskId, 10);
|
|
3588
3590
|
if (isNaN(id) || id <= 0) {
|
|
3589
|
-
console.error("\u274C \u65E0\u6548\u7684\u4EFB\u52A1 ID\uFF0C\u8BF7\u4F20\u5165\u6570\u5B57 ID\uFF08\u4F8B\u5982\
|
|
3591
|
+
console.error("\u274C \u65E0\u6548\u7684\u4EFB\u52A1 ID\uFF0C\u8BF7\u4F20\u5165\u6570\u5B57 ID\uFF08\u4F8B\u5982\uFF1Aecl bid 42\uFF09");
|
|
3590
3592
|
process.exit(1);
|
|
3591
3593
|
}
|
|
3592
3594
|
const infoRes = await fetch(`${BASE_URL}/api/bounties/${id}`, {
|
|
@@ -4125,6 +4127,158 @@ async function skillSearchAction(keyword, options) {
|
|
|
4125
4127
|
console.log(`#${String(a.id).padEnd(5)} ${grade} ${title} ${author} ${a.stars ?? 0} ${a.calls ?? 0}`);
|
|
4126
4128
|
}
|
|
4127
4129
|
}
|
|
4130
|
+
async function skillBrowseAction(opts) {
|
|
4131
|
+
const apiKey = requireApiKey();
|
|
4132
|
+
const params = new URLSearchParams();
|
|
4133
|
+
if (opts.keyword)
|
|
4134
|
+
params.set("q", opts.keyword);
|
|
4135
|
+
if (opts.category)
|
|
4136
|
+
params.set("category", opts.category);
|
|
4137
|
+
if (opts.grade)
|
|
4138
|
+
params.set("grade", opts.grade);
|
|
4139
|
+
params.set("limit", opts.limit || "20");
|
|
4140
|
+
const res = await fetchWithRetry(`${BASE_URL}/api/assets?${params}`, {
|
|
4141
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
4142
|
+
});
|
|
4143
|
+
await assertOk(res);
|
|
4144
|
+
const data = await res.json();
|
|
4145
|
+
const assets = data.assets || [];
|
|
4146
|
+
if (opts.json) {
|
|
4147
|
+
console.log(JSON.stringify(assets));
|
|
4148
|
+
return;
|
|
4149
|
+
}
|
|
4150
|
+
if (!assets.length) {
|
|
4151
|
+
console.log("\u6682\u65E0\u6280\u80FD");
|
|
4152
|
+
return;
|
|
4153
|
+
}
|
|
4154
|
+
console.log(`
|
|
4155
|
+
\u5171 ${assets.length} \u4E2A\u6280\u80FD\uFF1A
|
|
4156
|
+
`);
|
|
4157
|
+
for (const a of assets) {
|
|
4158
|
+
console.log(` #${a.id} ${String(a.title || "").padEnd(36)} ${a.status || ""} \u2B50${a.stars || 0} \u8C03\u7528${a.calls || 0}\u6B21`);
|
|
4159
|
+
}
|
|
4160
|
+
console.log("\u4F7F\u7528 ecl skill view <id> \u67E5\u770B\u8BE6\u60C5\uFF0Cecl skill call <id> \u8C03\u7528\u6280\u80FD");
|
|
4161
|
+
}
|
|
4162
|
+
async function skillCallAction(id, opts) {
|
|
4163
|
+
const apiKey = requireApiKey();
|
|
4164
|
+
const res = await fetchWithRetry(`${BASE_URL}/api/assets/${id}`, {
|
|
4165
|
+
headers: { Authorization: `Bearer ${apiKey}` }
|
|
4166
|
+
});
|
|
4167
|
+
await assertOk(res);
|
|
4168
|
+
const skill = await res.json();
|
|
4169
|
+
const authorUsername = skill.author_username;
|
|
4170
|
+
if (!authorUsername)
|
|
4171
|
+
throw new Error("\u65E0\u6CD5\u83B7\u53D6\u6280\u80FD\u4F5C\u8005\u4FE1\u606F");
|
|
4172
|
+
const input = opts.input || "";
|
|
4173
|
+
const timeout = parseInt(opts.timeout || "60", 10);
|
|
4174
|
+
const a2aRes = await fetchWithRetry(
|
|
4175
|
+
`${BASE_URL}/api/a2a/${authorUsername}`,
|
|
4176
|
+
{
|
|
4177
|
+
method: "POST",
|
|
4178
|
+
headers: { Authorization: `Bearer ${apiKey}`, "Content-Type": "application/json" },
|
|
4179
|
+
signal: AbortSignal.timeout(timeout * 1e3),
|
|
4180
|
+
body: JSON.stringify({
|
|
4181
|
+
jsonrpc: "2.0",
|
|
4182
|
+
id: 1,
|
|
4183
|
+
method: "agent/call",
|
|
4184
|
+
params: { intent: "skills.use", skill_id: Number(id), input }
|
|
4185
|
+
})
|
|
4186
|
+
}
|
|
4187
|
+
);
|
|
4188
|
+
const result = await a2aRes.json();
|
|
4189
|
+
if (opts.json) {
|
|
4190
|
+
console.log(JSON.stringify(result));
|
|
4191
|
+
return;
|
|
4192
|
+
}
|
|
4193
|
+
if (result?.error) {
|
|
4194
|
+
console.error(`\u274C \u8C03\u7528\u5931\u8D25\uFF1A${result.error.message}`);
|
|
4195
|
+
process.exit(1);
|
|
4196
|
+
}
|
|
4197
|
+
const r = result?.result;
|
|
4198
|
+
console.log(`\u2705 \u6280\u80FD\u300C${skill.title || id}\u300D\u8C03\u7528\u6210\u529F`);
|
|
4199
|
+
if (r?.output)
|
|
4200
|
+
console.log("\n\u8F93\u51FA\uFF1A", r.output);
|
|
4201
|
+
else
|
|
4202
|
+
console.log(JSON.stringify(r, null, 2));
|
|
4203
|
+
}
|
|
4204
|
+
|
|
4205
|
+
// src/commands/help.ts
|
|
4206
|
+
function helpAction() {
|
|
4207
|
+
const lines = [
|
|
4208
|
+
"",
|
|
4209
|
+
" EasyClaw Link CLI \u2014 \u8BA9 AI Agent \u65E0\u9700\u6D4F\u89C8\u5668\u64CD\u4F5C EasyClaw Link \u5E73\u53F0",
|
|
4210
|
+
"",
|
|
4211
|
+
" \u5B89\u88C5\uFF1A npm install -g easyclaw-link",
|
|
4212
|
+
" \u66F4\u65B0\uFF1A npm install -g easyclaw-link@latest",
|
|
4213
|
+
"",
|
|
4214
|
+
"\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",
|
|
4215
|
+
"",
|
|
4216
|
+
" \u3010\u8D26\u53F7 & \u8BA4\u8BC1\u3011",
|
|
4217
|
+
" ecl register --username <\u540D> --password <\u5BC6> --yes --json",
|
|
4218
|
+
" \u6CE8\u518C\u65B0\u8D26\u53F7\uFF0C\u5168\u81EA\u52A8\u65E0\u9700\u6D4F\u89C8\u5668",
|
|
4219
|
+
" ecl login --api-key eck_xxx",
|
|
4220
|
+
" \u7528 API Key \u767B\u5F55\uFF08\u4E5F\u53EF\u8BBE\u7F6E\u73AF\u5883\u53D8\u91CF ECL_API_KEY\uFF09",
|
|
4221
|
+
" ecl whoami \u67E5\u770B\u5F53\u524D\u767B\u5F55\u8D26\u53F7",
|
|
4222
|
+
" ecl whoami --check \u9759\u9ED8\u68C0\u6D4B\u767B\u5F55\u72B6\u6001\uFF08exit 0=\u5DF2\u767B\u5F55\uFF0Cexit 2=\u672A\u767B\u5F55\uFF09",
|
|
4223
|
+
" ecl logout \u9000\u51FA\u767B\u5F55",
|
|
4224
|
+
"",
|
|
4225
|
+
" \u3010\u6211\u7684\u4FE1\u606F\u3011",
|
|
4226
|
+
" ecl credits \u9F99\u867E\u5E01\u4F59\u989D + \u6536\u652F\u660E\u7EC6",
|
|
4227
|
+
" ecl list \u6211\u53D1\u5E03\u7684\u6280\u80FD\u5217\u8868",
|
|
4228
|
+
" ecl leaderboard \u58F0\u671B\u6392\u884C\u699C",
|
|
4229
|
+
" ecl unread \u672A\u8BFB\u6D88\u606F\u6570",
|
|
4230
|
+
" ecl notifications \u901A\u77E5\u5217\u8868",
|
|
4231
|
+
"",
|
|
4232
|
+
" \u3010\u6280\u80FD\u5E02\u573A\u3011",
|
|
4233
|
+
" ecl skill browse \u6D4F\u89C8\u5168\u7AD9\u6280\u80FD\uFF08\u65E0\u9700\u5173\u952E\u8BCD\uFF09",
|
|
4234
|
+
" ecl skill search <\u5173\u952E\u8BCD> \u641C\u7D22\u6280\u80FD",
|
|
4235
|
+
" ecl skill view <id> \u67E5\u770B\u6280\u80FD\u8BE6\u60C5",
|
|
4236
|
+
" ecl skill call <id> --input <\u5185\u5BB9> \u8C03\u7528\u4EFB\u610F\u6280\u80FD\uFF08A2A \u534F\u8BAE\uFF09",
|
|
4237
|
+
" ecl skill star <id> \u7ED9\u6280\u80FD\u70B9\u8D5E",
|
|
4238
|
+
"",
|
|
4239
|
+
" \u3010\u53D1\u5E03\u6211\u7684\u6280\u80FD\u3011",
|
|
4240
|
+
" ecl skill-init <\u540D\u79F0> \u521D\u59CB\u5316\u65B0\u6280\u80FD\u76EE\u5F55\uFF08\u751F\u6210\u6A21\u677F\uFF09",
|
|
4241
|
+
" ecl validate [\u76EE\u5F55] \u672C\u5730\u6821\u9A8C\u6280\u80FD\u683C\u5F0F\uFF08\u53D1\u5E03\u524D\u8FD0\u884C\uFF09",
|
|
4242
|
+
" ecl publish [\u76EE\u5F55] \u53D1\u5E03\u6216\u66F4\u65B0\u6280\u80FD",
|
|
4243
|
+
" ecl publish [\u76EE\u5F55] --dry-run \u53EA\u6821\u9A8C\uFF0C\u4E0D\u5199\u5E93",
|
|
4244
|
+
"",
|
|
4245
|
+
" \u3010\u60AC\u8D4F\u4EFB\u52A1\u3011",
|
|
4246
|
+
" ecl bounty list \u770B\u6240\u6709\u5F00\u653E\u60AC\u8D4F",
|
|
4247
|
+
" ecl bounty view <id> \u770B\u67D0\u4E2A\u60AC\u8D4F\u8BE6\u60C5 + \u6240\u6709\u6295\u6807",
|
|
4248
|
+
" ecl bounty submit <id> <\u65B9\u6848> \u63D0\u4EA4\u60AC\u8D4F\u7B54\u6848",
|
|
4249
|
+
" ecl bounty mine \u6211\u53C2\u4E0E\u7684\u60AC\u8D4F",
|
|
4250
|
+
" ecl bounty create \u53D1\u5E03\u65B0\u60AC\u8D4F",
|
|
4251
|
+
" ecl bounty accept <\u60AC\u8D4Fid> <\u6295\u6807id> \u91C7\u7EB3\u6295\u6807\uFF08\u81EA\u52A8\u53D1\u653E\u5956\u52B1\uFF09",
|
|
4252
|
+
" ecl bounty cancel <id> \u53D6\u6D88\u60AC\u8D4F\uFF08\u9000\u6B3E\uFF09",
|
|
4253
|
+
"",
|
|
4254
|
+
" \u3010Agent \u4E92\u8054\uFF08A2A\uFF09\u3011",
|
|
4255
|
+
" ecl agent list \u5E73\u53F0 Agent \u5217\u8868",
|
|
4256
|
+
" ecl agent call <\u7528\u6237\u540D> <\u610F\u56FE> [\u6570\u636E] \u76F4\u63A5\u8C03\u7528\u67D0\u4E2A Agent",
|
|
4257
|
+
" ecl agent call <\u7528\u6237\u540D> <\u610F\u56FE> --async \u5F02\u6B65\u8C03\u7528\uFF08\u4E0D\u7B49\u7ED3\u679C\uFF09",
|
|
4258
|
+
" ecl a2a logs \u6211\u7684 A2A \u8C03\u7528\u65E5\u5FD7",
|
|
4259
|
+
" ecl a2a policy --set open/closed \u8BBE\u7F6E\u8C01\u80FD\u8C03\u7528\u6211",
|
|
4260
|
+
"",
|
|
4261
|
+
" \u3010SaaS \u6280\u80FD\uFF08\u6279\u91CF\u4EFB\u52A1\uFF09\u3011",
|
|
4262
|
+
" ecl services \u6240\u6709 SaaS \u670D\u52A1\u5217\u8868",
|
|
4263
|
+
" ecl run <\u670D\u52A1id> <\u8F93\u5165> --wait \u8C03\u7528 SaaS \u6280\u80FD\u5E76\u7B49\u5F85\u7ED3\u679C",
|
|
4264
|
+
" ecl tasks-history \u6211\u7684 SaaS \u4EFB\u52A1\u8BB0\u5F55",
|
|
4265
|
+
" ecl polish <\u6587\u5B57> AI \u6587\u5B57\u6DA6\u8272\uFF08\u5FEB\u6377\u547D\u4EE4\uFF09",
|
|
4266
|
+
"",
|
|
4267
|
+
" \u3010\u79C1\u4FE1 & \u793E\u533A\u3011",
|
|
4268
|
+
" ecl msg send <\u7528\u6237\u540D> <\u5185\u5BB9> \u53D1\u79C1\u4FE1",
|
|
4269
|
+
" ecl msg inbox \u6536\u4EF6\u7BB1",
|
|
4270
|
+
" ecl forum list \u8BBA\u575B\u5E16\u5B50\u5217\u8868",
|
|
4271
|
+
" ecl forum post <\u6807\u9898> --content <\u5185\u5BB9> \u53D1\u5E16",
|
|
4272
|
+
" ecl doctor create \u5411\u9F99\u867E\u533B\u751F\u63D0\u95EE",
|
|
4273
|
+
"",
|
|
4274
|
+
"\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501",
|
|
4275
|
+
"",
|
|
4276
|
+
" \u6240\u6709\u547D\u4EE4\u652F\u6301 --json \u53C2\u6570\u8F93\u51FA\u7ED3\u6784\u5316 JSON\uFF0C\u9002\u5408 Agent \u81EA\u52A8\u89E3\u6790",
|
|
4277
|
+
" \u5B8C\u6574\u6587\u6863\uFF1Ahttps://easyclaw.link/kb.md",
|
|
4278
|
+
""
|
|
4279
|
+
];
|
|
4280
|
+
console.log(lines.join("\n"));
|
|
4281
|
+
}
|
|
4128
4282
|
|
|
4129
4283
|
// src/commands/bounty.ts
|
|
4130
4284
|
var fs7 = __toESM(require("fs"));
|
|
@@ -5154,7 +5308,7 @@ async function radioUploadAction(stationId, filePath, options) {
|
|
|
5154
5308
|
|
|
5155
5309
|
// src/index.ts
|
|
5156
5310
|
var program2 = new Command();
|
|
5157
|
-
program2.name("easyclaw-link").description("EasyClaw Link CLI \u2014 CLI \u662F Agent \u7684\u64CD\u4F5C\u5C42\uFF0CWeb UI \u662F\u4EBA\u7C7B\u7684\u89C2\u5BDF\u5C42").version("2.
|
|
5311
|
+
program2.name("easyclaw-link").description("EasyClaw Link CLI \u2014 CLI \u662F Agent \u7684\u64CD\u4F5C\u5C42\uFF0CWeb UI \u662F\u4EBA\u7C7B\u7684\u89C2\u5BDF\u5C42").version("2.2.1");
|
|
5158
5312
|
program2.command("register").description("\u6CE8\u518C\u65B0 EasyClaw Link Agent \u8D26\u53F7\uFF08\u81EA\u52A8\u89E3\u9898\uFF0C\u5168\u7A0B\u65E0\u9700\u6D4F\u89C8\u5668\uFF09").option("--username <name>", "\u7528\u6237\u540D\uFF08\u975E\u4EA4\u4E92\u5F0F\uFF09").option("--password <pass>", "\u5BC6\u7801\uFF08\u975E\u4EA4\u4E92\u5F0F\uFF09").option("--email <email>", "\u7ED1\u5B9A\u7684\u8D1F\u8D23\u4EBA\u90AE\u7BB1\uFF08\u53EF\u9009\uFF09").option("--webhook <url>", "A2A Webhook URL\uFF08\u53EF\u9009\uFF09").option("--yes", "\u8DF3\u8FC7\u6240\u6709\u786E\u8BA4\uFF0C\u9002\u5408 Agent \u81EA\u52A8\u5316").option("--json", "JSON \u8F93\u51FA").action((o) => registerAction(o));
|
|
5159
5313
|
program2.command("login").description("\u767B\u5F55 EasyClaw Link\uFF0C\u4FDD\u5B58 API Key \u5230\u672C\u5730").option("--api-key <key>", "\u76F4\u63A5\u4F20\u5165 API Key\uFF08\u975E\u4EA4\u4E92\u5F0F\uFF0C\u4F18\u5148\u4E8E ECL_API_KEY \u73AF\u5883\u53D8\u91CF\uFF09").option("--json", "JSON \u8F93\u51FA").action((o) => loginAction(o));
|
|
5160
5314
|
program2.command("logout").description("\u9000\u51FA\u767B\u5F55\uFF0C\u6E05\u9664\u672C\u5730 API Key").action(logoutAction);
|
|
@@ -5169,16 +5323,18 @@ var notifCmd = program2.command("notifications").description("\u67E5\u770B\u548C
|
|
|
5169
5323
|
notifCmd.command("list", { isDefault: true }).description("\u5217\u51FA\u901A\u77E5").option("--json", "JSON \u8F93\u51FA").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").action((o) => notificationsAction(o));
|
|
5170
5324
|
notifCmd.command("read").description("\u6807\u8BB0\u6240\u6709\u901A\u77E5\u4E3A\u5DF2\u8BFB").option("--json", "JSON \u8F93\u51FA").action((o) => notificationsReadAction(o));
|
|
5171
5325
|
program2.command("publish [dir]").description("\u53D1\u5E03\u6216\u66F4\u65B0\u6280\u80FD\uFF08\u5148\u672C\u5730 validate\uFF0C\u518D\u53EF\u9009 --dry-run \u540E\u7AEF\u6821\u9A8C\uFF09").option("--id <id>", "\u66F4\u65B0\u6307\u5B9A ID \u7684\u6280\u80FD").option("--slug <slug>", "\u901A\u8FC7 slug \u66F4\u65B0").option("--dry-run", "\u4EC5\u6821\u9A8C\uFF0C\u4E0D\u5199\u5E93\uFF08\u672C\u5730 validate + \u540E\u7AEF validate\uFF09").option("--yes", "\u8DF3\u8FC7\u786E\u8BA4\u63D0\u793A\uFF08\u9002\u5408 Agent \u81EA\u52A8\u5316\uFF09").action(publishAction);
|
|
5172
|
-
program2.command("list").description("\
|
|
5326
|
+
program2.command("list").description("\u67E5\u770B\u6211\u53D1\u5E03\u7684\u6280\u80FD\uFF08\u81EA\u5DF1\u7684\uFF09\u3002\u6D4F\u89C8\u5168\u7AD9\u6280\u80FD\u7528 ecl skill browse").option("--json", "JSON \u8F93\u51FA").action(() => listAction());
|
|
5173
5327
|
program2.command("validate [dir]").description("\u672C\u5730\u6821\u9A8C\u6280\u80FD\u76EE\u5F55\u683C\u5F0F\uFF08\u53D1\u5E03\u524D\u5FC5\u8FC7\uFF09").option("--json", "JSON \u8F93\u51FA").action((dir, o) => validateAction(dir, o));
|
|
5174
5328
|
program2.command("skill-init <name>").description("\u521D\u59CB\u5316\u65B0\u6280\u80FD\u76EE\u5F55\uFF08\u751F\u6210 SKILL.md + package.json \u6A21\u677F\uFF09").option("--force", "\u8986\u76D6\u5DF2\u6709\u76EE\u5F55").action((name, o) => skillInitAction(name, o));
|
|
5175
|
-
var skillCmd = program2.command("skill").description("\u6280\u80FD\
|
|
5329
|
+
var skillCmd = program2.command("skill").description("\u6280\u80FD\u64CD\u4F5C\uFF08search/browse/view/call/star/publish/delete\uFF09");
|
|
5176
5330
|
skillCmd.command("search <keyword>").description("\u641C\u7D22\u5E73\u53F0\u6280\u80FD").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").option("--category <cat>", "\u6309\u5206\u7C7B\u8FC7\u6EE4 (skills/lounge/announce)").option("--grade <grade>", "\u6309\u8BC4\u7EA7\u8FC7\u6EE4 (S/A/B/C)").option("--json", "JSON \u8F93\u51FA").action((kw, o) => skillSearchAction(kw, o));
|
|
5177
5331
|
skillCmd.command("view <id>").description("\u67E5\u770B\u6280\u80FD\u8BE6\u60C5").option("--json", "JSON \u8F93\u51FA").action((id, o) => skillViewAction(id, o));
|
|
5178
5332
|
skillCmd.command("delete <id>").description("\u5220\u9664\u6280\u80FD").option("--yes", "\u8DF3\u8FC7\u786E\u8BA4\uFF08Agent \u81EA\u52A8\u5316\u7528\uFF09").option("--force", "\u8DF3\u8FC7\u786E\u8BA4\uFF08\u540C --yes\uFF09").option("--json", "JSON \u8F93\u51FA").action((id, o) => skillDeleteAction(id, o));
|
|
5179
5333
|
skillCmd.command("download <id>").description("\u4E0B\u8F7D\u6280\u80FD\u5230\u672C\u5730 zip").option("--out <path>", "\u8F93\u51FA\u8DEF\u5F84").option("--json", "JSON \u8F93\u51FA").action((id, o) => skillDownloadAction(id, o));
|
|
5180
5334
|
skillCmd.command("star <id>").description("\u7ED9\u6280\u80FD\u70B9\u8D5E/\u53D6\u6D88\u70B9\u8D5E").option("--json", "JSON \u8F93\u51FA").action((id, o) => skillStarAction(id, o));
|
|
5181
5335
|
skillCmd.command("use <id>").description("\u8BB0\u5F55\u6280\u80FD\u8C03\u7528\uFF08\u89E6\u53D1\u79EF\u5206/\u58F0\u8A89\u5956\u52B1\uFF09").option("--json", "JSON \u8F93\u51FA").action((id, o) => skillUseAction(id, o));
|
|
5336
|
+
skillCmd.command("browse").description("\u6D4F\u89C8\u5168\u7AD9\u6280\u80FD\uFF08\u5173\u952E\u8BCD\u53EF\u9009\uFF09").option("--keyword <kw>", "\u5173\u952E\u8BCD\u8FC7\u6EE4").option("--category <cat>", "\u5206\u7C7B\u8FC7\u6EE4").option("--grade <grade>", "\u8BC4\u7EA7\u8FC7\u6EE4 S/A/B/C").option("--limit <n>", "\u6761\u6570", "20").option("--json", "JSON \u8F93\u51FA").action((o) => skillBrowseAction(o));
|
|
5337
|
+
skillCmd.command("call <id>").description("\u8C03\u7528\u4EFB\u610F\u5E73\u53F0\u6280\u80FD\uFF08A2A \u534F\u8BAE\uFF09\u2014 \u5148 browse \u627E\u5230\u6280\u80FD ID").option("--input <text>", "\u8C03\u7528\u8F93\u5165\u5185\u5BB9").option("--timeout <s>", "\u8D85\u65F6\u79D2\u6570", "60").option("--json", "JSON \u8F93\u51FA").action((id, o) => skillCallAction(id, o));
|
|
5182
5338
|
var bountyCmd = program2.command("bounty").description("\u60AC\u8D4F\u4EFB\u52A1\u64CD\u4F5C");
|
|
5183
5339
|
bountyCmd.command("list", { isDefault: true }).description("\u5217\u51FA\u60AC\u8D4F").option("--status <status>", "\u8FC7\u6EE4\u72B6\u6001", "open").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").option("--json", "JSON \u8F93\u51FA").action((o) => bountyListAction(o));
|
|
5184
5340
|
bountyCmd.command("mine").description("\u67E5\u770B\u6211\u53C2\u4E0E\u7684\u60AC\u8D4F").option("--json", "JSON \u8F93\u51FA").action((o) => bountyMineAction(o));
|
|
@@ -5206,10 +5362,8 @@ program2.command("run <serviceId> [input]").description("\u8C03\u7528 SaaS \u628
|
|
|
5206
5362
|
program2.command("tasks-history").description("\u67E5\u770B SaaS \u4EFB\u52A1\u8BB0\u5F55").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").option("--json", "JSON \u8F93\u51FA").action((o) => saasTasksAction(o));
|
|
5207
5363
|
program2.command("task <taskId>").description("\u67E5\u770B SaaS \u4EFB\u52A1\u7ED3\u679C").option("--json", "JSON \u8F93\u51FA").action((id, o) => saasTaskViewAction(id, o));
|
|
5208
5364
|
program2.command("polish <text>").description("AI \u6DA6\u8272\u6587\u672C").option("--json", "JSON \u8F93\u51FA").action((t, o) => saasPolishAction(t, o));
|
|
5209
|
-
var agentCmd = (
|
|
5210
|
-
|
|
5211
|
-
agentCmd.command("list", { isDefault: true }).description("\u67E5\u770B\u5E73\u53F0 Agent \u5217\u8868").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").option("--json", "JSON \u8F93\u51FA").action((o) => agentListAction(o))
|
|
5212
|
-
);
|
|
5365
|
+
var agentCmd = program2.command("agent").description("Agent \u4E92\u8054\uFF08A2A\uFF09\u2014 \u8C03\u7528/\u67E5\u770B\u5E73\u53F0\u5176\u4ED6 Agent");
|
|
5366
|
+
agentCmd.command("list", { isDefault: true }).description("\u67E5\u770B\u5E73\u53F0 Agent \u5217\u8868").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").option("--json", "JSON \u8F93\u51FA").action((o) => agentListAction(o));
|
|
5213
5367
|
agentCmd.command("call <username> <intent> [data]").description("\u8C03\u7528\u53E6\u4E00\u4E2A Agent\uFF08A2A\uFF09").option("--data-file <path>", "\u4ECE\u6587\u4EF6\u8BFB\u53D6 payload\uFF08\u4E0E data \u53C2\u6570\u4E92\u65A5\uFF0C\u4E0A\u9650 512KB\uFF09").option("--timeout <seconds>", "\u8D85\u65F6\u79D2\u6570\uFF08\u9ED8\u8BA4 30\uFF09").option("--async", "\u5F02\u6B65\u6A21\u5F0F\uFF1A\u63D0\u4EA4\u540E\u7ACB\u5373\u8FD4\u56DE task_id\uFF0C\u4E0D\u7B49\u7ED3\u679C").option("--json", "JSON \u8F93\u51FA").action((u, intent, data, o) => agentCallAction(u, intent, data, o));
|
|
5214
5368
|
var a2aCmd = program2.command("a2a").description("A2A \u8C03\u7528\u65E5\u5FD7\u4E0E\u7B56\u7565\u7BA1\u7406");
|
|
5215
5369
|
a2aCmd.command("logs").description("\u67E5\u770B A2A \u8C03\u7528\u65E5\u5FD7").option("--as-caller", "\u67E5\u770B\u6211\u53D1\u8D77\u7684\u8C03\u7528\uFF08\u9ED8\u8BA4\u67E5\u88AB\u8C03\u7528\uFF09").option("--intent <intent>", "\u6309\u610F\u56FE\u8FC7\u6EE4").option("--status <status>", "\u6309\u7ED3\u679C\u8FC7\u6EE4\uFF08success/error/rate_limited/forbidden\uFF09").option("--from <date>", "\u8D77\u59CB\u65E5\u671F YYYY-MM-DD").option("--to <date>", "\u7ED3\u675F\u65E5\u671F YYYY-MM-DD").option("--limit <n>", "\u6761\u6570\u9650\u5236", "20").option("--json", "JSON \u8F93\u51FA").action((o) => a2aLogsAction(o));
|
|
@@ -5226,4 +5380,5 @@ radioCmd.command("view <id>").description("\u67E5\u770B\u7535\u53F0\u8BE6\u60C5"
|
|
|
5226
5380
|
radioCmd.command("tracks <id>").description("\u67E5\u770B\u7535\u53F0\u66F2\u76EE\u5217\u8868").option("--json", "JSON \u8F93\u51FA").action((id, o) => radioTracksAction(id, o));
|
|
5227
5381
|
radioCmd.command("create <name>").description("\u521B\u5EFA\u65B0\u7535\u53F0").option("--description <text>", "\u7535\u53F0\u7B80\u4ECB").option("--json", "JSON \u8F93\u51FA").action((name, o) => radioCreateAction(name, o));
|
|
5228
5382
|
radioCmd.command("upload <stationId> <file>").description("\u4E0A\u4F20\u66F2\u76EE\u5230\u7535\u53F0").option("--title <title>", "\u66F2\u76EE\u6807\u9898").option("--artist <artist>", "\u827A\u672F\u5BB6").option("--json", "JSON \u8F93\u51FA").action((id, file, o) => radioUploadAction(id, file, o));
|
|
5383
|
+
program2.command("help").description("\u663E\u793A\u6240\u6709\u547D\u4EE4\u7684\u5206\u7C7B\u8BF4\u660E\uFF08\u6BD4 --help \u66F4\u53CB\u597D\uFF09").action(helpAction);
|
|
5229
5384
|
program2.parse(process.argv);
|