mini-coder 0.4.1 โ 0.5.1
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/README.md +89 -48
- package/assets/icon-1-minimal.svg +31 -0
- package/assets/icon-2-dark-terminal.svg +48 -0
- package/assets/icon-3-gradient-modern.svg +45 -0
- package/assets/icon-4-filled-bold.svg +54 -0
- package/assets/icon-5-community-badge.svg +63 -0
- package/assets/preview-0-5-0.png +0 -0
- package/assets/preview.gif +0 -0
- package/bin/mc.ts +14 -0
- package/bun.lock +438 -0
- package/package.json +12 -29
- package/src/agent.ts +640 -0
- package/src/cli.ts +124 -0
- package/src/git.ts +171 -0
- package/src/headless.ts +140 -0
- package/src/index.ts +666 -0
- package/src/input.ts +155 -0
- package/src/paths.ts +37 -0
- package/src/plugins.ts +183 -0
- package/src/prompt.ts +301 -0
- package/src/session.ts +1043 -0
- package/src/settings.ts +191 -0
- package/src/skills.ts +262 -0
- package/src/submit.ts +323 -0
- package/src/theme.ts +147 -0
- package/src/tools.ts +636 -0
- package/src/ui/agent.test.ts +49 -0
- package/src/ui/agent.ts +210 -0
- package/src/ui/commands.test.ts +610 -0
- package/src/ui/commands.ts +638 -0
- package/src/ui/conversation.test.ts +892 -0
- package/src/ui/conversation.ts +926 -0
- package/src/ui/help.test.ts +44 -0
- package/src/ui/help.ts +125 -0
- package/src/ui/input.test.ts +74 -0
- package/src/ui/input.ts +138 -0
- package/src/ui/overlay.test.ts +42 -0
- package/src/ui/overlay.ts +59 -0
- package/src/ui/status.test.ts +451 -0
- package/src/ui/status.ts +357 -0
- package/src/ui.ts +694 -0
- package/.claude/settings.local.json +0 -54
- package/.prettierignore +0 -7
- package/dist/mc-edit.js +0 -275
- package/dist/mc.js +0 -7355
- package/docs/KNOWN_ISSUES.md +0 -13
- package/docs/design-decisions.md +0 -31
- package/docs/mini-coder.1.md +0 -227
- package/docs/superpowers/plans/2026-03-30-anthropic-oauth-removal.md +0 -61
- package/docs/superpowers/specs/2026-03-30-anthropic-oauth-removal-design.md +0 -47
- package/lefthook.yml +0 -4
package/README.md
CHANGED
|
@@ -1,80 +1,121 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="assets/icon-
|
|
2
|
+
<img src="assets/icon-2-dark-terminal.svg" alt="mini-coder logo" width="112" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<h1 align="center">mini-coder</h1>
|
|
6
6
|
|
|
7
|
-
>
|
|
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
|
-
<
|
|
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
|
-
|
|
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
|
-
|
|
25
|
+
## Install
|
|
22
26
|
|
|
23
27
|
```bash
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
$ bun add -g mini-coder
|
|
29
|
+
$ mc
|
|
30
|
+
```
|
|
26
31
|
|
|
27
|
-
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
38
|
-
mc
|
|
39
|
-
```
|
|
40
|
+
## Tools
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
Two built-in tools, plus a read-only image tool:
|
|
42
43
|
|
|
43
|
-
|
|
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
|
-
##
|
|
50
|
+
## Features
|
|
48
51
|
|
|
49
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 |
|
|
86
|
+
| `Ctrl+D` | Graceful exit (EOF, when input is empty) |
|
|
87
|
+
| `:q` | Graceful exit |
|
|
65
88
|
|
|
66
|
-
##
|
|
89
|
+
## Headless one-shot mode
|
|
67
90
|
|
|
68
|
-
|
|
91
|
+
mini-coder also supports a non-interactive one-shot mode for scripts and benchmark harnesses.
|
|
69
92
|
|
|
70
|
-
|
|
93
|
+
```bash
|
|
94
|
+
$ mc -p "summarize this repo"
|
|
95
|
+
$ printf '%s\n' 'fix the failing tests' | mc
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- Enabled when `-p/--prompt` is provided or when stdin/stdout is not a TTY.
|
|
99
|
+
- Reuses the same input parsing rules as the interactive UI for plain text, `/skill:name`, and standalone image paths.
|
|
100
|
+
- Streams newline-delimited JSON events to stdout.
|
|
101
|
+
- Interactive slash commands such as `/model` and `/help` are not available in headless mode.
|
|
71
102
|
|
|
72
|
-
|
|
103
|
+
## Docs
|
|
73
104
|
|
|
74
|
-
|
|
105
|
+
- **Docs site:** https://sacenox.github.io/mini-coder/
|
|
106
|
+
- **Spec:** [`spec.md`](spec.md)
|
|
107
|
+
- **Repo instructions:** [`AGENTS.md`](AGENTS.md)
|
|
75
108
|
|
|
76
|
-
|
|
109
|
+
## Development
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
bun install
|
|
113
|
+
bun test
|
|
114
|
+
bun run check
|
|
115
|
+
bun run format
|
|
116
|
+
bun run typecheck
|
|
117
|
+
```
|
|
77
118
|
|
|
78
|
-
##
|
|
119
|
+
## License
|
|
79
120
|
|
|
80
|
-
MIT
|
|
121
|
+
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
|
+
});
|