@anionex/dsh-vision-toolkit 0.1.6 → 0.1.8
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.i18n.yaml +2 -2
- package/README.md +23 -11
- package/README.zh.md +23 -11
- package/lib/client.js +391 -32
- package/lib/client.js.map +1 -1
- package/lib/config.js +14 -0
- package/lib/config.js.map +1 -1
- package/lib/image-input-variants.js +615 -0
- package/lib/image-input-variants.js.map +1 -0
- package/lib/index.js +8 -1
- package/lib/index.js.map +1 -1
- package/lib/paste-images.js +6 -0
- package/lib/paste-images.js.map +1 -1
- package/lib/types/client/index.d.ts +13 -5
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/paste-images.d.ts +69 -0
- package/lib/types/client/paste-images.d.ts.map +1 -1
- package/lib/types/config.d.ts +26 -0
- package/lib/types/config.d.ts.map +1 -1
- package/lib/types/image-input-variants.d.ts +153 -0
- package/lib/types/image-input-variants.d.ts.map +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/paste-images.d.ts +35 -0
- package/lib/types/paste-images.d.ts.map +1 -1
- package/lib/types/web-request.d.ts +7 -0
- package/lib/types/web-request.d.ts.map +1 -1
- package/lib/types/web.d.ts +18 -2
- package/lib/types/web.d.ts.map +1 -1
- package/lib/web-request.js +11 -2
- package/lib/web-request.js.map +1 -1
- package/lib/web.js +142 -11
- package/lib/web.js.map +1 -1
- package/package.json +2 -1
- package/src/client/index.tsx +95 -20
- package/src/client/paste-images.tsx +331 -15
- package/src/config.ts +40 -0
- package/src/image-input-variants.ts +688 -0
- package/src/index.ts +18 -1
- package/src/paste-images.ts +39 -0
- package/src/web-request.ts +12 -2
- package/src/web.ts +158 -11
package/lib/web-request.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Accept a request only from the DSH Web application's origin. Method-agnostic:
|
|
3
|
+
* the same fence guards state-changing POSTs and policy GETs.
|
|
4
|
+
* @param req - the incoming request whose headers carry the origin evidence.
|
|
5
|
+
* @returns whether the request may be answered.
|
|
6
|
+
*/
|
|
7
|
+
export function sameOriginRequest(req) {
|
|
3
8
|
const fetchSite = req.headers['sec-fetch-site'];
|
|
4
9
|
if (fetchSite === 'cross-site')
|
|
5
10
|
return false;
|
|
@@ -17,4 +22,8 @@ export function sameOriginPost(req) {
|
|
|
17
22
|
return false;
|
|
18
23
|
}
|
|
19
24
|
}
|
|
25
|
+
/** Accept state-changing requests only from the DSH Web application's origin. */
|
|
26
|
+
export function sameOriginPost(req) {
|
|
27
|
+
return sameOriginRequest(req);
|
|
28
|
+
}
|
|
20
29
|
//# sourceMappingURL=web-request.js.map
|
package/lib/web-request.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-request.js","sourceRoot":"","sources":["../src/web-request.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"web-request.js","sourceRoot":"","sources":["../src/web-request.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAoB;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC/C,IAAI,SAAS,KAAK,YAAY;QAAE,OAAO,KAAK,CAAA;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAA;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,MAAM,CAAA;IACjH,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAA;IAC7B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;QAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAA;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;AAC/B,CAAC"}
|
package/lib/web.js
CHANGED
|
@@ -7,15 +7,17 @@
|
|
|
7
7
|
import { credentialRef } from '@deepseek-ai/dsh-credentials';
|
|
8
8
|
import { SettingsConflictError } from '@deepseek-ai/dsh-settings';
|
|
9
9
|
import { ARTIFACT_ROUTE_PREFIX } from "./artifact-access.js";
|
|
10
|
-
import { PASTE_IMAGES_ROUTE } from "./paste-images.js";
|
|
10
|
+
import { PASTE_IMAGES_ROUTE, PASTE_POLICY_ROUTE, } from "./paste-images.js";
|
|
11
11
|
import { resolveConfig, VISION_TOOLKIT_SETTINGS_NAMESPACE, } from "./config.js";
|
|
12
12
|
import { PLUGIN_VERSION, UPSTREAM_COMMIT, UPSTREAM_REPOSITORY, UPSTREAM_VERSION } from "./version.js";
|
|
13
|
-
import { sameOriginPost } from "./web-request.js";
|
|
13
|
+
import { sameOriginPost, sameOriginRequest } from "./web-request.js";
|
|
14
14
|
/** Exact route used by the browser Settings page. */
|
|
15
15
|
export const SETTINGS_ROUTE = '/_dsh/vision-toolkit/settings';
|
|
16
16
|
function isRecord(value) {
|
|
17
17
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
18
18
|
}
|
|
19
|
+
class CredentialReferenceConflictError extends Error {
|
|
20
|
+
}
|
|
19
21
|
function descriptorOf(ctx) {
|
|
20
22
|
const descriptor = ctx.settings.describe().find(row => row.ns === VISION_TOOLKIT_SETTINGS_NAMESPACE);
|
|
21
23
|
if (descriptor === undefined)
|
|
@@ -72,6 +74,30 @@ function parseRequest(value) {
|
|
|
72
74
|
value: value.value,
|
|
73
75
|
};
|
|
74
76
|
}
|
|
77
|
+
if (value.action === 'credential') {
|
|
78
|
+
if (!Number.isSafeInteger(value.expectedRevision) || value.expectedRevision < 0) {
|
|
79
|
+
throw new TypeError('credential.expectedRevision must be a non-negative integer');
|
|
80
|
+
}
|
|
81
|
+
if (typeof value.ref !== 'string')
|
|
82
|
+
throw new TypeError('credential.ref must be a string');
|
|
83
|
+
if (typeof value.value !== 'string')
|
|
84
|
+
throw new TypeError('credential.value must be a string');
|
|
85
|
+
const secret = value.value.trim();
|
|
86
|
+
if (secret.length === 0)
|
|
87
|
+
throw new TypeError('API key cannot be blank');
|
|
88
|
+
const first = secret[0];
|
|
89
|
+
const quoted = secret.length > 1 && (first === '"' || first === '\'' || first === '`') && secret.endsWith(first);
|
|
90
|
+
const environmentLine = /^[A-Z][A-Z0-9_]*=[^=]/u.test(secret);
|
|
91
|
+
if (quoted || environmentLine || !/^[\x21-\x7E]+$/u.test(secret)) {
|
|
92
|
+
throw new TypeError('paste only the API key, without a variable name, quotes, spaces, or line breaks');
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
action: 'credential',
|
|
96
|
+
expectedRevision: value.expectedRevision,
|
|
97
|
+
ref: credentialRef(value.ref),
|
|
98
|
+
value: secret,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
75
101
|
throw new TypeError(`unsupported action: ${value.action}`);
|
|
76
102
|
}
|
|
77
103
|
function publicMessage(error) {
|
|
@@ -142,6 +168,19 @@ export class VisionToolkitWebBackend {
|
|
|
142
168
|
this.onRuntimeActivated();
|
|
143
169
|
return this.snapshot();
|
|
144
170
|
}
|
|
171
|
+
async saveCredential(request) {
|
|
172
|
+
const descriptor = descriptorOf(this.ctx);
|
|
173
|
+
if (descriptor.revision !== request.expectedRevision) {
|
|
174
|
+
throw new SettingsConflictError(VISION_TOOLKIT_SETTINGS_NAMESPACE, request.expectedRevision, descriptor.revision);
|
|
175
|
+
}
|
|
176
|
+
const resolved = resolveConfig(descriptor.value);
|
|
177
|
+
const currentRef = credentialRef(String(resolved.provider.credential));
|
|
178
|
+
if (currentRef !== request.ref) {
|
|
179
|
+
throw new CredentialReferenceConflictError(`credential reference changed from "${request.ref}" to "${currentRef}"; reload Settings and try again`);
|
|
180
|
+
}
|
|
181
|
+
await this.ctx.credentials.set(currentRef, request.value);
|
|
182
|
+
return this.snapshot();
|
|
183
|
+
}
|
|
145
184
|
async health(request, req) {
|
|
146
185
|
if (!this.manager.ready)
|
|
147
186
|
throw new Error('runtime is not ready; fix Settings and save a valid configuration first');
|
|
@@ -191,29 +230,115 @@ export class VisionToolkitWebBackend {
|
|
|
191
230
|
return;
|
|
192
231
|
}
|
|
193
232
|
try {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
233
|
+
switch (parsed.action) {
|
|
234
|
+
case 'health':
|
|
235
|
+
responseJson(res, 200, { ok: true, value: await this.health(parsed, req) });
|
|
236
|
+
break;
|
|
237
|
+
case 'save':
|
|
238
|
+
responseJson(res, 200, { ok: true, value: await this.save(parsed) });
|
|
239
|
+
break;
|
|
240
|
+
case 'credential':
|
|
241
|
+
responseJson(res, 200, { ok: true, value: await this.saveCredential(parsed) });
|
|
242
|
+
break;
|
|
199
243
|
}
|
|
200
244
|
}
|
|
201
245
|
catch (error) {
|
|
202
|
-
const
|
|
203
|
-
const
|
|
204
|
-
const
|
|
246
|
+
const settingsConflict = error instanceof SettingsConflictError;
|
|
247
|
+
const credentialConflict = error instanceof CredentialReferenceConflictError;
|
|
248
|
+
const code = settingsConflict
|
|
249
|
+
? 'settings-conflict'
|
|
250
|
+
: credentialConflict
|
|
251
|
+
? 'credential-conflict'
|
|
252
|
+
: parsed.action === 'health'
|
|
253
|
+
? 'health-failed'
|
|
254
|
+
: parsed.action === 'credential'
|
|
255
|
+
? 'credential-rejected'
|
|
256
|
+
: 'settings-rejected';
|
|
257
|
+
const status = settingsConflict || credentialConflict ? 409 : parsed.action === 'health' ? 503 : 400;
|
|
205
258
|
this.ctx.logger.warn('dsh-vision-toolkit Web action=%s failed: %s', parsed.action, publicMessage(error));
|
|
206
259
|
requestError(res, status, code, publicMessage(error));
|
|
207
260
|
}
|
|
208
261
|
}
|
|
209
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* Same-origin policy handler for the paste route: whether the browser should
|
|
265
|
+
* take a paste over into workspace paths, or let it flow natively after an
|
|
266
|
+
* optional automatic switch to the image-input variant. The optional `model`
|
|
267
|
+
* query carries the model-selector label the client currently shows; the
|
|
268
|
+
* optional `provider`/`modelId`/`reasoningEffort` queries carry the exact
|
|
269
|
+
* route the client read from the live model catalog, which the resolver
|
|
270
|
+
* prefers (a label alone cannot pick a provider). Unresolvable routes answer
|
|
271
|
+
* native — the safe default.
|
|
272
|
+
* @param resolve - resolves one live Session's paste verdict.
|
|
273
|
+
* @returns the HTTP handler.
|
|
274
|
+
*/
|
|
275
|
+
export function createPastePolicyHandler(resolve) {
|
|
276
|
+
return (req, res) => {
|
|
277
|
+
void (async () => {
|
|
278
|
+
try {
|
|
279
|
+
if (req.method !== 'GET') {
|
|
280
|
+
requestError(res, 405, 'method-not-allowed', 'Use GET');
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (!sameOriginRequest(req)) {
|
|
284
|
+
requestError(res, 403, 'origin-rejected', 'The request must originate from this DSH Web application');
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
let sessionId;
|
|
288
|
+
let modelLabel;
|
|
289
|
+
let selection;
|
|
290
|
+
try {
|
|
291
|
+
const url = new URL(req.url ?? PASTE_POLICY_ROUTE, 'http://dsh.internal');
|
|
292
|
+
const sessions = url.searchParams.getAll('sessionId');
|
|
293
|
+
if (sessions.length !== 1 || sessions[0] === undefined || sessions[0] === '') {
|
|
294
|
+
throw new TypeError('sessionId is required exactly once');
|
|
295
|
+
}
|
|
296
|
+
sessionId = sessions[0];
|
|
297
|
+
const models = url.searchParams.getAll('model');
|
|
298
|
+
if (models.length > 1)
|
|
299
|
+
throw new TypeError('model may be given at most once');
|
|
300
|
+
modelLabel = models[0];
|
|
301
|
+
const providers = url.searchParams.getAll('provider');
|
|
302
|
+
if (providers.length > 1)
|
|
303
|
+
throw new TypeError('provider may be given at most once');
|
|
304
|
+
const modelIds = url.searchParams.getAll('modelId');
|
|
305
|
+
if (modelIds.length > 1)
|
|
306
|
+
throw new TypeError('modelId may be given at most once');
|
|
307
|
+
const efforts = url.searchParams.getAll('reasoningEffort');
|
|
308
|
+
if (efforts.length > 1)
|
|
309
|
+
throw new TypeError('reasoningEffort may be given at most once');
|
|
310
|
+
const provider = providers[0];
|
|
311
|
+
const modelId = modelIds[0];
|
|
312
|
+
if (provider !== undefined && modelId !== undefined && provider !== '' && modelId !== '') {
|
|
313
|
+
selection = {
|
|
314
|
+
provider,
|
|
315
|
+
model: modelId,
|
|
316
|
+
...(efforts[0] === undefined || efforts[0] === '' ? {} : { reasoningEffort: efforts[0] }),
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (error) {
|
|
321
|
+
requestError(res, 400, 'invalid-request', publicMessage(error));
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const verdict = await resolve(sessionId, selection, modelLabel);
|
|
325
|
+
responseJson(res, 200, { ok: true, value: verdict });
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
requestError(res, 500, 'policy-failed', publicMessage(error));
|
|
329
|
+
}
|
|
330
|
+
})();
|
|
331
|
+
};
|
|
332
|
+
}
|
|
210
333
|
/**
|
|
211
334
|
* Attach optional Web routes whenever a webServer service is present.
|
|
212
335
|
* @param ctx - plugin context owning route effects.
|
|
213
336
|
* @param backend - Settings handler.
|
|
214
337
|
* @param artifacts - signed Artifact handler.
|
|
338
|
+
* @param pastedImages - pasted-image workspace handler.
|
|
339
|
+
* @param pastePolicy - paste-policy verdict resolver (sessionId, selection, modelLabel).
|
|
215
340
|
*/
|
|
216
|
-
export function installVisionToolkitWeb(ctx, backend, artifacts, pastedImages) {
|
|
341
|
+
export function installVisionToolkitWeb(ctx, backend, artifacts, pastedImages, pastePolicy) {
|
|
217
342
|
ctx.inject(['webServer'], (webCtx) => {
|
|
218
343
|
webCtx.effect(() => {
|
|
219
344
|
const detach = artifacts.attachRoute();
|
|
@@ -232,7 +357,13 @@ export function installVisionToolkitWeb(ctx, backend, artifacts, pastedImages) {
|
|
|
232
357
|
path: PASTE_IMAGES_ROUTE,
|
|
233
358
|
handler: (req, res) => pastedImages.handle(req, res),
|
|
234
359
|
});
|
|
360
|
+
const disposePastePolicy = webCtx.webServer.register({
|
|
361
|
+
kind: 'exact',
|
|
362
|
+
path: PASTE_POLICY_ROUTE,
|
|
363
|
+
handler: createPastePolicyHandler(pastePolicy),
|
|
364
|
+
});
|
|
235
365
|
return () => {
|
|
366
|
+
disposePastePolicy();
|
|
236
367
|
disposePasteImages();
|
|
237
368
|
disposeSettings();
|
|
238
369
|
disposeArtifact();
|
package/lib/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anionex/dsh-vision-toolkit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "DeepSeek Harness-native integration for agent-vision-toolkit: image Q&A, OCR, grounding, UI restoration, pixel diff, Artifacts, and Web UI.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek",
|
|
@@ -95,6 +95,7 @@
|
|
|
95
95
|
"peerDependencies": {
|
|
96
96
|
"@deepseek-ai/dsh-agent": "^0.1.0-rc.6",
|
|
97
97
|
"@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6",
|
|
98
|
+
"@deepseek-ai/dsh-attachment": "^0.1.0-rc.6",
|
|
98
99
|
"@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6",
|
|
99
100
|
"@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6",
|
|
100
101
|
"@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6",
|
package/src/client/index.tsx
CHANGED
|
@@ -32,9 +32,17 @@ const en = {
|
|
|
32
32
|
settingsIntro: 'Configure the pinned visual engineering runtime, its external vision endpoint, and local safety limits.',
|
|
33
33
|
externalNotice: 'Remote tools send the selected image bytes to the configured external vision API. Local crop, trace, pixel diff, palette, foreground extraction, and HTML rendering do not upload images.',
|
|
34
34
|
provider: 'Vision service',
|
|
35
|
-
providerHint: 'Choose the API protocol, then provide the service address, model, and
|
|
35
|
+
providerHint: 'Choose the API protocol, then provide the service address, model, and API key used by online vision features.',
|
|
36
36
|
baseUrl: 'Base URL',
|
|
37
|
-
|
|
37
|
+
apiKey: 'API key',
|
|
38
|
+
apiKeyPlaceholderMissing: 'Paste the API key',
|
|
39
|
+
apiKeyPlaceholderConfigured: 'Saved; leave blank to keep it',
|
|
40
|
+
apiKeyHint: 'The key is stored in DSH Credentials and is never shown again after saving.',
|
|
41
|
+
apiKeyLocked: 'The current key comes from a read-only source and cannot be replaced here.',
|
|
42
|
+
apiKeyBlank: 'The API key cannot contain only spaces.',
|
|
43
|
+
apiKeyInvalid: 'Paste only the key, without a variable name, quotes, spaces, or line breaks.',
|
|
44
|
+
credential: 'Credential name',
|
|
45
|
+
credentialHint: 'Advanced: the API key is stored under this name. Keep VISION_API_KEY unless another plugin configuration requires a different reference.',
|
|
38
46
|
model: 'Model',
|
|
39
47
|
protocol: 'API protocol',
|
|
40
48
|
anthropicThinking: 'Anthropic thinking',
|
|
@@ -56,7 +64,7 @@ const en = {
|
|
|
56
64
|
saving: 'Validating runtime…',
|
|
57
65
|
reload: 'Reload',
|
|
58
66
|
saved: 'Settings validated and applied.',
|
|
59
|
-
readOnly: '
|
|
67
|
+
readOnly: 'Service settings are read-only. A writable API key can still be saved.',
|
|
60
68
|
configured: 'Configured',
|
|
61
69
|
missing: 'Missing',
|
|
62
70
|
source: 'Source',
|
|
@@ -70,7 +78,7 @@ const en = {
|
|
|
70
78
|
connectionHint: 'Connection testing explicitly sends the configured credential to GET /models. It uploads no image and creates no completion.',
|
|
71
79
|
saveBeforeTesting: 'Save service changes before testing the connection.',
|
|
72
80
|
advanced: 'Advanced settings',
|
|
73
|
-
advancedHint: '
|
|
81
|
+
advancedHint: 'Credential name, provider compatibility, output language, resource limits, runtime source, Python, and additional readable directories.',
|
|
74
82
|
pluginVersion: 'Plugin',
|
|
75
83
|
upstreamVersion: 'Upstream',
|
|
76
84
|
activeGeneration: 'Runtime generation',
|
|
@@ -164,9 +172,17 @@ const zh: Record<LocaleKey, string> = {
|
|
|
164
172
|
settingsIntro: '在这里设置视觉模型服务、工具运行环境,以及图片和文件的本地访问范围。',
|
|
165
173
|
externalNotice: '使用图像理解、目标定位、界面检测或文字识别等在线功能时,所选图片会发送到下方配置的视觉服务。图片裁剪、轮廓描摹、像素对比、主色提取、前景提取和网页截图均在本机完成,不会上传图片。',
|
|
166
174
|
provider: '在线视觉服务',
|
|
167
|
-
providerHint: '选择接口协议后,填写在线视觉功能使用的 API
|
|
175
|
+
providerHint: '选择接口协议后,填写在线视觉功能使用的 API 地址、模型名称和 API 密钥。',
|
|
168
176
|
baseUrl: 'API 地址',
|
|
169
|
-
|
|
177
|
+
apiKey: 'API 密钥',
|
|
178
|
+
apiKeyPlaceholderMissing: '粘贴 API 密钥',
|
|
179
|
+
apiKeyPlaceholderConfigured: '已保存;留空表示不修改',
|
|
180
|
+
apiKeyHint: '密钥会保存到 DSH 凭据存储,保存后不会在页面中回显。',
|
|
181
|
+
apiKeyLocked: '当前密钥来自只读配置,无法在此替换。',
|
|
182
|
+
apiKeyBlank: 'API 密钥不能只包含空格。',
|
|
183
|
+
apiKeyInvalid: '请只粘贴密钥本身,不要包含变量名、引号、空格或换行。',
|
|
184
|
+
credential: '凭据名称',
|
|
185
|
+
credentialHint: '高级用法:API 密钥会按此名称保存。除非其他插件配置要求不同名称,否则保持 VISION_API_KEY。',
|
|
170
186
|
model: '模型名称',
|
|
171
187
|
protocol: 'API 协议',
|
|
172
188
|
anthropicThinking: 'Anthropic thinking',
|
|
@@ -188,7 +204,7 @@ const zh: Record<LocaleKey, string> = {
|
|
|
188
204
|
saving: '正在检查并应用…',
|
|
189
205
|
reload: '重新加载',
|
|
190
206
|
saved: '设置已保存并生效。',
|
|
191
|
-
readOnly: '
|
|
207
|
+
readOnly: '服务设置来自只读配置;如果 API 密钥可写,仍可在此保存密钥。',
|
|
192
208
|
configured: '已就绪',
|
|
193
209
|
missing: '未配置',
|
|
194
210
|
source: '配置来源',
|
|
@@ -202,7 +218,7 @@ const zh: Record<LocaleKey, string> = {
|
|
|
202
218
|
connectionHint: '“检查本地环境”只检查本机依赖和目录;“测试服务连接”会携带已配置的 API 密钥请求 /models,但不会上传图片或调用模型。',
|
|
203
219
|
saveBeforeTesting: '修改服务配置后,请先保存,再测试连接。',
|
|
204
220
|
advanced: '高级设置',
|
|
205
|
-
advancedHint: '
|
|
221
|
+
advancedHint: '凭据名称、服务兼容参数、结果语言、资源限制、运行环境来源、Python 和额外可读目录。一般无需修改。',
|
|
206
222
|
pluginVersion: '插件版本',
|
|
207
223
|
upstreamVersion: '工具包版本',
|
|
208
224
|
activeGeneration: '本次运行已应用',
|
|
@@ -779,17 +795,50 @@ export class VisionSettingsController {
|
|
|
779
795
|
void this.load()
|
|
780
796
|
}
|
|
781
797
|
|
|
782
|
-
async save(
|
|
798
|
+
async save(
|
|
799
|
+
value: SettingsValue,
|
|
800
|
+
expectedRevision: number,
|
|
801
|
+
credentialValue: string | undefined,
|
|
802
|
+
writeSettings: boolean,
|
|
803
|
+
): Promise<boolean> {
|
|
783
804
|
this.set({ ...this.state, action: 'save', error: undefined, message: undefined })
|
|
805
|
+
let snapshot = this.state.snapshot
|
|
784
806
|
try {
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
807
|
+
if (writeSettings) {
|
|
808
|
+
snapshot = await apiRequest<SettingsSnapshot>({
|
|
809
|
+
method: 'POST',
|
|
810
|
+
headers: { 'Content-Type': 'application/json' },
|
|
811
|
+
body: JSON.stringify({ action: 'save', expectedRevision, value }),
|
|
812
|
+
})
|
|
813
|
+
}
|
|
814
|
+
if (snapshot === undefined) throw new Error('Vision Toolkit Settings are unavailable')
|
|
815
|
+
if (credentialValue !== undefined) {
|
|
816
|
+
try {
|
|
817
|
+
snapshot = await apiRequest<SettingsSnapshot>({
|
|
818
|
+
method: 'POST',
|
|
819
|
+
headers: { 'Content-Type': 'application/json' },
|
|
820
|
+
body: JSON.stringify({
|
|
821
|
+
action: 'credential',
|
|
822
|
+
expectedRevision: snapshot.settings.revision,
|
|
823
|
+
ref: snapshot.credential.ref,
|
|
824
|
+
value: credentialValue,
|
|
825
|
+
}),
|
|
826
|
+
})
|
|
827
|
+
} catch (error) {
|
|
828
|
+
this.set({
|
|
829
|
+
status: 'ready',
|
|
830
|
+
snapshot,
|
|
831
|
+
health: this.state.health,
|
|
832
|
+
error: error instanceof Error ? error.message : String(error),
|
|
833
|
+
})
|
|
834
|
+
return false
|
|
835
|
+
}
|
|
836
|
+
}
|
|
790
837
|
this.set({ status: 'ready', snapshot, health: this.state.health, message: 'saved' })
|
|
838
|
+
return true
|
|
791
839
|
} catch (error) {
|
|
792
840
|
this.set({ ...this.state, action: undefined, error: error instanceof Error ? error.message : String(error) })
|
|
841
|
+
return false
|
|
793
842
|
}
|
|
794
843
|
}
|
|
795
844
|
|
|
@@ -852,6 +901,16 @@ function positiveInteger(raw: string, label: string, t: Translate): number {
|
|
|
852
901
|
return value
|
|
853
902
|
}
|
|
854
903
|
|
|
904
|
+
function apiKeyFailure(value: string, t: Translate): string | undefined {
|
|
905
|
+
if (value.length === 0) return undefined
|
|
906
|
+
const trimmed = value.trim()
|
|
907
|
+
if (trimmed.length === 0) return t('apiKeyBlank')
|
|
908
|
+
const quoted = trimmed.length > 1 && ['"', '\'', '`'].includes(trimmed[0] ?? '') && trimmed.endsWith(trimmed[0] ?? '')
|
|
909
|
+
const environmentLine = /^[A-Z][A-Z0-9_]*=[^=]/u.test(trimmed)
|
|
910
|
+
if (quoted || environmentLine || !/^[\x21-\x7E]+$/u.test(trimmed)) return t('apiKeyInvalid')
|
|
911
|
+
return undefined
|
|
912
|
+
}
|
|
913
|
+
|
|
855
914
|
function valueOf(draft: Draft, t: Translate): SettingsValue {
|
|
856
915
|
return {
|
|
857
916
|
provider: {
|
|
@@ -959,6 +1018,7 @@ function LoadedSettings({ controller, t }: SettingsInjected) {
|
|
|
959
1018
|
const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot)
|
|
960
1019
|
const snapshot = state.snapshot
|
|
961
1020
|
const [draft, setDraft] = useState<Draft | undefined>(undefined)
|
|
1021
|
+
const [apiKey, setApiKey] = useState('')
|
|
962
1022
|
const [draftError, setDraftError] = useState<string | undefined>(undefined)
|
|
963
1023
|
|
|
964
1024
|
useEffect(() => { if (state.status === 'idle') void controller.load() }, [controller, state.status])
|
|
@@ -976,13 +1036,27 @@ function LoadedSettings({ controller, t }: SettingsInjected) {
|
|
|
976
1036
|
const update = <K extends keyof Draft>(key: K, value: Draft[K]): void => setDraft(current => current === undefined ? current : { ...current, [key]: value })
|
|
977
1037
|
const save = (): void => {
|
|
978
1038
|
try {
|
|
1039
|
+
const keyFailure = apiKeyFailure(apiKey, t)
|
|
1040
|
+
if (keyFailure !== undefined) {
|
|
1041
|
+
setDraftError(keyFailure)
|
|
1042
|
+
return
|
|
1043
|
+
}
|
|
1044
|
+
const credentialValue = apiKey.length === 0 ? undefined : apiKey.trim()
|
|
979
1045
|
setDraftError(undefined)
|
|
980
|
-
void controller.save(
|
|
1046
|
+
void controller.save(
|
|
1047
|
+
valueOf(draft, t),
|
|
1048
|
+
snapshot.settings.revision,
|
|
1049
|
+
credentialValue,
|
|
1050
|
+
snapshot.writable,
|
|
1051
|
+
).then(saved => { if (saved) setApiKey('') })
|
|
981
1052
|
} catch (error) {
|
|
982
1053
|
setDraftError(error instanceof Error ? error.message : String(error))
|
|
983
1054
|
}
|
|
984
1055
|
}
|
|
985
1056
|
const busy = state.action !== undefined
|
|
1057
|
+
const credentialMatchesSnapshot = draft.credential.trim() === snapshot.credential.ref
|
|
1058
|
+
const keyLocked = credentialMatchesSnapshot && !snapshot.credential.writable
|
|
1059
|
+
const canSave = snapshot.writable || (apiKey.length > 0 && !keyLocked)
|
|
986
1060
|
const runtimeErrorTitle = snapshot.runtime.ready ? t('runtimeCandidateRejected') : t('runtimeUnavailable')
|
|
987
1061
|
|
|
988
1062
|
return (
|
|
@@ -996,14 +1070,14 @@ function LoadedSettings({ controller, t }: SettingsInjected) {
|
|
|
996
1070
|
|
|
997
1071
|
<section className="dvt-panel dvt-essential"><div className="dvt-panel-title"><div><h3>{t('provider')}</h3><p>{t('providerHint')}</p></div><span className={`dvt-badge ${snapshot.credential.configured ? 'ok' : 'error'}`}>{snapshot.credential.configured ? t('configured') : t('missing')}</span></div>
|
|
998
1072
|
<div className="dvt-form-grid">
|
|
999
|
-
<Field label={t('protocol')}><select value={draft.protocol} onChange={(event) => { update('protocol', event.target.value as 'openai' | 'anthropic') }}><option value="openai">OpenAI Chat Completions</option><option value="anthropic">Anthropic Messages</option></select></Field>
|
|
1000
|
-
<Field label={t('baseUrl')}><Input value={draft.baseUrl} onChange={(event) => { update('baseUrl', event.target.value) }} /></Field>
|
|
1001
|
-
<Field label={t('model')}><Input value={draft.model} onChange={(event) => { update('model', event.target.value) }} /></Field>
|
|
1002
|
-
<Field label={t('
|
|
1073
|
+
<Field label={t('protocol')}><select disabled={!snapshot.writable || busy} value={draft.protocol} onChange={(event) => { update('protocol', event.target.value as 'openai' | 'anthropic') }}><option value="openai">OpenAI Chat Completions</option><option value="anthropic">Anthropic Messages</option></select></Field>
|
|
1074
|
+
<Field label={t('baseUrl')}><Input disabled={!snapshot.writable || busy} value={draft.baseUrl} onChange={(event) => { update('baseUrl', event.target.value) }} /></Field>
|
|
1075
|
+
<Field label={t('model')}><Input disabled={!snapshot.writable || busy} value={draft.model} onChange={(event) => { update('model', event.target.value) }} /></Field>
|
|
1076
|
+
<Field label={t('apiKey')} hint={keyLocked ? t('apiKeyLocked') : snapshot.credential.source === undefined ? t('apiKeyHint') : `${t('apiKeyHint')} ${t('sourceHint', { source: t('source'), value: credentialSource(snapshot.credential.source, t) })}`}><Input aria-label={t('apiKey')} type="password" autoComplete="new-password" disabled={busy || keyLocked} placeholder={snapshot.credential.configured ? t('apiKeyPlaceholderConfigured') : t('apiKeyPlaceholderMissing')} value={apiKey} onChange={(event) => { setApiKey(event.target.value); setDraftError(undefined) }} /></Field>
|
|
1003
1077
|
</div>
|
|
1004
1078
|
</section>
|
|
1005
1079
|
|
|
1006
|
-
<div className="dvt-save-row"><Button variant="primary" disabled={!
|
|
1080
|
+
<div className="dvt-save-row"><Button variant="primary" disabled={!canSave || busy} onClick={save}>{state.action === 'save' ? t('saving') : t('save')}</Button><Button variant="outline" disabled={busy} onClick={() => { void controller.load() }}>{t('reload')}</Button></div>
|
|
1007
1081
|
|
|
1008
1082
|
<section className="dvt-panel"><div className="dvt-panel-title"><div><h3>{t('health')}</h3><p>{t('connectionHint')}</p></div><div className="dvt-actions"><Button size="sm" variant="outline" disabled={busy || !snapshot.runtime.ready} onClick={() => { void controller.runHealth(false) }}>{state.action === 'health' ? t('testing') : t('runHealth')}</Button><Button size="sm" variant="primary" disabled={busy || !snapshot.runtime.ready} onClick={() => { void controller.runHealth(true) }}>{state.action === 'connection' ? t('testing') : t('testConnection')}</Button></div></div>
|
|
1009
1083
|
<p className="dvt-muted">{t('saveBeforeTesting')}</p>
|
|
@@ -1014,6 +1088,7 @@ function LoadedSettings({ controller, t }: SettingsInjected) {
|
|
|
1014
1088
|
<summary><span><strong>{t('advanced')}</strong><small>{t('advancedHint')}</small></span><span className="dvt-details-chevron" aria-hidden="true">⌄</span></summary>
|
|
1015
1089
|
<div className="dvt-advanced-body">
|
|
1016
1090
|
<section className="dvt-panel"><div className="dvt-panel-title"><h3>{t('provider')}</h3></div><div className="dvt-form-grid">
|
|
1091
|
+
<Field label={t('credential')} hint={t('credentialHint')}><Input aria-label={t('credential')} disabled={!snapshot.writable || busy} value={draft.credential} onChange={(event) => { update('credential', event.target.value) }} /></Field>
|
|
1017
1092
|
{draft.protocol === 'anthropic' ? <Field label={t('anthropicThinking')} hint={t('anthropicThinkingHint')}><select aria-label={t('anthropicThinking')} value={draft.anthropicThinking} onChange={(event) => { update('anthropicThinking', event.target.value as 'omit' | 'disabled' | 'adaptive') }}><option value="omit">omit (widest compatibility)</option><option value="disabled">disabled (model support required)</option><option value="adaptive">adaptive (model support required)</option></select></Field> : null}
|
|
1018
1093
|
<Field label={t('userAgent')}><Input value={draft.userAgent} onChange={(event) => { update('userAgent', event.target.value) }} /></Field>
|
|
1019
1094
|
</div></section>
|