@dzhechkov/harness-core 0.3.15 → 0.3.17
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/dist/import-ecc.d.ts +48 -0
- package/dist/import-ecc.d.ts.map +1 -0
- package/dist/import-ecc.js +171 -0
- package/dist/import-ecc.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +12 -2
- package/dist/operations.js.map +1 -1
- package/dist/risk-scoring.d.ts +39 -0
- package/dist/risk-scoring.d.ts.map +1 -0
- package/dist/risk-scoring.js +128 -0
- package/dist/risk-scoring.js.map +1 -0
- package/package.json +1 -1
- package/src/import-ecc.ts +219 -0
- package/src/index.ts +4 -0
- package/src/operations.ts +12 -2
- package/src/risk-scoring.ts +158 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dz import-ecc` — import skills from the ECC project (https://github.com/affaan-m/ECC).
|
|
3
|
+
*
|
|
4
|
+
* Fetches SKILL.md files from ECC's GitHub repo, maps the frontmatter to
|
|
5
|
+
* agentskills.io format, deduplicates against existing skills, and writes
|
|
6
|
+
* the imported skills to the target directory.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
/** Result of a single skill import. */
|
|
11
|
+
export interface ImportedSkill {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly status: 'imported' | 'skipped_duplicate' | 'skipped_error';
|
|
14
|
+
readonly reason?: string;
|
|
15
|
+
}
|
|
16
|
+
/** Full import report. */
|
|
17
|
+
export interface ImportEccReport {
|
|
18
|
+
readonly source: string;
|
|
19
|
+
readonly totalFetched: number;
|
|
20
|
+
readonly imported: number;
|
|
21
|
+
readonly skippedDuplicate: number;
|
|
22
|
+
readonly skippedError: number;
|
|
23
|
+
readonly skills: readonly ImportedSkill[];
|
|
24
|
+
}
|
|
25
|
+
/** Options for the import. */
|
|
26
|
+
export interface ImportEccOptions {
|
|
27
|
+
/** Directory containing existing skills to check for duplicates. */
|
|
28
|
+
readonly existingSkillsDir: string;
|
|
29
|
+
/** Directory to write imported skills into. */
|
|
30
|
+
readonly outputDir: string;
|
|
31
|
+
/** If true, overwrite existing skills. */
|
|
32
|
+
readonly force?: boolean;
|
|
33
|
+
/** Only import these skill IDs (filter). */
|
|
34
|
+
readonly select?: readonly string[];
|
|
35
|
+
/** Maximum number of skills to import (default: all). */
|
|
36
|
+
readonly limit?: number;
|
|
37
|
+
/** Path to a local ECC clone (skip GitHub fetch). */
|
|
38
|
+
readonly localPath?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Import skills from ECC.
|
|
42
|
+
*
|
|
43
|
+
* Supports two modes:
|
|
44
|
+
* 1. Local clone: `--local-path /path/to/ECC` (fast, no network)
|
|
45
|
+
* 2. GitHub API: fetches from api.github.com (rate-limited, requires no clone)
|
|
46
|
+
*/
|
|
47
|
+
export declare function importEcc(options: ImportEccOptions): Promise<ImportEccReport>;
|
|
48
|
+
//# sourceMappingURL=import-ecc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-ecc.d.ts","sourceRoot":"","sources":["../src/import-ecc.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,mBAAmB,GAAG,eAAe,CAAC;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,0BAA0B;AAC1B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAED,8BAA8B;AAC9B,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AA6ED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA0FnF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dz import-ecc` — import skills from the ECC project (https://github.com/affaan-m/ECC).
|
|
3
|
+
*
|
|
4
|
+
* Fetches SKILL.md files from ECC's GitHub repo, maps the frontmatter to
|
|
5
|
+
* agentskills.io format, deduplicates against existing skills, and writes
|
|
6
|
+
* the imported skills to the target directory.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, mkdirSync, writeFileSync, readdirSync, readFileSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
const ECC_SKILLS_API = 'https://api.github.com/repos/affaan-m/ECC/contents/skills';
|
|
13
|
+
const ECC_RAW_BASE = 'https://raw.githubusercontent.com/affaan-m/ECC/main/skills';
|
|
14
|
+
/**
|
|
15
|
+
* Map ECC YAML frontmatter to agentskills.io format.
|
|
16
|
+
*
|
|
17
|
+
* ECC format:
|
|
18
|
+
* ```yaml
|
|
19
|
+
* name: skill-name
|
|
20
|
+
* description: long description
|
|
21
|
+
* origin: ECC
|
|
22
|
+
* tools: Read, Write, Bash
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* agentskills.io format:
|
|
26
|
+
* ```yaml
|
|
27
|
+
* name: skill-name
|
|
28
|
+
* description: long description
|
|
29
|
+
* trust_tier: 0
|
|
30
|
+
* trust_tier_label: "Community (imported from ECC)"
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
function mapFrontmatter(eccContent) {
|
|
34
|
+
// Extract frontmatter
|
|
35
|
+
const fmMatch = eccContent.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);
|
|
36
|
+
if (!fmMatch)
|
|
37
|
+
return eccContent; // No frontmatter — return as-is
|
|
38
|
+
const fmYaml = fmMatch[1] ?? '';
|
|
39
|
+
const body = eccContent.slice(fmMatch[0]?.length ?? 0);
|
|
40
|
+
// Parse fields from YAML (simple key: value parsing, no library needed)
|
|
41
|
+
const nameMatch = fmYaml.match(/^name:\s*(.+)$/m);
|
|
42
|
+
const descMatch = fmYaml.match(/^description:\s*([\s\S]*?)(?=\n\w+:|$)/m);
|
|
43
|
+
const name = nameMatch?.[1]?.trim() ?? 'unknown';
|
|
44
|
+
let desc = descMatch?.[1]?.trim() ?? '';
|
|
45
|
+
// Collapse multi-line description
|
|
46
|
+
desc = desc.replace(/\n\s+/g, ' ');
|
|
47
|
+
// Build agentskills.io frontmatter
|
|
48
|
+
const newFm = [
|
|
49
|
+
'---',
|
|
50
|
+
`name: "${name}"`,
|
|
51
|
+
`description: >`,
|
|
52
|
+
` ${desc}`,
|
|
53
|
+
`trust_tier: 0`,
|
|
54
|
+
`trust_tier_label: "Community (imported from ECC)"`,
|
|
55
|
+
`source: "https://github.com/affaan-m/ECC/tree/main/skills/${name}"`,
|
|
56
|
+
'---',
|
|
57
|
+
].join('\n');
|
|
58
|
+
return newFm + '\n' + body;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List ECC skill directories from a local clone.
|
|
62
|
+
*/
|
|
63
|
+
function listLocalSkills(localPath) {
|
|
64
|
+
const skillsDir = join(localPath, 'skills');
|
|
65
|
+
if (!existsSync(skillsDir))
|
|
66
|
+
return [];
|
|
67
|
+
return readdirSync(skillsDir, { withFileTypes: true })
|
|
68
|
+
.filter((d) => d.isDirectory())
|
|
69
|
+
.map((d) => d.name)
|
|
70
|
+
.sort();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Read a skill from a local ECC clone.
|
|
74
|
+
*/
|
|
75
|
+
function readLocalSkill(localPath, skillId) {
|
|
76
|
+
const skillMd = join(localPath, 'skills', skillId, 'SKILL.md');
|
|
77
|
+
if (!existsSync(skillMd))
|
|
78
|
+
return null;
|
|
79
|
+
return readFileSync(skillMd, 'utf-8');
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Import skills from ECC.
|
|
83
|
+
*
|
|
84
|
+
* Supports two modes:
|
|
85
|
+
* 1. Local clone: `--local-path /path/to/ECC` (fast, no network)
|
|
86
|
+
* 2. GitHub API: fetches from api.github.com (rate-limited, requires no clone)
|
|
87
|
+
*/
|
|
88
|
+
export async function importEcc(options) {
|
|
89
|
+
const existing = new Set();
|
|
90
|
+
if (existsSync(options.existingSkillsDir)) {
|
|
91
|
+
for (const d of readdirSync(options.existingSkillsDir, { withFileTypes: true })) {
|
|
92
|
+
if (d.isDirectory())
|
|
93
|
+
existing.add(d.name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
let skillIds;
|
|
97
|
+
if (options.localPath) {
|
|
98
|
+
// Local clone mode
|
|
99
|
+
skillIds = listLocalSkills(options.localPath);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
// GitHub API mode — fetch directory listing
|
|
103
|
+
const res = await fetch(ECC_SKILLS_API, {
|
|
104
|
+
headers: { 'Accept': 'application/vnd.github.v3+json', 'User-Agent': 'dz-harness-hub' },
|
|
105
|
+
});
|
|
106
|
+
if (!res.ok) {
|
|
107
|
+
return {
|
|
108
|
+
source: 'github.com/affaan-m/ECC',
|
|
109
|
+
totalFetched: 0, imported: 0, skippedDuplicate: 0, skippedError: 1,
|
|
110
|
+
skills: [{ id: 'api', status: 'skipped_error', reason: `GitHub API ${res.status}: ${res.statusText}` }],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const entries = (await res.json());
|
|
114
|
+
skillIds = entries.filter((e) => e.type === 'dir').map((e) => e.name).sort();
|
|
115
|
+
}
|
|
116
|
+
// Apply filters
|
|
117
|
+
if (options.select) {
|
|
118
|
+
const sel = new Set(options.select);
|
|
119
|
+
skillIds = skillIds.filter((id) => sel.has(id));
|
|
120
|
+
}
|
|
121
|
+
if (options.limit) {
|
|
122
|
+
skillIds = skillIds.slice(0, options.limit);
|
|
123
|
+
}
|
|
124
|
+
const results = [];
|
|
125
|
+
for (const id of skillIds) {
|
|
126
|
+
// Check for duplicates
|
|
127
|
+
if (existing.has(id) && !options.force) {
|
|
128
|
+
results.push({ id, status: 'skipped_duplicate', reason: `Already exists in ${options.existingSkillsDir}` });
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
let content;
|
|
133
|
+
if (options.localPath) {
|
|
134
|
+
content = readLocalSkill(options.localPath, id);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
// Fetch from GitHub raw
|
|
138
|
+
const url = `${ECC_RAW_BASE}/${id}/SKILL.md`;
|
|
139
|
+
const res = await fetch(url, { headers: { 'User-Agent': 'dz-harness-hub' } });
|
|
140
|
+
if (!res.ok) {
|
|
141
|
+
results.push({ id, status: 'skipped_error', reason: `HTTP ${res.status}` });
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
content = await res.text();
|
|
145
|
+
}
|
|
146
|
+
if (!content) {
|
|
147
|
+
results.push({ id, status: 'skipped_error', reason: 'No SKILL.md found' });
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
// Map frontmatter
|
|
151
|
+
const mapped = mapFrontmatter(content);
|
|
152
|
+
// Write to output directory
|
|
153
|
+
const outDir = join(options.outputDir, id);
|
|
154
|
+
mkdirSync(outDir, { recursive: true });
|
|
155
|
+
writeFileSync(join(outDir, 'SKILL.md'), mapped, 'utf-8');
|
|
156
|
+
results.push({ id, status: 'imported' });
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
results.push({ id, status: 'skipped_error', reason: String(err) });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
source: options.localPath ?? 'github.com/affaan-m/ECC',
|
|
164
|
+
totalFetched: skillIds.length,
|
|
165
|
+
imported: results.filter((r) => r.status === 'imported').length,
|
|
166
|
+
skippedDuplicate: results.filter((r) => r.status === 'skipped_duplicate').length,
|
|
167
|
+
skippedError: results.filter((r) => r.status === 'skipped_error').length,
|
|
168
|
+
skills: results,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=import-ecc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-ecc.js","sourceRoot":"","sources":["../src/import-ecc.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,10 @@ export type { PackageDownloads, DownloadsReport } from './downloads.js';
|
|
|
30
30
|
export { discoverInstalled, checkUpgrades } from './upgrade.js';
|
|
31
31
|
export type { InstalledSkill, UpgradeCheck, UpgradeReport } from './upgrade.js';
|
|
32
32
|
export type { PublishResult, PublishReport } from './publish.js';
|
|
33
|
+
export { computeRiskScore } from './risk-scoring.js';
|
|
34
|
+
export type { RiskScore, RiskThresholds } from './risk-scoring.js';
|
|
35
|
+
export { importEcc } from './import-ecc.js';
|
|
36
|
+
export type { ImportEccReport, ImportEccOptions, ImportedSkill } from './import-ecc.js';
|
|
33
37
|
export type { RegistryEntry, Registry } from './registry.js';
|
|
34
38
|
export type { BenchmarkCheck, BenchmarkScore, BenchmarkReport, CompareResult } from './benchmark.js';
|
|
35
39
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAClH,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,4 +21,6 @@ export { generatePlugin } from './plugin.js';
|
|
|
21
21
|
export { discoverPackages, publishPackages } from './publish.js';
|
|
22
22
|
export { fetchAllDownloads } from './downloads.js';
|
|
23
23
|
export { discoverInstalled, checkUpgrades } from './upgrade.js';
|
|
24
|
+
export { computeRiskScore } from './risk-scoring.js';
|
|
25
|
+
export { importEcc } from './import-ecc.js';
|
|
24
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAElH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/operations.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
package/dist/operations.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
9
9
|
import { join } from 'node:path';
|
|
10
10
|
import { claudeAdapter } from '@dzhechkov/adapter-claude';
|
|
11
|
+
import { computeRiskScore } from './risk-scoring.js';
|
|
11
12
|
import { applyEmitResult } from './apply.js';
|
|
12
13
|
import { discoverSkillIds, loadSkillFromDir } from './skills.js';
|
|
13
14
|
import { TARGETS } from './targets.js';
|
|
@@ -32,14 +33,23 @@ function enrichEmitForTarget(emit, target, skillId, skill) {
|
|
|
32
33
|
const name = skill.frontmatter.name ?? skillId;
|
|
33
34
|
const desc = skill.frontmatter.description ?? '';
|
|
34
35
|
if (target === 'codex') {
|
|
35
|
-
// Codex: agents/openai.yaml — UI metadata + MCP dependencies
|
|
36
|
+
// Codex: agents/openai.yaml — UI metadata + risk scoring + MCP dependencies
|
|
37
|
+
const risk = computeRiskScore(skill.document.body);
|
|
36
38
|
const yaml = [
|
|
37
39
|
`# Codex enrichment for ${name}`,
|
|
38
40
|
`# Generated by dz init --enrich`,
|
|
41
|
+
`# 4-axis risk scoring (inspired by ECC 2.0)`,
|
|
39
42
|
`interface:`,
|
|
40
43
|
` display_name: "${name}"`,
|
|
41
44
|
`policy:`,
|
|
42
|
-
` allow_implicit_invocation:
|
|
45
|
+
` allow_implicit_invocation: ${risk.level === 'low' || risk.level === 'medium'}`,
|
|
46
|
+
` risk_level: "${risk.level}"`,
|
|
47
|
+
` risk_score: ${risk.total.toFixed(2)}`,
|
|
48
|
+
` risk_axes:`,
|
|
49
|
+
` base_tool: ${risk.axes.base_tool.toFixed(2)}`,
|
|
50
|
+
` file_sensitivity: ${risk.axes.file_sensitivity.toFixed(2)}`,
|
|
51
|
+
` blast_radius: ${risk.axes.blast_radius.toFixed(2)}`,
|
|
52
|
+
` irreversibility: ${risk.axes.irreversibility.toFixed(2)}`,
|
|
43
53
|
].join('\n');
|
|
44
54
|
extra.push({ path: `${skillDir}/agents/openai.yaml`, encoding: 'utf-8', content: yaml });
|
|
45
55
|
}
|
package/dist/operations.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 4-axis risk scoring for AI agent tool calls.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by ECC 2.0 (https://github.com/affaan-m/ECC) Rust control-plane.
|
|
5
|
+
* Re-implemented in TypeScript for harness --enrich enrichment.
|
|
6
|
+
*
|
|
7
|
+
* Axes:
|
|
8
|
+
* 1. Base tool risk — inherent danger of the tool type
|
|
9
|
+
* 2. File sensitivity — whether skill targets secrets/infra files
|
|
10
|
+
* 3. Blast radius — scope of potential changes
|
|
11
|
+
* 4. Irreversibility — whether actions can be undone
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
/** Risk score result with per-axis breakdown. */
|
|
16
|
+
export interface RiskScore {
|
|
17
|
+
/** Combined score 0.0–1.0 (higher = more risky). */
|
|
18
|
+
readonly total: number;
|
|
19
|
+
/** Risk level derived from total. */
|
|
20
|
+
readonly level: 'low' | 'medium' | 'high' | 'critical';
|
|
21
|
+
/** Per-axis breakdown. */
|
|
22
|
+
readonly axes: {
|
|
23
|
+
readonly base_tool: number;
|
|
24
|
+
readonly file_sensitivity: number;
|
|
25
|
+
readonly blast_radius: number;
|
|
26
|
+
readonly irreversibility: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Configurable thresholds for risk levels. */
|
|
30
|
+
export interface RiskThresholds {
|
|
31
|
+
readonly medium: number;
|
|
32
|
+
readonly high: number;
|
|
33
|
+
readonly critical: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Compute 4-axis risk score for a skill based on its SKILL.md content.
|
|
37
|
+
*/
|
|
38
|
+
export declare function computeRiskScore(skillContent: string, thresholds?: RiskThresholds): RiskScore;
|
|
39
|
+
//# sourceMappingURL=risk-scoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-scoring.d.ts","sourceRoot":"","sources":["../src/risk-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,iDAAiD;AACjD,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACvD,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAgGD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,UAAU,GAAE,cAAmC,GAC9C,SAAS,CAoBX"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 4-axis risk scoring for AI agent tool calls.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by ECC 2.0 (https://github.com/affaan-m/ECC) Rust control-plane.
|
|
5
|
+
* Re-implemented in TypeScript for harness --enrich enrichment.
|
|
6
|
+
*
|
|
7
|
+
* Axes:
|
|
8
|
+
* 1. Base tool risk — inherent danger of the tool type
|
|
9
|
+
* 2. File sensitivity — whether skill targets secrets/infra files
|
|
10
|
+
* 3. Blast radius — scope of potential changes
|
|
11
|
+
* 4. Irreversibility — whether actions can be undone
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_THRESHOLDS = {
|
|
16
|
+
medium: 0.3,
|
|
17
|
+
high: 0.5,
|
|
18
|
+
critical: 0.7,
|
|
19
|
+
};
|
|
20
|
+
// ── Axis 1: Base tool risk ──────────────────────────────────
|
|
21
|
+
const TOOL_RISK = {
|
|
22
|
+
bash: 0.20,
|
|
23
|
+
write: 0.15,
|
|
24
|
+
multiedit: 0.15,
|
|
25
|
+
edit: 0.10,
|
|
26
|
+
read: 0.05,
|
|
27
|
+
glob: 0.03,
|
|
28
|
+
grep: 0.03,
|
|
29
|
+
agent: 0.08,
|
|
30
|
+
mcp: 0.12,
|
|
31
|
+
};
|
|
32
|
+
function baseToolRisk(skillContent) {
|
|
33
|
+
const lower = skillContent.toLowerCase();
|
|
34
|
+
let maxRisk = 0.05;
|
|
35
|
+
for (const [tool, risk] of Object.entries(TOOL_RISK)) {
|
|
36
|
+
if (lower.includes(tool)) {
|
|
37
|
+
maxRisk = Math.max(maxRisk, risk);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return maxRisk;
|
|
41
|
+
}
|
|
42
|
+
// ── Axis 2: File sensitivity ────────────────────────────────
|
|
43
|
+
const SENSITIVE_PATTERNS = [
|
|
44
|
+
'.env', 'api_key', 'secret', 'password', 'credential',
|
|
45
|
+
'id_rsa', '.pem', '.key', 'token', 'auth',
|
|
46
|
+
];
|
|
47
|
+
const INFRA_PATTERNS = [
|
|
48
|
+
'package.json', 'dockerfile', 'docker-compose', '.github/workflows',
|
|
49
|
+
'migration', 'terraform', 'k8s', 'deployment', 'helm',
|
|
50
|
+
];
|
|
51
|
+
function fileSensitivity(skillContent) {
|
|
52
|
+
const lower = skillContent.toLowerCase();
|
|
53
|
+
let score = 0;
|
|
54
|
+
for (const pat of SENSITIVE_PATTERNS) {
|
|
55
|
+
if (lower.includes(pat)) {
|
|
56
|
+
score = Math.max(score, 0.25);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
for (const pat of INFRA_PATTERNS) {
|
|
61
|
+
if (lower.includes(pat)) {
|
|
62
|
+
score = Math.max(score, 0.15);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return score;
|
|
67
|
+
}
|
|
68
|
+
// ── Axis 3: Blast radius ────────────────────────────────────
|
|
69
|
+
const WIDE_SCOPE_PATTERNS = [
|
|
70
|
+
'**/*', '-rf', '-r ', '--recursive', 'find .', 'grep -r',
|
|
71
|
+
'sed -i', 'awk', 'xargs',
|
|
72
|
+
];
|
|
73
|
+
function blastRadius(skillContent) {
|
|
74
|
+
const lower = skillContent.toLowerCase();
|
|
75
|
+
let score = 0.05;
|
|
76
|
+
for (const pat of WIDE_SCOPE_PATTERNS) {
|
|
77
|
+
if (lower.includes(pat)) {
|
|
78
|
+
score = Math.max(score, 0.20);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Check for multi-file operations mentioned
|
|
83
|
+
if (/\d{2,}\s*(files?|modules?)/.test(lower)) {
|
|
84
|
+
score = Math.max(score, 0.15);
|
|
85
|
+
}
|
|
86
|
+
return score;
|
|
87
|
+
}
|
|
88
|
+
// ── Axis 4: Irreversibility ─────────────────────────────────
|
|
89
|
+
const DESTRUCTIVE_PATTERNS = [
|
|
90
|
+
'rm -rf', 'rm -f', 'drop table', 'drop database', 'truncate',
|
|
91
|
+
'git push --force', 'git reset --hard', 'git clean -f',
|
|
92
|
+
'format disk', 'destroy', 'delete permanently',
|
|
93
|
+
];
|
|
94
|
+
function irreversibility(skillContent) {
|
|
95
|
+
const lower = skillContent.toLowerCase();
|
|
96
|
+
let score = 0;
|
|
97
|
+
for (const pat of DESTRUCTIVE_PATTERNS) {
|
|
98
|
+
if (lower.includes(pat)) {
|
|
99
|
+
score = Math.max(score, 0.25);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return score;
|
|
104
|
+
}
|
|
105
|
+
// ── Combined scoring ────────────────────────────────────────
|
|
106
|
+
/**
|
|
107
|
+
* Compute 4-axis risk score for a skill based on its SKILL.md content.
|
|
108
|
+
*/
|
|
109
|
+
export function computeRiskScore(skillContent, thresholds = DEFAULT_THRESHOLDS) {
|
|
110
|
+
const axes = {
|
|
111
|
+
base_tool: baseToolRisk(skillContent),
|
|
112
|
+
file_sensitivity: fileSensitivity(skillContent),
|
|
113
|
+
blast_radius: blastRadius(skillContent),
|
|
114
|
+
irreversibility: irreversibility(skillContent),
|
|
115
|
+
};
|
|
116
|
+
const total = Math.min(1.0, axes.base_tool + axes.file_sensitivity + axes.blast_radius + axes.irreversibility);
|
|
117
|
+
let level;
|
|
118
|
+
if (total >= thresholds.critical)
|
|
119
|
+
level = 'critical';
|
|
120
|
+
else if (total >= thresholds.high)
|
|
121
|
+
level = 'high';
|
|
122
|
+
else if (total >= thresholds.medium)
|
|
123
|
+
level = 'medium';
|
|
124
|
+
else
|
|
125
|
+
level = 'low';
|
|
126
|
+
return { total, level, axes };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=risk-scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-scoring.js","sourceRoot":"","sources":["../src/risk-scoring.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dz import-ecc` — import skills from the ECC project (https://github.com/affaan-m/ECC).
|
|
3
|
+
*
|
|
4
|
+
* Fetches SKILL.md files from ECC's GitHub repo, maps the frontmatter to
|
|
5
|
+
* agentskills.io format, deduplicates against existing skills, and writes
|
|
6
|
+
* the imported skills to the target directory.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { existsSync, mkdirSync, writeFileSync, readdirSync, readFileSync } from 'node:fs';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
|
|
14
|
+
/** Result of a single skill import. */
|
|
15
|
+
export interface ImportedSkill {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly status: 'imported' | 'skipped_duplicate' | 'skipped_error';
|
|
18
|
+
readonly reason?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Full import report. */
|
|
22
|
+
export interface ImportEccReport {
|
|
23
|
+
readonly source: string;
|
|
24
|
+
readonly totalFetched: number;
|
|
25
|
+
readonly imported: number;
|
|
26
|
+
readonly skippedDuplicate: number;
|
|
27
|
+
readonly skippedError: number;
|
|
28
|
+
readonly skills: readonly ImportedSkill[];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Options for the import. */
|
|
32
|
+
export interface ImportEccOptions {
|
|
33
|
+
/** Directory containing existing skills to check for duplicates. */
|
|
34
|
+
readonly existingSkillsDir: string;
|
|
35
|
+
/** Directory to write imported skills into. */
|
|
36
|
+
readonly outputDir: string;
|
|
37
|
+
/** If true, overwrite existing skills. */
|
|
38
|
+
readonly force?: boolean;
|
|
39
|
+
/** Only import these skill IDs (filter). */
|
|
40
|
+
readonly select?: readonly string[];
|
|
41
|
+
/** Maximum number of skills to import (default: all). */
|
|
42
|
+
readonly limit?: number;
|
|
43
|
+
/** Path to a local ECC clone (skip GitHub fetch). */
|
|
44
|
+
readonly localPath?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const ECC_SKILLS_API = 'https://api.github.com/repos/affaan-m/ECC/contents/skills';
|
|
48
|
+
const ECC_RAW_BASE = 'https://raw.githubusercontent.com/affaan-m/ECC/main/skills';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Map ECC YAML frontmatter to agentskills.io format.
|
|
52
|
+
*
|
|
53
|
+
* ECC format:
|
|
54
|
+
* ```yaml
|
|
55
|
+
* name: skill-name
|
|
56
|
+
* description: long description
|
|
57
|
+
* origin: ECC
|
|
58
|
+
* tools: Read, Write, Bash
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* agentskills.io format:
|
|
62
|
+
* ```yaml
|
|
63
|
+
* name: skill-name
|
|
64
|
+
* description: long description
|
|
65
|
+
* trust_tier: 0
|
|
66
|
+
* trust_tier_label: "Community (imported from ECC)"
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
function mapFrontmatter(eccContent: string): string {
|
|
70
|
+
// Extract frontmatter
|
|
71
|
+
const fmMatch = eccContent.match(/^---\s*\n([\s\S]*?)\n---\s*\n/);
|
|
72
|
+
if (!fmMatch) return eccContent; // No frontmatter — return as-is
|
|
73
|
+
|
|
74
|
+
const fmYaml = fmMatch[1] ?? '';
|
|
75
|
+
const body = eccContent.slice(fmMatch[0]?.length ?? 0);
|
|
76
|
+
|
|
77
|
+
// Parse fields from YAML (simple key: value parsing, no library needed)
|
|
78
|
+
const nameMatch = fmYaml.match(/^name:\s*(.+)$/m);
|
|
79
|
+
const descMatch = fmYaml.match(/^description:\s*([\s\S]*?)(?=\n\w+:|$)/m);
|
|
80
|
+
|
|
81
|
+
const name = nameMatch?.[1]?.trim() ?? 'unknown';
|
|
82
|
+
let desc = descMatch?.[1]?.trim() ?? '';
|
|
83
|
+
// Collapse multi-line description
|
|
84
|
+
desc = desc.replace(/\n\s+/g, ' ');
|
|
85
|
+
|
|
86
|
+
// Build agentskills.io frontmatter
|
|
87
|
+
const newFm = [
|
|
88
|
+
'---',
|
|
89
|
+
`name: "${name}"`,
|
|
90
|
+
`description: >`,
|
|
91
|
+
` ${desc}`,
|
|
92
|
+
`trust_tier: 0`,
|
|
93
|
+
`trust_tier_label: "Community (imported from ECC)"`,
|
|
94
|
+
`source: "https://github.com/affaan-m/ECC/tree/main/skills/${name}"`,
|
|
95
|
+
'---',
|
|
96
|
+
].join('\n');
|
|
97
|
+
|
|
98
|
+
return newFm + '\n' + body;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* List ECC skill directories from a local clone.
|
|
103
|
+
*/
|
|
104
|
+
function listLocalSkills(localPath: string): string[] {
|
|
105
|
+
const skillsDir = join(localPath, 'skills');
|
|
106
|
+
if (!existsSync(skillsDir)) return [];
|
|
107
|
+
return readdirSync(skillsDir, { withFileTypes: true })
|
|
108
|
+
.filter((d) => d.isDirectory())
|
|
109
|
+
.map((d) => d.name)
|
|
110
|
+
.sort();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Read a skill from a local ECC clone.
|
|
115
|
+
*/
|
|
116
|
+
function readLocalSkill(localPath: string, skillId: string): string | null {
|
|
117
|
+
const skillMd = join(localPath, 'skills', skillId, 'SKILL.md');
|
|
118
|
+
if (!existsSync(skillMd)) return null;
|
|
119
|
+
return readFileSync(skillMd, 'utf-8');
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Import skills from ECC.
|
|
124
|
+
*
|
|
125
|
+
* Supports two modes:
|
|
126
|
+
* 1. Local clone: `--local-path /path/to/ECC` (fast, no network)
|
|
127
|
+
* 2. GitHub API: fetches from api.github.com (rate-limited, requires no clone)
|
|
128
|
+
*/
|
|
129
|
+
export async function importEcc(options: ImportEccOptions): Promise<ImportEccReport> {
|
|
130
|
+
const existing = new Set<string>();
|
|
131
|
+
if (existsSync(options.existingSkillsDir)) {
|
|
132
|
+
for (const d of readdirSync(options.existingSkillsDir, { withFileTypes: true })) {
|
|
133
|
+
if (d.isDirectory()) existing.add(d.name);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
let skillIds: string[];
|
|
138
|
+
|
|
139
|
+
if (options.localPath) {
|
|
140
|
+
// Local clone mode
|
|
141
|
+
skillIds = listLocalSkills(options.localPath);
|
|
142
|
+
} else {
|
|
143
|
+
// GitHub API mode — fetch directory listing
|
|
144
|
+
const res = await fetch(ECC_SKILLS_API, {
|
|
145
|
+
headers: { 'Accept': 'application/vnd.github.v3+json', 'User-Agent': 'dz-harness-hub' },
|
|
146
|
+
});
|
|
147
|
+
if (!res.ok) {
|
|
148
|
+
return {
|
|
149
|
+
source: 'github.com/affaan-m/ECC',
|
|
150
|
+
totalFetched: 0, imported: 0, skippedDuplicate: 0, skippedError: 1,
|
|
151
|
+
skills: [{ id: 'api', status: 'skipped_error', reason: `GitHub API ${res.status}: ${res.statusText}` }],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const entries = (await res.json()) as { name: string; type: string }[];
|
|
155
|
+
skillIds = entries.filter((e) => e.type === 'dir').map((e) => e.name).sort();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Apply filters
|
|
159
|
+
if (options.select) {
|
|
160
|
+
const sel = new Set(options.select);
|
|
161
|
+
skillIds = skillIds.filter((id) => sel.has(id));
|
|
162
|
+
}
|
|
163
|
+
if (options.limit) {
|
|
164
|
+
skillIds = skillIds.slice(0, options.limit);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const results: ImportedSkill[] = [];
|
|
168
|
+
|
|
169
|
+
for (const id of skillIds) {
|
|
170
|
+
// Check for duplicates
|
|
171
|
+
if (existing.has(id) && !options.force) {
|
|
172
|
+
results.push({ id, status: 'skipped_duplicate', reason: `Already exists in ${options.existingSkillsDir}` });
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
try {
|
|
177
|
+
let content: string | null;
|
|
178
|
+
|
|
179
|
+
if (options.localPath) {
|
|
180
|
+
content = readLocalSkill(options.localPath, id);
|
|
181
|
+
} else {
|
|
182
|
+
// Fetch from GitHub raw
|
|
183
|
+
const url = `${ECC_RAW_BASE}/${id}/SKILL.md`;
|
|
184
|
+
const res = await fetch(url, { headers: { 'User-Agent': 'dz-harness-hub' } });
|
|
185
|
+
if (!res.ok) {
|
|
186
|
+
results.push({ id, status: 'skipped_error', reason: `HTTP ${res.status}` });
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
content = await res.text();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (!content) {
|
|
193
|
+
results.push({ id, status: 'skipped_error', reason: 'No SKILL.md found' });
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Map frontmatter
|
|
198
|
+
const mapped = mapFrontmatter(content);
|
|
199
|
+
|
|
200
|
+
// Write to output directory
|
|
201
|
+
const outDir = join(options.outputDir, id);
|
|
202
|
+
mkdirSync(outDir, { recursive: true });
|
|
203
|
+
writeFileSync(join(outDir, 'SKILL.md'), mapped, 'utf-8');
|
|
204
|
+
|
|
205
|
+
results.push({ id, status: 'imported' });
|
|
206
|
+
} catch (err) {
|
|
207
|
+
results.push({ id, status: 'skipped_error', reason: String(err) });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
source: options.localPath ?? 'github.com/affaan-m/ECC',
|
|
213
|
+
totalFetched: skillIds.length,
|
|
214
|
+
imported: results.filter((r) => r.status === 'imported').length,
|
|
215
|
+
skippedDuplicate: results.filter((r) => r.status === 'skipped_duplicate').length,
|
|
216
|
+
skippedError: results.filter((r) => r.status === 'skipped_error').length,
|
|
217
|
+
skills: results,
|
|
218
|
+
};
|
|
219
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -32,5 +32,9 @@ export type { PackageDownloads, DownloadsReport } from './downloads.js';
|
|
|
32
32
|
export { discoverInstalled, checkUpgrades } from './upgrade.js';
|
|
33
33
|
export type { InstalledSkill, UpgradeCheck, UpgradeReport } from './upgrade.js';
|
|
34
34
|
export type { PublishResult, PublishReport } from './publish.js';
|
|
35
|
+
export { computeRiskScore } from './risk-scoring.js';
|
|
36
|
+
export type { RiskScore, RiskThresholds } from './risk-scoring.js';
|
|
37
|
+
export { importEcc } from './import-ecc.js';
|
|
38
|
+
export type { ImportEccReport, ImportEccOptions, ImportedSkill } from './import-ecc.js';
|
|
35
39
|
export type { RegistryEntry, Registry } from './registry.js';
|
|
36
40
|
export type { BenchmarkCheck, BenchmarkScore, BenchmarkReport, CompareResult } from './benchmark.js';
|
package/src/operations.ts
CHANGED
|
@@ -11,6 +11,7 @@ import { join } from 'node:path';
|
|
|
11
11
|
|
|
12
12
|
import { claudeAdapter } from '@dzhechkov/adapter-claude';
|
|
13
13
|
import type { CanonicalSkill, EmitResult, SkillAsset } from '@dzhechkov/core';
|
|
14
|
+
import { computeRiskScore } from './risk-scoring.js';
|
|
14
15
|
|
|
15
16
|
import { applyEmitResult } from './apply.js';
|
|
16
17
|
import { discoverSkillIds, loadSkillFromDir } from './skills.js';
|
|
@@ -81,14 +82,23 @@ function enrichEmitForTarget(
|
|
|
81
82
|
const desc = skill.frontmatter.description ?? '';
|
|
82
83
|
|
|
83
84
|
if (target === 'codex') {
|
|
84
|
-
// Codex: agents/openai.yaml — UI metadata + MCP dependencies
|
|
85
|
+
// Codex: agents/openai.yaml — UI metadata + risk scoring + MCP dependencies
|
|
86
|
+
const risk = computeRiskScore(skill.document.body);
|
|
85
87
|
const yaml = [
|
|
86
88
|
`# Codex enrichment for ${name}`,
|
|
87
89
|
`# Generated by dz init --enrich`,
|
|
90
|
+
`# 4-axis risk scoring (inspired by ECC 2.0)`,
|
|
88
91
|
`interface:`,
|
|
89
92
|
` display_name: "${name}"`,
|
|
90
93
|
`policy:`,
|
|
91
|
-
` allow_implicit_invocation:
|
|
94
|
+
` allow_implicit_invocation: ${risk.level === 'low' || risk.level === 'medium'}`,
|
|
95
|
+
` risk_level: "${risk.level}"`,
|
|
96
|
+
` risk_score: ${risk.total.toFixed(2)}`,
|
|
97
|
+
` risk_axes:`,
|
|
98
|
+
` base_tool: ${risk.axes.base_tool.toFixed(2)}`,
|
|
99
|
+
` file_sensitivity: ${risk.axes.file_sensitivity.toFixed(2)}`,
|
|
100
|
+
` blast_radius: ${risk.axes.blast_radius.toFixed(2)}`,
|
|
101
|
+
` irreversibility: ${risk.axes.irreversibility.toFixed(2)}`,
|
|
92
102
|
].join('\n');
|
|
93
103
|
extra.push({ path: `${skillDir}/agents/openai.yaml`, encoding: 'utf-8', content: yaml });
|
|
94
104
|
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 4-axis risk scoring for AI agent tool calls.
|
|
3
|
+
*
|
|
4
|
+
* Inspired by ECC 2.0 (https://github.com/affaan-m/ECC) Rust control-plane.
|
|
5
|
+
* Re-implemented in TypeScript for harness --enrich enrichment.
|
|
6
|
+
*
|
|
7
|
+
* Axes:
|
|
8
|
+
* 1. Base tool risk — inherent danger of the tool type
|
|
9
|
+
* 2. File sensitivity — whether skill targets secrets/infra files
|
|
10
|
+
* 3. Blast radius — scope of potential changes
|
|
11
|
+
* 4. Irreversibility — whether actions can be undone
|
|
12
|
+
*
|
|
13
|
+
* @packageDocumentation
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/** Risk score result with per-axis breakdown. */
|
|
17
|
+
export interface RiskScore {
|
|
18
|
+
/** Combined score 0.0–1.0 (higher = more risky). */
|
|
19
|
+
readonly total: number;
|
|
20
|
+
/** Risk level derived from total. */
|
|
21
|
+
readonly level: 'low' | 'medium' | 'high' | 'critical';
|
|
22
|
+
/** Per-axis breakdown. */
|
|
23
|
+
readonly axes: {
|
|
24
|
+
readonly base_tool: number;
|
|
25
|
+
readonly file_sensitivity: number;
|
|
26
|
+
readonly blast_radius: number;
|
|
27
|
+
readonly irreversibility: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Configurable thresholds for risk levels. */
|
|
32
|
+
export interface RiskThresholds {
|
|
33
|
+
readonly medium: number; // default 0.3
|
|
34
|
+
readonly high: number; // default 0.5
|
|
35
|
+
readonly critical: number; // default 0.7
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const DEFAULT_THRESHOLDS: RiskThresholds = {
|
|
39
|
+
medium: 0.3,
|
|
40
|
+
high: 0.5,
|
|
41
|
+
critical: 0.7,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// ── Axis 1: Base tool risk ──────────────────────────────────
|
|
45
|
+
|
|
46
|
+
const TOOL_RISK: Record<string, number> = {
|
|
47
|
+
bash: 0.20,
|
|
48
|
+
write: 0.15,
|
|
49
|
+
multiedit: 0.15,
|
|
50
|
+
edit: 0.10,
|
|
51
|
+
read: 0.05,
|
|
52
|
+
glob: 0.03,
|
|
53
|
+
grep: 0.03,
|
|
54
|
+
agent: 0.08,
|
|
55
|
+
mcp: 0.12,
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
function baseToolRisk(skillContent: string): number {
|
|
59
|
+
const lower = skillContent.toLowerCase();
|
|
60
|
+
let maxRisk = 0.05;
|
|
61
|
+
for (const [tool, risk] of Object.entries(TOOL_RISK)) {
|
|
62
|
+
if (lower.includes(tool)) {
|
|
63
|
+
maxRisk = Math.max(maxRisk, risk);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return maxRisk;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// ── Axis 2: File sensitivity ────────────────────────────────
|
|
70
|
+
|
|
71
|
+
const SENSITIVE_PATTERNS = [
|
|
72
|
+
'.env', 'api_key', 'secret', 'password', 'credential',
|
|
73
|
+
'id_rsa', '.pem', '.key', 'token', 'auth',
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
const INFRA_PATTERNS = [
|
|
77
|
+
'package.json', 'dockerfile', 'docker-compose', '.github/workflows',
|
|
78
|
+
'migration', 'terraform', 'k8s', 'deployment', 'helm',
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
function fileSensitivity(skillContent: string): number {
|
|
82
|
+
const lower = skillContent.toLowerCase();
|
|
83
|
+
let score = 0;
|
|
84
|
+
for (const pat of SENSITIVE_PATTERNS) {
|
|
85
|
+
if (lower.includes(pat)) { score = Math.max(score, 0.25); break; }
|
|
86
|
+
}
|
|
87
|
+
for (const pat of INFRA_PATTERNS) {
|
|
88
|
+
if (lower.includes(pat)) { score = Math.max(score, 0.15); break; }
|
|
89
|
+
}
|
|
90
|
+
return score;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// ── Axis 3: Blast radius ────────────────────────────────────
|
|
94
|
+
|
|
95
|
+
const WIDE_SCOPE_PATTERNS = [
|
|
96
|
+
'**/*', '-rf', '-r ', '--recursive', 'find .', 'grep -r',
|
|
97
|
+
'sed -i', 'awk', 'xargs',
|
|
98
|
+
];
|
|
99
|
+
|
|
100
|
+
function blastRadius(skillContent: string): number {
|
|
101
|
+
const lower = skillContent.toLowerCase();
|
|
102
|
+
let score = 0.05;
|
|
103
|
+
for (const pat of WIDE_SCOPE_PATTERNS) {
|
|
104
|
+
if (lower.includes(pat)) { score = Math.max(score, 0.20); break; }
|
|
105
|
+
}
|
|
106
|
+
// Check for multi-file operations mentioned
|
|
107
|
+
if (/\d{2,}\s*(files?|modules?)/.test(lower)) {
|
|
108
|
+
score = Math.max(score, 0.15);
|
|
109
|
+
}
|
|
110
|
+
return score;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// ── Axis 4: Irreversibility ─────────────────────────────────
|
|
114
|
+
|
|
115
|
+
const DESTRUCTIVE_PATTERNS = [
|
|
116
|
+
'rm -rf', 'rm -f', 'drop table', 'drop database', 'truncate',
|
|
117
|
+
'git push --force', 'git reset --hard', 'git clean -f',
|
|
118
|
+
'format disk', 'destroy', 'delete permanently',
|
|
119
|
+
];
|
|
120
|
+
|
|
121
|
+
function irreversibility(skillContent: string): number {
|
|
122
|
+
const lower = skillContent.toLowerCase();
|
|
123
|
+
let score = 0;
|
|
124
|
+
for (const pat of DESTRUCTIVE_PATTERNS) {
|
|
125
|
+
if (lower.includes(pat)) { score = Math.max(score, 0.25); break; }
|
|
126
|
+
}
|
|
127
|
+
return score;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// ── Combined scoring ────────────────────────────────────────
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Compute 4-axis risk score for a skill based on its SKILL.md content.
|
|
134
|
+
*/
|
|
135
|
+
export function computeRiskScore(
|
|
136
|
+
skillContent: string,
|
|
137
|
+
thresholds: RiskThresholds = DEFAULT_THRESHOLDS,
|
|
138
|
+
): RiskScore {
|
|
139
|
+
const axes = {
|
|
140
|
+
base_tool: baseToolRisk(skillContent),
|
|
141
|
+
file_sensitivity: fileSensitivity(skillContent),
|
|
142
|
+
blast_radius: blastRadius(skillContent),
|
|
143
|
+
irreversibility: irreversibility(skillContent),
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const total = Math.min(
|
|
147
|
+
1.0,
|
|
148
|
+
axes.base_tool + axes.file_sensitivity + axes.blast_radius + axes.irreversibility,
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
let level: RiskScore['level'];
|
|
152
|
+
if (total >= thresholds.critical) level = 'critical';
|
|
153
|
+
else if (total >= thresholds.high) level = 'high';
|
|
154
|
+
else if (total >= thresholds.medium) level = 'medium';
|
|
155
|
+
else level = 'low';
|
|
156
|
+
|
|
157
|
+
return { total, level, axes };
|
|
158
|
+
}
|