codemaxxing 1.0.1 β 1.0.2
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 +12 -8
- package/dist/index.js +29 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -140,12 +140,14 @@ Dual-model planning. A "planner" model reasons through the approach, then your e
|
|
|
140
140
|
### π§ Skills System (21 Built-In)
|
|
141
141
|
Downloadable skill packs that teach the agent domain expertise. Ships with 21 built-in skills:
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
**
|
|
146
|
-
**
|
|
147
|
-
**
|
|
148
|
-
**
|
|
143
|
+
| Category | Skills |
|
|
144
|
+
|----------|--------|
|
|
145
|
+
| **Frontend** | react-expert, nextjs-app, tailwind-ui, svelte-kit |
|
|
146
|
+
| **Mobile** | react-native, swift-ios, flutter |
|
|
147
|
+
| **Backend** | python-pro, node-backend, go-backend, rust-systems |
|
|
148
|
+
| **Data** | sql-master, supabase |
|
|
149
|
+
| **Practices** | typescript-strict, api-designer, test-engineer, doc-writer, security-audit, devops-toolkit, git-workflow |
|
|
150
|
+
| **Game Dev** | unity-csharp |
|
|
149
151
|
|
|
150
152
|
```
|
|
151
153
|
/skills # Browse & install from registry
|
|
@@ -224,8 +226,8 @@ Switch models mid-session with an interactive picker:
|
|
|
224
226
|
- `/model gpt-5` β switch directly by name
|
|
225
227
|
- Native Anthropic API support (not just OpenAI-compatible)
|
|
226
228
|
|
|
227
|
-
### π¨
|
|
228
|
-
`/theme` to browse: cyberpunk-neon, dracula, gruvbox, nord, catppuccin, tokyo-night, one-dark,
|
|
229
|
+
### π¨ 15 Themes
|
|
230
|
+
`/theme` to browse: cyberpunk-neon, dracula, gruvbox, nord, catppuccin, tokyo-night, one-dark, rose-pine, synthwave, blood-moon, mono, solarized, hacker, hot-dog, acid
|
|
229
231
|
|
|
230
232
|
### π Authentication
|
|
231
233
|
One command to connect any LLM provider. OpenRouter OAuth, Anthropic subscription linking, Codex/Qwen CLI import, GitHub Copilot device flow, or manual API keys.
|
|
@@ -330,6 +332,7 @@ Built-in tools:
|
|
|
330
332
|
|
|
331
333
|
- **read_file** β Read file contents (safe)
|
|
332
334
|
- **write_file** β Write/create files (requires approval, shows diff)
|
|
335
|
+
- **edit_file** β Apply surgical patches to files (preferred for targeted changes)
|
|
333
336
|
- **list_files** β List directory contents (safe)
|
|
334
337
|
- **search_files** β Search for patterns across files (safe)
|
|
335
338
|
- **run_command** β Execute shell commands (requires approval)
|
|
@@ -348,6 +351,7 @@ Drop a `CODEMAXXING.md` file in your project root to give the model extra contex
|
|
|
348
351
|
- **MCP:** [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk)
|
|
349
352
|
- **Sessions:** [better-sqlite3](https://github.com/WiseLibs/better-sqlite3)
|
|
350
353
|
- **Local LLM:** Ollama integration (auto-install, pull, manage)
|
|
354
|
+
- **Tests:** Vitest β 26 tests across 8 test files covering commands, tools, config, and agent behavior
|
|
351
355
|
- **Zero cloud dependencies** β everything runs locally
|
|
352
356
|
|
|
353
357
|
## Inspired By
|
package/dist/index.js
CHANGED
|
@@ -1748,6 +1748,30 @@ process.stdout.write("\x1b[?2004h");
|
|
|
1748
1748
|
// Bracketed paste: \x1b[200~ ... \x1b[201~
|
|
1749
1749
|
let pasteBuffer = "";
|
|
1750
1750
|
let inPaste = false;
|
|
1751
|
+
function emitPasteChunk(content) {
|
|
1752
|
+
const normalized = content.replace(/\r\n/g, "\n").trim();
|
|
1753
|
+
if (!normalized)
|
|
1754
|
+
return true;
|
|
1755
|
+
const lineCount = normalized.split("\n").length;
|
|
1756
|
+
if (lineCount > 2) {
|
|
1757
|
+
pasteEvents.emit("paste", { content: normalized, lines: lineCount });
|
|
1758
|
+
return true;
|
|
1759
|
+
}
|
|
1760
|
+
const sanitized = normalized.replace(/\n/g, " ");
|
|
1761
|
+
if (sanitized) {
|
|
1762
|
+
origPush(sanitized, "utf-8");
|
|
1763
|
+
}
|
|
1764
|
+
return true;
|
|
1765
|
+
}
|
|
1766
|
+
function looksLikeRawMultilinePaste(data) {
|
|
1767
|
+
const normalized = data.replace(/\x1b\[20[01]~/g, "");
|
|
1768
|
+
const newlineMatches = normalized.match(/\r?\n/g) ?? [];
|
|
1769
|
+
const newlineCount = newlineMatches.length;
|
|
1770
|
+
const contentLength = normalized.replace(/[\r\n]/g, "").trim().length;
|
|
1771
|
+
// Avoid swallowing normal Enter presses while still catching terminals that
|
|
1772
|
+
// don't support bracketed paste and dump the whole paste as one raw chunk.
|
|
1773
|
+
return newlineCount >= 2 || (newlineCount >= 1 && contentLength >= 40);
|
|
1774
|
+
}
|
|
1751
1775
|
const origPush = process.stdin.push.bind(process.stdin);
|
|
1752
1776
|
process.stdin.push = function (chunk, encoding) {
|
|
1753
1777
|
if (chunk === null)
|
|
@@ -1763,26 +1787,18 @@ process.stdin.push = function (chunk, encoding) {
|
|
|
1763
1787
|
data = data.replace(/\x1b\[201~/g, "");
|
|
1764
1788
|
pasteBuffer += data;
|
|
1765
1789
|
inPaste = false;
|
|
1766
|
-
const content = pasteBuffer
|
|
1790
|
+
const content = pasteBuffer;
|
|
1767
1791
|
pasteBuffer = "";
|
|
1768
|
-
|
|
1769
|
-
if (lineCount > 2) {
|
|
1770
|
-
// Multi-line paste β store as chunk, don't send to input
|
|
1771
|
-
pasteEvents.emit("paste", { content, lines: lineCount });
|
|
1772
|
-
return true;
|
|
1773
|
-
}
|
|
1774
|
-
// Short paste (1-2 lines) β send as normal input
|
|
1775
|
-
const sanitized = content.replace(/\r?\n/g, " ");
|
|
1776
|
-
if (sanitized) {
|
|
1777
|
-
return origPush(sanitized, "utf-8");
|
|
1778
|
-
}
|
|
1779
|
-
return true;
|
|
1792
|
+
return emitPasteChunk(content);
|
|
1780
1793
|
}
|
|
1781
1794
|
if (inPaste) {
|
|
1782
1795
|
pasteBuffer += data;
|
|
1783
1796
|
return true;
|
|
1784
1797
|
}
|
|
1785
1798
|
data = data.replace(/\x1b\[20[01]~/g, "");
|
|
1799
|
+
if (looksLikeRawMultilinePaste(data)) {
|
|
1800
|
+
return emitPasteChunk(data);
|
|
1801
|
+
}
|
|
1786
1802
|
return origPush(typeof chunk === "string" ? data : Buffer.from(data), encoding);
|
|
1787
1803
|
};
|
|
1788
1804
|
// Disable bracketed paste on exit
|