@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
|
-
|
|
524
|
-
if (
|
|
525
|
-
top +=
|
|
526
|
-
bottom += bottomGlyphs[level - 1];
|
|
521
|
+
bottom += "█";
|
|
522
|
+
if (value / max > 0.5) {
|
|
523
|
+
top += "█";
|
|
527
524
|
} else {
|
|
528
|
-
|
|
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=
|
|
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
|
|
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": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "7E6EEF85044CDF0D64756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
package/dist/cli.js
CHANGED
package/dist/miner/index.js
CHANGED
|
@@ -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
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
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
|
-
*
|
|
39
|
-
* -
|
|
40
|
-
* -
|
|
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
|
-
*
|
|
43
|
-
*
|
|
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
|
+
"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",
|
package/src/miner/sparkline.ts
CHANGED
|
@@ -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
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
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
|
-
*
|
|
60
|
-
* -
|
|
61
|
-
* -
|
|
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
|
-
*
|
|
64
|
-
*
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
100
|
-
bottom += "█";
|
|
101
|
-
const topLevel = level - 4;
|
|
102
|
-
top += topGlyphs[topLevel - 1];
|
|
96
|
+
top += zero;
|
|
103
97
|
}
|
|
104
98
|
}
|
|
105
99
|
|