@skein-code/cli 0.3.4 → 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.4",
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
- 'New woven-coil "S" logo replaces the plain wordmark in the entry banner',
240
- "Entry banner pairs the logo with the wordmark and an aligned session spec sheet"
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 = PRODUCT_NAME.toLowerCase();
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) },
@@ -12693,21 +12715,6 @@ function Banner({ model, engine, workspace, version, width, glyphs }) {
12693
12715
  ];
12694
12716
  const labelCol = 8;
12695
12717
  const hint = `type a request ${glyphs.separator} /help for commands ${glyphs.separator} @ to attach files`;
12696
- const useAscii = glyphs.borderStyle === "classic";
12697
- const fill = useAscii ? "##" : "\u2588\u2588";
12698
- const gap = " ";
12699
- const logoPixels = [
12700
- [0, 1, 1, 1, 1],
12701
- [1, 0, 0, 0, 0],
12702
- [0, 1, 1, 1, 0],
12703
- [0, 0, 0, 0, 1],
12704
- [1, 1, 1, 1, 0]
12705
- ];
12706
- const logoRows = logoPixels.map((cells) => cells.map((on) => on ? fill : gap).join(""));
12707
- const logoWidth = 10;
12708
- const logoGutter = 2;
12709
- const showLogo = innerWidth >= logoWidth + logoGutter + 12;
12710
- const headWidth = showLogo ? Math.max(1, innerWidth - logoWidth - logoGutter) : innerWidth;
12711
12718
  return /* @__PURE__ */ jsxs(
12712
12719
  Box,
12713
12720
  {
@@ -12718,18 +12725,17 @@ function Banner({ model, engine, workspace, version, width, glyphs }) {
12718
12725
  borderColor: theme.border,
12719
12726
  paddingX: 1,
12720
12727
  children: [
12721
- /* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
12722
- showLogo ? /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginRight: logoGutter, children: logoRows.map((line, index) => /* @__PURE__ */ jsx(Text, { color: theme.accent, children: line }, index)) }) : null,
12723
- /* @__PURE__ */ jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [
12724
- /* @__PURE__ */ jsx(Text, { bold: true, color: theme.accent, children: truncateDisplay(wordmark, headWidth) }),
12725
- /* @__PURE__ */ jsx(Text, { color: theme.muted, children: truncateDisplay(tagline, headWidth) }),
12726
- showLogo ? /* @__PURE__ */ jsx(Box, { marginTop: 1, flexDirection: "column", children: metaRows.map((row) => /* @__PURE__ */ jsxs(Box, { children: [
12727
- /* @__PURE__ */ jsx(Text, { color: theme.dim, children: padDisplay(row.label, labelCol) }),
12728
- /* @__PURE__ */ jsx(Text, { color: theme.text, children: truncateDisplay(row.value, Math.max(1, headWidth - labelCol)) })
12729
- ] }, row.label)) }) : null
12730
- ] })
12731
- ] }),
12732
- showLogo ? null : /* @__PURE__ */ jsx(Box, { marginTop: 1, flexDirection: "column", children: metaRows.map((row) => /* @__PURE__ */ jsxs(Box, { children: [
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) }) }),
12738
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, flexDirection: "column", children: metaRows.map((row) => /* @__PURE__ */ jsxs(Box, { children: [
12733
12739
  /* @__PURE__ */ jsx(Text, { color: theme.dim, children: padDisplay(row.label, labelCol) }),
12734
12740
  /* @__PURE__ */ jsx(Text, { color: theme.text, children: truncateDisplay(row.value, Math.max(1, innerWidth - labelCol)) })
12735
12741
  ] }, row.label)) }),
@@ -13709,7 +13715,9 @@ function estimateTimelineItemRows(item, { width, compact = false, showToolOutput
13709
13715
  if (item.kind === "agent" || item.kind === "agent-message") return rowWidth < 64 ? 2 : 1;
13710
13716
  if (item.kind === "workflow") return rowWidth < 64 ? 2 : 1;
13711
13717
  if (item.kind === "banner") {
13712
- 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;
13713
13721
  }
13714
13722
  return 1;
13715
13723
  }