@crafter/cli-tree 0.1.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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +328 -0
  3. package/dist/archaeology/cache.d.ts +11 -0
  4. package/dist/archaeology/delegate.d.ts +43 -0
  5. package/dist/archaeology/index.d.ts +12 -0
  6. package/dist/archaeology/index.js +61 -0
  7. package/dist/archaeology/index.js.map +9 -0
  8. package/dist/archaeology/llm.d.ts +1 -0
  9. package/dist/archaeology/merge.d.ts +3 -0
  10. package/dist/archaeology/orchestrator.d.ts +25 -0
  11. package/dist/archaeology/prompts.d.ts +13 -0
  12. package/dist/archaeology/types.d.ts +101 -0
  13. package/dist/archaeology/validate.d.ts +18 -0
  14. package/dist/chunk-57gtsvhb.js +434 -0
  15. package/dist/chunk-57gtsvhb.js.map +16 -0
  16. package/dist/chunk-5aahbfr2.js +293 -0
  17. package/dist/chunk-5aahbfr2.js.map +10 -0
  18. package/dist/chunk-pkfpaae1.js +678 -0
  19. package/dist/chunk-pkfpaae1.js.map +15 -0
  20. package/dist/chunk-q4se2rwe.js +181 -0
  21. package/dist/chunk-q4se2rwe.js.map +14 -0
  22. package/dist/chunk-v5w3w6bd.js +168 -0
  23. package/dist/chunk-v5w3w6bd.js.map +11 -0
  24. package/dist/chunk-ykze151b.js +770 -0
  25. package/dist/chunk-ykze151b.js.map +16 -0
  26. package/dist/cli.d.ts +2 -0
  27. package/dist/cli.js +433 -0
  28. package/dist/cli.js.map +10 -0
  29. package/dist/encoders/ansi.d.ts +2 -0
  30. package/dist/encoders/html.d.ts +10 -0
  31. package/dist/encoders/string.d.ts +2 -0
  32. package/dist/flow/encode.d.ts +5 -0
  33. package/dist/flow/index.d.ts +8 -0
  34. package/dist/flow/index.js +25 -0
  35. package/dist/flow/index.js.map +9 -0
  36. package/dist/flow/layout.d.ts +30 -0
  37. package/dist/flow/parse.d.ts +2 -0
  38. package/dist/flow/render.d.ts +3 -0
  39. package/dist/flow/types.d.ts +42 -0
  40. package/dist/flow/validate.d.ts +3 -0
  41. package/dist/flow/yaml.d.ts +4 -0
  42. package/dist/grid.d.ts +14 -0
  43. package/dist/index.d.ts +7 -0
  44. package/dist/index.js +21 -0
  45. package/dist/index.js.map +9 -0
  46. package/dist/miner/history.d.ts +6 -0
  47. package/dist/miner/index.d.ts +18 -0
  48. package/dist/miner/index.js +38 -0
  49. package/dist/miner/index.js.map +9 -0
  50. package/dist/miner/sessions.d.ts +3 -0
  51. package/dist/miner/stats.d.ts +2 -0
  52. package/dist/miner/suggest.d.ts +11 -0
  53. package/dist/miner/transitions.d.ts +6 -0
  54. package/dist/miner/types.d.ts +46 -0
  55. package/dist/miner/workflows.d.ts +11 -0
  56. package/dist/parse.d.ts +3 -0
  57. package/dist/render.d.ts +3 -0
  58. package/dist/types.d.ts +39 -0
  59. package/package.json +85 -0
  60. package/skill/SKILL.md +263 -0
  61. package/skill/evals/evals.json +26 -0
  62. package/skill/install.sh +38 -0
  63. package/skill/references/archaeology-guide.md +157 -0
  64. package/skill/references/skill-template.md +120 -0
  65. package/src/archaeology/cache.ts +107 -0
  66. package/src/archaeology/delegate.ts +113 -0
  67. package/src/archaeology/index.ts +48 -0
  68. package/src/archaeology/llm.ts +10 -0
  69. package/src/archaeology/merge.ts +155 -0
  70. package/src/archaeology/orchestrator.ts +185 -0
  71. package/src/archaeology/prompts.ts +178 -0
  72. package/src/archaeology/types.ts +139 -0
  73. package/src/archaeology/validate.ts +157 -0
  74. package/src/cli.ts +451 -0
  75. package/src/encoders/ansi.ts +32 -0
  76. package/src/encoders/html.ts +78 -0
  77. package/src/encoders/string.ts +20 -0
  78. package/src/flow/encode.ts +21 -0
  79. package/src/flow/index.ts +15 -0
  80. package/src/flow/layout.ts +150 -0
  81. package/src/flow/parse.ts +100 -0
  82. package/src/flow/render.ts +186 -0
  83. package/src/flow/types.ts +45 -0
  84. package/src/flow/validate.ts +111 -0
  85. package/src/flow/yaml.ts +235 -0
  86. package/src/grid.ts +59 -0
  87. package/src/index.ts +24 -0
  88. package/src/miner/history.ts +156 -0
  89. package/src/miner/index.ts +76 -0
  90. package/src/miner/sessions.ts +39 -0
  91. package/src/miner/stats.ts +43 -0
  92. package/src/miner/suggest.ts +101 -0
  93. package/src/miner/transitions.ts +62 -0
  94. package/src/miner/types.ts +45 -0
  95. package/src/miner/workflows.ts +96 -0
  96. package/src/parse.ts +321 -0
  97. package/src/render.ts +182 -0
  98. package/src/types.ts +62 -0
  99. package/workflows/docker-deploy.yml +42 -0
  100. package/workflows/docker-parallel.yml +36 -0
  101. package/workflows/gh-issue-to-pr.yml +48 -0
  102. package/workflows/git-pr-flow.yml +36 -0
  103. package/workflows/kubectl-rollout.yml +37 -0
  104. package/workflows/npm-publish.yml +42 -0
@@ -0,0 +1,5 @@
1
+ import type { Workflow, FlowRenderOptions } from "./types";
2
+ export declare function flowToAnsi(workflow: Workflow, opts?: FlowRenderOptions): string;
3
+ export declare function flowToString(workflow: Workflow, opts?: FlowRenderOptions): string;
4
+ export declare function flowToHtml(workflow: Workflow, opts?: FlowRenderOptions): string;
5
+ export declare function printFlow(workflow: Workflow, opts?: FlowRenderOptions): void;
@@ -0,0 +1,8 @@
1
+ export { parseWorkflow } from "./parse";
2
+ export { parseYaml } from "./yaml";
3
+ export { validateWorkflow } from "./validate";
4
+ export { computeLayout } from "./layout";
5
+ export { renderFlow } from "./render";
6
+ export { flowToAnsi, flowToString, flowToHtml, printFlow } from "./encode";
7
+ export type { Workflow, WorkflowNode, WorkflowEdge, FlowRenderOptions, ValidationError, ValidationResult, } from "./types";
8
+ export type { Layout, LayoutNode, LayoutEdge, LayoutOptions } from "./layout";
@@ -0,0 +1,25 @@
1
+ import {
2
+ computeLayout,
3
+ flowToAnsi,
4
+ flowToHtml,
5
+ flowToString,
6
+ parseWorkflow,
7
+ parseYaml,
8
+ printFlow,
9
+ renderFlow,
10
+ validateWorkflow
11
+ } from "../chunk-pkfpaae1.js";
12
+ import"../chunk-q4se2rwe.js";
13
+ export {
14
+ validateWorkflow,
15
+ renderFlow,
16
+ printFlow,
17
+ parseYaml,
18
+ parseWorkflow,
19
+ flowToString,
20
+ flowToHtml,
21
+ flowToAnsi,
22
+ computeLayout
23
+ };
24
+
25
+ //# debugId=7C2AF30429458F1A64756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "7C2AF30429458F1A64756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,30 @@
1
+ import type { Workflow, WorkflowNode, WorkflowEdge } from "./types";
2
+ export interface LayoutNode {
3
+ id: string;
4
+ node: WorkflowNode;
5
+ col: number;
6
+ row: number;
7
+ width: number;
8
+ height: number;
9
+ x: number;
10
+ y: number;
11
+ }
12
+ export interface LayoutEdge {
13
+ from: string;
14
+ to: string;
15
+ edge: WorkflowEdge;
16
+ }
17
+ export interface Layout {
18
+ nodes: LayoutNode[];
19
+ edges: LayoutEdge[];
20
+ totalWidth: number;
21
+ totalHeight: number;
22
+ }
23
+ export interface LayoutOptions {
24
+ boxPaddingX?: number;
25
+ colGap?: number;
26
+ rowGap?: number;
27
+ minBoxWidth?: number;
28
+ }
29
+ export declare function computeLayout(workflow: Workflow, opts?: LayoutOptions): Layout;
30
+ export declare function findNode(layout: Layout, id: string): LayoutNode | undefined;
@@ -0,0 +1,2 @@
1
+ import type { Workflow } from "./types";
2
+ export declare function parseWorkflow(yamlText: string): Workflow;
@@ -0,0 +1,3 @@
1
+ import { type Grid } from "../grid";
2
+ import type { Workflow, FlowRenderOptions } from "./types";
3
+ export declare function renderFlow(workflow: Workflow, opts?: FlowRenderOptions): Grid;
@@ -0,0 +1,42 @@
1
+ import type { CLINode } from "../types";
2
+ export interface Workflow {
3
+ name: string;
4
+ description?: string;
5
+ cli: string;
6
+ version?: string;
7
+ nodes: WorkflowNode[];
8
+ edges: WorkflowEdge[];
9
+ }
10
+ export interface WorkflowNode {
11
+ id: string;
12
+ command: string[];
13
+ label?: string;
14
+ description?: string;
15
+ optional?: boolean;
16
+ ref?: CLINode;
17
+ }
18
+ export interface WorkflowEdge {
19
+ from: string;
20
+ to: string;
21
+ condition?: string;
22
+ label?: string;
23
+ }
24
+ export interface FlowRenderOptions {
25
+ color?: boolean;
26
+ showDescriptions?: boolean;
27
+ showCommands?: boolean;
28
+ compact?: boolean;
29
+ }
30
+ export interface ValidationError {
31
+ node?: string;
32
+ edge?: {
33
+ from: string;
34
+ to: string;
35
+ };
36
+ message: string;
37
+ severity: "error" | "warning";
38
+ }
39
+ export interface ValidationResult {
40
+ valid: boolean;
41
+ errors: ValidationError[];
42
+ }
@@ -0,0 +1,3 @@
1
+ import type { CLINode } from "../types";
2
+ import type { Workflow, ValidationResult } from "./types";
3
+ export declare function validateWorkflow(workflow: Workflow, tree?: CLINode): ValidationResult;
@@ -0,0 +1,4 @@
1
+ export type YamlValue = string | number | boolean | null | YamlValue[] | {
2
+ [key: string]: YamlValue;
3
+ };
4
+ export declare function parseYaml(text: string): YamlValue;
package/dist/grid.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export interface Cell {
2
+ char: string;
3
+ fg: string | null;
4
+ }
5
+ export interface Grid {
6
+ width: number;
7
+ height: number;
8
+ cells: Cell[][];
9
+ set(x: number, y: number, char: string, fg?: string | null): void;
10
+ get(x: number, y: number): Cell | undefined;
11
+ addRow(): void;
12
+ }
13
+ export declare function createGrid(width: number): Grid;
14
+ export declare function writeText(grid: Grid, x: number, y: number, text: string, fg?: string | null): number;
@@ -0,0 +1,7 @@
1
+ import type { CLINode, Flag, Arg, TreeOptions, AnsiColor } from "./types";
2
+ export type { CLINode, Flag, Arg, TreeOptions, AnsiColor };
3
+ export { parseHelp, parseHelpRecursive } from "./parse";
4
+ export declare function treeToAnsi(root: CLINode, opts?: TreeOptions): string;
5
+ export declare function treeToString(root: CLINode, opts?: TreeOptions): string;
6
+ export declare function treeToHtml(root: CLINode, opts?: TreeOptions): string;
7
+ export declare function printTree(root: CLINode, opts?: TreeOptions): void;
package/dist/index.js ADDED
@@ -0,0 +1,21 @@
1
+ import {
2
+ printTree,
3
+ treeToAnsi,
4
+ treeToHtml,
5
+ treeToString
6
+ } from "./chunk-v5w3w6bd.js";
7
+ import {
8
+ parseHelp,
9
+ parseHelpRecursive
10
+ } from "./chunk-5aahbfr2.js";
11
+ import"./chunk-q4se2rwe.js";
12
+ export {
13
+ treeToString,
14
+ treeToHtml,
15
+ treeToAnsi,
16
+ printTree,
17
+ parseHelpRecursive,
18
+ parseHelp
19
+ };
20
+
21
+ //# debugId=A7CFDE292CCE9BF364756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "A7CFDE292CCE9BF364756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,6 @@
1
+ import type { HistoryEntry } from "./types";
2
+ export declare function readHistoryFile(path: string): Promise<string>;
3
+ export declare function detectHistoryFormat(text: string): "zsh-extended" | "bash" | "fish" | "unknown";
4
+ export declare function parseHistory(text: string): HistoryEntry[];
5
+ export declare function tokenize(cmd: string): string[];
6
+ export declare function defaultHistoryPath(): string | null;
@@ -0,0 +1,18 @@
1
+ import { parseHistory, readHistoryFile, defaultHistoryPath, tokenize, detectHistoryFormat } from "./history";
2
+ import { segmentSessions, filterByCli } from "./sessions";
3
+ import { buildTransitions, normalizeTransitions, extractSubcommand, extractSubcommandPath } from "./transitions";
4
+ import { extractPaths, clusterIntoWorkflows } from "./workflows";
5
+ import { computeStats } from "./stats";
6
+ import { suggestSkills, type SkillSuggestion } from "./suggest";
7
+ import type { HistoryEntry, Session, Transition, MinedWorkflow, CliUsageStats, MineOptions } from "./types";
8
+ export type { HistoryEntry, Session, Transition, MinedWorkflow, CliUsageStats, MineOptions, SkillSuggestion };
9
+ export { parseHistory, readHistoryFile, defaultHistoryPath, tokenize, detectHistoryFormat, segmentSessions, filterByCli, buildTransitions, normalizeTransitions, extractSubcommand, extractSubcommandPath, extractPaths, clusterIntoWorkflows, computeStats, suggestSkills, };
10
+ export interface MineResult {
11
+ cli: string;
12
+ stats: CliUsageStats;
13
+ transitions: Transition[];
14
+ workflows: MinedWorkflow[];
15
+ suggestions: SkillSuggestion[];
16
+ sessionsAnalyzed: number;
17
+ }
18
+ export declare function mineCli(cli: string, options?: MineOptions): Promise<MineResult>;
@@ -0,0 +1,38 @@
1
+ import {
2
+ buildTransitions,
3
+ clusterIntoWorkflows,
4
+ computeStats,
5
+ defaultHistoryPath,
6
+ detectHistoryFormat,
7
+ extractPaths,
8
+ extractSubcommand,
9
+ extractSubcommandPath,
10
+ filterByCli,
11
+ mineCli,
12
+ normalizeTransitions,
13
+ parseHistory,
14
+ readHistoryFile,
15
+ segmentSessions,
16
+ suggestSkills,
17
+ tokenize
18
+ } from "../chunk-57gtsvhb.js";
19
+ export {
20
+ tokenize,
21
+ suggestSkills,
22
+ segmentSessions,
23
+ readHistoryFile,
24
+ parseHistory,
25
+ normalizeTransitions,
26
+ mineCli,
27
+ filterByCli,
28
+ extractSubcommandPath,
29
+ extractSubcommand,
30
+ extractPaths,
31
+ detectHistoryFormat,
32
+ defaultHistoryPath,
33
+ computeStats,
34
+ clusterIntoWorkflows,
35
+ buildTransitions
36
+ };
37
+
38
+ //# debugId=79FF1A9AE05DD20F64756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "79FF1A9AE05DD20F64756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,3 @@
1
+ import type { HistoryEntry, Session } from "./types";
2
+ export declare function segmentSessions(entries: HistoryEntry[], gapMinutes?: number): Session[];
3
+ export declare function filterByCli(sessions: Session[], cli: string): Session[];
@@ -0,0 +1,2 @@
1
+ import type { HistoryEntry, CliUsageStats, Session } from "./types";
2
+ export declare function computeStats(entries: HistoryEntry[], sessions: Session[], cli: string): CliUsageStats;
@@ -0,0 +1,11 @@
1
+ import type { MinedWorkflow, CliUsageStats } from "./types";
2
+ export interface SkillSuggestion {
3
+ name: string;
4
+ description: string;
5
+ cli: string;
6
+ commands: string[];
7
+ frequency: number;
8
+ reason: string;
9
+ priority: "high" | "medium" | "low";
10
+ }
11
+ export declare function suggestSkills(workflows: MinedWorkflow[], stats: CliUsageStats): SkillSuggestion[];
@@ -0,0 +1,6 @@
1
+ import type { Session, Transition, HistoryEntry } from "./types";
2
+ export declare function extractSubcommand(entry: HistoryEntry): string;
3
+ export declare function extractSubcommandPath(entry: HistoryEntry, maxDepth?: number): string[];
4
+ export declare function buildTransitions(sessions: Session[]): Map<string, Map<string, number>>;
5
+ export declare function normalizeTransitions(raw: Map<string, Map<string, number>>, minSupport?: number, minConfidence?: number): Transition[];
6
+ export declare function topTransitions(transitions: Transition[], n?: number): Transition[];
@@ -0,0 +1,46 @@
1
+ export interface HistoryEntry {
2
+ timestamp: number;
3
+ raw: string;
4
+ argv: string[];
5
+ }
6
+ export interface Session {
7
+ start: number;
8
+ end: number;
9
+ entries: HistoryEntry[];
10
+ }
11
+ export interface Transition {
12
+ from: string;
13
+ to: string;
14
+ count: number;
15
+ confidence: number;
16
+ }
17
+ export interface MinedWorkflow {
18
+ name: string;
19
+ cli: string;
20
+ path: string[][];
21
+ support: number;
22
+ confidence: number;
23
+ source: "history" | "llm" | "makefile";
24
+ }
25
+ export interface CliUsageStats {
26
+ cli: string;
27
+ totalInvocations: number;
28
+ uniqueSubcommands: number;
29
+ topSubcommands: Array<{
30
+ subcommand: string;
31
+ count: number;
32
+ }>;
33
+ topFlags: Array<{
34
+ flag: string;
35
+ count: number;
36
+ }>;
37
+ sessionCount: number;
38
+ }
39
+ export interface MineOptions {
40
+ sessionGapMinutes?: number;
41
+ minSupport?: number;
42
+ minConfidence?: number;
43
+ minPathLength?: number;
44
+ maxPathLength?: number;
45
+ historyPath?: string;
46
+ }
@@ -0,0 +1,11 @@
1
+ import type { Session, MinedWorkflow } from "./types";
2
+ export interface PathCluster {
3
+ signature: string;
4
+ path: string[];
5
+ occurrences: number;
6
+ }
7
+ export declare function extractPaths(sessions: Session[], minLength?: number, maxLength?: number): PathCluster[];
8
+ export declare function clusterIntoWorkflows(clusters: PathCluster[], cli: string, options?: {
9
+ minSupport?: number;
10
+ topK?: number;
11
+ }): MinedWorkflow[];
@@ -0,0 +1,3 @@
1
+ import type { CLINode } from "./types";
2
+ export declare function parseHelp(name: string, helpText: string): CLINode;
3
+ export declare function parseHelpRecursive(binary: string, args?: string[], maxDepth?: number, depth?: number): Promise<CLINode>;
@@ -0,0 +1,3 @@
1
+ import type { Grid } from "./grid";
2
+ import type { CLINode, TreeOptions } from "./types";
3
+ export declare function renderTree(root: CLINode, opts?: TreeOptions): Grid;
@@ -0,0 +1,39 @@
1
+ export type AnsiColor = "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray";
2
+ export declare const ANSI_COLORS: Record<AnsiColor, string>;
3
+ export declare const ANSI_RESET = "\u001B[0m";
4
+ export declare const ANSI_BOLD = "\u001B[1m";
5
+ export declare const ANSI_DIM = "\u001B[2m";
6
+ export interface CLINode {
7
+ name: string;
8
+ description?: string;
9
+ aliases?: string[];
10
+ subcommands?: CLINode[];
11
+ flags?: Flag[];
12
+ args?: Arg[];
13
+ }
14
+ export interface Flag {
15
+ name: string;
16
+ short?: string;
17
+ type: "boolean" | "string" | "number" | "enum";
18
+ enum?: string[];
19
+ required?: boolean;
20
+ default?: unknown;
21
+ description?: string;
22
+ }
23
+ export interface Arg {
24
+ name: string;
25
+ required?: boolean;
26
+ variadic?: boolean;
27
+ description?: string;
28
+ }
29
+ export interface TreeOptions {
30
+ color?: boolean;
31
+ indent?: number;
32
+ showFlags?: boolean;
33
+ showArgs?: boolean;
34
+ showDescriptions?: boolean;
35
+ showTypes?: boolean;
36
+ showDefaults?: boolean;
37
+ maxDepth?: number;
38
+ compact?: boolean;
39
+ }
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@crafter/cli-tree",
3
+ "version": "0.1.0",
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
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "bun": "./src/index.ts",
12
+ "import": "./dist/index.js",
13
+ "types": "./dist/index.d.ts"
14
+ },
15
+ "./miner": {
16
+ "bun": "./src/miner/index.ts",
17
+ "import": "./dist/miner/index.js",
18
+ "types": "./dist/miner/index.d.ts"
19
+ },
20
+ "./archaeology": {
21
+ "bun": "./src/archaeology/index.ts",
22
+ "import": "./dist/archaeology/index.js",
23
+ "types": "./dist/archaeology/index.d.ts"
24
+ },
25
+ "./flow": {
26
+ "bun": "./src/flow/index.ts",
27
+ "import": "./dist/flow/index.js",
28
+ "types": "./dist/flow/index.d.ts"
29
+ }
30
+ },
31
+ "bin": {
32
+ "clitree": "./dist/cli.js",
33
+ "cli-tree": "./dist/cli.js"
34
+ },
35
+ "files": [
36
+ "dist",
37
+ "src",
38
+ "skill",
39
+ "workflows",
40
+ "README.md",
41
+ "LICENSE"
42
+ ],
43
+ "scripts": {
44
+ "build": "bun run build.ts",
45
+ "test": "bun test",
46
+ "check": "bunx --bun @biomejs/biome check --write .",
47
+ "prepublishOnly": "bun run build"
48
+ },
49
+ "keywords": [
50
+ "cli",
51
+ "tree",
52
+ "terminal",
53
+ "command",
54
+ "visualizer",
55
+ "flags",
56
+ "ascii",
57
+ "tui",
58
+ "shell-history",
59
+ "archaeology",
60
+ "skill",
61
+ "claude-code",
62
+ "workflow",
63
+ "automation"
64
+ ],
65
+ "author": "Crafter Station",
66
+ "license": "MIT",
67
+ "homepage": "https://github.com/crafter-station/cli-tree",
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "https://github.com/crafter-station/cli-tree.git"
71
+ },
72
+ "bugs": {
73
+ "url": "https://github.com/crafter-station/cli-tree/issues"
74
+ },
75
+ "publishConfig": {
76
+ "access": "public"
77
+ },
78
+ "devDependencies": {
79
+ "@biomejs/biome": "^2.0.0",
80
+ "@types/bun": "latest"
81
+ },
82
+ "peerDependencies": {
83
+ "typescript": "^5"
84
+ }
85
+ }