@skein-code/cli 0.3.3 → 0.3.5

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/cli.js CHANGED
@@ -220,7 +220,7 @@ function isSqliteBusy(error) {
220
220
  // package.json
221
221
  var package_default = {
222
222
  name: "@skein-code/cli",
223
- version: "0.3.3",
223
+ version: "0.3.5",
224
224
  description: "A context-first, model-agnostic coding agent with an auditable terminal workspace.",
225
225
  type: "module",
226
226
  license: "MIT",
@@ -236,8 +236,8 @@ var package_default = {
236
236
  },
237
237
  skein: {
238
238
  releaseNotes: [
239
- 'Quieter turns: greetings like "hi" no longer dump a context panel',
240
- "Redesigned entry banner into a bordered hero card with aligned metadata"
239
+ 'New ANSI Shadow "SKEIN" logotype gives the entry banner a real product wordmark',
240
+ "Wordmark carries a subtle theme-aware gradient; narrow and ASCII terminals fall back cleanly"
241
241
  ]
242
242
  },
243
243
  bin: {
@@ -12680,11 +12680,33 @@ function ThemePreview({ name, width, glyphs }) {
12680
12680
  ] })
12681
12681
  ] });
12682
12682
  }
12683
+ var BRAND_WORDMARK = [
12684
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557",
12685
+ "\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2554\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551",
12686
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551",
12687
+ "\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2588\u2588\u2557 \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551",
12688
+ "\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551",
12689
+ "\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D"
12690
+ ];
12691
+ var BRAND_WORDMARK_WIDTH = 37;
12692
+ function blendHex(from, to, t) {
12693
+ const parse = (hex) => [
12694
+ parseInt(hex.slice(1, 3), 16),
12695
+ parseInt(hex.slice(3, 5), 16),
12696
+ parseInt(hex.slice(5, 7), 16)
12697
+ ];
12698
+ const [ar, ag, ab] = parse(from);
12699
+ const [br, bg, bb] = parse(to);
12700
+ const mix = (a, b) => Math.round(a + (b - a) * t).toString(16).padStart(2, "0");
12701
+ return `#${mix(ar, br)}${mix(ag, bg)}${mix(ab, bb)}`;
12702
+ }
12683
12703
  function Banner({ model, engine, workspace, version, width, glyphs }) {
12684
12704
  const theme = useTheme();
12685
12705
  const rowWidth = safeWidth(width);
12686
- const wordmark = `${glyphs.brand} ${PRODUCT_NAME.toUpperCase().split("").join(" ")}`;
12687
12706
  const innerWidth = Math.max(1, rowWidth - 4);
12707
+ const useAscii = glyphs.borderStyle === "classic";
12708
+ const showLogotype = !useAscii && innerWidth >= BRAND_WORDMARK_WIDTH;
12709
+ const plainWordmark = `${glyphs.brand} ${PRODUCT_NAME.toUpperCase().split("").join(" ")}`;
12688
12710
  const tagline = `v${version} ${glyphs.separator} a terminal coding agent you can see through`;
12689
12711
  const metaRows = [
12690
12712
  { label: "model", value: sanitizeInlineTerminalText(model) },
@@ -12703,8 +12725,16 @@ function Banner({ model, engine, workspace, version, width, glyphs }) {
12703
12725
  borderColor: theme.border,
12704
12726
  paddingX: 1,
12705
12727
  children: [
12706
- /* @__PURE__ */ jsx(Text, { bold: true, color: theme.accent, children: truncateDisplay(wordmark, innerWidth) }),
12707
- /* @__PURE__ */ jsx(Text, { color: theme.muted, children: truncateDisplay(tagline, innerWidth) }),
12728
+ showLogotype ? /* @__PURE__ */ jsx(Box, { flexDirection: "column", children: BRAND_WORDMARK.map((line, index) => /* @__PURE__ */ jsx(
12729
+ Text,
12730
+ {
12731
+ bold: true,
12732
+ color: blendHex(theme.accent, theme.textStrong, index / (BRAND_WORDMARK.length - 1) * 0.55),
12733
+ children: line
12734
+ },
12735
+ index
12736
+ )) }) : /* @__PURE__ */ jsx(Text, { bold: true, color: theme.accent, children: truncateDisplay(plainWordmark, innerWidth) }),
12737
+ /* @__PURE__ */ jsx(Box, { marginTop: showLogotype ? 1 : 0, children: /* @__PURE__ */ jsx(Text, { color: theme.muted, children: truncateDisplay(tagline, innerWidth) }) }),
12708
12738
  /* @__PURE__ */ jsx(Box, { marginTop: 1, flexDirection: "column", children: metaRows.map((row) => /* @__PURE__ */ jsxs(Box, { children: [
12709
12739
  /* @__PURE__ */ jsx(Text, { color: theme.dim, children: padDisplay(row.label, labelCol) }),
12710
12740
  /* @__PURE__ */ jsx(Text, { color: theme.text, children: truncateDisplay(row.value, Math.max(1, innerWidth - labelCol)) })
@@ -13685,7 +13715,9 @@ function estimateTimelineItemRows(item, { width, compact = false, showToolOutput
13685
13715
  if (item.kind === "agent" || item.kind === "agent-message") return rowWidth < 64 ? 2 : 1;
13686
13716
  if (item.kind === "workflow") return rowWidth < 64 ? 2 : 1;
13687
13717
  if (item.kind === "banner") {
13688
- return 2 + 2 + 1 + 3 + 1 + 1 + 1;
13718
+ const wide = rowWidth >= 41;
13719
+ const headRows = wide ? 6 + 1 : 1;
13720
+ return 2 + headRows + 1 + 1 + 3 + 1 + 1 + 1;
13689
13721
  }
13690
13722
  return 1;
13691
13723
  }