@perrylink/dsh-github 0.6.3 → 0.6.4
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.es.md +1 -1
- package/README.hi.md +1 -1
- package/README.md +2 -1
- package/README.pt.md +1 -1
- package/README.zh.md +1 -1
- package/lib/client.js +342 -0
- package/lib/index.d.ts +22 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +29 -1
- package/lib/index.js.map +1 -1
- package/lib/types/client.d.ts +13 -0
- package/package.json +23 -7
- package/scripts/action-patch.mjs +152 -152
- package/scripts/action-post.mjs +61 -61
- package/scripts/local-test.mjs +259 -259
package/README.es.md
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
| Superficie | Estado |
|
|
45
45
|
|---|---|
|
|
46
|
-
| Harness | DeepSeek Harness `0.1.
|
|
46
|
+
| Harness | DeepSeek Harness `0.1.1-rc.2` (compatibilidad declarada para `0.1.1-rc.2`) |
|
|
47
47
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
48
48
|
| Plataformas | Todas (plugin host; red saliente a GitHub) |
|
|
49
49
|
| Modelo | Cualquiera (la revisión estática es determinista; `reviewMode: "model"` es opcional) |
|
package/README.hi.md
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
| सतह | स्थिति |
|
|
45
45
|
|---|---|
|
|
46
|
-
| Harness | DeepSeek Harness `0.1.
|
|
46
|
+
| Harness | DeepSeek Harness `0.1.1-rc.2` (`0.1.1-rc.2` के लिए compat घोषित) |
|
|
47
47
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
48
48
|
| Platforms | सभी (host plugin; GitHub की ओर outbound network) |
|
|
49
49
|
| Model | कोई भी (static review deterministic है; `reviewMode: "model"` वैकल्पिक है) |
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
3
|
# dsh-github
|
|
4
|
+
[](https://gitee.com/perrylink/dsh-github)
|
|
4
5
|
|
|
5
6
|
**GitHub PRs, reviews, issues, and CI for DeepSeek Harness — every write gated by human approval, token never logged.**
|
|
6
7
|
|
|
@@ -43,7 +44,7 @@
|
|
|
43
44
|
|
|
44
45
|
| Surface | Status |
|
|
45
46
|
|---|---|
|
|
46
|
-
| Harness | DeepSeek Harness `0.1.
|
|
47
|
+
| Harness | DeepSeek Harness `0.1.1-rc.2` (compat declared for `0.1.1-rc.2`) |
|
|
47
48
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
48
49
|
| Platforms | All (host plugin; outbound network to GitHub) |
|
|
49
50
|
| Model | Any (static review is deterministic; `reviewMode: "model"` is optional) |
|
package/README.pt.md
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
| Superfície | Status |
|
|
45
45
|
|---|---|
|
|
46
|
-
| Harness | DeepSeek Harness `0.1.
|
|
46
|
+
| Harness | DeepSeek Harness `0.1.1-rc.2` (compatibilidade declarada para `0.1.1-rc.2`) |
|
|
47
47
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
48
48
|
| Plataformas | Todas (plugin host; rede de saída para o GitHub) |
|
|
49
49
|
| Modelo | Qualquer (a revisão estática é determinística; `reviewMode: "model"` é opcional) |
|
package/README.zh.md
CHANGED
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
|
|
44
44
|
| 界面 | 状态 |
|
|
45
45
|
|---|---|
|
|
46
|
-
| Harness | DeepSeek Harness `0.1.
|
|
46
|
+
| Harness | DeepSeek Harness `0.1.1-rc.2`(兼容声明覆盖 `0.1.1-rc.2`) |
|
|
47
47
|
| Node | `^22.19.0 \|\| >=24.0.0` |
|
|
48
48
|
| Platforms | 全部(host 插件;出站网络访问 GitHub) |
|
|
49
49
|
| Model | 任意(静态审查是确定性的;`reviewMode: "model"` 为可选) |
|
package/lib/client.js
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dsh-github browser half — one card in the "Plugins" settings section.
|
|
3
|
+
*
|
|
4
|
+
* The card edits the `dsh-github` settings namespace and lets the user fill
|
|
5
|
+
* the GitHub token directly from the settings page. The token literal never
|
|
6
|
+
* rides the settings document: it is written through the credentials domain,
|
|
7
|
+
* addressed by the reference the namespace names (`tokenRef`, default
|
|
8
|
+
* `GITHUB_TOKEN`), which is exactly where the host half resolves it — per
|
|
9
|
+
* operation, no restart needed.
|
|
10
|
+
*
|
|
11
|
+
* The card is collapsible and mirrors the host's `PluginCard` chrome one for
|
|
12
|
+
* one (same design tokens, same layout), the way the market card does: the
|
|
13
|
+
* plugins tab only lays out a flex column and dispatches
|
|
14
|
+
* `settings.plugin.item`, so the container is ours to draw, but drawing it
|
|
15
|
+
* with the same tokens is what keeps it from looking like it wandered in from
|
|
16
|
+
* another product. Buttons and the chevron come from the shared primitives.
|
|
17
|
+
*
|
|
18
|
+
* This file is a self-contained bundle executed by the browser module loader.
|
|
19
|
+
*/
|
|
20
|
+
window.__ModuleLoader__.load({
|
|
21
|
+
id: "@perrylink/dsh-github",
|
|
22
|
+
factory: (require) => {
|
|
23
|
+
var module = { exports: {} };
|
|
24
|
+
var exports = module.exports;
|
|
25
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
26
|
+
let react = require("react");
|
|
27
|
+
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
28
|
+
let _deepseek_ai_dsh_client_runtime_client = require("@deepseek-ai/dsh-client-runtime/client");
|
|
29
|
+
|
|
30
|
+
// ── styles (mirrors the host PluginCard / market card tokens) ────────────
|
|
31
|
+
|
|
32
|
+
const css = [
|
|
33
|
+
"/* @perrylink/dsh-github: token configuration card */",
|
|
34
|
+
".ghc-card{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-3,#fff);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}",
|
|
35
|
+
".ghc-card:hover{border-color:var(--dsw-alias-label-dimmed,#c8ccd4)}",
|
|
36
|
+
".ghc-cardOpen{background:var(--dsw-alias-bg-layer-2,#f7f8fa);border-color:var(--dsw-alias-label-dimmed,#c8ccd4)}",
|
|
37
|
+
".ghc-header{-webkit-appearance:none;appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}",
|
|
38
|
+
".ghc-header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary,#4f6ef7);outline-offset:-2px}",
|
|
39
|
+
".ghc-headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}",
|
|
40
|
+
".ghc-name{color:var(--dsw-alias-label-primary,#1f2328);font-size:15px;font-weight:600;line-height:1.4}",
|
|
41
|
+
".ghc-description{color:var(--dsw-alias-label-tertiary,#8b93a1);font-size:13px;line-height:1.5}",
|
|
42
|
+
".ghc-chevron{color:var(--dsw-alias-label-tertiary,#8b93a1);flex:none;transition:transform .16s;display:inline-flex}",
|
|
43
|
+
".ghc-chevronOpen{transform:rotate(180deg)}",
|
|
44
|
+
".ghc-pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform,#eef0f4);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}",
|
|
45
|
+
".ghc-body{border-top:1px solid var(--dsw-alias-border-l2,#e5e7eb);margin:0 16px;padding-bottom:8px}",
|
|
46
|
+
".ghc-readOnly{color:var(--dsw-alias-label-tertiary,#8b93a1);margin:12px 0 0;font-size:12px;line-height:1.5}",
|
|
47
|
+
".ghc-field{flex-direction:column;gap:6px;padding:12px 0;display:flex}",
|
|
48
|
+
".ghc-head{align-items:center;gap:8px;display:flex}",
|
|
49
|
+
".ghc-label{min-width:0;color:var(--dsw-alias-label-primary,#1f2328);flex:1;font-size:13px;font-weight:500;line-height:1.5}",
|
|
50
|
+
".ghc-badges{align-items:center;gap:8px;display:inline-flex}",
|
|
51
|
+
".ghc-badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform,#eef0f4);color:var(--dsw-alias-label-secondary,#6b7280);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}",
|
|
52
|
+
".ghc-badgeMuted{white-space:nowrap;color:var(--dsw-alias-label-tertiary,#8b93a1);border-radius:999px;padding:1px 8px;font-size:11px;line-height:17px}",
|
|
53
|
+
".ghc-input{border:1px solid var(--dsw-alias-border-l2,#e5e7eb);background:var(--dsw-alias-bg-layer-3,#fff);height:34px;font:inherit;color:var(--dsw-alias-label-primary,#1f2328);border-radius:8px;padding:0 12px;font-size:13px;line-height:1.5}",
|
|
54
|
+
".ghc-input:focus-visible{border-color:var(--dsw-alias-brand-primary,#4f6ef7);outline:none}",
|
|
55
|
+
".ghc-input:disabled{color:var(--dsw-alias-label-tertiary,#8b93a1);cursor:default}",
|
|
56
|
+
".ghc-hint{color:var(--dsw-alias-label-tertiary,#8b93a1);margin:0;font-size:12px;line-height:1.5}",
|
|
57
|
+
".ghc-actions{border-top:1px solid var(--dsw-alias-border-l2,#e5e7eb);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}",
|
|
58
|
+
".ghc-failed{min-width:0;color:var(--dsw-alias-label-error,#dc2626);flex:1;margin:0;font-size:12px;line-height:1.5}",
|
|
59
|
+
".ghc-spin{display:inline-flex;animation:ghc-spin .8s linear infinite}",
|
|
60
|
+
"@keyframes ghc-spin{to{transform:rotate(360deg)}}",
|
|
61
|
+
].join("");
|
|
62
|
+
const tagId = "@perrylink/dsh-github/github-card.css";
|
|
63
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
|
|
64
|
+
const tag = document.createElement("style");
|
|
65
|
+
tag.dataset.plugin = "@perrylink/dsh-github";
|
|
66
|
+
tag.dataset.pluginCss = tagId;
|
|
67
|
+
tag.textContent = css;
|
|
68
|
+
document.head.appendChild(tag);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// ── locale ───────────────────────────────────────────────────────────────
|
|
72
|
+
|
|
73
|
+
/** English copy for the card. */
|
|
74
|
+
const en = {
|
|
75
|
+
githubTitle: "GitHub",
|
|
76
|
+
githubDescription: "GitHub pull requests, issues, and CI through the agent.",
|
|
77
|
+
tokenLabel: "GitHub token",
|
|
78
|
+
tokenHint: "Stored in the credentials file, not here. Applied immediately; leave blank to keep the current token.",
|
|
79
|
+
tokenSet: "A token is configured.",
|
|
80
|
+
tokenUnset: "No token is configured; GitHub tools are unavailable until one is.",
|
|
81
|
+
unsaved: "Unsaved",
|
|
82
|
+
readOnly: "This deployment stores settings read-only.",
|
|
83
|
+
save: "Save",
|
|
84
|
+
saving: "Saving…",
|
|
85
|
+
discard: "Discard",
|
|
86
|
+
saveFailed: "The deployment did not accept this value; it was left for you to correct.",
|
|
87
|
+
};
|
|
88
|
+
/** Simplified Chinese copy. */
|
|
89
|
+
const zh = {
|
|
90
|
+
githubTitle: "GitHub",
|
|
91
|
+
githubDescription: "通过 agent 操作 GitHub 的 PR、issue 与 CI。",
|
|
92
|
+
tokenLabel: "GitHub Token",
|
|
93
|
+
tokenHint: "写入凭证文件而非设置文件;保存后立即生效。留空表示保持现有令牌。",
|
|
94
|
+
tokenSet: "已配置令牌。",
|
|
95
|
+
tokenUnset: "未配置令牌;配置之前 GitHub 工具不可用。",
|
|
96
|
+
unsaved: "未保存",
|
|
97
|
+
readOnly: "本部署的设置为只读。",
|
|
98
|
+
save: "保存",
|
|
99
|
+
saving: "保存中…",
|
|
100
|
+
discard: "放弃修改",
|
|
101
|
+
saveFailed: "本部署没有接受该值,已保留供你修改。",
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
// ── controller ───────────────────────────────────────────────────────────
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Namespace of the GitHub capability. Spelled here rather than imported:
|
|
108
|
+
* a client package must not depend on a Host package.
|
|
109
|
+
*/
|
|
110
|
+
const GITHUB_NS = "dsh-github";
|
|
111
|
+
/** Credential reference the provider resolves when the section names none. */
|
|
112
|
+
const DEFAULT_TOKEN_REF = "GITHUB_TOKEN";
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Bridges the `dsh-github` scope and the credentials domain onto the
|
|
116
|
+
* card. The token is the one control that does not live in the section:
|
|
117
|
+
* its literal never rides a response, so the card learns only whether
|
|
118
|
+
* one is configured and writes it through the credentials domain,
|
|
119
|
+
* addressed by the reference the section names.
|
|
120
|
+
*/
|
|
121
|
+
var GithubCardController = class {
|
|
122
|
+
scope;
|
|
123
|
+
api;
|
|
124
|
+
store;
|
|
125
|
+
saving = false;
|
|
126
|
+
failed = false;
|
|
127
|
+
credential = { ref: "", configured: false, writable: true };
|
|
128
|
+
constructor(scope, api) {
|
|
129
|
+
this.scope = scope;
|
|
130
|
+
this.api = api;
|
|
131
|
+
this.store = (0, _deepseek_ai_dsh_client_runtime_client.createSnapshotStore)(this.projection());
|
|
132
|
+
scope.subscribe(() => {
|
|
133
|
+
this.readCredential();
|
|
134
|
+
this.publish();
|
|
135
|
+
});
|
|
136
|
+
this.readCredential();
|
|
137
|
+
}
|
|
138
|
+
/** Project the card's full state for its snapshot store. */
|
|
139
|
+
projection() {
|
|
140
|
+
const snapshot = this.scope.getSnapshot();
|
|
141
|
+
return {
|
|
142
|
+
available: snapshot.status === "ready",
|
|
143
|
+
writable: snapshot.writable,
|
|
144
|
+
configured: this.credential.configured,
|
|
145
|
+
credentialWritable: this.credential.writable,
|
|
146
|
+
saving: this.saving,
|
|
147
|
+
failed: this.failed,
|
|
148
|
+
ref: this.credential.ref,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** The credential reference the section names, or the provider default. */
|
|
152
|
+
refOf() {
|
|
153
|
+
const snapshot = this.scope.getSnapshot();
|
|
154
|
+
const declared = snapshot.value?.tokenRef;
|
|
155
|
+
return declared !== void 0 && declared.length > 0 ? declared : DEFAULT_TOKEN_REF;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Ask the credentials domain about the reference the section names.
|
|
159
|
+
* A response is published only while it still answers for the
|
|
160
|
+
* reference in force, so two reads settling out of order cannot
|
|
161
|
+
* clobber each other.
|
|
162
|
+
*/
|
|
163
|
+
async readCredential() {
|
|
164
|
+
const ref = this.refOf();
|
|
165
|
+
if (ref !== this.credential.ref) {
|
|
166
|
+
this.credential = { ref, configured: false, writable: true };
|
|
167
|
+
this.publish();
|
|
168
|
+
}
|
|
169
|
+
let response;
|
|
170
|
+
try {
|
|
171
|
+
response = await this.api.credentials.describe({ refs: [ref] });
|
|
172
|
+
} catch (_credentialReadFailure) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!response.result.ok || ref !== this.refOf()) return;
|
|
176
|
+
const view = response.result.value.credentials[ref];
|
|
177
|
+
const next = { ref, configured: view?.configured ?? false, writable: view?.writable ?? true };
|
|
178
|
+
if (next.configured === this.credential.configured && next.writable === this.credential.writable) return;
|
|
179
|
+
this.credential = next;
|
|
180
|
+
this.publish();
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Re-read after the Host reports a change to the reference this card
|
|
184
|
+
* watches — a token can be written from elsewhere, and the section
|
|
185
|
+
* does not change when it is.
|
|
186
|
+
* @param ref - the reference the Host reports as changed.
|
|
187
|
+
*/
|
|
188
|
+
refreshCredential(ref) {
|
|
189
|
+
if (ref !== this.credential.ref) return;
|
|
190
|
+
this.readCredential();
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Write the staged token, then re-read whether the Host now holds
|
|
194
|
+
* one. A blank value writes nothing, which keeps the stored key.
|
|
195
|
+
* @param value - the staged credential literal.
|
|
196
|
+
* @returns whether the Host reports a configured credential afterwards.
|
|
197
|
+
*/
|
|
198
|
+
async save(value) {
|
|
199
|
+
const text = (value ?? "").trim();
|
|
200
|
+
if (text === "" || this.saving) return false;
|
|
201
|
+
this.saving = true;
|
|
202
|
+
this.failed = false;
|
|
203
|
+
this.publish();
|
|
204
|
+
try {
|
|
205
|
+
await this.api.credentials.set({ ref: this.refOf(), value: text });
|
|
206
|
+
} catch (_credentialWriteFailure) {
|
|
207
|
+
}
|
|
208
|
+
await this.readCredential();
|
|
209
|
+
const landed = this.credential.configured;
|
|
210
|
+
this.saving = false;
|
|
211
|
+
this.failed = !landed;
|
|
212
|
+
this.publish();
|
|
213
|
+
return landed;
|
|
214
|
+
}
|
|
215
|
+
/** Build the face the card's slot registration injects. */
|
|
216
|
+
inject() {
|
|
217
|
+
return {
|
|
218
|
+
hooks: { githubCard: this.store },
|
|
219
|
+
submit: (value) => this.save(value),
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
publish() {
|
|
223
|
+
this.store.set(this.projection());
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// ── card component ───────────────────────────────────────────────────────
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Render the GitHub card: a collapsible header naming the plugin, and —
|
|
231
|
+
* once expanded — the token control and the save/discard row.
|
|
232
|
+
* Renders nothing while the namespace is unavailable.
|
|
233
|
+
*/
|
|
234
|
+
function GithubCard(props) {
|
|
235
|
+
const { t } = props;
|
|
236
|
+
const state = props.useGithubCard((snapshot) => snapshot);
|
|
237
|
+
const [open, setOpen] = react.useState(false);
|
|
238
|
+
const [draft, setDraft] = react.useState("");
|
|
239
|
+
if (!state.available) return null;
|
|
240
|
+
const title = t("githubTitle");
|
|
241
|
+
const dirty = draft.trim() !== "";
|
|
242
|
+
const saveLabel = state.saving ? t("saving") : t("save");
|
|
243
|
+
return react.createElement("li", {
|
|
244
|
+
className: "ghc-card" + (open ? " ghc-cardOpen" : ""),
|
|
245
|
+
},
|
|
246
|
+
react.createElement("button", {
|
|
247
|
+
type: "button",
|
|
248
|
+
className: "ghc-header",
|
|
249
|
+
"aria-expanded": open,
|
|
250
|
+
"aria-label": (open ? "Collapse" : "Expand") + ": " + title,
|
|
251
|
+
onClick: () => setOpen(!open),
|
|
252
|
+
},
|
|
253
|
+
react.createElement("span", { className: "ghc-headText" },
|
|
254
|
+
react.createElement("span", { className: "ghc-name" }, title),
|
|
255
|
+
react.createElement("span", { className: "ghc-description" }, t("githubDescription")),
|
|
256
|
+
),
|
|
257
|
+
dirty ? react.createElement("span", { className: "ghc-pending" }, t("unsaved")) : null,
|
|
258
|
+
react.createElement("span", { className: "ghc-chevron" + (open ? " ghc-chevronOpen" : "") },
|
|
259
|
+
react.createElement(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutline14, { size: 14 }),
|
|
260
|
+
),
|
|
261
|
+
),
|
|
262
|
+
open ? react.createElement("div", { className: "ghc-body" },
|
|
263
|
+
!state.writable ? react.createElement("p", { className: "ghc-readOnly", role: "status" }, t("readOnly")) : null,
|
|
264
|
+
react.createElement("div", { className: "ghc-field" },
|
|
265
|
+
react.createElement("div", { className: "ghc-head" },
|
|
266
|
+
react.createElement("label", { className: "ghc-label", htmlFor: "plugin-config-github-token" }, t("tokenLabel")),
|
|
267
|
+
react.createElement("span", { className: "ghc-badges" },
|
|
268
|
+
react.createElement("span", { className: state.configured ? "ghc-badge" : "ghc-badgeMuted" },
|
|
269
|
+
state.configured ? t("tokenSet") : t("tokenUnset"),
|
|
270
|
+
),
|
|
271
|
+
),
|
|
272
|
+
),
|
|
273
|
+
react.createElement("input", {
|
|
274
|
+
id: "plugin-config-github-token",
|
|
275
|
+
className: "ghc-input",
|
|
276
|
+
type: "password",
|
|
277
|
+
autoComplete: "off",
|
|
278
|
+
value: draft,
|
|
279
|
+
disabled: !state.credentialWritable,
|
|
280
|
+
onChange: (event) => setDraft(event.target.value),
|
|
281
|
+
}),
|
|
282
|
+
react.createElement("p", { className: "ghc-hint" }, t("tokenHint")),
|
|
283
|
+
),
|
|
284
|
+
react.createElement("div", { className: "ghc-actions" },
|
|
285
|
+
state.failed ? react.createElement("p", { className: "ghc-failed", role: "status" }, t("saveFailed")) : null,
|
|
286
|
+
react.createElement(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
287
|
+
variant: "ghost",
|
|
288
|
+
size: "sm",
|
|
289
|
+
disabled: !dirty || state.saving,
|
|
290
|
+
onClick: () => setDraft(""),
|
|
291
|
+
}, t("discard")),
|
|
292
|
+
react.createElement(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
293
|
+
variant: "primary",
|
|
294
|
+
size: "sm",
|
|
295
|
+
disabled: !state.writable || !dirty || state.saving,
|
|
296
|
+
icon: state.saving ? react.createElement("span", { className: "ghc-spin" },
|
|
297
|
+
react.createElement(_deepseek_ai_dsh_client_ui_primitives.IconLoadingOutline16, { size: 16 }),
|
|
298
|
+
) : void 0,
|
|
299
|
+
onClick: async () => {
|
|
300
|
+
const landed = await props.submit(draft);
|
|
301
|
+
if (landed) setDraft("");
|
|
302
|
+
},
|
|
303
|
+
}, saveLabel),
|
|
304
|
+
),
|
|
305
|
+
) : null,
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// ── entry ────────────────────────────────────────────────────────────────
|
|
310
|
+
|
|
311
|
+
/** Dictionary namespace owned by this plugin. */
|
|
312
|
+
const NS = "dsh-github";
|
|
313
|
+
/** Required services (cordis fiber inject). */
|
|
314
|
+
const inject = ["slots", "locale", "connection", "remote", "settingsScope"];
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Mount the GitHub configuration card into the plugins settings section.
|
|
318
|
+
* @param ctx - the browser plugin context.
|
|
319
|
+
*/
|
|
320
|
+
function apply(ctx) {
|
|
321
|
+
const { api } = ctx.get("connection");
|
|
322
|
+
const t = ctx.locale.bind(NS);
|
|
323
|
+
ctx.effect(() => ctx.locale.register(NS, { zh, en }), "dsh-github: card dictionaries");
|
|
324
|
+
const github = new GithubCardController(ctx.settingsScope.bind({ namespace: NS }), api);
|
|
325
|
+
ctx.effect(() => ctx.remote.$on("credentials/reference-updated", (ref) => {
|
|
326
|
+
github.refreshCredential(ref);
|
|
327
|
+
}), "dsh-github: credential invalidations");
|
|
328
|
+
ctx.slots.inject("settings.plugin.item", function* () {
|
|
329
|
+
yield ctx.slots.register({
|
|
330
|
+
name: "settings.plugin.item",
|
|
331
|
+
key: NS,
|
|
332
|
+
locale: NS,
|
|
333
|
+
inject: () => github.inject(),
|
|
334
|
+
}, GithubCard);
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
exports.apply = apply;
|
|
339
|
+
exports.inject = inject;
|
|
340
|
+
return module.exports;
|
|
341
|
+
}
|
|
342
|
+
});
|
package/lib/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
* @module dsh-github
|
|
27
27
|
*/
|
|
28
28
|
import type { Context } from '@deepseek-ai/cordis';
|
|
29
|
+
import z from '@deepseek-ai/schemastery';
|
|
29
30
|
import { type GitRunner } from './git.js';
|
|
30
31
|
import { type GhRunner } from './credential.js';
|
|
31
32
|
import { Config, type Config as PluginConfig } from './config.js';
|
|
@@ -34,6 +35,25 @@ export declare const name = "dsh-github";
|
|
|
34
35
|
export declare const inject: string[];
|
|
35
36
|
export { Config };
|
|
36
37
|
export type { Config as PluginConfig };
|
|
38
|
+
/**
|
|
39
|
+
* User-settings namespace owned by this plugin. The card in the "Plugins"
|
|
40
|
+
* settings section edits this namespace; the GitHub token itself travels
|
|
41
|
+
* through the credentials seam (never a settings field), addressed by
|
|
42
|
+
* {@link GithubSettingsSchema.tokenRef}.
|
|
43
|
+
*/
|
|
44
|
+
export declare const GITHUB_SETTINGS_NAMESPACE: import("@deepseek-ai/dsh-settings").SettingsNamespace;
|
|
45
|
+
/**
|
|
46
|
+
* Settings surface for the browser configuration card. Only the fields that
|
|
47
|
+
* make sense to edit from the settings page are exposed here; every other
|
|
48
|
+
* tunable stays a cordis.yml entry config field.
|
|
49
|
+
*/
|
|
50
|
+
export declare const GithubSettingsSchema: z<Schemastery.ObjectS<{
|
|
51
|
+
tokenRef: z<string, string>;
|
|
52
|
+
tokenSource: z<"auto" | "credentials" | "env" | "gh", "auto" | "credentials" | "env" | "gh">;
|
|
53
|
+
}>, Schemastery.ObjectT<{
|
|
54
|
+
tokenRef: z<string, string>;
|
|
55
|
+
tokenSource: z<"auto" | "credentials" | "env" | "gh", "auto" | "credentials" | "env" | "gh">;
|
|
56
|
+
}>>;
|
|
37
57
|
/** Environment-dependent runners, injectable for tests. */
|
|
38
58
|
export interface PluginDeps {
|
|
39
59
|
runGit?: GitRunner;
|
|
@@ -53,7 +73,8 @@ export interface PluginDeps {
|
|
|
53
73
|
*/
|
|
54
74
|
export declare function applyWithDeps(ctx: Context, config: PluginConfig, deps?: PluginDeps): void;
|
|
55
75
|
/**
|
|
56
|
-
* Apply the plugin: register tools, commands,
|
|
76
|
+
* Apply the plugin: register tools, commands, the write-approval gate, and the
|
|
77
|
+
* user-settings namespace backing the browser configuration card.
|
|
57
78
|
* @param ctx - plugin context; the injected services are ready at this point.
|
|
58
79
|
* @param config - validated Schemastery configuration (defaults applied).
|
|
59
80
|
*/
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAWzD,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAEjE,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC,iFAAiF;AACjF,eAAO,MAAM,MAAM,UAA2D,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,MAAM,IAAI,YAAY,EAAE,CAAA;AAEtC,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,UAAe,QAwBtF;AAED
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAWzD,OAAO,EAAE,MAAM,EAAE,KAAK,MAAM,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AAEjE,eAAO,MAAM,IAAI,eAAe,CAAA;AAEhC,iFAAiF;AACjF,eAAO,MAAM,MAAM,UAA2D,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,YAAY,EAAE,MAAM,IAAI,YAAY,EAAE,CAAA;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,uDAAkC,CAAA;AAExE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;GAK/B,CAAA;AAEF,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,UAAe,QAwBtF;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,QASvD"}
|
package/lib/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { settingsNamespace } from '@deepseek-ai/dsh-settings';
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
1
3
|
import { createState } from "./state.js";
|
|
2
4
|
import { runGitCli } from "./git.js";
|
|
3
5
|
import { runGhCli } from "./credential.js";
|
|
@@ -11,6 +13,24 @@ export const name = 'dsh-github';
|
|
|
11
13
|
/** Services this plugin requires; all exist in any profile built on dsh-base. */
|
|
12
14
|
export const inject = ['tools', 'commands', 'jobs', 'approval', 'credentials'];
|
|
13
15
|
export { Config };
|
|
16
|
+
/**
|
|
17
|
+
* User-settings namespace owned by this plugin. The card in the "Plugins"
|
|
18
|
+
* settings section edits this namespace; the GitHub token itself travels
|
|
19
|
+
* through the credentials seam (never a settings field), addressed by
|
|
20
|
+
* {@link GithubSettingsSchema.tokenRef}.
|
|
21
|
+
*/
|
|
22
|
+
export const GITHUB_SETTINGS_NAMESPACE = settingsNamespace('dsh-github');
|
|
23
|
+
/**
|
|
24
|
+
* Settings surface for the browser configuration card. Only the fields that
|
|
25
|
+
* make sense to edit from the settings page are exposed here; every other
|
|
26
|
+
* tunable stays a cordis.yml entry config field.
|
|
27
|
+
*/
|
|
28
|
+
export const GithubSettingsSchema = z.object({
|
|
29
|
+
tokenRef: z.string().pattern(/^[A-Za-z_][A-Za-z0-9_]*$/).default('GITHUB_TOKEN')
|
|
30
|
+
.description('Credential reference / environment variable name holding the token.'),
|
|
31
|
+
tokenSource: z.union(['auto', 'credentials', 'env', 'gh']).default('auto')
|
|
32
|
+
.description('Token lookup source: auto tries credentials → env → gh in order.'),
|
|
33
|
+
});
|
|
14
34
|
/**
|
|
15
35
|
* Apply the plugin with explicit environment runners.
|
|
16
36
|
*
|
|
@@ -46,11 +66,19 @@ export function applyWithDeps(ctx, config, deps = {}) {
|
|
|
46
66
|
}
|
|
47
67
|
}
|
|
48
68
|
/**
|
|
49
|
-
* Apply the plugin: register tools, commands,
|
|
69
|
+
* Apply the plugin: register tools, commands, the write-approval gate, and the
|
|
70
|
+
* user-settings namespace backing the browser configuration card.
|
|
50
71
|
* @param ctx - plugin context; the injected services are ready at this point.
|
|
51
72
|
* @param config - validated Schemastery configuration (defaults applied).
|
|
52
73
|
*/
|
|
53
74
|
export function apply(ctx, config) {
|
|
54
75
|
applyWithDeps(ctx, config);
|
|
76
|
+
// Optional settings service (present in any profile built on dsh-base):
|
|
77
|
+
// register the namespace the "Plugins" settings card edits. The token
|
|
78
|
+
// literal itself never rides this namespace — it goes through the
|
|
79
|
+
// credentials seam, resolved per operation.
|
|
80
|
+
ctx.inject(['settings'], (settingsCtx) => {
|
|
81
|
+
settingsCtx.settings.register(GITHUB_SETTINGS_NAMESPACE, GithubSettingsSchema);
|
|
82
|
+
});
|
|
55
83
|
}
|
|
56
84
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EACL,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EACrE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAC1E,UAAU,EAAE,UAAU,GACvB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,MAAM,EAA+B,MAAM,aAAa,CAAA;AAEjE,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAA;AAEhC,iFAAiF;AACjF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,SAAS,EAAkB,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAA;AAEzD,OAAO,EACL,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EACrE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAC1E,UAAU,EAAE,UAAU,GACvB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,MAAM,EAA+B,MAAM,aAAa,CAAA;AAEjE,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAA;AAEhC,iFAAiF;AACjF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAA;AAE9E,OAAO,EAAE,MAAM,EAAE,CAAA;AAGjB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAA;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;SAC7E,WAAW,CAAC,qEAAqE,CAAC;IACrF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;SACvE,WAAW,CAAC,kEAAkE,CAAC;CACnF,CAAC,CAAA;AASF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,MAAoB,EAAE,OAAmB,EAAE;IACrF,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,WAAW,CAAiC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAEtM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;IACtC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;IACzC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAA;IACtC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAA;IAC3C,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;IACzC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;IACvC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACrC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;IAClD,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IACjE,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,MAAoB;IACtD,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC1B,wEAAwE;IACxE,sEAAsE;IACtE,kEAAkE;IAClE,4CAA4C;IAC5C,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE;QACvC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser half of `@perrylink/dsh-github` — the GitHub token configuration
|
|
3
|
+
* card contributed to the "Plugins" settings section.
|
|
4
|
+
* @module @perrylink/dsh-github/client
|
|
5
|
+
*/
|
|
6
|
+
import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
|
|
7
|
+
/** Required services (cordis fiber inject). */
|
|
8
|
+
export declare const inject: string[];
|
|
9
|
+
/**
|
|
10
|
+
* Mount the GitHub configuration card into the plugins settings section.
|
|
11
|
+
* @param ctx - the browser plugin context.
|
|
12
|
+
*/
|
|
13
|
+
export declare function apply(ctx: ClientContext): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@perrylink/dsh-github",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "Official-grade GitHub CI for DeepSeek Harness: composite action (review PRs / fix CI / report), polling PR review bot with idempotent inline comments, a status-check gate, and approval-gated PR/issue/repo/file tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -9,7 +9,12 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./lib/index.d.ts",
|
|
11
11
|
"import": "./lib/index.js"
|
|
12
|
-
}
|
|
12
|
+
},
|
|
13
|
+
"./client": {
|
|
14
|
+
"types": "./lib/types/client.d.ts",
|
|
15
|
+
"default": "./lib/client.js"
|
|
16
|
+
},
|
|
17
|
+
"./package.json": "./package.json"
|
|
13
18
|
},
|
|
14
19
|
"files": [
|
|
15
20
|
"lib",
|
|
@@ -60,6 +65,15 @@
|
|
|
60
65
|
"dsh": {
|
|
61
66
|
"bundle": {
|
|
62
67
|
"patch": "./cordis.patch.yml"
|
|
68
|
+
},
|
|
69
|
+
"client": {
|
|
70
|
+
"inject": [
|
|
71
|
+
"@deepseek-ai/dsh-client-connection",
|
|
72
|
+
"@deepseek-ai/dsh-client-locale",
|
|
73
|
+
"@deepseek-ai/dsh-client-runtime",
|
|
74
|
+
"@deepseek-ai/dsh-client-ui-slots"
|
|
75
|
+
],
|
|
76
|
+
"platform": "web"
|
|
63
77
|
}
|
|
64
78
|
},
|
|
65
79
|
"dshWorkshop": {
|
|
@@ -85,7 +99,7 @@
|
|
|
85
99
|
],
|
|
86
100
|
"compatibility": {
|
|
87
101
|
"dshVersions": [
|
|
88
|
-
"0.1.
|
|
102
|
+
"0.1.1-rc.2"
|
|
89
103
|
]
|
|
90
104
|
},
|
|
91
105
|
"capability": {
|
|
@@ -109,15 +123,17 @@
|
|
|
109
123
|
"@deepseek-ai/dsh-credentials": ">=0.1.0-rc.8 <0.2.0",
|
|
110
124
|
"@deepseek-ai/dsh-llm": ">=0.1.0-rc.8 <0.2.0",
|
|
111
125
|
"@deepseek-ai/dsh-session": ">=0.1.0-rc.8 <0.2.0",
|
|
126
|
+
"@deepseek-ai/dsh-settings": ">=0.1.0-rc.8 <0.2.0",
|
|
112
127
|
"@deepseek-ai/dsh-tools": ">=0.1.0-rc.8 <0.2.0"
|
|
113
128
|
},
|
|
114
129
|
"devDependencies": {
|
|
115
130
|
"@deepseek-ai/cordis": "4.0.1",
|
|
116
131
|
"@deepseek-ai/cordis-plugin-loader": "1.0.2",
|
|
117
|
-
"@deepseek-ai/dsh-credentials": "0.1.
|
|
118
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
119
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
120
|
-
"@deepseek-ai/dsh-
|
|
132
|
+
"@deepseek-ai/dsh-credentials": "0.1.1-rc.2",
|
|
133
|
+
"@deepseek-ai/dsh-llm": "0.1.1-rc.2",
|
|
134
|
+
"@deepseek-ai/dsh-session": "0.1.1-rc.2",
|
|
135
|
+
"@deepseek-ai/dsh-settings": "0.1.1-rc.2",
|
|
136
|
+
"@deepseek-ai/dsh-tools": "0.1.1-rc.2",
|
|
121
137
|
"@deepseek-ai/schemastery": "3.18.1",
|
|
122
138
|
"@types/node": "^22.0.0",
|
|
123
139
|
"@vitest/coverage-v8": "3.2.0",
|