@uzysjung/agent-harness 26.160.1 → 26.162.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.
@@ -1106,7 +1106,7 @@ function mergeProjectClaude(opts) {
1106
1106
  > Active track(s): ${trackList}`;
1107
1107
  return `${header}
1108
1108
 
1109
- ${renderFillScaffold()}
1109
+ ${opts.projectContext ?? renderFillScaffold()}
1110
1110
  `;
1111
1111
  }
1112
1112
  function upsertHarnessImport(existing, opts) {
@@ -1363,6 +1363,55 @@ import { createHash } from "crypto";
1363
1363
  import { existsSync as existsSync3, mkdirSync as mkdirSync2, readFileSync as readFileSync3, rmSync, writeFileSync } from "fs";
1364
1364
  import { dirname as dirname2, join as join3 } from "path";
1365
1365
 
1366
+ // src/cli-targets.ts
1367
+ init_esm_shims();
1368
+ var CLI_BASE_SORT_ORDER = {
1369
+ claude: 0,
1370
+ codex: 1,
1371
+ opencode: 2,
1372
+ antigravity: 3
1373
+ };
1374
+ function parseCliTargets(input) {
1375
+ const items = normalizeInput(input);
1376
+ if (items.length === 0) {
1377
+ return { ok: true, targets: ["claude"], warnings: [] };
1378
+ }
1379
+ const collected = /* @__PURE__ */ new Set();
1380
+ const warnings = [];
1381
+ for (const item of items) {
1382
+ if (!isCliBase(item)) {
1383
+ let hint = "";
1384
+ if (item === "both") {
1385
+ hint = "\n v0.8.0 removed 'both' alias. Use --cli claude --cli codex.";
1386
+ } else if (item === "all") {
1387
+ hint = "\n v0.8.0 removed 'all' alias. Use --cli claude --cli codex --cli opencode.";
1388
+ } else if (item.includes(",")) {
1389
+ hint = "\n Tip: comma-separated not supported. Use --cli A --cli B for multiple.";
1390
+ }
1391
+ return {
1392
+ ok: false,
1393
+ targets: ["claude"],
1394
+ warnings,
1395
+ error: `Invalid --cli value: ${item}. Must be one of: ${CLI_BASES.join(" | ")}${hint}`
1396
+ };
1397
+ }
1398
+ collected.add(item);
1399
+ }
1400
+ const targets = [...collected].sort((a, b) => CLI_BASE_SORT_ORDER[a] - CLI_BASE_SORT_ORDER[b]);
1401
+ return { ok: true, targets, warnings };
1402
+ }
1403
+ function normalizeInput(input) {
1404
+ if (input === void 0 || input === null) return [];
1405
+ if (typeof input === "string") {
1406
+ const trimmed = input.trim();
1407
+ return trimmed === "" ? [] : [trimmed];
1408
+ }
1409
+ return input.filter((s) => typeof s === "string" && s.trim() !== "").map((s) => s.trim());
1410
+ }
1411
+ function targetsInclude(targets, base) {
1412
+ return targets.includes(base);
1413
+ }
1414
+
1366
1415
  // src/fs-ops.ts
1367
1416
  init_esm_shims();
1368
1417
  import {
@@ -1434,15 +1483,6 @@ function copyBackupDir(target, now = /* @__PURE__ */ new Date()) {
1434
1483
  cpSync(realpathSync(target), backup, { recursive: true });
1435
1484
  return backup;
1436
1485
  }
1437
- function backupFileIfChanged(target, newContent, now = /* @__PURE__ */ new Date()) {
1438
- if (!existsSync2(target)) {
1439
- return null;
1440
- }
1441
- if (readFileSync2(target, "utf-8") === newContent) {
1442
- return null;
1443
- }
1444
- return backupFile(target, now);
1445
- }
1446
1486
  function backupFile(target, now = /* @__PURE__ */ new Date()) {
1447
1487
  return claimBackupPath(
1448
1488
  `${target}.backup-${formatStamp(now)}`,
@@ -1490,6 +1530,22 @@ var POLICY_DIRS = [
1490
1530
  { dir: "commands/uzys", ext: ".md" },
1491
1531
  { dir: "hooks", ext: ".sh" }
1492
1532
  ];
1533
+ var ANTIGRAVITY_RULE_FILE = ".agents/rules/uzys-harness.md";
1534
+ function installedClis(log) {
1535
+ if (log === null) return [];
1536
+ if (log.spec.clis) return sortClis(log.spec.clis);
1537
+ const found = new Set(log.spec.cli.filter(isCliBase));
1538
+ if (log.templates.rootClaudeMd !== void 0) found.add("claude");
1539
+ if (log.templates.codexDir !== void 0) found.add("codex");
1540
+ if (log.templates.opencodeDir !== void 0) found.add("opencode");
1541
+ if ((log.externalFiles ?? []).some((f) => f.path === ANTIGRAVITY_RULE_FILE)) {
1542
+ found.add("antigravity");
1543
+ }
1544
+ return sortClis([...found]);
1545
+ }
1546
+ function sortClis(clis) {
1547
+ return [...new Set(clis)].filter(isCliBase).sort((a, b) => CLI_BASE_SORT_ORDER[a] - CLI_BASE_SORT_ORDER[b]);
1548
+ }
1493
1549
  function buildAssetEntries(report, scope) {
1494
1550
  if (!report) return [];
1495
1551
  return report.attempted.filter((r) => r.ok).map((r) => assetToLogEntry(r.asset, scope, r.version));
@@ -1526,11 +1582,12 @@ function buildInstallLog(spec, external, scope, rootClaudeMd, previous, claudeDi
1526
1582
  (id) => BUNDLED_SKILL_IDS.has(id)
1527
1583
  );
1528
1584
  const templates = {
1529
- claudeDir: ".claude/",
1585
+ ...spec.cli.includes("claude") ? { claudeDir: ".claude/" } : {},
1530
1586
  ...spec.cli.includes("codex") ? { codexDir: ".codex/" } : {},
1531
1587
  ...spec.cli.includes("opencode") ? { opencodeDir: ".opencode/" } : {},
1532
1588
  ...rootClaudeMd ? { rootClaudeMd } : {}
1533
1589
  };
1590
+ const clis = sortClis([...installedClis(previous ?? null), ...spec.cli.filter(isCliBase)]);
1534
1591
  const log = {
1535
1592
  schemaVersion: INSTALL_LOG_VERSION,
1536
1593
  installedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -1538,6 +1595,7 @@ function buildInstallLog(spec, external, scope, rootClaudeMd, previous, claudeDi
1538
1595
  spec: {
1539
1596
  tracks: spec.tracks,
1540
1597
  cli: spec.cli,
1598
+ clis,
1541
1599
  ...spec.baselineExclude && spec.baselineExclude.length > 0 ? { baselineExclude: spec.baselineExclude } : {},
1542
1600
  ...skillExclude.length > 0 ? { skillExclude } : {}
1543
1601
  },
@@ -1559,7 +1617,7 @@ function mergeRootFiles(previous, current) {
1559
1617
  const prior = byPath.get(file.path);
1560
1618
  byPath.set(
1561
1619
  file.path,
1562
- prior ? {
1620
+ prior && file.change !== "displaced" ? {
1563
1621
  path: file.path,
1564
1622
  change: prior.change === "created" ? "created" : file.change,
1565
1623
  notes: [.../* @__PURE__ */ new Set([...prior.notes, ...file.notes])]
@@ -1741,7 +1799,60 @@ var RETIRED_AGENTS = [
1741
1799
  { id: "silent-failure-hunter", instead: "Claude Code \uC758 `/code-review` \uAC00 \uAC19\uC740 \uC77C\uC744 \uD55C\uB2E4" },
1742
1800
  { id: "build-error-resolver", instead: "\uBAA8\uB378\uC774 \uAE30\uBCF8\uC73C\uB85C \uD558\uB294 \uC77C\uC774\uB77C \uB300\uCCB4 \uC790\uC0B0\uC774 \uC5C6\uB2E4" }
1743
1801
  ];
1744
- var RETIRED_AGENT_IDS = RETIRED_AGENTS.map((a) => a.id);
1802
+ var RETIRED_PATHS = [
1803
+ // rules (23)
1804
+ "rules/api-contract.md",
1805
+ "rules/benchmark-parity.md",
1806
+ "rules/code-style.md",
1807
+ "rules/commit-policy.md",
1808
+ "rules/data-analysis.md",
1809
+ "rules/database.md",
1810
+ "rules/design-workflow.md",
1811
+ "rules/ecc-git-workflow.md",
1812
+ "rules/ecc-performance-common.md",
1813
+ "rules/ecc-security-common.md",
1814
+ "rules/ecc-testing.md",
1815
+ "rules/error-handling.md",
1816
+ "rules/gates-taxonomy.md",
1817
+ "rules/gsd-planner-antipatterns.md",
1818
+ "rules/htmx.md",
1819
+ "rules/model-routing.md",
1820
+ "rules/nextjs.md",
1821
+ "rules/no-false-ship.md",
1822
+ "rules/playwright-launch.md",
1823
+ "rules/pyside6.md",
1824
+ "rules/seo.md",
1825
+ "rules/shadcn.md",
1826
+ "rules/tauri.md",
1827
+ // agents (5)
1828
+ "agents/build-error-resolver.md",
1829
+ "agents/code-reviewer.md",
1830
+ "agents/plan-checker.md",
1831
+ "agents/security-reviewer.md",
1832
+ "agents/silent-failure-hunter.md",
1833
+ // commands/uzys (7)
1834
+ "commands/uzys/auto.md",
1835
+ "commands/uzys/build.md",
1836
+ "commands/uzys/plan.md",
1837
+ "commands/uzys/review.md",
1838
+ "commands/uzys/ship.md",
1839
+ "commands/uzys/spec.md",
1840
+ "commands/uzys/test.md",
1841
+ // hooks (10)
1842
+ "hooks/agentshield-gate.sh",
1843
+ "hooks/checkpoint-snapshot.sh",
1844
+ "hooks/codebase-map.sh",
1845
+ "hooks/gate-check.sh",
1846
+ "hooks/hito-counter.sh",
1847
+ "hooks/karpathy-gate.sh",
1848
+ "hooks/mcp-pre-exec.sh",
1849
+ "hooks/spec-drift-check.sh",
1850
+ "hooks/task-brief-nudge.sh",
1851
+ "hooks/uncommitted-check.sh"
1852
+ ];
1853
+ var RETIRED_AGENT_IDS = RETIRED_PATHS.filter(
1854
+ (p) => p.startsWith("agents/")
1855
+ ).map((p) => p.slice("agents/".length).replace(/\.md$/, ""));
1745
1856
  var ALWAYS_HOOKS = ["session-start.sh", "protect-files.sh"];
1746
1857
  var COMMON_SKILL_DIRS = [];
1747
1858
  var DEV_SKILL_DIRS = [];
@@ -1913,6 +2024,7 @@ export {
1913
2024
  CONTINUOUS_SKILLS_HEADING,
1914
2025
  renderContinuousSkillsNote,
1915
2026
  withContinuousSkillsNote,
2027
+ scaffoldBanner,
1916
2028
  renderFillScaffold,
1917
2029
  upsertHarnessImport,
1918
2030
  stripHarnessImport,
@@ -1925,17 +2037,21 @@ export {
1925
2037
  summarizeContextCost,
1926
2038
  formatResidentCostLine,
1927
2039
  formatResidentCostBlock,
2040
+ CLI_BASE_SORT_ORDER,
2041
+ parseCliTargets,
2042
+ targetsInclude,
1928
2043
  ensureDir,
1929
2044
  copyFile,
1930
2045
  copyDir,
1931
2046
  backupDir,
1932
2047
  copyBackupDir,
1933
- backupFileIfChanged,
1934
2048
  backupFile,
1935
2049
  listFilesRecursive,
1936
2050
  ensureProjectSkeleton,
2051
+ INSTALL_LOG_FILENAME,
1937
2052
  INSTALL_LOG_DIR,
1938
2053
  POLICY_DIRS,
2054
+ installedClis,
1939
2055
  buildInstallLog,
1940
2056
  hashContent,
1941
2057
  isHarnessOwned,
@@ -1951,10 +2067,11 @@ export {
1951
2067
  ALL_RULES,
1952
2068
  TRACK_AGENTS,
1953
2069
  RETIRED_AGENTS,
2070
+ RETIRED_PATHS,
1954
2071
  RETIRED_AGENT_IDS,
1955
2072
  isCliNeutralTarget,
1956
2073
  buildManifest,
1957
2074
  CATEGORIES,
1958
2075
  CATEGORY_TITLES
1959
2076
  };
1960
- //# sourceMappingURL=chunk-ZXWOY5VO.js.map
2077
+ //# sourceMappingURL=chunk-3G34MEGZ.js.map