@uzysjung/agent-harness 26.149.0 → 26.150.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.
@@ -1554,6 +1554,17 @@ function expandTracks(tracks) {
1554
1554
  }
1555
1555
 
1556
1556
  // src/manifest.ts
1557
+ function buildAssetSpec(ctx) {
1558
+ return {
1559
+ tracks: ctx.tracks,
1560
+ withTauri: isAssetSelected("tauri-desktop", ctx),
1561
+ // v26.55.0 — withEcc gating (ADR-016). withPrune 은 ecc-plugin 사용을 전제한다.
1562
+ withEcc: isAssetSelected("ecc-plugin", ctx) || ctx.options.withPrune === true,
1563
+ // v26.87.0 — internal bundled skills (dev-method + opt-in advisors, v26.95.0). id 별 condition
1564
+ // (has-dev-track vs opt-in)은 isAssetSelected 가 적용한다.
1565
+ selectedInternalSkills: INTERNAL_BUNDLED_SKILL_IDS.filter((id) => isAssetSelected(id, ctx))
1566
+ };
1567
+ }
1557
1568
  var all = () => true;
1558
1569
  var dev = (s) => hasDevTrack(s.tracks);
1559
1570
  var ui = (s) => hasUiTrack(s.tracks);
@@ -1711,9 +1722,9 @@ function buildManifest(spec) {
1711
1722
  });
1712
1723
  }
1713
1724
  m.push({
1714
- source: "skills/spec-scaling/SKILL.md",
1715
- target: ".claude/skills/spec-scaling/SKILL.md",
1716
- type: "file",
1725
+ source: "skills/spec-scaling",
1726
+ target: ".claude/skills/spec-scaling",
1727
+ type: "dir",
1717
1728
  applies: all
1718
1729
  });
1719
1730
  for (const sd of ["market-research", "investor-materials", "investor-outreach"]) {
@@ -1873,6 +1884,21 @@ function assetCostRows(assetIds, root = resolveBundleRoot()) {
1873
1884
  bodyTokens: assetBodyTokens(id, root)
1874
1885
  })).sort((a, b) => (b.bodyTokens ?? -1) - (a.bodyTokens ?? -1));
1875
1886
  }
1887
+ function makeResidentCost(base) {
1888
+ return {
1889
+ ...base,
1890
+ perSkillDescriptor: base.perSkillDescriptor ?? {},
1891
+ total: base.rules + base.projectClaudeMd + base.skillDescriptors + base.agentDescriptors,
1892
+ directive: {
1893
+ items: base.items.rules + base.items.claudeMd,
1894
+ tokens: base.rules + base.projectClaudeMd
1895
+ },
1896
+ firing: {
1897
+ items: base.items.skills + base.items.agents,
1898
+ tokens: base.skillDescriptors + base.agentDescriptors
1899
+ }
1900
+ };
1901
+ }
1876
1902
  function fileTokens(path2) {
1877
1903
  return existsSync3(path2) ? estimateTokens(readFileSync3(path2, "utf8").trim().length) : 0;
1878
1904
  }
@@ -1883,6 +1909,7 @@ function descriptorTokens(path2) {
1883
1909
  }
1884
1910
  function residentCost(entries, root = resolveBundleRoot()) {
1885
1911
  const tpl = (source) => join3(root, "templates", source);
1912
+ const perSkill = {};
1886
1913
  let rules = 0;
1887
1914
  let skillDescriptors = 0;
1888
1915
  let agentDescriptors = 0;
@@ -1897,20 +1924,23 @@ function residentCost(entries, root = resolveBundleRoot()) {
1897
1924
  agentDescriptors += descriptorTokens(tpl(e.source));
1898
1925
  agentItems += 1;
1899
1926
  } else if (e.target.startsWith(".claude/skills/")) {
1900
- skillDescriptors += descriptorTokens(join3(tpl(e.source), "SKILL.md"));
1927
+ const t = descriptorTokens(join3(tpl(e.source), "SKILL.md"));
1928
+ skillDescriptors += t;
1901
1929
  skillItems += 1;
1930
+ const id = /\.claude\/skills\/([^/]+)/.exec(e.target)?.[1];
1931
+ if (id !== void 0) perSkill[id] = (perSkill[id] ?? 0) + t;
1902
1932
  }
1903
1933
  }
1904
1934
  const harnessAnchor = fileTokens(join3(root, "templates", "CLAUDE.md"));
1905
1935
  const projectScaffold = estimateTokens(renderFillScaffold().trim().length);
1906
1936
  const projectClaudeMd = harnessAnchor + projectScaffold;
1907
1937
  const claudeMdItems = (harnessAnchor > 0 ? 1 : 0) + (projectScaffold > 0 ? 1 : 0);
1908
- return {
1938
+ return makeResidentCost({
1909
1939
  rules,
1910
1940
  projectClaudeMd,
1911
1941
  skillDescriptors,
1912
1942
  agentDescriptors,
1913
- total: rules + projectClaudeMd + skillDescriptors + agentDescriptors,
1943
+ perSkillDescriptor: perSkill,
1914
1944
  items: {
1915
1945
  rules: ruleItems,
1916
1946
  skills: skillItems,
@@ -1918,7 +1948,7 @@ function residentCost(entries, root = resolveBundleRoot()) {
1918
1948
  claudeMd: claudeMdItems,
1919
1949
  total: ruleItems + skillItems + agentItems + claudeMdItems
1920
1950
  }
1921
- };
1951
+ });
1922
1952
  }
1923
1953
  function summarizeContextCost(assetIds, root = resolveBundleRoot()) {
1924
1954
  let measuredTokens = 0;
@@ -1937,33 +1967,47 @@ function summarizeContextCost(assetIds, root = resolveBundleRoot()) {
1937
1967
  function formatResidentCostLine(r, unmeasuredCount) {
1938
1968
  if (r.total === 0) return null;
1939
1969
  const parts = [
1940
- `rules ${r.items.rules} ~${r.rules}`,
1941
- `CLAUDE.md ${r.items.claudeMd} ~${r.projectClaudeMd}`,
1942
- `skills ${r.items.skills} ~${r.skillDescriptors}`,
1943
- `agents ${r.items.agents} ~${r.agentDescriptors}`
1970
+ `directives ${r.directive.items} ~${r.directive.tokens}`,
1971
+ `[rules ${r.items.rules} ~${r.rules} \xB7 CLAUDE.md ${r.items.claudeMd} ~${r.projectClaudeMd}]`,
1972
+ `triggers ${r.firing.items} ~${r.firing.tokens}`,
1973
+ `[skills ${r.items.skills} ~${r.skillDescriptors} \xB7 agents ${r.items.agents} ~${r.agentDescriptors}]`
1944
1974
  ].join(" \xB7 ");
1945
1975
  const external = unmeasuredCount > 0 ? ` \xB7 ${unmeasuredCount} external asset${unmeasuredCount === 1 ? "" : "s"} unmeasured` : "";
1946
1976
  return `session-start context cost: ${r.items.total} items resident \xB7 ~${r.total} tokens/session (${parts}${external})`;
1947
1977
  }
1948
1978
  var RESIDENT_ROWS = [
1949
- { label: "rules", gap: 14, count: (r) => r.items.rules, tokens: (r) => r.rules },
1979
+ {
1980
+ // ADR-083 — 축 소계를 **행으로** 낸다. 소계가 없으면 읽는 사람이 네 줄을 머리로 더해야
1981
+ // 하고, 그러면 "무엇을 줄여야 하나"가 표에서 안 보인다.
1982
+ label: "\uC9C0\uC2DC\uBB38",
1983
+ gap: 13,
1984
+ count: (r) => r.directive.items,
1985
+ tokens: (r) => r.directive.tokens
1986
+ },
1987
+ { label: " rules", gap: 12, count: (r) => r.items.rules, tokens: (r) => r.rules },
1950
1988
  {
1951
1989
  // 한 행에 두 파일(앵커 + 스캐폴드). 개수 열이 2 를 뱉어 그 사실을 드러낸다 — 라벨로
1952
1990
  // 하나만 이름 붙이면 v26.140.0 이전과 같은 거짓 라벨이 된다.
1953
- label: "CLAUDE.md",
1954
- gap: 11,
1991
+ label: " CLAUDE.md",
1992
+ gap: 8,
1955
1993
  count: (r) => r.items.claudeMd,
1956
1994
  tokens: (r) => r.projectClaudeMd
1957
1995
  },
1958
1996
  {
1959
- label: "skill descriptors",
1960
- gap: 2,
1997
+ label: "\uBC1C\uD654 \uD45C\uBA74",
1998
+ gap: 10,
1999
+ count: (r) => r.firing.items,
2000
+ tokens: (r) => r.firing.tokens
2001
+ },
2002
+ {
2003
+ label: " skill descriptors",
2004
+ gap: 0,
1961
2005
  count: (r) => r.items.skills,
1962
2006
  tokens: (r) => r.skillDescriptors
1963
2007
  },
1964
2008
  {
1965
- label: "agent descriptors",
1966
- gap: 2,
2009
+ label: " agent descriptors",
2010
+ gap: 0,
1967
2011
  count: (r) => r.items.agents,
1968
2012
  tokens: (r) => r.agentDescriptors
1969
2013
  }
@@ -1976,7 +2020,11 @@ function formatResidentCostBlock(r) {
1976
2020
  (row) => ` ${row.label}${" ".repeat(row.gap)}${n(row.count(r))}\uAC1C ~${row.tokens(r)}`
1977
2021
  ),
1978
2022
  " \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",
1979
- ` \uC0C1\uC8FC \uD569\uACC4 ${n(r.items.total)}\uAC1C \uC0C1\uC8FC \xB7 ~${r.total} tokens/\uC138\uC158`
2023
+ ` \uC0C1\uC8FC \uD569\uACC4 ${n(r.items.total)}\uAC1C \uC0C1\uC8FC \xB7 ~${r.total} tokens/\uC138\uC158`,
2024
+ "",
2025
+ " \uC9C0\uC2DC\uBB38 = \uC6B0\uB9AC\uAC00 \uD56D\uC0C1 \uC77D\uD788\uAC8C \uB123\uC740 \uAC83. **\uC791\uC744\uC218\uB85D \uC88B\uC740 \uAC12\uC774 \uC544\uB2C8\uB2E4** \u2014 \uD310\uB2E8\uC740",
2026
+ " '\uBD88\uD544\uC694\uD55C \uC9C0\uC2DC\uBB38\uC774 \uC788\uB098'\uB85C \uD55C\uB2E4. ratchet \uC740 \uC870\uC6A9\uD55C \uC99D\uAC00\uB9CC \uB9C9\uB294\uB2E4.",
2027
+ " \uBC1C\uD654 \uD45C\uBA74 = \uC2A4\uD0AC\xB7\uC5D0\uC774\uC804\uD2B8\uAC00 \uBD88\uB9AC\uB824\uACE0 \uC0C1\uC8FC\uC2DC\uD0A4\uB294 descriptor. \uAE4E\uC73C\uBA74 \uC548 \uBD88\uB9B0\uB2E4."
1980
2028
  ];
1981
2029
  }
1982
2030
 
@@ -2029,6 +2077,7 @@ export {
2029
2077
  renderFillScaffold,
2030
2078
  upsertHarnessImport,
2031
2079
  stripHarnessImport,
2080
+ buildAssetSpec,
2032
2081
  resolveRules,
2033
2082
  ALL_RULES,
2034
2083
  isCliNeutralTarget,
@@ -2043,4 +2092,4 @@ export {
2043
2092
  formatResidentCostLine,
2044
2093
  formatResidentCostBlock
2045
2094
  };
2046
- //# sourceMappingURL=chunk-YSW3OLH4.js.map
2095
+ //# sourceMappingURL=chunk-NKBUDHPC.js.map