dsh-plugin-upgrade 0.1.0

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.hi.md ADDED
@@ -0,0 +1,172 @@
1
+ <div align="center">
2
+
3
+ # ⬆️ dsh-plugin-upgrade
4
+ - **1024 स्टोर चैनल**: एक बार `npm i -g dsh1024` चलाएँ, फिर `dsh1024 plugin --profile web add dsh-plugin-upgrade` (यह [deepseek1024.com](https://deepseek1024.com) की इंस्टॉल रैंकिंग में गिना जाता है)।
5
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-plugin-upgrade)
6
+
7
+ **DeepSeek Harness के लिए संस्करण-लॉक प्लगइन अपग्रेड स्किल — `0.1.3-alpha.1` → `0.1.5-alpha.1`।**
8
+
9
+ *एक संस्करण कार्ड और एक शून्य-निर्भरता सीम-स्कैनर, ताकि «typecheck हरा है» को कभी «प्लगइन अब भी चलता है» न समझा जाए।*
10
+
11
+ > **आधिकारिक रिपॉज़िटरी।** यह dsh-plugin-upgrade की एकमात्र आधिकारिक रिपॉज़िटरी है, जिसे PerryLink अनुरक्षित करता है। अन्य खातों की समान-नाम वाली रिपॉज़िटरी इससे संबद्ध नहीं हैं।
12
+
13
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
14
+ [![DSH plugin](https://img.shields.io/badge/dsh--plugin-✅-green)](https://github.com/topics/dsh-plugin)
15
+ [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-plugin-upgrade.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
16
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
17
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-plugin-upgrade/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-plugin-upgrade/actions)
18
+ [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-plugin-upgrade?label=version)](https://github.com/PerryLink/dsh-plugin-upgrade/releases)
19
+ [![npm version](https://img.shields.io/npm/v/dsh-plugin-upgrade)](https://www.npmjs.com/package/dsh-plugin-upgrade)
20
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-plugin-upgrade)](https://www.npmjs.com/package/dsh-plugin-upgrade)
21
+
22
+ [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
23
+
24
+ </div>
25
+
26
+ ---
27
+
28
+ ## संगतता
29
+
30
+ | सतह | स्थिति |
31
+ |---|---|
32
+ | हार्नेस | DeepSeek Harness `0.1.5-alpha.1` (checkout `19d2e38480`, tag `dsh-v0.1.5-alpha.1` = `5dda764ed3`)। पीयर बैंड `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`। |
33
+ | Node | `^22.19.0 \|\| >=24.0.0` |
34
+ | प्लेटफ़ॉर्म | जहाँ Node चले; स्कैनर केवल फ़ाइल सिस्टम पढ़ता है और प्लेटफ़ॉर्म-निरपेक्ष है |
35
+ | मॉडल | केवल-पाठ मॉडल पूरी तरह समर्थित; स्किल एक Markdown बॉडी है, किसी टूल या विज़न की आवश्यकता नहीं |
36
+ | दायरा | **केवल एक कॉरिडोर**: `0.1.3-alpha.1` → `0.1.5-alpha.1`। यह सामान्य माइग्रेशन फ़्रेमवर्क नहीं है। |
37
+
38
+ ## आपको क्या मिलता है
39
+
40
+ दो हिस्से, एक ही सीम-कैटलॉग:
41
+
42
+ - **एक बंडल एजेंट स्किल (`plugin-upgrade-015`)** — एक संस्करण कार्ड और «ठीक करो-सत्यापित करो» चक्र। मॉडल इसे तभी लोड करता है जब कार्य को वास्तव में ज़रूरत हो; यह पैकेज सिस्टम प्रॉम्प्ट में कोई पैराग्राफ़ नहीं जोड़ता और कोई टूल पंजीकृत नहीं करता।
43
+ - **एक शून्य-निर्भरता CLI (`dsh-plugin-upgrade-scan`)** — 2026-09-09 की अडैप्टेशन लहर में 40 वास्तविक प्लगइन रिपॉज़िटरी पर मापी गई दस सीमों के लिए `file:line` तथ्य देता है। कोई भी error-स्तर का हिट मिलने पर एग्ज़िट `1`, इसलिए यह सीधे CI में लगता है।
44
+
45
+ कार्ड जिस विफलता-विधा को ख़त्म करने के लिए है वह यह है: **स्थानीय गेट का हरा होना अडैप्टेशन का प्रमाण नहीं है।** दो तरह की टूटन `typecheck` + `test` को पार कर जाती हैं:
46
+
47
+ 1. प्रकाशित टाइप लाइन सीम को छिपा देती है और रिपॉज़िटरी पुराने टाइप के विरुद्ध कंपाइल हो जाती है (सीम `M1`);
48
+ 2. टेस्ट पुरानी शक्ल पर मॉक किए गए हैं, इसलिए वे पास हो जाते हैं जबकि होस्ट नई शक्ल अस्वीकार करता है।
49
+
50
+ दस सीमों में से चार — `S3`, `S8`, `S9`, `M1` — जब यह पैकेज लिखा गया तब तक किसी सामुदायिक अपग्रेड PR में शामिल नहीं थीं; बाक़ी छह को उस लहर के प्रमाण से मिलाया गया है।
51
+
52
+ ## त्वरित शुरुआत
53
+
54
+ ```sh
55
+ # 1. बंडल को अपने प्रोफ़ाइल में इंस्टॉल करें
56
+ dsh plugin --profile web add dsh-plugin-upgrade
57
+
58
+ # 2. पुष्टि करें कि पंक्ति माउंट हुई
59
+ dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
60
+
61
+ # 3. जिस प्लगइन को अपग्रेड कर रहे हैं उसे स्कैन करें
62
+ npx dsh-plugin-upgrade-scan --repo ../my-plugin
63
+ ```
64
+
65
+ फिर एजेंट से `plugin-upgrade-015` स्किल इस्तेमाल करने को कहें, या यहाँ रखे कार्ड के साथ चक्र ख़ुद चलाएँ:
66
+ `skills/plugin-upgrade-015/references/v0.1.3-alpha.1-to-v0.1.5-alpha.1.md`।
67
+
68
+ ## इंस्टॉल और अनइंस्टॉल
69
+
70
+ ```sh
71
+ dsh plugin --profile web add dsh-plugin-upgrade # npm से
72
+ dsh plugin --profile web add "github:PerryLink/dsh-plugin-upgrade#main" # सोर्स से
73
+ dsh plugin --profile web remove dsh-plugin-upgrade # अनइंस्टॉल (प्रतिवर्ती)
74
+ ```
75
+
76
+ बंडल इंस्टॉल करने से केवल एक स्किल पंजीकृत होती है; पंक्ति हटाने से स्किल हट जाती है। CLI एक सामान्य `npx` लक्ष्य है और इसके लिए किसी प्रोफ़ाइल की ज़रूरत नहीं।
77
+
78
+ ## कॉन्फ़िगरेशन
79
+
80
+ हर कुंजी वैकल्पिक है और प्रोफ़ाइल पैच में रहती है:
81
+
82
+ | कुंजी | डिफ़ॉल्ट | अर्थ |
83
+ |---|---|---|
84
+ | `enabled` | `true` | बंडल स्किल पंजीकृत करें। `false` रखने पर निर्भरता माउंट रहती है पर चुप रहती है। |
85
+ | `skillName` | `plugin-upgrade-015` | `skillsRoot` के अंदर पंजीकृत होने वाली डायरेक्टरी, और कैटलॉग में दिखने वाला नाम। |
86
+ | `skillsRoot` | पैकेज का अपना `./skills` | जहाँ `<skillName>/SKILL.md` है। अपना कार्ड लगाने के लिए इसे उस ओर इंगित करें। |
87
+ | `userInvocable` | `true` | मॉडल के अलावा इंसान भी नाम से स्किल बुला सके या नहीं। |
88
+
89
+ ```yaml
90
+ - insert:
91
+ - id: dsh-plugin-upgrade
92
+ name: dsh-plugin-upgrade
93
+ config:
94
+ skillName: plugin-upgrade-015
95
+ ```
96
+
97
+ माउंट ज़ोर से विफल होता है: `SKILL.md` गुम, बॉडी ख़ाली, या frontmatter में `name` न हो — तो माउंट रुक जाता है, ख़ाली स्किल पंजीकृत नहीं होती।
98
+
99
+ ## सतहें
100
+
101
+ **स्किल** — `plugin-upgrade-015` (डिफ़ॉल्ट रूप से मॉडल और इंसान दोनों बुला सकते हैं)। बॉडी: 6-चरणीय चक्र। संदर्भ: संस्करण कार्ड। स्क्रिप्ट: डिटेक्टर, स्किल डायरेक्टरी के अंदर ही, ताकि सापेक्ष पथ हल हों।
102
+
103
+ **CLI** — `dsh-plugin-upgrade-scan`:
104
+
105
+ ```sh
106
+ dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,S8,M1] [--quiet]
107
+ ```
108
+
109
+ | फ़्लैग | अर्थ |
110
+ |---|---|
111
+ | `--repo <path>` | स्कैन करने वाली रिपॉज़िटरी (डिफ़ॉल्ट: cwd)। |
112
+ | `--json <out.json>` | मशीन-पठनीय रिपोर्ट भी लिखें (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`)। |
113
+ | `--seams S3,S8,M1` | केवल दिए गए सीमों तक सीमित करें। |
114
+ | `--quiet` | मानव-पठनीय आउटपुट बंद करें (`--json` के साथ)। |
115
+
116
+ एग्ज़िट कोड: `0` कोई error-स्तर हिट नहीं · `1` कम से कम एक · `2` उपयोग या स्कैन विफलता। साफ़ स्कैन आवश्यक है पर पर्याप्त नहीं — कार्ड की निकास कसौटी अस्थायी `DSH_HOME` पर वास्तविक-होस्ट स्मोक है।
117
+
118
+ ## दस सीमें
119
+
120
+ | Id | स्तर | `0.1.5-alpha.1` लाइन में क्या बदला |
121
+ |---|---|---|
122
+ | `S1` | warn | सेशन फ़ॉर्मैट V3 है; लॉग फ़ाइल पीढ़ी-सहित है (`session.v3.jsonl.zstd`)। कठोर कोडित `session.jsonl.zstd` चुपचाप बेकार हो जाता है। |
123
+ | `S2` | warn | `EpochHeader.system` हट गया; सिस्टम प्रॉम्प्ट सरफ़ेस नोड 0 पर `system/message` है। पढ़ने वालों को संरचनात्मक फ़ॉलबैक चाहिए। |
124
+ | `S3` | error | `assistant/message` में `stream` अनिवार्य है; बिना उसके सेशन इम्पोर्ट होता है पर रिज़्यूम नहीं होता (`Session.fromRestore` अमान्य settlement फ़ील्ड अस्वीकार करता है)। |
125
+ | `S4` | error | `tool/code-dispatch` का नाम `tool/ptc-dispatch` हो गया। |
126
+ | `S5` | error | `ctx.agent` हट गया; कॉलर को `Agent` स्पष्ट रूप से मिलता है। |
127
+ | `S6` | error | `Inbox` अब टाइप इंटरफ़ेस है — बनाया नहीं जा सकता; `agent.inbox` और आधिकारिक फ़िक्स्चर शक्ल इस्तेमाल करें। |
128
+ | `S7` | warn | `SubprocessHandle.pid` हट गया (केवल `SubprocessTerminalHandle` में `pid` बचा है)। |
129
+ | `S8` | error | `SessionHandle.read()` अब `SessionHandleReadResult` लौटाता है — `.events` खोलें। |
130
+ | `S9` | error | `SystemPrompt` का कॉन्फ़िग `persona` अब `personaPrefix` / `personaSuffix` है। |
131
+ | `M1` | error | `tsconfig` का `paths` ऐसी डायरेक्टरी ओर इंगित हो जो मौजूद नहीं, तो TypeScript चुपचाप प्रकाशित टाइप पर लौट जाता है — स्थानीय गेट **झूठा हरा** बन जाता है। |
132
+
133
+ `S7`, `S1`, `S2` और `S10` जान-बूझकर सूचनात्मक हैं: इनके वैध मेल भी होते हैं (Node का अपना `pid`, पुरानी पीढ़ी के रीडर, प्लगइन का अपना अडैप्टिव इवेंट गेट), इसलिए स्कैनर इन्हें मैनुअल समीक्षा के सुराग़ बतौर दिखाता है, विफलता नहीं।
134
+
135
+ ## यह क्या कवर नहीं करता
136
+
137
+ - **अन्य कॉरिडोर।** `0.1.1` → `0.1.2` और आगे की लाइनें दायरे से बाहर; कार्ड जान-बूझकर लॉक है, क्योंकि बहकने वाला कार्ड न होने से बुरा है।
138
+ - **DSH का उपयोगकर्ता-मुखी अपग्रेड पथ।** यह पैकेज **प्लगइन सोर्स कोड** अपग्रेड करता है, उपयोगकर्ता की harness इंस्टॉलेशन नहीं।
139
+ - **क्लाइंट/ब्राउज़र व्यवहार।** स्कैनर स्थिर है; क्लाइंट आधे हिस्से के लिए असली ब्राउज़र जाँच चाहिए।
140
+ - **प्रमाण।** साफ़ स्कैन एक परिकल्पना है। निकास कसौटी वास्तविक-होस्ट स्मोक है (अस्थायी `DSH_HOME`, लक्ष्य CLI, `plugin add <tarball>`, `--dump-config`, और सेशन-लॉग लिखने वालों के लिए एक resume राउंड-ट्रिप)।
141
+
142
+ ## सुरक्षा सीमाएँ
143
+
144
+ - **केवल-पठन स्कैन।** CLI स्कैन की गई रिपॉज़िटरी के अंदर कभी नहीं लिखता; `--json` केवल आपके दिए पथ पर लिखता है।
145
+ - **कोई नेटवर्क, कोई शेल नहीं।** स्कैनर Node की मानक लाइब्रेरी के अलावा कुछ आयात नहीं करता और कभी प्रोसेस नहीं बनाता।
146
+ - **कोई रहस्य नहीं।** पैकेज में कुछ भी क्रेडेंशियल, एनवायरनमेंट टोकन या सेशन डेटा नहीं पढ़ता।
147
+ - **सैंडबॉक्स स्मोक नुस्ख़ा।** कार्ड की असली-होस्ट जाँच `mkdtemp` वाले `DSH_HOME` का उपयोग करती है; आपके असली `~/.dsh` को कभी नहीं छूती।
148
+
149
+ ## विकास
150
+
151
+ ```sh
152
+ pnpm install
153
+ pnpm test # node --test (असली Cordis + असली SkillRegistry)
154
+ pnpm run verify:self-contained # हर import पैकेज के भीतर हल होता है
155
+ pnpm run verify:artifacts # tarball में स्किल, CLI और patch मौजूद
156
+ pnpm run check:readmes # पाँच-भाषा README एकरूपता
157
+ pnpm pack
158
+ ```
159
+
160
+ स्कैनर के साथ संश्लेषित `fixtures/bad-repo` और `fixtures/good-repo` हैं, और लहर से पहले ही अडैप्ट हो चुकी रिपॉज़िटरी पर एक live negative भी — इसलिए कैटलॉग में रिग्रेशन टेस्ट सूट को गिराता है, उपयोगकर्ता तक नहीं पहुँचता।
161
+
162
+ ## विषय टैग
163
+
164
+ `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner` (`package.json` की keywords के अनुरूप; `dsh-plugin` पारिस्थितिकी का दृश्यता चैनल है)।
165
+
166
+ ## PerryLink DSH प्लगइन परिवार
167
+
168
+ यह PerryLink DSH प्लगइन परिवार का हिस्सा है — 40 रिपॉज़िटरी, जो सेशन, मेमोरी, अनुमतियाँ, डिलीवरी, ऑब्ज़र्वेबिलिटी और डेवलपर टूलिंग कवर करती हैं। कैटलॉग देखें [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) पर या [`dsh-plugin` टॉपिक](https://github.com/topics/dsh-plugin) पर।
169
+
170
+ ## लाइसेंस
171
+
172
+ Apache-2.0 — देखें [LICENSE](LICENSE)। इंस्टॉल-समय की निर्भरताएँ और उनके लाइसेंस [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) में सूचीबद्ध हैं; कुछ भी बंडल नहीं किया गया।
package/README.md ADDED
@@ -0,0 +1,172 @@
1
+ <div align="center">
2
+
3
+ # ⬆️ dsh-plugin-upgrade
4
+ - **1024 store channel**: `npm i -g dsh1024` once, then `dsh1024 plugin --profile web add dsh-plugin-upgrade` (counts toward the [deepseek1024.com](https://deepseek1024.com) install ranking).
5
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-plugin-upgrade)
6
+
7
+ **Version-locked plugin upgrade skill for DeepSeek Harness — `0.1.3-alpha.1` → `0.1.5-alpha.1`.**
8
+
9
+ *A version card plus a zero-dependency seam scanner, so "typecheck is green" is never mistaken for "the plugin still works".*
10
+
11
+ > **Official repository.** This is the only official repository of dsh-plugin-upgrade, maintained by PerryLink. Same-name repositories under other accounts are not affiliated.
12
+
13
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
14
+ [![DSH plugin](https://img.shields.io/badge/dsh--plugin-✅-green)](https://github.com/topics/dsh-plugin)
15
+ [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-plugin-upgrade.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
16
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
17
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-plugin-upgrade/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-plugin-upgrade/actions)
18
+ [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-plugin-upgrade?label=version)](https://github.com/PerryLink/dsh-plugin-upgrade/releases)
19
+ [![npm version](https://img.shields.io/npm/v/dsh-plugin-upgrade)](https://www.npmjs.com/package/dsh-plugin-upgrade)
20
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-plugin-upgrade)](https://www.npmjs.com/package/dsh-plugin-upgrade)
21
+
22
+ [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
23
+
24
+ </div>
25
+
26
+ ---
27
+
28
+ ## Compatibility
29
+
30
+ | Surface | Status |
31
+ |---|---|
32
+ | Harness | DeepSeek Harness `0.1.5-alpha.1` (checkout `19d2e38480`, tag `dsh-v0.1.5-alpha.1` = `5dda764ed3`). Peer band `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`. |
33
+ | Node | `^22.19.0 \|\| >=24.0.0` |
34
+ | Platforms | Anywhere Node runs; the scanner is filesystem-only and platform-neutral |
35
+ | Model | Text-only models fully supported; the skill is a Markdown body, no tool or vision requirement |
36
+ | Scope | **One corridor only**: `0.1.3-alpha.1` → `0.1.5-alpha.1`. It is not a general migration framework. |
37
+
38
+ ## What you get
39
+
40
+ Two halves, one seam catalog:
41
+
42
+ - **A bundled agent skill (`plugin-upgrade-015`)** — a version card and a fix-and-verify loop. The model loads it only when a task actually needs it; the package contributes no system-prompt paragraph and no tool.
43
+ - **A zero-dependency CLI (`dsh-plugin-upgrade-scan`)** — reports `file:line` facts for ten seams measured against 40 real plugin repositories during the 2026-09-09 adaptation wave. Exit `1` on any error-severity hit, so it drops straight into CI.
44
+
45
+ The point is the failure mode the card exists to kill: **a green local gate is not evidence of adaptation.** Two classes of breakage survive `typecheck` + `test`:
46
+
47
+ 1. the published type line hides the seam, and the repo compiles against stale types (seam `M1`);
48
+ 2. the tests are mocked against the old shape, so they pass while the host rejects the new one.
49
+
50
+ Four of the ten seams — `S3`, `S8`, `S9`, `M1` — were still uncovered by any community upgrade PR when this package was written; the other six are cross-checked against the wave evidence.
51
+
52
+ ## Quick start
53
+
54
+ ```sh
55
+ # 1. install the bundle into your profile
56
+ dsh plugin --profile web add dsh-plugin-upgrade
57
+
58
+ # 2. verify the row mounted
59
+ dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
60
+
61
+ # 3. scan the plugin you are upgrading
62
+ npx dsh-plugin-upgrade-scan --repo ../my-plugin
63
+ ```
64
+
65
+ Then ask the agent to use the `plugin-upgrade-015` skill, or drive the loop yourself with the card at
66
+ `skills/plugin-upgrade-015/references/v0.1.3-alpha.1-to-v0.1.5-alpha.1.md`.
67
+
68
+ ## Install & uninstall
69
+
70
+ ```sh
71
+ dsh plugin --profile web add dsh-plugin-upgrade # from npm
72
+ dsh plugin --profile web add "github:PerryLink/dsh-plugin-upgrade#main" # from source
73
+ dsh plugin --profile web remove dsh-plugin-upgrade # uninstall (reversible)
74
+ ```
75
+
76
+ Installing the bundle only registers a skill; removing the row removes the skill. The CLI is a normal `npx` target and needs no profile at all.
77
+
78
+ ## Configuration
79
+
80
+ Every key is optional and lives in the profile patch:
81
+
82
+ | Key | Default | Meaning |
83
+ |---|---|---|
84
+ | `enabled` | `true` | Register the packaged skill. Set `false` to keep the dependency mounted but silent. |
85
+ | `skillName` | `plugin-upgrade-015` | Directory under `skillsRoot` to register, and the name shown in the catalog. |
86
+ | `skillsRoot` | the package's own `./skills` | Where `<skillName>/SKILL.md` lives. Point it at your own card to reuse the plumbing. |
87
+ | `userInvocable` | `true` | Whether a human can invoke the skill by name in addition to the model. |
88
+
89
+ ```yaml
90
+ - insert:
91
+ - id: dsh-plugin-upgrade
92
+ name: dsh-plugin-upgrade
93
+ config:
94
+ skillName: plugin-upgrade-015
95
+ ```
96
+
97
+ The plugin mounts loud: a missing `SKILL.md`, an empty body, or a frontmatter without `name` fails the mount instead of registering an empty skill.
98
+
99
+ ## Surfaces
100
+
101
+ **Skill** — `plugin-upgrade-015` (model- and user-invocable by default). Body: the 6-step loop. References: the version card. Scripts: the detector, shipped inside the skill directory so relative paths resolve.
102
+
103
+ **CLI** — `dsh-plugin-upgrade-scan`:
104
+
105
+ ```sh
106
+ dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,S8,M1] [--quiet]
107
+ ```
108
+
109
+ | Flag | Meaning |
110
+ |---|---|
111
+ | `--repo <path>` | Repository to scan (default: cwd). |
112
+ | `--json <out.json>` | Also write the machine-readable report (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`). |
113
+ | `--seams S3,S8,M1` | Restrict to specific seams. |
114
+ | `--quiet` | Suppress the human rendering (pair with `--json`). |
115
+
116
+ Exit codes: `0` no error-severity hit · `1` at least one error-severity hit · `2` usage or scan failure. A clean scan is necessary but not sufficient — the card's exit criterion is a real-host smoke on a temporary `DSH_HOME`.
117
+
118
+ ## The ten seams
119
+
120
+ | Id | Severity | What changed in the `0.1.5-alpha.1` line |
121
+ |---|---|---|
122
+ | `S1` | warn | Session format is V3; the log file is generation-scoped (`session.v3.jsonl.zstd`). Hardcoded `session.jsonl.zstd` paths silently stop working. |
123
+ | `S2` | warn | `EpochHeader.system` is gone; the system prompt is `system/message` at surface node 0. Readers need a structural fallback. |
124
+ | `S3` | error | `assistant/message` requires `stream`; without it the session imports but cannot be resumed (`Session.fromRestore` rejects invalid settlement fields). |
125
+ | `S4` | error | `tool/code-dispatch` was renamed `tool/ptc-dispatch`. |
126
+ | `S5` | error | `ctx.agent` was removed; callers receive the `Agent` explicitly. |
127
+ | `S6` | error | `Inbox` became a type interface — it can no longer be constructed; use `agent.inbox` and the official fixture shape. |
128
+ | `S7` | warn | `SubprocessHandle.pid` was removed (only `SubprocessTerminalHandle` keeps `pid`). |
129
+ | `S8` | error | `SessionHandle.read()` now returns `SessionHandleReadResult` — unwrap `.events`. |
130
+ | `S9` | error | `SystemPrompt` config `persona` became `personaPrefix` / `personaSuffix`. |
131
+ | `M1` | error | A `tsconfig` `paths` alias that points at a missing checkout directory makes TypeScript silently fall back to published types — the local gate turns **fake green**. |
132
+
133
+ `S7`, `S1`, `S2` and `S10` are deliberately advisory: they have legitimate matches (Node's own `pid`, legacy-generation readers, a plugin's own adaptive event gate), so the scanner reports them as leads for manual review rather than failures.
134
+
135
+ ## What this does not cover
136
+
137
+ - **Other corridors.** `0.1.1` → `0.1.2` and future lines are out of scope; the card is version-locked on purpose, because a card that drifts is worse than no card.
138
+ - **The DSH user-facing upgrade path.** This package upgrades *plugin source code*, not a user's harness installation.
139
+ - **Client/browser behavior.** The scanner is static. A client half still needs a real browser assertion.
140
+ - **Proof.** A clean scan is a hypothesis. The exit criterion is a real-host smoke (temp `DSH_HOME`, target CLI, `plugin add <tarball>`, `--dump-config`, plus a resume round-trip for session-log writers).
141
+
142
+ ## Security boundaries
143
+
144
+ - **Read-only scan.** The CLI never writes inside the scanned repository; `--json` writes only to the path you pass.
145
+ - **No network, no shell.** The scanner imports nothing beyond Node's standard library and never spawns a process.
146
+ - **No secrets.** Nothing in the package reads credentials, environment tokens, or session data.
147
+ - **Sandboxed smoke recipe.** The card's real-host check uses a `mkdtemp` `DSH_HOME`; it never touches your real `~/.dsh`.
148
+
149
+ ## Development
150
+
151
+ ```sh
152
+ pnpm install
153
+ pnpm test # node --test (real Cordis + real SkillRegistry)
154
+ pnpm run verify:self-contained # every import resolves inside the package
155
+ pnpm run verify:artifacts # the packed tarball carries the skill, CLI and patch
156
+ pnpm run check:readmes # five-language README consistency
157
+ pnpm pack
158
+ ```
159
+
160
+ The scanner has its own synthetic `fixtures/bad-repo` and `fixtures/good-repo` plus a live negative on a repository already adapted by the wave, so a regression in the catalog fails the suite rather than a downstream user.
161
+
162
+ ## Topics
163
+
164
+ `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner` (mirror `package.json` keywords; `dsh-plugin` is the ecosystem's visibility channel).
165
+
166
+ ## PerryLink DSH Plugin Family
167
+
168
+ Part of the PerryLink DSH plugin family — 40 repositories covering sessions, memory, permissions, delivery, observability and developer tooling. Browse the catalog at [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) or the [`dsh-plugin` topic](https://github.com/topics/dsh-plugin).
169
+
170
+ ## License
171
+
172
+ Apache-2.0 — see [LICENSE](LICENSE). Install-time dependencies and their licenses are listed in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md); nothing is bundled.
package/README.pt.md ADDED
@@ -0,0 +1,172 @@
1
+ <div align="center">
2
+
3
+ # ⬆️ dsh-plugin-upgrade
4
+ - **Canal da loja 1024**: rode `npm i -g dsh1024` uma vez e depois `dsh1024 plugin --profile web add dsh-plugin-upgrade` (conta para o ranking de instalações do [deepseek1024.com](https://deepseek1024.com)).
5
+ [![Gitee](https://img.shields.io/badge/Gitee-mirror-c71d23?logo=gitee)](https://gitee.com/perrylink/dsh-plugin-upgrade)
6
+
7
+ **Skill de upgrade de plugins com versão fixada para o DeepSeek Harness — `0.1.3-alpha.1` → `0.1.5-alpha.1`.**
8
+
9
+ *Um cartão de versão mais um scanner de costuras sem dependências, para que «typecheck está verde» nunca seja confundido com «o plugin ainda funciona».*
10
+
11
+ > **Repositório oficial.** Este é o único repositório oficial do dsh-plugin-upgrade, mantido pela PerryLink. Repositórios com o mesmo nome em outras contas não são afiliados.
12
+
13
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)
14
+ [![DSH plugin](https://img.shields.io/badge/dsh--plugin-✅-green)](https://github.com/topics/dsh-plugin)
15
+ [![dsh-doctor](https://raw.githubusercontent.com/PerryLink/dsh-plugin-doctor/main/badges/PerryLink__dsh-plugin-upgrade.svg)](https://github.com/PerryLink/dsh-plugin-doctor#verified-徽章)
16
+ [![Node](https://img.shields.io/badge/node-%5E22.19%20%7C%7C%20%3E%3D24-brightgreen.svg)](#)
17
+ [![CI](https://img.shields.io/github/actions/workflow/status/PerryLink/dsh-plugin-upgrade/ci.yml?branch=main&label=CI)](https://github.com/PerryLink/dsh-plugin-upgrade/actions)
18
+ [![Version](https://img.shields.io/github/v/tag/PerryLink/dsh-plugin-upgrade?label=version)](https://github.com/PerryLink/dsh-plugin-upgrade/releases)
19
+ [![npm version](https://img.shields.io/npm/v/dsh-plugin-upgrade)](https://www.npmjs.com/package/dsh-plugin-upgrade)
20
+ [![npm downloads](https://img.shields.io/npm/dm/dsh-plugin-upgrade)](https://www.npmjs.com/package/dsh-plugin-upgrade)
21
+
22
+ [English](README.md) · [简体中文](README.zh.md) · [Español](README.es.md) · [Português](README.pt.md) · [हिन्दी](README.hi.md)
23
+
24
+ </div>
25
+
26
+ ---
27
+
28
+ ## Compatibilidade
29
+
30
+ | Superfície | Status |
31
+ |---|---|
32
+ | Harness | DeepSeek Harness `0.1.5-alpha.1` (checkout `19d2e38480`, tag `dsh-v0.1.5-alpha.1` = `5dda764ed3`). Faixa de peers `@deepseek-ai/dsh-skill >=0.1.2-rc.1 <0.2.0 \|\| >=0.1.5-alpha.1 <0.2.0`, `@deepseek-ai/cordis ^4.0.2`, `@deepseek-ai/schemastery ^3.18.2`. |
33
+ | Node | `^22.19.0 \|\| >=24.0.0` |
34
+ | Plataformas | Onde o Node rodar; o scanner só lê o sistema de arquivos e é neutro de plataforma |
35
+ | Modelo | Modelos somente texto são totalmente suportados; a skill é um corpo Markdown, sem exigência de ferramentas ou visão |
36
+ | Escopo | **Um único corredor**: `0.1.3-alpha.1` → `0.1.5-alpha.1`. Não é um framework de migração geral. |
37
+
38
+ ## O que você recebe
39
+
40
+ Duas metades e um único catálogo de costuras:
41
+
42
+ - **Uma skill de agente incluída (`plugin-upgrade-015`)** — um cartão de versão e um ciclo de corrigir-e-verificar. O modelo só a carrega quando a tarefa realmente precisa; o pacote não contribui com nenhum parágrafo do prompt de sistema nem registra ferramentas.
43
+ - **Uma CLI sem dependências (`dsh-plugin-upgrade-scan`)** — reporta fatos `arquivo:linha` para dez costuras medidas em 40 repositórios reais de plugins durante a onda de adaptação de 2026-09-09. Sai com `1` a qualquer achado de severidade erro, então entra direto no CI.
44
+
45
+ O objetivo é o modo de falha que o cartão existe para eliminar: **um portão local verde não é prova de adaptação.** Duas classes de quebra sobrevivem a `typecheck` + `test`:
46
+
47
+ 1. a linha de tipos publicada esconde a costura e o repositório compila contra tipos obsoletos (costura `M1`);
48
+ 2. os testes são mockados na forma antiga, então passam enquanto o host rejeita a nova.
49
+
50
+ Quatro das dez costuras — `S3`, `S8`, `S9`, `M1` — ainda não eram cobertas por nenhum PR comunitário de upgrade quando este pacote foi escrito; as outras seis foram cruzadas com a evidência da onda.
51
+
52
+ ## Início rápido
53
+
54
+ ```sh
55
+ # 1. instale o bundle no seu perfil
56
+ dsh plugin --profile web add dsh-plugin-upgrade
57
+
58
+ # 2. confirme que a linha montou
59
+ dsh --profile web --dump-config | grep -A3 'id: dsh-plugin-upgrade'
60
+
61
+ # 3. escaneie o plugin que você está atualizando
62
+ npx dsh-plugin-upgrade-scan --repo ../my-plugin
63
+ ```
64
+
65
+ Depois peça ao agente para usar a skill `plugin-upgrade-015`, ou conduza o ciclo você mesmo com o cartão em
66
+ `skills/plugin-upgrade-015/references/v0.1.3-alpha.1-to-v0.1.5-alpha.1.md`.
67
+
68
+ ## Instalação e desinstalação
69
+
70
+ ```sh
71
+ dsh plugin --profile web add dsh-plugin-upgrade # do npm
72
+ dsh plugin --profile web add "github:PerryLink/dsh-plugin-upgrade#main" # do código-fonte
73
+ dsh plugin --profile web remove dsh-plugin-upgrade # desinstalar (reversível)
74
+ ```
75
+
76
+ Instalar o bundle apenas registra uma skill; remover a linha a remove. A CLI é um alvo `npx` normal e não precisa de perfil algum.
77
+
78
+ ## Configuração
79
+
80
+ Toda chave é opcional e vive no patch do perfil:
81
+
82
+ | Chave | Padrão | Significado |
83
+ |---|---|---|
84
+ | `enabled` | `true` | Registra a skill incluída. `false` mantém a dependência montada mas silenciosa. |
85
+ | `skillName` | `plugin-upgrade-015` | Diretório sob `skillsRoot` a registrar, e o nome exibido no catálogo. |
86
+ | `skillsRoot` | o `./skills` do próprio pacote | Onde fica `<skillName>/SKILL.md`. Aponte para o seu próprio cartão para reutilizar a infraestrutura. |
87
+ | `userInvocable` | `true` | Se uma pessoa pode invocar a skill pelo nome além do modelo. |
88
+
89
+ ```yaml
90
+ - insert:
91
+ - id: dsh-plugin-upgrade
92
+ name: dsh-plugin-upgrade
93
+ config:
94
+ skillName: plugin-upgrade-015
95
+ ```
96
+
97
+ A montagem falha alto: um `SKILL.md` ausente, um corpo vazio ou um frontmatter sem `name` abortam a montagem em vez de registrar uma skill vazia.
98
+
99
+ ## Superfícies
100
+
101
+ **Skill** — `plugin-upgrade-015` (invocável pelo modelo e pela pessoa por padrão). Corpo: o ciclo de 6 passos. Referências: o cartão de versão. Scripts: o detector, incluído dentro do diretório da skill para que caminhos relativos resolvam.
102
+
103
+ **CLI** — `dsh-plugin-upgrade-scan`:
104
+
105
+ ```sh
106
+ dsh-plugin-upgrade-scan [--repo <path>] [--json <out.json>] [--seams S3,S8,M1] [--quiet]
107
+ ```
108
+
109
+ | Flag | Significado |
110
+ |---|---|
111
+ | `--repo <path>` | Repositório a escanear (padrão: cwd). |
112
+ | `--json <out.json>` | Também grava o relatório legível por máquina (`repo`, `scannedAt`, `files`, `hits[]`, `bySeam`). |
113
+ | `--seams S3,S8,M1` | Restringe a costuras específicas. |
114
+ | `--quiet` | Silencia a saída humana (combine com `--json`). |
115
+
116
+ Códigos de saída: `0` nenhum achado de severidade erro · `1` pelo menos um · `2` uso ou falha de varredura. Uma varredura limpa é necessária mas não suficiente — o critério de saída do cartão é um smoke real em um `DSH_HOME` temporário.
117
+
118
+ ## As dez costuras
119
+
120
+ | Id | Severidade | O que mudou na linha `0.1.5-alpha.1` |
121
+ |---|---|---|
122
+ | `S1` | warn | O formato de sessão é V3; o arquivo de log carrega geração (`session.v3.jsonl.zstd`). Caminhos fixos em `session.jsonl.zstd` param de funcionar em silêncio. |
123
+ | `S2` | warn | `EpochHeader.system` desapareceu; o prompt de sistema é `system/message` no nó 0 da superfície. Leitores precisam de um fallback estrutural. |
124
+ | `S3` | error | `assistant/message` exige `stream`; sem ele a sessão importa mas não pode ser retomada (`Session.fromRestore` rejeita campos de settlement inválidos). |
125
+ | `S4` | error | `tool/code-dispatch` virou `tool/ptc-dispatch`. |
126
+ | `S5` | error | `ctx.agent` foi removido; os chamadores recebem o `Agent` explicitamente. |
127
+ | `S6` | error | `Inbox` virou uma interface de tipo — não pode mais ser construída; use `agent.inbox` e a forma oficial do fixture. |
128
+ | `S7` | warn | `SubprocessHandle.pid` foi removido (só `SubprocessTerminalHandle` mantém `pid`). |
129
+ | `S8` | error | `SessionHandle.read()` agora retorna `SessionHandleReadResult` — desembrulhe `.events`. |
130
+ | `S9` | error | A configuração `persona` do `SystemPrompt` virou `personaPrefix` / `personaSuffix`. |
131
+ | `M1` | error | Um alias `paths` do `tsconfig` apontando para um diretório inexistente faz o TypeScript cair em silêncio nos tipos publicados — o portão local fica **falsamente verde**. |
132
+
133
+ `S7`, `S1`, `S2` e `S10` são deliberadamente informativos: têm correspondências legítimas (o `pid` do Node, leitores de gerações antigas, o próprio portão adaptativo de eventos de um plugin), então o scanner os reporta como pistas para revisão manual e não como falhas.
134
+
135
+ ## O que isto não cobre
136
+
137
+ - **Outros corredores.** `0.1.1` → `0.1.2` e linhas futuras ficam fora; o cartão é fixado de propósito, porque um cartão que desvia é pior que nenhum.
138
+ - **O caminho de upgrade do DSH para usuários.** Este pacote atualiza o **código-fonte do plugin**, não a instalação do harness de um usuário.
139
+ - **Comportamento de cliente/navegador.** O scanner é estático; uma metade cliente ainda precisa de asserção real no navegador.
140
+ - **Prova.** Uma varredura limpa é uma hipótese. O critério de saída é um smoke real no host (`DSH_HOME` temporário, CLI alvo, `plugin add <tarball>`, `--dump-config`, mais uma ida e volta de resume para quem escreve logs de sessão).
141
+
142
+ ## Limites de segurança
143
+
144
+ - **Varredura somente leitura.** A CLI nunca escreve dentro do repositório varrido; `--json` grava apenas no caminho informado.
145
+ - **Sem rede nem shell.** O scanner não importa nada além da biblioteca padrão do Node e nunca cria processos.
146
+ - **Sem segredos.** Nada no pacote lê credenciais, tokens de ambiente ou dados de sessão.
147
+ - **Receita de smoke em sandbox.** A checagem real do cartão usa um `DSH_HOME` criado com `mkdtemp`; nunca toca seu `~/.dsh` real.
148
+
149
+ ## Desenvolvimento
150
+
151
+ ```sh
152
+ pnpm install
153
+ pnpm test # node --test (Cordis real + SkillRegistry real)
154
+ pnpm run verify:self-contained # todo import resolve dentro do pacote
155
+ pnpm run verify:artifacts # o tarball leva a skill, a CLI e o patch
156
+ pnpm run check:readmes # consistência dos README em cinco idiomas
157
+ pnpm pack
158
+ ```
159
+
160
+ O scanner traz seus próprios `fixtures/bad-repo` e `fixtures/good-repo` sintéticos, mais um negativo ao vivo em um repositório já adaptado pela onda, de modo que uma regressão no catálogo quebra a suíte em vez de chegar a um usuário.
161
+
162
+ ## Tópicos
163
+
164
+ `dsh`, `dsh-plugin`, `deepseek-harness`, `deepseek`, `cordis`, `plugin-upgrade`, `migration`, `skill`, `version-card`, `scanner` (espelham as keywords do `package.json`; `dsh-plugin` é o canal de visibilidade do ecossistema).
165
+
166
+ ## Família de plugins DSH da PerryLink
167
+
168
+ Parte da família de plugins DSH da PerryLink — 40 repositórios cobrindo sessões, memória, permissões, entrega, observabilidade e ferramentas de desenvolvedor. Explore o catálogo em [perrylink-dsh-catalog.perrylink.workers.dev](https://perrylink-dsh-catalog.perrylink.workers.dev) ou no [tópico `dsh-plugin`](https://github.com/topics/dsh-plugin).
169
+
170
+ ## Licença
171
+
172
+ Apache-2.0 — veja [LICENSE](LICENSE). As dependências de instalação e suas licenças estão em [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md); nada de terceiros é empacotado.