@uzysjung/agent-harness 26.147.1 → 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/{chunk-B27AJIWG.js → chunk-PTUM2NI3.js} +14 -18
- package/dist/chunk-PTUM2NI3.js.map +1 -0
- package/dist/index.js +89 -4
- package/dist/index.js.map +1 -1
- package/dist/trust-tier-drift.js +1 -1
- package/package.json +3 -1
- package/templates/rules/ship-checklist.md +1 -0
- package/templates/scripts/check-absence.sh +17 -3
- package/dist/chunk-B27AJIWG.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -56,7 +56,7 @@ import {
|
|
|
56
56
|
summarizeContextCost,
|
|
57
57
|
upsertHarnessImport,
|
|
58
58
|
writeInstallLog
|
|
59
|
-
} from "./chunk-
|
|
59
|
+
} from "./chunk-PTUM2NI3.js";
|
|
60
60
|
|
|
61
61
|
// node_modules/sisteransi/src/index.js
|
|
62
62
|
var require_src = __commonJS({
|
|
@@ -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.
|
|
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: {
|
|
@@ -775,6 +775,8 @@ var package_default = {
|
|
|
775
775
|
prepare: "[ -d dist ] || npm run build",
|
|
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
|
+
"assets:history": "bash scripts/asset-history.sh",
|
|
779
|
+
"release:audit": "node scripts/release-audit.mjs",
|
|
778
780
|
security: "npm audit --omit=dev --audit-level=high && npx --yes ecc-agentshield@1.4.0 scan --baseline security-baseline.json --gate",
|
|
779
781
|
"security:baseline": "npx --yes ecc-agentshield@1.4.0 scan --save-baseline security-baseline.json"
|
|
780
782
|
},
|
|
@@ -1889,6 +1891,45 @@ var SKILLS_CLI_VERSION = "1.5.11";
|
|
|
1889
1891
|
function skillsCliSpec() {
|
|
1890
1892
|
return `skills@${SKILLS_CLI_VERSION}`;
|
|
1891
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
|
+
}
|
|
1892
1933
|
function buildSkillArgs(method, cli2, scope) {
|
|
1893
1934
|
const args = [skillsCliSpec(), "add", method.source];
|
|
1894
1935
|
if (method.skill) {
|
|
@@ -1898,6 +1939,7 @@ function buildSkillArgs(method, cli2, scope) {
|
|
|
1898
1939
|
for (const c3 of cli2) {
|
|
1899
1940
|
args.push("--agent", SKILLS_CLI_AGENT_MAP[c3] ?? c3);
|
|
1900
1941
|
}
|
|
1942
|
+
args.push("--copy");
|
|
1901
1943
|
}
|
|
1902
1944
|
if (scope === "global") {
|
|
1903
1945
|
args.push("-g");
|
|
@@ -2118,10 +2160,11 @@ function buildUpdateSpec(projectDir, tracks) {
|
|
|
2118
2160
|
tracks: [...tracks],
|
|
2119
2161
|
options: DEFAULT_OPTIONS,
|
|
2120
2162
|
cli: ["claude"],
|
|
2121
|
-
projectDir
|
|
2163
|
+
projectDir,
|
|
2164
|
+
scope: readInstallLog(projectDir)?.scope ?? "project"
|
|
2122
2165
|
};
|
|
2123
2166
|
}
|
|
2124
|
-
function runUpdateMode(projectDir, templatesDir, harnessRoot) {
|
|
2167
|
+
function runUpdateMode(projectDir, templatesDir, harnessRoot, deps = {}) {
|
|
2125
2168
|
const claudeDir = join11(projectDir, ".claude");
|
|
2126
2169
|
const report = {
|
|
2127
2170
|
updated: {},
|
|
@@ -2136,6 +2179,10 @@ function runUpdateMode(projectDir, templatesDir, harnessRoot) {
|
|
|
2136
2179
|
policyBackedUp: [],
|
|
2137
2180
|
externalUpdated: 0,
|
|
2138
2181
|
externalBackedUp: [],
|
|
2182
|
+
externalSkillsRefreshed: 0,
|
|
2183
|
+
externalSkillsFailed: [],
|
|
2184
|
+
externalSkillsNotInCatalog: [],
|
|
2185
|
+
externalSkillsUnknown: false,
|
|
2139
2186
|
foreignOwned: [],
|
|
2140
2187
|
installedNew: [],
|
|
2141
2188
|
restored: [],
|
|
@@ -2191,6 +2238,11 @@ function runUpdateMode(projectDir, templatesDir, harnessRoot) {
|
|
|
2191
2238
|
if (!saidBySlotRow.has(f) && !merged.includes(f)) merged.push(f);
|
|
2192
2239
|
}
|
|
2193
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;
|
|
2194
2246
|
return report;
|
|
2195
2247
|
}
|
|
2196
2248
|
function installNewAssets(projectDir, templatesDir) {
|
|
@@ -3349,6 +3401,39 @@ function renderPhase1Rows(log, baseline, verbose = false, withEcc = false, claud
|
|
|
3349
3401
|
)
|
|
3350
3402
|
);
|
|
3351
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
|
+
}
|
|
3352
3437
|
return;
|
|
3353
3438
|
}
|
|
3354
3439
|
if (baseline.backups) {
|