dsh-industry-research 0.3.6 → 0.3.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/CHANGELOG.md +27 -0
- package/README.es.md +4 -3
- package/README.hi.md +4 -3
- package/README.md +4 -3
- package/README.pt.md +4 -3
- package/README.zh.md +4 -3
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/lib/index.js +1 -1
- package/lib/types/version.d.ts +1 -1
- package/lib/types/version.js +1 -1
- package/package.json +14 -16
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,33 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.3.8] - 2026-09-10
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Pin the `@deepseek-ai/dsh-*` dev/test dependencies to the published `0.1.5-rc.1` line and record `0.1.5-rc.1` in `dshWorkshop.compatibility.dshVersions`; the monthly Compat workflow now runs against `0.1.5-rc.1`. The peer range `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` is unchanged, so no supported host line is dropped.
|
|
15
|
+
|
|
16
|
+
### Docs
|
|
17
|
+
|
|
18
|
+
- Refresh the five-language README compatibility baseline to `dsh-v0.1.5-rc.1` (verified 2026-09-10).
|
|
19
|
+
|
|
20
|
+
## [0.3.7] - 2026-09-09
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Retarget the test harness `SystemPrompt` config from the removed `persona` field to `personaPrefix` (host commit `40792330c0` split it into `personaPrefix`/`personaSuffix`), which unblocked `typecheck` and `typecheck:ci` on the 0.1.5-alpha.1 peers; no behavior change.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- Move the published-dependency baseline to dsh `0.1.5-alpha.1`: devDependency pins, `dshWorkshop.compatibility.dshVersions`, and the `compat.yml` CLI/bundle pins now target that line, while the `@deepseek-ai/dsh-*` peer ranges keep both the 0.1.2-rc.1 and 0.1.5-alpha.1 lines; no behavior change.
|
|
29
|
+
|
|
30
|
+
### Docs
|
|
31
|
+
|
|
32
|
+
- Refresh the five-language README Compatibility sections, AGENTS.md, and THIRD_PARTY_NOTICES.md to the verified `dsh-v0.1.5-alpha.1` baseline and the composite peer range; no behavior change.
|
|
33
|
+
|
|
34
|
+
|
|
8
35
|
## [0.3.6] - 2026-09-08
|
|
9
36
|
|
|
10
37
|
### Docs
|
package/README.es.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
[](https://github.com/topics/dsh-plugin)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
12
13
|
[](#)
|
|
13
14
|
[](https://github.com/PerryLink/dsh-industry-research/actions)
|
|
14
15
|
[](https://github.com/PerryLink/dsh-industry-research/releases)
|
|
@@ -25,11 +26,11 @@
|
|
|
25
26
|
|
|
26
27
|
## Compatibility
|
|
27
28
|
|
|
28
|
-
- DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
- DeepSeek Harness `dsh-v0.1.5-rc.1` (tag de GitHub, verificado el 2026-09-10; peers en `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0`).
|
|
29
30
|
0.1.2-rc.1 (adaptado el 2026-09-02): el sobre de sesión conserva su campo ignorable solo para compatibilidad de lectura de logs almacenados - Session.append aún no puede estamparlo, por lo que el comportamiento de la puerta no cambia.
|
|
30
|
-
Verificado el 2026-09-
|
|
31
|
+
Verificado el 2026-09-10 contra el checkout master dsh-v0.1.5-rc.1 (cadena de puertas completa; el smoke de instalación de perfil real lo ejecuta el job mensual `compat.yml`).
|
|
31
32
|
- Node `^22.19.0 || >=24.0.0`, solo ESM (`"type": "module"`).
|
|
32
|
-
- Dependencias peer: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, y `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` en `>=0.1.2-rc.1 <0.2.0` (todas compuestas por el bundle oficial `dsh-base`).
|
|
33
|
+
- Dependencias peer: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, y `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` en `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` (todas compuestas por el bundle oficial `dsh-base`).
|
|
33
34
|
- Capacidades opcionales, resueltas en tiempo de ejecución (nunca inyectadas): `ctx.web` (recuperación de fuentes públicas, compuesta por `dsh-base`) y `ctx.researchReport` (el motor de sellado del plugin hermano `dsh-research-report`).
|
|
34
35
|
|
|
35
36
|
## What you get
|
package/README.hi.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
[](https://github.com/topics/dsh-plugin)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
12
13
|
[](#)
|
|
13
14
|
[](https://github.com/PerryLink/dsh-industry-research/actions)
|
|
14
15
|
[](https://github.com/PerryLink/dsh-industry-research/releases)
|
|
@@ -25,11 +26,11 @@
|
|
|
25
26
|
|
|
26
27
|
## Compatibility
|
|
27
28
|
|
|
28
|
-
- DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
- DeepSeek Harness `dsh-v0.1.5-rc.1` (GitHub tag, 2026-09-10 को सत्यापित; peers `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` पर)।
|
|
29
30
|
0.1.2-rc.1 (2026-09-02 को अनुकूलित): सत्र लिफ़ाफ़ा अपना ignorable फ़ील्ड केवल संग्रहीत-लॉग पठन संगतता के लिए रखता है - Session.append अभी भी इसे स्टैम्प नहीं कर सकता, इसलिए गेट व्यवहार अपरिवर्तित है।
|
|
30
|
-
dsh-v0.1.
|
|
31
|
+
dsh-v0.1.5-rc.1 master checkout के विरुद्ध 2026-09-10 को सत्यापित (पूर्ण गेट श्रृंखला; वास्तविक प्रोफ़ाइल इंस्टॉल स्मोक मासिक `compat.yml` जॉब चलाता है)।
|
|
31
32
|
- Node `^22.19.0 || >=24.0.0`, केवल ESM (`"type": "module"`)।
|
|
32
|
-
- Peer निर्भरताएँ: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, और `>=0.1.2-rc.1 <0.2.0` पर `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` (सभी आधिकारिक `dsh-base` बंडल में समाहित)।
|
|
33
|
+
- Peer निर्भरताएँ: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, और `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` पर `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` (सभी आधिकारिक `dsh-base` बंडल में समाहित)।
|
|
33
34
|
- वैकल्पिक क्षमताएँ, निष्पादन समय पर खोजी जाती हैं (कभी इंजेक्ट नहीं): `ctx.web` (सार्वजनिक-स्रोत पुनर्प्राप्ति, `dsh-base` में समाहित) और `ctx.researchReport` (सहयोगी `dsh-research-report` प्लगइन का सीलिंग इंजन)।
|
|
34
35
|
|
|
35
36
|
## What you get
|
package/README.md
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
[](https://github.com/topics/dsh-plugin)
|
|
13
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
13
14
|
[](#)
|
|
14
15
|
[](https://github.com/PerryLink/dsh-industry-research/actions)
|
|
15
16
|
[](https://github.com/PerryLink/dsh-industry-research/releases)
|
|
@@ -26,11 +27,11 @@
|
|
|
26
27
|
|
|
27
28
|
## Compatibility
|
|
28
29
|
|
|
29
|
-
- DeepSeek Harness `dsh-v0.1.
|
|
30
|
+
- DeepSeek Harness `dsh-v0.1.5-rc.1` (GitHub tag, verified 2026-09-10; peers `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0`).
|
|
30
31
|
0.1.2-rc.1 (adapted 2026-09-02): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged.
|
|
31
|
-
Verified 2026-09-
|
|
32
|
+
Verified 2026-09-10 against the dsh-v0.1.5-rc.1 master checkout (full gate chain; the real profile install smoke runs in the monthly `compat.yml` job).
|
|
32
33
|
- Node `^22.19.0 || >=24.0.0`, ESM only (`"type": "module"`).
|
|
33
|
-
- Peer dependencies: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, and `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` at `>=0.1.2-rc.1 <0.2.0` (all composed by the official `dsh-base` bundle).
|
|
34
|
+
- Peer dependencies: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, and `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` at `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` (all composed by the official `dsh-base` bundle).
|
|
34
35
|
- Optional, looked up at execution time (never injected): `ctx.web` (public-source retrieval — composed by `dsh-base`) and `ctx.researchReport` (the sibling `dsh-research-report` sealing engine).
|
|
35
36
|
|
|
36
37
|
## What you get
|
package/README.pt.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
[](https://github.com/topics/dsh-plugin)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
12
13
|
[](#)
|
|
13
14
|
[](https://github.com/PerryLink/dsh-industry-research/actions)
|
|
14
15
|
[](https://github.com/PerryLink/dsh-industry-research/releases)
|
|
@@ -25,11 +26,11 @@
|
|
|
25
26
|
|
|
26
27
|
## Compatibility
|
|
27
28
|
|
|
28
|
-
- DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
- DeepSeek Harness `dsh-v0.1.5-rc.1` (tag do GitHub, verificado em 2026-09-10; peers em `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0`).
|
|
29
30
|
0.1.2-rc.1 (adaptado em 2026-09-02): o envelope de sessão mantém seu campo ignorable apenas para compatibilidade de leitura de logs armazenados - o Session.append ainda não consegue estampá-lo, então o comportamento da porta não muda.
|
|
30
|
-
Verificado em 2026-09-
|
|
31
|
+
Verificado em 2026-09-10 contra o checkout master dsh-v0.1.5-rc.1 (cadeia de portas completa; o smoke de instalação de perfil real roda no job mensal `compat.yml`).
|
|
31
32
|
- Node `^22.19.0 || >=24.0.0`, apenas ESM (`"type": "module"`).
|
|
32
|
-
- Dependências peer: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, e `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` em `>=0.1.2-rc.1 <0.2.0` (todas compostas pelo bundle oficial `dsh-base`).
|
|
33
|
+
- Dependências peer: `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`, e `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-skill`, `@deepseek-ai/dsh-skill-filesystem` em `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` (todas compostas pelo bundle oficial `dsh-base`).
|
|
33
34
|
- Capacidades opcionais, resolvidas em tempo de execução (nunca injetadas): `ctx.web` (recuperação de fontes públicas, composta pelo `dsh-base`) e `ctx.researchReport` (o motor de selagem do plugin irmão `dsh-research-report`).
|
|
34
35
|
|
|
35
36
|
## What you get
|
package/README.zh.md
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
[](LICENSE)
|
|
11
11
|
[](https://github.com/topics/dsh-plugin)
|
|
12
|
+
[](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
|
|
12
13
|
[](#)
|
|
13
14
|
[](https://github.com/PerryLink/dsh-industry-research/actions)
|
|
14
15
|
[](https://github.com/PerryLink/dsh-industry-research/releases)
|
|
@@ -25,11 +26,11 @@
|
|
|
25
26
|
|
|
26
27
|
## Compatibility
|
|
27
28
|
|
|
28
|
-
- DeepSeek Harness `dsh-v0.1.
|
|
29
|
+
- DeepSeek Harness `dsh-v0.1.5-rc.1`(GitHub tag,2026-09-10 已核验;peer 范围 `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0`)。
|
|
29
30
|
0.1.2-rc.1(2026-09-02 已适配):会话信封保留 ignorable 字段但仅用于存量日志读取兼容——Session.append 仍无法盖章,门控行为不变。
|
|
30
|
-
2026-09-
|
|
31
|
+
2026-09-10 已核验:对照 dsh-v0.1.5-rc.1 master checkout 实测(完整门禁链;真实 profile 安装冒烟由每月 `compat.yml` 任务执行)。
|
|
31
32
|
- Node `^22.19.0 || >=24.0.0`,仅 ESM(`"type": "module"`)。
|
|
32
|
-
- Peer 依赖:`@deepseek-ai/cordis ^4.0.2`、`@deepseek-ai/schemastery ^3.18.2`,以及 `>=0.1.2-rc.1 <0.2.0` 的 `@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-skill`、`@deepseek-ai/dsh-skill-filesystem`(官方 `dsh-base` bundle 均已组合)。
|
|
33
|
+
- Peer 依赖:`@deepseek-ai/cordis ^4.0.2`、`@deepseek-ai/schemastery ^3.18.2`,以及 `>=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0` 的 `@deepseek-ai/dsh-tools`、`@deepseek-ai/dsh-skill`、`@deepseek-ai/dsh-skill-filesystem`(官方 `dsh-base` bundle 均已组合)。
|
|
33
34
|
- 可选能力在执行时查找(绝不注入):`ctx.web`(公开源检索,`dsh-base` 已组合)与 `ctx.researchReport`(兄弟插件 `dsh-research-report` 的封存引擎)。
|
|
34
35
|
|
|
35
36
|
## What you get
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -13,7 +13,7 @@ published tarball except where noted; these are install-time dependencies:
|
|
|
13
13
|
| [typescript](https://github.com/microsoft/TypeScript) | `^5.9.0` | Apache-2.0 | Build-time declaration emission (`lib/types/`) |
|
|
14
14
|
| [@deepseek-ai/cordis](https://www.npmjs.com/package/@deepseek-ai/cordis) | `^4.0.2` (peer) | See package | The plugin runtime |
|
|
15
15
|
| [@deepseek-ai/schemastery](https://www.npmjs.com/package/@deepseek-ai/schemastery) | `^3.18.2` (peer) | See package | Configuration schema |
|
|
16
|
-
| `@deepseek-ai/dsh-*` peers |
|
|
16
|
+
| `@deepseek-ai/dsh-*` peers | `>=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0` (peer) | See packages | Official harness seams (`dsh-tools`, `dsh-skill`, `dsh-skill-filesystem`) |
|
|
17
17
|
|
|
18
18
|
At runtime the plugin talks to the harness services listed as peerDependencies
|
|
19
19
|
plus the optional `ctx.web` and `ctx.researchReport` capabilities (looked up
|
package/lib/index.js
CHANGED
|
@@ -3672,7 +3672,7 @@ function buildIndustryReportTool(ctx, config) {
|
|
|
3672
3672
|
* @module dsh-industry-research/version
|
|
3673
3673
|
*/
|
|
3674
3674
|
/** The package version. */
|
|
3675
|
-
const VERSION = "0.3.
|
|
3675
|
+
const VERSION = "0.3.8";
|
|
3676
3676
|
//#endregion
|
|
3677
3677
|
//#region src/index.ts
|
|
3678
3678
|
/**
|
package/lib/types/version.d.ts
CHANGED
package/lib/types/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-industry-research",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"description": "Industry and company research domain pack for DeepSeek Harness: methodology skills, an industry-chain structure model (industry_map), public-source policy/news tracking over ctx.web (industry_track), company scan cards (company_scan), and auditable research reports with an optional ctx.researchReport sealing bridge and a builtin Markdown fallback (industry_report). Research only — not investment advice.",
|
|
5
5
|
"author": "dsh-industry-research contributors",
|
|
6
6
|
"repository": {
|
|
@@ -66,9 +66,7 @@
|
|
|
66
66
|
"native-code:none"
|
|
67
67
|
],
|
|
68
68
|
"compatibility": {
|
|
69
|
-
"dshVersions": [
|
|
70
|
-
"0.1.2-rc.1"
|
|
71
|
-
]
|
|
69
|
+
"dshVersions": ["0.1.2-rc.1","0.1.5-rc.1"]
|
|
72
70
|
},
|
|
73
71
|
"capability": {
|
|
74
72
|
"id": "industry-research",
|
|
@@ -99,9 +97,9 @@
|
|
|
99
97
|
"packageManager": "pnpm@11.7.0",
|
|
100
98
|
"peerDependencies": {
|
|
101
99
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
102
|
-
"@deepseek-ai/dsh-skill": ">=0.1.2-rc.1 <0.2.0",
|
|
103
|
-
"@deepseek-ai/dsh-skill-filesystem": ">=0.1.2-rc.1 <0.2.0",
|
|
104
|
-
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0",
|
|
100
|
+
"@deepseek-ai/dsh-skill": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
|
|
101
|
+
"@deepseek-ai/dsh-skill-filesystem": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
|
|
102
|
+
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
|
|
105
103
|
"@deepseek-ai/schemastery": "^3.18.2"
|
|
106
104
|
},
|
|
107
105
|
"dependencies": {
|
|
@@ -112,20 +110,20 @@
|
|
|
112
110
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
113
111
|
"@deepseek-ai/cordis-plugin-include": "^1.0.7",
|
|
114
112
|
"@deepseek-ai/cordis-plugin-loader": "^1.0.3",
|
|
115
|
-
"@deepseek-ai/dsh-agent": "0.1.
|
|
116
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
117
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
118
|
-
"@deepseek-ai/dsh-skill": "0.1.
|
|
119
|
-
"@deepseek-ai/dsh-skill-filesystem": "0.1.
|
|
120
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.
|
|
121
|
-
"@deepseek-ai/dsh-tools": "0.1.
|
|
122
|
-
"@deepseek-ai/dsh-web": "0.1.
|
|
113
|
+
"@deepseek-ai/dsh-agent": "0.1.5-rc.1",
|
|
114
|
+
"@deepseek-ai/dsh-llm": "0.1.5-rc.1",
|
|
115
|
+
"@deepseek-ai/dsh-session": "0.1.5-rc.1",
|
|
116
|
+
"@deepseek-ai/dsh-skill": "0.1.5-rc.1",
|
|
117
|
+
"@deepseek-ai/dsh-skill-filesystem": "0.1.5-rc.1",
|
|
118
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.5-rc.1",
|
|
119
|
+
"@deepseek-ai/dsh-tools": "0.1.5-rc.1",
|
|
120
|
+
"@deepseek-ai/dsh-web": "0.1.5-rc.1",
|
|
123
121
|
"@deepseek-ai/schemastery": "^3.18.2",
|
|
124
122
|
"@types/node": "^22.19.0",
|
|
125
123
|
"@vitest/coverage-v8": "^3.2.0",
|
|
126
124
|
"oxlint": "0.18.1",
|
|
127
125
|
"vitest": "^3.2.0",
|
|
128
|
-
"@deepseek-ai/dsh-attachment": "0.1.
|
|
126
|
+
"@deepseek-ai/dsh-attachment": "0.1.5-rc.1"
|
|
129
127
|
},
|
|
130
128
|
"scripts": {
|
|
131
129
|
"build": "node scripts/prepare.mjs",
|
package/src/version.ts
CHANGED