mini-coder 0.4.1 โ†’ 0.5.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 (51) hide show
  1. package/README.md +87 -48
  2. package/assets/icon-1-minimal.svg +31 -0
  3. package/assets/icon-2-dark-terminal.svg +48 -0
  4. package/assets/icon-3-gradient-modern.svg +45 -0
  5. package/assets/icon-4-filled-bold.svg +54 -0
  6. package/assets/icon-5-community-badge.svg +63 -0
  7. package/assets/preview-0-5-0.png +0 -0
  8. package/assets/preview.gif +0 -0
  9. package/bin/mc.ts +14 -0
  10. package/bun.lock +438 -0
  11. package/package.json +12 -29
  12. package/src/agent.ts +592 -0
  13. package/src/cli.ts +124 -0
  14. package/src/git.ts +164 -0
  15. package/src/headless.ts +140 -0
  16. package/src/index.ts +645 -0
  17. package/src/input.ts +155 -0
  18. package/src/paths.ts +37 -0
  19. package/src/plugins.ts +183 -0
  20. package/src/prompt.ts +294 -0
  21. package/src/session.ts +838 -0
  22. package/src/settings.ts +184 -0
  23. package/src/skills.ts +258 -0
  24. package/src/submit.ts +323 -0
  25. package/src/theme.ts +147 -0
  26. package/src/tools.ts +636 -0
  27. package/src/ui/agent.test.ts +49 -0
  28. package/src/ui/agent.ts +210 -0
  29. package/src/ui/commands.test.ts +610 -0
  30. package/src/ui/commands.ts +638 -0
  31. package/src/ui/conversation.test.ts +892 -0
  32. package/src/ui/conversation.ts +926 -0
  33. package/src/ui/help.test.ts +26 -0
  34. package/src/ui/help.ts +119 -0
  35. package/src/ui/input.test.ts +74 -0
  36. package/src/ui/input.ts +138 -0
  37. package/src/ui/overlay.test.ts +42 -0
  38. package/src/ui/overlay.ts +59 -0
  39. package/src/ui/status.test.ts +450 -0
  40. package/src/ui/status.ts +357 -0
  41. package/src/ui.ts +615 -0
  42. package/.claude/settings.local.json +0 -54
  43. package/.prettierignore +0 -7
  44. package/dist/mc-edit.js +0 -275
  45. package/dist/mc.js +0 -7355
  46. package/docs/KNOWN_ISSUES.md +0 -13
  47. package/docs/design-decisions.md +0 -31
  48. package/docs/mini-coder.1.md +0 -227
  49. package/docs/superpowers/plans/2026-03-30-anthropic-oauth-removal.md +0 -61
  50. package/docs/superpowers/specs/2026-03-30-anthropic-oauth-removal-design.md +0 -47
  51. package/lefthook.yml +0 -4
package/README.md CHANGED
@@ -1,80 +1,119 @@
1
1
  <p align="center">
2
- <img src="assets/icon-5-community-badge.svg" alt="mini-coder logo" width="100" height="100"/>
2
+ <img src="assets/icon-2-dark-terminal.svg" alt="mini-coder logo" width="112" />
3
3
  </p>
4
4
 
5
- # ๐Ÿ‘พ mini-coder
5
+ <h1 align="center">mini-coder</h1>
6
6
 
7
- > _Small. Fast. Gets out of your way._
8
-
9
- [๐Ÿ“– Read the Full Manual](docs/mini-coder.1.md)
10
-
11
- A terminal coding agent for developers who want a sharp tool, not a bloated IDE plugin. Shell-first, multi-provider, minimal tool surface. Just you, your terminal, and an AI that keeps up.
7
+ <p align="center"><strong>Lightning-fast coding agent for your terminal.</strong></p>
12
8
 
13
9
  <p align="center">
14
- <img src="./assets/preview.gif" alt="Minicoder Preview"/>
10
+ <a href="https://www.npmjs.com/package/mini-coder">npm</a>
11
+ ยท
12
+ <a href="https://sacenox.github.io/mini-coder/">docs</a>
13
+ ยท
14
+ <a href="spec.md">spec</a>
15
15
  </p>
16
16
 
17
- ---
17
+ <p align="center">
18
+ <picture>
19
+ <img src="assets/preview.gif" alt="mini-coder terminal session preview" width="960" style="border-radius: 10px; box-shadow: 0 10px 30px rgba(0,0,0,0.35);" />
20
+ </picture>
21
+ </p>
18
22
 
19
- ## โšก Quick Start
23
+ mini-coder (`mc`) is a terminal coding agent that reads your repo, edits files, runs commands, and keeps going until the work is done. Small core tool surface, flat architecture, fast turns, and streaming everywhere it matters.
20
24
 
21
- I run on [Bun](https://bun.com) โ€” install me via bun or npm, but Bun needs to be on your machine.
25
+ ## Install
22
26
 
23
27
  ```bash
24
- # Install
25
- bun add -g mini-coder # or: npm install -g mini-coder
28
+ $ bun add -g mini-coder
29
+ $ mc
30
+ ```
26
31
 
27
- # Set one API key (pick any)
28
- export OPENCODE_API_KEY=your-key # recommended
29
- export ANTHROPIC_API_KEY=your-key # direct Anthropic
30
- export OPENAI_API_KEY=your-key # direct OpenAI
31
- export GOOGLE_API_KEY=your-key # direct Gemini (or GEMINI_API_KEY)
32
+ ## Why mini-coder?
32
33
 
33
- # Optional
34
- export OLLAMA_BASE_URL=http://localhost:11434 # local models
35
- export EXA_API_KEY=your-key # web search tools
34
+ - **Lean on proven dependencies** โ€” [pi-ai](https://github.com/badlogic/pi-mono/tree/main/packages/ai) for providers, streaming, tool calling, usage tracking, and OAuth. [cel-tui](https://github.com/sacenox/cel-tui) for the terminal UI. The core stays focused on agent work.
35
+ - **Flat, simple codebase** โ€” no workspaces, no internal abstraction layers. Files grouped by concern in a single `src/` directory.
36
+ - **Agent-first** โ€” every decision serves the goal of reading code, making changes, and verifying them via the shell.
37
+ - **Performance** โ€” startup and turn latency matter more than features.
38
+ - **Streaming end-to-end** โ€” assistant text, reasoning, tool calls, and tool output show up as they happen.
36
39
 
37
- # Go
38
- mc
39
- ```
40
+ ## Tools
40
41
 
41
- One-shot mode: `mc "refactor auth to use async/await"` โ€” runs once, then exits.
42
+ Two built-in tools, plus a read-only image tool:
42
43
 
43
- Useful flags: `-c` continue last session, `-r <id>` resume, `-l` list sessions, `-m <model>` pick a model, `-h` help.
44
+ - **`shell`** โ€” runs commands in the user's shell. Returns stdout, stderr, and exit code. Large output is truncated to protect model context.
45
+ - **`edit`** โ€” exact-text replacement in a single file. Fails deterministically if the target is missing or ambiguous. Creates new files when old text is empty.
46
+ - **`readImage`** โ€” reads PNG, JPEG, GIF, and WebP files as model input. Only registered when the active model supports images.
44
47
 
45
- ---
48
+ Plugins can add more tools, but the core stays intentionally small.
46
49
 
47
- ## ๐Ÿ”‘ OAuth Login
50
+ ## Features
48
51
 
49
- Use `/login` inside the REPL to authenticate via browser-based OAuth. Currently supported: `openai` (`/login openai` uses the Codex / ChatGPT Plus/Pro flow). No need to manage API keys manually.
52
+ - **Multi-provider model support** โ€” Anthropic, OpenAI, Google, Bedrock, Mistral, Groq, xAI, OpenRouter, Ollama, Copilot, and more via pi-ai.
53
+ - **Streaming TUI** โ€” markdown conversation log, tool blocks with diffs, animated divider, multi-line input, and a one-line pill status bar with independent ANSI16 effort/context tones.
54
+ - **Session persistence** โ€” SQLite-backed sessions with undo, fork, resume, and cumulative usage stats. Sessions are scoped to the working directory.
55
+ - **Reasoning and verbosity controls** โ€” toggle thinking visibility and verbose tool rendering on demand. Preferences persist across launches.
56
+ - **[AGENTS.md](https://agents.md) support** โ€” project-specific instructions discovered root-to-leaf, with `~/.agents/` for global instructions.
57
+ - **[Agent Skills](https://agentskills.io)** โ€” skill catalogs exposed in the prompt. `/skill:name` injects a skill body into the next user message.
58
+ - **Plugins** โ€” optional tools, integrations, theme overrides, and prompt suffixes without bloating the core.
50
59
 
51
- ---
60
+ ## Commands
52
61
 
53
- ## ๐Ÿ› ๏ธ Features
62
+ | Command | Description |
63
+ | ------------ | ---------------------------------------------------------------------- |
64
+ | `/model` | Switch models. Persists as the global default. |
65
+ | `/session` | List and resume sessions scoped to the current working directory. |
66
+ | `/new` | Start a fresh session and reset cumulative usage counters. |
67
+ | `/fork` | Copy the conversation into a new session and continue independently. |
68
+ | `/undo` | Remove the last conversational turn (does not revert file changes). |
69
+ | `/reasoning` | Toggle thinking visibility. Persisted and restored on launch. |
70
+ | `/verbose` | Toggle verbose shell rendering plus edit previews/errors in the log. |
71
+ | `/login` | Interactive OAuth login for supported providers. |
72
+ | `/logout` | Clear saved OAuth credentials for a logged-in provider. |
73
+ | `/effort` | Set reasoning effort: low, medium, high, or xhigh. |
74
+ | `/help` | List commands, loaded AGENTS.md files, discovered skills, and plugins. |
54
75
 
55
- - **Multi-provider** โ€” supports Anthropic, OpenAI (direct + OAuth), Gemini, and Ollama
56
- - **Session memory** โ€” SQLite-backed. Resume with `-c` or `-r <id>`
57
- - **Shell integration** โ€” `!` prefix for inline commands, `@` to reference files with tab completion
58
- - **Web search** โ€” `webSearch` + `webContent` tools when `EXA_API_KEY` is set
59
- - **MCP support** โ€” connect external tool servers over HTTP or stdio
60
- - **Skills** โ€” `.agents/skills/<name>/SKILL.md`, invoke with `/skill-name` in the prompt
61
- - **`mc-edit`** โ€” safe, exact-text file editing (no full-file rewrites)
62
- - **16 ANSI colors** โ€” inherits your terminal theme. Always looks right.
76
+ ## Key bindings
63
77
 
64
- ---
78
+ | Key | Action |
79
+ | ------------- | ------------------------------------------------- |
80
+ | `Enter` | Submit message |
81
+ | `Shift+Enter` | Insert newline |
82
+ | `Escape` | Interrupt current turn, preserve partial response |
83
+ | `Tab` | File path autocomplete (or command filter on `/`) |
84
+ | `Ctrl+R` | Search global raw input history |
85
+ | `Ctrl+C` | Graceful exit |
65
86
 
66
- ## ๐Ÿ“š Getting Deeper
87
+ ## Headless one-shot mode
67
88
 
68
- The README is the highlight reel. For the full story โ€” slash commands, config folders, context files, app data, and everything else:
89
+ mini-coder also supports a non-interactive one-shot mode for scripts and benchmark harnesses.
69
90
 
70
- **[๐Ÿ“– Read the Full Manual](docs/mini-coder.1.md)**
91
+ ```bash
92
+ $ mc -p "summarize this repo"
93
+ $ printf '%s\n' 'fix the failing tests' | mc
94
+ ```
95
+
96
+ - Enabled when `-p/--prompt` is provided or when stdin/stdout is not a TTY.
97
+ - Reuses the same input parsing rules as the interactive UI for plain text, `/skill:name`, and standalone image paths.
98
+ - Streams newline-delimited JSON events to stdout.
99
+ - Interactive slash commands such as `/model` and `/help` are not available in headless mode.
71
100
 
72
- ---
101
+ ## Docs
73
102
 
74
- ## ๐Ÿ”ฎ Tech Stack
103
+ - **Docs site:** https://sacenox.github.io/mini-coder/
104
+ - **Spec:** [`spec.md`](spec.md)
105
+ - **Repo instructions:** [`AGENTS.md`](AGENTS.md)
75
106
 
76
- [Bun.js](https://bun.com) ยท [AI SDK](https://ai-sdk.dev) ยท [yoctocolors](https://github.com/sindresorhus/yoctocolors)
107
+ ## Development
108
+
109
+ ```bash
110
+ bun install
111
+ bun test
112
+ bun run check
113
+ bun run format
114
+ bun run typecheck
115
+ ```
77
116
 
78
- ## ๐Ÿ“„ License
117
+ ## License
79
118
 
80
- MIT โ€” [github.com/sacenox/mini-coder](https://github.com/sacenox/mini-coder)
119
+ MIT
@@ -0,0 +1,31 @@
1
+ <!-- Mini Coder Icon v1: Minimal / Clean
2
+ Thin brackets, sharp lightning bolt. No fills โ€” pure outline.
3
+ Inspired by: "small and fast, doesn't get in the way" -->
4
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
5
+ <!-- Left bracket { -->
6
+ <path
7
+ d="M38 12 C28 12 24 17 24 25 L24 40 C24 46 20 48 16 50 C20 52 24 54 24 60 L24 75 C24 83 28 88 38 88"
8
+ fill="none"
9
+ stroke="#1a1a2e"
10
+ stroke-width="5"
11
+ stroke-linecap="round"
12
+ stroke-linejoin="round"
13
+ />
14
+ <!-- Right bracket } -->
15
+ <path
16
+ d="M62 12 C72 12 76 17 76 25 L76 40 C76 46 80 48 84 50 C80 52 76 54 76 60 L76 75 C76 83 72 88 62 88"
17
+ fill="none"
18
+ stroke="#1a1a2e"
19
+ stroke-width="5"
20
+ stroke-linecap="round"
21
+ stroke-linejoin="round"
22
+ />
23
+ <!-- Lightning bolt -->
24
+ <path
25
+ d="M56 22 L43 52 L52 52 L44 78 L62 44 L52 44 Z"
26
+ fill="#f5c518"
27
+ stroke="#1a1a2e"
28
+ stroke-width="1.5"
29
+ stroke-linejoin="round"
30
+ />
31
+ </svg>
@@ -0,0 +1,48 @@
1
+ <!-- Mini Coder Icon v2: Dark Terminal
2
+ Dark background, neon bolt and glowing brackets.
3
+ Inspired by: terminal aesthetic, ANSI colors, claude code dark UI -->
4
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
5
+ <defs>
6
+ <radialGradient id="bgGlow" cx="50%" cy="50%" r="50%">
7
+ <stop offset="0%" stop-color="#0d1117"/>
8
+ <stop offset="100%" stop-color="#010409"/>
9
+ </radialGradient>
10
+ <filter id="glow">
11
+ <feGaussianBlur stdDeviation="2.5" result="coloredBlur"/>
12
+ <feMerge>
13
+ <feMergeNode in="coloredBlur"/>
14
+ <feMergeNode in="SourceGraphic"/>
15
+ </feMerge>
16
+ </filter>
17
+ </defs>
18
+
19
+ <!-- Background rounded square -->
20
+ <rect x="4" y="4" width="92" height="92" rx="18" fill="url(#bgGlow)"/>
21
+
22
+ <!-- Left bracket { โ€” neon cyan -->
23
+ <path
24
+ d="M38 14 C29 14 26 19 26 27 L26 41 C26 47 22 49 18 51 C22 53 26 55 26 61 L26 74 C26 82 29 87 38 87"
25
+ fill="none"
26
+ stroke="#00d4ff"
27
+ stroke-width="4.5"
28
+ stroke-linecap="round"
29
+ stroke-linejoin="round"
30
+ filter="url(#glow)"
31
+ />
32
+ <!-- Right bracket } โ€” neon cyan -->
33
+ <path
34
+ d="M62 14 C71 14 74 19 74 27 L74 41 C74 47 78 49 82 51 C78 53 74 55 74 61 L74 74 C74 82 71 87 62 87"
35
+ fill="none"
36
+ stroke="#00d4ff"
37
+ stroke-width="4.5"
38
+ stroke-linecap="round"
39
+ stroke-linejoin="round"
40
+ filter="url(#glow)"
41
+ />
42
+ <!-- Lightning bolt โ€” electric yellow -->
43
+ <path
44
+ d="M57 20 L42 53 L52 53 L43 80 L63 45 L53 45 Z"
45
+ fill="#ffe600"
46
+ filter="url(#glow)"
47
+ />
48
+ </svg>
@@ -0,0 +1,45 @@
1
+ <!-- Mini Coder Icon v3: Gradient Modern
2
+ Purple-to-blue gradient background, white brackets, gradient bolt.
3
+ Inspired by: "fast and performant", speed gradient feeling -->
4
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
5
+ <defs>
6
+ <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
7
+ <stop offset="0%" stop-color="#6c3de8"/>
8
+ <stop offset="100%" stop-color="#1a73e8"/>
9
+ </linearGradient>
10
+ <linearGradient id="boltGrad" x1="0%" y1="0%" x2="0%" y2="100%">
11
+ <stop offset="0%" stop-color="#fff176"/>
12
+ <stop offset="100%" stop-color="#ff8c00"/>
13
+ </linearGradient>
14
+ </defs>
15
+
16
+ <!-- Background pill/squircle -->
17
+ <rect x="2" y="2" width="96" height="96" rx="22" fill="url(#bgGrad)"/>
18
+
19
+ <!-- Left bracket { โ€” white -->
20
+ <path
21
+ d="M37 13 C27 13 24 18 24 26 L24 41 C24 47 20 49 16 51 C20 53 24 55 24 61 L24 75 C24 83 27 88 37 88"
22
+ fill="none"
23
+ stroke="rgba(255,255,255,0.92)"
24
+ stroke-width="5"
25
+ stroke-linecap="round"
26
+ stroke-linejoin="round"
27
+ />
28
+ <!-- Right bracket } โ€” white -->
29
+ <path
30
+ d="M63 13 C73 13 76 18 76 26 L76 41 C76 47 80 49 84 51 C80 53 76 55 76 61 L76 75 C76 83 73 88 63 88"
31
+ fill="none"
32
+ stroke="rgba(255,255,255,0.92)"
33
+ stroke-width="5"
34
+ stroke-linecap="round"
35
+ stroke-linejoin="round"
36
+ />
37
+ <!-- Lightning bolt โ€” warm gradient -->
38
+ <path
39
+ d="M57 19 L42 52 L52 52 L44 81 L63 45 L52 45 Z"
40
+ fill="url(#boltGrad)"
41
+ stroke="rgba(255,255,255,0.3)"
42
+ stroke-width="1"
43
+ stroke-linejoin="round"
44
+ />
45
+ </svg>
@@ -0,0 +1,54 @@
1
+ <!-- Mini Coder Icon v4: Filled Bold
2
+ Chunky solid brackets form a unified shape. Bolt cuts through like a slash.
3
+ Inspired by: "accurate and reliable", sturdy and trustworthy feel -->
4
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
5
+ <!-- Left bracket { โ€” filled, bold, warm off-white bg -->
6
+ <rect x="0" y="0" width="100" height="100" rx="0" fill="#f7f3ee"/>
7
+
8
+ <!-- Left brace as thick filled path -->
9
+ <path
10
+ d="M40 10
11
+ C32 10 28 15 28 23
12
+ L28 39
13
+ C28 45 24 48 19 50
14
+ C24 52 28 55 28 61
15
+ L28 77
16
+ C28 85 32 90 40 90
17
+ L40 83
18
+ C35 83 35 79 35 75
19
+ L35 62
20
+ C35 55 31 52 28 50
21
+ C31 48 35 45 35 38
22
+ L35 25
23
+ C35 21 35 17 40 17
24
+ Z"
25
+ fill="#1a1a2e"
26
+ />
27
+ <!-- Right brace as thick filled path -->
28
+ <path
29
+ d="M60 10
30
+ C68 10 72 15 72 23
31
+ L72 39
32
+ C72 45 76 48 81 50
33
+ C76 52 72 55 72 61
34
+ L72 77
35
+ C72 85 68 90 60 90
36
+ L60 83
37
+ C65 83 65 79 65 75
38
+ L65 62
39
+ C65 55 69 52 72 50
40
+ C69 48 65 45 65 38
41
+ L65 25
42
+ C65 21 65 17 60 17
43
+ Z"
44
+ fill="#1a1a2e"
45
+ />
46
+ <!-- Lightning bolt โ€” punchy orange-red -->
47
+ <path
48
+ d="M58 16 L41 51 L52 51 L42 84 L64 47 L53 47 Z"
49
+ fill="#e8390e"
50
+ stroke="#f7f3ee"
51
+ stroke-width="1.5"
52
+ stroke-linejoin="round"
53
+ />
54
+ </svg>
@@ -0,0 +1,63 @@
1
+ <!-- Mini Coder Icon v5: Community Badge
2
+ Hexagonal badge shape (nod to community/open-source), teal + amber palette.
3
+ Bolt doubles as a "play / run" symbol. Inspired by: "community oriented",
4
+ open source tools like Codex & opencode. -->
5
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="100" height="100">
6
+ <defs>
7
+ <linearGradient id="hexGrad" x1="0%" y1="0%" x2="100%" y2="100%">
8
+ <stop offset="0%" stop-color="#0a3d62"/>
9
+ <stop offset="100%" stop-color="#0c6e6e"/>
10
+ </linearGradient>
11
+ <filter id="shadow" x="-10%" y="-10%" width="120%" height="120%">
12
+ <feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="rgba(0,0,0,0.35)"/>
13
+ </filter>
14
+ </defs>
15
+
16
+ <!-- Hexagon background -->
17
+ <polygon
18
+ points="50,4 93,27 93,73 50,96 7,73 7,27"
19
+ fill="url(#hexGrad)"
20
+ filter="url(#shadow)"
21
+ />
22
+ <!-- Subtle inner hex ring -->
23
+ <polygon
24
+ points="50,10 88,30 88,70 50,90 12,70 12,30"
25
+ fill="none"
26
+ stroke="rgba(255,255,255,0.1)"
27
+ stroke-width="1.5"
28
+ />
29
+
30
+ <!-- Left bracket { โ€” teal/white -->
31
+ <path
32
+ d="M37 18 C29 18 26 23 26 30 L26 43 C26 48 22 51 18 52 C22 53 26 56 26 61 L26 71 C26 78 29 83 37 83"
33
+ fill="none"
34
+ stroke="#7fffd4"
35
+ stroke-width="4"
36
+ stroke-linecap="round"
37
+ stroke-linejoin="round"
38
+ />
39
+ <!-- Right bracket } โ€” teal/white -->
40
+ <path
41
+ d="M63 18 C71 18 74 23 74 30 L74 43 C74 48 78 51 82 52 C78 53 74 56 74 61 L74 71 C74 78 71 83 63 83"
42
+ fill="none"
43
+ stroke="#7fffd4"
44
+ stroke-width="4"
45
+ stroke-linecap="round"
46
+ stroke-linejoin="round"
47
+ />
48
+
49
+ <!-- Lightning bolt โ€” amber gold -->
50
+ <path
51
+ d="M56 22 L42 52 L52 52 L44 78 L62 46 L51 46 Z"
52
+ fill="#ffc107"
53
+ stroke="#fff8e1"
54
+ stroke-width="1"
55
+ stroke-linejoin="round"
56
+ />
57
+ <!-- Tiny speed lines left of bolt -->
58
+ <line x1="28" y1="46" x2="36" y2="46" stroke="#7fffd4" stroke-width="1.5" stroke-linecap="round" opacity="0.5"/>
59
+ <line x1="30" y1="51" x2="36" y2="51" stroke="#7fffd4" stroke-width="1.5" stroke-linecap="round" opacity="0.35"/>
60
+ <!-- Tiny speed lines right of bolt -->
61
+ <line x1="64" y1="46" x2="72" y2="46" stroke="#7fffd4" stroke-width="1.5" stroke-linecap="round" opacity="0.5"/>
62
+ <line x1="64" y1="51" x2="70" y2="51" stroke="#7fffd4" stroke-width="1.5" stroke-linecap="round" opacity="0.35"/>
63
+ </svg>
Binary file
Binary file
package/bin/mc.ts ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * Executable launcher for the mini-coder CLI.
5
+ *
6
+ * @module
7
+ */
8
+
9
+ import { main } from "../src/index.ts";
10
+
11
+ main().catch((err) => {
12
+ console.error(err instanceof Error ? err.message : String(err));
13
+ process.exit(1);
14
+ });