@madebywild/agent-harness-framework 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +12 -1
  2. package/dist/cli/adapters/autocomplete-select.d.ts +16 -0
  3. package/dist/cli/adapters/autocomplete-select.d.ts.map +1 -1
  4. package/dist/cli/adapters/autocomplete-select.js +83 -0
  5. package/dist/cli/adapters/autocomplete-select.js.map +1 -1
  6. package/dist/cli/adapters/commander.d.ts.map +1 -1
  7. package/dist/cli/adapters/commander.js +38 -0
  8. package/dist/cli/adapters/commander.js.map +1 -1
  9. package/dist/cli/adapters/interactive.d.ts +23 -1
  10. package/dist/cli/adapters/interactive.d.ts.map +1 -1
  11. package/dist/cli/adapters/interactive.js +906 -48
  12. package/dist/cli/adapters/interactive.js.map +1 -1
  13. package/dist/cli/command-registry.d.ts.map +1 -1
  14. package/dist/cli/command-registry.js +59 -0
  15. package/dist/cli/command-registry.js.map +1 -1
  16. package/dist/cli/contracts.d.ts +14 -3
  17. package/dist/cli/contracts.d.ts.map +1 -1
  18. package/dist/cli/handlers/skills.d.ts +13 -0
  19. package/dist/cli/handlers/skills.d.ts.map +1 -0
  20. package/dist/cli/handlers/skills.js +43 -0
  21. package/dist/cli/handlers/skills.js.map +1 -0
  22. package/dist/cli/main.d.ts.map +1 -1
  23. package/dist/cli/main.js +2 -6
  24. package/dist/cli/main.js.map +1 -1
  25. package/dist/cli/renderers/text.d.ts.map +1 -1
  26. package/dist/cli/renderers/text.js +41 -0
  27. package/dist/cli/renderers/text.js.map +1 -1
  28. package/dist/engine/entities.d.ts +1 -0
  29. package/dist/engine/entities.d.ts.map +1 -1
  30. package/dist/engine/entities.js +9 -2
  31. package/dist/engine/entities.js.map +1 -1
  32. package/dist/engine/utils.d.ts.map +1 -1
  33. package/dist/engine/utils.js +3 -0
  34. package/dist/engine/utils.js.map +1 -1
  35. package/dist/engine.d.ts +15 -1
  36. package/dist/engine.d.ts.map +1 -1
  37. package/dist/engine.js +126 -2
  38. package/dist/engine.js.map +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/paths.d.ts +3 -0
  43. package/dist/paths.d.ts.map +1 -1
  44. package/dist/paths.js +6 -0
  45. package/dist/paths.js.map +1 -1
  46. package/dist/skills-integration.d.ts +55 -0
  47. package/dist/skills-integration.d.ts.map +1 -0
  48. package/dist/skills-integration.js +524 -0
  49. package/dist/skills-integration.js.map +1 -0
  50. package/dist/types.d.ts +44 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/package.json +9 -3
package/dist/paths.js CHANGED
@@ -2,10 +2,13 @@ import path from "node:path";
2
2
  export function resolveHarnessPaths(rootDir) {
3
3
  const harnessDir = path.join(rootDir, ".harness");
4
4
  const srcDir = path.join(harnessDir, "src");
5
+ const importsDir = path.join(harnessDir, "imports");
5
6
  return {
6
7
  root: rootDir,
7
8
  agentsDir: harnessDir,
8
9
  srcDir,
10
+ importsDir,
11
+ skillImportDir: path.join(importsDir, "skills"),
9
12
  presetsDir: path.join(harnessDir, "presets"),
10
13
  manifestFile: path.join(harnessDir, "manifest.json"),
11
14
  lockFile: path.join(harnessDir, "manifest.lock.json"),
@@ -31,6 +34,9 @@ export function defaultSkillSourcePath(skillId) {
31
34
  export function defaultSkillOverridePath(skillId, provider) {
32
35
  return `.harness/src/skills/${skillId}/OVERRIDES.${provider}.yaml`;
33
36
  }
37
+ export function defaultSkillImportMetadataPath(skillId) {
38
+ return `.harness/imports/skills/${skillId}.json`;
39
+ }
34
40
  export function defaultMcpSourcePath(id) {
35
41
  return `.harness/src/mcp/${id}.json`;
36
42
  }
package/dist/paths.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { Diagnostic, SkillAuditDecision, SkillAuditOutcome, SkillAuditProviderResult, SkillDiscoveryResult, SkillsFindResult } from "./types.js";
2
+ export declare const SKILLS_CLI_VERSION = "1.4.6";
3
+ export interface ImportedSkillFile {
4
+ path: string;
5
+ content: string;
6
+ /** Defaults to `"utf8"` when omitted. Binary files use `"base64"`. */
7
+ encoding?: "utf8" | "base64";
8
+ sha256: string;
9
+ sizeBytes: number;
10
+ }
11
+ export interface SkillImportLimits {
12
+ maxFiles: number;
13
+ maxFileBytes: number;
14
+ maxTotalBytes: number;
15
+ }
16
+ export interface ParsedSkillsImportReport {
17
+ resolvedSource?: string;
18
+ detailsUrl?: string;
19
+ providers: SkillAuditProviderResult[];
20
+ }
21
+ export interface SkillsCliCommandResult {
22
+ stdout: string;
23
+ stderr: string;
24
+ }
25
+ export interface PrepareSkillImportInput {
26
+ source: string;
27
+ upstreamSkill: string;
28
+ allowUnsafe: boolean;
29
+ allowUnaudited: boolean;
30
+ }
31
+ export interface PrepareSkillImportResult {
32
+ ok: boolean;
33
+ files?: ImportedSkillFile[];
34
+ resolvedSource?: string;
35
+ audit: SkillAuditDecision;
36
+ diagnostics: Diagnostic[];
37
+ rawText: string;
38
+ }
39
+ export interface SkillsIntegrationDependencies {
40
+ createSandbox?: () => Promise<string>;
41
+ cleanupSandbox?: (sandboxAbs: string) => Promise<void>;
42
+ runSkillsCliCommand?: (args: string[], cwd: string) => Promise<SkillsCliCommandResult>;
43
+ limits?: SkillImportLimits;
44
+ }
45
+ export declare function findSkills(query: string, deps?: Pick<SkillsIntegrationDependencies, "createSandbox" | "cleanupSandbox" | "runSkillsCliCommand">): Promise<SkillsFindResult>;
46
+ export declare function prepareSkillImport(input: PrepareSkillImportInput, deps?: SkillsIntegrationDependencies): Promise<PrepareSkillImportResult>;
47
+ export declare function parseSkillsFindOutput(rawText: string): SkillDiscoveryResult[];
48
+ export declare function parseSkillsImportReport(rawText: string, upstreamSkill: string): ParsedSkillsImportReport;
49
+ export declare function classifyAuditOutcome(value: string): SkillAuditOutcome;
50
+ export declare function evaluateSkillAudit(providers: SkillAuditProviderResult[], options: {
51
+ allowUnsafe: boolean;
52
+ allowUnaudited: boolean;
53
+ detailsUrl?: string;
54
+ }): SkillAuditDecision;
55
+ //# sourceMappingURL=skills-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-integration.d.ts","sourceRoot":"","sources":["../src/skills-integration.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,wBAAwB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvF,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAoBD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,IAAI,CAAC,6BAA6B,EAAE,eAAe,GAAG,gBAAgB,GAAG,qBAAqB,CAAC,GACrG,OAAO,CAAC,gBAAgB,CAAC,CAqC3B;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,EAC9B,IAAI,CAAC,EAAE,6BAA6B,GACnC,OAAO,CAAC,wBAAwB,CAAC,CAyFnC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,CA6C7E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,wBAAwB,CAmExG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAuBrE;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,wBAAwB,EAAE,EACrC,OAAO,EAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,kBAAkB,CAiDpB"}
@@ -0,0 +1,524 @@
1
+ import { execFile } from "node:child_process";
2
+ import { constants as fsConstants } from "node:fs";
3
+ import fs from "node:fs/promises";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { promisify } from "node:util";
7
+ import { normalizeRelativePath, sha256 } from "./utils.js";
8
+ const execFileAsync = promisify(execFile);
9
+ export const SKILLS_CLI_VERSION = "1.4.6";
10
+ const DEFAULT_IMPORT_LIMITS = {
11
+ maxFiles: 200,
12
+ maxFileBytes: 512 * 1024,
13
+ maxTotalBytes: 4 * 1024 * 1024,
14
+ };
15
+ function validateUpstreamSkillId(upstreamSkill) {
16
+ if (upstreamSkill === "." || upstreamSkill === "..") {
17
+ throw new Error(`Invalid upstream skill id '${upstreamSkill}'. Values '.' and '..' are not allowed due to path traversal risk.`);
18
+ }
19
+ if (!/^[a-zA-Z0-9._-]+$/u.test(upstreamSkill)) {
20
+ throw new Error(`Invalid upstream skill id '${upstreamSkill}'. Allowed characters: letters, digits, '.', '_', '-'`);
21
+ }
22
+ }
23
+ export async function findSkills(query, deps) {
24
+ const normalizedQuery = query.trim();
25
+ if (normalizedQuery.length === 0) {
26
+ throw new Error("query must not be empty");
27
+ }
28
+ const createSandbox = deps?.createSandbox ?? createDefaultSandbox;
29
+ const cleanupSandbox = deps?.cleanupSandbox ?? cleanupDefaultSandbox;
30
+ const runSkillsCliCommand = deps?.runSkillsCliCommand ?? runSkillsCliCommandDefault;
31
+ const diagnostics = [];
32
+ const sandboxAbs = await createSandbox();
33
+ try {
34
+ const commandResult = await runSkillsCliCommand(["find", normalizedQuery], sandboxAbs);
35
+ const rawText = normalizeSkillsOutput(commandResult.stdout);
36
+ return {
37
+ query: normalizedQuery,
38
+ results: parseSkillsFindOutput(rawText),
39
+ rawText,
40
+ diagnostics,
41
+ };
42
+ }
43
+ catch (error) {
44
+ const message = error instanceof Error ? error.message : String(error);
45
+ diagnostics.push({
46
+ code: "SKILL_FIND_SUBPROCESS_FAILED",
47
+ severity: "error",
48
+ message: `Failed to run skills find: ${message}`,
49
+ });
50
+ return {
51
+ query: normalizedQuery,
52
+ results: [],
53
+ rawText: "",
54
+ diagnostics,
55
+ };
56
+ }
57
+ finally {
58
+ await cleanupSandbox(sandboxAbs);
59
+ }
60
+ }
61
+ export async function prepareSkillImport(input, deps) {
62
+ const source = input.source.trim();
63
+ const upstreamSkill = input.upstreamSkill.trim();
64
+ if (source.length === 0) {
65
+ throw new Error("source must not be empty");
66
+ }
67
+ if (upstreamSkill.length === 0) {
68
+ throw new Error("upstream skill must not be empty");
69
+ }
70
+ validateUpstreamSkillId(upstreamSkill);
71
+ const createSandbox = deps?.createSandbox ?? createDefaultSandbox;
72
+ const cleanupSandbox = deps?.cleanupSandbox ?? cleanupDefaultSandbox;
73
+ const runSkillsCliCommand = deps?.runSkillsCliCommand ?? runSkillsCliCommandDefault;
74
+ const limits = deps?.limits ?? DEFAULT_IMPORT_LIMITS;
75
+ const sandboxAbs = await createSandbox();
76
+ try {
77
+ const commandResult = await runSkillsCliCommand(["add", source, "--skill", upstreamSkill, "--agent", "codex", "--yes", "--copy"], sandboxAbs);
78
+ const rawText = normalizeSkillsOutput(commandResult.stdout);
79
+ const report = parseSkillsImportReport(rawText, upstreamSkill);
80
+ const audit = evaluateSkillAudit(report.providers, {
81
+ allowUnsafe: input.allowUnsafe,
82
+ allowUnaudited: input.allowUnaudited,
83
+ detailsUrl: report.detailsUrl,
84
+ });
85
+ const diagnostics = [];
86
+ if (!audit.audited && !input.allowUnaudited) {
87
+ diagnostics.push({
88
+ code: "SKILL_IMPORT_AUDIT_UNAUDITED",
89
+ severity: "error",
90
+ message: "Blocked import because this skill source has no published audit report. Use --allow-unaudited to override.",
91
+ });
92
+ }
93
+ else if (audit.audited && !audit.allowed && audit.reason === "fail") {
94
+ diagnostics.push({
95
+ code: "SKILL_IMPORT_AUDIT_BLOCKED",
96
+ severity: "error",
97
+ message: "Blocked import because at least one audit provider reported a failure. Use --allow-unsafe to override.",
98
+ });
99
+ }
100
+ else if (audit.reason === "warn") {
101
+ diagnostics.push({
102
+ code: "SKILL_IMPORT_AUDIT_WARN",
103
+ severity: "warning",
104
+ message: "Some audit providers reported warnings. Review audit details before use.",
105
+ });
106
+ }
107
+ const filesResult = await readImportedSkillFiles(sandboxAbs, upstreamSkill, limits);
108
+ diagnostics.push(...filesResult.diagnostics);
109
+ const hasErrors = diagnostics.some((diagnostic) => diagnostic.severity === "error");
110
+ return {
111
+ ok: !hasErrors,
112
+ files: filesResult.files,
113
+ resolvedSource: report.resolvedSource,
114
+ audit,
115
+ diagnostics,
116
+ rawText,
117
+ };
118
+ }
119
+ catch (error) {
120
+ const message = error instanceof Error ? error.message : String(error);
121
+ return {
122
+ ok: false,
123
+ audit: {
124
+ audited: false,
125
+ allowed: false,
126
+ reason: "not_evaluated",
127
+ allowUnsafe: input.allowUnsafe,
128
+ allowUnaudited: input.allowUnaudited,
129
+ providers: [],
130
+ },
131
+ diagnostics: [
132
+ {
133
+ code: "SKILL_IMPORT_SUBPROCESS_FAILED",
134
+ severity: "error",
135
+ message: `Failed to import skill from source '${source}': ${message}`,
136
+ },
137
+ ],
138
+ rawText: "",
139
+ };
140
+ }
141
+ finally {
142
+ await cleanupSandbox(sandboxAbs);
143
+ }
144
+ }
145
+ export function parseSkillsFindOutput(rawText) {
146
+ const lines = rawText
147
+ .split(/\r?\n/u)
148
+ .map((line) => line.trim())
149
+ .filter((line) => line.length > 0);
150
+ const output = [];
151
+ for (let index = 0; index < lines.length; index += 1) {
152
+ const line = lines[index];
153
+ if (!line) {
154
+ continue;
155
+ }
156
+ const entryMatch = /^([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)@([a-zA-Z0-9._-]+)(?:\s+([0-9][0-9.,]*[KMB]? installs))?$/u.exec(line);
157
+ if (!entryMatch) {
158
+ continue;
159
+ }
160
+ const source = entryMatch[1];
161
+ const upstream = entryMatch[2];
162
+ if (!source || !upstream) {
163
+ continue;
164
+ }
165
+ let url;
166
+ const nextLine = lines[index + 1];
167
+ if (nextLine) {
168
+ const urlMatch = /^(?:└\s+)?(https?:\/\/\S+)$/u.exec(nextLine);
169
+ if (urlMatch?.[1]) {
170
+ url = urlMatch[1];
171
+ index += 1;
172
+ }
173
+ }
174
+ output.push({
175
+ source,
176
+ upstreamSkill: upstream,
177
+ installs: entryMatch[3],
178
+ url,
179
+ rawLine: line,
180
+ });
181
+ }
182
+ return output;
183
+ }
184
+ export function parseSkillsImportReport(rawText, upstreamSkill) {
185
+ const lines = rawText.split(/\r?\n/u).map((line) => line.trim());
186
+ let resolvedSource;
187
+ let detailsUrl;
188
+ const providers = [];
189
+ for (const line of lines) {
190
+ if (!resolvedSource) {
191
+ const sourceMatch = /Source:\s*(.+)$/u.exec(line);
192
+ if (sourceMatch?.[1]) {
193
+ resolvedSource = sourceMatch[1].trim();
194
+ }
195
+ }
196
+ if (!detailsUrl) {
197
+ const detailsMatch = /Details:\s*(https?:\/\/\S+)/u.exec(line);
198
+ if (detailsMatch?.[1]) {
199
+ detailsUrl = detailsMatch[1].trim();
200
+ }
201
+ }
202
+ if (!line.includes(upstreamSkill)) {
203
+ continue;
204
+ }
205
+ const cells = line
206
+ .replaceAll("│", " ")
207
+ .split(/\s{2,}/u)
208
+ .map((cell) => cell.trim())
209
+ .filter((cell) => cell.length > 0);
210
+ if (cells[0] !== upstreamSkill || cells.length < 4) {
211
+ continue;
212
+ }
213
+ const gen = cells[1];
214
+ const socket = cells[2];
215
+ const snyk = cells[3];
216
+ if (!gen || !socket || !snyk) {
217
+ continue;
218
+ }
219
+ providers.splice(0, providers.length, {
220
+ provider: "gen",
221
+ raw: gen,
222
+ outcome: classifyAuditOutcome(gen),
223
+ }, {
224
+ provider: "socket",
225
+ raw: socket,
226
+ outcome: classifyAuditOutcome(socket),
227
+ }, {
228
+ provider: "snyk",
229
+ raw: snyk,
230
+ outcome: classifyAuditOutcome(snyk),
231
+ });
232
+ }
233
+ return {
234
+ resolvedSource,
235
+ detailsUrl,
236
+ providers,
237
+ };
238
+ }
239
+ export function classifyAuditOutcome(value) {
240
+ const normalized = value.trim().toLowerCase();
241
+ if (normalized.length === 0) {
242
+ return "unknown";
243
+ }
244
+ if (normalized === "safe" || normalized === "pass" || /^0\s+alerts?$/u.test(normalized)) {
245
+ return "pass";
246
+ }
247
+ if (/\b(fail|critical|high risk)\b/u.test(normalized)) {
248
+ return "fail";
249
+ }
250
+ if (/^\d+\s+alerts?$/u.test(normalized)) {
251
+ return normalized.startsWith("0 ") ? "pass" : "warn";
252
+ }
253
+ if (/\b(warn|risk|unknown|unaudited)\b/u.test(normalized)) {
254
+ return "warn";
255
+ }
256
+ return "unknown";
257
+ }
258
+ export function evaluateSkillAudit(providers, options) {
259
+ if (providers.length === 0) {
260
+ return {
261
+ audited: false,
262
+ allowed: options.allowUnaudited,
263
+ reason: "unaudited",
264
+ allowUnsafe: options.allowUnsafe,
265
+ allowUnaudited: options.allowUnaudited,
266
+ detailsUrl: options.detailsUrl,
267
+ providers: [],
268
+ };
269
+ }
270
+ const hasFail = providers.some((p) => p.outcome === "fail");
271
+ const hasWarn = providers.some((p) => p.outcome === "warn" || p.outcome === "unknown");
272
+ if (!hasFail && !hasWarn) {
273
+ return {
274
+ audited: true,
275
+ allowed: true,
276
+ reason: "pass",
277
+ allowUnsafe: options.allowUnsafe,
278
+ allowUnaudited: options.allowUnaudited,
279
+ detailsUrl: options.detailsUrl,
280
+ providers,
281
+ };
282
+ }
283
+ if (hasFail) {
284
+ return {
285
+ audited: true,
286
+ allowed: options.allowUnsafe,
287
+ reason: "fail",
288
+ allowUnsafe: options.allowUnsafe,
289
+ allowUnaudited: options.allowUnaudited,
290
+ detailsUrl: options.detailsUrl,
291
+ providers,
292
+ };
293
+ }
294
+ return {
295
+ audited: true,
296
+ allowed: true,
297
+ reason: "warn",
298
+ allowUnsafe: options.allowUnsafe,
299
+ allowUnaudited: options.allowUnaudited,
300
+ detailsUrl: options.detailsUrl,
301
+ providers,
302
+ };
303
+ }
304
+ async function readImportedSkillFiles(sandboxAbs, upstreamSkill, limits) {
305
+ const diagnostics = [];
306
+ const skillRootAbs = path.join(sandboxAbs, ".agents", "skills", upstreamSkill);
307
+ let rootStat;
308
+ try {
309
+ rootStat = await fs.lstat(skillRootAbs);
310
+ }
311
+ catch {
312
+ return {
313
+ files: [],
314
+ diagnostics: [
315
+ {
316
+ code: "SKILL_IMPORT_PAYLOAD_MISSING",
317
+ severity: "error",
318
+ message: `Imported payload not found at '.agents/skills/${upstreamSkill}'.`,
319
+ },
320
+ ],
321
+ };
322
+ }
323
+ if (!rootStat.isDirectory()) {
324
+ return {
325
+ files: [],
326
+ diagnostics: [
327
+ {
328
+ code: "SKILL_IMPORT_PAYLOAD_INVALID_ROOT",
329
+ severity: "error",
330
+ message: `Imported payload root '.agents/skills/${upstreamSkill}' is not a directory.`,
331
+ },
332
+ ],
333
+ };
334
+ }
335
+ const files = [];
336
+ const queue = [skillRootAbs];
337
+ let totalBytes = 0;
338
+ const utf8Decoder = new TextDecoder("utf8", { fatal: true });
339
+ const openReadOnlyNoFollow = process.platform === "win32" ? fsConstants.O_RDONLY : fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW;
340
+ let limitExceeded = false;
341
+ outer: while (queue.length > 0) {
342
+ const current = queue.pop();
343
+ if (!current) {
344
+ continue;
345
+ }
346
+ const entries = await fs.readdir(current, { withFileTypes: true });
347
+ for (const entry of entries) {
348
+ const absolutePath = path.join(current, entry.name);
349
+ let absoluteStat;
350
+ try {
351
+ absoluteStat = await fs.lstat(absolutePath);
352
+ }
353
+ catch {
354
+ diagnostics.push({
355
+ code: "SKILL_IMPORT_PAYLOAD_READ_FAILED",
356
+ severity: "error",
357
+ message: `Failed to inspect imported file '${entry.name}'.`,
358
+ });
359
+ continue;
360
+ }
361
+ if (absoluteStat.isSymbolicLink()) {
362
+ diagnostics.push({
363
+ code: "SKILL_IMPORT_PAYLOAD_SYMLINK",
364
+ severity: "error",
365
+ message: `Symlink '${entry.name}' is not allowed in imported skill payload.`,
366
+ });
367
+ continue;
368
+ }
369
+ if (absoluteStat.isDirectory()) {
370
+ queue.push(absolutePath);
371
+ continue;
372
+ }
373
+ if (!absoluteStat.isFile()) {
374
+ continue;
375
+ }
376
+ let relativePath;
377
+ try {
378
+ relativePath = normalizeRelativePath(path.relative(skillRootAbs, absolutePath).replace(/\\/g, "/"));
379
+ }
380
+ catch {
381
+ diagnostics.push({
382
+ code: "SKILL_IMPORT_PAYLOAD_PATH_INVALID",
383
+ severity: "error",
384
+ message: `Invalid imported file path '${absolutePath}'.`,
385
+ });
386
+ continue;
387
+ }
388
+ if (absoluteStat.size > limits.maxFileBytes) {
389
+ diagnostics.push({
390
+ code: "SKILL_IMPORT_PAYLOAD_FILE_TOO_LARGE",
391
+ severity: "error",
392
+ message: `Imported file '${relativePath}' exceeds max size (${limits.maxFileBytes} bytes).`,
393
+ });
394
+ continue;
395
+ }
396
+ let buffer;
397
+ try {
398
+ const fileHandle = await fs.open(absolutePath, openReadOnlyNoFollow);
399
+ try {
400
+ buffer = await fileHandle.readFile();
401
+ }
402
+ finally {
403
+ await fileHandle.close();
404
+ }
405
+ }
406
+ catch (error) {
407
+ if (isErrno(error, "ELOOP")) {
408
+ diagnostics.push({
409
+ code: "SKILL_IMPORT_PAYLOAD_SYMLINK",
410
+ severity: "error",
411
+ message: `Symlink '${relativePath}' is not allowed in imported skill payload.`,
412
+ });
413
+ continue;
414
+ }
415
+ diagnostics.push({
416
+ code: "SKILL_IMPORT_PAYLOAD_READ_FAILED",
417
+ severity: "error",
418
+ message: `Failed to read imported file '${relativePath}'.`,
419
+ });
420
+ continue;
421
+ }
422
+ if (buffer.length > limits.maxFileBytes) {
423
+ diagnostics.push({
424
+ code: "SKILL_IMPORT_PAYLOAD_FILE_TOO_LARGE",
425
+ severity: "error",
426
+ message: `Imported file '${relativePath}' exceeds max size (${limits.maxFileBytes} bytes).`,
427
+ });
428
+ continue;
429
+ }
430
+ let content;
431
+ let encoding = "utf8";
432
+ try {
433
+ const decoded = utf8Decoder.decode(buffer);
434
+ if (decoded.includes("\u0000")) {
435
+ content = buffer.toString("base64");
436
+ encoding = "base64";
437
+ }
438
+ else {
439
+ content = decoded;
440
+ }
441
+ }
442
+ catch {
443
+ content = buffer.toString("base64");
444
+ encoding = "base64";
445
+ }
446
+ totalBytes += buffer.length;
447
+ if (totalBytes > limits.maxTotalBytes) {
448
+ diagnostics.push({
449
+ code: "SKILL_IMPORT_PAYLOAD_TOTAL_TOO_LARGE",
450
+ severity: "error",
451
+ message: `Imported payload exceeds max total size (${limits.maxTotalBytes} bytes).`,
452
+ });
453
+ limitExceeded = true;
454
+ break outer;
455
+ }
456
+ files.push({
457
+ path: relativePath,
458
+ content,
459
+ encoding,
460
+ sha256: sha256(content),
461
+ sizeBytes: buffer.length,
462
+ });
463
+ if (files.length > limits.maxFiles) {
464
+ diagnostics.push({
465
+ code: "SKILL_IMPORT_PAYLOAD_TOO_MANY_FILES",
466
+ severity: "error",
467
+ message: `Imported payload exceeds max file count (${limits.maxFiles}).`,
468
+ });
469
+ limitExceeded = true;
470
+ break outer;
471
+ }
472
+ }
473
+ }
474
+ if (!limitExceeded && !files.some((file) => file.path === "SKILL.md")) {
475
+ diagnostics.push({
476
+ code: "SKILL_IMPORT_PAYLOAD_MISSING_SKILL_MD",
477
+ severity: "error",
478
+ message: "Imported payload must include a top-level SKILL.md file.",
479
+ });
480
+ }
481
+ files.sort((left, right) => left.path.localeCompare(right.path));
482
+ return { files, diagnostics };
483
+ }
484
+ async function createDefaultSandbox() {
485
+ return fs.mkdtemp(path.join(os.tmpdir(), "agent-harness-skills-"));
486
+ }
487
+ async function cleanupDefaultSandbox(sandboxAbs) {
488
+ await fs.rm(sandboxAbs, { recursive: true, force: true });
489
+ }
490
+ async function runSkillsCliCommandDefault(args, cwd) {
491
+ const result = await execFileAsync("npx", ["-y", `skills@${SKILLS_CLI_VERSION}`, ...args], {
492
+ cwd,
493
+ maxBuffer: 10 * 1024 * 1024,
494
+ env: {
495
+ ...process.env,
496
+ NODE_NO_WARNINGS: "1",
497
+ },
498
+ });
499
+ return {
500
+ stdout: result.stdout,
501
+ stderr: result.stderr,
502
+ };
503
+ }
504
+ function normalizeSkillsOutput(rawText) {
505
+ return stripAnsi(rawText)
506
+ .replaceAll("\r", "\n")
507
+ .split("\n")
508
+ .map((line) => line.trimEnd())
509
+ .join("\n")
510
+ .trim();
511
+ }
512
+ function stripAnsi(value) {
513
+ return value
514
+ .replace(
515
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: ESC sequence stripping for external CLI output.
516
+ /[\u001B\u009B][[\]()#;?]*(?:(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><~]|(?:[a-zA-Z\d]*(?:;[a-zA-Z\d]*)*)?\u0007)/gu, "")
517
+ .replace(
518
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: OSC sequence stripping for external CLI output.
519
+ /\u001B\][^\u0007]*(?:\u0007|\u001B\\)/gu, "");
520
+ }
521
+ function isErrno(error, code) {
522
+ return typeof error === "object" && error !== null && "code" in error && error.code === code;
523
+ }
524
+ //# sourceMappingURL=skills-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-integration.js","sourceRoot":"","sources":["../src/skills-integration.ts"],"names":[],"mappings":"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"}