@siming-org/cli 0.7.0 → 0.7.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 +72 -58
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -1293,6 +1293,60 @@ async function handleConvertIssues(client, input) {
|
|
|
1293
1293
|
});
|
|
1294
1294
|
}
|
|
1295
1295
|
|
|
1296
|
+
// src/client/handlers/project.ts
|
|
1297
|
+
async function handleListProjects(client, status) {
|
|
1298
|
+
return client.getJson(`/api/projects${status ? `?status=${encodeURIComponent(status)}` : ""}`);
|
|
1299
|
+
}
|
|
1300
|
+
async function handleGetProject(client, id) {
|
|
1301
|
+
return client.getJson(`/api/projects/${encodeURIComponent(id)}`);
|
|
1302
|
+
}
|
|
1303
|
+
async function handleCreateProject(client, input) {
|
|
1304
|
+
return client.postJson("/api/projects", input);
|
|
1305
|
+
}
|
|
1306
|
+
async function handleUpdateProject(client, id, patch) {
|
|
1307
|
+
return client.putJson(`/api/projects/${encodeURIComponent(id)}`, patch);
|
|
1308
|
+
}
|
|
1309
|
+
var OBJECT_ID_HEX = /^[a-f0-9]{24}$/;
|
|
1310
|
+
async function resolveProjectId(client, input) {
|
|
1311
|
+
if (OBJECT_ID_HEX.test(input)) return { success: true, data: input };
|
|
1312
|
+
const list = await handleListProjects(client);
|
|
1313
|
+
if (!list.success) return list;
|
|
1314
|
+
const hit = list.data.find((p) => p.key === input);
|
|
1315
|
+
if (!hit) {
|
|
1316
|
+
const error = {
|
|
1317
|
+
message: `project "${input}" not found`,
|
|
1318
|
+
httpStatus: 404,
|
|
1319
|
+
bizCode: "PROJECT_NOT_FOUND",
|
|
1320
|
+
hint: `check \`siming project list\` for available keys; pass --project <key|id>`
|
|
1321
|
+
};
|
|
1322
|
+
return fail(error);
|
|
1323
|
+
}
|
|
1324
|
+
if (!hit.id) {
|
|
1325
|
+
const error = {
|
|
1326
|
+
message: `project "${input}" has no id`,
|
|
1327
|
+
httpStatus: 500,
|
|
1328
|
+
hint: `server returned a project without id; check \`siming project list\``
|
|
1329
|
+
};
|
|
1330
|
+
return fail(error);
|
|
1331
|
+
}
|
|
1332
|
+
return { success: true, data: hit.id };
|
|
1333
|
+
}
|
|
1334
|
+
async function resolveProjectKey(client, input) {
|
|
1335
|
+
const list = await handleListProjects(client);
|
|
1336
|
+
if (!list.success) return list;
|
|
1337
|
+
const hit = list.data.find((p) => p.key === input || p.id === input);
|
|
1338
|
+
if (!hit) {
|
|
1339
|
+
const error = {
|
|
1340
|
+
message: `project "${input}" not found`,
|
|
1341
|
+
httpStatus: 404,
|
|
1342
|
+
bizCode: "PROJECT_NOT_FOUND",
|
|
1343
|
+
hint: `check \`siming project list\` for available keys; pass --project <key|id>`
|
|
1344
|
+
};
|
|
1345
|
+
return fail(error);
|
|
1346
|
+
}
|
|
1347
|
+
return { success: true, data: hit.key };
|
|
1348
|
+
}
|
|
1349
|
+
|
|
1296
1350
|
// src/mcp/tools.ts
|
|
1297
1351
|
import { z as z3 } from "zod";
|
|
1298
1352
|
import { TASK_TYPES, ARTIFACT_TYPES as ARTIFACT_TYPES2 } from "@siming-org/core";
|
|
@@ -1907,7 +1961,7 @@ function createMcpServer() {
|
|
|
1907
1961
|
);
|
|
1908
1962
|
server.tool(
|
|
1909
1963
|
"siming_issue",
|
|
1910
|
-
`\u95EE\u9898\u6C60\u5DE5\u5177\uFF08T202609150002\uFF09\uFF1A\u5C0F\u95EE\u9898\u4F4E\u6210\u672C\u5165\u6C60\uFF0C\u6C89\u6DC0\u540E\u7EDF\u4E00\u6574\u7406\u8F6C\u4EFB\u52A1\uFF08\u8F6C\u4EFB\u52A1/\u6574\u7406\u91CD\u4EA4\u4E92\u8D70 CLI siming issue convert \u6216 Web\uFF0C\u4E0D\u5728\u672C\u5DE5\u5177\u9762\uFF09\u3002action\uFF1Acreate(title \u5FC5\u586B 1-200 \u5B57\uFF1B\u53EF\u9009 description\u3001projectId\u2014\
|
|
1964
|
+
`\u95EE\u9898\u6C60\u5DE5\u5177\uFF08T202609150002\uFF09\uFF1A\u5C0F\u95EE\u9898\u4F4E\u6210\u672C\u5165\u6C60\uFF0C\u6C89\u6DC0\u540E\u7EDF\u4E00\u6574\u7406\u8F6C\u4EFB\u52A1\uFF08\u8F6C\u4EFB\u52A1/\u6574\u7406\u91CD\u4EA4\u4E92\u8D70 CLI siming issue convert \u6216 Web\uFF0C\u4E0D\u5728\u672C\u5DE5\u5177\u9762\uFF09\u3002action\uFF1Acreate(title \u5FC5\u586B 1-200 \u5B57\uFF1B\u53EF\u9009 description\u3001projectId\u2014\u2014key|id \u53CC\u5F62\u6001\uFF0C\u901A\u9053\u5C42\u81EA\u52A8\u5F52\u4E00\u4E3A 24-hex id\uFF08hex \u96F6\u7F51\u7EDC\u5F00\u9500\u76F4\u901A\uFF09\uFF1B\u663E\u5F0F\u6307\u5B9A\u89E3\u6790\u5931\u8D25\u62A5\u9519\u4E0D\u515C\u5E95\uFF1B\u7F3A\u7701\u94FE\uFF1A\u672A\u4F20\u6216\u7A7A\u4E32\u65F6\u6309\u5DE5\u4F5C\u533A defaultProject \u89E3\u6790\uFF0C\u65E0\u914D\u7F6E\u6216\u89E3\u6790\u5931\u8D25\u65F6\u6309 key=default\uFF1B\u5F55\u5165\u540E source=mcp)\uFF1Bquery(\u53EF\u9009 view=open|all\u2014\u2014\u7F3A\u7701 open=\u6709\u6548\u672A\u8DDF\u8FDB\u5B8C\uFF0Call=\u5168\u91CF\uFF1Bstatus \u8FC7\u6EE4\u2014\u2014\u663E\u5F0F\u6307\u5B9A\u65F6\u4F18\u5148\u4E8E view\uFF0C\u53EF\u67E5\u5DF2\u53D6\u6D88/\u5DF2\u5B8C\u7ED3\uFF1BtaskId=\u4EFB\u52A1\u53CD\u67E5\uFF1BprojectId/page\u22651/limit 1-500\uFF1B\u54CD\u5E94 items \u542B progress {done,cancelled,total})\u3002\u8C03\u7528\u65B9\u5E94\u5728 fieldMask \u4E2D\u5217\u51FA\u672C\u6B21\u771F\u5B9E\u63D0\u4F9B\u7684\u53EF\u9009\u5B57\u6BB5\uFF0Cmask \u5916\u7531\u5BBF\u4E3B\u81EA\u52A8\u586B\u5145\u7684\u7A7A\u4E32\u3001\u7A7A\u6570\u7EC4\u3001false\u30010 \u5747\u5FFD\u7565\uFF1B\u5404 action \u56FA\u5B9A\u5FC5\u586B\u5B57\u6BB5\u65E0\u9700\u5199\u5165 mask\u3002`,
|
|
1911
1965
|
issueArgs,
|
|
1912
1966
|
async (rawArgs) => {
|
|
1913
1967
|
const masked = applyFieldMask(rawArgs, ISSUE_FIELD_SPECS);
|
|
@@ -1920,11 +1974,25 @@ function createMcpServer() {
|
|
|
1920
1974
|
return requireError("create", ["title"], args);
|
|
1921
1975
|
}
|
|
1922
1976
|
let projectId;
|
|
1923
|
-
|
|
1924
|
-
|
|
1977
|
+
const explicitProject = args.projectId !== void 0 && args.projectId.trim().length > 0 ? args.projectId : void 0;
|
|
1978
|
+
if (explicitProject !== void 0) {
|
|
1979
|
+
const resolved = await resolveProjectId(client, explicitProject);
|
|
1980
|
+
if (!resolved.success) {
|
|
1981
|
+
return mcpContent({
|
|
1982
|
+
...resolved,
|
|
1983
|
+
error: {
|
|
1984
|
+
...resolved.error,
|
|
1985
|
+
hint: "MCP \u8C03\u7528\u8BF7\u4F20 projectId \u5B57\u6BB5\uFF08\u9879\u76EE key \u6216 24-hex id \u53CC\u5F62\u6001\uFF0C\u81EA\u52A8\u5F52\u4E00\uFF09\uFF1B\u53EF\u7528 `siming project list` \u67E5\u8BE2\u53EF\u7528\u9879\u76EE"
|
|
1986
|
+
}
|
|
1987
|
+
});
|
|
1988
|
+
}
|
|
1989
|
+
projectId = resolved.data;
|
|
1925
1990
|
} else {
|
|
1926
1991
|
const wsDefaultProject = readWorkspaceConfig()?.defaultProject;
|
|
1927
|
-
if (wsDefaultProject)
|
|
1992
|
+
if (wsDefaultProject) {
|
|
1993
|
+
const resolved = await resolveProjectId(client, wsDefaultProject);
|
|
1994
|
+
if (resolved.success) projectId = resolved.data;
|
|
1995
|
+
}
|
|
1928
1996
|
}
|
|
1929
1997
|
return mcpContent(
|
|
1930
1998
|
await handleCreateIssue(client, {
|
|
@@ -1989,60 +2057,6 @@ import {
|
|
|
1989
2057
|
ContextViewSchema
|
|
1990
2058
|
} from "@siming-org/core";
|
|
1991
2059
|
|
|
1992
|
-
// src/client/handlers/project.ts
|
|
1993
|
-
async function handleListProjects(client, status) {
|
|
1994
|
-
return client.getJson(`/api/projects${status ? `?status=${encodeURIComponent(status)}` : ""}`);
|
|
1995
|
-
}
|
|
1996
|
-
async function handleGetProject(client, id) {
|
|
1997
|
-
return client.getJson(`/api/projects/${encodeURIComponent(id)}`);
|
|
1998
|
-
}
|
|
1999
|
-
async function handleCreateProject(client, input) {
|
|
2000
|
-
return client.postJson("/api/projects", input);
|
|
2001
|
-
}
|
|
2002
|
-
async function handleUpdateProject(client, id, patch) {
|
|
2003
|
-
return client.putJson(`/api/projects/${encodeURIComponent(id)}`, patch);
|
|
2004
|
-
}
|
|
2005
|
-
var OBJECT_ID_HEX = /^[a-f0-9]{24}$/;
|
|
2006
|
-
async function resolveProjectId(client, input) {
|
|
2007
|
-
if (OBJECT_ID_HEX.test(input)) return { success: true, data: input };
|
|
2008
|
-
const list = await handleListProjects(client);
|
|
2009
|
-
if (!list.success) return list;
|
|
2010
|
-
const hit = list.data.find((p) => p.key === input);
|
|
2011
|
-
if (!hit) {
|
|
2012
|
-
const error = {
|
|
2013
|
-
message: `project "${input}" not found`,
|
|
2014
|
-
httpStatus: 404,
|
|
2015
|
-
bizCode: "PROJECT_NOT_FOUND",
|
|
2016
|
-
hint: `check \`siming project list\` for available keys; pass --project <key|id>`
|
|
2017
|
-
};
|
|
2018
|
-
return fail(error);
|
|
2019
|
-
}
|
|
2020
|
-
if (!hit.id) {
|
|
2021
|
-
const error = {
|
|
2022
|
-
message: `project "${input}" has no id`,
|
|
2023
|
-
httpStatus: 500,
|
|
2024
|
-
hint: `server returned a project without id; check \`siming project list\``
|
|
2025
|
-
};
|
|
2026
|
-
return fail(error);
|
|
2027
|
-
}
|
|
2028
|
-
return { success: true, data: hit.id };
|
|
2029
|
-
}
|
|
2030
|
-
async function resolveProjectKey(client, input) {
|
|
2031
|
-
const list = await handleListProjects(client);
|
|
2032
|
-
if (!list.success) return list;
|
|
2033
|
-
const hit = list.data.find((p) => p.key === input || p.id === input);
|
|
2034
|
-
if (!hit) {
|
|
2035
|
-
const error = {
|
|
2036
|
-
message: `project "${input}" not found`,
|
|
2037
|
-
httpStatus: 404,
|
|
2038
|
-
bizCode: "PROJECT_NOT_FOUND",
|
|
2039
|
-
hint: `check \`siming project list\` for available keys; pass --project <key|id>`
|
|
2040
|
-
};
|
|
2041
|
-
return fail(error);
|
|
2042
|
-
}
|
|
2043
|
-
return { success: true, data: hit.key };
|
|
2044
|
-
}
|
|
2045
|
-
|
|
2046
2060
|
// src/output/json.ts
|
|
2047
2061
|
function renderJson(value) {
|
|
2048
2062
|
console.log(JSON.stringify(value, null, 2));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@siming-org/cli",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Wuchao",
|
|
6
6
|
"engines": {
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"picocolors": "^1.1.1",
|
|
28
28
|
"yaml": "^2.6.0",
|
|
29
29
|
"zod": "^4.4.3",
|
|
30
|
-
"@siming-org/core": "0.7.
|
|
31
|
-
"@siming-org/server": "0.7.
|
|
30
|
+
"@siming-org/core": "0.7.1",
|
|
31
|
+
"@siming-org/server": "0.7.1"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"tsup": "^8.3.5",
|