dsh-power-ticket-check 0.2.8 → 0.2.10
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 +6 -0
- package/README-es.md +48 -2
- package/README-hi.md +43 -2
- package/README-pt.md +48 -2
- package/README-zh.md +58 -26
- package/README.md +51 -3
- package/lib/index.d.mts +7 -12
- package/lib/index.mjs +17 -26
- package/package.json +8 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.9] - 2026-10-18
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Move `tsdown` and `typescript` from runtime dependencies to devDependencies; a published checker no longer pulls a build chain into the profile. Same rollout as the 0.2.11 pilot.
|
|
8
|
+
|
|
3
9
|
## [0.2.8] - 2026-10-18
|
|
4
10
|
|
|
5
11
|
### Changed
|
package/README-es.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# dsh-power-ticket-check — Verificación de la completitud del permiso de trabajo eléctrico y del orden de emisión, autorización y cierre
|
|
2
2
|
|
|
3
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
dsh plugin --profile <name> add dsh-power-ticket-check
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
|
|
3
10
|
[](https://dsh.market/)
|
|
11
|
+
[](https://dshfind.com/en/plugins/PerryLink/dsh-power-ticket-check?ref=badge)
|
|
4
12
|
|
|
5
13
|
`dsh-power-ticket-check` lee un **电力工作票** como un mapa plano de los nombres de columna del propio formulario a sus valores, junto con los roles que figuran en él, y comprueba lo que puede exigirse a un formulario: que estén rellenas todas las columnas de su `requiredFields` configurado, que el 工作票种类 figure entre los que declara su implantación, que 签发时间 → 许可时间 → 终结时间 formen una secuencia físicamente posible, que un 延期时间 desplace el final hacia adelante y no sea anterior a la autorización, que los roles configurados como exclusivos los desempeñen personas distintas, y que el texto de medidas de seguridad y de autorización contenga los cinco términos de 安全技术措施 y los tres de 许可手续 que el paquete busca. Las comprobaciones que no pudieron ejecutarse se listan en `skipped` con su motivo, en lugar de pasar en silencio.
|
|
6
14
|
|
|
@@ -13,14 +21,48 @@ dsh --profile <name> --dump-config | grep 'dsh-power-ticket-check'
|
|
|
13
21
|
|
|
14
22
|
## Cómo se ve la salida
|
|
15
23
|
|
|
16
|
-

|
|
25
|
+
|
|
26
|
+
*Resumen del flujo: documento → reglas → hallazgos. Los ejemplos siguientes usan la superficie de comandos real.*
|
|
17
27
|
|
|
18
|
-

|
|
19
28
|
|
|
20
29
|
Salida real de este plugin sobre su propio fixture de prueba `PT-003` — no es un montaje. El paquete de reglas no inventa citas, así que cada hallazgo nombra la cláusula aplicada y advierte que su texto no se obtuvo.
|
|
21
30
|
|
|
22
31
|
## Qué responde
|
|
23
32
|
|
|
33
|
+
### Ejemplos
|
|
34
|
+
|
|
35
|
+
La tabla siguiente es el conjunto de ejemplos: la primera fila es el caso detallado y las demás son casos breves.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#### Salida detallada
|
|
39
|
+
|
|
40
|
+
**Herramienta** `power_ticket_check`
|
|
41
|
+
|
|
42
|
+
**Entrada**
|
|
43
|
+
|
|
44
|
+
~~~json
|
|
45
|
+
{"工作票编号":"DL-2026-0001","工作票种类":"电气第一种工作票","安全措施":"应停电、验电、装设接地线。"}
|
|
46
|
+
~~~
|
|
47
|
+
|
|
48
|
+
**Salida**
|
|
49
|
+
|
|
50
|
+
~~~json
|
|
51
|
+
{
|
|
52
|
+
"id": "dsh-power-ticket-check.PT-006.104aebcf",
|
|
53
|
+
"ruleId": "PT-006",
|
|
54
|
+
"severity": "error",
|
|
55
|
+
"locator": {
|
|
56
|
+
"column": "安全措施"
|
|
57
|
+
},
|
|
58
|
+
"found": "安全措施文本中未出现 2 项:悬挂标示牌、装设遮栏",
|
|
59
|
+
"expected": "在电气设备上工作,应有停电、验电、装设接地线、悬挂标示牌和装设遮栏(围栏)等保证安全的技术措施",
|
|
60
|
+
"fix": "核对票面是否写全五项;本条只核对是否写到,不判断措施内容是否与现场相符"
|
|
61
|
+
}
|
|
62
|
+
~~~
|
|
63
|
+
|
|
64
|
+
*Observado en `dsh-power-ticket-check/tests/fixtures/PT-006/PT-006-unsafe.json (cases.json expects 1×PT-006); executed parseMaterial+runCheck, checkedAt=2026-10-06T00:00:00.000Z`*
|
|
65
|
+
|
|
24
66
|
| Usted pregunta | Qué responde |
|
|
25
67
|
|---|---|
|
|
26
68
|
| Tal como viene, aprueba todos los permisos que le paso, ¿por qué? | Porque `PT-001` se declara a sí misma en `skipped`, no como aprobado. Su lista `requiredFields` viene vacía, así que la regla no puede ejecutarse; rellénela con las columnas que exige su propio formulario. Aun configurada, `PT-001` comprueba que la columna esté rellena, no que el valor sea correcto, y su nivel es `info`. |
|
|
@@ -121,6 +163,10 @@ node ../scripts/sync-shared.mjs dsh-power-ticket-check
|
|
|
121
163
|
|
|
122
164
|
El último comando copia el kit compartido de `../_shared` a `src/shared/`; vuelva a ejecutarlo tras cada cambio compartido.
|
|
123
165
|
|
|
166
|
+
## PerryLink DSH Plugin Family
|
|
167
|
+
|
|
168
|
+
Full family index: [choose a checker by material](https://perrylink.github.io/zh/checkers/choose/) and [all plugins](https://github.com/PerryLink). This repository is one of them.
|
|
169
|
+
|
|
124
170
|
## License
|
|
125
171
|
|
|
126
172
|
[Apache License 2.0](LICENSE) © 2026 dsh-power-ticket-check contributors.
|
package/README-hi.md
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# dsh-power-ticket-check — विद्युत कार्य-अनुज्ञप्ति की पूर्णता तथा निर्गमन, अनुमति और समापन के क्रम की जाँच
|
|
2
2
|
|
|
3
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
4
|
+
|
|
3
5
|
[](https://dsh.market/)
|
|
6
|
+
[](https://dshfind.com/en/plugins/PerryLink/dsh-power-ticket-check?ref=badge)
|
|
4
7
|
|
|
5
8
|
`dsh-power-ticket-check` एक **电力工作票** को उसके अपने कॉलम नामों से मानों तक के सपाट मैपिंग के रूप में पढ़ता है — साथ में उस पर अंकित भूमिकाएँ — और उस अनुज्ञप्ति की वह जाँच करता है जो एक फ़ॉर्म से अपेक्षित की जा सकती है: आपके कॉन्फ़िगर किए गए `requiredFields` के हर कॉलम में मान भरा हो, 工作票种类 आपकी संस्था द्वारा सूचीबद्ध किस्मों में से हो, 签发时间 → 许可时间 → 终结时间 का क्रम भौतिक रूप से संभव हो, 延期时间 अंत को आगे बढ़ाए और अनुमति से पहले न हो, जिन भूमिकाओं को आपने अलग-अलग रखने के लिए कॉन्फ़िगर किया है वे अलग-अलग व्यक्तियों के हों, तथा सुरक्षा-उपाय और अनुमति के पाठ में नियम-पैक द्वारा खोजे जाने वाले 安全技术措施 के पाँच और 许可手续 के तीन शब्द मौजूद हों। जो जाँचें चल नहीं सकीं, वे चुपचाप पास होने के बजाय कारण के साथ `skipped` में दर्ज होती हैं।
|
|
6
9
|
|
|
@@ -13,14 +16,48 @@ dsh --profile <name> --dump-config | grep 'dsh-power-ticket-check'
|
|
|
13
16
|
|
|
14
17
|
## आउटपुट कैसा दिखता है
|
|
15
18
|
|
|
16
|
-

|
|
20
|
+
|
|
21
|
+
*कार्यप्रवाह: दस्तावेज़ → नियम → निष्कर्ष। नीचे के उदाहरण वास्तविक कमांड सतह का उपयोग करते हैं।*
|
|
17
22
|
|
|
18
|
-

|
|
19
23
|
|
|
20
24
|
इस प्लगइन का अपने ही `PT-003` टेस्ट फ़िक्स्चर पर वास्तविक आउटपुट — कोई नकली चित्र नहीं। नियम-पैक उद्धरण नहीं गढ़ता, इसलिए हर निष्कर्ष लागू किए गए खंड का नाम और यह भी बताता है कि उसका मूल पाठ इस बार प्राप्त नहीं हुआ।
|
|
21
25
|
|
|
22
26
|
## यह किन सवालों का जवाब देता है
|
|
23
27
|
|
|
28
|
+
### उदाहरण
|
|
29
|
+
|
|
30
|
+
नीचे दी गई तालिका उदाहरण-समुच्चय है: पहली पंक्ति विस्तृत केस है, बाकी संक्षिप्त केस हैं।
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
#### विस्तृत आउटपुट
|
|
34
|
+
|
|
35
|
+
**उपकरण** `power_ticket_check`
|
|
36
|
+
|
|
37
|
+
**इनपुट**
|
|
38
|
+
|
|
39
|
+
~~~json
|
|
40
|
+
{"工作票编号":"DL-2026-0001","工作票种类":"电气第一种工作票","安全措施":"应停电、验电、装设接地线。"}
|
|
41
|
+
~~~
|
|
42
|
+
|
|
43
|
+
**आउटपुट**
|
|
44
|
+
|
|
45
|
+
~~~json
|
|
46
|
+
{
|
|
47
|
+
"id": "dsh-power-ticket-check.PT-006.104aebcf",
|
|
48
|
+
"ruleId": "PT-006",
|
|
49
|
+
"severity": "error",
|
|
50
|
+
"locator": {
|
|
51
|
+
"column": "安全措施"
|
|
52
|
+
},
|
|
53
|
+
"found": "安全措施文本中未出现 2 项:悬挂标示牌、装设遮栏",
|
|
54
|
+
"expected": "在电气设备上工作,应有停电、验电、装设接地线、悬挂标示牌和装设遮栏(围栏)等保证安全的技术措施",
|
|
55
|
+
"fix": "核对票面是否写全五项;本条只核对是否写到,不判断措施内容是否与现场相符"
|
|
56
|
+
}
|
|
57
|
+
~~~
|
|
58
|
+
|
|
59
|
+
*स्रोत `dsh-power-ticket-check/tests/fixtures/PT-006/PT-006-unsafe.json (cases.json expects 1×PT-006); executed parseMaterial+runCheck, checkedAt=2026-10-06T00:00:00.000Z`*
|
|
60
|
+
|
|
24
61
|
| आपका सवाल | इसका जवाब |
|
|
25
62
|
|---|---|
|
|
26
63
|
| जैसा यह आता है, मेरी हर अनुज्ञप्ति इसमें पास हो जाती है — क्यों? | क्योंकि `PT-001` स्वयं को पास के रूप में नहीं, `skipped` में दर्ज करता है। उसकी `requiredFields` सूची खाली आती है, इसलिए यह नियम चल ही नहीं सकता; उसमें अपने फ़ॉर्म के अनिवार्य कॉलम भरें। कॉन्फ़िगर होने पर भी `PT-001` यह देखता है कि कॉलम भरा है, यह नहीं कि उसमें लिखा मान सही है, और उसका स्तर `info` है। |
|
|
@@ -121,6 +158,10 @@ node ../scripts/sync-shared.mjs dsh-power-ticket-check
|
|
|
121
158
|
|
|
122
159
|
अंतिम कमांड `../_shared` का साझा किट `src/shared/` में कॉपी करता है; हर साझा बदलाव के बाद इसे दोबारा चलाएँ।
|
|
123
160
|
|
|
161
|
+
## PerryLink DSH Plugin Family
|
|
162
|
+
|
|
163
|
+
Full family index: [choose a checker by material](https://perrylink.github.io/zh/checkers/choose/) and [all plugins](https://github.com/PerryLink). This repository is one of them.
|
|
164
|
+
|
|
124
165
|
## License
|
|
125
166
|
|
|
126
167
|
[Apache License 2.0](LICENSE) © 2026 dsh-power-ticket-check contributors.
|
package/README-pt.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# dsh-power-ticket-check — Verificação da completude do permiso de trabalho elétrico e da ordem de emissão, autorização e encerramento
|
|
2
2
|
|
|
3
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
dsh plugin --profile <name> add dsh-power-ticket-check
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
|
|
3
10
|
[](https://dsh.market/)
|
|
11
|
+
[](https://dshfind.com/en/plugins/PerryLink/dsh-power-ticket-check?ref=badge)
|
|
4
12
|
|
|
5
13
|
`dsh-power-ticket-check` lê um **电力工作票** como um mapa plano dos nomes das colunas do próprio formulário para os respetivos valores, em conjunto com os papéis nele indicados, e verifica o que se pode exigir a um formulário: que todas as colunas do seu `requiredFields` configurado estejam preenchidas, que o 工作票种类 conste dos que a sua implantação declara, que 签发时间 → 许可时间 → 终结时间 formem uma sequência fisicamente possível, que um 延期时间 empurre o fim para a frente e não seja anterior à autorização, que os papéis configurados como exclusivos sejam desempenhados por pessoas diferentes, e que o texto das medidas de segurança e da autorização contenha os cinco termos de 安全技术措施 e os três de 许可手续 que o pacote procura. As verificações que não puderam ser executadas são listadas em `skipped` com o respetivo motivo, em vez de passarem em silêncio.
|
|
6
14
|
|
|
@@ -13,14 +21,48 @@ dsh --profile <name> --dump-config | grep 'dsh-power-ticket-check'
|
|
|
13
21
|
|
|
14
22
|
## Como é a saída
|
|
15
23
|
|
|
16
|
-

|
|
25
|
+
|
|
26
|
+
*Visão geral do fluxo: documento → regras → achados. Os exemplos abaixo usam a superfície real de comandos.*
|
|
17
27
|
|
|
18
|
-

|
|
19
28
|
|
|
20
29
|
Saída real deste plugin sobre o seu próprio fixture de teste `PT-003` — não é uma simulação. O pacote de regras não inventa citações, por isso cada achado nomeia a cláusula aplicada e avisa que o seu texto não foi obtido.
|
|
21
30
|
|
|
22
31
|
## O que ele responde
|
|
23
32
|
|
|
33
|
+
### Exemplos
|
|
34
|
+
|
|
35
|
+
A tabela abaixo é o conjunto de exemplos: a primeira linha é o caso detalhado e as demais são casos curtos.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
#### Saída detalhada
|
|
39
|
+
|
|
40
|
+
**Ferramenta** `power_ticket_check`
|
|
41
|
+
|
|
42
|
+
**Entrada**
|
|
43
|
+
|
|
44
|
+
~~~json
|
|
45
|
+
{"工作票编号":"DL-2026-0001","工作票种类":"电气第一种工作票","安全措施":"应停电、验电、装设接地线。"}
|
|
46
|
+
~~~
|
|
47
|
+
|
|
48
|
+
**Saída**
|
|
49
|
+
|
|
50
|
+
~~~json
|
|
51
|
+
{
|
|
52
|
+
"id": "dsh-power-ticket-check.PT-006.104aebcf",
|
|
53
|
+
"ruleId": "PT-006",
|
|
54
|
+
"severity": "error",
|
|
55
|
+
"locator": {
|
|
56
|
+
"column": "安全措施"
|
|
57
|
+
},
|
|
58
|
+
"found": "安全措施文本中未出现 2 项:悬挂标示牌、装设遮栏",
|
|
59
|
+
"expected": "在电气设备上工作,应有停电、验电、装设接地线、悬挂标示牌和装设遮栏(围栏)等保证安全的技术措施",
|
|
60
|
+
"fix": "核对票面是否写全五项;本条只核对是否写到,不判断措施内容是否与现场相符"
|
|
61
|
+
}
|
|
62
|
+
~~~
|
|
63
|
+
|
|
64
|
+
*Observado em `dsh-power-ticket-check/tests/fixtures/PT-006/PT-006-unsafe.json (cases.json expects 1×PT-006); executed parseMaterial+runCheck, checkedAt=2026-10-06T00:00:00.000Z`*
|
|
65
|
+
|
|
24
66
|
| Você pergunta | O que ele responde |
|
|
25
67
|
|---|---|
|
|
26
68
|
| Tal como vem, aprova todos os permís que lhe passo, por quê? | Porque `PT-001` declara-se a si mesma em `skipped`, e não como aprovada. A sua lista `requiredFields` vem vazia, pelo que a regra não pode ser executada; preencha-a com as colunas que o seu próprio formulário exige. Mesmo configurada, `PT-001` verifica que a coluna está preenchida, não que o valor esteja correto, e o seu nível é `info`. |
|
|
@@ -121,6 +163,10 @@ node ../scripts/sync-shared.mjs dsh-power-ticket-check
|
|
|
121
163
|
|
|
122
164
|
O último comando copia o kit compartilhado de `../_shared` para `src/shared/`; execute-o novamente após cada alteração compartilhada.
|
|
123
165
|
|
|
166
|
+
## PerryLink DSH Plugin Family
|
|
167
|
+
|
|
168
|
+
Full family index: [choose a checker by material](https://perrylink.github.io/zh/checkers/choose/) and [all plugins](https://github.com/PerryLink). This repository is one of them.
|
|
169
|
+
|
|
124
170
|
## License
|
|
125
171
|
|
|
126
172
|
[Apache License 2.0](LICENSE) © 2026 dsh-power-ticket-check contributors.
|
package/README-zh.md
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
# dsh-power-ticket-check — 电力工作票要素齐备性与签发许可终结顺序核对
|
|
2
2
|
|
|
3
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
4
|
+
|
|
5
|
+
<!-- topblock:v1 -->
|
|
6
|
+
> **这是什么** 电力工作票要素核对。输出一份「哪一行、哪一栏、差什么」的清单。
|
|
7
|
+
> **给谁用** 电力运维、工作票签发人;不用懂命令行。
|
|
8
|
+
> **你交什么** 这项核对用到的原始材料(表格、清单或文书);不改原件。Excel 可先转成 JSON/YAML,对话里也能代转。
|
|
9
|
+
> **它不做什么** 不判合规、不认定责任、不替代审核人;只列材料内部能逐条指认的差异。
|
|
10
|
+
> **怎么开始** 在 WorkBuddy / 扣子搜「安全合规核对包」(本检查是其中一项;上架以商城为准);或命令行:
|
|
11
|
+
> `dsh plugin --profile <name> add dsh-power-ticket-check`
|
|
12
|
+
<!-- /topblock:v1 -->
|
|
13
|
+
|
|
3
14
|
[](https://dsh.market/)
|
|
15
|
+
[](https://dshfind.com/en/plugins/PerryLink/dsh-power-ticket-check?ref=badge)
|
|
4
16
|
|
|
5
17
|
`dsh-power-ticket-check` 读取一份 **电力工作票**——以票面栏目名为键、栏目取值为值的平铺映射,外加票上列出的人员角色——按一张票面能被要求到的范围核对:本机构配置的 `requiredFields` 各栏是否都已填写、工作票种类是否在本机构列出的票种之内、签发时间 → 许可时间 → 终结时间 的顺序是否物理上成立、延期时间是否把结束时间向后推且不早于许可时间、本机构配置为须分设的角色是否由不同人员担任,以及安全措施与许可文本中是否出现规则库要求核对的安全技术措施五项与许可手续三项关键词。未能执行的检查逐条列在 `skipped` 并写明原因,而不是静默通过。
|
|
6
18
|
|
|
@@ -13,14 +25,48 @@ dsh --profile <name> --dump-config | grep 'dsh-power-ticket-check'
|
|
|
13
25
|
|
|
14
26
|
## 实际输出长什么样
|
|
15
27
|
|
|
16
|
-

|
|
29
|
+
|
|
30
|
+
*工作流概览:文档 → 规则包 → 核对结果。下面的示例使用实际命令面。*
|
|
17
31
|
|
|
18
|
-

|
|
19
32
|
|
|
20
33
|
本插件对自己 `PT-003` 测试夹具的**真实输出**,不是示意图。规则库不伪造引文,因此每条发现都会同时写明所引条款,以及该条款原文本次未取得。
|
|
21
34
|
|
|
22
35
|
## 它回答什么问题
|
|
23
36
|
|
|
37
|
+
### 示例
|
|
38
|
+
|
|
39
|
+
下表是示例集:第一行是详细走查,其余行是简短案例。
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
#### 详细输出
|
|
43
|
+
|
|
44
|
+
**工具** `power_ticket_check`
|
|
45
|
+
|
|
46
|
+
**输入**
|
|
47
|
+
|
|
48
|
+
~~~json
|
|
49
|
+
{"工作票编号":"DL-2026-0001","工作票种类":"电气第一种工作票","安全措施":"应停电、验电、装设接地线。"}
|
|
50
|
+
~~~
|
|
51
|
+
|
|
52
|
+
**输出**
|
|
53
|
+
|
|
54
|
+
~~~json
|
|
55
|
+
{
|
|
56
|
+
"id": "dsh-power-ticket-check.PT-006.104aebcf",
|
|
57
|
+
"ruleId": "PT-006",
|
|
58
|
+
"severity": "error",
|
|
59
|
+
"locator": {
|
|
60
|
+
"column": "安全措施"
|
|
61
|
+
},
|
|
62
|
+
"found": "安全措施文本中未出现 2 项:悬挂标示牌、装设遮栏",
|
|
63
|
+
"expected": "在电气设备上工作,应有停电、验电、装设接地线、悬挂标示牌和装设遮栏(围栏)等保证安全的技术措施",
|
|
64
|
+
"fix": "核对票面是否写全五项;本条只核对是否写到,不判断措施内容是否与现场相符"
|
|
65
|
+
}
|
|
66
|
+
~~~
|
|
67
|
+
|
|
68
|
+
*来源 `dsh-power-ticket-check/tests/fixtures/PT-006/PT-006-unsafe.json (cases.json expects 1×PT-006); executed parseMaterial+runCheck, checkedAt=2026-10-06T00:00:00.000Z`*
|
|
69
|
+
|
|
24
70
|
| 你会问 | 它怎么答 |
|
|
25
71
|
|---|---|
|
|
26
72
|
| 出厂状态下,随便一份工作票都能通过,为什么? | 因为 `PT-001` 是以 `skipped` 自报,不是判定通过。它的 `requiredFields` 清单出厂为空,本条无法执行;请按本机构票面把必填栏目填进去。即便配置好后,`PT-001` 也只核对栏目是否填写,不判断填写内容是否正确,且严重级为 `info`。 |
|
|
@@ -36,35 +82,17 @@ dsh --profile <name> --dump-config | grep 'dsh-power-ticket-check'
|
|
|
36
82
|
|---|---|---|
|
|
37
83
|
| 《电力安全工作规程 发电厂和变电站电气部分》 | GB 26860—2011 | PT-001, PT-002, PT-003, PT-004, PT-005, PT-006, PT-007 |
|
|
38
84
|
|
|
39
|
-
|
|
40
|
-
boxes are filled, that 签发 / 许可 / 终结 happened in an order that is physically possible, that 延期
|
|
41
|
-
moves the end forward, and that roles you require to be separate are held by different people. It does
|
|
42
|
-
**not** judge whether the safety measures written on the ticket were adequate, **does not** say which
|
|
43
|
-
kind of ticket a job needs, and **does not** verify that anyone's qualification is real.
|
|
85
|
+
**边界(中文译文,以英文原文为准):** 本插件按一张票面可以被要求到的范围核对一份 **电力工作票**——必填栏目是否填写,签发 / 许可 / 终结 的发生顺序是否物理上成立,延期是否把结束时间向后推,以及你要求分设的角色是否由不同人员担任。它**不**判断票面所写的安全措施是否充分,**不**指明某项作业需要哪一种工作票,也**不**核实任何人的资格是否真实。
|
|
44
86
|
|
|
45
|
-
> ### ⚠️
|
|
87
|
+
> ### ⚠️ 本插件拒绝做的三件事,以及决定其严重级的效力层级(以英文原文为准)
|
|
46
88
|
>
|
|
47
|
-
> **1.
|
|
48
|
-
> 「本标准的第5章和7.3.4为推荐性,其余为强制性」 — **the work-ticket regime sits in the *recommendatory*
|
|
49
|
-
> chapter 5.** So every rule resting on chapter 5 ships at `warn` or `info` and **nothing there can block a
|
|
50
|
-
> workflow**. `PT-006` (the five safety technical measures, clause 6.1.1) is the **only** `error`, because
|
|
51
|
-
> chapter 6 is mandatory. `PT-007` (the permit formalities, clause 5.5.1) is a `warn`; its note explains that
|
|
52
|
-
> an institution which wants those formalities to block can raise it by editing the rule pack, with no code
|
|
53
|
-
> change. A test asserts both directions: no chapter-5 rule is an `error`, and `PT-006` is the sole one.
|
|
89
|
+
> **1. 它尊重标准自身的效力层级。** GB 26860—2011 的前言逐字写着:「本标准的第5章和7.3.4为推荐性,其余为强制性」——**工作票制度位于*推荐性*的第 5 章。** 因此凡以第 5 章为依据的规则,出厂均为 `warn` 或 `info`,**其中没有任何一条能阻断流程**。`PT-006`(安全技术措施五项,6.1.1 条)是**唯一**的 `error`,因为第 6 章是强制性的。`PT-007`(许可手续,5.5.1 条)是 `warn`;其 note 说明,希望这些手续能阻断流程的机构,可以修改规则库将其提高,无需改代码。有一项测试对两个方向都做了断言:没有任何第 5 章的规则是 `error`,且 `PT-006` 是唯一一条。
|
|
54
90
|
>
|
|
55
|
-
> **2.
|
|
56
|
-
> and GB 26859—2011 in full: there is **no** "第一种工作票应工作前一日送达" deadline anywhere; 5.3.12 and
|
|
57
|
-
> 5.4.10 say only 「延期应办理手续」 with **no ceiling on duration or count**; and the statutory name is
|
|
58
|
-
> **紧急抢修单** (5.2.4), not "事故应急抢修单". A test asserts the pack records all three.
|
|
91
|
+
> **2. 它不采纳三项在标准中没有依据的说法。** 完整读过 GB 26860—2011 与 GB 26859—2011 之后:任何地方都**没有**「第一种工作票应工作前一日送达」这样的时限;5.3.12 与 5.4.10 只说「延期应办理手续」,**对延期时长与次数均无上限**;法定名称是**紧急抢修单**(5.2.4),而不是「事故应急抢修单」。有一项测试断言规则库记录了三者。
|
|
59
92
|
>
|
|
60
|
-
> **3.
|
|
61
|
-
> and appendices A–D are marked **资料性附录** (informative) in the standard's contents. So `PT-001` ships
|
|
62
|
-
> with an **empty** field list for you to fill from your own form, and reports at `info`.
|
|
93
|
+
> **3. 它不把票面版式当作强制要求。** 5.1.2 说工作票「**可**包含」这些项目,而附录 A–D 在标准目录中标为**资料性附录**(informative)。因此 `PT-001` 出厂时字段清单为**空**,由你按本单位票面填写,并以 `info` 报告。
|
|
63
94
|
>
|
|
64
|
-
>
|
|
65
|
-
> The plugin never judges whether the safety measures written on a ticket were adequate, which ticket
|
|
66
|
-
> kind a job needs, or whether anyone's qualification is real — the standard sets out roles' **duties**
|
|
67
|
-
> (5.4.1–5.4.5) and **no qualification conditions**.
|
|
95
|
+
> 还有两份清单属于你:`PT-002` 的票种与 `PT-005` 的互斥角色对。两者出厂均为空。本插件从不判断票面所写的安全措施是否充分、某项作业需要哪一种工作票,也不判断任何人的资格是否真实——标准规定的是各角色的**职责**(5.4.1–5.4.5),**没有规定任何资格条件**。
|
|
68
96
|
|
|
69
97
|
## Compatibility
|
|
70
98
|
|
|
@@ -121,6 +149,10 @@ node ../scripts/sync-shared.mjs dsh-power-ticket-check
|
|
|
121
149
|
|
|
122
150
|
第 4 项把 `../_shared` 的共享件同步进 `src/shared/`;每次改动共享件后都要重跑。
|
|
123
151
|
|
|
152
|
+
## PerryLink DSH Plugin Family
|
|
153
|
+
|
|
154
|
+
完整清单(62 个核查器 + 通用插件)见 [按材料选核查器](https://perrylink.github.io/zh/checkers/choose/);本仓只是其中一个。
|
|
155
|
+
|
|
124
156
|
## License
|
|
125
157
|
|
|
126
158
|
[Apache License 2.0](LICENSE) © 2026 dsh-power-ticket-check contributors.
|
package/README.md
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
# dsh-power-ticket-check — Power work-ticket completeness and issue-permit-termination order check
|
|
2
2
|
|
|
3
|
+
[English](README.md) · [简体中文](README-zh.md) · [Español](README-es.md) · [Português](README-pt.md) · [हिन्दी](README-hi.md)
|
|
4
|
+
|
|
5
|
+
<!-- topblock:v1 -->
|
|
6
|
+
> **What it is** — Power work-ticket completeness and issue-permit-termination order check. It returns a list of what is inconsistent, where, and what to fix.
|
|
7
|
+
> **Who it is for** — power operations and permit issuers; no command line required.
|
|
8
|
+
> **What you give it** — the source material the check works on (a table, register or document); the original is never modified. Excel can be converted to JSON/YAML first, in chat if the platform supports it.
|
|
9
|
+
> **What it does not do** — no compliance verdict, no liability finding, no replacement for the reviewer; differences only.
|
|
10
|
+
> **How to start** — search "Safety Compliance Suite" in WorkBuddy / Coze (this check is one part of it; availability as listed); or:
|
|
11
|
+
> `dsh plugin --profile <name> add dsh-power-ticket-check`
|
|
12
|
+
<!-- /topblock:v1 -->
|
|
13
|
+
|
|
3
14
|
[](https://dsh.market/)
|
|
15
|
+
[](https://dshfind.com/en/plugins/PerryLink/dsh-power-ticket-check?ref=badge)
|
|
4
16
|
|
|
5
17
|
`dsh-power-ticket-check` reads one **电力工作票** as a flat mapping of the ticket's own column names to their values, together with the roles named on it, and checks that ticket for what a form can be held to: that every column in your configured `requiredFields` is filled, that the 工作票种类 is one your deployment lists, that 签发时间 → 许可时间 → 终结时间 form a sequence that is physically possible, that a 延期时间 pushes the end forward and does not precede the permit, that roles you configured as exclusive are held by different people, and that the safety-measure and permit text carries the five 安全技术措施 terms and the three 许可手续 terms the pack looks for. Checks that could not run are listed in `skipped` with their reason rather than passing silently.
|
|
6
18
|
|
|
@@ -13,14 +25,46 @@ dsh --profile <name> --dump-config | grep 'dsh-power-ticket-check'
|
|
|
13
25
|
|
|
14
26
|
## What it looks like
|
|
15
27
|
|
|
16
|
-

|
|
29
|
+
|
|
30
|
+
*Workflow overview: document → rule pack → findings. The examples below use the real command surface.*
|
|
17
31
|
|
|
18
|
-

|
|
19
32
|
|
|
20
|
-
Real output from this plugin over its own `PT-003` test fixture — not a mock-up. The rule pack ships no invented quotations, so a finding names both the clause it applied and the fact that the clause text was not obtained.
|
|
21
33
|
|
|
22
34
|
## What it answers
|
|
23
35
|
|
|
36
|
+
### Examples
|
|
37
|
+
|
|
38
|
+
The table below is the example set: the first row is the detailed walkthrough, the remaining rows are short cases.
|
|
39
|
+
|
|
40
|
+
#### Detailed output
|
|
41
|
+
|
|
42
|
+
**Tool** `power_ticket_check`
|
|
43
|
+
|
|
44
|
+
**Input**
|
|
45
|
+
|
|
46
|
+
~~~json
|
|
47
|
+
{"工作票编号":"DL-2026-0001","工作票种类":"电气第一种工作票","安全措施":"应停电、验电、装设接地线。"}
|
|
48
|
+
~~~
|
|
49
|
+
|
|
50
|
+
**Output**
|
|
51
|
+
|
|
52
|
+
~~~json
|
|
53
|
+
{
|
|
54
|
+
"id": "dsh-power-ticket-check.PT-006.104aebcf",
|
|
55
|
+
"ruleId": "PT-006",
|
|
56
|
+
"severity": "error",
|
|
57
|
+
"locator": {
|
|
58
|
+
"column": "安全措施"
|
|
59
|
+
},
|
|
60
|
+
"found": "安全措施文本中未出现 2 项:悬挂标示牌、装设遮栏",
|
|
61
|
+
"expected": "在电气设备上工作,应有停电、验电、装设接地线、悬挂标示牌和装设遮栏(围栏)等保证安全的技术措施",
|
|
62
|
+
"fix": "核对票面是否写全五项;本条只核对是否写到,不判断措施内容是否与现场相符"
|
|
63
|
+
}
|
|
64
|
+
~~~
|
|
65
|
+
|
|
66
|
+
*Observed from `dsh-power-ticket-check/tests/fixtures/PT-006/PT-006-unsafe.json (cases.json expects 1×PT-006); executed parseMaterial+runCheck, checkedAt=2026-10-06T00:00:00.000Z`*
|
|
67
|
+
|
|
24
68
|
| You ask | What it answers |
|
|
25
69
|
|---|---|
|
|
26
70
|
| Out of the box it passes every ticket I run through it — why? | Because `PT-001` reports itself in `skipped`, not as a pass. Its `requiredFields` list ships empty, so the rule cannot run; fill it with the columns your own form requires. Even when configured, `PT-001` checks that a column is filled, not that the value in it is correct, and it sits at `info`. |
|
|
@@ -196,6 +240,10 @@ pnpm run build # tsdown -> lib/index.mjs + lib/index.d.mts
|
|
|
196
240
|
node ../scripts/sync-shared.mjs dsh-power-ticket-check # refresh src/shared from ../_shared
|
|
197
241
|
```
|
|
198
242
|
|
|
243
|
+
## PerryLink DSH Plugin Family
|
|
244
|
+
|
|
245
|
+
Full family index: [choose a checker by material](https://perrylink.github.io/zh/checkers/choose/) and [all plugins](https://github.com/PerryLink). This repository is one of them.
|
|
246
|
+
|
|
199
247
|
## License
|
|
200
248
|
|
|
201
249
|
[Apache License 2.0](LICENSE) © 2026 dsh-power-ticket-check contributors.
|
package/lib/index.d.mts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import Schema from "@deepseek-ai/schemastery";
|
|
2
2
|
import { Context } from "@deepseek-ai/cordis";
|
|
3
|
-
//#region src/config.d.ts
|
|
4
3
|
/**
|
|
5
4
|
* Every tunable lives here so an operator can change behaviour from
|
|
6
5
|
* `cordis.yml` without editing code (the family's "no hard-coded tunables"
|
|
7
6
|
* redline). The rule pack itself is data as well and can be pointed elsewhere.
|
|
8
7
|
*/
|
|
9
|
-
interface Config {
|
|
8
|
+
export interface Config {
|
|
10
9
|
/** Rule-pack path relative to the plugin package root. */
|
|
11
10
|
rulesFile: string;
|
|
12
11
|
/** Rule ids disabled for this deployment. */
|
|
@@ -18,13 +17,11 @@ interface Config {
|
|
|
18
17
|
/** Tool timeout budget in milliseconds. */
|
|
19
18
|
timeoutMs: number;
|
|
20
19
|
}
|
|
21
|
-
declare const Config: Schema<Config>;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
declare const name = "dsh-power-ticket-check";
|
|
25
|
-
declare const inject: string[];
|
|
20
|
+
export declare const Config: Schema<Config>;
|
|
21
|
+
export declare const name = "dsh-power-ticket-check";
|
|
22
|
+
export declare const inject: string[];
|
|
26
23
|
/** Tool id exposed to the model, and the row id in `cordis.patch.yml`. */
|
|
27
|
-
declare const TOOL_NAME = "power_ticket_check";
|
|
24
|
+
export declare const TOOL_NAME = "power_ticket_check";
|
|
28
25
|
/**
|
|
29
26
|
* Locate a package-owned file such as the rule pack.
|
|
30
27
|
*
|
|
@@ -36,7 +33,7 @@ declare const TOOL_NAME = "power_ticket_check";
|
|
|
36
33
|
* @returns the resolved absolute path.
|
|
37
34
|
* @throws Error naming every location tried, when the file is absent.
|
|
38
35
|
*/
|
|
39
|
-
declare function resolvePackageFile(relative: string): string;
|
|
36
|
+
export declare function resolvePackageFile(relative: string): string;
|
|
40
37
|
/**
|
|
41
38
|
* Register the checker tool.
|
|
42
39
|
*
|
|
@@ -47,6 +44,4 @@ declare function resolvePackageFile(relative: string): string;
|
|
|
47
44
|
* @param ctx - plugin context, with `tools` already available.
|
|
48
45
|
* @param config - validated configuration.
|
|
49
46
|
*/
|
|
50
|
-
declare function apply(ctx: Context, config: Config): () => void;
|
|
51
|
-
//#endregion
|
|
52
|
-
export { Config, TOOL_NAME, apply, inject, name, resolvePackageFile };
|
|
47
|
+
export declare function apply(ctx: Context, config: Config): () => void;
|
package/lib/index.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { existsSync } from "node:fs";
|
|
|
3
3
|
import { dirname, isAbsolute, resolve } from "node:path";
|
|
4
4
|
import { defineTool } from "@deepseek-ai/dsh-tools";
|
|
5
5
|
import Schema from "@deepseek-ai/schemastery";
|
|
6
|
-
|
|
6
|
+
// src/config.ts
|
|
7
7
|
const Config = Schema.object({
|
|
8
8
|
rulesFile: Schema.string().default("rules/power-ticket-check.yaml").description("规则库文件路径(相对插件包根目录)。替换该文件即可切换规则集版本。"),
|
|
9
9
|
disabledRules: Schema.array(Schema.string()).default([]).description("要停用的规则 id 列表;停用的规则会出现在报告的 skipped 中。"),
|
|
@@ -11,8 +11,7 @@ const Config = Schema.object({
|
|
|
11
11
|
skipNotes: Schema.string().default("").description("附加到每条 skipped 说明后的备注,例如标注本机构实施细则。"),
|
|
12
12
|
timeoutMs: Schema.number().default(12e4).description("工具协作式超时预算(毫秒)。")
|
|
13
13
|
});
|
|
14
|
-
|
|
15
|
-
//#region src/shared/rules.ts
|
|
14
|
+
// src/shared/rules.ts
|
|
16
15
|
/**
|
|
17
16
|
* Compose the one-line `basis` string rendered into reports.
|
|
18
17
|
* @param basis - the rule's normative basis.
|
|
@@ -42,8 +41,7 @@ function disabledAsSkipped(ruleset, disabledIds, reason) {
|
|
|
42
41
|
reason
|
|
43
42
|
}));
|
|
44
43
|
}
|
|
45
|
-
|
|
46
|
-
//#region src/shared/yaml.ts
|
|
44
|
+
// src/shared/yaml.ts
|
|
47
45
|
/**
|
|
48
46
|
* Minimal, dependency-free YAML reader for rule packs and check material.
|
|
49
47
|
*
|
|
@@ -396,6 +394,10 @@ var Reader = class {
|
|
|
396
394
|
if (!isSequenceItem(line.text)) break;
|
|
397
395
|
this.index += 1;
|
|
398
396
|
const rest = line.text === "-" ? "" : line.text.slice(2).trim();
|
|
397
|
+
if (rest.startsWith("{") || rest.startsWith("[")) {
|
|
398
|
+
items.push(parseScalar(rest, line.num));
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
399
401
|
if ((rest === "" ? -1 : findKeySeparator(rest)) >= 0) {
|
|
400
402
|
items.push(this.readMapping(indent + 2, {
|
|
401
403
|
text: rest,
|
|
@@ -475,8 +477,7 @@ function requireString(source, key, where) {
|
|
|
475
477
|
if (typeof value !== "string" || value.trim() === "") throw new YamlSubsetError(`${where}: missing required string field "${key}"`);
|
|
476
478
|
return value;
|
|
477
479
|
}
|
|
478
|
-
|
|
479
|
-
//#region src/shared/ruleset.ts
|
|
480
|
+
// src/shared/ruleset.ts
|
|
480
481
|
/**
|
|
481
482
|
* Rule-pack loading and validation.
|
|
482
483
|
*
|
|
@@ -606,8 +607,7 @@ function paramStrings(rule, key, fallback) {
|
|
|
606
607
|
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) throw new YamlSubsetError(`rule ${rule.id}: params.${key} must be a list of strings`);
|
|
607
608
|
return value;
|
|
608
609
|
}
|
|
609
|
-
|
|
610
|
-
//#region src/shared/report.ts
|
|
610
|
+
// src/shared/report.ts
|
|
611
611
|
/** Locator fields that participate in the stable issue id, in fixed order. */
|
|
612
612
|
const LOCATOR_ID_KEYS = [
|
|
613
613
|
"file",
|
|
@@ -683,8 +683,7 @@ function sortValue(value) {
|
|
|
683
683
|
}
|
|
684
684
|
return target;
|
|
685
685
|
}
|
|
686
|
-
|
|
687
|
-
//#region src/shared/datetime.ts
|
|
686
|
+
// src/shared/datetime.ts
|
|
688
687
|
const DATE_PATTERN = /^(\d{4})[-/.](\d{1,2})[-/.](\d{1,2})$/;
|
|
689
688
|
const TIME_PATTERN = /^(\d{1,2}):(\d{2})(?::(\d{2}))?$/;
|
|
690
689
|
function pad(value, width = 2) {
|
|
@@ -744,8 +743,7 @@ function dayNumber(date) {
|
|
|
744
743
|
function instant$1(wall) {
|
|
745
744
|
return dayNumber(wall.date) * 1440 + wall.minutes;
|
|
746
745
|
}
|
|
747
|
-
|
|
748
|
-
//#region src/check.ts
|
|
746
|
+
// src/check.ts
|
|
749
747
|
/**
|
|
750
748
|
* Pure check core: `(input, ruleset, options) => Report`.
|
|
751
749
|
*
|
|
@@ -1050,8 +1048,7 @@ function runCheck(input, ruleset, options) {
|
|
|
1050
1048
|
skipped
|
|
1051
1049
|
});
|
|
1052
1050
|
}
|
|
1053
|
-
|
|
1054
|
-
//#region src/model.ts
|
|
1051
|
+
// src/model.ts
|
|
1055
1052
|
/** Columns recognised as a named role, in priority order. */
|
|
1056
1053
|
const ROLE_COLUMNS = [
|
|
1057
1054
|
"工作票签发人",
|
|
@@ -1062,8 +1059,7 @@ const ROLE_COLUMNS = [
|
|
|
1062
1059
|
"值班负责人",
|
|
1063
1060
|
"调度许可人"
|
|
1064
1061
|
];
|
|
1065
|
-
|
|
1066
|
-
//#region src/parse.ts
|
|
1062
|
+
// src/parse.ts
|
|
1067
1063
|
/**
|
|
1068
1064
|
* Reader for the power work ticket.
|
|
1069
1065
|
*
|
|
@@ -1210,12 +1206,10 @@ function parseMaterial(source, target) {
|
|
|
1210
1206
|
if (input.roles.length === 0) warnings.push("材料中没有可识别的人员角色列,人员相关检查将无法执行");
|
|
1211
1207
|
return input;
|
|
1212
1208
|
}
|
|
1213
|
-
|
|
1214
|
-
//#region src/shared/wording.ts
|
|
1209
|
+
// src/shared/wording.ts
|
|
1215
1210
|
/** Footer appended to every rendered report. */
|
|
1216
1211
|
const DISCLAIMER = "免责声明:本报告由程序按声明的规则集自动生成,仅列出与所引条款之间的字面差异,供人工复核线索使用;不构成对任何事实、行为或文件的定性意见,也不替代主管人员、评审专家或监管机构的判断。规则集的时效性与适用范围以引用文件的最新有效版本为准。";
|
|
1217
|
-
|
|
1218
|
-
//#region src/view.ts
|
|
1212
|
+
// src/view.ts
|
|
1219
1213
|
/**
|
|
1220
1214
|
* Model-facing projection of a {@link Report}.
|
|
1221
1215
|
*
|
|
@@ -1295,8 +1289,7 @@ function buildView(report) {
|
|
|
1295
1289
|
reportJson: canonicalJson(report)
|
|
1296
1290
|
};
|
|
1297
1291
|
}
|
|
1298
|
-
|
|
1299
|
-
//#region src/shared/memo.ts
|
|
1292
|
+
// src/shared/memo.ts
|
|
1300
1293
|
/**
|
|
1301
1294
|
* Memoized loading of package-owned rule packs.
|
|
1302
1295
|
*
|
|
@@ -1319,8 +1312,7 @@ function loadRulesetFile(path) {
|
|
|
1319
1312
|
pending.catch(() => cache.delete(path));
|
|
1320
1313
|
return pending;
|
|
1321
1314
|
}
|
|
1322
|
-
|
|
1323
|
-
//#region src/index.ts
|
|
1315
|
+
// src/index.ts
|
|
1324
1316
|
const name = "dsh-power-ticket-check";
|
|
1325
1317
|
const inject = ["tools"];
|
|
1326
1318
|
/** Tool id exposed to the model, and the row id in `cordis.patch.yml`. */
|
|
@@ -1457,5 +1449,4 @@ function apply(ctx, config) {
|
|
|
1457
1449
|
}
|
|
1458
1450
|
}));
|
|
1459
1451
|
}
|
|
1460
|
-
//#endregion
|
|
1461
1452
|
export { Config, TOOL_NAME, apply, inject, name, resolvePackageFile };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-power-ticket-check",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.10",
|
|
4
4
|
"description": "电力工作票要素齐备性与签发许可顺序核对(依据现行电力安全工作规程,仅提示差异,不作出定性结论)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/index.mjs",
|
|
@@ -78,16 +78,15 @@
|
|
|
78
78
|
"@deepseek-ai/schemastery": "^3.18.2"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@deepseek-ai/cordis": "4.0.5
|
|
82
|
-
"@deepseek-ai/dsh-package-manifest": "0.2.1-rc.
|
|
81
|
+
"@deepseek-ai/cordis": "4.0.5",
|
|
82
|
+
"@deepseek-ai/dsh-package-manifest": "0.2.1-rc.3",
|
|
83
83
|
"@deepseek-ai/dsh-tools": "0.2.1-rc.2",
|
|
84
|
-
"@deepseek-ai/schemastery": "3.18.5
|
|
84
|
+
"@deepseek-ai/schemastery": "3.18.5",
|
|
85
85
|
"@types/node": "^22.20.1",
|
|
86
86
|
"vitest": "^3.2.7",
|
|
87
|
-
"@deepseek-ai/dsh-working-directory": "0.2.1-rc.2"
|
|
88
|
-
|
|
89
|
-
"dependencies": {
|
|
90
|
-
"tsdown": "^0.22.14",
|
|
87
|
+
"@deepseek-ai/dsh-working-directory": "0.2.1-rc.2",
|
|
88
|
+
"tsdown": "^0.23.1",
|
|
91
89
|
"typescript": "^5.9.3"
|
|
92
|
-
}
|
|
90
|
+
},
|
|
91
|
+
"dependencies": {}
|
|
93
92
|
}
|