dsh-plugin-github-issues 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/assets/pending.png +0 -0
- package/docs/README.zh.md +4 -0
- package/lib/client.js +152 -81
- package/lib/prompt.js +18 -3
- package/lib/prompt.js.map +1 -1
- package/lib/types/prompt.d.ts +13 -2
- package/lib/types/prompt.d.ts.map +1 -1
- package/lib/types/vm.d.ts +10 -0
- package/lib/types/vm.d.ts.map +1 -1
- package/lib/vm.js +30 -4
- package/lib/vm.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,6 +16,8 @@ worked in several Sessions.
|
|
|
16
16
|
|
|
17
17
|

|
|
18
18
|
|
|
19
|
+

|
|
20
|
+
|
|
19
21
|
It is **read-only**: the plugin never writes to GitHub.
|
|
20
22
|
|
|
21
23
|
## Install
|
|
@@ -63,7 +65,7 @@ tarball (`dsh-plugin-github-issues.tgz`), installable by path.
|
|
|
63
65
|
|---|---|---|
|
|
64
66
|
| GitHub panel | left rail icon → main panel | organization → repository → **milestone** → assignee → state cascade (remembered across restarts) in one fixed toolbar; a default organization/repository is selected for you, the milestone dropdown lists only that repository's milestones, and only the list scrolls (search stays above it, the detail pane scrolls independently with the **full issue body rendered as sanitized GitHub-flavored Markdown**, milestone progress, labels, priority, assignees, linked/mentioned PRs and checks) |
|
|
65
67
|
| Issues right column | right sidebar tab | the same filtered issue list beside the Conversation, for drag-and-drop handoff |
|
|
66
|
-
| Composer card | inside the input box | the staged issue
|
|
68
|
+
| Composer card | inside the input box, above the editor | the staged issue as a draft-attachment-style card (240×64, GitHub glyph, `owner/repo#number`, state + title, hover-only remove). The card is not editable; it keeps its own space above the editor, survives a Workspace switch together with the draft, and is converted into the issue prompt on send |
|
|
67
69
|
| Linked chip | composer dock under the input | the Session's linked issue: state dot (green open / red closed) + `owner/repo#number`; the dot refreshes from GitHub on panel refresh, every poll, window focus and whenever the issue appears in the list; click for a detail popover, remove to unlink |
|
|
68
70
|
| Handoff actions | issue detail | one-click **enter Session** (latest link), **new Session for this issue**, plus a linked-Session list with per-Session enter/unlink |
|
|
69
71
|
| GitHub settings | Settings → GitHub | `gh` auth status and scopes, handoff behavior, prompt template |
|
|
@@ -118,6 +120,9 @@ Settings → GitHub → Prompt template. Variables: `{{repo}}`, `{{number}}`, `{
|
|
|
118
120
|
- The detail body is the complete issue body, rendered with Markdown (headings, lists, code blocks,
|
|
119
121
|
tables, links, images) and sanitized before display; it is not an excerpt and it is not capped to a
|
|
120
122
|
small fixed-height box.
|
|
123
|
+
- The default handoff prompt renders its issue metadata as a Markdown table, so it survives as a real
|
|
124
|
+
table in the transcript after sending. Legacy pre-table prompts are upgraded once on load; **Reset
|
|
125
|
+
to default** in Settings restores this template.
|
|
121
126
|
- Milestone choices come from the selected repository's full milestone list (open and closed).
|
|
122
127
|
- Priority falls back organization Issue Field → `P0`–`P4` labels when no project field is present.
|
|
123
128
|
- The list polls every 60–120 s while visible; use **Refresh** for an immediate update.
|
|
Binary file
|
package/docs/README.zh.md
CHANGED
|
@@ -13,6 +13,8 @@ Issue 可以关联多个 Session。
|
|
|
13
13
|
|
|
14
14
|

|
|
15
15
|
|
|
16
|
+

|
|
17
|
+
|
|
16
18
|
插件对 GitHub **只读**,不会写入任何内容。
|
|
17
19
|
|
|
18
20
|
## 安装
|
|
@@ -103,6 +105,8 @@ dsh plugin --profile <name> add /path/to/dsh-plugin-github-issues
|
|
|
103
105
|
- 列表使用仓库的 `issues` 连接,状态、assignee、里程碑都由 GitHub 服务端过滤(总数也是权威的);
|
|
104
106
|
里程碑通过 `filterBy.milestoneNumber` 按编号过滤。
|
|
105
107
|
- 详情展示完整正文(不是摘要、也不再限制在固定高度的小框里),按 Markdown 渲染并过滤危险 HTML。
|
|
108
|
+
- 默认交接提示词把 Issue 元信息排成 Markdown 表格,发送后在对话里会渲染成真正的表格;旧版没有表格的
|
|
109
|
+
提示词会在加载时自动升级一次,也可以在设置里点「恢复默认」重新套用。
|
|
106
110
|
- 里程碑的可选项来自当前仓库的完整里程碑列表(含已关闭)。
|
|
107
111
|
- 优先级回退顺序:组织 Issue Field → `P0`–`P4` 标签(不再读取 Projects v2 项目字段)。
|
|
108
112
|
- 列表可见时每 60–120 秒轮询一次;需要立刻更新点「刷新」。
|
package/lib/client.js
CHANGED
|
@@ -37,10 +37,18 @@ var import_react5 = require("react");
|
|
|
37
37
|
// src/vm.ts
|
|
38
38
|
var DEFAULT_PROMPT_TEMPLATE = [
|
|
39
39
|
"\u5904\u7406 GitHub Issue\uFF1A{{repo}}#{{number}} {{title}}",
|
|
40
|
+
"",
|
|
40
41
|
"\u94FE\u63A5\uFF1A{{url}}",
|
|
41
|
-
"
|
|
42
|
-
"\
|
|
43
|
-
"
|
|
42
|
+
"",
|
|
43
|
+
"| \u5B57\u6BB5 | \u503C |",
|
|
44
|
+
"| --- | --- |",
|
|
45
|
+
"| \u72B6\u6001 | {{state}} |",
|
|
46
|
+
"| \u91CC\u7A0B\u7891 | {{milestone}} |",
|
|
47
|
+
"| \u4F18\u5148\u7EA7 | {{priority}} |",
|
|
48
|
+
"| \u6307\u6D3E | {{assignees}} |",
|
|
49
|
+
"| \u6807\u7B7E | {{labels}} |",
|
|
50
|
+
"| \u5173\u8054 PR | {{prs}} |",
|
|
51
|
+
"",
|
|
44
52
|
"\u8981\u6C42\uFF1A\u5148\u8BFB Issue \u6B63\u6587\u4E0E\u5173\u8054 PR\uFF0C\u786E\u8BA4\u9A8C\u6536\u6807\u51C6\u540E\u518D\u52A8\u624B\uFF1B\u7528 subagent_codex \u6267\u884C\u5177\u4F53\u6539\u52A8\uFF0C\u5B8C\u6210\u540E\u8DD1\u76F8\u5173\u6D4B\u8BD5\u5E76\u56DE\u62A5\u3002"
|
|
45
53
|
].join("\n");
|
|
46
54
|
var DEFAULT_PREFS = {
|
|
@@ -98,9 +106,9 @@ function renderPrompt(issue, template) {
|
|
|
98
106
|
\u2026\uFF08\u5DF2\u622A\u65AD\uFF09`;
|
|
99
107
|
return text2;
|
|
100
108
|
}
|
|
101
|
-
var
|
|
109
|
+
var PENDING_DRAFT_SENTINEL = "\u2063\u200B";
|
|
102
110
|
function composeHandoffPrompt(prompt, memo) {
|
|
103
|
-
const extra = memo.replace(
|
|
111
|
+
const extra = memo.split(PENDING_DRAFT_SENTINEL).join("").replace(/[\u200b\u200c\u200d\u2060\ufeff]/g, "").replace(/^\n+/, "").trim();
|
|
104
112
|
return extra === "" ? prompt : `${prompt}
|
|
105
113
|
|
|
106
114
|
${extra}`;
|
|
@@ -788,25 +796,68 @@ function GitHubDropZone({ dragging, t, onDrop, onCancel }) {
|
|
|
788
796
|
// src/client/views/Pending.tsx
|
|
789
797
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
790
798
|
var PENDING_CSS = `
|
|
791
|
-
.ghp3-
|
|
792
|
-
.ghp3-
|
|
793
|
-
.ghp3-
|
|
794
|
-
.ghp3-
|
|
795
|
-
.ghp3-
|
|
796
|
-
.ghp3-
|
|
797
|
-
.ghp3-
|
|
799
|
+
.ghp3-rail{position:absolute;top:8px;left:10px;right:10px;z-index:2;display:flex;align-items:flex-start;pointer-events:none}
|
|
800
|
+
.ghp3-card{pointer-events:auto;position:relative;display:inline-flex;align-items:center;gap:10px;box-sizing:border-box;width:240px;max-width:100%;height:64px;padding:0 12px;border:0.5px solid var(--dsw-alias-border-l2,rgba(0,0,0,.12));border-radius:var(--dsw-radius-lg,12px);background:var(--dsw-specific-input-major,var(--dsw-alias-bg-base));color:var(--dsw-alias-label-primary);text-align:left;font-family:inherit;cursor:pointer}
|
|
801
|
+
.ghp3-card:hover{border-color:var(--dsw-alias-border-l3,rgba(0,0,0,.18))}
|
|
802
|
+
.ghp3-card:focus-visible{outline:2px solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:1px}
|
|
803
|
+
.ghp3-icon{flex:none;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--dsw-radius-md,8px);background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 12%,transparent);color:var(--dsw-alias-state-business-primary,#4d6bfe)}
|
|
804
|
+
.ghp3-body{display:flex;flex-direction:column;flex:1;min-width:0;padding:8px 0}
|
|
805
|
+
.ghp3-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:500;line-height:22px;color:var(--dsw-alias-label-primary)}
|
|
806
|
+
.ghp3-meta{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-size:12px;line-height:15px;color:var(--dsw-alias-label-tertiary,#8a9099)}
|
|
807
|
+
.ghp3-remove{position:absolute;top:6px;right:6px;display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;border:none;border-radius:50%;background:var(--dsw-alias-button-contrast-fill,#000000b8);color:var(--dsw-alias-label-primary-inverted,#fff);opacity:0;cursor:pointer;transition:opacity .2s ease-in-out}
|
|
808
|
+
.ghp3-card:hover .ghp3-remove,.ghp3-card:focus-within .ghp3-remove,.ghp3-remove:focus-visible{opacity:1}
|
|
809
|
+
.ghp3-card:hover .ghp3-name,.ghp3-card:focus-within .ghp3-name{padding-right:18px}
|
|
810
|
+
@media (hover:none),(pointer:coarse){.ghp3-remove{opacity:1}}
|
|
811
|
+
@media (prefers-reduced-motion:reduce){.ghp3-remove{transition:none}}
|
|
798
812
|
`.trim();
|
|
799
|
-
function
|
|
813
|
+
function GitHubPendingCard(props) {
|
|
800
814
|
const { card, t, onOpenPanel, onRemove } = props;
|
|
801
815
|
const ref = `${card.repo}#${String(card.number)}`;
|
|
802
|
-
|
|
816
|
+
const state = t(stateLabelKey(card.state));
|
|
817
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "ghp3-rail", "data-github-pending": true, children: [
|
|
803
818
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(StyleSheet, { chunks: [CONTROLS_CSS, PENDING_CSS] }),
|
|
804
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
819
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
820
|
+
"div",
|
|
821
|
+
{
|
|
822
|
+
className: "ghp3-card",
|
|
823
|
+
role: "button",
|
|
824
|
+
tabIndex: 0,
|
|
825
|
+
"aria-label": `${ref} \xB7 ${card.title}`,
|
|
826
|
+
title: `${ref} \xB7 ${card.title}
|
|
827
|
+
${t("pending.tip")}`,
|
|
828
|
+
onClick: onOpenPanel,
|
|
829
|
+
onKeyDown: (event) => {
|
|
830
|
+
if (event.target !== event.currentTarget) return;
|
|
831
|
+
if (event.key !== "Enter" && event.key !== " ") return;
|
|
832
|
+
event.preventDefault();
|
|
833
|
+
onOpenPanel();
|
|
834
|
+
},
|
|
835
|
+
children: [
|
|
836
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "ghp3-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(GitHubIcon, { size: 16 }) }),
|
|
837
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "ghp3-body", children: [
|
|
838
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "ghp3-name", children: ref }),
|
|
839
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "ghp3-meta", children: [
|
|
840
|
+
state,
|
|
841
|
+
" \xB7 ",
|
|
842
|
+
card.title === "" ? t("pending.noTitle") : card.title
|
|
843
|
+
] })
|
|
844
|
+
] }),
|
|
845
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
846
|
+
"button",
|
|
847
|
+
{
|
|
848
|
+
type: "button",
|
|
849
|
+
className: "ghp3-remove",
|
|
850
|
+
"aria-label": t("dock.removeDraft"),
|
|
851
|
+
onClick: (event) => {
|
|
852
|
+
event.stopPropagation();
|
|
853
|
+
onRemove();
|
|
854
|
+
},
|
|
855
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseGlyph, { size: 12 })
|
|
856
|
+
}
|
|
857
|
+
)
|
|
858
|
+
]
|
|
859
|
+
}
|
|
860
|
+
)
|
|
810
861
|
] });
|
|
811
862
|
}
|
|
812
863
|
|
|
@@ -5306,101 +5357,111 @@ function DockHost({ store, t, runtime, sessionId }) {
|
|
|
5306
5357
|
function PendingOverlayHost({ store, t, sessionId, useInput, inputActions }) {
|
|
5307
5358
|
const snapshot = usePanel(store);
|
|
5308
5359
|
const [pending, setPending] = (0, import_react5.useState)(void 0);
|
|
5309
|
-
const markerSeen = (0, import_react5.useRef)(false);
|
|
5310
|
-
const submitSeen = (0, import_react5.useRef)(false);
|
|
5311
5360
|
const sending = (0, import_react5.useRef)(false);
|
|
5312
|
-
const
|
|
5361
|
+
const stagedFor = (0, import_react5.useRef)(void 0);
|
|
5362
|
+
const repairedFor = (0, import_react5.useRef)(void 0);
|
|
5363
|
+
const sawSentinel = (0, import_react5.useRef)(false);
|
|
5313
5364
|
const input = useInput === void 0 ? void 0 : useInput((state) => state);
|
|
5314
5365
|
const latestInput = (0, import_react5.useRef)(input);
|
|
5315
5366
|
latestInput.current = input;
|
|
5367
|
+
const draft = input?.draft ?? "";
|
|
5368
|
+
const card = snapshot.pendingHandoff;
|
|
5316
5369
|
(0, import_react5.useEffect)(() => {
|
|
5317
|
-
|
|
5318
|
-
if (card === void 0) return;
|
|
5319
|
-
markerSeen.current = false;
|
|
5320
|
-
submitSeen.current = false;
|
|
5321
|
-
sending.current = false;
|
|
5322
|
-
setPending(card);
|
|
5323
|
-
if (inputActions !== void 0) inputActions.setDraft(EMPTY_DRAFT_HOLD);
|
|
5324
|
-
}, [snapshot.pendingHandoff, snapshot.pendingHandoffSession, inputActions, sessionId, store]);
|
|
5325
|
-
(0, import_react5.useEffect)(() => {
|
|
5326
|
-
if (pending === void 0 || input === void 0 || sessionId === void 0) return;
|
|
5327
|
-
const text2 = input.draft;
|
|
5328
|
-
if (text2.includes(marker)) {
|
|
5329
|
-
markerSeen.current = true;
|
|
5330
|
-
if (input.phase !== "plain") submitSeen.current = true;
|
|
5331
|
-
}
|
|
5332
|
-
if (markerSeen.current && submitSeen.current) {
|
|
5333
|
-
void store.linkIssue(pending, sessionId);
|
|
5370
|
+
if (card === void 0) {
|
|
5334
5371
|
setPending(void 0);
|
|
5335
|
-
markerSeen.current = false;
|
|
5336
|
-
submitSeen.current = false;
|
|
5337
|
-
sending.current = false;
|
|
5338
5372
|
return;
|
|
5339
5373
|
}
|
|
5340
|
-
if (
|
|
5341
|
-
|
|
5342
|
-
markerSeen.current = false;
|
|
5343
|
-
submitSeen.current = false;
|
|
5344
|
-
sending.current = false;
|
|
5374
|
+
if (draft.includes(PENDING_DRAFT_SENTINEL)) {
|
|
5375
|
+
if (pending?.id !== card.id) setPending(card);
|
|
5345
5376
|
return;
|
|
5346
5377
|
}
|
|
5347
|
-
|
|
5348
|
-
|
|
5349
|
-
|
|
5350
|
-
|
|
5351
|
-
|
|
5378
|
+
const target = snapshot.pendingHandoffSession;
|
|
5379
|
+
if (target !== void 0 && sessionId !== void 0 && target !== sessionId) return;
|
|
5380
|
+
const key = `${sessionId ?? "no-session"}:${card.id}`;
|
|
5381
|
+
if (stagedFor.current === key) return;
|
|
5382
|
+
stagedFor.current = key;
|
|
5383
|
+
setPending(card);
|
|
5384
|
+
if (inputActions !== void 0) {
|
|
5385
|
+
inputActions.setDraft(draft === "" ? PENDING_DRAFT_SENTINEL : `${PENDING_DRAFT_SENTINEL}${draft}`);
|
|
5352
5386
|
}
|
|
5353
|
-
}, [
|
|
5387
|
+
}, [card, draft, inputActions, pending?.id, sessionId, snapshot.pendingHandoffSession]);
|
|
5388
|
+
(0, import_react5.useEffect)(() => {
|
|
5389
|
+
if (draft.includes(PENDING_DRAFT_SENTINEL)) {
|
|
5390
|
+
sawSentinel.current = true;
|
|
5391
|
+
return;
|
|
5392
|
+
}
|
|
5393
|
+
if (pending === void 0 || inputActions === void 0 || sending.current) return;
|
|
5394
|
+
if (draft === "") return;
|
|
5395
|
+
if (repairedFor.current === draft) return;
|
|
5396
|
+
repairedFor.current = draft;
|
|
5397
|
+
inputActions.setDraft(`${PENDING_DRAFT_SENTINEL}${draft}`);
|
|
5398
|
+
}, [draft, inputActions, pending]);
|
|
5399
|
+
(0, import_react5.useEffect)(() => {
|
|
5400
|
+
if (pending === void 0 || draft !== "" || !sawSentinel.current || sending.current) return;
|
|
5401
|
+
setPending(void 0);
|
|
5402
|
+
}, [draft, pending]);
|
|
5403
|
+
(0, import_react5.useEffect)(() => {
|
|
5404
|
+
if (pending === void 0) return;
|
|
5405
|
+
const anchor = document.querySelector("[data-github-pending]");
|
|
5406
|
+
const composerCard = anchor?.closest("[data-composer-card]");
|
|
5407
|
+
if (!(composerCard instanceof HTMLElement)) return;
|
|
5408
|
+
const previous = composerCard.style.paddingTop;
|
|
5409
|
+
composerCard.style.paddingTop = "84px";
|
|
5410
|
+
return () => {
|
|
5411
|
+
composerCard.style.paddingTop = previous;
|
|
5412
|
+
};
|
|
5413
|
+
}, [pending]);
|
|
5354
5414
|
(0, import_react5.useEffect)(() => {
|
|
5355
5415
|
if (pending === void 0 || inputActions === void 0) return;
|
|
5356
5416
|
const composerCard = () => {
|
|
5357
|
-
const
|
|
5358
|
-
|
|
5359
|
-
return anchor?.parentElement ?? null;
|
|
5417
|
+
const anchor = document.querySelector("[data-github-pending]");
|
|
5418
|
+
return anchor?.closest("[data-composer-card]") ?? null;
|
|
5360
5419
|
};
|
|
5361
|
-
const submitButton = (
|
|
5362
|
-
const buttons = [...
|
|
5420
|
+
const submitButton = (cardEl) => {
|
|
5421
|
+
const buttons = [...cardEl.querySelectorAll("button")];
|
|
5363
5422
|
return buttons.find((button) => /_primary(\s|$)/.test(String(button.className))) ?? buttons[buttons.length - 1];
|
|
5364
5423
|
};
|
|
5365
5424
|
const send = () => {
|
|
5366
5425
|
if (sending.current) return;
|
|
5367
5426
|
sending.current = true;
|
|
5368
|
-
const
|
|
5369
|
-
const
|
|
5427
|
+
const currentCard = pending;
|
|
5428
|
+
const memo = latestInput.current?.draft ?? "";
|
|
5429
|
+
const composed = composeHandoffPrompt(store.promptFor(currentCard), memo);
|
|
5370
5430
|
inputActions.setDraft(composed);
|
|
5371
5431
|
window.setTimeout(() => {
|
|
5372
5432
|
inputActions.submit();
|
|
5373
5433
|
window.setTimeout(() => {
|
|
5374
5434
|
const after = latestInput.current?.draft ?? "";
|
|
5375
|
-
|
|
5376
|
-
|
|
5435
|
+
if (after.trim() !== "") {
|
|
5436
|
+
const restore = memo === "" ? PENDING_DRAFT_SENTINEL : memo;
|
|
5437
|
+
if (!restore.includes(PENDING_DRAFT_SENTINEL)) inputActions.setDraft(PENDING_DRAFT_SENTINEL);
|
|
5438
|
+
else inputActions.setDraft(restore);
|
|
5377
5439
|
sending.current = false;
|
|
5378
5440
|
return;
|
|
5379
5441
|
}
|
|
5380
|
-
if (sessionId !== void 0) void store.linkIssue(
|
|
5442
|
+
if (sessionId !== void 0) void store.linkIssue(currentCard, sessionId);
|
|
5443
|
+
store.clearPendingHandoff();
|
|
5381
5444
|
setPending(void 0);
|
|
5382
|
-
markerSeen.current = false;
|
|
5383
|
-
submitSeen.current = false;
|
|
5384
5445
|
sending.current = false;
|
|
5385
5446
|
}, 700);
|
|
5386
5447
|
}, 16);
|
|
5387
5448
|
};
|
|
5388
5449
|
const onClick = (event) => {
|
|
5389
|
-
const
|
|
5390
|
-
if (
|
|
5450
|
+
const cardEl = composerCard();
|
|
5451
|
+
if (cardEl === null) return;
|
|
5391
5452
|
const button = event.target?.closest("button");
|
|
5392
5453
|
if (button === null || button === void 0 || button.closest("[data-github-pending]") !== null) return;
|
|
5393
|
-
if (button !== submitButton(
|
|
5454
|
+
if (button !== submitButton(cardEl)) return;
|
|
5394
5455
|
event.preventDefault();
|
|
5395
5456
|
event.stopImmediatePropagation();
|
|
5396
5457
|
send();
|
|
5397
5458
|
};
|
|
5398
5459
|
const onKeyDown = (event) => {
|
|
5399
5460
|
if (event.key !== "Enter" || event.shiftKey || event.isComposing) return;
|
|
5400
|
-
const
|
|
5401
|
-
if (
|
|
5461
|
+
const cardEl = composerCard();
|
|
5462
|
+
if (cardEl === null) return;
|
|
5402
5463
|
const target = event.target;
|
|
5403
|
-
if (target === null || !
|
|
5464
|
+
if (target === null || !cardEl.contains(target) || target.closest("[data-github-pending]") !== null) return;
|
|
5404
5465
|
event.preventDefault();
|
|
5405
5466
|
event.stopImmediatePropagation();
|
|
5406
5467
|
send();
|
|
@@ -5411,20 +5472,18 @@ function PendingOverlayHost({ store, t, sessionId, useInput, inputActions }) {
|
|
|
5411
5472
|
document.removeEventListener("click", onClick, true);
|
|
5412
5473
|
document.removeEventListener("keydown", onKeyDown, true);
|
|
5413
5474
|
};
|
|
5414
|
-
}, [pending, inputActions, store]);
|
|
5475
|
+
}, [pending, inputActions, store, sessionId]);
|
|
5415
5476
|
if (pending === void 0) return null;
|
|
5416
5477
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
5417
|
-
|
|
5478
|
+
GitHubPendingCard,
|
|
5418
5479
|
{
|
|
5419
5480
|
card: pending,
|
|
5420
5481
|
t,
|
|
5421
5482
|
onOpenPanel: () => store.openInPanel(pending),
|
|
5422
5483
|
onRemove: () => {
|
|
5423
|
-
setPending(void 0);
|
|
5424
|
-
markerSeen.current = false;
|
|
5425
|
-
submitSeen.current = false;
|
|
5426
|
-
sending.current = false;
|
|
5427
5484
|
inputActions?.setDraft("");
|
|
5485
|
+
setPending(void 0);
|
|
5486
|
+
store.clearPendingHandoff();
|
|
5428
5487
|
}
|
|
5429
5488
|
}
|
|
5430
5489
|
);
|
|
@@ -5584,6 +5643,7 @@ var en = {
|
|
|
5584
5643
|
"drop.cancel": "Cancel",
|
|
5585
5644
|
"pending.hint": "Sent with the prompt; it becomes the linked issue chip below.",
|
|
5586
5645
|
"pending.tip": "On send this card becomes the issue prompt; anything you type is appended.",
|
|
5646
|
+
"pending.noTitle": "GitHub issue",
|
|
5587
5647
|
"dock.loading": "Loading issue details\u2026",
|
|
5588
5648
|
"dock.removeDraft": "Clear draft",
|
|
5589
5649
|
"dock.unlink": "Unlink this session",
|
|
@@ -5750,6 +5810,7 @@ var zh = {
|
|
|
5750
5810
|
"drop.cancel": "\u53D6\u6D88",
|
|
5751
5811
|
"pending.hint": "\u968F\u63D0\u793A\u8BCD\u4E00\u8D77\u53D1\u9001\uFF0C\u53D1\u9001\u540E\u53D8\u6210\u4E0B\u65B9\u5DF2\u5173\u8054 chip\u3002",
|
|
5752
5812
|
"pending.tip": "\u53D1\u9001\u65F6\u8FD9\u5F20\u5361\u7247\u4F1A\u81EA\u52A8\u8F6C\u6210 Issue \u63D0\u793A\u8BCD\uFF0C\u4F60\u8F93\u5165\u7684\u5185\u5BB9\u4F1A\u9644\u5728\u540E\u9762\u3002",
|
|
5813
|
+
"pending.noTitle": "GitHub Issue",
|
|
5753
5814
|
"dock.loading": "\u6B63\u5728\u52A0\u8F7D Issue\u2026",
|
|
5754
5815
|
"dock.removeDraft": "\u6E05\u7A7A\u8349\u7A3F",
|
|
5755
5816
|
"dock.unlink": "\u89E3\u9664\u672C Session \u5173\u8054",
|
|
@@ -6491,12 +6552,14 @@ var GitHubStore = class {
|
|
|
6491
6552
|
return;
|
|
6492
6553
|
}
|
|
6493
6554
|
const workspaceId = this.workspaceForHandoff(card.repo);
|
|
6494
|
-
const prompt = this.promptFor(card);
|
|
6495
6555
|
void (async () => {
|
|
6496
6556
|
try {
|
|
6497
6557
|
const sessionId = await uiWorkspace.connectWorkspace(workspaceId);
|
|
6498
6558
|
this.update({ pendingHandoff: card, pendingHandoffSession: sessionId });
|
|
6499
|
-
uiWorkspace.startSession(workspaceId, {
|
|
6559
|
+
uiWorkspace.startSession(workspaceId, {
|
|
6560
|
+
prompt: PENDING_DRAFT_SENTINEL,
|
|
6561
|
+
whenDraftExists: "replace"
|
|
6562
|
+
});
|
|
6500
6563
|
} catch (error) {
|
|
6501
6564
|
this.update({ error: asPanelError(error) });
|
|
6502
6565
|
}
|
|
@@ -6709,6 +6772,10 @@ var GitHubStore = class {
|
|
|
6709
6772
|
}
|
|
6710
6773
|
/**
|
|
6711
6774
|
* Take the pending handoff when it belongs to this Session.
|
|
6775
|
+
*
|
|
6776
|
+
* This is non-destructive: the card stays in the store until it is sent or
|
|
6777
|
+
* explicitly removed, so a composer remount (Workspace switch, Session
|
|
6778
|
+
* transfer) can recover it from the draft sentinel.
|
|
6712
6779
|
* @param sessionId - the Session whose dock asks; a handoff stamped for a
|
|
6713
6780
|
* different Session is left for that one.
|
|
6714
6781
|
* @returns the issue to stage, or `undefined`.
|
|
@@ -6718,9 +6785,13 @@ var GitHubStore = class {
|
|
|
6718
6785
|
if (card === void 0) return void 0;
|
|
6719
6786
|
const target = this.snapshot.pendingHandoffSession;
|
|
6720
6787
|
if (target !== void 0 && sessionId !== void 0 && target !== sessionId) return void 0;
|
|
6721
|
-
this.update({ pendingHandoff: void 0, pendingHandoffSession: void 0 });
|
|
6722
6788
|
return card;
|
|
6723
6789
|
}
|
|
6790
|
+
/** Drop the staged card once it was sent or explicitly removed. */
|
|
6791
|
+
clearPendingHandoff() {
|
|
6792
|
+
if (this.snapshot.pendingHandoff === void 0 && this.snapshot.pendingHandoffSession === void 0) return;
|
|
6793
|
+
this.update({ pendingHandoff: void 0, pendingHandoffSession: void 0 });
|
|
6794
|
+
}
|
|
6724
6795
|
/** Render the profile's handoff prompt for one issue. */
|
|
6725
6796
|
promptFor(card) {
|
|
6726
6797
|
return renderPrompt(card, this.snapshot.prefs.promptTemplate);
|
package/lib/prompt.js
CHANGED
|
@@ -68,8 +68,19 @@ export function renderPrompt(issue, template) {
|
|
|
68
68
|
return `${text.slice(0, 7_990)}\n…(已截断)`;
|
|
69
69
|
return text;
|
|
70
70
|
}
|
|
71
|
-
/**
|
|
72
|
-
|
|
71
|
+
/**
|
|
72
|
+
* The invisible draft marker that keeps the native send enabled and lets the
|
|
73
|
+
* pending card survive a Session/Workspace transfer.
|
|
74
|
+
*
|
|
75
|
+
* DSH transfers the draft text when the composer switches Workspace, so keeping
|
|
76
|
+
* this marker in the draft is what lets the new Session's composer find the card
|
|
77
|
+
* again. `U+2063` (invisible separator) plus a zero-width space is invisible and
|
|
78
|
+
* non-whitespace, so the composer treats the draft as occupied without showing
|
|
79
|
+
* characters.
|
|
80
|
+
*/
|
|
81
|
+
export const PENDING_DRAFT_SENTINEL = '\u2063\u200b';
|
|
82
|
+
/** Backwards-compatible name for the marker the old overlay used. */
|
|
83
|
+
export const EMPTY_DRAFT_HOLD = PENDING_DRAFT_SENTINEL;
|
|
73
84
|
/**
|
|
74
85
|
* Compose the message a pending issue card sends.
|
|
75
86
|
*
|
|
@@ -81,7 +92,11 @@ export const EMPTY_DRAFT_HOLD = '\u200b\n';
|
|
|
81
92
|
* @returns the text to submit.
|
|
82
93
|
*/
|
|
83
94
|
export function composeHandoffPrompt(prompt, memo) {
|
|
84
|
-
const extra = memo
|
|
95
|
+
const extra = memo
|
|
96
|
+
.split(PENDING_DRAFT_SENTINEL).join('')
|
|
97
|
+
.replace(/[\u200b\u200c\u200d\u2060\ufeff]/g, '')
|
|
98
|
+
.replace(/^\n+/, '')
|
|
99
|
+
.trim();
|
|
85
100
|
return extra === '' ? prompt : `${prompt}\n\n${extra}`;
|
|
86
101
|
}
|
|
87
102
|
//# sourceMappingURL=prompt.js.map
|
package/lib/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|
package/lib/types/prompt.d.ts
CHANGED
|
@@ -14,8 +14,19 @@ import type { PromptIssue } from './github/types.ts';
|
|
|
14
14
|
* @returns the prompt text, trimmed to a size the composer handles comfortably.
|
|
15
15
|
*/
|
|
16
16
|
export declare function renderPrompt(issue: PromptIssue, template: string): string;
|
|
17
|
-
/**
|
|
18
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The invisible draft marker that keeps the native send enabled and lets the
|
|
19
|
+
* pending card survive a Session/Workspace transfer.
|
|
20
|
+
*
|
|
21
|
+
* DSH transfers the draft text when the composer switches Workspace, so keeping
|
|
22
|
+
* this marker in the draft is what lets the new Session's composer find the card
|
|
23
|
+
* again. `U+2063` (invisible separator) plus a zero-width space is invisible and
|
|
24
|
+
* non-whitespace, so the composer treats the draft as occupied without showing
|
|
25
|
+
* characters.
|
|
26
|
+
*/
|
|
27
|
+
export declare const PENDING_DRAFT_SENTINEL = "\u2063\u200B";
|
|
28
|
+
/** Backwards-compatible name for the marker the old overlay used. */
|
|
29
|
+
export declare const EMPTY_DRAFT_HOLD = "\u2063\u200B";
|
|
19
30
|
/**
|
|
20
31
|
* Compose the message a pending issue card sends.
|
|
21
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AA0CpD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAezE;AAED,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AA0CpD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAezE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,iBAAiB,CAAA;AAEpD,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,iBAAyB,CAAA;AAEtD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOzE"}
|
package/lib/types/vm.d.ts
CHANGED
|
@@ -276,6 +276,16 @@ export type PrefsPatch = {
|
|
|
276
276
|
export declare const DEFAULT_PROMPT_TEMPLATE: string;
|
|
277
277
|
/** Default preferences for a fresh install: everything assigned to me that is open. */
|
|
278
278
|
export declare const DEFAULT_PREFS: Prefs;
|
|
279
|
+
/**
|
|
280
|
+
* Recognize the pre-table prompt from earlier versions and upgrade it once.
|
|
281
|
+
*
|
|
282
|
+
* The old default and close edits of it share this shape: a `处理 GitHub Issue:`
|
|
283
|
+
* headline followed by `状态:` and no Markdown table. A genuinely custom prompt
|
|
284
|
+
* with a different shape is left untouched.
|
|
285
|
+
* @param saved - the stored template.
|
|
286
|
+
* @returns the table template for a legacy prompt, otherwise the stored value.
|
|
287
|
+
*/
|
|
288
|
+
export declare function migratePromptTemplate(saved: string | undefined): string | undefined;
|
|
279
289
|
/** Build preferences from the deployment config and whatever was saved. */
|
|
280
290
|
export declare function mergePrefs(saved: Partial<Prefs> | undefined, configHandoffMode: string | undefined, configTemplate: string | undefined): Prefs;
|
|
281
291
|
//# sourceMappingURL=vm.d.ts.map
|
package/lib/types/vm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vm.d.ts","sourceRoot":"","sources":["../../src/vm.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"vm.d.ts","sourceRoot":"","sources":["../../src/vm.ts"],"names":[],"mappings":"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"}
|
package/lib/vm.js
CHANGED
|
@@ -10,10 +10,18 @@
|
|
|
10
10
|
/** The prompt a handoff writes into the composer. */
|
|
11
11
|
export const DEFAULT_PROMPT_TEMPLATE = [
|
|
12
12
|
'处理 GitHub Issue:{{repo}}#{{number}} {{title}}',
|
|
13
|
+
'',
|
|
13
14
|
'链接:{{url}}',
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
15
|
+
'',
|
|
16
|
+
'| 字段 | 值 |',
|
|
17
|
+
'| --- | --- |',
|
|
18
|
+
'| 状态 | {{state}} |',
|
|
19
|
+
'| 里程碑 | {{milestone}} |',
|
|
20
|
+
'| 优先级 | {{priority}} |',
|
|
21
|
+
'| 指派 | {{assignees}} |',
|
|
22
|
+
'| 标签 | {{labels}} |',
|
|
23
|
+
'| 关联 PR | {{prs}} |',
|
|
24
|
+
'',
|
|
17
25
|
'要求:先读 Issue 正文与关联 PR,确认验收标准后再动手;用 subagent_codex 执行具体改动,完成后跑相关测试并回报。',
|
|
18
26
|
].join('\n');
|
|
19
27
|
/** Default preferences for a fresh install: everything assigned to me that is open. */
|
|
@@ -28,6 +36,24 @@ export const DEFAULT_PREFS = {
|
|
|
28
36
|
promptTemplate: DEFAULT_PROMPT_TEMPLATE,
|
|
29
37
|
pinned: undefined,
|
|
30
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* Recognize the pre-table prompt from earlier versions and upgrade it once.
|
|
41
|
+
*
|
|
42
|
+
* The old default and close edits of it share this shape: a `处理 GitHub Issue:`
|
|
43
|
+
* headline followed by `状态:` and no Markdown table. A genuinely custom prompt
|
|
44
|
+
* with a different shape is left untouched.
|
|
45
|
+
* @param saved - the stored template.
|
|
46
|
+
* @returns the table template for a legacy prompt, otherwise the stored value.
|
|
47
|
+
*/
|
|
48
|
+
export function migratePromptTemplate(saved) {
|
|
49
|
+
if (saved === undefined || saved === '')
|
|
50
|
+
return saved;
|
|
51
|
+
if (saved.includes('| 字段 |'))
|
|
52
|
+
return saved;
|
|
53
|
+
if (!saved.startsWith('处理 GitHub Issue:') || !saved.includes('状态:'))
|
|
54
|
+
return saved;
|
|
55
|
+
return DEFAULT_PROMPT_TEMPLATE;
|
|
56
|
+
}
|
|
31
57
|
/** Build preferences from the deployment config and whatever was saved. */
|
|
32
58
|
export function mergePrefs(saved, configHandoffMode, configTemplate) {
|
|
33
59
|
const handoff = saved?.handoffMode
|
|
@@ -36,7 +62,7 @@ export function mergePrefs(saved, configHandoffMode, configTemplate) {
|
|
|
36
62
|
...DEFAULT_PREFS,
|
|
37
63
|
...saved,
|
|
38
64
|
handoffMode: handoff,
|
|
39
|
-
promptTemplate: saved?.promptTemplate
|
|
65
|
+
promptTemplate: migratePromptTemplate(saved?.promptTemplate)
|
|
40
66
|
?? (configTemplate === undefined || configTemplate === '' ? DEFAULT_PROMPT_TEMPLATE : configTemplate),
|
|
41
67
|
};
|
|
42
68
|
}
|
package/lib/vm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vm.js","sourceRoot":"","sources":["../src/vm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoSH,qDAAqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,+CAA+C;IAC/C,YAAY;IACZ,
|
|
1
|
+
{"version":3,"file":"vm.js","sourceRoot":"","sources":["../src/vm.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoSH,qDAAqD;AACrD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,+CAA+C;IAC/C,EAAE;IACF,YAAY;IACZ,EAAE;IACF,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IACxB,qBAAqB;IACrB,qBAAqB;IACrB,EAAE;IACF,sEAAsE;CACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEZ,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAU;IAClC,GAAG,EAAE,SAAS;IACd,SAAS,EAAE,SAAS;IACpB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,OAAO;IACpB,cAAc,EAAE,uBAAuB;IACvC,MAAM,EAAE,SAAS;CAClB,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,CAAA;IACrD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAA;IAC1C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACjF,OAAO,uBAAuB,CAAA;AAChC,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU,CACxB,KAAiC,EACjC,iBAAqC,EACrC,cAAkC;IAElC,MAAM,OAAO,GAAG,KAAK,EAAE,WAAW;WAC7B,CAAC,iBAAiB,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACtD,OAAO;QACL,GAAG,aAAa;QAChB,GAAG,KAAK;QACR,WAAW,EAAE,OAAO;QACpB,cAAc,EAAE,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC;eACvD,CAAC,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,cAAc,CAAC;KACxG,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-github-issues",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Browse GitHub issues, milestones, labels, priority, and linked PR status inside DeepSeek Harness, and hand an issue to the agent by dragging it into the composer.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dsh-plugin",
|