skilllib 1.11.5 → 1.11.6

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.
@@ -2034,6 +2034,9 @@ function entriesOf(dirs, name) {
2034
2034
  return [{ dir, path, link: link2, real, hash: null }];
2035
2035
  });
2036
2036
  }
2037
+ function uniqueReals(entries) {
2038
+ return entries.filter((e, i, all) => !e.link && all.findIndex((o) => !o.link && o.real === e.real) === i);
2039
+ }
2037
2040
  function hashReals(reals) {
2038
2041
  if (reals.length > 1) for (const r of reals) r.hash = treeHash(r.path);
2039
2042
  }
@@ -2074,15 +2077,16 @@ function planProjectTidy(root, { keep = {}, enabled = enabledHarnesses() } = {})
2074
2077
  let git2;
2075
2078
  const skillsLock = projectSkillsLock(root);
2076
2079
  const dirs = repoTidyDirs(root).map(abs);
2080
+ const realRoot = realpathOrNull(root) ?? root;
2077
2081
  for (const name of namesIn(dirs)) {
2078
2082
  const entries = entriesOf(dirs, name);
2079
- const external = entries.find((e) => e.link && e.real && !(e.real + sep6).startsWith(realpathOrNull(root) + sep6));
2083
+ const external = entries.find((e) => e.link && e.real && !(e.real + sep6).startsWith(realRoot + sep6));
2080
2084
  if (external) {
2081
2085
  const differs = entries.some((e) => e !== external && e.real && existsSync11(join12(e.real, "SKILL.md")) && treeHash(e.real) !== treeHash(external.real));
2082
2086
  report.skipped.push({ name, reason: `${rel(external.path)} links outside the repo`, ...differs ? { differs } : {} });
2083
2087
  continue;
2084
2088
  }
2085
- const reals = entries.filter((e, i, all) => !e.link && all.findIndex((o) => !o.link && realpathOrNull(o.path) === realpathOrNull(e.path)) === i);
2089
+ const reals = uniqueReals(entries);
2086
2090
  if (reals.length === 0) continue;
2087
2091
  hashReals(reals);
2088
2092
  const dep = skills[name];
@@ -2146,7 +2150,7 @@ function planGlobalTidy({ keep = {}, enabled = enabledHarnesses() } = {}) {
2146
2150
  report.skipped.push({ name, reason: "a Claude Code plugin kept in a skills folder" });
2147
2151
  continue;
2148
2152
  }
2149
- const reals = entries.filter((e, i, all) => !e.link && all.findIndex((o) => !o.link && realpathOrNull(o.path) === realpathOrNull(e.path)) === i);
2153
+ const reals = uniqueReals(entries);
2150
2154
  if (reals.length < 2) continue;
2151
2155
  hashReals(reals);
2152
2156
  const kept = reals.find((r) => r.dir === keep[name]);
package/dist/index.js CHANGED
@@ -31,7 +31,7 @@ import {
31
31
  unhide,
32
32
  update,
33
33
  usage
34
- } from "./chunk-TE2EDZ7L.js";
34
+ } from "./chunk-TXQQQ73J.js";
35
35
 
36
36
  // src/index.ts
37
37
  import { readFileSync } from "fs";
@@ -138,10 +138,10 @@ async function main() {
138
138
  if (!["--version", "-v", "version", "help", "--help", "-h"].includes(command ?? "")) refreshAgentSkill();
139
139
  switch (command) {
140
140
  case void 0:
141
- return process.stdin.isTTY && process.stdout.isTTY ? (await import("./tui-GFQUHPEC.js")).tui() : overview(args);
141
+ return process.stdin.isTTY && process.stdout.isTTY ? (await import("./tui-OS2VUBGF.js")).tui() : overview(args);
142
142
  case "ui":
143
143
  if (!process.stdin.isTTY || !process.stdout.isTTY) throw new Error("`skilllib ui` needs an interactive terminal. Agents and scripts: use `skilllib status --json`.");
144
- return (await import("./tui-GFQUHPEC.js")).tui();
144
+ return (await import("./tui-OS2VUBGF.js")).tui();
145
145
  case "status":
146
146
  return status(args);
147
147
  case "add":
@@ -84,7 +84,7 @@ import {
84
84
  versionHistory,
85
85
  visibleProjects,
86
86
  withoutForceHint
87
- } from "./chunk-TE2EDZ7L.js";
87
+ } from "./chunk-TXQQQ73J.js";
88
88
 
89
89
  // src/tui/index.tsx
90
90
  import { render } from "ink";
@@ -1743,7 +1743,7 @@ function App({ initial, reload, loadUsage: loadUsage2 }) {
1743
1743
  if (isNameChar(input, key)) return setModal({ ...m, query: m.query + input.toLowerCase(), cursor: 0 });
1744
1744
  }
1745
1745
  }
1746
- const toastLines = toast && modal?.kind !== "confirm" ? wrap(toast, termCols - 2, 3).map((l) => " " + l) : [];
1746
+ const toastLines = toast && modal?.kind !== "confirm" ? wrap(toast, termCols - 2, Math.max(3, Math.floor(termRows / 3))).map((l) => " " + l) : [];
1747
1747
  const bottomH = Math.max(1, toastLines.length);
1748
1748
  const confirmLines = modal?.kind === "confirm" ? wrap(modal.fix.preview, columns - 6, 6) : [];
1749
1749
  const confirmH = modal?.kind === "confirm" ? confirmLines.length + 2 : 0;
@@ -1786,10 +1786,14 @@ function App({ initial, reload, loadUsage: loadUsage2 }) {
1786
1786
  }), here: onHelp }
1787
1787
  ];
1788
1788
  const sideAt = sideRows.findIndex((r) => r.here);
1789
+ const brand = " \u25C6 skilllib ";
1790
+ const tabsWidth = (short) => PLACES.reduce((n, [p, label]) => n + (short && p === "library" ? 6 : label.length) + 2 + (p === "health" && healthCount ? ` ${healthCount}`.length : 0), 0);
1791
+ const showBrand = brand.length + tabsWidth(false) <= columns;
1792
+ const shortTabs = !showBrand && tabsWidth(false) > columns;
1789
1793
  const topBar = /* @__PURE__ */ jsx2(Box2, { height: 1, width: columns, justifyContent: "space-between", children: /* @__PURE__ */ jsxs2(Box2, { children: [
1790
- /* @__PURE__ */ jsx2(Text2, { color: color.accent, bold: true, children: " \u25C6 skilllib " }),
1794
+ /* @__PURE__ */ jsx2(Text2, { color: color.accent, bold: true, children: showBrand ? brand : "" }),
1791
1795
  PLACES.map(([p, label]) => /* @__PURE__ */ jsxs2(Text2, { backgroundColor: place === p ? color.accent : void 0, color: place === p ? "#0B1020" : color.muted, bold: place === p, children: [
1792
- ` ${label}`,
1796
+ ` ${shortTabs && p === "library" ? "Skills" : label}`,
1793
1797
  /* @__PURE__ */ jsx2(Text2, { color: place === p ? "#0B1020" : healthWorst ? SEV[healthWorst.severity].color : color.green, children: p === "health" && healthCount ? ` ${healthCount}` : "" }),
1794
1798
  " "
1795
1799
  ] }, p))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skilllib",
3
- "version": "1.11.5",
3
+ "version": "1.11.6",
4
4
  "description": "Manage your agent skills like dependencies. One library for all your skills; each repo gets only the ones it needs, and every agent can see them. Works with Claude Code, Cursor, Codex, Zed and Grok.",
5
5
  "keywords": [
6
6
  "agent-skills",