@crafter/cli-tree 0.1.3 → 0.2.0
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/{chunk-dnq2rnr7.js → chunk-9pnqbn7b.js} +224 -3
- package/dist/{chunk-dnq2rnr7.js.map → chunk-9pnqbn7b.js.map} +7 -4
- package/dist/cli.js +199 -20
- package/dist/cli.js.map +3 -3
- package/dist/miner/activity.d.ts +21 -0
- package/dist/miner/cross-cli.d.ts +55 -0
- package/dist/miner/index.d.ts +6 -2
- package/dist/miner/index.js +14 -2
- package/dist/miner/index.js.map +1 -1
- package/dist/miner/sparkline.d.ts +14 -0
- package/package.json +1 -1
- package/src/cli.ts +228 -21
- package/src/miner/activity.ts +71 -0
- package/src/miner/cross-cli.ts +216 -0
- package/src/miner/index.ts +28 -1
- package/src/miner/sparkline.ts +31 -0
|
@@ -424,6 +424,224 @@ function minedToFlowWorkflow(mined, occurrences) {
|
|
|
424
424
|
};
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
+
// src/miner/activity.ts
|
|
428
|
+
function computeActivity(entries, now = new Date) {
|
|
429
|
+
const hourOfDay = new Array(24).fill(0);
|
|
430
|
+
const dayOfWeek = new Array(7).fill(0);
|
|
431
|
+
const last30Days = new Array(30).fill(0);
|
|
432
|
+
let first = Infinity;
|
|
433
|
+
let last = 0;
|
|
434
|
+
let total = 0;
|
|
435
|
+
const nowMs = now.getTime();
|
|
436
|
+
const dayMs = 24 * 60 * 60 * 1000;
|
|
437
|
+
for (const entry of entries) {
|
|
438
|
+
if (!entry.timestamp || entry.timestamp <= 0)
|
|
439
|
+
continue;
|
|
440
|
+
total += 1;
|
|
441
|
+
if (entry.timestamp < first)
|
|
442
|
+
first = entry.timestamp;
|
|
443
|
+
if (entry.timestamp > last)
|
|
444
|
+
last = entry.timestamp;
|
|
445
|
+
const date = new Date(entry.timestamp * 1000);
|
|
446
|
+
hourOfDay[date.getHours()] += 1;
|
|
447
|
+
dayOfWeek[date.getDay()] += 1;
|
|
448
|
+
const ageDays = Math.floor((nowMs - date.getTime()) / dayMs);
|
|
449
|
+
if (ageDays >= 0 && ageDays < 30) {
|
|
450
|
+
last30Days[29 - ageDays] += 1;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
return {
|
|
454
|
+
total,
|
|
455
|
+
hourOfDay,
|
|
456
|
+
dayOfWeek,
|
|
457
|
+
last30Days,
|
|
458
|
+
firstSeen: first === Infinity ? 0 : first,
|
|
459
|
+
lastSeen: last
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
function formatTimeRange(firstSeen, lastSeen) {
|
|
463
|
+
if (!firstSeen || !lastSeen)
|
|
464
|
+
return "no data";
|
|
465
|
+
const first = new Date(firstSeen * 1000);
|
|
466
|
+
const last = new Date(lastSeen * 1000);
|
|
467
|
+
const days = Math.round((last.getTime() - first.getTime()) / (24 * 60 * 60 * 1000));
|
|
468
|
+
if (days < 1)
|
|
469
|
+
return "less than a day";
|
|
470
|
+
if (days < 30)
|
|
471
|
+
return `${days} days`;
|
|
472
|
+
if (days < 365)
|
|
473
|
+
return `${Math.round(days / 30)} months`;
|
|
474
|
+
return `${(days / 365).toFixed(1)} years`;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// src/miner/sparkline.ts
|
|
478
|
+
var BLOCKS = ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"];
|
|
479
|
+
function sparkline(data, opts = {}) {
|
|
480
|
+
if (data.length === 0)
|
|
481
|
+
return "";
|
|
482
|
+
const empty = opts.empty ?? " ";
|
|
483
|
+
const max = Math.max(...data);
|
|
484
|
+
if (max === 0)
|
|
485
|
+
return empty.repeat(data.length);
|
|
486
|
+
return data.map((value) => {
|
|
487
|
+
if (value === 0)
|
|
488
|
+
return empty;
|
|
489
|
+
const idx = Math.min(BLOCKS.length - 1, Math.max(0, Math.round(value / max * (BLOCKS.length - 1))));
|
|
490
|
+
return BLOCKS[idx];
|
|
491
|
+
}).join("");
|
|
492
|
+
}
|
|
493
|
+
function labeledSparkline(label, data, labelWidth = 3) {
|
|
494
|
+
return `${label.padEnd(labelWidth)} ${sparkline(data)}`;
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
// src/miner/cross-cli.ts
|
|
498
|
+
var DEFAULT_IGNORE = new Set([
|
|
499
|
+
"ls",
|
|
500
|
+
"cd",
|
|
501
|
+
"pwd",
|
|
502
|
+
"echo",
|
|
503
|
+
"cat",
|
|
504
|
+
"clear",
|
|
505
|
+
"exit",
|
|
506
|
+
"env",
|
|
507
|
+
"export",
|
|
508
|
+
"which",
|
|
509
|
+
"source",
|
|
510
|
+
".",
|
|
511
|
+
"sudo",
|
|
512
|
+
"man",
|
|
513
|
+
"open"
|
|
514
|
+
]);
|
|
515
|
+
function entryToStep(entry, ignore) {
|
|
516
|
+
const [raw, ...rest] = entry.argv;
|
|
517
|
+
if (!raw)
|
|
518
|
+
return null;
|
|
519
|
+
if (raw.startsWith("/") || raw.startsWith("./") || raw.startsWith("../") || raw.startsWith("$"))
|
|
520
|
+
return null;
|
|
521
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(raw))
|
|
522
|
+
return null;
|
|
523
|
+
if (ignore.has(raw))
|
|
524
|
+
return null;
|
|
525
|
+
const sub = rest.find((arg) => !arg.startsWith("-") && !arg.startsWith("$") && /^[a-z]/i.test(arg)) ?? "(root)";
|
|
526
|
+
return { cli: raw, subcommand: sub };
|
|
527
|
+
}
|
|
528
|
+
function dedupeConsecutive2(steps) {
|
|
529
|
+
const out = [];
|
|
530
|
+
for (const s of steps) {
|
|
531
|
+
const last = out[out.length - 1];
|
|
532
|
+
if (!last || last.cli !== s.cli || last.subcommand !== s.subcommand) {
|
|
533
|
+
out.push(s);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
return out;
|
|
537
|
+
}
|
|
538
|
+
function stepKey(step) {
|
|
539
|
+
return `${step.cli} ${step.subcommand}`;
|
|
540
|
+
}
|
|
541
|
+
function pathSignature(path) {
|
|
542
|
+
return path.map(stepKey).join(" → ");
|
|
543
|
+
}
|
|
544
|
+
function countDistinctCLIs(path) {
|
|
545
|
+
return new Set(path.map((s) => s.cli)).size;
|
|
546
|
+
}
|
|
547
|
+
async function mineCrossCli(options = {}) {
|
|
548
|
+
const path = options.historyPath ?? defaultHistoryPath();
|
|
549
|
+
if (!path) {
|
|
550
|
+
throw new Error("Could not determine shell history path. Pass historyPath explicitly.");
|
|
551
|
+
}
|
|
552
|
+
const text = await readHistoryFile(path);
|
|
553
|
+
const entries = parseHistory(text);
|
|
554
|
+
const sessions = segmentSessions(entries, options.sessionGapMinutes ?? 10);
|
|
555
|
+
const ignore = new Set(options.ignoreCLIs ?? Array.from(DEFAULT_IGNORE));
|
|
556
|
+
const allowed = options.allowedCLIs && options.allowedCLIs.length > 0 ? new Set(options.allowedCLIs) : null;
|
|
557
|
+
const minSupport = options.minSupport ?? 3;
|
|
558
|
+
const minLen = options.minPathLength ?? 2;
|
|
559
|
+
const maxLen = options.maxPathLength ?? 5;
|
|
560
|
+
const minDistinctCLIs = options.minDistinctCLIs ?? 2;
|
|
561
|
+
const pathCounts = new Map;
|
|
562
|
+
const distinctCLIs = new Set;
|
|
563
|
+
let totalTransitions = 0;
|
|
564
|
+
for (const session of sessions) {
|
|
565
|
+
const steps = [];
|
|
566
|
+
for (const entry of session.entries) {
|
|
567
|
+
const step = entryToStep(entry, ignore);
|
|
568
|
+
if (!step)
|
|
569
|
+
continue;
|
|
570
|
+
if (allowed && !allowed.has(step.cli))
|
|
571
|
+
continue;
|
|
572
|
+
distinctCLIs.add(step.cli);
|
|
573
|
+
steps.push(step);
|
|
574
|
+
}
|
|
575
|
+
const deduped = dedupeConsecutive2(steps);
|
|
576
|
+
if (deduped.length >= 2)
|
|
577
|
+
totalTransitions += deduped.length - 1;
|
|
578
|
+
for (let start = 0;start < deduped.length; start++) {
|
|
579
|
+
const maxEnd = Math.min(start + maxLen, deduped.length);
|
|
580
|
+
for (let end = start + minLen;end <= maxEnd; end++) {
|
|
581
|
+
const slice = deduped.slice(start, end);
|
|
582
|
+
if (countDistinctCLIs(slice) < minDistinctCLIs)
|
|
583
|
+
continue;
|
|
584
|
+
const sig = pathSignature(slice);
|
|
585
|
+
const existing = pathCounts.get(sig);
|
|
586
|
+
if (existing) {
|
|
587
|
+
existing.count += 1;
|
|
588
|
+
} else {
|
|
589
|
+
pathCounts.set(sig, { path: slice, count: 1 });
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
const clusters = Array.from(pathCounts.entries()).map(([signature, { path: path2, count }]) => ({
|
|
595
|
+
signature,
|
|
596
|
+
path: path2,
|
|
597
|
+
support: count,
|
|
598
|
+
uniqueCLIs: countDistinctCLIs(path2)
|
|
599
|
+
})).filter((c) => c.support >= minSupport).sort((a, b) => {
|
|
600
|
+
if (b.uniqueCLIs !== a.uniqueCLIs)
|
|
601
|
+
return b.uniqueCLIs - a.uniqueCLIs;
|
|
602
|
+
if (b.path.length !== a.path.length)
|
|
603
|
+
return b.path.length - a.path.length;
|
|
604
|
+
return b.support - a.support;
|
|
605
|
+
});
|
|
606
|
+
const keptPaths = [];
|
|
607
|
+
for (const cluster of clusters) {
|
|
608
|
+
const coveredBy = keptPaths.find((k) => k.signature !== cluster.signature && k.signature.includes(cluster.signature) && k.support >= cluster.support * 0.7);
|
|
609
|
+
if (!coveredBy) {
|
|
610
|
+
keptPaths.push({
|
|
611
|
+
path: cluster.path,
|
|
612
|
+
support: cluster.support,
|
|
613
|
+
signature: cluster.signature,
|
|
614
|
+
uniqueCLIs: cluster.uniqueCLIs
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
const topK = options.topK ?? 10;
|
|
619
|
+
return {
|
|
620
|
+
workflows: keptPaths.slice(0, topK),
|
|
621
|
+
sessionsAnalyzed: sessions.length,
|
|
622
|
+
distinctCLIs: Array.from(distinctCLIs).sort(),
|
|
623
|
+
totalTransitions
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
function crossCliToFlowWorkflow(workflow) {
|
|
627
|
+
const nodes = workflow.path.map((step, idx) => ({
|
|
628
|
+
id: `n${idx}`,
|
|
629
|
+
command: [step.cli, step.subcommand],
|
|
630
|
+
label: `${step.cli} ${step.subcommand}`
|
|
631
|
+
}));
|
|
632
|
+
const edges = [];
|
|
633
|
+
for (let i = 0;i < nodes.length - 1; i++) {
|
|
634
|
+
edges.push({ from: nodes[i].id, to: nodes[i + 1].id });
|
|
635
|
+
}
|
|
636
|
+
return {
|
|
637
|
+
name: workflow.signature,
|
|
638
|
+
description: `Cross-CLI workflow seen ${workflow.support}× (${workflow.uniqueCLIs} tools)`,
|
|
639
|
+
cli: workflow.path[0]?.cli ?? "multi",
|
|
640
|
+
nodes,
|
|
641
|
+
edges
|
|
642
|
+
};
|
|
643
|
+
}
|
|
644
|
+
|
|
427
645
|
// src/miner/index.ts
|
|
428
646
|
async function mineCli(cli, options = {}) {
|
|
429
647
|
const path = options.historyPath ?? defaultHistoryPath();
|
|
@@ -442,16 +660,19 @@ async function mineCli(cli, options = {}) {
|
|
|
442
660
|
minSupport: options.minSupport ?? 3
|
|
443
661
|
});
|
|
444
662
|
const suggestions = suggestSkills(workflows, stats);
|
|
663
|
+
const cliEntries = entries.filter((e) => e.argv[0] === cli);
|
|
664
|
+
const activity = computeActivity(cliEntries);
|
|
445
665
|
return {
|
|
446
666
|
cli,
|
|
447
667
|
stats,
|
|
448
668
|
transitions,
|
|
449
669
|
workflows,
|
|
450
670
|
suggestions,
|
|
451
|
-
sessionsAnalyzed: cliSessions.length
|
|
671
|
+
sessionsAnalyzed: cliSessions.length,
|
|
672
|
+
activity
|
|
452
673
|
};
|
|
453
674
|
}
|
|
454
675
|
|
|
455
|
-
export { readHistoryFile, detectHistoryFormat, parseHistory, tokenize, defaultHistoryPath, segmentSessions, filterByCli, extractSubcommand, extractSubcommandPath, buildTransitions, normalizeTransitions, extractPaths, clusterIntoWorkflows, computeStats, suggestSkills, minedToFlowWorkflow, mineCli };
|
|
676
|
+
export { readHistoryFile, detectHistoryFormat, parseHistory, tokenize, defaultHistoryPath, segmentSessions, filterByCli, extractSubcommand, extractSubcommandPath, buildTransitions, normalizeTransitions, extractPaths, clusterIntoWorkflows, computeStats, suggestSkills, minedToFlowWorkflow, computeActivity, formatTimeRange, sparkline, labeledSparkline, mineCrossCli, crossCliToFlowWorkflow, mineCli };
|
|
456
677
|
|
|
457
|
-
//# debugId=
|
|
678
|
+
//# debugId=33FC9CA5633A893B64756E2164756E21
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/miner/history.ts", "../src/miner/sessions.ts", "../src/miner/transitions.ts", "../src/miner/workflows.ts", "../src/miner/stats.ts", "../src/miner/suggest.ts", "../src/miner/to-flow.ts", "../src/miner/index.ts"],
|
|
3
|
+
"sources": ["../src/miner/history.ts", "../src/miner/sessions.ts", "../src/miner/transitions.ts", "../src/miner/workflows.ts", "../src/miner/stats.ts", "../src/miner/suggest.ts", "../src/miner/to-flow.ts", "../src/miner/activity.ts", "../src/miner/sparkline.ts", "../src/miner/cross-cli.ts", "../src/miner/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { HistoryEntry } from \"./types\";\n\nexport async function readHistoryFile(path: string): Promise<string> {\n\treturn await Bun.file(path).text();\n}\n\nexport function detectHistoryFormat(text: string): \"zsh-extended\" | \"bash\" | \"fish\" | \"unknown\" {\n\tconst firstNonEmpty = text.split(\"\\n\").find(l => l.trim().length > 0);\n\tif (!firstNonEmpty) return \"unknown\";\n\tif (/^: \\d+:\\d+;/.test(firstNonEmpty)) return \"zsh-extended\";\n\tif (/^- cmd: /.test(firstNonEmpty)) return \"fish\";\n\treturn \"bash\";\n}\n\nexport function parseHistory(text: string): HistoryEntry[] {\n\tconst format = detectHistoryFormat(text);\n\tswitch (format) {\n\t\tcase \"zsh-extended\":\n\t\t\treturn parseZshExtended(text);\n\t\tcase \"fish\":\n\t\t\treturn parseFishHistory(text);\n\t\tcase \"bash\":\n\t\tdefault:\n\t\t\treturn parseBashHistory(text);\n\t}\n}\n\nfunction parseZshExtended(text: string): HistoryEntry[] {\n\tconst entries: HistoryEntry[] = [];\n\tconst lines = text.split(\"\\n\");\n\n\tlet pending: { timestamp: number; cmd: string } | null = null;\n\n\tfor (const rawLine of lines) {\n\t\tconst match = rawLine.match(/^: (\\d+):\\d+;(.*)$/);\n\t\tif (match) {\n\t\t\tif (pending) {\n\t\t\t\tentries.push(buildEntry(pending.timestamp, pending.cmd));\n\t\t\t}\n\t\t\tpending = { timestamp: Number.parseInt(match[1]!, 10), cmd: match[2]! };\n\t\t} else if (pending) {\n\t\t\tpending.cmd += \"\\n\" + rawLine;\n\t\t}\n\t}\n\n\tif (pending) {\n\t\tentries.push(buildEntry(pending.timestamp, pending.cmd));\n\t}\n\n\treturn entries.filter(e => e.argv.length > 0);\n}\n\nfunction parseBashHistory(text: string): HistoryEntry[] {\n\tconst entries: HistoryEntry[] = [];\n\tconst lines = text.split(\"\\n\");\n\tlet currentTimestamp = 0;\n\n\tfor (const line of lines) {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) continue;\n\n\t\tif (/^#\\d+$/.test(trimmed)) {\n\t\t\tcurrentTimestamp = Number.parseInt(trimmed.slice(1), 10);\n\t\t\tcontinue;\n\t\t}\n\n\t\tentries.push(buildEntry(currentTimestamp, trimmed));\n\t}\n\n\treturn entries.filter(e => e.argv.length > 0);\n}\n\nfunction parseFishHistory(text: string): HistoryEntry[] {\n\tconst entries: HistoryEntry[] = [];\n\tconst blocks = text.split(/\\n(?=- cmd: )/);\n\n\tfor (const block of blocks) {\n\t\tconst cmdMatch = block.match(/- cmd: (.*)/);\n\t\tconst whenMatch = block.match(/when: (\\d+)/);\n\t\tif (!cmdMatch) continue;\n\t\tconst timestamp = whenMatch ? Number.parseInt(whenMatch[1]!, 10) : 0;\n\t\tentries.push(buildEntry(timestamp, cmdMatch[1]!));\n\t}\n\n\treturn entries.filter(e => e.argv.length > 0);\n}\n\nfunction buildEntry(timestamp: number, rawCmd: string): HistoryEntry {\n\tconst cleaned = stripContinuations(rawCmd).trim();\n\tconst argv = tokenize(cleaned);\n\treturn { timestamp, raw: cleaned, argv };\n}\n\nfunction stripContinuations(cmd: string): string {\n\treturn cmd.replace(/\\\\\\n/g, \" \").replace(/\\n\\s*/g, \" \");\n}\n\nexport function tokenize(cmd: string): string[] {\n\tconst tokens: string[] = [];\n\tlet current = \"\";\n\tlet inSingle = false;\n\tlet inDouble = false;\n\tlet escape = false;\n\n\tfor (let i = 0; i < cmd.length; i++) {\n\t\tconst ch = cmd[i]!;\n\t\tif (escape) {\n\t\t\tcurrent += ch;\n\t\t\tescape = false;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"\\\\\" && !inSingle) {\n\t\t\tescape = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === \"'\" && !inDouble) {\n\t\t\tinSingle = !inSingle;\n\t\t\tcontinue;\n\t\t}\n\t\tif (ch === '\"' && !inSingle) {\n\t\t\tinDouble = !inDouble;\n\t\t\tcontinue;\n\t\t}\n\t\tif (/\\s/.test(ch) && !inSingle && !inDouble) {\n\t\t\tif (current) {\n\t\t\t\ttokens.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif ((ch === \"|\" || ch === \";\" || ch === \"&\") && !inSingle && !inDouble) {\n\t\t\tif (current) {\n\t\t\t\ttokens.push(current);\n\t\t\t\tcurrent = \"\";\n\t\t\t}\n\t\t\treturn tokens;\n\t\t}\n\t\tcurrent += ch;\n\t}\n\n\tif (current) tokens.push(current);\n\treturn tokens;\n}\n\nexport function defaultHistoryPath(): string | null {\n\tconst home = process.env.HOME ?? \"\";\n\tif (!home) return null;\n\n\tconst candidates = [\n\t\t`${home}/.zsh_history`,\n\t\t`${home}/.bash_history`,\n\t\t`${home}/.config/fish/fish_history`,\n\t];\n\n\treturn candidates[0] ?? null;\n}\n",
|
|
6
6
|
"import type { HistoryEntry, Session } from \"./types\";\n\nexport function segmentSessions(entries: HistoryEntry[], gapMinutes = 10): Session[] {\n\tif (entries.length === 0) return [];\n\n\tconst sorted = [...entries].sort((a, b) => a.timestamp - b.timestamp);\n\tconst gapSeconds = gapMinutes * 60;\n\tconst sessions: Session[] = [];\n\n\tlet current: HistoryEntry[] = [sorted[0]!];\n\tlet sessionStart = sorted[0]!.timestamp;\n\tlet lastTimestamp = sorted[0]!.timestamp;\n\n\tfor (let i = 1; i < sorted.length; i++) {\n\t\tconst entry = sorted[i]!;\n\t\tconst gap = entry.timestamp - lastTimestamp;\n\n\t\tif (gap > gapSeconds) {\n\t\t\tsessions.push({ start: sessionStart, end: lastTimestamp, entries: current });\n\t\t\tcurrent = [entry];\n\t\t\tsessionStart = entry.timestamp;\n\t\t} else {\n\t\t\tcurrent.push(entry);\n\t\t}\n\t\tlastTimestamp = entry.timestamp;\n\t}\n\n\tsessions.push({ start: sessionStart, end: lastTimestamp, entries: current });\n\treturn sessions;\n}\n\nexport function filterByCli(sessions: Session[], cli: string): Session[] {\n\treturn sessions\n\t\t.map(session => ({\n\t\t\t...session,\n\t\t\tentries: session.entries.filter(e => e.argv[0] === cli),\n\t\t}))\n\t\t.filter(s => s.entries.length > 0);\n}\n",
|
|
@@ -9,9 +9,12 @@
|
|
|
9
9
|
"import type { HistoryEntry, CliUsageStats, Session } from \"./types\";\nimport { extractSubcommand } from \"./transitions\";\n\nexport function computeStats(entries: HistoryEntry[], sessions: Session[], cli: string): CliUsageStats {\n\tconst cliEntries = entries.filter(e => e.argv[0] === cli);\n\tconst cliSessions = sessions.filter(s => s.entries.some(e => e.argv[0] === cli));\n\n\tconst subcommandCounts = new Map<string, number>();\n\tconst flagCounts = new Map<string, number>();\n\n\tfor (const entry of cliEntries) {\n\t\tconst sub = extractSubcommand(entry);\n\t\tsubcommandCounts.set(sub, (subcommandCounts.get(sub) ?? 0) + 1);\n\n\t\tfor (const arg of entry.argv.slice(1)) {\n\t\t\tif (arg.startsWith(\"--\")) {\n\t\t\t\tconst flag = arg.split(\"=\")[0]!;\n\t\t\t\tflagCounts.set(flag, (flagCounts.get(flag) ?? 0) + 1);\n\t\t\t} else if (arg.startsWith(\"-\") && arg.length === 2) {\n\t\t\t\tflagCounts.set(arg, (flagCounts.get(arg) ?? 0) + 1);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst topSubcommands = Array.from(subcommandCounts.entries())\n\t\t.map(([subcommand, count]) => ({ subcommand, count }))\n\t\t.sort((a, b) => b.count - a.count)\n\t\t.slice(0, 10);\n\n\tconst topFlags = Array.from(flagCounts.entries())\n\t\t.map(([flag, count]) => ({ flag, count }))\n\t\t.sort((a, b) => b.count - a.count)\n\t\t.slice(0, 10);\n\n\treturn {\n\t\tcli,\n\t\ttotalInvocations: cliEntries.length,\n\t\tuniqueSubcommands: subcommandCounts.size,\n\t\ttopSubcommands,\n\t\ttopFlags,\n\t\tsessionCount: cliSessions.length,\n\t};\n}\n",
|
|
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
|
-
"import {
|
|
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 N days (most recent last) */\n\tlast30Days: number[];\n\t/** The earliest timestamp observed (unix seconds) */\n\tfirstSeen: number;\n\t/** The latest timestamp observed (unix seconds) */\n\tlastSeen: 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\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\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 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\t}\n\n\treturn {\n\t\ttotal,\n\t\thourOfDay,\n\t\tdayOfWeek,\n\t\tlast30Days,\n\t\tfirstSeen: first === Infinity ? 0 : first,\n\t\tlastSeen: last,\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 (▁▂▃▄▅▆▇█).\n */\n\nconst BLOCKS = [\"▁\", \"▂\", \"▃\", \"▄\", \"▅\", \"▆\", \"▇\", \"█\"] as const;\n\nexport function sparkline(data: number[], opts: { empty?: string } = {}): string {\n\tif (data.length === 0) return \"\";\n\tconst empty = opts.empty ?? \" \";\n\tconst max = Math.max(...data);\n\tif (max === 0) return empty.repeat(data.length);\n\n\treturn data\n\t\t.map(value => {\n\t\t\tif (value === 0) return empty;\n\t\t\tconst idx = Math.min(BLOCKS.length - 1, Math.max(0, Math.round((value / max) * (BLOCKS.length - 1))));\n\t\t\treturn BLOCKS[idx];\n\t\t})\n\t\t.join(\"\");\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
|
+
"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
|
+
"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 } 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\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"
|
|
13
16
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "33FC9CA5633A893B64756E2164756E21",
|
|
16
19
|
"names": []
|
|
17
20
|
}
|