dsh-kaomoji 0.1.3 → 0.1.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/CHANGELOG.md +7 -0
- package/lib/client.js +20 -9
- package/lib/index.js +15 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/lang/zh-CN/
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.1.4] - 2026-09-25
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- 设置卡片在保存失败时直接显示 Host 返回的真实原因(例如文件不可写、来源不受信任),
|
|
15
|
+
不再只显示通用的“保存失败”,便于定位服务器端问题。
|
|
16
|
+
|
|
10
17
|
## [0.1.3] - 2026-09-13
|
|
11
18
|
|
|
12
19
|
### Fixed
|
package/lib/client.js
CHANGED
|
@@ -230,7 +230,9 @@ window.__ModuleLoader__.load({
|
|
|
230
230
|
};
|
|
231
231
|
|
|
232
232
|
const publish = (patch) => {
|
|
233
|
-
snapshot =
|
|
233
|
+
snapshot = patch.saveError === null
|
|
234
|
+
? { ...snapshot, ...patch, saveErrorMessage: null }
|
|
235
|
+
: { ...snapshot, ...patch };
|
|
234
236
|
emit();
|
|
235
237
|
};
|
|
236
238
|
|
|
@@ -240,11 +242,12 @@ window.__ModuleLoader__.load({
|
|
|
240
242
|
return task;
|
|
241
243
|
};
|
|
242
244
|
|
|
243
|
-
const fail = (code) => {
|
|
245
|
+
const fail = (code, message) => {
|
|
244
246
|
publish({
|
|
245
247
|
status: "unavailable",
|
|
246
248
|
writable: false,
|
|
247
249
|
saveError: code,
|
|
250
|
+
saveErrorMessage: message || null,
|
|
248
251
|
justSaved: false,
|
|
249
252
|
});
|
|
250
253
|
};
|
|
@@ -253,11 +256,17 @@ window.__ModuleLoader__.load({
|
|
|
253
256
|
try {
|
|
254
257
|
const result = await rpc.call(RPC_CHANNEL, endpoint, payload);
|
|
255
258
|
if (result && result.ok === true) return { value: result.value };
|
|
256
|
-
const
|
|
257
|
-
return {
|
|
259
|
+
const error = (result && result.error) || {};
|
|
260
|
+
return {
|
|
261
|
+
error: error.code === "forbidden" ? "forbidden" : "rejected",
|
|
262
|
+
message: typeof error.message === "string" ? error.message : undefined,
|
|
263
|
+
};
|
|
258
264
|
} catch (error) {
|
|
259
265
|
const message = String((error && error.message) || error || "");
|
|
260
|
-
return {
|
|
266
|
+
return {
|
|
267
|
+
error: /403|forbidden/i.test(message) ? "forbidden" : "unreachable",
|
|
268
|
+
message,
|
|
269
|
+
};
|
|
261
270
|
}
|
|
262
271
|
};
|
|
263
272
|
|
|
@@ -270,7 +279,7 @@ window.__ModuleLoader__.load({
|
|
|
270
279
|
async refresh() {
|
|
271
280
|
const result = await callRpc("get", {});
|
|
272
281
|
if (result.error !== undefined) {
|
|
273
|
-
fail(result.error === "forbidden" ? "forbidden" : "load");
|
|
282
|
+
fail(result.error === "forbidden" ? "forbidden" : "load", result.message);
|
|
274
283
|
return;
|
|
275
284
|
}
|
|
276
285
|
const value = result.value;
|
|
@@ -297,7 +306,7 @@ window.__ModuleLoader__.load({
|
|
|
297
306
|
expectedRevision: snapshot.revision,
|
|
298
307
|
});
|
|
299
308
|
if (result.error !== undefined) {
|
|
300
|
-
fail(result.error === "forbidden" ? "forbidden" : "save");
|
|
309
|
+
fail(result.error === "forbidden" ? "forbidden" : "save", result.message);
|
|
301
310
|
return;
|
|
302
311
|
}
|
|
303
312
|
const value = result.value;
|
|
@@ -316,7 +325,7 @@ window.__ModuleLoader__.load({
|
|
|
316
325
|
publish({ saveError: null, justSaved: false });
|
|
317
326
|
const result = await callRpc("reset", { expectedRevision: snapshot.revision });
|
|
318
327
|
if (result.error !== undefined) {
|
|
319
|
-
fail(result.error === "forbidden" ? "forbidden" : "save");
|
|
328
|
+
fail(result.error === "forbidden" ? "forbidden" : "save", result.message);
|
|
320
329
|
return;
|
|
321
330
|
}
|
|
322
331
|
const value = result.value;
|
|
@@ -348,7 +357,9 @@ window.__ModuleLoader__.load({
|
|
|
348
357
|
const statusText = state.saveError
|
|
349
358
|
? state.saveError === "forbidden"
|
|
350
359
|
? t("status.forbidden")
|
|
351
|
-
:
|
|
360
|
+
: state.saveErrorMessage
|
|
361
|
+
? `${t("status.error")} ${state.saveErrorMessage}`
|
|
362
|
+
: t("status.error")
|
|
352
363
|
: state.status === "loading"
|
|
353
364
|
? t("status.loading")
|
|
354
365
|
: !state.writable
|
package/lib/index.js
CHANGED
|
@@ -372,10 +372,9 @@ function createSettingsRpcHandler(ctx, settingsFile, getState, commit) {
|
|
|
372
372
|
return rpcError("bad-request", `Unknown dsh-kaomoji settings operation: ${endpoint}`);
|
|
373
373
|
});
|
|
374
374
|
} catch (error) {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
);
|
|
378
|
-
return rpcError("settings-rejected", "The Host rejected the kaomoji settings.");
|
|
375
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
376
|
+
console.warn(`[dsh-kaomoji] settings rpc failed: ${reason}`);
|
|
377
|
+
return rpcError("settings-rejected", `The Host rejected the kaomoji settings: ${reason}`);
|
|
379
378
|
}
|
|
380
379
|
};
|
|
381
380
|
}
|
|
@@ -423,7 +422,7 @@ export function apply(ctx, config = {}) {
|
|
|
423
422
|
|
|
424
423
|
// 设置卡片通过 loopback RPC 读写 ~/.dsh/dsh-kaomoji.json;写入后立即
|
|
425
424
|
// 更新提示词段(emit system-prompt/change),无需重启。
|
|
426
|
-
|
|
425
|
+
const registerSettingsRpc = (connectionCtx) => {
|
|
427
426
|
const handler = createSettingsRpcHandler(ctx, settingsFile, getState, adoptSettings);
|
|
428
427
|
connectionCtx.effect(
|
|
429
428
|
() =>
|
|
@@ -432,9 +431,18 @@ export function apply(ctx, config = {}) {
|
|
|
432
431
|
}),
|
|
433
432
|
"dsh-kaomoji: settings rpc",
|
|
434
433
|
);
|
|
435
|
-
|
|
434
|
+
console.log(
|
|
435
|
+
`[dsh-kaomoji] settings rpc 已注册(channel=${SETTINGS_RPC_CHANNEL}, authority=${authority})`,
|
|
436
|
+
);
|
|
437
|
+
};
|
|
438
|
+
// connection 服务在多数部署里此刻已可用;拿不到再等 inject(旧版行为)。
|
|
439
|
+
if (typeof ctx.get === "function" && ctx.get("connection") !== undefined) {
|
|
440
|
+
registerSettingsRpc(ctx);
|
|
441
|
+
} else {
|
|
442
|
+
ctx.inject(["connection"], registerSettingsRpc);
|
|
443
|
+
}
|
|
436
444
|
|
|
437
|
-
|
|
445
|
+
console.log(
|
|
438
446
|
`[dsh-kaomoji] 已挂载(mode=${currentSettings.mode}, placement=${currentSettings.placement}, authority=${authority}, settingsFile=${settingsFile})`,
|
|
439
447
|
);
|
|
440
448
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-kaomoji",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Add mood-aware Japanese kaomoji to DeepSeek Harness (dsh) replies; prompt-injection plugin with a curated library from kaomojiya.org.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.js",
|