dsh-peak-block 0.2.0 → 0.2.1
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.md +3 -2
- package/lib/index.d.ts +3 -3
- package/lib/index.js +46 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
在 DeepSeek 官方高峰时段拦截官方 provider 请求,保障安心使用梁文谷。
|
|
4
4
|
|
|
5
|
-
高峰时段默认北京时间工作日 09:00–12:00、14:00–18:00
|
|
5
|
+
高峰时段默认北京时间工作日 09:00–12:00、14:00–18:00,周末与中国法定节假日全天谷价。拦截到官方请求时:已配置 `targetProvider` 则切到该目标,未配置则阻止并提示;非高峰不拦截,正常走官方。官方判定默认只精确匹配 `deepseek-official`,不做名称前缀规则,因此 pi-ai 自带的三方 `deepseek` 中转不会误拦。
|
|
6
6
|
|
|
7
7
|
## 效果
|
|
8
8
|
|
|
@@ -49,7 +49,7 @@ dsh plugin --profile web remove dsh-peak-block
|
|
|
49
49
|
| `enabled` | `true` | 总开关 |
|
|
50
50
|
| `officialProviders` | 未设,只认 `deepseek-official` | 视为「官方」的 provider 精确名单,不设用默认判定 |
|
|
51
51
|
| `targetProvider` | 空 | 拦截后切到的目标 provider;留空 = 阻止并提示 |
|
|
52
|
-
| `peakWindow` | 工作日 9–12、14–18
|
|
52
|
+
| `peakWindow` | 工作日 9–12、14–18,周末与法定节假日谷 | 峰谷时段窗口,可整体或局部覆盖 |
|
|
53
53
|
|
|
54
54
|
配置示例:
|
|
55
55
|
|
|
@@ -69,6 +69,7 @@ plugins:
|
|
|
69
69
|
- 只拦对话模型请求:`agent/request` 覆盖 agent loop 的正常对话;compaction 等走 `ctx.llm.stream` 的路径不拦。
|
|
70
70
|
- `targetProvider` 必须是 DSH 已注册适配器路由,否则切换后以 `NO_ADAPTER` 失败。
|
|
71
71
|
- `days` 用 JS `getUTCDay` 序号,1..5 为周一..周五;时区判定纯 UTC+8 数学换算,与系统时区无关。
|
|
72
|
+
- 法定节假日名单内置 2026 年,取自国务院放假安排共 33 天,恒为谷价且不受 `peakWindow` 覆盖;表外年份只按周末判定,新安排公布后随源码更新。
|
|
72
73
|
|
|
73
74
|
## 要求与开发
|
|
74
75
|
|
package/lib/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* dsh-peak-block host 端:梁文峰时间拦截向 DeepSeek 官方 API 的模型请求。
|
|
4
4
|
*
|
|
5
|
-
* 在「梁文峰时间」,即 DeepSeek 官方高峰时段——北京时间工作日 09:00–12:00、14:00–18:00
|
|
5
|
+
* 在「梁文峰时间」,即 DeepSeek 官方高峰时段——北京时间工作日 09:00–12:00、14:00–18:00,周末与中国法定节假日全天谷价——拦截原本发往官方 provider 的对话请求。
|
|
6
6
|
* 已配置 targetProvider 则切换路由,未配置则阻止并抛出带文案的错误提示。非高峰时段不拦截,正常走官方。
|
|
7
7
|
*
|
|
8
8
|
* 拦截 seam:agent/request waterfall。它对每次对话模型请求携带冻结的调用配置种子 LlmCallConfig,含 provider/model/reasoningEffort/temperature/maxTokens/stop。
|
|
@@ -22,7 +22,7 @@ interface PeakWindow {
|
|
|
22
22
|
/** 周末是否全天谷价,默认 true,即周末不拦。 */
|
|
23
23
|
weekendOffPeak: boolean;
|
|
24
24
|
}
|
|
25
|
-
/** 梁文峰时间默认窗口:工作日 09:00–12:00、14:00–18:00,UTC+8
|
|
25
|
+
/** 梁文峰时间默认窗口:工作日 09:00–12:00、14:00–18:00,UTC+8,周末与中国法定节假日全天谷。 */
|
|
26
26
|
declare const DEFAULT_PEAK: PeakWindow;
|
|
27
27
|
/** 模型请求的冻结调用配置种子,agent/request waterfall 的 next() 返回它,切换 provider 时原样带出其余字段。 */
|
|
28
28
|
interface CallSeed {
|
|
@@ -74,7 +74,7 @@ interface HostContext {
|
|
|
74
74
|
declare function defaultIsOfficial(provider: string | undefined): boolean;
|
|
75
75
|
/**
|
|
76
76
|
* 时刻是否处于梁文峰时间。纯 UTC+8 数学换算,与系统时区无关,本机时钟/时区不可信。
|
|
77
|
-
*
|
|
77
|
+
* 红线:周末与中国法定节假日全天谷价,仅工作日有峰。
|
|
78
78
|
*/
|
|
79
79
|
declare function isPeakBeijing(timeMs: number, peak?: Partial<PeakWindow>): boolean;
|
|
80
80
|
/** provider 是否视为官方。显式名单用精确匹配;未提供名单用默认判定,即仅 deepseek-official。 */
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* dsh-peak-block host 端:梁文峰时间拦截向 DeepSeek 官方 API 的模型请求。
|
|
4
4
|
*
|
|
5
|
-
* 在「梁文峰时间」,即 DeepSeek 官方高峰时段——北京时间工作日 09:00–12:00、14:00–18:00
|
|
5
|
+
* 在「梁文峰时间」,即 DeepSeek 官方高峰时段——北京时间工作日 09:00–12:00、14:00–18:00,周末与中国法定节假日全天谷价——拦截原本发往官方 provider 的对话请求。
|
|
6
6
|
* 已配置 targetProvider 则切换路由,未配置则阻止并抛出带文案的错误提示。非高峰时段不拦截,正常走官方。
|
|
7
7
|
*
|
|
8
8
|
* 拦截 seam:agent/request waterfall。它对每次对话模型请求携带冻结的调用配置种子 LlmCallConfig,含 provider/model/reasoningEffort/temperature/maxTokens/stop。
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
const name = "dsh-peak-block";
|
|
14
14
|
/** 纯 host 半身,无额外服务注入。 */
|
|
15
15
|
const inject = [];
|
|
16
|
-
/** 梁文峰时间默认窗口:工作日 09:00–12:00、14:00–18:00,UTC+8
|
|
16
|
+
/** 梁文峰时间默认窗口:工作日 09:00–12:00、14:00–18:00,UTC+8,周末与中国法定节假日全天谷。 */
|
|
17
17
|
const DEFAULT_PEAK = {
|
|
18
18
|
days: [
|
|
19
19
|
1,
|
|
@@ -31,14 +31,57 @@ function defaultIsOfficial(provider) {
|
|
|
31
31
|
return provider === "deepseek-official";
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
+
* 中国法定节假日放假日名单,北京时间 YYYY-MM-DD。2026 年国务院放假安排共 33 天,取自 github.com/NateScarlet/holiday-cn。
|
|
35
|
+
* 只收放假日,不收调休补班的周末——周末本就全天谷价,补班与否不影响判定。
|
|
36
|
+
* 只内置 2026 年;新年度安排公布后在此补日期。表外年份退化为只认周末,与未加节假日前的行为一致。
|
|
37
|
+
*/
|
|
38
|
+
const HOLIDAYS_2026 = /* @__PURE__ */ new Set([
|
|
39
|
+
"2026-01-01",
|
|
40
|
+
"2026-01-02",
|
|
41
|
+
"2026-01-03",
|
|
42
|
+
"2026-02-15",
|
|
43
|
+
"2026-02-16",
|
|
44
|
+
"2026-02-17",
|
|
45
|
+
"2026-02-18",
|
|
46
|
+
"2026-02-19",
|
|
47
|
+
"2026-02-20",
|
|
48
|
+
"2026-02-21",
|
|
49
|
+
"2026-02-22",
|
|
50
|
+
"2026-02-23",
|
|
51
|
+
"2026-04-04",
|
|
52
|
+
"2026-04-05",
|
|
53
|
+
"2026-04-06",
|
|
54
|
+
"2026-05-01",
|
|
55
|
+
"2026-05-02",
|
|
56
|
+
"2026-05-03",
|
|
57
|
+
"2026-05-04",
|
|
58
|
+
"2026-05-05",
|
|
59
|
+
"2026-06-19",
|
|
60
|
+
"2026-06-20",
|
|
61
|
+
"2026-06-21",
|
|
62
|
+
"2026-09-25",
|
|
63
|
+
"2026-09-26",
|
|
64
|
+
"2026-09-27",
|
|
65
|
+
"2026-10-01",
|
|
66
|
+
"2026-10-02",
|
|
67
|
+
"2026-10-03",
|
|
68
|
+
"2026-10-04",
|
|
69
|
+
"2026-10-05",
|
|
70
|
+
"2026-10-06",
|
|
71
|
+
"2026-10-07"
|
|
72
|
+
]);
|
|
73
|
+
/**
|
|
34
74
|
* 时刻是否处于梁文峰时间。纯 UTC+8 数学换算,与系统时区无关,本机时钟/时区不可信。
|
|
35
|
-
*
|
|
75
|
+
* 红线:周末与中国法定节假日全天谷价,仅工作日有峰。
|
|
36
76
|
*/
|
|
37
77
|
function isPeakBeijing(timeMs, peak = DEFAULT_PEAK) {
|
|
38
78
|
const shifted = timeMs + 288e5;
|
|
39
79
|
const d = new Date(shifted);
|
|
40
80
|
const day = d.getUTCDay();
|
|
41
81
|
if (peak.weekendOffPeak !== false && (day === 0 || day === 6)) return false;
|
|
82
|
+
const month = String(d.getUTCMonth() + 1).padStart(2, "0");
|
|
83
|
+
const dayOfMonth = String(d.getUTCDate()).padStart(2, "0");
|
|
84
|
+
if (HOLIDAYS_2026.has(`${d.getUTCFullYear()}-${month}-${dayOfMonth}`)) return false;
|
|
42
85
|
const days = peak.days;
|
|
43
86
|
if (Array.isArray(days) && days.length > 0 && !days.includes(day)) return false;
|
|
44
87
|
const hour = d.getUTCHours();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-peak-block",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "梁文峰时间拦截官方 DeepSeek API 请求:北京时间工作日高峰时段 09:00-12:00、14:00-18:00
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "梁文峰时间拦截官方 DeepSeek API 请求:北京时间工作日高峰时段 09:00-12:00、14:00-18:00,中国法定节假日全天谷价不拦截,自动拦截发往官方 provider `deepseek-official` 的模型请求,可切换到第三方中转或预留的本机转 API 端口,未配置则阻止并提示;非高峰不拦、正常走官方,专治高峰掉速与刷屏。标准可安装 dsh 插件,host 单半身,设置经 cordis 配置文件注入。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
7
7
|
"dsh",
|