dsh-plugin-github-issues 0.0.0-stage → 0.4.7
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/LICENSE +21 -0
- package/README.md +147 -2
- package/cordis.patch.yml +20 -0
- package/docs/README.zh.md +134 -0
- package/icon.svg +9 -0
- package/lib/client.js +3243 -0
- package/lib/controller.js +289 -0
- package/lib/controller.js.map +1 -0
- package/lib/github/auth.js +249 -0
- package/lib/github/auth.js.map +1 -0
- package/lib/github/client.js +767 -0
- package/lib/github/client.js.map +1 -0
- package/lib/github/queries.js +479 -0
- package/lib/github/queries.js.map +1 -0
- package/lib/github/state.js +186 -0
- package/lib/github/state.js.map +1 -0
- package/lib/github/types.js +29 -0
- package/lib/github/types.js.map +1 -0
- package/lib/github/vm.js +362 -0
- package/lib/github/vm.js.map +1 -0
- package/lib/index.js +65 -0
- package/lib/index.js.map +1 -0
- package/lib/prompt.js +87 -0
- package/lib/prompt.js.map +1 -0
- package/lib/remote-methods.js +32 -0
- package/lib/remote-methods.js.map +1 -0
- package/lib/types/controller.d.ts +105 -0
- package/lib/types/controller.d.ts.map +1 -0
- package/lib/types/github/auth.d.ts +52 -0
- package/lib/types/github/auth.d.ts.map +1 -0
- package/lib/types/github/client.d.ts +40 -0
- package/lib/types/github/client.d.ts.map +1 -0
- package/lib/types/github/queries.d.ts +172 -0
- package/lib/types/github/queries.d.ts.map +1 -0
- package/lib/types/github/state.d.ts +51 -0
- package/lib/types/github/state.d.ts.map +1 -0
- package/lib/types/github/types.d.ts +79 -0
- package/lib/types/github/types.d.ts.map +1 -0
- package/lib/types/github/vm.d.ts +260 -0
- package/lib/types/github/vm.d.ts.map +1 -0
- package/lib/types/index.d.ts +46 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/prompt.d.ts +30 -0
- package/lib/types/prompt.d.ts.map +1 -0
- package/lib/types/remote-methods.d.ts +32 -0
- package/lib/types/remote-methods.d.ts.map +1 -0
- package/lib/types/vm.d.ts +264 -0
- package/lib/types/vm.d.ts.map +1 -0
- package/lib/types/workspace.d.ts +43 -0
- package/lib/types/workspace.d.ts.map +1 -0
- package/lib/vm.js +42 -0
- package/lib/vm.js.map +1 -0
- package/lib/workspace.js +57 -0
- package/lib/workspace.js.map +1 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +97 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kanner
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,148 @@
|
|
|
1
|
-
#
|
|
1
|
+
# dsh-plugin-github-issues
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
English | [中文](docs/README.zh.md)
|
|
4
|
+
|
|
5
|
+
[](https://github.com/ckanner/dsh-plugin-github-issues/actions/workflows/ci.yml)
|
|
6
|
+
[](https://github.com/ckanner/dsh-plugin-github-issues/actions/workflows/release.yml)
|
|
7
|
+
[](https://www.npmjs.com/package/dsh-plugin-github-issues)
|
|
8
|
+
[](LICENSE)
|
|
9
|
+
|
|
10
|
+
Adds a GitHub Issues work surface to [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness):
|
|
11
|
+
browse issues from your repositories and Projects v2 boards, read their details, and hand one to the
|
|
12
|
+
agent. A handoff opens a new Session in the matching Workspace and stages the issue as an
|
|
13
|
+
attachment-style card inside the composer; sending turns that card into the issue's task prompt.
|
|
14
|
+
Handed-over issues show which Sessions own them, can be entered, and can be unlinked; one issue may be
|
|
15
|
+
worked in several Sessions.
|
|
16
|
+
|
|
17
|
+
It is **read-only**: the plugin never writes to GitHub.
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
From the npm registry (recommended — the package ships the built Host half and browser bundle):
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
dsh plugin --profile <name> add dsh-plugin-github-issues
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Pin a version when you want reproducible profiles:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
dsh plugin --profile <name> add dsh-plugin-github-issues@0.4.7
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Restart the harness afterwards: a profile is composed at startup. Remove it with:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
dsh plugin --profile <name> remove dsh-plugin-github-issues
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
From a checkout (a linked install: rebuild and restart after edits):
|
|
40
|
+
|
|
41
|
+
```sh
|
|
42
|
+
npm install
|
|
43
|
+
npm run build
|
|
44
|
+
dsh plugin --profile <name> add /path/to/dsh-plugin-github-issues
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Every [release](https://github.com/ckanner/dsh-plugin-github-issues/releases) also carries a packed
|
|
48
|
+
tarball (`dsh-plugin-github-issues.tgz`), installable by path.
|
|
49
|
+
|
|
50
|
+
## Requirements
|
|
51
|
+
|
|
52
|
+
- DSH Desktop with a Web GUI (developed and verified against `0.2.1-rc.3`).
|
|
53
|
+
- A [`gh`](https://cli.github.com/) CLI logged in for the GitHub host you use:
|
|
54
|
+
`gh auth login`. The token stays in the OS keychain and is never written into this package's config.
|
|
55
|
+
- Projects v2 support additionally needs the `read:project` scope, once:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
gh auth refresh -h github.com -s read:project
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Without it the panel still works; the project picker explains what is missing.
|
|
62
|
+
|
|
63
|
+
## What you get
|
|
64
|
+
|
|
65
|
+
| Surface | Where | What |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| GitHub panel | left rail icon → main panel | organization → project/repository → assignee → state cascade (remembered across restarts), search, list, and a detail pane (body, milestone progress, labels, priority, assignees, linked/mentioned PRs with checks and review state) |
|
|
68
|
+
| Issues right column | right sidebar tab | the same filtered issue list beside the Conversation, for drag-and-drop handoff |
|
|
69
|
+
| Composer card | inside the input box | the staged issue: `[GitHub] owner/repo#number ×`. Type extra instructions or nothing; send converts the card into the issue prompt |
|
|
70
|
+
| Linked chip | composer dock under the input | the Session's linked issue: state dot (green open / red closed) + `owner/repo#number`; click for a detail popover, remove to unlink |
|
|
71
|
+
| 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 |
|
|
72
|
+
| GitHub settings | Settings → GitHub | `gh` auth status and scopes, handoff behavior, prompt template |
|
|
73
|
+
|
|
74
|
+
## Use
|
|
75
|
+
|
|
76
|
+
1. Click the **GitHub** icon in the left rail.
|
|
77
|
+
2. Pick an organization, a Projects v2 board or a repository, then an assignee/state filter. The
|
|
78
|
+
selection is remembered in the profile's UI state (not in the plugin config).
|
|
79
|
+
3. Click a row for the detail pane. `owner/repo#number` opens GitHub in the browser.
|
|
80
|
+
4. Hand an issue over:
|
|
81
|
+
- **One-click** in the detail: **Hand to agent** / **New session for this issue** opens a new
|
|
82
|
+
Session in the matching Workspace with the issue staged inside the composer.
|
|
83
|
+
- **Drag** a row from the right-column **Issues** tab into the composer: it stages into the current
|
|
84
|
+
Session.
|
|
85
|
+
- Type whatever context you want, then send. The card is converted into the issue's task prompt
|
|
86
|
+
(the template from Settings) plus your text; the issue ↔ Session link is recorded at that moment.
|
|
87
|
+
5. The linked chip appears under the composer. Reopen the issue later to enter that Session, start
|
|
88
|
+
another one, or unlink it. Unlinking never deletes the Session.
|
|
89
|
+
6. Open the right column from the panel header (**Right column**) or from the right sidebar's own add
|
|
90
|
+
menu (page type **Issues**).
|
|
91
|
+
|
|
92
|
+
### Which Session does a handoff use?
|
|
93
|
+
|
|
94
|
+
- If the issue is already linked: **enter Session** opens the most recent link; the linked-Session list
|
|
95
|
+
lets you enter any of them.
|
|
96
|
+
- A new handoff picks a Workspace by this priority: the Workspace of the current Session → the
|
|
97
|
+
Workspace of a Session already linked to the same repository → a Workspace whose directory/title
|
|
98
|
+
matches the repository name → the Host's current/most-recent Workspace.
|
|
99
|
+
|
|
100
|
+
### Prompt template
|
|
101
|
+
|
|
102
|
+
Settings → GitHub → Prompt template. Variables: `{{repo}}`, `{{number}}`, `{{title}}`, `{{url}}`,
|
|
103
|
+
`{{state}}`, `{{milestone}}`, `{{priority}}`, `{{assignees}}`, `{{labels}}`, `{{prs}}`.
|
|
104
|
+
|
|
105
|
+
## Privacy and tokens
|
|
106
|
+
|
|
107
|
+
- The token is resolved by the Host process from `gh` and lives only in memory. It never reaches the
|
|
108
|
+
page, the plugin config, or logs.
|
|
109
|
+
- GitHub requests are made by the Host; the browser only receives view models.
|
|
110
|
+
- Persisted UI state is limited to filter preferences, the prompt template, and issue ↔ Session links,
|
|
111
|
+
stored at `$DSH_HOME/github-issues/state.json` (mode `0600`).
|
|
112
|
+
- The plugin is read-only toward GitHub.
|
|
113
|
+
|
|
114
|
+
## Limitations
|
|
115
|
+
|
|
116
|
+
- Read-only: no comments, label/assignee/state writes.
|
|
117
|
+
- Projects v2 needs `read:project`; priority falls back project field → organization Issue Field →
|
|
118
|
+
`P0`–`P4` labels.
|
|
119
|
+
- The list polls every 60–120 s while visible; use **Refresh** for an immediate update.
|
|
120
|
+
- The detail pane first asks for the body only and lazily loads cross-referenced PRs, so the slow
|
|
121
|
+
timeline never blocks the pane.
|
|
122
|
+
- Converting the composer card into the prompt intercepts the native send button / Enter, which relies
|
|
123
|
+
on the composer DOM of the verified DSH version; re-check after a DSH upgrade.
|
|
124
|
+
- Workspace matching for a new handoff is the heuristic priority above, not a fixed mapping.
|
|
125
|
+
|
|
126
|
+
## Development
|
|
127
|
+
|
|
128
|
+
```sh
|
|
129
|
+
npm install
|
|
130
|
+
npm run typecheck # Host + browser halves
|
|
131
|
+
npm test # node --test (queries, VM mapping, prompt, state, workspace rules)
|
|
132
|
+
npm run test:render # offline react-dom/server smoke of the panel, dock, sidebar, drop target
|
|
133
|
+
npm run build # Host (tsc) + browser bundle (esbuild)
|
|
134
|
+
npm run verify:client # loader contract + slot/Remote registration of the browser bundle
|
|
135
|
+
npm run verify:package # what npm publish would ship (host, client, bundle patch, locale, icon)
|
|
136
|
+
npm run check # all of the above, in order
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Releases
|
|
140
|
+
|
|
141
|
+
`ci.yml` runs on every push and pull request. `release.yml` runs on a `v*` tag (or by hand): it repeats
|
|
142
|
+
every CI check, publishes the new version to npm (a repository `NPM_TOKEN` secret, or npm trusted
|
|
143
|
+
publishing), and records a GitHub Release carrying `dsh-plugin-github-issues.tgz`. Maintainer notes:
|
|
144
|
+
[docs/RELEASING.md](https://github.com/ckanner/dsh-plugin-github-issues/blob/main/docs/RELEASING.md).
|
|
145
|
+
|
|
146
|
+
## License
|
|
147
|
+
|
|
148
|
+
MIT © Kanner
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# The dsh-plugin-github-issues bundle patch.
|
|
2
|
+
#
|
|
3
|
+
# One row: the plugin that owns the GitHub Issues panel, the composer dock
|
|
4
|
+
# handoff strip, and the GitHub settings page. `authMode: gh` reuses the
|
|
5
|
+
# already-authenticated `gh` CLI (the token never leaves the Host process and
|
|
6
|
+
# is never written to this file). `stateDir` holds only non-secret UI state.
|
|
7
|
+
#
|
|
8
|
+
# Projects v2 additionally needs `read:project` on the token — the settings page
|
|
9
|
+
# shows the exact one-line command (`gh auth refresh -h github.com -s read:project`)
|
|
10
|
+
# instead of the plugin escalating auth itself.
|
|
11
|
+
|
|
12
|
+
- insert:
|
|
13
|
+
- id: github-issues
|
|
14
|
+
name: 'dsh-plugin-github-issues'
|
|
15
|
+
config:
|
|
16
|
+
authMode: gh
|
|
17
|
+
host: github.com
|
|
18
|
+
handoffMode: draft
|
|
19
|
+
pollSeconds: 90
|
|
20
|
+
stateDir: !!js (process.env.DSH_HOME ?? process.env.HOME + '/.dsh') + '/github-issues'
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# dsh-plugin-github-issues
|
|
2
|
+
|
|
3
|
+
[English](../README.md) | 中文
|
|
4
|
+
|
|
5
|
+
[](https://github.com/ckanner/dsh-plugin-github-issues/actions/workflows/ci.yml)
|
|
6
|
+
[](https://www.npmjs.com/package/dsh-plugin-github-issues)
|
|
7
|
+
|
|
8
|
+
给 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 增加一个 GitHub Issue 工作区:
|
|
9
|
+
按组织 / Projects v2 项目 / 仓库浏览 Issue,查看详情,并把 Issue 交给 Agent。交办会在匹配的
|
|
10
|
+
Workspace 里新开一个 Session,并在输入框内以"附件卡片"的形式暂存这个 Issue;点击发送时卡片会
|
|
11
|
+
转成 Issue 的提示词。已交办的 Issue 会显示处理它的 Session,可以进入,也可以解除关联;同一个
|
|
12
|
+
Issue 可以关联多个 Session。
|
|
13
|
+
|
|
14
|
+
插件对 GitHub **只读**,不会写入任何内容。
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
从 npm 安装(推荐,包内已带构建好的 Host 半和浏览器 bundle):
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
dsh plugin --profile <name> add dsh-plugin-github-issues
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
锁定版本:
|
|
25
|
+
|
|
26
|
+
```sh
|
|
27
|
+
dsh plugin --profile <name> add dsh-plugin-github-issues@0.4.7
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
安装后重启 DSH(profile 在启动时组装)。卸载:
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
dsh plugin --profile <name> remove dsh-plugin-github-issues
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
从源码目录安装(link 方式,改代码后需要重新 build 并重启):
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
npm install
|
|
40
|
+
npm run build
|
|
41
|
+
dsh plugin --profile <name> add /path/to/dsh-plugin-github-issues
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
每个 [Release](https://github.com/ckanner/dsh-plugin-github-issues/releases) 也附带打包好的
|
|
45
|
+
`dsh-plugin-github-issues.tgz`,可以通过路径安装。
|
|
46
|
+
|
|
47
|
+
## 前置条件
|
|
48
|
+
|
|
49
|
+
- DSH Desktop(Web GUI;开发与验证于 `0.2.1-rc.3`)。
|
|
50
|
+
- 已登录的 `gh` CLI:`gh auth login`。token 留在系统钥匙串,不会写进插件配置。
|
|
51
|
+
- 需要 Projects v2 时一次性补权限:
|
|
52
|
+
|
|
53
|
+
```sh
|
|
54
|
+
gh auth refresh -h github.com -s read:project
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
没有该权限时面板照常工作,项目选择器会说明缺什么。
|
|
58
|
+
|
|
59
|
+
## 功能
|
|
60
|
+
|
|
61
|
+
| 界面 | 位置 | 内容 |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| GitHub 面板 | 左侧栏图标 → 主面板 | 组织 → 项目/仓库 → assignee → 状态 级联筛选(记住上次选择)、搜索、列表、详情(正文、Milestone 进度、标签、优先级、assignee、关联/提及 PR 的 checks 与 review) |
|
|
64
|
+
| Issues 右栏 | 右侧栏页签 | 与对话同屏的同一份筛选列表,用于拖拽交办 |
|
|
65
|
+
| 输入框卡片 | 输入框内部 | 暂存的 Issue:`[GitHub] owner/repo#number ×`。可以补充自己的文字,也可以不写;发送时卡片转成提示词 |
|
|
66
|
+
| 已关联 chip | 输入框下方 dock | 当前 Session 关联的 Issue:状态圆点(open 绿 / closed 红)+ `owner/repo#number`;点击看详情,× 解除关联 |
|
|
67
|
+
| 交办操作 | Issue 详情 | 一键「进入 Session」(最新关联)、「再开一个 Session」;处理中的 Session 列表里每一项都能进入或解除 |
|
|
68
|
+
| GitHub 设置 | 设置 → GitHub | `gh` 登录状态与权限、交办行为、Prompt 模板 |
|
|
69
|
+
|
|
70
|
+
## 使用
|
|
71
|
+
|
|
72
|
+
1. 点击左侧栏 **GitHub** 图标。
|
|
73
|
+
2. 选择组织、Projects v2 板或仓库,再选 assignee/状态。选择会记在 profile 的 UI 状态里(不在插件
|
|
74
|
+
配置中)。
|
|
75
|
+
3. 点一行查看详情;点 `owner/repo#number` 在浏览器打开 GitHub。
|
|
76
|
+
4. 交办:
|
|
77
|
+
- 详情里点「交给 Agent」/「再开一个 Session」:在匹配的 Workspace 新开 Session,输入框内出现
|
|
78
|
+
Issue 卡片;
|
|
79
|
+
- 从右栏 **Issues** 页签拖一行到输入框:暂存到**当前** Session;
|
|
80
|
+
- 输入想补充的内容(可不填)后发送:卡片转成 Issue 提示词(模板来自设置)+ 你输入的内容,
|
|
81
|
+
同时记录 Issue ↔ Session 关联;
|
|
82
|
+
5. 输入框下方出现已关联 chip。之后可以进入那个 Session、再开一个,或解除关联(解除不会删除
|
|
83
|
+
Session)。
|
|
84
|
+
6. 右栏可以从面板右上角「右栏」按钮打开,也可以在右侧栏自己的添加菜单里选 **Issues** 页签。
|
|
85
|
+
|
|
86
|
+
### 交办会去哪个 Session?
|
|
87
|
+
|
|
88
|
+
- 已关联:主按钮进入最新关联的那个;下方 Session 列表可以逐个进入;
|
|
89
|
+
- 新交办选择 Workspace 的优先级:当前 Session 的 Workspace → 已关联同仓库 Session 的 Workspace →
|
|
90
|
+
目录名/标题与仓库名匹配的 Workspace → Host 当前/最近 Workspace。
|
|
91
|
+
|
|
92
|
+
### Prompt 模板
|
|
93
|
+
|
|
94
|
+
设置 → GitHub → Prompt 模板。变量:`{{repo}}`、`{{number}}`、`{{title}}`、`{{url}}`、`{{state}}`、
|
|
95
|
+
`{{milestone}}`、`{{priority}}`、`{{assignees}}`、`{{labels}}`、`{{prs}}`。
|
|
96
|
+
|
|
97
|
+
## 隐私与 token
|
|
98
|
+
|
|
99
|
+
- token 由 Host 进程从 `gh` 读取,只在内存中复用;不进页面、不进插件配置、不进日志。
|
|
100
|
+
- GitHub 请求都在 Host 完成,浏览器只拿到视图模型。
|
|
101
|
+
- 落盘的只有筛选偏好、Prompt 模板和 Issue ↔ Session 关联,位于
|
|
102
|
+
`$DSH_HOME/github-issues/state.json`(权限 `0600`)。
|
|
103
|
+
|
|
104
|
+
## 限制
|
|
105
|
+
|
|
106
|
+
- 只读:不发评论、不改标签/指派/状态。
|
|
107
|
+
- Projects v2 需要 `read:project`;优先级回退顺序:项目字段 → 组织 Issue Field → `P0`–`P4` 标签。
|
|
108
|
+
- 列表可见时每 60–120 秒轮询一次;需要立刻更新点「刷新」。
|
|
109
|
+
- 详情先请求正文,交叉引用 PR 懒加载,慢的 timeline 不阻塞面板。
|
|
110
|
+
- "发送时卡片转提示词"依赖 composer 的 DOM(原生发送按钮 / 回车),DSH 升级后需要重新核对。
|
|
111
|
+
- 新交办的 Workspace 匹配是上面的启发式优先级,不是固定映射。
|
|
112
|
+
|
|
113
|
+
## 开发
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
npm install
|
|
117
|
+
npm run typecheck
|
|
118
|
+
npm test # node --test(查询、VM 映射、prompt、状态、workspace 规则)
|
|
119
|
+
npm run test:render # 离线 react-dom/server 渲染烟测
|
|
120
|
+
npm run build # Host (tsc) + 浏览器 bundle (esbuild)
|
|
121
|
+
npm run verify:client # bundle 的加载契约与槽位/Remote 注册
|
|
122
|
+
npm run verify:package # npm publish 实际会带上的文件
|
|
123
|
+
npm run check # 以上全部
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 发布
|
|
127
|
+
|
|
128
|
+
`ci.yml` 在 push / PR 时运行;`release.yml` 在 `v*` tag(或手动)时运行:重复所有检查、发布 npm
|
|
129
|
+
(仓库 `NPM_TOKEN` secret 或 npm trusted publishing),并创建携带 `dsh-plugin-github-issues.tgz`
|
|
130
|
+
的 GitHub Release。维护者说明见 [RELEASING.md](https://github.com/ckanner/dsh-plugin-github-issues/blob/main/docs/RELEASING.md)。
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
MIT © Kanner
|
package/icon.svg
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" role="img" aria-label="GitHub Issues">
|
|
2
|
+
<rect x="2" y="2" width="60" height="60" rx="14" fill="#1f6feb"/>
|
|
3
|
+
<circle cx="24" cy="22" r="7" fill="none" stroke="#ffffff" stroke-width="4"/>
|
|
4
|
+
<circle cx="24" cy="22" r="2.5" fill="#ffffff"/>
|
|
5
|
+
<path d="M24 29v13a6 6 0 0 0 6 6h9" fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round"/>
|
|
6
|
+
<circle cx="44" cy="48" r="4.5" fill="#ffffff"/>
|
|
7
|
+
<path d="M44 34v9" fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round"/>
|
|
8
|
+
<circle cx="44" cy="31" r="4" fill="none" stroke="#ffffff" stroke-width="3.5"/>
|
|
9
|
+
</svg>
|