dsh-github-flow 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +16 -4
- package/README.md +16 -4
- package/docs/UPGRADE-NOTES.md +8 -8
- package/docs/architecture.md +33 -17
- package/docs/images/1.png +0 -0
- package/lib/api/routes-actions.js +139 -8
- package/lib/api/routes-overview.js +147 -29
- package/lib/cache.d.ts +77 -4
- package/lib/cache.js +114 -7
- package/lib/client.d.ts +7 -3
- package/lib/client.js +3309 -314
- package/lib/executor/error-classifier.d.ts +55 -0
- package/lib/executor/error-classifier.js +199 -0
- package/lib/executor/git-parser.d.ts +124 -0
- package/lib/executor/git-parser.js +397 -0
- package/lib/executor.d.ts +122 -4
- package/lib/executor.js +685 -80
- package/lib/tools/help.js +22 -7
- package/lib/tools/image-utils.d.ts +27 -0
- package/lib/tools/image-utils.js +73 -3
- package/lib/types.d.ts +331 -0
- package/lib/ui/help-modal.d.ts +6 -0
- package/lib/ui/help-modal.js +113 -15
- package/lib/ui/issue-modal.d.ts +14 -0
- package/lib/ui/issue-modal.js +366 -0
- package/lib/ui/markdown-lite.d.ts +66 -0
- package/lib/ui/markdown-lite.js +312 -0
- package/lib/ui/network-banner.d.ts +12 -0
- package/lib/ui/network-banner.js +35 -0
- package/lib/ui/pr-modal.d.ts +17 -0
- package/lib/ui/pr-modal.js +516 -0
- package/lib/ui/repo-badges.d.ts +43 -0
- package/lib/ui/repo-badges.js +82 -0
- package/lib/ui/repo-selector.d.ts +14 -0
- package/lib/ui/repo-selector.js +112 -0
- package/lib/ui/storage.d.ts +47 -0
- package/lib/ui/storage.js +139 -0
- package/lib/ui/styles.d.ts +1 -1
- package/lib/ui/styles.js +960 -0
- package/lib/ui/utils.js +13 -1
- package/lib/ui/workspace-panel.js +169 -27
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
package/lib/ui/utils.js
CHANGED
|
@@ -64,6 +64,15 @@ export function eventLabel(event) {
|
|
|
64
64
|
return "🔀 PR";
|
|
65
65
|
return e || "";
|
|
66
66
|
}
|
|
67
|
+
/**
|
|
68
|
+
* 确定性失败的特征(客户端侧兜底判定)。
|
|
69
|
+
*
|
|
70
|
+
* 为什么这里还要再写一份:后端 GhExecutor 已统一分类并通过 errorKind 分流,
|
|
71
|
+
* 但浏览器端拿不到 errorKind,只能看到拼接后的错误文本。这类错误重试一万次
|
|
72
|
+
* 也不会变好(仓库就是关着 Issues),必须阻止阶梯退避把 7 秒白白烧掉。
|
|
73
|
+
* 与服务端共用同一组特征串,改动时两边同步。
|
|
74
|
+
*/
|
|
75
|
+
var DETERMINISTIC_HINT_RE = /repository has disabled|Could not resolve to a Repository|Branch not found|HTTP 403|Not Found \(HTTP 404\)|rate limit/i;
|
|
67
76
|
/**
|
|
68
77
|
* 带有阶梯退避重试(Backoff Retry)的通用异步拉取函数
|
|
69
78
|
*
|
|
@@ -107,7 +116,10 @@ export async function fetchWithRetry(url, options = {}, config = {}) {
|
|
|
107
116
|
currentJson.data?.auth?.networkError));
|
|
108
117
|
if (isNetworkError) {
|
|
109
118
|
failureReason = currentJson.error || currentJson.data?.networkErrorReason || "云端接口网络抖动";
|
|
110
|
-
|
|
119
|
+
// 后端已把「确定性失败」(仓库关了 Issues / 仓库不存在 / 无权限)从
|
|
120
|
+
// networkError 里剥离,只留真正的传输层故障。但历史版本或第三方实现
|
|
121
|
+
// 仍可能把确定性文本塞进同一条链路,这里再兜一道:命中即放弃重试。
|
|
122
|
+
shouldRetry = !DETERMINISTIC_HINT_RE.test(String(failureReason));
|
|
111
123
|
}
|
|
112
124
|
else {
|
|
113
125
|
// 成功获取完整且无网络错误的数据
|
|
@@ -17,7 +17,15 @@ export function GithubWorkspacePanel() {
|
|
|
17
17
|
var [activeTab, setActiveTab] = React.useState("workspaces");
|
|
18
18
|
var [searchQuery, setSearchQuery] = React.useState("");
|
|
19
19
|
var [issueFilter, setIssueFilter] = React.useState("all");
|
|
20
|
+
// PR 状态筛选:默认「全部」而不是「Open」。
|
|
21
|
+
// 实测账号可能零 open PR(当前账号 7 个 PR 全为 merged/closed),
|
|
22
|
+
// 默认 Open 会让列表恒为空白,等于没修「看不到数据」这个原始问题。
|
|
23
|
+
var [prStateFilter, setPrStateFilter] = React.useState("all");
|
|
20
24
|
var [toastMsg, setToastMsg] = React.useState(null);
|
|
25
|
+
// PR 在线审阅弹窗状态:{ number, repo } 二元组;为 null 时弹窗不渲染
|
|
26
|
+
var [activePrModal, setActivePrModal] = React.useState(null);
|
|
27
|
+
// Issue 在线查看弹窗状态:与 PR 完全同构的 { number, repo } 二元组
|
|
28
|
+
var [activeIssueModal, setActiveIssueModal] = React.useState(null);
|
|
21
29
|
var cloudTimerRef = React.useRef(null);
|
|
22
30
|
var dataRef = React.useRef(data);
|
|
23
31
|
dataRef.current = data;
|
|
@@ -358,7 +366,7 @@ export function GithubWorkspacePanel() {
|
|
|
358
366
|
var authGuideEl = (!auth?.loggedIn && !auth?.networkError && syncStatus !== "failed")
|
|
359
367
|
? h(AuthGuideCard, { auth, onRefresh: () => loadData(true), isRightbar: false })
|
|
360
368
|
: null;
|
|
361
|
-
var tabsEl = h("div", { className: "dsh-github-tabs" }, h("button", { className: `dsh-github-tab-btn ${activeTab === 'workspaces' ? 'active' : ''}`, onClick: () => setActiveTab('workspaces') }, `📂 本地工作区矩阵 (${workspaceMatrix.length})`), h("button", { className: `dsh-github-tab-btn ${activeTab === 'repos' ? 'active' : ''}`, onClick: () => setActiveTab('repos') }, `☁️ 我的 GitHub 仓库 (${userRepos.length})`), h("button", { className: `dsh-github-tab-btn ${activeTab === '
|
|
369
|
+
var tabsEl = h("div", { className: "dsh-github-tabs" }, h("button", { className: `dsh-github-tab-btn ${activeTab === 'workspaces' ? 'active' : ''}`, onClick: () => setActiveTab('workspaces') }, `📂 本地工作区矩阵 (${workspaceMatrix.length})`), h("button", { className: `dsh-github-tab-btn ${activeTab === 'repos' ? 'active' : ''}`, onClick: () => setActiveTab('repos') }, `☁️ 我的 GitHub 仓库 (${userRepos.length})`), h("button", { className: `dsh-github-tab-btn ${activeTab === 'prs' ? 'active' : ''}`, onClick: () => setActiveTab('prs') }, `🔀 Pull Requests (${myPrs.length})`), h("button", { className: `dsh-github-tab-btn ${activeTab === 'issues' ? 'active' : ''}`, onClick: () => setActiveTab('issues') }, `📝 任务与待办 Issues (${myIssues.length})`));
|
|
362
370
|
var contentEl = null;
|
|
363
371
|
if (activeTab === 'workspaces') {
|
|
364
372
|
contentEl = h("div", { className: "dsh-github-list" }, workspaceMatrix.map((ws) => h("div", { key: ws.id, className: "dsh-github-card dsh-github-workspace-card" }, h("div", { style: { display: "flex", flexDirection: "column", gap: "4px" } }, h("div", { className: "dsh-github-ws-title" }, ws.title), h("div", { className: "dsh-github-ws-path" }, ws.path), h("div", { style: { fontSize: "12px", marginTop: "4px", display: "flex", gap: "8px", alignItems: "center" } }, ws.repo
|
|
@@ -396,6 +404,92 @@ export function GithubWorkspacePanel() {
|
|
|
396
404
|
: null)))));
|
|
397
405
|
}
|
|
398
406
|
}
|
|
407
|
+
else if (activeTab === 'prs') {
|
|
408
|
+
// ---- PR 独立标签页:完整大屏空间,点击卡片在线唤起审阅工作台 ----
|
|
409
|
+
if (!auth?.loggedIn) {
|
|
410
|
+
contentEl = h("div", { className: "dsh-github-empty" }, "当前尚未认证登录 GitHub 账号,无法读取个人 PR 列表。请先完成上方的安装或登录指引。");
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
// 状态分组统计(供胶囊计数与空态判断)
|
|
414
|
+
var prByState = { open: 0, merged: 0, closed: 0 };
|
|
415
|
+
myPrs.forEach(function (pr) {
|
|
416
|
+
var s = String(pr.state || '').toLowerCase();
|
|
417
|
+
if (s === 'open' || s === 'merged' || s === 'closed')
|
|
418
|
+
prByState[s]++;
|
|
419
|
+
});
|
|
420
|
+
var filteredPrs = myPrs.filter(function (pr) {
|
|
421
|
+
if (prStateFilter === 'all')
|
|
422
|
+
return true;
|
|
423
|
+
return String(pr.state || '').toLowerCase() === prStateFilter;
|
|
424
|
+
});
|
|
425
|
+
var prPillsEl = h("div", { className: "dsh-github-pills" }, h("button", { className: `dsh-github-pill-btn ${prStateFilter === 'all' ? 'active' : ''}`, onClick: () => setPrStateFilter('all') }, `全部 (${myPrs.length})`), h("button", { className: `dsh-github-pill-btn ${prStateFilter === 'open' ? 'active' : ''}`, onClick: () => setPrStateFilter('open') }, `🟢 Open (${prByState.open})`), h("button", { className: `dsh-github-pill-btn ${prStateFilter === 'merged' ? 'active' : ''}`, onClick: () => setPrStateFilter('merged') }, `🟣 Merged (${prByState.merged})`), h("button", { className: `dsh-github-pill-btn ${prStateFilter === 'closed' ? 'active' : ''}`, onClick: () => setPrStateFilter('closed') }, `⚪ Closed (${prByState.closed})`));
|
|
426
|
+
// 空态必须区分「账号确实没有」与「当前筛选下没有」——否则用户会把筛空当成数据丢失
|
|
427
|
+
var prEmptyEl = myPrs.length === 0
|
|
428
|
+
? h("div", { className: "dsh-github-empty" }, "该账号下暂无任何 Pull Request 记录")
|
|
429
|
+
: h("div", { className: "dsh-github-empty" }, `当前筛选「${prStateFilter}」下无结果,共 ${myPrs.length} 条记录(切换到「全部」查看)`);
|
|
430
|
+
contentEl = h("div", null, h("h3", { className: "dsh-github-subheading" }, `🔀 我发起与参与的 Pull Requests (${filteredPrs.length} / ${myPrs.length})`), prPillsEl,
|
|
431
|
+
// 触顶提示:让用户知道列表被截断了,而不是以为历史 PR 凭空消失
|
|
432
|
+
data && data.prsTruncated
|
|
433
|
+
? h("div", {
|
|
434
|
+
style: {
|
|
435
|
+
margin: "8px 0",
|
|
436
|
+
padding: "6px 12px",
|
|
437
|
+
borderRadius: "6px",
|
|
438
|
+
fontSize: "11px",
|
|
439
|
+
lineHeight: 1.5,
|
|
440
|
+
background: "rgba(210, 153, 34, 0.12)",
|
|
441
|
+
border: "1px solid rgba(210, 153, 34, 0.35)",
|
|
442
|
+
color: "var(--dsw-alias-state-attention-primary, #9a6700)",
|
|
443
|
+
},
|
|
444
|
+
}, `⚠️ 仅显示最近 ${myPrs.length} 条 PR(已触及检索上限)。更早的记录请到 GitHub 查看。`)
|
|
445
|
+
: null, filteredPrs.length === 0 ? prEmptyEl : h("div", { className: "dsh-github-list" }, filteredPrs.map((pr) => {
|
|
446
|
+
// 点击卡片主体 → 在线审阅弹窗
|
|
447
|
+
return h("div", {
|
|
448
|
+
key: pr.number,
|
|
449
|
+
className: "dsh-github-item",
|
|
450
|
+
/*
|
|
451
|
+
* 只加 cursor,绝不覆盖 display/alignItems/flexWrap。
|
|
452
|
+
* 这里的 inline style 曾写成 display:flex + alignItems:center + flexWrap:wrap,
|
|
453
|
+
* 直接把 .dsh-github-item 的 flex-direction:column 顶掉,
|
|
454
|
+
* 导致标题、状态徽章、时间全部横向挤成一行并整体居中——
|
|
455
|
+
* 卡片布局就是被这一行内联样式毁掉的。
|
|
456
|
+
*/
|
|
457
|
+
style: { cursor: "pointer" },
|
|
458
|
+
title: "点击在线审阅该 PR(描述 / 评论 / 文件 Diff)",
|
|
459
|
+
onClick: () => {
|
|
460
|
+
setActivePrModal({
|
|
461
|
+
number: Number(pr.number),
|
|
462
|
+
repo: pr.repository?.nameWithOwner || '',
|
|
463
|
+
});
|
|
464
|
+
},
|
|
465
|
+
},
|
|
466
|
+
// 标题行:标题 → 状态徽章 → GitHub 跳转按钮,全部同一行
|
|
467
|
+
h("div", { className: "dsh-github-pr-title-row" }, h("span", { className: "dsh-github-item-title", style: { cursor: "pointer" } }, `${pr.isDraft ? "⚪ " : ""}[${pr.repository?.nameWithOwner || 'Repo'}] #${pr.number} ${pr.title}`), pr.isDraft ? h("span", { className: "dsh-github-badge dsh-badge-yellow", style: { flexShrink: 0 } }, "DRAFT") : null,
|
|
468
|
+
// 状态徽章:列表含 merged/closed,必须标明才能一眼区分
|
|
469
|
+
(() => {
|
|
470
|
+
var s = String(pr.state || '').toUpperCase();
|
|
471
|
+
if (s === 'MERGED')
|
|
472
|
+
return h("span", { className: "dsh-github-badge dsh-badge-purple", style: { flexShrink: 0 } }, "MERGED");
|
|
473
|
+
if (s === 'CLOSED')
|
|
474
|
+
return h("span", { className: "dsh-github-badge dsh-badge-red", style: { flexShrink: 0 } }, "CLOSED");
|
|
475
|
+
if (s === 'OPEN')
|
|
476
|
+
return h("span", { className: "dsh-github-badge dsh-badge-green", style: { flexShrink: 0 } }, "OPEN");
|
|
477
|
+
return null;
|
|
478
|
+
})(), h("a", {
|
|
479
|
+
className: "dsh-github-pr-gh-btn",
|
|
480
|
+
href: pr.url,
|
|
481
|
+
target: "_blank",
|
|
482
|
+
rel: "noopener noreferrer",
|
|
483
|
+
onClick: (e) => e.stopPropagation(),
|
|
484
|
+
title: "在浏览器打开该 PR(不进入在线审阅)",
|
|
485
|
+
}, "GitHub ↗")),
|
|
486
|
+
// 第二行只保留时间,避免与标题行的徽章重复
|
|
487
|
+
formatRelativeTime(pr.updatedAt)
|
|
488
|
+
? h("div", { className: "dsh-github-item-meta" }, h("span", { style: { whiteSpace: "nowrap" } }, formatRelativeTime(pr.updatedAt)))
|
|
489
|
+
: null);
|
|
490
|
+
})));
|
|
491
|
+
}
|
|
492
|
+
}
|
|
399
493
|
else {
|
|
400
494
|
if (!auth?.loggedIn) {
|
|
401
495
|
contentEl = h("div", { className: "dsh-github-empty" }, "当前尚未认证登录 GitHub 账号,无法读取个人待办 PR 与 Issues。请先完成上方的安装或登录指引。");
|
|
@@ -426,31 +520,61 @@ export function GithubWorkspacePanel() {
|
|
|
426
520
|
className: `dsh-github-pill-btn ${issueFilter === 'created' ? 'active' : ''}`,
|
|
427
521
|
onClick: () => setIssueFilter('created'),
|
|
428
522
|
}, `✍️ 我创建的 (${issueStats.created || 0})`));
|
|
429
|
-
contentEl = h("div", null, h("h3", { className: "dsh-github-subheading" },
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
523
|
+
contentEl = h("div", null, h("h3", { className: "dsh-github-subheading" }, `📝 我发起与参与的 Issues (${filteredIssues.length} / ${myIssues.length})`), issuePillsEl, filteredIssues.length === 0
|
|
524
|
+
? (myIssues.length === 0
|
|
525
|
+
? h("div", { className: "dsh-github-empty" }, "该账号下暂无任何 Issue 记录")
|
|
526
|
+
: h("div", { className: "dsh-github-empty" }, `当前分类「${issueFilter}」下无结果,共 ${myIssues.length} 条记录(切换到「全部」查看)`))
|
|
527
|
+
: h("div", { className: "dsh-github-list" }, filteredIssues.map((is) => {
|
|
528
|
+
var cats = is.categories || [];
|
|
529
|
+
var badges = [];
|
|
530
|
+
if (cats.includes("reported")) {
|
|
531
|
+
badges.push(h("span", { key: "rep", className: "dsh-github-badge dsh-badge-purple" }, "用户提单"));
|
|
532
|
+
}
|
|
533
|
+
if (cats.includes("assigned")) {
|
|
534
|
+
badges.push(h("span", { key: "asn", className: "dsh-github-badge dsh-badge-blue" }, "分配待办"));
|
|
535
|
+
}
|
|
536
|
+
if (cats.includes("created")) {
|
|
537
|
+
badges.push(h("span", { key: "crt", className: "dsh-github-badge dsh-badge-green" }, "我发起的"));
|
|
538
|
+
}
|
|
539
|
+
return h("div", {
|
|
540
|
+
key: is.url || is.number,
|
|
541
|
+
className: "dsh-github-item",
|
|
542
|
+
/*
|
|
543
|
+
* 只加 cursor,绝不覆盖 display/alignItems/flexWrap。
|
|
544
|
+
* .dsh-github-item 是 flex-direction:column,任何内联 flex 布局
|
|
545
|
+
* 都会把标题、徽章、元信息横向挤成一行(PR 卡片上踩过的坑)。
|
|
546
|
+
*/
|
|
547
|
+
style: { cursor: "pointer" },
|
|
548
|
+
title: "点击在线查看该 Issue(正文 / 评论时间线 / 标签与里程碑)",
|
|
549
|
+
onClick: () => {
|
|
550
|
+
setActiveIssueModal({
|
|
551
|
+
number: Number(is.number),
|
|
552
|
+
repo: is.repository?.nameWithOwner || '',
|
|
553
|
+
});
|
|
554
|
+
},
|
|
555
|
+
},
|
|
556
|
+
// 标题行:标题 → 分类徽章 → 状态徽章 → GitHub 外跳,全部同一行
|
|
557
|
+
h("div", { className: "dsh-github-pr-title-row" }, h("span", { className: "dsh-github-item-title", style: { cursor: "pointer" } }, `[${is.repository?.nameWithOwner || 'Repo'}] #${is.number} ${is.title}`), ...badges, (() => {
|
|
558
|
+
// 状态徽章:全局检索含 closed,不标注会让用户把已关闭议题当成待办
|
|
559
|
+
var s = String(is.state || '').toUpperCase();
|
|
560
|
+
if (s === 'CLOSED')
|
|
561
|
+
return h("span", { className: "dsh-github-badge dsh-badge-red", style: { flexShrink: 0 } }, "CLOSED");
|
|
562
|
+
if (s === 'OPEN')
|
|
563
|
+
return h("span", { className: "dsh-github-badge dsh-badge-green", style: { flexShrink: 0 } }, "OPEN");
|
|
564
|
+
return null;
|
|
565
|
+
})(), h("a", {
|
|
566
|
+
className: "dsh-github-pr-gh-btn",
|
|
567
|
+
href: is.url,
|
|
568
|
+
target: "_blank",
|
|
569
|
+
rel: "noopener noreferrer",
|
|
570
|
+
onClick: (e) => e.stopPropagation(),
|
|
571
|
+
title: "在浏览器打开该 Issue(不进入在线查看)",
|
|
572
|
+
}, "GitHub ↗")), h("div", { className: "dsh-github-item-meta" }, is.author ? h("span", null, `由 @${is.author.login} 提出`) : null, is.assignees && is.assignees.length > 0
|
|
573
|
+
? h("span", null, `指派: ${is.assignees.map((a) => '@' + a.login).join(', ')}`)
|
|
574
|
+
: null, is.labels && is.labels.length > 0
|
|
575
|
+
? is.labels.map((lbl) => h("span", { key: lbl.name, className: "dsh-github-badge dsh-badge-yellow" }, lbl.name))
|
|
576
|
+
: null, is.updatedAt ? h("span", null, `更新于: ${new Date(is.updatedAt).toLocaleDateString()}`) : null));
|
|
577
|
+
})));
|
|
454
578
|
}
|
|
455
579
|
}
|
|
456
580
|
var toastEl = toastMsg
|
|
@@ -485,5 +609,23 @@ export function GithubWorkspacePanel() {
|
|
|
485
609
|
return h("div", { className: "dsh-github-panel", ref: panelRef }, toastEl, headerEl, networkAlertBannerEl, upgradeBannerEl, errorEl, statsCardsEl, authGuideEl, tabsEl, contentEl, settingsModalEl, h(GithubHelpModal, {
|
|
486
610
|
isOpen: isHelpModalOpen,
|
|
487
611
|
onClose: () => setIsHelpModalOpen(false),
|
|
488
|
-
})
|
|
612
|
+
}),
|
|
613
|
+
// PR 在线审阅工作台:仅在用户点击某个 PR 时挂载,关闭即卸载(零常驻开销)
|
|
614
|
+
activePrModal
|
|
615
|
+
? h(PrDetailModal, {
|
|
616
|
+
prNumber: activePrModal.number,
|
|
617
|
+
repoNameWithOwner: activePrModal.repo,
|
|
618
|
+
onClose: () => setActivePrModal(null),
|
|
619
|
+
showToast: showToast,
|
|
620
|
+
})
|
|
621
|
+
: null,
|
|
622
|
+
// Issue 在线查看弹窗:同上,点击即挂载、关闭即卸载
|
|
623
|
+
activeIssueModal
|
|
624
|
+
? h(IssueDetailModal, {
|
|
625
|
+
issueNumber: activeIssueModal.number,
|
|
626
|
+
repoNameWithOwner: activeIssueModal.repo,
|
|
627
|
+
onClose: () => setActiveIssueModal(null),
|
|
628
|
+
showToast: showToast,
|
|
629
|
+
})
|
|
630
|
+
: null);
|
|
489
631
|
}
|
package/lib/version.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. 避免在 ESM 运行时动态读取 package.json 引入 fs 权限和路径解析边界问题;
|
|
7
7
|
* 3. 方便在 CI 发布流水线或 build 脚本中自动化校准。
|
|
8
8
|
*/
|
|
9
|
-
export declare const CURRENT_PLUGIN_VERSION = "0.
|
|
9
|
+
export declare const CURRENT_PLUGIN_VERSION = "0.6.0";
|
|
10
10
|
export declare const PLUGIN_PACKAGE_NAME = "dsh-github-flow";
|
|
11
11
|
export declare const NPM_PACKAGE_URL = "https://www.npmjs.com/package/dsh-github-flow";
|
|
12
12
|
export declare const NPM_REGISTRY_MIRROR = "https://registry.npmmirror.com";
|
package/lib/version.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. 避免在 ESM 运行时动态读取 package.json 引入 fs 权限和路径解析边界问题;
|
|
7
7
|
* 3. 方便在 CI 发布流水线或 build 脚本中自动化校准。
|
|
8
8
|
*/
|
|
9
|
-
export const CURRENT_PLUGIN_VERSION = '0.
|
|
9
|
+
export const CURRENT_PLUGIN_VERSION = '0.6.0';
|
|
10
10
|
export const PLUGIN_PACKAGE_NAME = 'dsh-github-flow';
|
|
11
11
|
export const NPM_PACKAGE_URL = 'https://www.npmjs.com/package/dsh-github-flow';
|
|
12
12
|
export const NPM_REGISTRY_MIRROR = 'https://registry.npmmirror.com';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-github-flow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"icon": "icon.svg",
|
|
5
5
|
"description": "GitHub 工作流引擎:为 DeepSeek Harness 提供原生 GitHub CLI (gh) 集成——18 大 Agent 领域工具(PR 审查合并、Issue 任务流转、CI 失败诊断、发版交付、密钥管理、Agent Skills、标签与保护规则集、构建缓存治理、代码片段 Gist、跨仓待办大盘、Copilot 智能体调度、社区 Discussions、Projects v2 看板、云端 Codespaces、运行时遥测与自愈健康度)、/gh 人类快捷指令、Web UI 全景驾驶舱与一键跨平台自动升级;零凭证侵入复用宿主机 gh 登录态,内置 Token 防溢出截断、高危操作二次确认与密文安全输入通道。",
|
|
6
6
|
"type": "module",
|