@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.
@@ -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
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;CACpC;AAsFD,wFAAwF;AACxF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBvE;AAMD,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;CAC9B;AAED,8CAA8C;AAC9C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC;CACtC;AAED,yEAAyE;AACzE,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B7E;AAMD,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,8FAA8F;IAC9F,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,sCAAsC;AACtC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACrF;AAED,kFAAkF;AAClF,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAqCvE;AAMD,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,yCAAyC;AACzC,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CA2C1E;AAMD,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAED,sDAAsD;AACtD,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAsGvF"}
@@ -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: true`,
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operations.js","sourceRoot":"","sources":["../src/operations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsCvC,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAE9E,MAAM,YAAY,GAA+B;IAC/C,aAAa,EAAE,gBAAgB;IAC/B,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,oBAAoB;CACjC,CAAC;AAEF;;;;GAIG;AACH,SAAS,mBAAmB,CAC1B,IAAgB,EAChB,MAAkB,EAClB,OAAe,EACf,KAAqB;IAErB,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;IACtD,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC;IAEjD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,6DAA6D;QAC7D,MAAM,IAAI,GAAG;YACX,0BAA0B,IAAI,EAAE;YAChC,iCAAiC;YACjC,YAAY;YACZ,oBAAoB,IAAI,GAAG;YAC3B,SAAS;YACT,mCAAmC;SACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,wDAAwD;QACxD,MAAM,OAAO,GAAG;YACd,KAAK;YACL,iBAAiB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;YACtC,gBAAgB;YAChB,KAAK;YACL,EAAE;YACF,eAAe,IAAI,8CAA8C;SAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,oCAAoC;QACpC,MAAM,IAAI,GAAG;YACX,2BAA2B,IAAI,EAAE;YACjC,iCAAiC;YACjC,SAAS;YACT,KAAK,OAAO,GAAG;YACf,mBAAmB;YACnB,qBAAqB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;SAC3C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC;QAChC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,KAAK,CAAC,MAAM,kCAAkC,MAAM,EAAE,CAAC;KAClG,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IACjC,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CACpD,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAC1D,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5B,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE;YACpC,UAAU,EAAE,OAAO,CAAC,WAAW;YAC/B,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,IAAI;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;AAC5G,CAAC;AA8BD,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,MAAM,MAAM,GAAe,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE;gBACF,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO;QACL,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,KAAK,EAAE,MAAM,CAAC,MAAM;QACpB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM;QAChD,MAAM;KACP,CAAC;AACJ,CAAC;AAkCD,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,YAAY,IAAI,IAAI,EAAE,CAAC;QAChC,KAAK,MAAM,EAAE,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAErF,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;oBAAE,OAAO,GAAG,IAAI,CAAC;qBACzC,IAAI,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO;oBAAE,MAAM,GAAG,IAAI,CAAC;YAC/E,CAAC;YACD,MAAM,MAAM,GAA8B,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAE7F,IAAI,OAAO,GAAa,EAAE,CAAC;YAC3B,MAAM,WAAW,GAAG,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;YAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC3C,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE;oBAC9B,UAAU,EAAE,OAAO,CAAC,WAAW;oBAC/B,KAAK,EAAE,MAAM,KAAK,OAAO;iBAC1B,CAAC,CAAC,OAAO,CAAC;YACb,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACvC,CAAC;IAAA,CAAC;IACF,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI;QAC/B,MAAM;QACN,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YACnE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;YACpE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM;SACjE;KACF,CAAC;AACJ,CAAC;AAsBD,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,OAAgC;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IACjC,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,4BAA4B;IAC5B,MAAM,SAAS,GAAG,CAAC,iBAAiB,EAAE,WAAW,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;IAC3I,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrD,UAAU,CAAC,IAAI,CAAC;oBACd,QAAQ;oBACR,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,SAAS;oBAClC,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;oBACjC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iBAC7D,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,WAAW,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC1D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;aACjF,MAAM,CAAC;IACZ,CAAC;IAED,IAAI,cAAsB,CAAC;IAC3B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,cAAc,GAAG,oEAAoE,CAAC;IACxF,CAAC;SAAM,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QACzB,cAAc,GAAG,SAAS,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,SAAS,8FAA8F,CAAC;IACpK,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,SAAS,UAAU,CAAC,MAAM,2IAA2I,CAAC;IACzL,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACxE,CAAC;AAoBD,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgC;IAC9D,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IAEjC,kBAAkB;IAClB,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IACrE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE5F,qBAAqB;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,iCAAiC,CAAC,EAAE,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,GAAG,GAAG,UAAU;YACtB,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/B,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IAC3F,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,IAAI,CAAC;QACV,IAAI,EAAE,kBAAkB;QACxB,EAAE,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;QAC9B,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,mBAAmB;KACnD,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;oBAAE,SAAS;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBACzD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAAE,SAAS;gBAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrD,IAAI,EAAE,CAAC,OAAO;oBAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,OAAiB,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,cAAc,cAAc,CAAC,IAAI,oBAAoB,CAAC;YAC/E,wFAAwF;YACxF,IAAI,cAAc,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBAC7B,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM,IAAI,4BAA4B,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM,GAAG,iCAAiC,CAAC;QAC7C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,2CAA2C;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAC5D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,kBAAkB;gBACxB,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,uBAAuB;aAC5E,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,kBAAkB;gBACxB,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACjF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC,CAAC;IACvG,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC,CAAC;IAC5G,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACjG,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,EAAE,EAAE,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAC3C,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,2BAA2B;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AAClF,CAAC"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dzhechkov/harness-core",
3
- "version": "0.3.15",
3
+ "version": "0.3.17",
4
4
  "description": "Shared harness logic - skill loading, additive apply, and the init/sync/verify/doctor operations.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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: true`,
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
+ }