@perrylink/dsh-skill-pack-security-provider 1.3.0 → 2.0.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.
Files changed (45) hide show
  1. package/lib/index.js +36 -8
  2. package/lib/types/index.d.ts +20 -8
  3. package/lib/types/vet/checks.d.ts +43 -0
  4. package/lib/types/vet/config.d.ts +41 -0
  5. package/lib/types/vet/engine.d.ts +24 -0
  6. package/lib/types/vet/fetch.d.ts +42 -0
  7. package/lib/types/vet/manifest.d.ts +53 -0
  8. package/lib/types/vet/redact.d.ts +14 -0
  9. package/lib/types/vet/report.d.ts +17 -0
  10. package/lib/types/vet/skills.d.ts +56 -0
  11. package/lib/types/vet/source.d.ts +58 -0
  12. package/lib/types/vet/tar.d.ts +35 -0
  13. package/lib/types/vet/tool.d.ts +16 -0
  14. package/lib/types/vet/vocabulary.d.ts +123 -0
  15. package/lib/types/vet/walk.d.ts +37 -0
  16. package/lib/vet/checks.js +755 -0
  17. package/lib/vet/config.js +36 -0
  18. package/lib/vet/engine.js +236 -0
  19. package/lib/vet/fetch.js +124 -0
  20. package/lib/vet/manifest.js +345 -0
  21. package/lib/vet/redact.js +46 -0
  22. package/lib/vet/report.js +95 -0
  23. package/lib/vet/skills.js +99 -0
  24. package/lib/vet/source.js +218 -0
  25. package/lib/vet/tar.js +137 -0
  26. package/lib/vet/tool.js +164 -0
  27. package/lib/vet/vocabulary.js +19 -0
  28. package/lib/vet/walk.js +147 -0
  29. package/pack/skills/dependency-audit/SKILL.md +5 -1
  30. package/pack/skills/incident-response/SKILL.md +1 -1
  31. package/pack/skills/prompt-injection-review/SKILL.md +1 -1
  32. package/pack/skills/secret-scan/SKILL.md +1 -1
  33. package/pack/skills/security-audit/SKILL.md +5 -1
  34. package/pack/skills/supply-chain-review/SKILL.md +5 -1
  35. package/pack/skills/threat-model/SKILL.md +1 -1
  36. package/pack/skills/vuln-intel/SKILL.md +1 -1
  37. package/pack/skills-en/dependency-audit/SKILL.md +5 -1
  38. package/pack/skills-en/incident-response/SKILL.md +1 -1
  39. package/pack/skills-en/prompt-injection-review/SKILL.md +1 -1
  40. package/pack/skills-en/secret-scan/SKILL.md +1 -1
  41. package/pack/skills-en/security-audit/SKILL.md +5 -1
  42. package/pack/skills-en/supply-chain-review/SKILL.md +5 -1
  43. package/pack/skills-en/threat-model/SKILL.md +1 -1
  44. package/pack/skills-en/vuln-intel/SKILL.md +1 -1
  45. package/package.json +47 -4
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Bounded file collection: walks a local directory or normalizes an extracted
3
+ * tarball into one shared `ScannedFile` list. Everything is budget-capped so a
4
+ * hostile or simply huge target can never exhaust memory or wall time; caps are
5
+ * reported back as truncation, never hidden.
6
+ *
7
+ * @module dsh-skill-pack-security/vet/walk
8
+ */
9
+ import { readdir, readFile, stat } from 'node:fs/promises';
10
+ import { basename, join } from 'node:path';
11
+ /** Directories never descended into (generated/third-party content). */
12
+ const SKIPPED_DIRS = new Set([
13
+ 'node_modules', '.git', '.hg', '.svn', '.pnpm-store',
14
+ 'dist', 'build', '.next', '.nuxt', '.cache', '.parcel-cache', 'coverage',
15
+ 'target', '.venv', 'venv', '__pycache__', '.tmp', '.idea', '.vscode', '.turbo',
16
+ 'pack', 'out',
17
+ ]);
18
+ /** File names never collected. */
19
+ const SKIPPED_FILES = new Set(['.DS_Store', 'Thumbs.db', '.gitignore', '.npmignore', '.eslintcache']);
20
+ /** Detect binary content cheaply: NUL bytes within the first 8 KiB. */
21
+ function looksBinary(buffer) {
22
+ const probe = buffer.subarray(0, Math.min(buffer.byteLength, 8192));
23
+ return probe.includes(0);
24
+ }
25
+ /** Decode UTF-8 lossily; the decoder replaces invalid sequences instead of throwing. */
26
+ function decodeText(buffer) {
27
+ return new TextDecoder('utf-8', { fatal: false }).decode(buffer);
28
+ }
29
+ /** Normalize an extracted tarball's file map into the shared scanned-file list. */
30
+ export function filesFromMap(files, maxFileBytes) {
31
+ const scanned = [];
32
+ let bytesScanned = 0;
33
+ let skipped = 0;
34
+ let truncated = false;
35
+ let truncatedReason;
36
+ for (const [path, content] of files) {
37
+ const name = basename(path);
38
+ if (SKIPPED_FILES.has(name))
39
+ continue;
40
+ if (content.byteLength > maxFileBytes) {
41
+ skipped += 1;
42
+ truncated = true;
43
+ truncatedReason = `file ${path} exceeded the ${maxFileBytes}-byte per-file cap`;
44
+ scanned.push({ path, text: null, binary: false, skipped: 'too-large' });
45
+ continue;
46
+ }
47
+ if (looksBinary(content)) {
48
+ skipped += 1;
49
+ scanned.push({ path, text: null, binary: true, skipped: 'binary' });
50
+ continue;
51
+ }
52
+ scanned.push({ path, text: decodeText(content), binary: false, skipped: null });
53
+ bytesScanned += content.byteLength;
54
+ }
55
+ return {
56
+ files: scanned,
57
+ budget: { filesScanned: scanned.length, filesSkipped: skipped, bytesScanned, truncated, truncatedReason },
58
+ };
59
+ }
60
+ /** Walk a local directory with caps; symlinks are never followed. */
61
+ export async function walkLocal(root, maxFiles, maxFileBytes) {
62
+ const scanned = [];
63
+ let skipped = 0;
64
+ let truncated = false;
65
+ let truncatedReason;
66
+ let bytesScanned = 0;
67
+ let seen = 0;
68
+ async function visit(dir, base) {
69
+ let entries;
70
+ try {
71
+ entries = await readdir(dir, { withFileTypes: true });
72
+ }
73
+ catch {
74
+ return;
75
+ }
76
+ for (const entry of entries) {
77
+ if (truncated)
78
+ return;
79
+ const abs = join(dir, entry.name);
80
+ const rel = (base === '' ? entry.name : `${base}/${entry.name}`);
81
+ if (entry.isDirectory()) {
82
+ if (SKIPPED_DIRS.has(entry.name))
83
+ continue;
84
+ await visit(abs, rel);
85
+ continue;
86
+ }
87
+ if (!entry.isFile())
88
+ continue;
89
+ seen += 1;
90
+ if (seen > maxFiles) {
91
+ truncated = true;
92
+ truncatedReason = `target exceeds the ${maxFiles}-file scan cap`;
93
+ return;
94
+ }
95
+ if (SKIPPED_FILES.has(entry.name))
96
+ continue;
97
+ let buffer;
98
+ try {
99
+ const info = await stat(abs);
100
+ if (info.size > maxFileBytes) {
101
+ skipped += 1;
102
+ scanned.push({ path: rel, text: null, binary: false, skipped: 'too-large' });
103
+ continue;
104
+ }
105
+ buffer = await readFile(abs);
106
+ }
107
+ catch {
108
+ skipped += 1;
109
+ scanned.push({ path: rel, text: null, binary: false, skipped: 'decode' });
110
+ continue;
111
+ }
112
+ if (looksBinary(buffer)) {
113
+ skipped += 1;
114
+ scanned.push({ path: rel, text: null, binary: true, skipped: 'binary' });
115
+ continue;
116
+ }
117
+ scanned.push({ path: rel, text: decodeText(buffer), binary: false, skipped: null });
118
+ bytesScanned += buffer.byteLength;
119
+ }
120
+ }
121
+ await visit(root, '');
122
+ return {
123
+ files: scanned,
124
+ budget: {
125
+ filesScanned: scanned.length,
126
+ filesSkipped: skipped,
127
+ bytesScanned,
128
+ truncated: truncated || scanned.some(f => f.skipped === 'too-large'),
129
+ truncatedReason: truncatedReason ?? (scanned.some(f => f.skipped === 'too-large') ? 'some files exceeded the per-file byte cap' : undefined),
130
+ },
131
+ };
132
+ }
133
+ /** Resolve the strip-prefix of a codeload/npm tarball (its single top-level dir). */
134
+ export function stripRoot(files) {
135
+ let prefix = '';
136
+ for (const path of files.keys()) {
137
+ const slash = path.indexOf('/');
138
+ if (slash === -1)
139
+ continue;
140
+ const candidate = path.slice(0, slash);
141
+ if (prefix === '')
142
+ prefix = candidate;
143
+ else if (candidate !== prefix)
144
+ return '';
145
+ }
146
+ return prefix;
147
+ }
@@ -4,13 +4,17 @@ description: '依赖供应链审计:pnpm/npm audit 输出与退出码解读、
4
4
  whenToUse: '用户要求审计或盘点项目依赖安全(漏洞、license、投毒、锁文件漂移)、解读 audit 报告、判断某个依赖能否引入,或写依赖审计结论时使用;单个依赖的普通升级与纯功能开发不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 依赖审计(dependency-audit)
11
11
 
12
12
  目标:对仓库依赖面给出**每条结论都附命令证据**的审计结果。输出分七块:已知漏洞、license、投毒风险、锁文件漂移、多生态漏洞、SBOM 清单、provenance/签名。
13
13
 
14
+ ## 自动化预检:plugin_vet 工具
15
+
16
+ `plugin_vet` 已自动执行本技能第 3/4/7 节的静态部分(license 判定、投毒清单、SBOM 依赖树),其结果逐条引用本技能小节编号。自动化命中后,按各节命令复核证据并排除误报。
17
+
14
18
  ## 1. 定位包管理器与锁文件
15
19
 
16
20
  ```sh
@@ -4,7 +4,7 @@ description: 'agent 环境安全事件响应:分类→控制蔓延→取证留
4
4
  whenToUse: 'agent 环境(DSH 会话、插件、MCP、CI)出现疑似安全事件——密钥泄露、被注入执行了未授权操作、依赖投毒、权限异常——需要响应、留证与复盘时使用;没有事件迹象的日常开发不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 事件响应(incident-response)
@@ -4,7 +4,7 @@ description: '面向 agent 项目的提示注入面审查:AGENTS.md、技能
4
4
  whenToUse: '审查 agent 项目的上下文注入面(AGENTS.md/CLAUDE.md、.agents/skills、工具描述、MCP server 来源、web 抓取链路)、评估间接注入风险或对 agent 项目做安全评审时使用;与模型上下文无关的普通代码评审不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 提示注入面审查(prompt-injection-review)
@@ -4,7 +4,7 @@ description: '凭据/密钥暴露审计:gitleaks、trivy 全历史扫描命令
4
4
  whenToUse: '用户要求扫描或检查仓库的密钥泄露、排查某提交或某文件中的 token、给扫描告警定真伪、写脱敏泄露报告或规划密钥轮换时使用;纯功能开发与常规代码审查不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 凭据扫描(secret-scan)
@@ -4,7 +4,7 @@ description: '仓库/软件安全审计总览:范围界定→资产清单→
4
4
  whenToUse: '用户要求对代码仓库或项目做安全审计、制定审计计划、划分审计阶段、汇总多类发现成报告,或不确定该从哪个专项技能开始时使用;单一主题任务(只查密钥、只查依赖、只评审一个 PR、只查注入面)直接加载对应专项技能,不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 安全审计总览(security-audit)
@@ -12,6 +12,10 @@ metadata:
12
12
  本技能编排一次仓库安全审计的完整流程,产出**每条发现都能用一条命令复核**的报告。
13
13
  它只编排;四类主题的检查细节分别在 `secret-scan`(密钥)、`dependency-audit`(依赖)、`supply-chain-review`(新增依赖评审)、`prompt-injection-review`(agent 项目注入面)中。进入相应阶段时,用 `skill` 工具按需加载对应专项技能,不要在本文件里重写其细节。
14
14
 
15
+ ## 自动化预检:plugin_vet 工具
16
+
17
+ 本包 provider 同时注册 `plugin_vet` 工具(license 扫描 / SBOM / commit 锁定 / 恶意模式 / 五维评分)。它只做机器预检,结果中每条 finding 都标注本包对应技能小节,命中后按本技能流程继续人工审计;工具结果 fail 且门禁策略为 deny 时安装被阻断。
18
+
15
19
  ## 阶段 0:固定审计对象(不固定对象,报告不可复现)
16
20
 
17
21
  ```sh
@@ -4,13 +4,17 @@ description: 'PR/新依赖快速供应链评审:危险 install/postinstall 脚
4
4
  whenToUse: '评审含新依赖(package.json/锁文件变更)的 PR、审查某包的 install 脚本行为、判断疑似 typosquat 包或验证构建可复现性时使用;纯业务代码、与新增依赖无关的 PR 评审不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 新增依赖快速评审(supply-chain-review)
11
11
 
12
12
  目标:在 PR 评审时间内(几分钟)对新增依赖给出 **通过 / 要求修改 / 阻断** 三档结论;每条结论必须附命令证据与误报排除说明。
13
13
 
14
+ ## 自动化预检:plugin_vet 工具
15
+
16
+ `plugin_vet` 已自动执行本技能第 1/2/3 节的静态部分(危险 install 脚本、网络回传、混淆载荷、commit/action 锁定),其结果逐条引用本技能小节编号。自动化命中后,按各节的误报判据与放行判据人工确认,再下三档结论。
17
+
14
18
  ## 0. 确认范围
15
19
 
16
20
  ```sh
@@ -4,7 +4,7 @@ description: '新功能/新系统的轻量威胁建模:固定对象→划定
4
4
  whenToUse: '用户要求对新功能/新系统做威胁建模、设计阶段安全评审、STRIDE 分析、攻击树分析,或要求把安全考虑前置到设计阶段时使用;纯实现细节讨论、与信任边界无关的改动不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 威胁建模(threat-model)
@@ -4,7 +4,7 @@ description: '漏洞情报检索与判定:NVD/CISA-KEV/GHSA/OSV 四处权威
4
4
  whenToUse: '用户给出 CVE/GHSA 编号要求查详情与影响、判断漏洞是否被在野利用(KEV)、评估漏洞对当前项目/依赖的适用性或汇总漏洞情报简报时使用;没有具体编号的通用安全学习、与特定漏洞无关的讨论不触发本技能。'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # 漏洞情报(vuln-intel)
@@ -4,12 +4,16 @@ description: 'Dependency supply-chain audit: reading pnpm/npm audit output and e
4
4
  whenToUse: 'Use when the user asks to audit or inventory project dependency security (vulnerabilities, licenses, poisoning, lockfile drift), to interpret an audit report, to judge whether a dependency may be introduced, or to write a dependency-audit conclusion. Upgrading a single dependency and plain feature development do not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
  # Dependency audit (dependency-audit)
10
10
 
11
11
  Goal: produce an audit of the repository's dependency surface in which **every conclusion carries command evidence**. The output has seven blocks: known vulnerabilities, licenses, poisoning risk, lockfile drift, multi-ecosystem vulnerabilities, the SBOM inventory, and provenance/signatures.
12
12
 
13
+ ## Automated pre-check: the plugin_vet tool
14
+
15
+ `plugin_vet` already runs the static parts of sections 3/4/7 (license verdicts, the poisoning checklist, the SBOM dependency tree), and its findings cite those section numbers. After an automated hit, verify the evidence and rule out false positives with each section's commands.
16
+
13
17
  ## 1. Locate the package manager and lockfile
14
18
 
15
19
  ```sh
@@ -4,7 +4,7 @@ description: 'Security incident response for agent environments: a staged flow o
4
4
  whenToUse: 'Use when an agent environment (DSH sessions, plugins, MCP, CI) shows a suspected security incident — secret leak, injected execution of unauthorized actions, dependency poisoning, permission anomalies — and it needs response, evidence, and a postmortem. Day-to-day development without incident indicators does not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # Incident response (incident-response)
@@ -4,7 +4,7 @@ description: 'Injection-surface review for agent projects: a checklist covering
4
4
  whenToUse: 'Use when reviewing the context injection surfaces of an agent project (AGENTS.md/CLAUDE.md, .agents/skills, tool descriptions, MCP server sources, web-fetch chains), assessing indirect-injection risk, or doing a security review of an agent project. Ordinary code review unrelated to model context does not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
  # Prompt-injection surface review (prompt-injection-review)
10
10
 
@@ -4,7 +4,7 @@ description: 'Credential/secret exposure audit: gitleaks and trivy full-history
4
4
  whenToUse: 'Use when the user asks to scan or inspect a repository for secret leaks, to hunt tokens in a commit or file, to tier scan alerts as real or false, to write a redacted leak report, or to plan secret rotation. Plain feature development and ordinary code review do not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
  # Secret scanning (secret-scan)
10
10
 
@@ -4,12 +4,16 @@ description: 'Repository/software security audit overview: a staged flow of scop
4
4
  whenToUse: 'Use when the user asks for a security audit of a code repository or project, an audit plan, staged audit steps, a consolidated findings report, or is unsure which specialist skill to start with. Single-topic tasks (only secrets, only dependencies, only one PR, only injection surfaces) load the matching specialist skill directly and do not trigger this overview.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
  # Security audit overview (security-audit)
10
10
 
11
11
  This skill orchestrates the complete flow of one repository security audit and produces a report in which **every finding can be re-verified with a single command**. It only orchestrates; the check details for the four topics live in `secret-scan` (secrets), `dependency-audit` (dependencies), `supply-chain-review` (new-dependency review), and `prompt-injection-review` (injection surfaces of agent projects). When a stage is reached, load the matching specialist skill on demand with the `skill` tool — do not rewrite its details here.
12
12
 
13
+ ## Automated pre-check: the plugin_vet tool
14
+
15
+ The pack's provider also registers the `plugin_vet` tool (license scan / SBOM / commit pinning / malicious patterns / five-dimension scoring). It performs only machine pre-checks; every finding cites the matching skill section of this pack, and after a hit you continue with this skill's manual audit flow. A FAIL verdict under a deny gate policy blocks installation.
16
+
13
17
  ## Stage 0: fix the audit target (an unfixed target makes the report unreproducible)
14
18
 
15
19
  ```sh
@@ -4,12 +4,16 @@ description: 'Quick PR/new-dependency supply-chain review: dangerous install/pos
4
4
  whenToUse: 'Use when reviewing a PR that adds new dependencies (package.json/lockfile changes), inspecting a package install-script behavior, judging a suspected typosquat package, or verifying build reproducibility. Plain business-code PR reviews unrelated to new dependencies do not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
  # New-dependency quick review (supply-chain-review)
10
10
 
11
11
  Goal: within PR-review time (minutes), give each new dependency a **pass / request changes / block** verdict; every verdict must carry command evidence and a false-positive exclusion note.
12
12
 
13
+ ## Automated pre-check: the plugin_vet tool
14
+
15
+ `plugin_vet` already runs the static parts of sections 1/2/3 (dangerous install scripts, network exfiltration, obfuscated payloads, commit/action pinning), and its findings cite those section numbers. After an automated hit, apply each section's false-positive and allowlist criteria manually before giving the three-tier verdict.
16
+
13
17
  ## 0. Confirm the scope
14
18
 
15
19
  ```sh
@@ -4,7 +4,7 @@ description: 'Lightweight threat modeling for new features/systems: fix the targ
4
4
  whenToUse: 'Use when the user asks for threat modeling of a new feature/system, design-stage security review, STRIDE analysis, attack-tree analysis, or wants security considered up front at design time. Pure implementation detail discussions and changes unrelated to trust boundaries do not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # Threat modeling (threat-model)
@@ -4,7 +4,7 @@ description: 'Vulnerability intelligence lookup and triage: query commands for t
4
4
  whenToUse: 'Use when the user gives a CVE/GHSA id and asks for details and impact, whether a vulnerability is actively exploited (KEV), its applicability to the current project/dependencies, or a vulnerability intelligence brief. General security learning without a specific id, and discussions unrelated to a specific vulnerability, do not trigger this skill.'
5
5
  metadata:
6
6
  pack: dsh-skill-pack-security
7
- version: '1.3.0'
7
+ version: '2.0.1'
8
8
  ---
9
9
 
10
10
  # Vulnerability intelligence (vuln-intel)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@perrylink/dsh-skill-pack-security-provider",
3
- "version": "1.3.0",
4
- "description": "Optional provider plugin for dsh-skill-pack-security: registers the pack's skills/ (zh) or skills-en/ (en) edition on ctx.skills. Ships both editions embedded in pack/.",
3
+ "version": "2.0.1",
4
+ "description": "Provider plugin for dsh-skill-pack-security: registers the pack's skills/ (zh) or skills-en/ (en) edition on ctx.skills AND the plugin_vet supply-chain gate tool on ctx.tools (license/SBOM/commit-lock/malware scans + five-dimension risk card). Ships both skill editions embedded in pack/.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/types/index.d.ts",
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "files": [
14
14
  "lib/index.js",
15
+ "lib/vet/**",
15
16
  "lib/types/**/*.d.ts",
16
17
  "pack/**",
17
18
  "cordis.patch.yml"
@@ -21,6 +22,45 @@
21
22
  "patch": "./cordis.patch.yml"
22
23
  }
23
24
  },
25
+ "dshWorkshop": {
26
+ "schema": "omdsh-workshop-package/v1",
27
+ "type": "plugin",
28
+ "integration": {
29
+ "protocol": "harness-profile",
30
+ "artifact": "cordis.patch.yml"
31
+ },
32
+ "install": {
33
+ "mode": "transactional",
34
+ "adapter": "profile-bundle",
35
+ "failurePolicy": "generation-rollback",
36
+ "touchesCurrentBeforeActivation": false
37
+ },
38
+ "lifecycle": {
39
+ "activation": "restart-profile",
40
+ "dispose": "supported"
41
+ },
42
+ "permissions": [
43
+ "files:read",
44
+ "network:fetch"
45
+ ],
46
+ "compatibility": {
47
+ "dshVersions": [
48
+ "0.1.0-rc.6"
49
+ ]
50
+ },
51
+ "capability": {
52
+ "id": "skill-pack-security",
53
+ "kind": "tool",
54
+ "invocation": "execute the plugin_vet tool against a GitHub owner/repo target",
55
+ "expected": "ctx.tools has plugin_vet and its report lists license/SBOM/commit-lock/malicious findings with skill-section citations for manual follow-up"
56
+ },
57
+ "evidence": {
58
+ "install": null,
59
+ "failureIsolation": null,
60
+ "hotReload": null,
61
+ "remove": null
62
+ }
63
+ },
24
64
  "license": "Apache-2.0",
25
65
  "keywords": [
26
66
  "dsh",
@@ -35,14 +75,17 @@
35
75
  "peerDependencies": {
36
76
  "@deepseek-ai/cordis": "^4.0.1",
37
77
  "@deepseek-ai/dsh-skill-filesystem": "0.1.0-rc.6",
78
+ "@deepseek-ai/dsh-tools": ">=0.0.1-rc.1 <0.2.0",
38
79
  "@deepseek-ai/schemastery": "^3.18.1"
39
80
  },
40
81
  "devDependencies": {
41
82
  "@deepseek-ai/cordis": "^4.0.1",
83
+ "@deepseek-ai/dsh-llm": "^0.1.0-rc.6",
42
84
  "@deepseek-ai/dsh-skill-filesystem": "0.1.0-rc.6",
85
+ "@deepseek-ai/dsh-tools": "0.1.0-rc.6",
43
86
  "@deepseek-ai/schemastery": "^3.18.1",
44
- "@types/node": "^22.15.0",
45
- "typescript": "^5.7.0"
87
+ "@types/node": "^26.2.0",
88
+ "typescript": "^7.0.2"
46
89
  },
47
90
  "scripts": {
48
91
  "build": "tsc --noEmitOnError",