dsh-whale-widget-ja 0.1.0 → 0.1.2
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.en.md +11 -5
- package/README.md +27 -7
- package/package.json +1 -1
- package/src/postpatch.mjs +59 -0
package/README.en.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# dsh-whale-widget-ja
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-whale-widget-ja)
|
|
4
|
+
|
|
3
5
|
**Unofficial Japanese localization + JPY display patch for
|
|
4
6
|
[`dsh-whale-widget`](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget)** —
|
|
5
7
|
the DeepSeek balance whale widget for DSH (DeepSeek Harness).
|
|
@@ -16,6 +18,7 @@ the DeepSeek balance whale widget for DSH (DeepSeek Harness).
|
|
|
16
18
|
|---|---|
|
|
17
19
|
| Language | Japanese for menus, settings panels, notifications, dialogs, errors and default bubble texts (~1,300 strings / 1,600 occurrences) |
|
|
18
20
|
| Money | Everything shown in **JPY (¥)**, converted from USD / CNY |
|
|
21
|
+
| GLM peak | Detects GLM Coding Plan peak hours (**Mon–Fri 15:00–19:00 JST** = 14:00–18:00 UTC+8; off-peak costs 50% credits). Quota/plan bubble modules accept `{glm_status}` `{glm_countdown}` `{glm_until}` |
|
|
19
22
|
| FX rate | Fetched **every 6 hours** (also once at page load). Falls back to the last value, then to a built-in default (157 JPY/USD) |
|
|
20
23
|
| Dates | `zh-CN` → `ja-JP` |
|
|
21
24
|
| Logic | Two places that used Chinese text as a condition are adjusted (self-check result check, update-check timeout check) |
|
|
@@ -32,17 +35,20 @@ dsh plugin --profile web add dsh-whale-widget
|
|
|
32
35
|
|
|
33
36
|
## Usage
|
|
34
37
|
|
|
38
|
+
```bash
|
|
39
|
+
npx dsh-whale-widget-ja apply
|
|
40
|
+
# then hard-reload the page (Cmd/Ctrl + Shift + R)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Or clone it if you prefer to run from source:
|
|
44
|
+
|
|
35
45
|
```bash
|
|
36
46
|
git clone https://github.com/qnosuke/dsh-whale-widget-ja.git
|
|
37
47
|
cd dsh-whale-widget-ja
|
|
38
48
|
npm install # acorn is used for AST-based rewriting
|
|
39
|
-
|
|
40
|
-
node bin/cli.mjs apply # backups → rewrite → syntax validation
|
|
41
|
-
# then hard-reload the page (Cmd/Ctrl + Shift + R)
|
|
49
|
+
node bin/cli.mjs apply
|
|
42
50
|
```
|
|
43
51
|
|
|
44
|
-
If the package is published to npm: `npx dsh-whale-widget-ja apply`.
|
|
45
|
-
|
|
46
52
|
### When does it take effect?
|
|
47
53
|
|
|
48
54
|
* **Client side** (most of the UI): after a hard reload.
|
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# dsh-whale-widget-ja
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-whale-widget-ja)
|
|
4
|
+
[](https://github.com/qnosuke/dsh-whale-widget-ja/actions/workflows/test.yml)
|
|
5
|
+
|
|
3
6
|
[English README](README.en.md)
|
|
4
7
|
|
|
5
8
|
DSH(DeepSeek Harness)Web 画面右下の **小鲸鱼ウィジェット** [`dsh-whale-widget`](https://github.com/MeteorNOX/DeepSeek-Balance-Whale-Widget) を
|
|
@@ -16,6 +19,7 @@ DSH(DeepSeek Harness)Web 画面右下の **小鲸鱼ウィジェット** [`d
|
|
|
16
19
|
| 言語 | メニュー・設定パネル・通知・確認ダイアログ・エラー・既定のふきだし文言まで日本語(約 1,300 文言 / 1,600 箇所) |
|
|
17
20
|
| 金額 | すべて **日本円(¥)** 表示。USD / CNY 建ての金額を換算 |
|
|
18
21
|
| 為替 | **6 時間ごとに自動取得**(画面を開いた直後にも 1 回)。取得できなければ前回値 → 既定値(157 円/USD) |
|
|
22
|
+
| GLM ピーク | GLM Coding Plan のピーク帯(**平日 15:00–19:00 JST**、オフピークはクレジット消費 50%)を判定。クォータ/plan モジュールで `{glm_status}` `{glm_countdown}` `{glm_until}` が使える |
|
|
19
23
|
| 日時 | `zh-CN` → `ja-JP` |
|
|
20
24
|
| ロジック | 中国語を条件に使っていた 2 か所(セルフチェックの成否判定・更新確認のタイムアウト判定)を日本語に合わせて調整 |
|
|
21
25
|
|
|
@@ -32,19 +36,19 @@ dsh plugin --profile web add dsh-whale-widget
|
|
|
32
36
|
## 使い方
|
|
33
37
|
|
|
34
38
|
```bash
|
|
35
|
-
|
|
39
|
+
npx dsh-whale-widget-ja apply
|
|
40
|
+
# 画面をハードリロード(Cmd / Ctrl + Shift + R)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
これだけです(バックアップは自動で作成されます)。npm 未使用の環境や中身を確認したい場合は clone して実行もできます。
|
|
44
|
+
|
|
45
|
+
```bash
|
|
36
46
|
git clone https://github.com/qnosuke/dsh-whale-widget-ja.git
|
|
37
47
|
cd dsh-whale-widget-ja
|
|
38
48
|
npm install
|
|
39
|
-
|
|
40
|
-
# 2) 適用(バックアップ自動作成)
|
|
41
49
|
node bin/cli.mjs apply
|
|
42
|
-
|
|
43
|
-
# 3) 画面をハードリロード(Cmd/Ctrl + Shift + R)
|
|
44
50
|
```
|
|
45
51
|
|
|
46
|
-
npm に公開されていれば `npx dsh-whale-widget-ja apply` でも実行できます。
|
|
47
|
-
|
|
48
52
|
### 反映のタイミング
|
|
49
53
|
|
|
50
54
|
* **画面側**(メニュー・設定・通知など大部分): ハードリロードで即反映
|
|
@@ -97,6 +101,22 @@ test/parse.mjs … 辞書とパッチ定義の健全性チェック(CI で
|
|
|
97
101
|
* 100 円未満は小数 2 桁、1,000 円以上は 3 桁区切り
|
|
98
102
|
* しきい値(残高アラート・今日の予算)の**入力は USD のまま**。ふきだし内の表示だけ円換算します
|
|
99
103
|
|
|
104
|
+
### GLM Coding Plan のピーク表示
|
|
105
|
+
|
|
106
|
+
z.ai 公式: ピークは **月曜〜金曜 14:00–18:00 SGT (UTC+8)** = 日本時間 **15:00–19:00**。
|
|
107
|
+
ピーク中はクレジット消費が標準レート、オフピークは **50%**。
|
|
108
|
+
(出典: https://docs.z.ai/devpack/overview — "During off-peak hours, model usage is charged at 50% of the standard credit rate")
|
|
109
|
+
|
|
110
|
+
GLM モデルのクォータ(plan)モジュールのテンプレートに次のプレースホルダが使えます:
|
|
111
|
+
|
|
112
|
+
| 変数 | 表示例 |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `{glm_status}` | `ピーク` / `オフピーク` |
|
|
115
|
+
| `{glm_countdown}` | `2時間5分`(次の切替まで) |
|
|
116
|
+
| `{glm_until}` | `ピーク終了まで 2時間5分` |
|
|
117
|
+
|
|
118
|
+
テンプレート例: `【{glm_status}】{plan} · {plan_reset}`
|
|
119
|
+
|
|
100
120
|
### 為替レート
|
|
101
121
|
|
|
102
122
|
1. ホストの `/dsh-whale/fx.json`(6 時間キャッシュ、`$DSH_HOME/.dshw-fx.json`)
|
package/package.json
CHANGED
package/src/postpatch.mjs
CHANGED
|
@@ -61,6 +61,40 @@ function dshwThresholdText(v) {
|
|
|
61
61
|
if (v === null || v === undefined || v === '') return ''
|
|
62
62
|
var n = dshwToDisplay(v, 'USD')
|
|
63
63
|
return isFinite(n) ? dshwFmtNum(n) : String(v)
|
|
64
|
+
// ===== GLM Coding Plan のピーク判定 =====
|
|
65
|
+
// 公式: ピーク = 月〜金 14:00-18:00 SGT (UTC+8)。オフピークはクレジット消費が 50%。
|
|
66
|
+
// ふきだしの plan/クォータ モジュールで {glm_status} {glm_countdown} {glm_until} が使える。
|
|
67
|
+
function dshwGlmPeakInfo() {
|
|
68
|
+
var now = new Date()
|
|
69
|
+
var day = now.getUTCDay() // 0=日 6=土
|
|
70
|
+
var mins = now.getUTCHours() * 60 + now.getUTCMinutes()
|
|
71
|
+
var peakStart = 6 * 60 // 06:00 UTC = 14:00 UTC+8 = 15:00 日本時間
|
|
72
|
+
var peakEnd = 10 * 60 // 10:00 UTC = 18:00 UTC+8 = 19:00 日本時間
|
|
73
|
+
var weekday = day >= 1 && day <= 5
|
|
74
|
+
var isPeak = weekday && mins >= peakStart && mins < peakEnd
|
|
75
|
+
function minsUntil(targetMin, targetDay) {
|
|
76
|
+
var t = (targetDay - day + 7) % 7
|
|
77
|
+
var diff = t * 1440 + targetMin - mins
|
|
78
|
+
if (diff <= 0) diff += 7 * 1440
|
|
79
|
+
return diff
|
|
80
|
+
}
|
|
81
|
+
var diff = isPeak ? minsUntil(peakEnd, day) : (weekday && mins < peakStart ? minsUntil(peakStart, day) : minsUntil(peakStart, (day + 1) % 7))
|
|
82
|
+
var hh = Math.floor(diff / 60), mm = diff % 60
|
|
83
|
+
var cd = (hh > 0 ? hh + '時間' : '') + mm + '分'
|
|
84
|
+
return {
|
|
85
|
+
isPeak: isPeak,
|
|
86
|
+
status: isPeak ? 'ピーク' : 'オフピーク',
|
|
87
|
+
countdown: cd,
|
|
88
|
+
until: isPeak ? 'ピーク終了まで ' + cd : 'ピーク開始まで ' + cd,
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function dshwGlmPeakText(key) {
|
|
92
|
+
var i = dshwGlmPeakInfo()
|
|
93
|
+
if (key === 'glm_status') return i.status
|
|
94
|
+
if (key === 'glm_countdown') return i.countdown
|
|
95
|
+
if (key === 'glm_until') return i.until
|
|
96
|
+
return ''
|
|
97
|
+
}
|
|
64
98
|
}`
|
|
65
99
|
|
|
66
100
|
const ORIG_FMT_MONEY = [
|
|
@@ -259,4 +293,29 @@ async function readFxRates(force) {
|
|
|
259
293
|
{ rel: 'assets/whale-widget.js', from: "/^通过/.test(aboutSelfResult)", to: "/^成功/.test(aboutSelfResult)", required: true },
|
|
260
294
|
// アップデート確認のタイムアウト判定:メッセージが「タイムアウト」になった
|
|
261
295
|
{ rel: 'lib/index.js', from: "/超时/.test(String(err1.message || ''))", to: "/超时|タイムアウト|timeout/i.test(String(err1.message || ''))", required: true },
|
|
296
|
+
// plan/クォータ モジュールのプレースホルダに GLM ピーク情報を追加
|
|
297
|
+
{
|
|
298
|
+
rel: 'assets/whale-widget.js',
|
|
299
|
+
from: [
|
|
300
|
+
" var pwin = bubblePlanWinOf(m)",
|
|
301
|
+
" map['plan'] = apiPlanUsedText(m.modelId, pwin)",
|
|
302
|
+
" map['plan_used'] = map['plan']",
|
|
303
|
+
" map['plan_left'] = apiPlanLeftText(m.modelId, pwin)",
|
|
304
|
+
" map['plan_reset'] = apiPlanResetText(m.modelId, pwin)",
|
|
305
|
+
" return map",
|
|
306
|
+
].join('\n'),
|
|
307
|
+
to: [
|
|
308
|
+
" var pwin = bubblePlanWinOf(m)",
|
|
309
|
+
" map['plan'] = apiPlanUsedText(m.modelId, pwin)",
|
|
310
|
+
" map['plan_used'] = map['plan']",
|
|
311
|
+
" map['plan_left'] = apiPlanLeftText(m.modelId, pwin)",
|
|
312
|
+
" map['plan_reset'] = apiPlanResetText(m.modelId, pwin)",
|
|
313
|
+
" // GLM Coding Plan のピーク/オフピーク(公式: 平日 14-18時 UTC+8、オフピークは 50%)",
|
|
314
|
+
" map['glm_status'] = dshwGlmPeakText('glm_status')",
|
|
315
|
+
" map['glm_countdown'] = dshwGlmPeakText('glm_countdown')",
|
|
316
|
+
" map['glm_until'] = dshwGlmPeakText('glm_until')",
|
|
317
|
+
" return map",
|
|
318
|
+
].join('\n'),
|
|
319
|
+
required: true,
|
|
320
|
+
},
|
|
262
321
|
]
|