@uzysjung/agent-harness 26.148.0 → 26.148.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +87 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.js
CHANGED
|
@@ -741,7 +741,7 @@ var cac = (name = "") => new CAC(name);
|
|
|
741
741
|
// package.json
|
|
742
742
|
var package_default = {
|
|
743
743
|
name: "@uzysjung/agent-harness",
|
|
744
|
-
version: "26.148.
|
|
744
|
+
version: "26.148.1",
|
|
745
745
|
description: "Curate vetted AI-coding skills & plugins by your tech stack \u2014 install only what you need, across Claude Code, Codex, OpenCode & Antigravity",
|
|
746
746
|
type: "module",
|
|
747
747
|
publishConfig: {
|
|
@@ -776,6 +776,7 @@ var package_default = {
|
|
|
776
776
|
"cost:report": "npm run build && node scripts/context-cost-report.mjs",
|
|
777
777
|
"cost:baseline": "npm run build && node scripts/context-cost-baseline.mjs",
|
|
778
778
|
"assets:history": "bash scripts/asset-history.sh",
|
|
779
|
+
"release:audit": "node scripts/release-audit.mjs",
|
|
779
780
|
security: "npm audit --omit=dev --audit-level=high && npx --yes ecc-agentshield@1.4.0 scan --baseline security-baseline.json --gate",
|
|
780
781
|
"security:baseline": "npx --yes ecc-agentshield@1.4.0 scan --save-baseline security-baseline.json"
|
|
781
782
|
},
|
|
@@ -1890,6 +1891,45 @@ var SKILLS_CLI_VERSION = "1.5.11";
|
|
|
1890
1891
|
function skillsCliSpec() {
|
|
1891
1892
|
return `skills@${SKILLS_CLI_VERSION}`;
|
|
1892
1893
|
}
|
|
1894
|
+
function refreshExternalSkills(projectDir, deps = {}) {
|
|
1895
|
+
const none = { attempted: 0, refreshed: 0, failed: [], notInCatalog: [] };
|
|
1896
|
+
const log = (deps.readLog ?? readInstallLog)(projectDir);
|
|
1897
|
+
if (!log) {
|
|
1898
|
+
return { ...none, unknown: true };
|
|
1899
|
+
}
|
|
1900
|
+
const installedIds = new Set(log.assets.filter((a) => a.method === "skill").map((a) => a.id));
|
|
1901
|
+
const catalog = deps.assets ?? EXTERNAL_ASSETS;
|
|
1902
|
+
const targets = catalog.filter((a) => a.method.kind === "skill" && installedIds.has(a.id));
|
|
1903
|
+
const inCatalog = new Set(targets.map((a) => a.id));
|
|
1904
|
+
const notInCatalog = [...installedIds].filter((id) => !inCatalog.has(id));
|
|
1905
|
+
if (targets.length === 0) {
|
|
1906
|
+
return { ...none, notInCatalog, unknown: false };
|
|
1907
|
+
}
|
|
1908
|
+
const report = (deps.run ?? runExternalInstall)(
|
|
1909
|
+
{
|
|
1910
|
+
tracks: log.spec.tracks,
|
|
1911
|
+
// `forceInclude` 가 조건 판정을 앞지르므로 옵션 값은 결과에 영향을 주지 않는다.
|
|
1912
|
+
options: DEFAULT_OPTIONS,
|
|
1913
|
+
cli: log.spec.cli,
|
|
1914
|
+
userOverride: { forceInclude: [...installedIds], forceExclude: [] },
|
|
1915
|
+
scope: log.scope,
|
|
1916
|
+
projectDir
|
|
1917
|
+
},
|
|
1918
|
+
{
|
|
1919
|
+
assets: targets,
|
|
1920
|
+
...deps.spawn ? { spawn: deps.spawn } : {},
|
|
1921
|
+
...deps.log ? { log: deps.log } : {},
|
|
1922
|
+
...deps.warn ? { warn: deps.warn } : {}
|
|
1923
|
+
}
|
|
1924
|
+
);
|
|
1925
|
+
return {
|
|
1926
|
+
attempted: report.attempted.length,
|
|
1927
|
+
refreshed: report.succeeded,
|
|
1928
|
+
failed: report.attempted.filter((r) => !r.ok).map((r) => ({ id: r.asset.id, message: r.message ?? "failed" })),
|
|
1929
|
+
notInCatalog,
|
|
1930
|
+
unknown: false
|
|
1931
|
+
};
|
|
1932
|
+
}
|
|
1893
1933
|
function buildSkillArgs(method, cli2, scope) {
|
|
1894
1934
|
const args = [skillsCliSpec(), "add", method.source];
|
|
1895
1935
|
if (method.skill) {
|
|
@@ -1899,6 +1939,7 @@ function buildSkillArgs(method, cli2, scope) {
|
|
|
1899
1939
|
for (const c3 of cli2) {
|
|
1900
1940
|
args.push("--agent", SKILLS_CLI_AGENT_MAP[c3] ?? c3);
|
|
1901
1941
|
}
|
|
1942
|
+
args.push("--copy");
|
|
1902
1943
|
}
|
|
1903
1944
|
if (scope === "global") {
|
|
1904
1945
|
args.push("-g");
|
|
@@ -2119,10 +2160,11 @@ function buildUpdateSpec(projectDir, tracks) {
|
|
|
2119
2160
|
tracks: [...tracks],
|
|
2120
2161
|
options: DEFAULT_OPTIONS,
|
|
2121
2162
|
cli: ["claude"],
|
|
2122
|
-
projectDir
|
|
2163
|
+
projectDir,
|
|
2164
|
+
scope: readInstallLog(projectDir)?.scope ?? "project"
|
|
2123
2165
|
};
|
|
2124
2166
|
}
|
|
2125
|
-
function runUpdateMode(projectDir, templatesDir, harnessRoot) {
|
|
2167
|
+
function runUpdateMode(projectDir, templatesDir, harnessRoot, deps = {}) {
|
|
2126
2168
|
const claudeDir = join11(projectDir, ".claude");
|
|
2127
2169
|
const report = {
|
|
2128
2170
|
updated: {},
|
|
@@ -2137,6 +2179,10 @@ function runUpdateMode(projectDir, templatesDir, harnessRoot) {
|
|
|
2137
2179
|
policyBackedUp: [],
|
|
2138
2180
|
externalUpdated: 0,
|
|
2139
2181
|
externalBackedUp: [],
|
|
2182
|
+
externalSkillsRefreshed: 0,
|
|
2183
|
+
externalSkillsFailed: [],
|
|
2184
|
+
externalSkillsNotInCatalog: [],
|
|
2185
|
+
externalSkillsUnknown: false,
|
|
2140
2186
|
foreignOwned: [],
|
|
2141
2187
|
installedNew: [],
|
|
2142
2188
|
restored: [],
|
|
@@ -2192,6 +2238,11 @@ function runUpdateMode(projectDir, templatesDir, harnessRoot) {
|
|
|
2192
2238
|
if (!saidBySlotRow.has(f) && !merged.includes(f)) merged.push(f);
|
|
2193
2239
|
}
|
|
2194
2240
|
report.foreignOwned = merged;
|
|
2241
|
+
const skillRefresh = (deps.refreshSkills ?? refreshExternalSkills)(projectDir);
|
|
2242
|
+
report.externalSkillsRefreshed = skillRefresh.refreshed;
|
|
2243
|
+
report.externalSkillsFailed = skillRefresh.failed;
|
|
2244
|
+
report.externalSkillsNotInCatalog = skillRefresh.notInCatalog;
|
|
2245
|
+
report.externalSkillsUnknown = skillRefresh.unknown;
|
|
2195
2246
|
return report;
|
|
2196
2247
|
}
|
|
2197
2248
|
function installNewAssets(projectDir, templatesDir) {
|
|
@@ -3350,6 +3401,39 @@ function renderPhase1Rows(log, baseline, verbose = false, withEcc = false, claud
|
|
|
3350
3401
|
)
|
|
3351
3402
|
);
|
|
3352
3403
|
}
|
|
3404
|
+
if (baseline.updateMode.externalSkillsRefreshed > 0) {
|
|
3405
|
+
log(
|
|
3406
|
+
assetRow(
|
|
3407
|
+
"success",
|
|
3408
|
+
"external skills",
|
|
3409
|
+
`${baseline.updateMode.externalSkillsRefreshed} refreshed from upstream`
|
|
3410
|
+
)
|
|
3411
|
+
);
|
|
3412
|
+
}
|
|
3413
|
+
if (baseline.updateMode.externalSkillsFailed.length > 0) {
|
|
3414
|
+
const failed = baseline.updateMode.externalSkillsFailed;
|
|
3415
|
+
const head = failed[0];
|
|
3416
|
+
const meta = failed.length === 1 ? `${head.id}: ${head.message}` : `${failed.map((f) => f.id).join(", ")} (${failed.length}\uAC74) \xB7 \uC608: ${head.message}`;
|
|
3417
|
+
log(assetRow("skip", "external skills", `${meta} \xB7 \uB2E4\uC74C update \uC5D0\uC11C \uB2E4\uC2DC \uC2DC\uB3C4\uD55C\uB2E4`));
|
|
3418
|
+
}
|
|
3419
|
+
if (baseline.updateMode.externalSkillsNotInCatalog.length > 0) {
|
|
3420
|
+
log(
|
|
3421
|
+
assetRow(
|
|
3422
|
+
"skip",
|
|
3423
|
+
"external skills",
|
|
3424
|
+
`${baseline.updateMode.externalSkillsNotInCatalog.join(", ")} \xB7 \uCE74\uD0C8\uB85C\uADF8\uC5D0 \uC5C6\uC5B4 \uAC31\uC2E0 \uB300\uC0C1\uC774 \uC544\uB2C8\uB2E4`
|
|
3425
|
+
)
|
|
3426
|
+
);
|
|
3427
|
+
}
|
|
3428
|
+
if (baseline.updateMode.externalSkillsUnknown) {
|
|
3429
|
+
log(
|
|
3430
|
+
assetRow(
|
|
3431
|
+
"skip",
|
|
3432
|
+
"external skills",
|
|
3433
|
+
"\uC124\uCE58 \uAE30\uB85D\uC774 \uC5C6\uC5B4 \uAC31\uC2E0 \uB300\uC0C1\uC744 \uD310\uC815\uD560 \uC218 \uC5C6\uB2E4 \xB7 `agent-harness install` \uB85C \uB2E4\uC2DC \uAE54\uBA74 \uAE30\uB85D\uB41C\uB2E4"
|
|
3434
|
+
)
|
|
3435
|
+
);
|
|
3436
|
+
}
|
|
3353
3437
|
return;
|
|
3354
3438
|
}
|
|
3355
3439
|
if (baseline.backups) {
|