@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.
Files changed (2) hide show
  1. package/dist/index.js +72 -58
  2. 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\u2014\u7F3A\u7701\u6309\u5DE5\u4F5C\u533A defaultProject\uFF0C\u65E0\u914D\u7F6E\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`,
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
- if (args.projectId !== void 0) {
1924
- projectId = args.projectId;
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) projectId = 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.0",
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.0",
31
- "@siming-org/server": "0.7.0"
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",