@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 +40 -32
- package/dist/cli.js.map +1 -1
- package/package.json +3 -3
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.
|
|
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
|
|
240
|
-
"
|
|
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__ */
|
|
12722
|
-
|
|
12723
|
-
|
|
12724
|
-
|
|
12725
|
-
|
|
12726
|
-
|
|
12727
|
-
|
|
12728
|
-
|
|
12729
|
-
|
|
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
|
-
|
|
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
|
}
|