@uzysjung/agent-harness 26.98.0 → 26.99.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.
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import {
3
3
  CATEGORIES,
4
4
  CATEGORY_TITLES,
5
+ DEV_METHOD_SKILL_IDS,
5
6
  EXTERNAL_ASSETS,
6
7
  INTERNAL_BUNDLED_SKILL_IDS,
7
8
  __commonJS,
@@ -699,7 +700,7 @@ var cac = (name = "") => new CAC(name);
699
700
  // package.json
700
701
  var package_default = {
701
702
  name: "@uzysjung/agent-harness",
702
- version: "26.98.0",
703
+ version: "26.99.0",
703
704
  description: "Curate vetted AI-coding skills & plugins by your tech stack \u2014 install only what you need, across Claude Code, Codex, OpenCode & Antigravity",
704
705
  type: "module",
705
706
  publishConfig: {
@@ -4609,15 +4610,66 @@ var CLI_BASE_LABELS = {
4609
4610
  antigravity: "Antigravity (Google)"
4610
4611
  };
4611
4612
  var INSTALL_TARGET_PAGES = [
4612
- {
4613
- label: "Dev (Frontend \xB7 Backend \xB7 Dev Tools \xB7 Data \xB7 Understanding)",
4614
- cats: ["frontend", "backend", "dev-tools", "data", "understanding"]
4615
- },
4613
+ { label: "Dev Core (Frontend \xB7 Backend \xB7 Data)", cats: ["frontend", "backend", "data"] },
4614
+ { label: "Dev Tools (Security \xB7 Quality \xB7 Understanding)", cats: ["dev-tools", "understanding"] },
4616
4615
  { label: "Business (PM \xB7 Executive \xB7 Documents)", cats: ["business"] },
4617
4616
  // v26.85.0 — 코드-퍼스트 비주얼/미디어 제작 (용도별 섹션, 전부 opt-in).
4618
4617
  { label: "Visual & Media (Slides \xB7 Diagrams \xB7 Motion \xB7 Video)", cats: ["visual-media"] },
4619
4618
  { label: "Workflow & ECC Suite", cats: ["workflow", "ecc-suite"] }
4620
4619
  ];
4620
+ var DEV_METHOD_BUNDLE_VALUE = "bundle:dev-method";
4621
+ var DEV_METHOD_BUNDLE_CATEGORY = "workflow";
4622
+ var bundleMemberValues = () => DEV_METHOD_SKILL_IDS.map((id) => `asset:${id}`);
4623
+ function collapseDevMethodBundle(ids) {
4624
+ const members = new Set(bundleMemberValues());
4625
+ const rest = ids.filter((v2) => !members.has(v2));
4626
+ const anyMember = ids.some((v2) => members.has(v2));
4627
+ return anyMember ? [...rest, DEV_METHOD_BUNDLE_VALUE] : rest;
4628
+ }
4629
+ function expandDevMethodBundle(ids) {
4630
+ const rest = ids.filter((v2) => v2 !== DEV_METHOD_BUNDLE_VALUE);
4631
+ return ids.includes(DEV_METHOD_BUNDLE_VALUE) ? [...rest, ...bundleMemberValues()] : rest;
4632
+ }
4633
+ function buildPageGroups(cats, initialSet) {
4634
+ const groups = {};
4635
+ const flatItems = [];
4636
+ for (const cat of cats) {
4637
+ const items = [];
4638
+ for (const o of VISIBLE_OPTION_DEFS.filter((d2) => d2.category === cat)) {
4639
+ items.push({
4640
+ value: `option:${o.key}`,
4641
+ // v26.62.3 — group header 와 옵션 사이 시각 hierarchy 강화. label prefix 4 space.
4642
+ label: ` ${o.label} [${o.source}]`,
4643
+ hint: o.hint
4644
+ });
4645
+ }
4646
+ if (cat === DEV_METHOD_BUNDLE_CATEGORY) {
4647
+ items.push({
4648
+ value: DEV_METHOD_BUNDLE_VALUE,
4649
+ label: ` uzys \uD558\uB124\uC2A4 \uBC29\uBC95\uB860 ${DEV_METHOD_SKILL_IDS.length}\uC885 [uzys] \u2605 official`,
4650
+ hint: DEV_METHOD_SKILL_IDS.join(", ")
4651
+ });
4652
+ }
4653
+ const tierOrder = { official: 0, vetted: 1, experimental: 2 };
4654
+ const devMethod = new Set(DEV_METHOD_SKILL_IDS);
4655
+ const catAssets = [...EXTERNAL_ASSETS.filter((x) => x.category === cat)].filter((x) => !devMethod.has(x.id)).sort((a, b2) => tierOrder[assetTrustTier(a.id)] - tierOrder[assetTrustTier(b2.id)]);
4656
+ for (const a of catAssets) {
4657
+ const tier = assetTrustTier(a.id);
4658
+ const badge = tier === "official" ? " \u2605 official" : tier === "experimental" ? " \u26A0 experimental (opt-in)" : "";
4659
+ items.push({
4660
+ value: `asset:${a.id}`,
4661
+ label: ` ${a.id} [${a.source}]${badge}`,
4662
+ hint: a.description
4663
+ });
4664
+ }
4665
+ if (items.length === 0) continue;
4666
+ const selectedInCat = items.filter((it3) => initialSet.has(it3.value)).length;
4667
+ const header = `${CATEGORY_TITLES[cat]} [${selectedInCat}/${items.length} \u2713 default]`;
4668
+ groups[header] = items;
4669
+ flatItems.push(...items);
4670
+ }
4671
+ return { groups, flatItems };
4672
+ }
4621
4673
  function assertPagesCoverAllCategories(pages) {
4622
4674
  const counts = /* @__PURE__ */ new Map();
4623
4675
  for (const page of pages) {
@@ -4717,42 +4769,9 @@ Proceed?`,
4717
4769
  },
4718
4770
  selectInstallTargets: async (initialChecked, step, recap) => {
4719
4771
  const pages = INSTALL_TARGET_PAGES;
4720
- const initialSet = new Set(initialChecked);
4721
- const collected = new Set(initialChecked);
4722
- const buildPageGroups = (cats) => {
4723
- const groups = {};
4724
- const flatItems = [];
4725
- for (const cat of cats) {
4726
- const items = [];
4727
- for (const o of VISIBLE_OPTION_DEFS.filter((d2) => d2.category === cat)) {
4728
- items.push({
4729
- value: `option:${o.key}`,
4730
- // v26.62.3 — group header 와 옵션 사이 시각 hierarchy 강화. label prefix 4 space.
4731
- label: ` ${o.label} [${o.source}]`,
4732
- hint: o.hint
4733
- });
4734
- }
4735
- const tierOrder = { official: 0, vetted: 1, experimental: 2 };
4736
- const catAssets = [...EXTERNAL_ASSETS.filter((x) => x.category === cat)].sort(
4737
- (a, b2) => tierOrder[assetTrustTier(a.id)] - tierOrder[assetTrustTier(b2.id)]
4738
- );
4739
- for (const a of catAssets) {
4740
- const tier = assetTrustTier(a.id);
4741
- const badge = tier === "official" ? " \u2605 official" : tier === "experimental" ? " \u26A0 experimental (opt-in)" : "";
4742
- items.push({
4743
- value: `asset:${a.id}`,
4744
- label: ` ${a.id} [${a.source}]${badge}`,
4745
- hint: a.description
4746
- });
4747
- }
4748
- if (items.length === 0) continue;
4749
- const selectedInCat = items.filter((it3) => initialSet.has(it3.value)).length;
4750
- const header = `${CATEGORY_TITLES[cat]} [${selectedInCat}/${items.length} \u2713 default]`;
4751
- groups[header] = items;
4752
- flatItems.push(...items);
4753
- }
4754
- return { groups, flatItems };
4755
- };
4772
+ const displayInitial = collapseDevMethodBundle(initialChecked);
4773
+ const initialSet = new Set(displayInitial);
4774
+ const collected = new Set(displayInitial);
4756
4775
  const recapLine = recap ? `Tracks: ${recap.tracks.join(", ")} \xB7 CLIs: ${recap.cli.join(", ")}` : "";
4757
4776
  process.stdout.write("\x1B[?1049h");
4758
4777
  let resultIds = null;
@@ -4762,7 +4781,7 @@ Proceed?`,
4762
4781
  while (pageIdx < pages.length) {
4763
4782
  const page = pages[pageIdx];
4764
4783
  if (!page) break;
4765
- const { groups, flatItems } = buildPageGroups(page.cats);
4784
+ const { groups, flatItems } = buildPageGroups(page.cats, initialSet);
4766
4785
  const selectedNow = flatItems.filter((it3) => collected.has(it3.value)).map((it3) => it3.value);
4767
4786
  const pageDefault = flatItems.filter((it3) => initialSet.has(it3.value)).length;
4768
4787
  const totalSelected = collected.size;
@@ -4793,7 +4812,7 @@ Proceed?`,
4793
4812
  pageIdx++;
4794
4813
  }
4795
4814
  if (!aborted) {
4796
- resultIds = [...collected];
4815
+ resultIds = expandDevMethodBundle([...collected]);
4797
4816
  }
4798
4817
  } finally {
4799
4818
  process.stdout.write("\x1B[?1049l");