@crafter/cli-tree 0.2.3 → 0.2.4

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.
@@ -510,8 +510,6 @@ function sparkline2d(data, opts = {}) {
510
510
  const row = zero.repeat(data.length);
511
511
  return { top: row, bottom: row };
512
512
  }
513
- const topGlyphs = ["▁", "▃", "▅", "█"];
514
- const bottomGlyphs = ["▁", "▃", "▅", "▇"];
515
513
  let top = "";
516
514
  let bottom = "";
517
515
  for (const value of data) {
@@ -520,14 +518,11 @@ function sparkline2d(data, opts = {}) {
520
518
  bottom += zero;
521
519
  continue;
522
520
  }
523
- const level = Math.min(8, Math.max(1, Math.round(value / max * 8)));
524
- if (level <= 4) {
525
- top += zero;
526
- bottom += bottomGlyphs[level - 1];
521
+ bottom += "█";
522
+ if (value / max > 0.5) {
523
+ top += "█";
527
524
  } else {
528
- bottom += "█";
529
- const topLevel = level - 4;
530
- top += topGlyphs[topLevel - 1];
525
+ top += zero;
531
526
  }
532
527
  }
533
528
  return { top, bottom };
@@ -717,4 +712,4 @@ async function mineCli(cli, options = {}) {
717
712
 
718
713
  export { readHistoryFile, detectHistoryFormat, parseHistory, tokenize, defaultHistoryPath, segmentSessions, filterByCli, extractSubcommand, extractSubcommandPath, buildTransitions, normalizeTransitions, extractPaths, clusterIntoWorkflows, computeStats, suggestSkills, minedToFlowWorkflow, computeActivity, formatTimeRange, sparkline, sparkline2d, labeledSparkline, mineCrossCli, crossCliToFlowWorkflow, mineCli };
719
714
 
720
- //# debugId=AE63817E77D801AB64756E2164756E21
715
+ //# debugId=7E6EEF85044CDF0D64756E2164756E21
@@ -10,11 +10,11 @@
10
10
  "import type { MinedWorkflow, CliUsageStats } from \"./types\";\n\nexport interface SkillSuggestion {\n\tname: string;\n\tdescription: string;\n\tcli: string;\n\tcommands: string[];\n\tfrequency: number;\n\treason: string;\n\tpriority: \"high\" | \"medium\" | \"low\";\n}\n\nexport function suggestSkills(\n\tworkflows: MinedWorkflow[],\n\tstats: CliUsageStats,\n): SkillSuggestion[] {\n\tconst suggestions: SkillSuggestion[] = [];\n\n\tfor (const wf of workflows) {\n\t\tconst path = wf.path[0] ?? [];\n\t\tif (path.length < 2) continue;\n\n\t\tconst suggestion = workflowToSuggestion(wf, stats);\n\t\tif (suggestion) suggestions.push(suggestion);\n\t}\n\n\treturn suggestions.sort((a, b) => {\n\t\tconst priorityOrder = { high: 0, medium: 1, low: 2 };\n\t\tif (priorityOrder[a.priority] !== priorityOrder[b.priority]) {\n\t\t\treturn priorityOrder[a.priority] - priorityOrder[b.priority];\n\t\t}\n\t\treturn b.frequency - a.frequency;\n\t});\n}\n\nfunction workflowToSuggestion(wf: MinedWorkflow, stats: CliUsageStats): SkillSuggestion | null {\n\tconst path = wf.path[0] ?? [];\n\tif (path.length < 2) return null;\n\n\tconst commands = path.map(sub => `${wf.cli} ${sub}`);\n\tconst frequency = wf.support;\n\n\tconst priority = scorePriority(frequency, path.length, stats.totalInvocations);\n\n\tconst name = generateSkillName(wf.cli, path);\n\tconst description = generateDescription(wf.cli, path);\n\tconst reason = generateReason(frequency, path, stats);\n\n\treturn { name, description, cli: wf.cli, commands, frequency, reason, priority };\n}\n\nfunction scorePriority(frequency: number, pathLength: number, totalInvocations: number): \"high\" | \"medium\" | \"low\" {\n\tconst ratio = frequency / totalInvocations;\n\tconst score = frequency * pathLength * (ratio + 0.1);\n\n\tif (score > 50) return \"high\";\n\tif (score > 15) return \"medium\";\n\treturn \"low\";\n}\n\nfunction generateSkillName(cli: string, path: string[]): string {\n\tconst knownPatterns: Record<string, string> = {\n\t\t\"add,commit\": \"ship\",\n\t\t\"add,commit,push\": \"ship\",\n\t\t\"commit,push\": \"push-latest\",\n\t\t\"install,dev\": \"start\",\n\t\t\"install,run\": \"start\",\n\t\t\"login,publish\": \"release\",\n\t\t\"publish,tag\": \"release\",\n\t\t\"checkout,pull\": \"sync\",\n\t\t\"fetch,pull\": \"sync\",\n\t\t\"build,push\": \"deploy\",\n\t\t\"build,run\": \"test-build\",\n\t\t\"compose,compose\": \"compose-iterate\",\n\t};\n\n\tconst key = path.join(\",\");\n\tif (knownPatterns[key]) return knownPatterns[key]!;\n\n\treturn path.join(\"-\");\n}\n\nfunction generateDescription(cli: string, path: string[]): string {\n\treturn `Run ${cli} ${path.join(\", then \")} as one command`;\n}\n\nfunction generateReason(frequency: number, path: string[], stats: CliUsageStats): string {\n\tconst ratio = frequency / stats.totalInvocations;\n\tconst pct = (ratio * 100).toFixed(0);\n\n\tif (ratio > 0.1) {\n\t\treturn `You run this exact sequence ${frequency} times (${pct}% of all your ${stats.cli} usage)`;\n\t}\n\tif (frequency >= 50) {\n\t\treturn `You run this exact sequence ${frequency} times — that's a lot of repetition`;\n\t}\n\tif (frequency >= 20) {\n\t\treturn `You run this exact sequence ${frequency} times`;\n\t}\n\treturn `Detected ${frequency} times in your shell history`;\n}\n",
11
11
  "import type { Workflow } from \"../flow/types\";\nimport type { MinedWorkflow } from \"./types\";\n\n/**\n * Convert a MinedWorkflow (discovered from shell history) into a Workflow\n * that the flow renderer can visualize as an ASCII DAG.\n *\n * The mined workflow is a linear path like [\"add\", \"commit\", \"push\"] with\n * a frequency count. We turn it into a linear Workflow with one node per\n * step and edges in order — matching the shape of the handcrafted YAML\n * workflows in workflows/.\n */\nexport function minedToFlowWorkflow(mined: MinedWorkflow, occurrences?: number): Workflow {\n\tconst path = mined.path[0] ?? [];\n\tconst label = path.join(\" → \");\n\tconst freq = occurrences ?? mined.support;\n\n\tconst nodes = path.map((sub, idx) => ({\n\t\tid: `n${idx}`,\n\t\tcommand: [mined.cli, sub],\n\t\tlabel: sub,\n\t}));\n\n\tconst edges = [];\n\tfor (let i = 0; i < nodes.length - 1; i++) {\n\t\tedges.push({ from: nodes[i]!.id, to: nodes[i + 1]!.id });\n\t}\n\n\treturn {\n\t\tname: label,\n\t\tdescription: `Seen ${freq}× in your shell history`,\n\t\tcli: mined.cli,\n\t\tnodes,\n\t\tedges,\n\t};\n}\n",
12
12
  "import type { HistoryEntry } from \"./types\";\n\nexport interface ActivityProfile {\n\t/** Total invocations considered */\n\ttotal: number;\n\t/** Count per hour of day (0-23) */\n\thourOfDay: number[];\n\t/** Count per day of week (0=Sun, 6=Sat) */\n\tdayOfWeek: number[];\n\t/** Count per day over the last 30 days (most recent last) */\n\tlast30Days: number[];\n\t/** Count per ISO week over the last 52 weeks (most recent last) */\n\tlast52Weeks: number[];\n\t/** The earliest timestamp observed (unix seconds) */\n\tfirstSeen: number;\n\t/** The latest timestamp observed (unix seconds) */\n\tlastSeen: number;\n\t/** How many distinct days had at least one invocation */\n\tdaysWithActivity: number;\n}\n\n/**\n * Compute temporal activity histograms from a list of history entries.\n * Assumes entries have unix-second timestamps; entries with timestamp 0 are ignored.\n */\nexport function computeActivity(entries: HistoryEntry[], now: Date = new Date()): ActivityProfile {\n\tconst hourOfDay = new Array(24).fill(0);\n\tconst dayOfWeek = new Array(7).fill(0);\n\tconst last30Days = new Array(30).fill(0);\n\tconst last52Weeks = new Array(52).fill(0);\n\n\tlet first = Infinity;\n\tlet last = 0;\n\tlet total = 0;\n\n\tconst nowMs = now.getTime();\n\tconst dayMs = 24 * 60 * 60 * 1000;\n\tconst weekMs = 7 * dayMs;\n\n\tconst distinctDays = new Set<number>();\n\n\tfor (const entry of entries) {\n\t\tif (!entry.timestamp || entry.timestamp <= 0) continue;\n\n\t\ttotal += 1;\n\t\tif (entry.timestamp < first) first = entry.timestamp;\n\t\tif (entry.timestamp > last) last = entry.timestamp;\n\n\t\tconst date = new Date(entry.timestamp * 1000);\n\t\thourOfDay[date.getHours()] += 1;\n\t\tdayOfWeek[date.getDay()] += 1;\n\n\t\tconst dayKey = Math.floor(date.getTime() / dayMs);\n\t\tdistinctDays.add(dayKey);\n\n\t\tconst ageDays = Math.floor((nowMs - date.getTime()) / dayMs);\n\t\tif (ageDays >= 0 && ageDays < 30) {\n\t\t\t// Index 29 = today, 0 = 29 days ago\n\t\t\tlast30Days[29 - ageDays] += 1;\n\t\t}\n\n\t\tconst ageWeeks = Math.floor((nowMs - date.getTime()) / weekMs);\n\t\tif (ageWeeks >= 0 && ageWeeks < 52) {\n\t\t\t// Index 51 = this week, 0 = 51 weeks ago\n\t\t\tlast52Weeks[51 - ageWeeks] += 1;\n\t\t}\n\t}\n\n\treturn {\n\t\ttotal,\n\t\thourOfDay,\n\t\tdayOfWeek,\n\t\tlast30Days,\n\t\tlast52Weeks,\n\t\tfirstSeen: first === Infinity ? 0 : first,\n\t\tlastSeen: last,\n\t\tdaysWithActivity: distinctDays.size,\n\t};\n}\n\nexport function formatTimeRange(firstSeen: number, lastSeen: number): string {\n\tif (!firstSeen || !lastSeen) return \"no data\";\n\tconst first = new Date(firstSeen * 1000);\n\tconst last = new Date(lastSeen * 1000);\n\tconst days = Math.round((last.getTime() - first.getTime()) / (24 * 60 * 60 * 1000));\n\tif (days < 1) return \"less than a day\";\n\tif (days < 30) return `${days} days`;\n\tif (days < 365) return `${Math.round(days / 30)} months`;\n\treturn `${(days / 365).toFixed(1)} years`;\n}\n",
13
- "/**\n * Minimal Unicode sparkline for a numeric array.\n *\n * We could depend on @crafter/charts for this, but keeping zero deps means\n * clitree stays as a single focused package. The logic is trivial: bucket each\n * value into one of 8 block characters (▁▂▃▄▅▆▇█), with a distinct marker\n * for zero values so absence is visible at a glance.\n *\n * Design note on the zero character:\n * The Unicode middle dot (·, U+00B7) is centered vertically in most monospace\n * fonts, which makes it float visually in the middle of the line while the\n * block glyphs sit at the baseline — ugly and confusing.\n *\n * We default to \"░\" (U+2591, light shade). It fills the full character cell\n * with a 25% dotted texture, so it's visually distinct from the solid\n * block glyphs but still anchors to the same cell height. Empty slots read\n * as \"no data\" (texture) vs populated slots as \"bar\" (solid) at a glance.\n */\n\nconst BLOCKS = [\"▁\", \"▂\", \"▃\", \"▄\", \"▅\", \"▆\", \"▇\", \"█\"] as const;\n\nexport interface SparklineOptions {\n\t/**\n\t * Character used for zero values. Defaults to \"░\" (U+2591 light shade)\n\t * which fills the full cell with a dotted texture — visually distinct\n\t * from solid blocks but still anchored to the same cell dimensions.\n\t * Pass \" \" for truly blank, \".\" for a baseline dot, etc.\n\t */\n\tzero?: string;\n}\n\nexport function sparkline(data: number[], opts: SparklineOptions = {}): string {\n\tif (data.length === 0) return \"\";\n\tconst zero = opts.zero ?? \"░\";\n\tconst max = Math.max(...data);\n\tif (max === 0) return zero.repeat(data.length);\n\n\treturn data\n\t\t.map(value => {\n\t\t\tif (value === 0) return zero;\n\t\t\tconst idx = Math.min(\n\t\t\t\tBLOCKS.length - 1,\n\t\t\t\tMath.max(0, Math.round((value / max) * (BLOCKS.length - 1))),\n\t\t\t);\n\t\t\treturn BLOCKS[idx];\n\t\t})\n\t\t.join(\"\");\n}\n\n/**\n * Render a sparkline across TWO lines so every cell is the same visual height.\n *\n * The single-line `sparkline()` has a subtle problem: block glyphs (▁▂▃...) grow\n * from the baseline upward, leaving the top of the cell empty. When you place\n * them next to \"░\" zero-markers that fill the whole cell, the zeros look like\n * fat rectangles and the active bars look like short stubs floating in gaps —\n * the visual rhythm breaks.\n *\n * This version splits each value across two rows:\n * - Top row shows anything with level 4 (upper half of the cell filled)\n * - Bottom row shows anything with level 1 (lower half)\n *\n * The result is a sparkline where every slot is a full-height cell — either\n * two stacked `░` for a zero, two stacked blocks for a full value, or a mix.\n */\nexport function sparkline2d(data: number[], opts: SparklineOptions = {}): { top: string; bottom: string } {\n\tif (data.length === 0) return { top: \"\", bottom: \"\" };\n\tconst zero = opts.zero ?? \"░\";\n\tconst max = Math.max(...data);\n\n\tif (max === 0) {\n\t\tconst row = zero.repeat(data.length);\n\t\treturn { top: row, bottom: row };\n\t}\n\n\t// Each value maps to a level 0-8 where 0 = empty, 8 = fully filled both rows.\n\t// Bottom row renders levels 1-4 as ▁▃▅▇, level ≥ 5 is █ (bottom is full).\n\t// Top row renders levels 5-8 as ▁▃▅█, level < 5 is zero (top is empty).\n\tconst topGlyphs = [\"▁\", \"▃\", \"▅\", \"█\"] as const;\n\tconst bottomGlyphs = [\"▁\", \"▃\", \"▅\", \"▇\"] as const;\n\n\tlet top = \"\";\n\tlet bottom = \"\";\n\n\tfor (const value of data) {\n\t\tif (value === 0) {\n\t\t\ttop += zero;\n\t\t\tbottom += zero;\n\t\t\tcontinue;\n\t\t}\n\t\t// Normalize to level 1-8\n\t\tconst level = Math.min(8, Math.max(1, Math.round((value / max) * 8)));\n\n\t\tif (level <= 4) {\n\t\t\t// Only the bottom cell has content\n\t\t\ttop += zero;\n\t\t\tbottom += bottomGlyphs[level - 1];\n\t\t} else {\n\t\t\t// Bottom is full, top shows the overflow\n\t\t\tbottom += \"█\";\n\t\t\tconst topLevel = level - 4;\n\t\t\ttop += topGlyphs[topLevel - 1];\n\t\t}\n\t}\n\n\treturn { top, bottom };\n}\n\n/**\n * Render a labeled row like \"Mon ▁▃▅█▇▅▃▂\" — used for day-of-week activity.\n */\nexport function labeledSparkline(label: string, data: number[], labelWidth = 3): string {\n\treturn `${label.padEnd(labelWidth)} ${sparkline(data)}`;\n}\n",
13
+ "/**\n * Minimal Unicode sparkline for a numeric array.\n *\n * We could depend on @crafter/charts for this, but keeping zero deps means\n * clitree stays as a single focused package. The logic is trivial: bucket each\n * value into one of 8 block characters (▁▂▃▄▅▆▇█), with a distinct marker\n * for zero values so absence is visible at a glance.\n *\n * Design note on the zero character:\n * The Unicode middle dot (·, U+00B7) is centered vertically in most monospace\n * fonts, which makes it float visually in the middle of the line while the\n * block glyphs sit at the baseline — ugly and confusing.\n *\n * We default to \"░\" (U+2591, light shade). It fills the full character cell\n * with a 25% dotted texture, so it's visually distinct from the solid\n * block glyphs but still anchors to the same cell height. Empty slots read\n * as \"no data\" (texture) vs populated slots as \"bar\" (solid) at a glance.\n */\n\nconst BLOCKS = [\"▁\", \"▂\", \"▃\", \"▄\", \"▅\", \"▆\", \"▇\", \"█\"] as const;\n\nexport interface SparklineOptions {\n\t/**\n\t * Character used for zero values. Defaults to \"░\" (U+2591 light shade)\n\t * which fills the full cell with a dotted texture — visually distinct\n\t * from solid blocks but still anchored to the same cell dimensions.\n\t * Pass \" \" for truly blank, \".\" for a baseline dot, etc.\n\t */\n\tzero?: string;\n}\n\nexport function sparkline(data: number[], opts: SparklineOptions = {}): string {\n\tif (data.length === 0) return \"\";\n\tconst zero = opts.zero ?? \"░\";\n\tconst max = Math.max(...data);\n\tif (max === 0) return zero.repeat(data.length);\n\n\treturn data\n\t\t.map(value => {\n\t\t\tif (value === 0) return zero;\n\t\t\tconst idx = Math.min(\n\t\t\t\tBLOCKS.length - 1,\n\t\t\t\tMath.max(0, Math.round((value / max) * (BLOCKS.length - 1))),\n\t\t\t);\n\t\t\treturn BLOCKS[idx];\n\t\t})\n\t\t.join(\"\");\n}\n\n/**\n * Render a sparkline across TWO lines so every cell is the same visual height\n * and there are NO empty spots inside the chart area.\n *\n * The trick: every cell is always painted either with a solid block (`█`) or\n * with the zero-fill glyph (`░`). There are no fractional blocks like `▁▃▅▇`\n * that grow from the baseline and leave the top of the cell visually black\n * against the terminal background.\n *\n * Each cell is 2 rows tall = 2 discrete levels of height:\n * - value = 0 → ░ / ░ (texture, texture)\n * - value <= ~50% max → ░ / █ (texture, solid short bar)\n * - value > ~50% max → █ / █ (solid, solid tall bar)\n *\n * You lose fine-grained resolution (only 2 levels for non-zero values), but\n * you gain a perfectly uniform visual rhythm with zero dead pixels. The top\n * line of the chart is always either `░` (background) or `█` (bar top).\n */\nexport function sparkline2d(data: number[], opts: SparklineOptions = {}): { top: string; bottom: string } {\n\tif (data.length === 0) return { top: \"\", bottom: \"\" };\n\tconst zero = opts.zero ?? \"░\";\n\tconst max = Math.max(...data);\n\n\tif (max === 0) {\n\t\tconst row = zero.repeat(data.length);\n\t\treturn { top: row, bottom: row };\n\t}\n\n\tlet top = \"\";\n\tlet bottom = \"\";\n\n\tfor (const value of data) {\n\t\tif (value === 0) {\n\t\t\ttop += zero;\n\t\t\tbottom += zero;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Active value: bottom row is always a solid block.\n\t\tbottom += \"█\";\n\n\t\t// Top row is a solid block if the value is in the upper half of the\n\t\t// range, texture otherwise. This gives us a 2-tier bar height.\n\t\tif (value / max > 0.5) {\n\t\t\ttop += \"█\";\n\t\t} else {\n\t\t\ttop += zero;\n\t\t}\n\t}\n\n\treturn { top, bottom };\n}\n\n/**\n * Render a labeled row like \"Mon ▁▃▅█▇▅▃▂\" — used for day-of-week activity.\n */\nexport function labeledSparkline(label: string, data: number[], labelWidth = 3): string {\n\treturn `${label.padEnd(labelWidth)} ${sparkline(data)}`;\n}\n",
14
14
  "import type { HistoryEntry, Session } from \"./types\";\nimport { segmentSessions } from \"./sessions\";\nimport { parseHistory, readHistoryFile, defaultHistoryPath } from \"./history\";\n\nexport interface CrossCliStep {\n\tcli: string;\n\tsubcommand: string;\n}\n\nexport interface CrossCliWorkflow {\n\tpath: CrossCliStep[];\n\tsupport: number;\n\tsignature: string;\n\tuniqueCLIs: number;\n}\n\nexport interface CrossCliOptions {\n\thistoryPath?: string;\n\tsessionGapMinutes?: number;\n\tminSupport?: number;\n\tminPathLength?: number;\n\tmaxPathLength?: number;\n\ttopK?: number;\n\t/** Only include workflows that cross at least this many distinct CLIs */\n\tminDistinctCLIs?: number;\n\t/** If non-empty, only consider entries whose cli[0] is in this set */\n\tallowedCLIs?: string[];\n\t/** Ignore CLIs that add noise (ls, cd, etc.) */\n\tignoreCLIs?: string[];\n}\n\nexport interface CrossCliResult {\n\tworkflows: CrossCliWorkflow[];\n\tsessionsAnalyzed: number;\n\tdistinctCLIs: string[];\n\ttotalTransitions: number;\n}\n\nconst DEFAULT_IGNORE = new Set([\n\t\"ls\",\n\t\"cd\",\n\t\"pwd\",\n\t\"echo\",\n\t\"cat\",\n\t\"clear\",\n\t\"exit\",\n\t\"env\",\n\t\"export\",\n\t\"which\",\n\t\"source\",\n\t\".\",\n\t\"sudo\",\n\t\"man\",\n\t\"open\",\n]);\n\nfunction entryToStep(entry: HistoryEntry, ignore: Set<string>): CrossCliStep | null {\n\tconst [raw, ...rest] = entry.argv;\n\tif (!raw) return null;\n\n\t// Skip absolute paths, relative paths, and variables being used as the \"cli\"\n\tif (raw.startsWith(\"/\") || raw.startsWith(\"./\") || raw.startsWith(\"../\") || raw.startsWith(\"$\")) return null;\n\n\t// CLI names must look like program names: alphanumeric start, no slashes\n\tif (!/^[a-zA-Z0-9_-]+$/.test(raw)) return null;\n\n\tif (ignore.has(raw)) return null;\n\n\tconst sub =\n\t\trest.find(arg => !arg.startsWith(\"-\") && !arg.startsWith(\"$\") && /^[a-z]/i.test(arg)) ?? \"(root)\";\n\treturn { cli: raw, subcommand: sub };\n}\n\nfunction dedupeConsecutive(steps: CrossCliStep[]): CrossCliStep[] {\n\tconst out: CrossCliStep[] = [];\n\tfor (const s of steps) {\n\t\tconst last = out[out.length - 1];\n\t\tif (!last || last.cli !== s.cli || last.subcommand !== s.subcommand) {\n\t\t\tout.push(s);\n\t\t}\n\t}\n\treturn out;\n}\n\nfunction stepKey(step: CrossCliStep): string {\n\treturn `${step.cli} ${step.subcommand}`;\n}\n\nfunction pathSignature(path: CrossCliStep[]): string {\n\treturn path.map(stepKey).join(\" → \");\n}\n\nfunction countDistinctCLIs(path: CrossCliStep[]): number {\n\treturn new Set(path.map(s => s.cli)).size;\n}\n\n/**\n * Mine workflows that cross multiple CLIs. Unlike `mineCli`, this does NOT filter\n * to a single binary up front. It looks at every command in a session and detects\n * recurring sequences that weave between tools — e.g. `git push → gh pr create`,\n * `docker build → docker push → kubectl apply`, `bun test → git commit → git push`.\n */\nexport async function mineCrossCli(options: CrossCliOptions = {}): Promise<CrossCliResult> {\n\tconst path = options.historyPath ?? defaultHistoryPath();\n\tif (!path) {\n\t\tthrow new Error(\"Could not determine shell history path. Pass historyPath explicitly.\");\n\t}\n\n\tconst text = await readHistoryFile(path);\n\tconst entries = parseHistory(text);\n\tconst sessions = segmentSessions(entries, options.sessionGapMinutes ?? 10);\n\n\tconst ignore = new Set(options.ignoreCLIs ?? Array.from(DEFAULT_IGNORE));\n\tconst allowed = options.allowedCLIs && options.allowedCLIs.length > 0 ? new Set(options.allowedCLIs) : null;\n\n\tconst minSupport = options.minSupport ?? 3;\n\tconst minLen = options.minPathLength ?? 2;\n\tconst maxLen = options.maxPathLength ?? 5;\n\tconst minDistinctCLIs = options.minDistinctCLIs ?? 2;\n\n\tconst pathCounts = new Map<string, { path: CrossCliStep[]; count: number }>();\n\tconst distinctCLIs = new Set<string>();\n\tlet totalTransitions = 0;\n\n\tfor (const session of sessions) {\n\t\tconst steps: CrossCliStep[] = [];\n\t\tfor (const entry of session.entries) {\n\t\t\tconst step = entryToStep(entry, ignore);\n\t\t\tif (!step) continue;\n\t\t\tif (allowed && !allowed.has(step.cli)) continue;\n\t\t\tdistinctCLIs.add(step.cli);\n\t\t\tsteps.push(step);\n\t\t}\n\n\t\tconst deduped = dedupeConsecutive(steps);\n\t\tif (deduped.length >= 2) totalTransitions += deduped.length - 1;\n\n\t\tfor (let start = 0; start < deduped.length; start++) {\n\t\t\tconst maxEnd = Math.min(start + maxLen, deduped.length);\n\t\t\tfor (let end = start + minLen; end <= maxEnd; end++) {\n\t\t\t\tconst slice = deduped.slice(start, end);\n\t\t\t\tif (countDistinctCLIs(slice) < minDistinctCLIs) continue;\n\t\t\t\tconst sig = pathSignature(slice);\n\t\t\t\tconst existing = pathCounts.get(sig);\n\t\t\t\tif (existing) {\n\t\t\t\t\texisting.count += 1;\n\t\t\t\t} else {\n\t\t\t\t\tpathCounts.set(sig, { path: slice, count: 1 });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst clusters = Array.from(pathCounts.entries())\n\t\t.map(([signature, { path, count }]) => ({\n\t\t\tsignature,\n\t\t\tpath,\n\t\t\tsupport: count,\n\t\t\tuniqueCLIs: countDistinctCLIs(path),\n\t\t}))\n\t\t.filter(c => c.support >= minSupport)\n\t\t.sort((a, b) => {\n\t\t\t// Prefer more-distinct, then longer, then higher-support\n\t\t\tif (b.uniqueCLIs !== a.uniqueCLIs) return b.uniqueCLIs - a.uniqueCLIs;\n\t\t\tif (b.path.length !== a.path.length) return b.path.length - a.path.length;\n\t\t\treturn b.support - a.support;\n\t\t});\n\n\t// Remove subpaths fully contained in longer kept paths\n\tconst keptPaths: CrossCliWorkflow[] = [];\n\tfor (const cluster of clusters) {\n\t\tconst coveredBy = keptPaths.find(\n\t\t\tk => k.signature !== cluster.signature && k.signature.includes(cluster.signature) && k.support >= cluster.support * 0.7,\n\t\t);\n\t\tif (!coveredBy) {\n\t\t\tkeptPaths.push({\n\t\t\t\tpath: cluster.path,\n\t\t\t\tsupport: cluster.support,\n\t\t\t\tsignature: cluster.signature,\n\t\t\t\tuniqueCLIs: cluster.uniqueCLIs,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst topK = options.topK ?? 10;\n\n\treturn {\n\t\tworkflows: keptPaths.slice(0, topK),\n\t\tsessionsAnalyzed: sessions.length,\n\t\tdistinctCLIs: Array.from(distinctCLIs).sort(),\n\t\ttotalTransitions,\n\t};\n}\n\n/**\n * Convert a CrossCliWorkflow into a Workflow suitable for the flow renderer.\n * Each node is labeled with \"<cli> <sub>\" so the DAG makes the cross-CLI nature obvious.\n */\nexport function crossCliToFlowWorkflow(workflow: CrossCliWorkflow) {\n\tconst nodes = workflow.path.map((step, idx) => ({\n\t\tid: `n${idx}`,\n\t\tcommand: [step.cli, step.subcommand],\n\t\tlabel: `${step.cli} ${step.subcommand}`,\n\t}));\n\tconst edges = [];\n\tfor (let i = 0; i < nodes.length - 1; i++) {\n\t\tedges.push({ from: nodes[i]!.id, to: nodes[i + 1]!.id });\n\t}\n\treturn {\n\t\tname: workflow.signature,\n\t\tdescription: `Cross-CLI workflow seen ${workflow.support}× (${workflow.uniqueCLIs} tools)`,\n\t\tcli: workflow.path[0]?.cli ?? \"multi\",\n\t\tnodes,\n\t\tedges,\n\t};\n}\n",
15
15
  "import { parseHistory, readHistoryFile, defaultHistoryPath, tokenize, detectHistoryFormat } from \"./history\";\nimport { segmentSessions, filterByCli } from \"./sessions\";\nimport { buildTransitions, normalizeTransitions, extractSubcommand, extractSubcommandPath } from \"./transitions\";\nimport { extractPaths, clusterIntoWorkflows } from \"./workflows\";\nimport { computeStats } from \"./stats\";\nimport { suggestSkills, type SkillSuggestion } from \"./suggest\";\nimport { minedToFlowWorkflow } from \"./to-flow\";\nimport { computeActivity, formatTimeRange, type ActivityProfile } from \"./activity\";\nimport { sparkline, labeledSparkline, sparkline2d } from \"./sparkline\";\nimport { mineCrossCli, crossCliToFlowWorkflow, type CrossCliOptions, type CrossCliResult, type CrossCliWorkflow, type CrossCliStep } from \"./cross-cli\";\nimport type { HistoryEntry, Session, Transition, MinedWorkflow, CliUsageStats, MineOptions } from \"./types\";\n\nexport type {\n\tHistoryEntry,\n\tSession,\n\tTransition,\n\tMinedWorkflow,\n\tCliUsageStats,\n\tMineOptions,\n\tSkillSuggestion,\n\tActivityProfile,\n\tCrossCliOptions,\n\tCrossCliResult,\n\tCrossCliWorkflow,\n\tCrossCliStep,\n};\nexport {\n\tparseHistory,\n\treadHistoryFile,\n\tdefaultHistoryPath,\n\ttokenize,\n\tdetectHistoryFormat,\n\tsegmentSessions,\n\tfilterByCli,\n\tbuildTransitions,\n\tnormalizeTransitions,\n\textractSubcommand,\n\textractSubcommandPath,\n\textractPaths,\n\tclusterIntoWorkflows,\n\tcomputeStats,\n\tsuggestSkills,\n\tminedToFlowWorkflow,\n\tcomputeActivity,\n\tformatTimeRange,\n\tsparkline,\n\tlabeledSparkline,\n\tsparkline2d,\n\tmineCrossCli,\n\tcrossCliToFlowWorkflow,\n};\n\nexport interface MineResult {\n\tcli: string;\n\tstats: CliUsageStats;\n\ttransitions: Transition[];\n\tworkflows: MinedWorkflow[];\n\tsuggestions: SkillSuggestion[];\n\tsessionsAnalyzed: number;\n\tactivity: ActivityProfile;\n}\n\nexport async function mineCli(cli: string, options: MineOptions = {}): Promise<MineResult> {\n\tconst path = options.historyPath ?? defaultHistoryPath();\n\tif (!path) {\n\t\tthrow new Error(\"Could not determine shell history path. Pass historyPath explicitly.\");\n\t}\n\n\tconst text = await readHistoryFile(path);\n\tconst entries = parseHistory(text);\n\tconst allSessions = segmentSessions(entries, options.sessionGapMinutes ?? 10);\n\tconst cliSessions = filterByCli(allSessions, cli);\n\n\tconst stats = computeStats(entries, allSessions, cli);\n\n\tconst rawTransitions = buildTransitions(cliSessions);\n\tconst transitions = normalizeTransitions(\n\t\trawTransitions,\n\t\toptions.minSupport ?? 3,\n\t\toptions.minConfidence ?? 0.2,\n\t);\n\n\tconst paths = extractPaths(\n\t\tcliSessions,\n\t\toptions.minPathLength ?? 2,\n\t\toptions.maxPathLength ?? 6,\n\t);\n\tconst workflows = clusterIntoWorkflows(paths, cli, {\n\t\tminSupport: options.minSupport ?? 3,\n\t});\n\n\tconst suggestions = suggestSkills(workflows, stats);\n\n\tconst cliEntries = entries.filter(e => e.argv[0] === cli);\n\tconst activity = computeActivity(cliEntries);\n\n\treturn {\n\t\tcli,\n\t\tstats,\n\t\ttransitions,\n\t\tworkflows,\n\t\tsuggestions,\n\t\tsessionsAnalyzed: cliSessions.length,\n\t\tactivity,\n\t};\n}\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "AE63817E77D801AB64756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "7E6EEF85044CDF0D64756E2164756E21",
19
19
  "names": []
20
20
  }
package/dist/cli.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  mineCrossCli,
12
12
  minedToFlowWorkflow,
13
13
  sparkline2d
14
- } from "./chunk-k5enbxc9.js";
14
+ } from "./chunk-caxpk1s2.js";
15
15
  import {
16
16
  NullDelegate,
17
17
  runArchaeology
@@ -23,7 +23,7 @@ import {
23
23
  sparkline2d,
24
24
  suggestSkills,
25
25
  tokenize
26
- } from "../chunk-k5enbxc9.js";
26
+ } from "../chunk-caxpk1s2.js";
27
27
  export {
28
28
  tokenize,
29
29
  suggestSkills,
@@ -27,20 +27,22 @@ export interface SparklineOptions {
27
27
  }
28
28
  export declare function sparkline(data: number[], opts?: SparklineOptions): string;
29
29
  /**
30
- * Render a sparkline across TWO lines so every cell is the same visual height.
30
+ * Render a sparkline across TWO lines so every cell is the same visual height
31
+ * and there are NO empty spots inside the chart area.
31
32
  *
32
- * The single-line `sparkline()` has a subtle problem: block glyphs (▁▂▃...) grow
33
- * from the baseline upward, leaving the top of the cell empty. When you place
34
- * them next to "░" zero-markers that fill the whole cell, the zeros look like
35
- * fat rectangles and the active bars look like short stubs floating in gaps —
36
- * the visual rhythm breaks.
33
+ * The trick: every cell is always painted either with a solid block (`█`) or
34
+ * with the zero-fill glyph (`░`). There are no fractional blocks like `▁▃▅▇`
35
+ * that grow from the baseline and leave the top of the cell visually black
36
+ * against the terminal background.
37
37
  *
38
- * This version splits each value across two rows:
39
- * - Top row shows anything with level ≥ 4 (upper half of the cell filled)
40
- * - Bottom row shows anything with level 1 (lower half)
38
+ * Each cell is 2 rows tall = 2 discrete levels of height:
39
+ * - value = 0 → ░ / (texture, texture)
40
+ * - value <= ~50% max → ░ / █ (texture, solid short bar)
41
+ * - value > ~50% max → █ / █ (solid, solid — tall bar)
41
42
  *
42
- * The result is a sparkline where every slot is a full-height cell — either
43
- * two stacked `░` for a zero, two stacked blocks for a full value, or a mix.
43
+ * You lose fine-grained resolution (only 2 levels for non-zero values), but
44
+ * you gain a perfectly uniform visual rhythm with zero dead pixels. The top
45
+ * line of the chart is always either `░` (background) or `█` (bar top).
44
46
  */
45
47
  export declare function sparkline2d(data: number[], opts?: SparklineOptions): {
46
48
  top: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crafter/cli-tree",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "Explore and map any CLI tool deeply. Parse --help trees, mine shell history for repeated workflows, surface hidden flags via LLM archaeology, and suggest new agent skills from your usage patterns.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -48,20 +48,22 @@ export function sparkline(data: number[], opts: SparklineOptions = {}): string {
48
48
  }
49
49
 
50
50
  /**
51
- * Render a sparkline across TWO lines so every cell is the same visual height.
51
+ * Render a sparkline across TWO lines so every cell is the same visual height
52
+ * and there are NO empty spots inside the chart area.
52
53
  *
53
- * The single-line `sparkline()` has a subtle problem: block glyphs (▁▂▃...) grow
54
- * from the baseline upward, leaving the top of the cell empty. When you place
55
- * them next to "░" zero-markers that fill the whole cell, the zeros look like
56
- * fat rectangles and the active bars look like short stubs floating in gaps —
57
- * the visual rhythm breaks.
54
+ * The trick: every cell is always painted either with a solid block (`█`) or
55
+ * with the zero-fill glyph (`░`). There are no fractional blocks like `▁▃▅▇`
56
+ * that grow from the baseline and leave the top of the cell visually black
57
+ * against the terminal background.
58
58
  *
59
- * This version splits each value across two rows:
60
- * - Top row shows anything with level ≥ 4 (upper half of the cell filled)
61
- * - Bottom row shows anything with level 1 (lower half)
59
+ * Each cell is 2 rows tall = 2 discrete levels of height:
60
+ * - value = 0 → ░ / (texture, texture)
61
+ * - value <= ~50% max → ░ / █ (texture, solid short bar)
62
+ * - value > ~50% max → █ / █ (solid, solid — tall bar)
62
63
  *
63
- * The result is a sparkline where every slot is a full-height cell — either
64
- * two stacked `░` for a zero, two stacked blocks for a full value, or a mix.
64
+ * You lose fine-grained resolution (only 2 levels for non-zero values), but
65
+ * you gain a perfectly uniform visual rhythm with zero dead pixels. The top
66
+ * line of the chart is always either `░` (background) or `█` (bar top).
65
67
  */
66
68
  export function sparkline2d(data: number[], opts: SparklineOptions = {}): { top: string; bottom: string } {
67
69
  if (data.length === 0) return { top: "", bottom: "" };
@@ -73,12 +75,6 @@ export function sparkline2d(data: number[], opts: SparklineOptions = {}): { top:
73
75
  return { top: row, bottom: row };
74
76
  }
75
77
 
76
- // Each value maps to a level 0-8 where 0 = empty, 8 = fully filled both rows.
77
- // Bottom row renders levels 1-4 as ▁▃▅▇, level ≥ 5 is █ (bottom is full).
78
- // Top row renders levels 5-8 as ▁▃▅█, level < 5 is zero (top is empty).
79
- const topGlyphs = ["▁", "▃", "▅", "█"] as const;
80
- const bottomGlyphs = ["▁", "▃", "▅", "▇"] as const;
81
-
82
78
  let top = "";
83
79
  let bottom = "";
84
80
 
@@ -88,18 +84,16 @@ export function sparkline2d(data: number[], opts: SparklineOptions = {}): { top:
88
84
  bottom += zero;
89
85
  continue;
90
86
  }
91
- // Normalize to level 1-8
92
- const level = Math.min(8, Math.max(1, Math.round((value / max) * 8)));
93
87
 
94
- if (level <= 4) {
95
- // Only the bottom cell has content
96
- top += zero;
97
- bottom += bottomGlyphs[level - 1];
88
+ // Active value: bottom row is always a solid block.
89
+ bottom += "█";
90
+
91
+ // Top row is a solid block if the value is in the upper half of the
92
+ // range, texture otherwise. This gives us a 2-tier bar height.
93
+ if (value / max > 0.5) {
94
+ top += "█";
98
95
  } else {
99
- // Bottom is full, top shows the overflow
100
- bottom += "█";
101
- const topLevel = level - 4;
102
- top += topGlyphs[topLevel - 1];
96
+ top += zero;
103
97
  }
104
98
  }
105
99