🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@huangqz/tapd-cli

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@huangqz/tapd-cli - npm Package Compare versions

Comparing version
0.1.0
to
0.2.0
+73
dist/command-text.d.ts
export declare const COPY: {
readonly brandSubtitle: "cli";
readonly rootDescription: "管理 TAPD 需求、迭代空间和评论";
readonly rootHelpAfter: "\n常用流程\n 1. tapd login\n 2. tapd init\n 3. tapd story create ./需求.md\n 4. tapd story update ./需求.md\n 5. tapd comment add ./需求.md --message \"已评审\"\n";
readonly loginDescription: "登录 TAPD 并保存本地凭证";
readonly loginHelpAfter: "\n示例:\n tapd login\n tapd login --mode app --client-id tapd-app-xxx --company-id 41988264\n tapd login --mode personal --personal-token *** --workspace-id 58491787\n\n说明:\n 凭证保存到 .tapd/credentials.json,company_id 保存到 .tapd/config.json。\n";
readonly logoutDescription: "退出登录并清除本地认证文件";
readonly loginActionDescription: "登录 TAPD 并保存本地凭证";
readonly loginActionHelpAfter: "\n示例:\n tapd login\n tapd login --mode app --client-id tapd-app-xxx --client-secret *** --company-id 41988264\n tapd login --mode personal --personal-token *** --workspace-id 58491787\n";
readonly loginModeMessage: "选择认证方式";
readonly loginModeApp: "开放应用凭证";
readonly loginModePersonal: "个人令牌";
readonly loginPersonalTokenMessage: "个人令牌";
readonly loginPersonalTokenRequired: "请输入个人令牌";
readonly loginWorkspaceIdMessage: "验证用 workspace_id";
readonly loginClientIdMessage: "应用 ID";
readonly loginClientSecretMessage: "应用密钥";
readonly loginClientSecretRequired: "请输入应用密钥";
readonly loginCompanyIdMessage: "企业 ID company_id";
readonly commentDescription: "TAPD 需求评论";
readonly commentHelpAfter: "\n示例:\n tapd comment add ./需求.md --message \"已评审\"\n tapd comment add 1147232921001000017 --file ./comment.md\n tapd comment list ./需求.md\n";
readonly commentAddDescription: "添加需求评论";
readonly commentAddHelpAfter: "\n示例:\n tapd comment add ./需求.md --message \"已完成评审\"\n tapd comment add 1147232921001000017 --file ./comment.md --author 黄启智\n\n说明:\n 评论内容会从 Markdown 转成 HTML 后写入 TAPD。\n";
readonly commentListDescription: "查看需求评论";
readonly commentListHelpAfter: "\n示例:\n tapd comment list ./需求.md\n tapd comment list 1147232921001000017 --workspace-id 47232921\n";
readonly initDescription: "初始化当前项目,选择默认 TAPD 空间";
readonly initHelpAfter: "\n示例:\n tapd init\n\n 说明:\n 应用凭证模式会读取 company_id 并拉取空间列表供下拉选择。\n 个人令牌模式会验证当前默认 workspace,因为个人令牌通常不能列出企业项目。\n";
readonly initSelectWorkspaceMessage: "选择默认空间";
readonly initSelectCreatorMessage: "选择默认创建人";
readonly initNoDefaultCreator: "不设置默认创建人";
readonly workspaceDescription: "TAPD 空间管理";
readonly workspaceHelpAfter: "\n示例:\n tapd workspace list\n tapd workspace add --workspace-id 58491787\n tapd workspace use\n tapd workspace use --workspace-id 58491787\n";
readonly workspaceListDescription: "列出空间;个人令牌模式仅显示当前默认空间";
readonly workspaceAddDescription: "验证并缓存一个 workspace_id,适合个人令牌模式管理多个空间";
readonly workspaceUseDescription: "选择默认空间;个人令牌模式可传 --workspace-id 验证切换";
readonly workspaceUseSelectMessage: "选择默认空间";
readonly storyDescription: "TAPD 需求管理";
readonly storyHelpAfter: "\n示例:\n tapd story create ./需求.md\n tapd story update ./需求.md\n tapd story get 1147232921001000017\n tapd story pull 1147232921001000017\n tapd story tasks 1147232921001000017\n\nMarkdown frontmatter:\n ---\n title: \"需求标题\"\n iteration_id: \"1147232921001000005\"\n creator: \"黄启智\"\n label: \"local-md|cli\"\n status: \"planning\"\n ---\n";
readonly storyListDescription: "查询需求列表,默认加载全部,也可交互选择分类";
readonly storyListHelpAfter: "\n示例:\n tapd story list\n tapd story list --all\n tapd story list --status planning\n tapd story list --iteration-id 1147232921001000005\n tapd story list --label html-richtext\n\n说明:\n 不传筛选参数时,会出现分类下拉:全部、状态、迭代、标签。\n 默认选“全部”,最多返回 --limit 条。\n";
readonly storyTasksDescription: "查看需求下的排期任务";
readonly storyTasksHelpAfter: "\n示例:\n tapd story tasks 1147232921001000017\n tapd story tasks ./需求.md\n tapd story tasks 1147232921001000017 --status progressing\n tapd story tasks 1147232921001000017 --all\n";
readonly storySelectIterationMessage: "选择迭代";
readonly storySelectCreatorMessage: "选择创建人";
readonly storyNoIteration: "不关联迭代";
readonly storySelectCategoryMessage: "选择需求分类";
readonly storyCategoryAll: "全部需求";
readonly storyCategoryStatus: "按状态筛选";
readonly storyCategoryIteration: "按迭代筛选";
readonly storyCategoryLabel: "按标签筛选";
readonly storySelectStatusMessage: "选择状态";
readonly storyStatusPlanningOption: "规划中";
readonly storyStatusDevelopingOption: "开发中";
readonly storyStatusResolvedOption: "已实现";
readonly storyStatusRejectedOption: "已拒绝";
readonly storyStatusCustomOption: "自定义输入";
readonly storyInputStatusMessage: "输入状态值";
readonly storyInputLabelMessage: "输入标签";
readonly storyCreateDescription: "从 Markdown 创建 TAPD 需求,并写回 tapd_id";
readonly storyCreateHelpAfter: "\n示例:\n tapd story create ./需求.md\n tapd story create ./需求.md --workspace-id 47232921\n\n行为:\n 缺少 iteration_id 或 creator 时,会交互式拉取 TAPD 数据并下拉选择。\n 创建成功后会写回 tapd_id、workspace_id、created_at。\n";
readonly storyUpdateDescription: "根据 Markdown frontmatter 更新 TAPD 需求";
readonly storyUpdateHelpAfter: "\n示例:\n tapd story update ./需求.md\n\n要求:\n Markdown frontmatter 必须已有 tapd_id。\n";
readonly storyGetDescription: "获取需求内容摘要";
readonly storyGetHelpAfter: "\n示例:\n tapd story get 1147232921001000017\n tapd story get 1147232921001000017 --workspace-id 47232921\n";
readonly storyPullDescription: "拉取指定需求并转换为 Markdown 文件";
readonly storyPullHelpAfter: "\n示例:\n tapd story pull 1147232921001000017\n tapd story pull 1147232921001000017 ./需求.md\n tapd story pull 1147232921001000017 --workspace-id 47232921\n\n说明:\n 会自动下载需求中的图片到 <output-file-dir>/assets/ 目录\n 并将 Markdown 中的图片链接替换为本地相对路径\n";
readonly iterationDescription: "TAPD 迭代管理";
readonly iterationHelpAfter: "\n示例:\n tapd iteration list\n tapd iteration get 1151611517001007745\n tapd iteration tasks 1151611517001007745\n";
readonly iterationListDescription: "查看当前空间的迭代列表";
readonly iterationGetDescription: "查看迭代下的需求和汇总情况";
readonly iterationTasksDescription: "查看迭代下的任务情况";
readonly iterationTasksHelpAfter: "\n示例:\n tapd iteration tasks 1151611517001007745\n tapd iteration tasks 1151611517001007745 --status progressing\n tapd iteration tasks 1151611517001007745 --all\n";
};
export const COPY = {
brandSubtitle: "cli",
rootDescription: "管理 TAPD 需求、迭代空间和评论",
rootHelpAfter: `
常用流程
1. tapd login
2. tapd init
3. tapd story create ./需求.md
4. tapd story update ./需求.md
5. tapd comment add ./需求.md --message "已评审"
`,
loginDescription: "登录 TAPD 并保存本地凭证",
loginHelpAfter: `
示例:
tapd login
tapd login --mode app --client-id tapd-app-xxx --company-id 41988264
tapd login --mode personal --personal-token *** --workspace-id 58491787
说明:
凭证保存到 .tapd/credentials.json,company_id 保存到 .tapd/config.json。
`,
logoutDescription: "退出登录并清除本地认证文件",
loginActionDescription: "登录 TAPD 并保存本地凭证",
loginActionHelpAfter: `
示例:
tapd login
tapd login --mode app --client-id tapd-app-xxx --client-secret *** --company-id 41988264
tapd login --mode personal --personal-token *** --workspace-id 58491787
`,
loginModeMessage: "选择认证方式",
loginModeApp: "开放应用凭证",
loginModePersonal: "个人令牌",
loginPersonalTokenMessage: "个人令牌",
loginPersonalTokenRequired: "请输入个人令牌",
loginWorkspaceIdMessage: "验证用 workspace_id",
loginClientIdMessage: "应用 ID",
loginClientSecretMessage: "应用密钥",
loginClientSecretRequired: "请输入应用密钥",
loginCompanyIdMessage: "企业 ID company_id",
commentDescription: "TAPD 需求评论",
commentHelpAfter: `
示例:
tapd comment add ./需求.md --message "已评审"
tapd comment add 1147232921001000017 --file ./comment.md
tapd comment list ./需求.md
`,
commentAddDescription: "添加需求评论",
commentAddHelpAfter: `
示例:
tapd comment add ./需求.md --message "已完成评审"
tapd comment add 1147232921001000017 --file ./comment.md --author 黄启智
说明:
评论内容会从 Markdown 转成 HTML 后写入 TAPD。
`,
commentListDescription: "查看需求评论",
commentListHelpAfter: `
示例:
tapd comment list ./需求.md
tapd comment list 1147232921001000017 --workspace-id 47232921
`,
initDescription: "初始化当前项目,选择默认 TAPD 空间",
initHelpAfter: `
示例:
tapd init
说明:
应用凭证模式会读取 company_id 并拉取空间列表供下拉选择。
个人令牌模式会验证当前默认 workspace,因为个人令牌通常不能列出企业项目。
`,
initSelectWorkspaceMessage: "选择默认空间",
initSelectCreatorMessage: "选择默认创建人",
initNoDefaultCreator: "不设置默认创建人",
workspaceDescription: "TAPD 空间管理",
workspaceHelpAfter: `
示例:
tapd workspace list
tapd workspace add --workspace-id 58491787
tapd workspace use
tapd workspace use --workspace-id 58491787
`,
workspaceListDescription: "列出空间;个人令牌模式仅显示当前默认空间",
workspaceAddDescription: "验证并缓存一个 workspace_id,适合个人令牌模式管理多个空间",
workspaceUseDescription: "选择默认空间;个人令牌模式可传 --workspace-id 验证切换",
workspaceUseSelectMessage: "选择默认空间",
storyDescription: "TAPD 需求管理",
storyHelpAfter: `
示例:
tapd story create ./需求.md
tapd story update ./需求.md
tapd story get 1147232921001000017
tapd story pull 1147232921001000017
tapd story tasks 1147232921001000017
Markdown frontmatter:
---
title: "需求标题"
iteration_id: "1147232921001000005"
creator: "黄启智"
label: "local-md|cli"
status: "planning"
---
`,
storyListDescription: "查询需求列表,默认加载全部,也可交互选择分类",
storyListHelpAfter: `
示例:
tapd story list
tapd story list --all
tapd story list --status planning
tapd story list --iteration-id 1147232921001000005
tapd story list --label html-richtext
说明:
不传筛选参数时,会出现分类下拉:全部、状态、迭代、标签。
默认选“全部”,最多返回 --limit 条。
`,
storyTasksDescription: "查看需求下的排期任务",
storyTasksHelpAfter: `
示例:
tapd story tasks 1147232921001000017
tapd story tasks ./需求.md
tapd story tasks 1147232921001000017 --status progressing
tapd story tasks 1147232921001000017 --all
`,
storySelectIterationMessage: "选择迭代",
storySelectCreatorMessage: "选择创建人",
storyNoIteration: "不关联迭代",
storySelectCategoryMessage: "选择需求分类",
storyCategoryAll: "全部需求",
storyCategoryStatus: "按状态筛选",
storyCategoryIteration: "按迭代筛选",
storyCategoryLabel: "按标签筛选",
storySelectStatusMessage: "选择状态",
storyStatusPlanningOption: "规划中",
storyStatusDevelopingOption: "开发中",
storyStatusResolvedOption: "已实现",
storyStatusRejectedOption: "已拒绝",
storyStatusCustomOption: "自定义输入",
storyInputStatusMessage: "输入状态值",
storyInputLabelMessage: "输入标签",
storyCreateDescription: "从 Markdown 创建 TAPD 需求,并写回 tapd_id",
storyCreateHelpAfter: `
示例:
tapd story create ./需求.md
tapd story create ./需求.md --workspace-id 47232921
行为:
缺少 iteration_id 或 creator 时,会交互式拉取 TAPD 数据并下拉选择。
创建成功后会写回 tapd_id、workspace_id、created_at。
`,
storyUpdateDescription: "根据 Markdown frontmatter 更新 TAPD 需求",
storyUpdateHelpAfter: `
示例:
tapd story update ./需求.md
要求:
Markdown frontmatter 必须已有 tapd_id。
`,
storyGetDescription: "获取需求内容摘要",
storyGetHelpAfter: `
示例:
tapd story get 1147232921001000017
tapd story get 1147232921001000017 --workspace-id 47232921
`,
storyPullDescription: "拉取指定需求并转换为 Markdown 文件",
storyPullHelpAfter: `
示例:
tapd story pull 1147232921001000017
tapd story pull 1147232921001000017 ./需求.md
tapd story pull 1147232921001000017 --workspace-id 47232921
说明:
会自动下载需求中的图片到 <output-file-dir>/assets/ 目录
并将 Markdown 中的图片链接替换为本地相对路径
`,
iterationDescription: "TAPD 迭代管理",
iterationHelpAfter: `
示例:
tapd iteration list
tapd iteration get 1151611517001007745
tapd iteration tasks 1151611517001007745
`,
iterationListDescription: "查看当前空间的迭代列表",
iterationGetDescription: "查看迭代下的需求和汇总情况",
iterationTasksDescription: "查看迭代下的任务情况",
iterationTasksHelpAfter: `
示例:
tapd iteration tasks 1151611517001007745
tapd iteration tasks 1151611517001007745 --status progressing
tapd iteration tasks 1151611517001007745 --all
`
};
//# sourceMappingURL=command-text.js.map
{"version":3,"file":"command-text.js","sourceRoot":"","sources":["../src/command-text.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,oBAAoB;IACrC,aAAa,EAAE;;;;;;;CAOhB;IACC,gBAAgB,EAAE,iBAAiB;IACnC,cAAc,EAAE;;;;;;;;CAQjB;IACC,iBAAiB,EAAE,eAAe;IAClC,sBAAsB,EAAE,iBAAiB;IACzC,oBAAoB,EAAE;;;;;CAKvB;IACC,gBAAgB,EAAE,QAAQ;IAC1B,YAAY,EAAE,QAAQ;IACtB,iBAAiB,EAAE,MAAM;IACzB,yBAAyB,EAAE,MAAM;IACjC,0BAA0B,EAAE,SAAS;IACrC,uBAAuB,EAAE,kBAAkB;IAC3C,oBAAoB,EAAE,OAAO;IAC7B,wBAAwB,EAAE,MAAM;IAChC,yBAAyB,EAAE,SAAS;IACpC,qBAAqB,EAAE,kBAAkB;IACzC,kBAAkB,EAAE,WAAW;IAC/B,gBAAgB,EAAE;;;;;CAKnB;IACC,qBAAqB,EAAE,QAAQ;IAC/B,mBAAmB,EAAE;;;;;;;CAOtB;IACC,sBAAsB,EAAE,QAAQ;IAChC,oBAAoB,EAAE;;;;CAIvB;IACC,eAAe,EAAE,sBAAsB;IACvC,aAAa,EAAE;;;;;;;CAOhB;IACC,0BAA0B,EAAE,QAAQ;IACpC,wBAAwB,EAAE,SAAS;IACnC,oBAAoB,EAAE,UAAU;IAChC,oBAAoB,EAAE,WAAW;IACjC,kBAAkB,EAAE;;;;;;CAMrB;IACC,wBAAwB,EAAE,sBAAsB;IAChD,uBAAuB,EAAE,qCAAqC;IAC9D,uBAAuB,EAAE,qCAAqC;IAC9D,yBAAyB,EAAE,QAAQ;IACnC,gBAAgB,EAAE,WAAW;IAC7B,cAAc,EAAE;;;;;;;;;;;;;;;;CAgBjB;IACC,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB,EAAE;;;;;;;;;;;CAWrB;IACC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE;;;;;;CAMtB;IACC,2BAA2B,EAAE,MAAM;IACnC,yBAAyB,EAAE,OAAO;IAClC,gBAAgB,EAAE,OAAO;IACzB,0BAA0B,EAAE,QAAQ;IACpC,gBAAgB,EAAE,MAAM;IACxB,mBAAmB,EAAE,OAAO;IAC5B,sBAAsB,EAAE,OAAO;IAC/B,kBAAkB,EAAE,OAAO;IAC3B,wBAAwB,EAAE,MAAM;IAChC,yBAAyB,EAAE,KAAK;IAChC,2BAA2B,EAAE,KAAK;IAClC,yBAAyB,EAAE,KAAK;IAChC,yBAAyB,EAAE,KAAK;IAChC,uBAAuB,EAAE,OAAO;IAChC,uBAAuB,EAAE,OAAO;IAChC,sBAAsB,EAAE,MAAM;IAC9B,sBAAsB,EAAE,mCAAmC;IAC3D,oBAAoB,EAAE;;;;;;;;CAQvB;IACC,sBAAsB,EAAE,oCAAoC;IAC5D,oBAAoB,EAAE;;;;;;CAMvB;IACC,mBAAmB,EAAE,UAAU;IAC/B,iBAAiB,EAAE;;;;CAIpB;IACC,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB,EAAE;;;;;;;;;CASrB;IACC,oBAAoB,EAAE,WAAW;IACjC,kBAAkB,EAAE;;;;;CAKrB;IACC,wBAAwB,EAAE,aAAa;IACvC,uBAAuB,EAAE,eAAe;IACxC,yBAAyB,EAAE,YAAY;IACvC,uBAAuB,EAAE;;;;;CAK1B;CACS,CAAC"}
export declare function registerIteration(program: import("commander").Command): void;
import ora from "ora";
import { TapdClient } from "../api.js";
import { resolveWorkspaceContext } from "../config.js";
import { getToken } from "../session.js";
import { iterationStatusLabel, storyStatusLabel } from "../status.js";
import { formatTaskSummary, loadTasks, renderTaskList } from "../task-view.js";
import { compactList, currentWorkspaceHelpText, info, success, truncate, withSpinner, workspaceBanner } from "../ui.js";
function formatStoryStatusSummary(stories, statusMap) {
const counts = new Map();
for (const story of stories) {
const key = storyStatusLabel(story.status, statusMap);
counts.set(key, (counts.get(key) ?? 0) + 1);
}
return Array.from(counts.entries())
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0], "zh-Hans-CN"))
.map(([status, count]) => `${status}:${count}`)
.join(" ");
}
export function registerIteration(program) {
const iteration = program
.command("iteration")
.description("TAPD 迭代管理")
.addHelpCommand(false)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `
示例:
tapd iteration list
tapd iteration get 1151611517001007745
tapd iteration tasks 1151611517001007745
`);
iteration
.command("list")
.description("查看当前空间的迭代列表")
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.option("-s, --status <status>", "按迭代状态筛选")
.action(async (options) => {
const workspace = await resolveWorkspaceContext(process.cwd(), options.workspaceId);
workspaceBanner(workspace);
const workspaceId = workspace.id;
const client = new TapdClient();
const token = await getToken(client);
const spinner = ora("查询迭代列表").start();
const iterations = await withSpinner(spinner, async () => {
const items = await client.listIterations(token, workspaceId);
return options.status ? items.filter((item) => item.status === options.status) : items;
}, { successText: "查询完成", failText: "查询迭代列表失败" });
success(`共 ${iterations.length} 条`);
compactList(iterations.map((item) => ({
title: `${truncate(item.name, 48)} (${item.id})`,
lines: [`状态:${iterationStatusLabel(item.status)} 时间:${item.startdate || "-"} ~ ${item.enddate || "-"}`]
})));
});
iteration
.command("get")
.argument("<iteration-id>", "TAPD 迭代 ID")
.description("查看迭代下的需求和汇总情况")
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.action(async (iterationId, options) => {
const workspace = await resolveWorkspaceContext(process.cwd(), options.workspaceId);
workspaceBanner(workspace);
const workspaceId = workspace.id;
const client = new TapdClient();
const token = await getToken(client);
const spinner = ora("查询迭代信息").start();
const [iterationData, stories, storyStatusMap] = await withSpinner(spinner, async () => Promise.all([
client.getIteration(token, workspaceId, iterationId),
client.listStories(token, {
workspaceId,
iterationId,
limit: 200
}),
client.getStoryStatusMap(token, workspaceId)
]), { successText: "查询完成", failText: "查询迭代信息失败" });
info(`${iterationData.name} (${iterationData.id})`);
info(`状态:${iterationStatusLabel(iterationData.status)} 时间:${iterationData.startdate || "-"} ~ ${iterationData.enddate || "-"} 创建人:${iterationData.creator || "-"}`);
if (iterationData.description) {
info(truncate(iterationData.description, 300));
}
success(`需求总数 ${stories.length}`);
if (stories.length === 0) {
info("暂无需求");
return;
}
info(formatStoryStatusSummary(stories, storyStatusMap));
compactList(stories.map((story) => ({
title: `${truncate(story.name, 72)} (${story.id})`,
lines: [`状态:${storyStatusLabel(story.status, storyStatusMap)}`]
})));
});
iteration
.command("tasks")
.argument("<iteration-id>", "TAPD 迭代 ID")
.description("查看迭代下的任务情况")
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.option("-s, --status <status>", "按任务状态筛选:open/progressing/done")
.option("-o, --owner <owner>", "按处理人筛选")
.option("--all", "拉取全部任务")
.option("--limit <number>", "返回数量,默认 50", "50")
.addHelpText("after", `
示例:
tapd iteration tasks 1151611517001007745
tapd iteration tasks 1151611517001007745 --status progressing
tapd iteration tasks 1151611517001007745 --all
`)
.action(async (iterationId, options) => {
const workspace = await resolveWorkspaceContext(process.cwd(), options.workspaceId);
workspaceBanner(workspace);
const workspaceId = workspace.id;
const client = new TapdClient();
const token = await getToken(client);
const limit = Number.parseInt(options.limit ?? "50", 10);
if (!Number.isFinite(limit) || limit <= 0)
throw new Error("--limit 必须是正整数");
const spinner = ora("查询迭代任务").start();
const [iterationData, taskResult] = await withSpinner(spinner, async () => Promise.all([
client.getIteration(token, workspaceId, iterationId),
loadTasks(client, token, {
workspaceId,
iterationId,
status: options.status,
owner: options.owner,
limit,
all: options.all
})
]), { successText: "查询完成", failText: "查询迭代任务失败" });
info(`${iterationData.name} (${iterationData.id})`);
info(`状态:${iterationStatusLabel(iterationData.status)} 时间:${iterationData.startdate || "-"} ~ ${iterationData.enddate || "-"}`);
success(`任务总数 ${taskResult.total},当前展示 ${taskResult.tasks.length}`);
if (taskResult.tasks.length === 0) {
info("暂无任务");
return;
}
info(formatTaskSummary(taskResult.tasks));
renderTaskList(taskResult.tasks);
if (!options.all && taskResult.total > taskResult.tasks.length) {
info(`还有 ${taskResult.total - taskResult.tasks.length} 条未展示,可使用 --all 或调大 --limit`);
}
});
}
//# sourceMappingURL=iteration.js.map
{"version":3,"file":"iteration.js","sourceRoot":"","sources":["../../src/commands/iteration.ts"],"names":[],"mappings":"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"}
export declare function taskStatusLabel(status?: string): string;
export declare function iterationStatusLabel(status?: string): string;
export declare function storyStatusLabel(status: string | undefined, statusMap?: Record<string, string>): string;
const TASK_STATUS_LABELS = {
open: "未开始",
progressing: "进行中",
done: "已完成"
};
const ITERATION_STATUS_LABELS = {
open: "进行中",
done: "已完成",
closed: "已关闭"
};
export function taskStatusLabel(status) {
if (!status)
return "-";
return TASK_STATUS_LABELS[status] ?? status;
}
export function iterationStatusLabel(status) {
if (!status)
return "-";
return ITERATION_STATUS_LABELS[status] ?? status;
}
export function storyStatusLabel(status, statusMap) {
if (!status)
return "-";
return statusMap?.[status] ?? status;
}
//# sourceMappingURL=status.js.map
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAA2B;IACjD,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,KAAK;IAClB,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,MAAM,uBAAuB,GAA2B;IACtD,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;CACd,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,OAAO,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAe;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA0B,EAAE,SAAkC;IAC7F,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,OAAO,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;AACvC,CAAC"}
import type { TapdClient } from "./api.js";
import type { Task } from "./types.js";
export declare function parseTaskEffort(value?: string): number;
export declare function formatTaskSchedule(task: Task): string;
export declare function formatTaskEffort(value?: string): string;
export declare function formatTaskSummary(tasks: Task[]): string;
export declare function renderTaskList(tasks: Task[]): void;
export declare function loadTasks(client: TapdClient, token: string, params: {
workspaceId: string;
storyId?: string;
iterationId?: string;
status?: string;
owner?: string;
limit: number;
all?: boolean;
}): Promise<{
total: number;
tasks: Task[];
}>;
import { taskStatusLabel } from "./status.js";
import { compactList, info, truncate } from "./ui.js";
export function parseTaskEffort(value) {
if (!value || value === "-")
return 0;
const parsed = Number.parseFloat(value);
return Number.isFinite(parsed) ? parsed : 0;
}
export function formatTaskSchedule(task) {
if (task.begin && task.due)
return `${task.begin} ~ ${task.due}`;
return task.begin || task.due || "未排期";
}
export function formatTaskEffort(value) {
return value && value !== "-" ? `${value}d` : "-";
}
export function formatTaskSummary(tasks) {
const counts = {
open: 0,
progressing: 0,
done: 0
};
let totalEffort = 0;
let earliestBegin;
let latestDue;
const owners = new Set();
for (const task of tasks) {
if (task.status === "open")
counts.open += 1;
else if (task.status === "progressing")
counts.progressing += 1;
else if (task.status === "done")
counts.done += 1;
totalEffort += parseTaskEffort(task.effort);
if (task.begin && (!earliestBegin || task.begin < earliestBegin))
earliestBegin = task.begin;
if (task.due && (!latestDue || task.due > latestDue))
latestDue = task.due;
for (const owner of (task.owner ?? "").split(";")) {
const name = owner.trim();
if (name)
owners.add(name);
}
}
const schedule = earliestBegin && latestDue
? ` 起止时间:${earliestBegin} ~ ${latestDue}`
: earliestBegin
? ` 起始时间:${earliestBegin}`
: latestDue
? ` 截止时间:${latestDue}`
: "";
const ownerSummary = owners.size > 0 ? ` 研发人员:${Array.from(owners).join("、")}` : "";
return `未开始:${counts.open} 进行中:${counts.progressing} 已完成:${counts.done} 总预估工时:${totalEffort}${schedule}${ownerSummary}`;
}
export function renderTaskList(tasks) {
const groups = [
{ status: "progressing", title: "进行中" },
{ status: "open", title: "未开始" },
{ status: "done", title: "已完成" }
];
let printed = false;
for (const group of groups) {
const items = tasks.filter((task) => task.status === group.status);
if (items.length === 0)
continue;
if (printed)
console.log("");
info(`${group.title}:`);
compactList(items.map((task) => {
const owner = task.owner || "未分配";
const effort = formatTaskEffort(task.effort);
const progress = task.progress ? `${task.progress}%` : "-";
return {
title: `${truncate(task.name, 72)} (${task.id})`,
lines: [`${owner} ${effort} ${progress} ${formatTaskSchedule(task)}`]
};
}));
printed = true;
}
const others = tasks.filter((task) => !groups.some((group) => group.status === task.status));
if (others.length > 0) {
if (printed)
console.log("");
info("其他:");
compactList(others.map((task) => {
const owner = task.owner || "未分配";
const effort = formatTaskEffort(task.effort);
const progress = task.progress ? `${task.progress}%` : "-";
return {
title: `${truncate(task.name, 72)} (${task.id})`,
lines: [`${taskStatusLabel(task.status)} ${owner} ${effort} ${progress} ${formatTaskSchedule(task)}`]
};
}));
}
}
export async function loadTasks(client, token, params) {
const total = await client.countTasks(token, {
workspaceId: params.workspaceId,
storyId: params.storyId,
iterationId: params.iterationId,
status: params.status,
owner: params.owner
});
const target = params.all ? total : Math.min(total, params.limit);
if (target === 0)
return { total, tasks: [] };
const tasks = [];
let page = 1;
while (tasks.length < target) {
const batchSize = Math.min(200, target - tasks.length);
const pageItems = await client.listTasks(token, {
workspaceId: params.workspaceId,
storyId: params.storyId,
iterationId: params.iterationId,
status: params.status,
owner: params.owner,
page,
limit: batchSize
});
tasks.push(...pageItems);
if (pageItems.length < batchSize)
break;
page += 1;
}
return { total, tasks };
}
//# sourceMappingURL=task-view.js.map
{"version":3,"file":"task-view.js","sourceRoot":"","sources":["../src/task-view.ts"],"names":[],"mappings":"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"}
+19
-1

@@ -1,2 +0,2 @@

import type { Attachment, Comment, Iteration, Story, TapdAppCredentials, TapdToken, Workspace, WorkspaceUser } from "./types.js";
import type { Attachment, Comment, Iteration, Story, TapdAppCredentials, TapdToken, Task, Workspace, WorkspaceUser } from "./types.js";
type TapdResponse<T> = {

@@ -21,2 +21,6 @@ status: number;

};
export type GetImageParams = {
workspaceId: string;
imagePath: string;
};
export type ListStoriesParams = {

@@ -29,2 +33,11 @@ workspaceId: string;

};
export type ListTasksParams = {
workspaceId: string;
storyId?: string;
iterationId?: string;
limit?: number;
page?: number;
status?: string;
owner?: string;
};
export declare function isStoryNotFoundError(error: unknown, storyId?: string): boolean;

@@ -45,5 +58,10 @@ export declare class TapdClient {

uploadImageBase64(token: string, params: UploadImageBase64Params): Promise<Attachment>;
getImage(token: string, params: GetImageParams): Promise<Attachment>;
addComment(token: string, payload: Record<string, string | undefined>): Promise<Comment>;
listComments(token: string, workspaceId: string, storyId: string): Promise<Comment[]>;
countTasks(token: string, params: Omit<ListTasksParams, "limit" | "page">): Promise<number>;
listTasks(token: string, params: ListTasksParams): Promise<Task[]>;
getIteration(token: string, workspaceId: string, iterationId: string): Promise<Iteration>;
getStoryStatusMap(token: string, workspaceId: string): Promise<Record<string, string>>;
}
export {};

@@ -166,2 +166,14 @@ export function isStoryNotFoundError(error, storyId) {

}
async getImage(token, params) {
const response = await this.request("/files/get_image", {
token,
query: {
workspace_id: params.workspaceId,
image_path: params.imagePath
}
});
if (!response.data?.Attachment)
throw new Error("获取图片成功但响应缺少 Attachment");
return response.data.Attachment;
}
async addComment(token, payload) {

@@ -191,3 +203,56 @@ const response = await this.request("/comments", {

}
async countTasks(token, params) {
const response = await this.request("/tasks/count", {
token,
query: {
workspace_id: params.workspaceId,
story_id: params.storyId,
iteration_id: params.iterationId,
status: params.status,
owner: params.owner
}
});
const count = response.data?.count;
const parsed = typeof count === "string" ? Number.parseInt(count, 10) : count;
return Number.isFinite(parsed) ? Number(parsed) : 0;
}
async listTasks(token, params) {
const response = await this.request("/tasks", {
token,
query: {
workspace_id: params.workspaceId,
story_id: params.storyId,
iteration_id: params.iterationId,
limit: params.limit ?? 100,
page: params.page ?? 1,
status: params.status,
owner: params.owner,
fields: "id,name,story_id,status,owner,begin,due,progress,effort,effort_completed,remain,iteration_id,created,modified"
}
});
return (response.data ?? []).map((item) => item.Task);
}
async getIteration(token, workspaceId, iterationId) {
const response = await this.request("/iterations", {
token,
query: {
workspace_id: workspaceId,
id: iterationId,
limit: 1,
fields: "id,name,status,startdate,enddate,creator,description"
}
});
const iteration = response.data?.[0]?.Iteration;
if (!iteration)
throw new Error(`未找到迭代:${iterationId}`);
return iteration;
}
async getStoryStatusMap(token, workspaceId) {
const response = await this.request("/stories/get_fields_info", {
token,
query: { workspace_id: workspaceId }
});
return response.data?.status?.options ?? {};
}
}
//# sourceMappingURL=api.js.map
+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}

@@ -1,1 +0,2 @@

export declare function registerAuth(program: import("commander").Command): void;
export declare function registerLogin(program: import("commander").Command): void;
export declare function registerLogout(program: import("commander").Command): void;
import { input, password, select } from "@inquirer/prompts";
import ora from "ora";
import { TapdClient } from "../api.js";
import { loadConfig, saveConfig, saveCredentials } from "../config.js";
import { maskSecret, success, exitHint } from "../ui.js";
export function registerAuth(program) {
const auth = program
.command("auth")
.description("授权与凭证管理")
.addHelpText("after", `
示例:
tapd auth bind
tapd auth bind --mode app --client-id tapd-app-xxx --company-id 41988264
tapd auth bind --mode personal --personal-token *** --workspace-id 58491787
说明:
凭证保存到 .tapd/credentials.json,company_id 保存到 .tapd/config.json。
`);
auth
.command("bind")
.description("绑定 TAPD 应用凭证或个人令牌")
import { COPY } from "../command-text.js";
import { deleteCredentials, loadConfig, saveConfig, saveCredentials } from "../config.js";
import { currentWorkspaceHelpText, maskSecret, success } from "../ui.js";
export function registerLogin(program) {
program
.command("login")
.description(COPY.loginDescription)
.addHelpCommand(false)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `\n${COPY.loginHelpAfter}`)
.option("--mode <mode>", "认证模式:app 或 personal")

@@ -28,17 +20,8 @@ .option("--client-id <id>", "TAPD 应用 ID")

.option("--workspace-id <id>", "个人令牌验证用 workspace_id")
.addHelpText("after", `
示例:
tapd auth bind
tapd auth bind --mode app --client-id tapd-app-xxx --client-secret *** --company-id 41988264
tapd auth bind --mode personal --personal-token *** --workspace-id 58491787
`)
.action(async (options) => {
if (!options.mode) {
exitHint();
}
const mode = (options.mode ?? await select({
message: "选择认证方式",
message: COPY.loginModeMessage,
choices: [
{ name: "开放应用凭证 client_id/client_secret", value: "app" },
{ name: "个人令牌 Bearer token", value: "personal" }
{ name: COPY.loginModeApp, value: "app" },
{ name: COPY.loginModePersonal, value: "personal" }
]

@@ -51,8 +34,8 @@ })).trim();

const personalToken = (options.personalToken ?? await password({
message: "个人令牌",
message: COPY.loginPersonalTokenMessage,
mask: "*",
validate: (value) => value.trim().length > 0 || "请输入个人令牌"
validate: (value) => value.trim().length > 0 || COPY.loginPersonalTokenRequired
})).trim();
const workspaceId = (options.workspaceId ?? await input({
message: "验证用 workspace_id",
message: COPY.loginWorkspaceIdMessage,
required: true

@@ -85,9 +68,9 @@ })).trim();

}
const clientId = (options.clientId ?? await input({ message: "应用 ID", required: true })).trim();
const clientId = (options.clientId ?? await input({ message: COPY.loginClientIdMessage, required: true })).trim();
const clientSecret = (options.clientSecret ?? await password({
message: "应用密钥",
message: COPY.loginClientSecretMessage,
mask: "*",
validate: (value) => value.trim().length > 0 || "请输入应用密钥"
validate: (value) => value.trim().length > 0 || COPY.loginClientSecretRequired
})).trim();
const companyId = (options.companyId ?? await input({ message: "企业 ID company_id", required: true })).trim();
const companyId = (options.companyId ?? await input({ message: COPY.loginCompanyIdMessage, required: true })).trim();
const spinner = ora("验证 TAPD 凭证").start();

@@ -111,2 +94,12 @@ let token;

}
export function registerLogout(program) {
program
.command("logout")
.description(COPY.logoutDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.action(async () => {
await deleteCredentials();
success("已清除本地认证文件:.tapd/credentials.json");
});
}
function upsertWorkspace(current, workspace) {

@@ -113,0 +106,0 @@ const next = (current ?? []).filter((item) => item.id !== workspace.id);

@@ -1,1 +0,1 @@

{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}

@@ -9,3 +9,3 @@ import { readFile } from "node:fs/promises";

import { getToken } from "../session.js";
import { success, table, truncate, workspaceBanner } from "../ui.js";
import { currentWorkspaceHelpText, success, table, truncate, withSpinner, workspaceBanner } from "../ui.js";
async function resolveStoryId(value) {

@@ -23,2 +23,4 @@ if (!existsSync(value))

.description("TAPD 需求评论")
.addHelpCommand(false)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `

@@ -34,2 +36,3 @@ 示例:

.description("添加需求评论")
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addOption(new Option("-m, --message <text>", "评论 Markdown 文本").conflicts("file"))

@@ -59,3 +62,3 @@ .addOption(new Option("-f, --file <file>", "评论 Markdown 文件").conflicts("message"))

const spinner = ora("添加评论").start();
const created = await client.addComment(token, {
const created = await withSpinner(spinner, () => client.addComment(token, {
workspace_id: workspaceId,

@@ -66,4 +69,6 @@ entry_type: "stories",

description: html
}), {
successText: "评论添加成功",
failText: "评论添加失败"
});
spinner.succeed("评论添加成功");
success(`${created.id} ${created.created ?? ""}`.trim());

@@ -75,2 +80,3 @@ });

.description("查看需求评论")
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖 workspace_id")

@@ -77,0 +83,0 @@ .addHelpText("after", `

@@ -1,1 +0,1 @@

{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/commands/comment.ts"],"names":[],"mappings":"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"}
import { select } from "@inquirer/prompts";
import ora from "ora";
import { TapdClient } from "../api.js";
import { COPY } from "../command-text.js";
import { loadConfig, loadCredentials, saveConfig } from "../config.js";
import { getToken } from "../session.js";
import { success, exitHint } from "../ui.js";
import { currentWorkspaceHelpText, success, withSpinner } from "../ui.js";
export function registerInit(program) {
program
.command("init")
.description("初始化当前项目,选择默认 TAPD 空间")
.addHelpText("after", `
示例:
tapd init
说明:
应用凭证模式会读取 company_id 并拉取空间列表供下拉选择。
个人令牌模式会验证当前默认 workspace,因为个人令牌通常不能列出企业项目。
`)
.description(COPY.initDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `\n${COPY.initHelpAfter}`)
.action(async () => {
const config = await loadConfig();
const credentials = await loadCredentials().catch(() => {
throw new Error("缺少 TAPD 凭证,请先运行 tapd auth bind");
throw new Error("缺少 TAPD 凭证,请先运行 tapd login");
});

@@ -28,7 +23,9 @@ const client = new TapdClient();

if (!config.defaultWorkspaceId) {
throw new Error("个人令牌模式缺少默认 workspace_id,请重新运行 tapd auth bind --mode personal --workspace-id <id>");
throw new Error("个人令牌模式缺少默认 workspace_id,请重新运行 tapd login --mode personal --workspace-id <id>");
}
const defaultWorkspaceId = config.defaultWorkspaceId;
const spinner = ora("验证默认 TAPD 空间").start();
const workspace = await client.verifyPersonalToken(token, config.defaultWorkspaceId);
spinner.succeed(`默认空间可用:${workspace.name} (${workspace.id})`);
const workspace = await withSpinner(spinner, () => client.verifyPersonalToken(token, defaultWorkspaceId), {
successText: `默认空间可用:${config.defaultWorkspaceName ?? config.defaultWorkspaceId}`
});
// 选择默认创建人

@@ -38,7 +35,6 @@ const users = await client.listUsers(token, workspace.id);

if (users.length > 0) {
exitHint();
defaultCreator = await select({
message: "选择默认创建人",
message: COPY.initSelectCreatorMessage,
choices: [
{ name: "不设置默认创建人", value: "" },
{ name: COPY.initNoDefaultCreator, value: "" },
...users.map((item) => ({

@@ -68,11 +64,12 @@ name: `${item.user}${item.name ? ` - ${item.name}` : ""}`,

if (!config.companyId)
throw new Error("缺少 company_id,请先运行 tapd auth bind");
throw new Error("缺少 company_id,请先运行 tapd login");
const spinner = ora("拉取 TAPD 空间列表").start();
const workspaces = await client.listWorkspaces(token, config.companyId);
spinner.stop();
const companyId = config.companyId;
const workspaces = await withSpinner(spinner, () => client.listWorkspaces(token, companyId), {
stopOnSuccess: true
});
if (workspaces.length === 0)
throw new Error("当前 company_id 下没有可用空间");
exitHint();
const workspaceId = await select({
message: "选择默认空间",
message: COPY.initSelectWorkspaceMessage,
choices: workspaces.map((workspace) => ({

@@ -89,5 +86,5 @@ name: `${workspace.name} (${workspace.id})`,

defaultCreator = await select({
message: "选择默认创建人",
message: COPY.initSelectCreatorMessage,
choices: [
{ name: "不设置默认创建人", value: "" },
{ name: COPY.initNoDefaultCreator, value: "" },
...users.map((item) => ({

@@ -94,0 +91,0 @@ name: `${item.user}${item.name ? ` - ${item.name}` : ""}`,

@@ -1,1 +0,1 @@

{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE1E,MAAM,UAAU,YAAY,CAAC,OAAoC;IAC/D,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC;SACjC,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,wBAAwB,EAAE,IAAI,CAAC;SAC9D,WAAW,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;SAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;YACrD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;YAClG,CAAC;YACD,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACrD,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE;gBACxG,WAAW,EAAE,UAAU,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,kBAAkB,EAAE;aAClF,CAAC,CAAC;YAEH,UAAU;YACV,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAC1D,IAAI,cAAkC,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,cAAc,GAAG,MAAM,MAAM,CAAC;oBAC5B,OAAO,EAAE,IAAI,CAAC,wBAAwB;oBACtC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE;wBAC9C,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;4BACtB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;4BACzD,KAAK,EAAE,IAAI,CAAC,IAAI;yBACjB,CAAC,CAAC;qBACJ;iBACF,CAAC,CAAC;gBACH,IAAI,cAAc,KAAK,EAAE;oBAAE,cAAc,GAAG,SAAS,CAAC;YACxD,CAAC;YAED,MAAM,UAAU,CAAC;gBACf,GAAG,MAAM;gBACT,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;gBAClD,kBAAkB,EAAE,SAAS,CAAC,EAAE;gBAChC,oBAAoB,EAAE,SAAS,CAAC,IAAI;gBACpC,cAAc;gBACd,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC;aAC1D,CAAC,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAExE,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;YAC3F,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QAEH,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC;YAC/B,OAAO,EAAE,IAAI,CAAC,0BAA0B;YACxC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,GAAG;gBAC3C,KAAK,EAAE,SAAS,CAAC,EAAE;aACpB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,WAAW,CAAE,CAAC;QAEtE,UAAU;QACV,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACzD,IAAI,cAAkC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,cAAc,GAAG,MAAM,MAAM,CAAC;gBAC5B,OAAO,EAAE,IAAI,CAAC,wBAAwB;gBACtC,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE;oBAC9C,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;wBACtB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;wBACzD,KAAK,EAAE,IAAI,CAAC,IAAI;qBACjB,CAAC,CAAC;iBACJ;aACF,CAAC,CAAC;YACH,IAAI,cAAc,KAAK,EAAE;gBAAE,cAAc,GAAG,SAAS,CAAC;QACxD,CAAC;QAED,MAAM,UAAU,CAAC;YACf,GAAG,MAAM;YACT,kBAAkB,EAAE,SAAS,CAAC,EAAE;YAChC,oBAAoB,EAAE,SAAS,CAAC,IAAI;YACpC,cAAc;SACf,CAAC,CAAC;QACH,OAAO,CAAC,QAAQ,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,eAAe,CACtB,OAA4E,EAC5E,SAA2D;IAE3D,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC"}
import { input, select } from "@inquirer/prompts";
import { existsSync } from "node:fs";
import { mkdir, writeFile } from "node:fs/promises";
import { dirname, join } from "node:path";
import ora from "ora";
import { isStoryNotFoundError, TapdClient } from "../api.js";
import { COPY } from "../command-text.js";
import { resolveWorkspaceContext, loadConfig } from "../config.js";
import { convertLocalImageReferences, hasLocalImageReferences, imageDataUri as localImageDataUri, stripLocalDocumentLinks } from "../local-assets.js";
import { convertMermaidBlocks, hasMermaidBlocks, imageDataUri as mermaidImageDataUri } from "../mermaid.js";
import { markdownToHtml, readMarkdown, titleFromDocument, writeFrontmatter } from "../markdown.js";
import { htmlToMarkdown, markdownToHtml, readMarkdown, titleFromDocument, writeMarkdown, writeFrontmatter } from "../markdown.js";
import { getToken } from "../session.js";
import { exitHint, info, success, table, truncate, workspaceBanner } from "../ui.js";
import { iterationStatusLabel, storyStatusLabel } from "../status.js";
import { formatTaskSummary, loadTasks, renderTaskList } from "../task-view.js";
import { compactList, currentWorkspaceHelpText, info, success, truncate, withSpinner, workspaceBanner } from "../ui.js";
function selectableIterations(iterations) {
return iterations.filter((item) => item.status !== "closed" && item.status !== "done");
}
async function chooseIteration(client, token, workspaceId) {
const iterations = await client.listIterations(token, workspaceId);
const iterations = selectableIterations(await client.listIterations(token, workspaceId));
if (iterations.length === 0)
return undefined;
return select({
message: "选择迭代",
message: COPY.storySelectIterationMessage,
choices: [
{ name: "不关联迭代", value: "" },
{ name: COPY.storyNoIteration, value: "" },
...iterations.map((item) => ({
name: `${item.name} (${item.id}) ${item.status ?? ""}`.trim(),
name: `${item.name} (${item.id}) ${iterationStatusLabel(item.status)}`.trim(),
value: item.id

@@ -30,3 +39,3 @@ }))

return select({
message: "选择创建人",
message: COPY.storySelectCreatorMessage,
choices: users.map((item) => ({

@@ -38,2 +47,17 @@ name: `${item.user}${item.name ? ` - ${item.name}` : ""}`,

}
async function resolveStoryTarget(value) {
if (!existsSync(value))
return { storyId: value };
const doc = await readMarkdown(value);
if (!doc.frontmatter.tapd_id)
throw new Error("Markdown frontmatter 缺少 tapd_id");
return { storyId: doc.frontmatter.tapd_id, workspaceId: doc.frontmatter.workspace_id };
}
function renderStoryList(stories) {
compactList(stories.map((item) => {
return {
title: `${truncate(item.name, 72)} (${item.id})`
};
}));
}
function extractTapdImageSources(html = "") {

@@ -199,21 +223,10 @@ return [...html.matchAll(/<img[^>]+src="([^"]+)"/g)]

.command("story")
.description("TAPD 需求管理")
.addHelpText("after", `
示例:
tapd story create ./需求.md
tapd story update ./需求.md
tapd story get 1147232921001000017
Markdown frontmatter:
---
title: "需求标题"
iteration_id: "1147232921001000005"
creator: "黄启智"
label: "local-md|cli"
status: "planning"
---
`);
.description(COPY.storyDescription)
.addHelpCommand(false)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `\n${COPY.storyHelpAfter}`);
story
.command("list")
.description("查询需求列表,默认加载全部,也可交互选择分类")
.description(COPY.storyListDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")

@@ -225,14 +238,3 @@ .option("-s, --status <status>", "按状态筛选,例如 planning")

.option("--limit <number>", "返回数量,默认 100", "100")
.addHelpText("after", `
示例:
tapd story list
tapd story list --all
tapd story list --status planning
tapd story list --iteration-id 1147232921001000005
tapd story list --label html-richtext
说明:
不传筛选参数时,会出现分类下拉:全部、状态、迭代、标签。
默认选“全部”,最多返回 --limit 条。
`)
.addHelpText("after", `\n${COPY.storyListHelpAfter}`)
.action(async (options) => {

@@ -250,9 +252,9 @@ const workspace = await resolveWorkspaceContext(process.cwd(), options.workspaceId);

const category = await select({
message: "选择需求分类",
message: COPY.storySelectCategoryMessage,
default: "all",
choices: [
{ name: "全部需求", value: "all" },
{ name: "按状态筛选", value: "status" },
{ name: "按迭代筛选", value: "iteration" },
{ name: "按标签筛选", value: "label" }
{ name: COPY.storyCategoryAll, value: "all" },
{ name: COPY.storyCategoryStatus, value: "status" },
{ name: COPY.storyCategoryIteration, value: "iteration" },
{ name: COPY.storyCategoryLabel, value: "label" }
]

@@ -262,20 +264,22 @@ });

status = await select({
message: "选择状态",
message: COPY.storySelectStatusMessage,
choices: [
{ name: "规划中 planning", value: "planning" },
{ name: "开发中 developing", value: "developing" },
{ name: "已实现 resolved", value: "resolved" },
{ name: "已拒绝 rejected", value: "rejected" },
{ name: "自定义输入", value: "__custom__" }
{ name: `${COPY.storyStatusPlanningOption} planning`, value: "planning" },
{ name: `${COPY.storyStatusDevelopingOption} developing`, value: "developing" },
{ name: `${COPY.storyStatusResolvedOption} resolved`, value: "resolved" },
{ name: `${COPY.storyStatusRejectedOption} rejected`, value: "rejected" },
{ name: COPY.storyStatusCustomOption, value: "__custom__" }
]
});
if (status === "__custom__")
status = await input({ message: "输入状态值", required: true });
status = await input({ message: COPY.storyInputStatusMessage, required: true });
}
else if (category === "iteration") {
const iterations = await client.listIterations(token, workspaceId);
const iterations = selectableIterations(await client.listIterations(token, workspaceId));
if (iterations.length === 0)
throw new Error("当前空间没有可选的进行中迭代");
iterationId = await select({
message: "选择迭代",
message: COPY.storySelectIterationMessage,
choices: iterations.map((item) => ({
name: `${item.name} (${item.id}) ${item.status ?? ""}`.trim(),
name: `${item.name} (${item.id}) ${iterationStatusLabel(item.status)}`.trim(),
value: item.id

@@ -286,3 +290,3 @@ }))

else if (category === "label") {
label = await input({ message: "输入标签", required: true });
label = await input({ message: COPY.storyInputLabelMessage, required: true });
}

@@ -294,3 +298,3 @@ }

const spinner = ora("查询 TAPD 需求").start();
const stories = await client.listStories(token, {
const stories = await withSpinner(spinner, () => client.listStories(token, {
workspaceId,

@@ -301,27 +305,61 @@ limit,

label
}), {
successText: "查询完成",
failText: "查询 TAPD 需求失败"
});
spinner.succeed(`查询完成,共 ${stories.length} 条`);
table(stories.map((item) => ({
id: item.id,
title: truncate(item.name, 36),
status: item.status,
iteration: item.iteration_id && item.iteration_id !== "0" ? item.iteration_id : "",
label: truncate(item.label, 24),
modified: item.modified
})));
success(`共 ${stories.length} 条`);
renderStoryList(stories);
});
story
.command("tasks")
.argument("<markdown-file-or-story-id>", "Markdown 文件或 TAPD 需求 ID")
.description(COPY.storyTasksDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.option("-s, --status <status>", "按任务状态筛选:open/progressing/done")
.option("-o, --owner <owner>", "按处理人筛选")
.option("--all", "拉取全部任务")
.option("--limit <number>", "返回数量,默认 50", "50")
.addHelpText("after", `\n${COPY.storyTasksHelpAfter}`)
.action(async (value, options) => {
const resolved = await resolveStoryTarget(value);
const workspace = await resolveWorkspaceContext(process.cwd(), resolved.workspaceId ?? options.workspaceId);
workspaceBanner(workspace);
const workspaceId = workspace.id;
const client = new TapdClient();
const token = await getToken(client);
const limit = Number.parseInt(options.limit ?? "50", 10);
if (!Number.isFinite(limit) || limit <= 0)
throw new Error("--limit 必须是正整数");
const spinner = ora("查询需求任务").start();
const [storyData, taskResult] = await withSpinner(spinner, async () => Promise.all([
client.getStory(token, workspaceId, resolved.storyId),
loadTasks(client, token, {
workspaceId,
storyId: resolved.storyId,
status: options.status,
owner: options.owner,
limit,
all: options.all
})
]), { successText: "查询完成", failText: "查询需求任务失败" });
info(`${storyData.name} (${storyData.id})`);
success(`任务总数 ${taskResult.total},当前展示 ${taskResult.tasks.length}`);
if (taskResult.tasks.length === 0) {
info("暂无任务");
return;
}
info(formatTaskSummary(taskResult.tasks));
renderTaskList(taskResult.tasks);
if (!options.all && taskResult.total > taskResult.tasks.length) {
info(`还有 ${taskResult.total - taskResult.tasks.length} 条未展示,可使用 --all 或调大 --limit`);
}
});
story
.command("create")
.argument("<markdown-file>", "本地 Markdown 文件")
.description("从 Markdown 创建 TAPD 需求,并写回 tapd_id")
.description(COPY.storyCreateDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.addHelpText("after", `
示例:
tapd story create ./需求.md
tapd story create ./需求.md --workspace-id 47232921
行为:
缺少 iteration_id 或 creator 时,会交互式拉取 TAPD 数据并下拉选择。
创建成功后会写回 tapd_id、workspace_id、created_at。
`)
.addHelpText("after", `\n${COPY.storyCreateHelpAfter}`)
.action(async (file, options) => {

@@ -337,10 +375,6 @@ const doc = await readMarkdown(file);

const defaultCreator = config.defaultCreator;
if (!doc.frontmatter.iteration_id || (!doc.frontmatter.creator && !defaultCreator)) {
exitHint();
}
const iterationId = doc.frontmatter.iteration_id ?? await chooseIteration(client, token, workspaceId);
const creator = doc.frontmatter.creator ?? defaultCreator ?? await chooseCreator(client, token, workspaceId);
const spinner = ora("创建 TAPD 需求").start();
const created = await createStoryFromMarkdown(file, doc, client, token, workspaceId, iterationId, creator, spinner);
spinner.succeed("需求创建成功");
const created = await withSpinner(spinner, () => createStoryFromMarkdown(file, doc, client, token, workspaceId, iterationId, creator, spinner), { successText: "需求创建成功", failText: "创建 TAPD 需求失败" });
success(`${created.name} (${created.id})`);

@@ -351,11 +385,6 @@ });

.argument("<markdown-file>", "本地 Markdown 文件")
.description("根据 Markdown frontmatter 更新 TAPD 需求")
.description(COPY.storyUpdateDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖 workspace_id")
.addHelpText("after", `
示例:
tapd story update ./需求.md
要求:
Markdown frontmatter 必须已有 tapd_id。
`)
.addHelpText("after", `\n${COPY.storyUpdateHelpAfter}`)
.action(async (file, options) => {

@@ -365,2 +394,3 @@ const doc = await readMarkdown(file);

throw new Error("Markdown frontmatter 缺少 tapd_id,无法更新");
const tapdId = doc.frontmatter.tapd_id;
const workspace = await resolveWorkspaceContext(process.cwd(), doc.frontmatter.workspace_id ?? options.workspaceId);

@@ -372,24 +402,25 @@ workspaceBanner(workspace);

const spinner = ora("更新 TAPD 需求").start();
if (hasUploadableLocalResources(doc.content))
spinner.text = "上传本地图片资源并更新需求";
let updated;
try {
await client.getStory(token, workspaceId, doc.frontmatter.tapd_id);
updated = await updateStoryFromMarkdown(client, token, {
id: doc.frontmatter.tapd_id,
workspace_id: workspaceId,
name: titleFromDocument(doc),
iteration_id: doc.frontmatter.iteration_id,
creator: doc.frontmatter.creator,
owner: doc.frontmatter.owner,
label: doc.frontmatter.label,
status: doc.frontmatter.status
}, doc, workspaceId, doc.frontmatter.tapd_id, doc.frontmatter.creator);
}
catch (error) {
if (!isStoryNotFoundError(error, doc.frontmatter.tapd_id))
throw error;
spinner.text = "TAPD 需求不存在,重新创建需求";
updated = await createStoryFromMarkdown(file, doc, client, token, workspaceId, doc.frontmatter.iteration_id, doc.frontmatter.creator, spinner);
}
const updated = await withSpinner(spinner, async () => {
if (hasUploadableLocalResources(doc.content))
spinner.text = "上传本地图片资源并更新需求";
try {
await client.getStory(token, workspaceId, tapdId);
return await updateStoryFromMarkdown(client, token, {
id: tapdId,
workspace_id: workspaceId,
name: titleFromDocument(doc),
iteration_id: doc.frontmatter.iteration_id,
creator: doc.frontmatter.creator,
owner: doc.frontmatter.owner,
label: doc.frontmatter.label,
status: doc.frontmatter.status
}, doc, workspaceId, tapdId, doc.frontmatter.creator);
}
catch (error) {
if (!isStoryNotFoundError(error, tapdId))
throw error;
spinner.text = "TAPD 需求不存在,重新创建需求";
return await createStoryFromMarkdown(file, doc, client, token, workspaceId, doc.frontmatter.iteration_id, doc.frontmatter.creator, spinner);
}
}, { successText: "需求更新成功", failText: "更新 TAPD 需求失败" });
await writeFrontmatter(file, {

@@ -400,3 +431,2 @@ workspace_id: workspaceId,

});
spinner.succeed("需求更新成功");
success(`${updated.name} (${updated.id})`);

@@ -407,9 +437,6 @@ });

.argument("<story-id>", "TAPD 需求 ID")
.description("获取需求内容摘要")
.description(COPY.storyGetDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.addHelpText("after", `
示例:
tapd story get 1147232921001000017
tapd story get 1147232921001000017 --workspace-id 47232921
`)
.addHelpText("after", `\n${COPY.storyGetHelpAfter}`)
.action(async (storyId, options) => {

@@ -421,14 +448,94 @@ const workspace = await resolveWorkspaceContext(process.cwd(), options.workspaceId);

const token = await getToken(client);
const storyData = await client.getStory(token, workspaceId, storyId);
table([{
id: storyData.id,
title: storyData.name,
status: storyData.status,
iteration: storyData.iteration_id,
label: storyData.label,
modified: storyData.modified
}]);
const [storyData, storyStatusMap] = await Promise.all([
client.getStory(token, workspaceId, storyId),
client.getStoryStatusMap(token, workspaceId)
]);
info(`${storyData.name} (${storyData.id})`);
info(`状态:${storyStatusLabel(storyData.status, storyStatusMap)} 迭代:${storyData.iteration_id || "-"} 标签:${storyData.label || "-"} 更新时间:${storyData.modified || "-"}`);
info(truncate(storyData.description, 300));
});
story
.command("pull")
.argument("<story-id>", "TAPD 需求 ID")
.argument("[output-file]", "输出 Markdown 文件路径,默认为 <story-id>.md")
.description(COPY.storyPullDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "覆盖默认 workspace_id")
.addHelpText("after", `\n${COPY.storyPullHelpAfter}`)
.action(async (storyId, outputFile, options) => {
const workspace = await resolveWorkspaceContext(process.cwd(), options.workspaceId);
workspaceBanner(workspace);
const workspaceId = workspace.id;
const client = new TapdClient();
const token = await getToken(client);
const spinner = ora("拉取 TAPD 需求").start();
const storyData = await withSpinner(spinner, () => client.getStory(token, workspaceId, storyId), {
successText: "需求拉取成功",
failText: "拉取 TAPD 需求失败"
});
const filePath = outputFile || `${storyId}.md`;
const fileDir = dirname(filePath);
const assetsDir = join(fileDir, "assets");
// 提取所有 TAPD 图片链接
const imageRegex = /!\[([^\]]*)\]\((\/tfl\/captures\/[^)]+)\)/g;
const images = [];
let match;
const content = storyData.description ? htmlToMarkdown(storyData.description) : "";
while ((match = imageRegex.exec(content)) !== null) {
images.push({
alt: match[1],
url: match[2],
match: match[0]
});
}
let finalContent = content;
if (images.length > 0) {
spinner.start(`下载 ${images.length} 张图片`);
await withSpinner(spinner, async () => {
await mkdir(assetsDir, { recursive: true });
for (let i = 0; i < images.length; i++) {
const image = images[i];
const ext = image.url.match(/\.(\w+)$/)?.[1] || "png";
const filename = `image-${i + 1}.${ext}`;
const localPath = join(assetsDir, filename);
const relativePath = `./assets/${filename}`;
try {
const attachment = await client.getImage(token, {
workspaceId,
imagePath: image.url
});
if (!attachment.download_url) {
throw new Error("download_url 缺失");
}
const response = await fetch(attachment.download_url);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const buffer = await response.arrayBuffer();
await writeFile(localPath, Buffer.from(buffer));
// 替换 Markdown 中的链接
finalContent = finalContent.replace(image.match, `![${image.alt}](${relativePath})`);
}
catch (error) {
spinner.warn(`图片下载失败: ${image.url} - ${error instanceof Error ? error.message : String(error)}`);
}
}
}, { successText: `已下载 ${images.length} 张图片到 ${assetsDir}`, failText: "下载需求图片失败" });
}
const frontmatter = {
tapd_id: storyData.id,
title: storyData.name,
workspace_id: workspaceId,
iteration_id: storyData.iteration_id && storyData.iteration_id !== "0" ? storyData.iteration_id : undefined,
creator: storyData.creator,
owner: storyData.owner,
label: storyData.label,
status: storyData.status,
created_at: storyData.created,
updated_at: storyData.modified
};
await writeMarkdown(filePath, frontmatter, finalContent);
success(`已保存到 ${filePath}`);
});
}
//# sourceMappingURL=story.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"story.js","sourceRoot":"","sources":["../../src/commands/story.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"story.js","sourceRoot":"","sources":["../../src/commands/story.ts"],"names":[],"mappings":"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"}
import { select } from "@inquirer/prompts";
import ora from "ora";
import { TapdClient } from "../api.js";
import { COPY } from "../command-text.js";
import { loadConfig, loadCredentials, requireConfig, resolveWorkspaceContext, saveConfig } from "../config.js";
import { getToken } from "../session.js";
import { info, success, table, workspaceBanner, exitHint } from "../ui.js";
import { currentWorkspaceHelpText, info, success, table, withSpinner, workspaceBanner } from "../ui.js";
async function fetchWorkspaces() {

@@ -13,3 +14,3 @@ const config = await requireConfig();

if (!config.defaultWorkspaceId) {
throw new Error("个人令牌模式缺少默认 workspace_id,请运行 tapd auth bind --mode personal --workspace-id <id>");
throw new Error("个人令牌模式缺少默认 workspace_id,请运行 tapd login --mode personal --workspace-id <id>");
}

@@ -26,13 +27,10 @@ const workspace = await new TapdClient().verifyPersonalToken(token, config.defaultWorkspaceId);

.command("workspace")
.description("TAPD 空间管理")
.addHelpText("after", `
示例:
tapd workspace list
tapd workspace add --workspace-id 58491787
tapd workspace use
tapd workspace use --workspace-id 58491787
`);
.description(COPY.workspaceDescription)
.addHelpCommand(false)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `\n${COPY.workspaceHelpAfter}`);
workspace
.command("list")
.description("列出空间;个人令牌模式仅显示当前默认空间")
.description(COPY.workspaceListDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.action(async () => {

@@ -42,4 +40,5 @@ const currentWorkspace = await resolveWorkspaceContext();

const spinner = ora("拉取空间列表").start();
const { config, credentials, workspaces } = await fetchWorkspaces();
spinner.stop();
const { config, credentials, workspaces } = await withSpinner(spinner, () => fetchWorkspaces(), {
stopOnSuccess: true
});
if (credentials.mode === "personal") {

@@ -57,3 +56,4 @@ info("个人令牌模式通常不能列出企业项目,仅验证并显示当前默认空间。");

.command("add")
.description("验证并缓存一个 workspace_id,适合个人令牌模式管理多个空间")
.description(COPY.workspaceAddDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.requiredOption("-w, --workspace-id <id>", "要添加的 workspace_id")

@@ -64,4 +64,6 @@ .action(async (options) => {

const spinner = ora("验证 TAPD 空间").start();
const workspace = await new TapdClient().verifyPersonalToken(token, options.workspaceId);
spinner.succeed(`空间可用:${workspace.name} (${workspace.id})`);
const workspace = await withSpinner(spinner, () => new TapdClient().verifyPersonalToken(token, options.workspaceId), {
successText: "空间可用",
failText: "验证 TAPD 空间失败"
});
await saveConfig({

@@ -76,3 +78,4 @@ ...config,

.command("use")
.description("选择默认空间;个人令牌模式可传 --workspace-id 验证切换")
.description(COPY.workspaceUseDescription)
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.option("-w, --workspace-id <id>", "个人令牌模式下要切换到的 workspace_id")

@@ -83,5 +86,4 @@ .action(async (options) => {

const config = await loadConfig();
exitHint();
const workspaceId = options.workspaceId ?? await select({
message: "选择默认空间",
message: COPY.workspaceUseSelectMessage,
choices: (config.workspaces && config.workspaces.length > 0

@@ -100,4 +102,6 @@ ? config.workspaces

const spinner = ora("验证 TAPD 空间").start();
const workspace = await new TapdClient().verifyPersonalToken(token, workspaceId);
spinner.succeed(`空间可用:${workspace.name} (${workspace.id})`);
const workspace = await withSpinner(spinner, () => new TapdClient().verifyPersonalToken(token, workspaceId), {
successText: "空间可用",
failText: "验证 TAPD 空间失败"
});
await saveConfig({

@@ -114,7 +118,7 @@ ...config,

const spinner = ora("拉取空间列表").start();
const { config, workspaces } = await fetchWorkspaces();
spinner.stop();
exitHint();
const { config, workspaces } = await withSpinner(spinner, () => fetchWorkspaces(), {
stopOnSuccess: true
});
const workspaceId = await select({
message: "选择默认空间",
message: COPY.workspaceUseSelectMessage,
choices: workspaces.map((item) => ({

@@ -121,0 +125,0 @@ name: `${item.name} (${item.id})${item.id === config.defaultWorkspaceId ? " 当前" : ""}`,

@@ -1,1 +0,1 @@

{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}

@@ -6,5 +6,7 @@ import type { TapdConfig, TapdCredentials } from "./types.js";

export declare function loadConfig(cwd?: string): Promise<TapdConfig>;
export declare function loadConfigSync(cwd?: string): TapdConfig;
export declare function saveConfig(config: TapdConfig, cwd?: string): Promise<void>;
export declare function loadCredentials(cwd?: string): Promise<TapdCredentials>;
export declare function saveCredentials(credentials: TapdCredentials, cwd?: string): Promise<void>;
export declare function deleteCredentials(cwd?: string): Promise<void>;
export declare function requireConfig(cwd?: string): Promise<TapdConfig>;

@@ -16,1 +18,5 @@ export declare function requireWorkspace(cwd?: string, override?: string): Promise<string>;

}>;
export declare function resolveWorkspaceContextSync(cwd?: string, override?: string): {
id?: string;
name?: string;
};
import { mkdir, readFile, writeFile } from "node:fs/promises";
import { existsSync } from "node:fs";
import { existsSync, readFileSync } from "node:fs";
import path from "node:path";

@@ -49,2 +49,9 @@ import { z } from "zod";

}
export function loadConfigSync(cwd = process.cwd()) {
const file = configPath(cwd);
if (!existsSync(file))
return {};
const raw = readFileSync(file, "utf8");
return configSchema.parse(JSON.parse(raw));
}
export async function saveConfig(config, cwd = process.cwd()) {

@@ -59,6 +66,12 @@ await writeJson(configPath(cwd), config);

}
export async function deleteCredentials(cwd = process.cwd()) {
const file = credentialsPath(cwd);
if (!existsSync(file))
return;
await import("node:fs/promises").then(({ rm }) => rm(file, { force: true }));
}
export async function requireConfig(cwd = process.cwd()) {
const config = await loadConfig(cwd);
if (!config.companyId) {
throw new Error("缺少 company_id,请先运行 tapd auth bind");
throw new Error("缺少 company_id,请先运行 tapd login");
}

@@ -88,2 +101,13 @@ return config;

}
export function resolveWorkspaceContextSync(cwd = process.cwd(), override) {
const config = loadConfigSync(cwd);
const id = override ?? config.defaultWorkspaceId;
if (!id)
return {};
const cached = config.workspaces?.find((item) => item.id === id);
return {
id,
name: cached?.name ?? (id === config.defaultWorkspaceId ? config.defaultWorkspaceName : undefined)
};
}
//# sourceMappingURL=config.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
#!/usr/bin/env node
import { Command } from "commander";
import chalk from "chalk";
import { registerAuth } from "./commands/auth.js";
import { registerLogin, registerLogout } from "./commands/auth.js";
import { registerComment } from "./commands/comment.js";
import { registerInit } from "./commands/init.js";
import { registerIteration } from "./commands/iteration.js";
import { registerStory } from "./commands/story.js";
import { registerWorkspace } from "./commands/workspace.js";
import { brand, fail } from "./ui.js";
import { COPY } from "./command-text.js";
import { brand, currentWorkspaceHelpText, fail } from "./ui.js";
const program = new Command();
program
.name("tapd")
.description("用本地 Markdown 管理 TAPD 需求、迭代空间和评论")
.description(COPY.rootDescription)
.version("0.1.0")
.addHelpCommand(false)
.showHelpAfterError("(使用 tapd -h 查看帮助)")

@@ -21,3 +24,3 @@ .configureHelp({

styleArgumentText: (str) => chalk.magenta(str),
sortSubcommands: true,
sortSubcommands: false,
sortOptions: true,

@@ -36,15 +39,11 @@ showGlobalOptions: true,

.addHelpText("beforeAll", `${brand()}\n`)
.addHelpText("after", `
${chalk.cyan.bold("常用流程")}
${chalk.gray("1.")} tapd auth bind
${chalk.gray("2.")} tapd init
${chalk.gray("3.")} tapd story create ./需求.md
${chalk.gray("4.")} tapd story update ./需求.md
${chalk.gray("5.")} tapd comment add ./需求.md --message "已评审"
`);
registerAuth(program);
.addHelpText("before", () => `${currentWorkspaceHelpText()}\n`)
.addHelpText("after", `\n${COPY.rootHelpAfter.trim()}\n`);
registerLogin(program);
registerInit(program);
registerWorkspace(program);
registerStory(program);
registerIteration(program);
registerComment(program);
registerWorkspace(program);
registerLogout(program);
program.parseAsync(process.argv).catch((error) => {

@@ -51,0 +50,0 @@ // 用户按 Ctrl+C 退出时静默处理

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}

@@ -13,1 +13,3 @@ import type { StoryFrontmatter } from "./types.js";

export declare function titleFromDocument(doc: MarkdownDocument): string;
export declare function htmlToMarkdown(html: string): string;
export declare function writeMarkdown(filePath: string, frontmatter: StoryFrontmatter, content: string): Promise<void>;
import { readFile, writeFile } from "node:fs/promises";
import matter from "gray-matter";
import { marked } from "marked";
import TurndownService from "turndown";
marked.setOptions({

@@ -39,2 +40,14 @@ gfm: true,

}
const turndownService = new TurndownService({
headingStyle: "atx",
codeBlockStyle: "fenced",
bulletListMarker: "-"
});
export function htmlToMarkdown(html) {
return turndownService.turndown(html);
}
export async function writeMarkdown(filePath, frontmatter, content) {
const data = Object.fromEntries(Object.entries(frontmatter).filter(([, value]) => value !== undefined));
await writeFile(filePath, matter.stringify(content, data), "utf8");
}
//# sourceMappingURL=markdown.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,KAAK;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,MAAM,CAAC,IAAwB;QAC5C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,OAAyB;IAChF,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CACjC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC1F,CAAC;IACF,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,OAAO,MAAM,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAsC,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO;IAChG,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAqB;IACrD,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACvE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC9D,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACrE,CAAC"}
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}

@@ -58,2 +58,18 @@ export type TapdConfig = {

};
export type Task = {
id: string;
name: string;
story_id?: string;
status?: string;
owner?: string;
begin?: string;
due?: string;
progress?: string;
effort?: string;
effort_completed?: string;
remain?: string;
iteration_id?: string;
created?: string;
modified?: string;
};
export type Comment = {

@@ -60,0 +76,0 @@ id: string;

@@ -0,1 +1,2 @@

import type { Ora } from "ora";
export declare function brand(): string;

@@ -12,3 +13,12 @@ export declare function success(message: string): void;

export declare function table(rows: Array<Record<string, string | undefined>>): void;
export declare function compactList(rows: Array<{
title: string;
lines?: string[];
}>): void;
export declare function truncate(value: string | undefined, max?: number): string;
export declare function exitHint(): void;
export declare function withSpinner<T>(spinner: Ora, task: () => Promise<T>, options?: {
successText?: string;
failText?: string;
stopOnSuccess?: boolean;
}): Promise<T>;
export declare function currentWorkspaceHelpText(cwd?: string): string;
import chalk from "chalk";
import { resolveWorkspaceContextSync } from "./config.js";
import { COPY } from "./command-text.js";
export function brand() {
return `${chalk.cyan.bold("tapd")} ${chalk.gray("markdown cli")}`;
return `${chalk.cyan.bold("tapd")} ${chalk.gray(COPY.brandSubtitle)}`;
}

@@ -16,3 +18,3 @@ export function success(message) {

const name = workspace.name ?? "未知空间";
console.log(`${chalk.green("✓")} 默认空间: ${chalk.bold(name)} ${chalk.gray(`(${workspace.id})`)}`);
console.log(`${chalk.green("✓")} 当前空间: ${chalk.bold(name)} ${chalk.gray(`(${workspace.id})`)}`);
}

@@ -34,2 +36,14 @@ export function fail(message) {

}
export function compactList(rows) {
if (rows.length === 0) {
info("暂无数据");
return;
}
for (const [index, row] of rows.entries()) {
console.log(row.title);
for (const line of row.lines ?? []) {
console.log(` ${chalk.gray(line)}`);
}
}
}
export function truncate(value, max = 120) {

@@ -41,5 +55,32 @@ if (!value)

}
export function exitHint() {
console.log(chalk.gray("按 Ctrl+C 可以随时退出"));
export async function withSpinner(spinner, task, options = {}) {
try {
const result = await task();
if (options.stopOnSuccess) {
spinner.stop();
}
else if (options.successText) {
spinner.succeed(options.successText);
}
return result;
}
catch (error) {
if (spinner.isSpinning) {
if (options.failText) {
spinner.fail(options.failText);
}
else {
spinner.stop();
}
}
throw error;
}
}
export function currentWorkspaceHelpText(cwd = process.cwd()) {
const workspace = resolveWorkspaceContextSync(cwd);
if (!workspace.id) {
return `${chalk.cyan.bold("当前空间")} ${chalk.gray("未设置")}`;
}
return `${chalk.cyan.bold("当前空间")} ${chalk.bold(workspace.name ?? "未知空间")} ${chalk.gray(`(${workspace.id})`)}`;
}
//# sourceMappingURL=ui.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,KAAK;IACnB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAwC;IACtE,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IAC1C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAA+C;IACnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAyB,EAAE,GAAG,GAAG,GAAG;IAC3D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,OAAO,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAC7C,CAAC"}
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
{
"name": "@huangqz/tapd-cli",
"version": "0.1.0",
"version": "0.2.0",
"description": "Manage TAPD stories from local Markdown files.",

@@ -16,3 +16,3 @@ "type": "module",

"type": "git",
"url": "git@github.com:qizhi2design-svg/tapd-cli.git"
"url": "git+ssh://git@github.com/qizhi2design-svg/tapd-cli.git"
},

@@ -24,3 +24,3 @@ "homepage": "https://github.com/qizhi2design-svg/tapd-cli",

"bin": {
"tapd": "./dist/index.js"
"tapd": "dist/index.js"
},

@@ -50,2 +50,3 @@ "files": [

"strip-ansi": "^7.1.0",
"turndown": "^7.2.0",
"zod": "^3.24.1"

@@ -55,2 +56,3 @@ },

"@types/node": "^22.10.5",
"@types/turndown": "^5.0.5",
"tsx": "^4.19.2",

@@ -57,0 +59,0 @@ "typescript": "^5.7.2",

@@ -17,6 +17,6 @@ # @huangqz/tapd-cli

# 使用个人令牌认证
tapd auth bind --mode personal --token YOUR_TOKEN --workspace-id YOUR_WORKSPACE_ID
tapd login --mode personal --token YOUR_TOKEN --workspace-id YOUR_WORKSPACE_ID
# 或使用开放应用凭证认证
tapd auth bind --mode app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET
tapd login --mode app --client-id YOUR_CLIENT_ID --client-secret YOUR_CLIENT_SECRET
```

@@ -71,2 +71,4 @@

- ✅ 双向同步:从 TAPD 拉取需求到本地
- ✅ 查看需求下的排期任务
- ✅ 查看迭代信息和迭代任务情况
- ✅ 评论管理

@@ -78,4 +80,4 @@

- `tapd auth bind` - 绑定 TAPD 凭证
- `tapd auth status` - 查看认证状态
- `tapd login` - 登录 TAPD 并保存本地凭证
- `tapd logout` - 清除本地认证文件

@@ -88,2 +90,8 @@ ### 工作空间

### 迭代
- `tapd iteration list` - 查看当前空间迭代列表
- `tapd iteration get <iteration-id>` - 查看迭代基础信息
- `tapd iteration tasks <iteration-id>` - 查看迭代下的任务情况
### 需求管理

@@ -93,4 +101,6 @@

- `tapd story update <file>` - 更新需求
- `tapd story get <story-id>` - 拉取需求到本地
- `tapd story get <story-id>` - 获取需求内容摘要
- `tapd story pull <story-id> [output-file]` - 拉取需求到本地 Markdown
- `tapd story list` - 列出需求
- `tapd story tasks <story-id>` - 查看需求下的任务排期

@@ -97,0 +107,0 @@ ### 评论