@pencil-agent/nano-pencil 1.11.45 → 1.13.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/README.md +267 -267
- package/dist/builtin-extensions.js +29 -16
- package/dist/cli/args.js +140 -140
- package/dist/core/config/settings-manager.d.ts +2 -0
- package/dist/core/export-html/AGENT.md +11 -11
- package/dist/core/export-html/CLAUDE.md +11 -11
- package/dist/core/export-html/template.css +971 -971
- package/dist/core/export-html/template.html +54 -54
- package/dist/core/export-html/template.js +1586 -1586
- package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
- package/dist/core/export-html/vendor/marked.min.js +6 -6
- package/dist/core/extensions/runner.js +1 -0
- package/dist/core/extensions/types.d.ts +2 -0
- package/dist/core/mcp/figma-auth.js +20 -20
- package/dist/core/mcp/mcp-config.js +0 -10
- package/dist/core/mcp/mcp-guidance.js +44 -44
- package/dist/core/messages.js +7 -7
- package/dist/core/prompt/system-prompt.js +103 -103
- package/dist/core/runtime/turn-context.d.ts +20 -0
- package/dist/core/session/compaction/branch-summarization.js +30 -30
- package/dist/core/session/compaction/compaction.js +81 -81
- package/dist/core/session/compaction/utils.js +2 -2
- package/dist/extensions/defaults/AGENT.md +62 -52
- package/dist/extensions/defaults/CLAUDE.md +61 -51
- package/dist/extensions/defaults/grub/README.md +25 -25
- package/dist/extensions/defaults/grub/index.js +16 -16
- package/dist/extensions/defaults/interview/index.js +30 -30
- package/dist/extensions/defaults/link-world/internet-search/internet-search.md +65 -65
- package/dist/extensions/defaults/link-world/linkworld.md +313 -313
- package/dist/extensions/defaults/loop/README.md +92 -49
- package/dist/extensions/defaults/loop/cron/cron-parser.d.ts +43 -0
- package/dist/extensions/defaults/loop/cron/cron-parser.js +226 -0
- package/dist/extensions/defaults/loop/cron/cron-scheduler.d.ts +54 -0
- package/dist/extensions/defaults/loop/cron/cron-scheduler.js +306 -0
- package/dist/extensions/defaults/loop/cron/cron-tasks.d.ts +84 -0
- package/dist/extensions/defaults/loop/cron/cron-tasks.js +379 -0
- package/dist/extensions/defaults/loop/cron/cron-types.d.ts +87 -0
- package/dist/extensions/defaults/loop/cron/cron-types.js +14 -0
- package/dist/extensions/defaults/loop/cron/index.d.ts +12 -0
- package/dist/extensions/defaults/loop/cron/index.js +10 -0
- package/dist/extensions/defaults/loop/cron-tools/cron-create-tool.d.ts +30 -0
- package/dist/extensions/defaults/loop/cron-tools/cron-create-tool.js +71 -0
- package/dist/extensions/defaults/loop/cron-tools/cron-delete-tool.d.ts +24 -0
- package/dist/extensions/defaults/loop/cron-tools/cron-delete-tool.js +56 -0
- package/dist/extensions/defaults/loop/cron-tools/cron-list-tool.d.ts +20 -0
- package/dist/extensions/defaults/loop/cron-tools/cron-list-tool.js +79 -0
- package/dist/extensions/defaults/loop/cron-tools/index.d.ts +11 -0
- package/dist/extensions/defaults/loop/cron-tools/index.js +9 -0
- package/dist/extensions/defaults/loop/index.d.ts +3 -3
- package/dist/extensions/defaults/loop/index.js +254 -111
- package/dist/extensions/defaults/loop/scheduler-parser.js +6 -1
- package/dist/extensions/defaults/loop/scheduler-types.d.ts +3 -0
- package/dist/extensions/defaults/loop/skill/SKILL.md +79 -0
- package/dist/extensions/defaults/mcp/figma-design.md +68 -68
- package/dist/extensions/defaults/mcp/mcp-management.md +85 -85
- package/dist/extensions/defaults/plan/enter-plan-mode-tool.d.ts +9 -0
- package/dist/extensions/defaults/plan/enter-plan-mode-tool.js +64 -0
- package/dist/extensions/defaults/plan/exit-plan-mode-tool.d.ts +9 -0
- package/dist/extensions/defaults/plan/exit-plan-mode-tool.js +156 -0
- package/dist/extensions/defaults/plan/index.d.ts +8 -0
- package/dist/extensions/defaults/plan/index.js +331 -0
- package/dist/extensions/defaults/plan/plan-agents.d.ts +23 -0
- package/dist/extensions/defaults/plan/plan-agents.js +97 -0
- package/dist/extensions/defaults/plan/plan-file-manager.d.ts +26 -0
- package/dist/extensions/defaults/plan/plan-file-manager.js +287 -0
- package/dist/extensions/defaults/plan/plan-permissions.d.ts +15 -0
- package/dist/extensions/defaults/plan/plan-permissions.js +234 -0
- package/dist/extensions/defaults/plan/plan-validation.d.ts +18 -0
- package/dist/extensions/defaults/plan/plan-validation.js +77 -0
- package/dist/extensions/defaults/plan/plan-workflow-prompt.d.ts +12 -0
- package/dist/extensions/defaults/plan/plan-workflow-prompt.js +168 -0
- package/dist/extensions/defaults/plan/teammate-approval.d.ts +46 -0
- package/dist/extensions/defaults/plan/teammate-approval.js +131 -0
- package/dist/extensions/defaults/plan/types.d.ts +122 -0
- package/dist/extensions/defaults/plan/types.js +17 -0
- package/dist/extensions/defaults/presence/index.js +21 -1
- package/dist/extensions/defaults/sal/README.md +65 -65
- package/dist/extensions/defaults/sal/eval/insforge-sink.d.ts +3 -0
- package/dist/extensions/defaults/sal/eval/insforge-sink.js +55 -6
- package/dist/extensions/defaults/sal/eval/types.d.ts +1 -1
- package/dist/extensions/defaults/sal/index.js +10 -2
- package/dist/extensions/defaults/security-audit/README.md +289 -289
- package/dist/extensions/defaults/security-audit/engine/interceptor.js +26 -26
- package/dist/extensions/defaults/security-audit/engine/logger.js +63 -63
- package/dist/extensions/defaults/subagent/subagent-parser.js +14 -14
- package/dist/extensions/defaults/team/AGENT.md +87 -87
- package/dist/extensions/defaults/team/CLAUDE.md +87 -87
- package/dist/extensions/defaults/team/TESTING.md +247 -247
- package/dist/extensions/defaults/team/team-parser.js +20 -20
- package/dist/extensions/optional/AGENT.md +10 -10
- package/dist/extensions/optional/CLAUDE.md +10 -10
- package/dist/extensions/optional/simplify/index.js +50 -50
- package/dist/main.js +34 -34
- package/dist/modes/acp/acp-mode.js +1 -0
- package/dist/modes/interactive/components/buddy/pet-sprites.js +3 -13
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.js +71 -51
- package/dist/modes/interactive/theme/dark.json +85 -85
- package/dist/modes/interactive/theme/light.json +84 -84
- package/dist/modes/interactive/theme/theme-schema.json +335 -335
- package/dist/modes/interactive/theme/warm.json +81 -81
- package/dist/modes/print-mode.js +6 -0
- package/dist/modes/rpc/rpc-mode.js +12 -0
- package/dist/modes/rpc/rpc-types.d.ts +6 -0
- package/dist/nanopencil-defaults.d.ts +6 -0
- package/dist/nanopencil-defaults.js +28 -21
- package/dist/node_modules/@pencil-agent/ai/cli.js +13 -13
- package/dist/node_modules/@pencil-agent/ai/utils/oauth/openai-codex.js +10 -10
- package/dist/node_modules/@pencil-agent/tui/terminal.d.ts +3 -0
- package/dist/node_modules/@pencil-agent/tui/terminal.js +12 -0
- package/dist/node_modules/@pencil-agent/tui/tui.js +14 -3
- package/dist/packages/mem-core/cli.js +18 -18
- package/dist/packages/mem-core/engine-injection-text.d.ts +5 -0
- package/dist/packages/mem-core/engine-injection-text.js +69 -0
- package/dist/packages/mem-core/engine-scoring-v2.d.ts +12 -0
- package/dist/packages/mem-core/engine-scoring-v2.js +49 -0
- package/dist/packages/mem-core/engine.d.ts +8 -0
- package/dist/packages/mem-core/engine.js +111 -2
- package/dist/packages/mem-core/full-insights-html.js +268 -268
- package/dist/packages/mem-core/human-insights.js +49 -49
- package/dist/packages/mem-core/i18n.js +244 -244
- package/dist/packages/mem-core/insights-html.js +204 -204
- package/dist/packages/mem-core/turn-context.d.ts +20 -3
- package/dist/packages/mem-core/turn-context.js +16 -4
- package/docs/API/345/257/206/351/222/245/344/277/256/345/244/215/346/200/273/347/273/223.md +147 -147
- package/docs/API/345/257/206/351/222/245/345/221/275/344/273/244.md +66 -66
- package/docs/API/345/257/206/351/222/245/346/214/207/345/215/227.md +292 -292
- package/docs/ARK/347/274/226/347/240/201/350/256/241/345/210/222.md +51 -51
- package/docs/AgentTeam/351/207/215/346/236/204/346/226/271/346/241/210.md +446 -446
- package/docs/Insight /346/264/236/345/257/237/346/212/245/345/221/212.md" +352 -352
- package/docs/InterviewRegression.md +122 -122
- package/docs/MCP/345/277/253/351/200/237/345/217/202/350/200/203.md +113 -113
- package/docs/MCP/351/233/206/346/210/220/346/214/207/345/215/227.md +255 -255
- package/docs/Persona/345/210/207/346/215/242.md +97 -97
- package/docs/SAL/345/256/236/351/252/214/350/276/271/347/225/214/344/270/216/345/220/216/347/273/255/346/234/272/345/210/266/350/267/257/347/272/277.md +305 -305
- package/docs/SAL/345/257/271/346/257/224/350/257/225/351/252/214/350/256/276/350/256/241.md +667 -667
- package/docs/SAL/347/273/223/346/236/204/351/224/232/347/202/271/345/256/232/344/275/215/346/226/271/346/241/210.md +851 -851
- package/docs/Simplify/346/211/251/345/261/225.md +277 -277
- package/docs/debug-logging.md +148 -148
- package/docs//345/206/205/347/275/256MCP/345/267/245/345/205/267.md +326 -326
- package/docs//345/215/203/345/270/206/347/274/226/347/240/201/350/256/241/345/210/222.md +52 -52
- package/docs//345/215/225/344/275/223/344/273/223/345/272/223/350/207/252/350/277/260.md +189 -189
- package/docs//345/215/225/344/275/223/344/273/223/345/272/223/350/277/201/347/247/273/346/214/207/345/215/227.md +232 -232
- package/docs//345/217/221/345/270/203/346/214/207/345/215/227.md +129 -129
- package/docs//345/217/230/346/233/264/346/200/273/347/273/223.md +138 -138
- package/docs//345/217/230/346/233/264/346/227/245/345/277/227.md +50 -50
- package/docs//345/267/245/345/205/267/347/256/241/347/220/206/345/231/250/344/274/230/345/214/226.md +208 -208
- package/docs//345/276/252/347/216/257/345/221/275/344/273/244/350/256/241/345/210/222.md +56 -56
- package/docs//346/226/207/346/241/243/344/270/255/345/277/203.md +130 -130
- package/docs//346/236/266/346/236/204/344/274/230/345/214/226.md +404 -404
- package/docs//346/236/266/346/236/204/346/274/224/350/277/233.md +228 -228
- package/docs//347/211/210/346/234/2542.md +198 -198
- package/docs//347/272/263/350/257/272/350/256/260/345/277/206/350/257/273/345/206/231.md +352 -352
- package/docs//347/273/223/346/236/204.md +339 -339
- package/docs//350/256/241/345/210/222.md +43 -43
- package/docs//350/256/244/347/237/245/345/234/260/345/233/276/346/236/266/346/236/204/350/215/211/346/241/210.md +600 -600
- package/docs//350/256/260/345/277/206/347/263/273/347/273/237.md +236 -236
- package/docs//350/277/201/347/247/273/346/200/273/347/273/223.md +204 -204
- package/docs//351/207/215/346/236/204/344/273/273/345/212/241.md +181 -181
- package/docs//351/207/215/346/236/204/350/256/241/345/210/222.md +592 -592
- package/package.json +127 -126
- package/dist/extensions/defaults/loop/scheduler-controller.d.ts +0 -25
- package/dist/extensions/defaults/loop/scheduler-controller.js +0 -149
- package/docs/ACP/345/215/217/350/256/256/351/233/206/346/210/220/345/274/200/345/217/221/346/226/207/346/241/243.md +0 -851
- package/docs/Agent/350/257/204/346/265/213/350/277/201/347/247/273/346/211/247/350/241/214/344/273/273/345/212/241/346/226/207/346/241/243-InsForge/347/211/210.md +0 -124
- package/docs/SDK-TESTING.md +0 -364
- package/docs/SDK.md +0 -439
- package/docs/eval-migration/00-/344/272/244/344/273/230/347/211/251/346/270/205/345/215/225.md +0 -140
- package/docs/eval-migration/01-/344/272/213/344/273/266/345/215/217/350/256/256/346/226/207/346/241/243.md +0 -305
- package/docs/eval-migration/02-InsForge/346/225/260/346/215/256/346/250/241/345/236/213.md +0 -349
- package/docs/eval-migration/03-Pencil-Evaluate-API/350/256/276/350/256/241.md +0 -380
- package/docs/eval-migration/04-/350/277/201/347/247/273/344/270/216/345/233/236/346/273/232/346/226/207/346/241/243.md +0 -307
- package/docs/eval-migration/05-/351/252/214/346/224/266/346/212/245/345/221/212.md +0 -245
- package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +0 -593
- package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +0 -47
package/README.md
CHANGED
|
@@ -1,267 +1,267 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
<pre>
|
|
4
|
-
.-~~~~~~~~~-._ _.-~~~~~~~~~-.
|
|
5
|
-
__.' ~. .~ `.__
|
|
6
|
-
.'// \./ \\`.
|
|
7
|
-
.'// | \\`.
|
|
8
|
-
.'// .-~""""""""""""""-._ | _,-""""""""""""""~-. \\`.
|
|
9
|
-
.'//.-" `-. | .-' "-.\\`.
|
|
10
|
-
.'//______.============-.. \ | / ..-============.______\\`.
|
|
11
|
-
.'______________________________\|/______________________________`.
|
|
12
|
-
</pre>
|
|
13
|
-
|
|
14
|
-
<h1>✎ NanoPencil</h1>
|
|
15
|
-
|
|
16
|
-
<p><strong>The AI Coding Agent That Remembers & Evolves</strong></p>
|
|
17
|
-
|
|
18
|
-
<p>
|
|
19
|
-
<a href="https://www.npmjs.com/package/@pencil-agent/nano-pencil">
|
|
20
|
-
<img src="https://img.shields.io/npm/v/@pencil-agent/nano-pencil.svg?style=flat-square&color=cb3837" alt="npm version">
|
|
21
|
-
</a>
|
|
22
|
-
<a href="https://nodejs.org">
|
|
23
|
-
<img src="https://img.shields.io/node/v/@pencil-agent/nano-pencil.svg?style=flat-square&color=339933" alt="Node.js">
|
|
24
|
-
</a>
|
|
25
|
-
<a href="https://www.npmjs.com/package/@pencil-agent/nano-pencil">
|
|
26
|
-
<img src="https://img.shields.io/npm/dm/@pencil-agent/nano-pencil.svg?style=flat-square&color=cb3837" alt="Downloads">
|
|
27
|
-
</a>
|
|
28
|
-
<img src="https://img.shields.io/badge/TypeScript-5.0+-blue?style=flat-square&color=3178C6" alt="TypeScript">
|
|
29
|
-
<img src="https://img.shields.io/badge/License-GPL--3.0-green?style=flat-square&color=brightgreen" alt="License">
|
|
30
|
-
</p>
|
|
31
|
-
|
|
32
|
-
<p>
|
|
33
|
-
<a href="#-why-nanopencil">Why NanoPencil?</a> •
|
|
34
|
-
<a href="#-features">Features</a> •
|
|
35
|
-
<a href="#-quick-start">Quick Start</a> •
|
|
36
|
-
<a href="#-documentation">Docs</a>
|
|
37
|
-
</p>
|
|
38
|
-
|
|
39
|
-
<p>
|
|
40
|
-
<a href="./README.md"><img src="https://img.shields.io/badge/English-Active-blue?style=flat-square" alt="English"></a>
|
|
41
|
-
<a href="./README_CN.md"><img src="https://img.shields.io/badge/中文-切换-orange?style=flat-square" alt="中文"></a>
|
|
42
|
-
</p>
|
|
43
|
-
|
|
44
|
-
</div>
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## 🌟 Why NanoPencil?
|
|
49
|
-
|
|
50
|
-
> **"The only AI coding assistant that truly learns from you"**
|
|
51
|
-
|
|
52
|
-
NanoPencil isn't just another AI coding tool. It's a **terminal-native AI agent** with **persistent memory** and **evolving personality** — designed for developers who live in the terminal.
|
|
53
|
-
|
|
54
|
-
### What Makes It Different?
|
|
55
|
-
|
|
56
|
-
| | Other Tools | NanoPencil |
|
|
57
|
-
|---|---|---|
|
|
58
|
-
| **Memory** | ❌ Starts fresh every session | ✅ Remembers your projects, preferences, and coding style |
|
|
59
|
-
| **Personality** | ❌ Generic responses | ✅ Evolves a unique personality based on your interactions |
|
|
60
|
-
| **Terminal Native** | ❌ GUI wrappers or plugins | ✅ Pure TUI built for terminal workflows |
|
|
61
|
-
| **Model Freedom** | ❌ Vendor lock-in | ✅ 10+ providers, switch instantly |
|
|
62
|
-
| **Offline Ready** | ❌ Cloud dependent | ✅ Local models via Ollama |
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## ✨ Features
|
|
67
|
-
|
|
68
|
-
### 🧠 Persistent Memory (NanoMem)
|
|
69
|
-
Your projects have context. So should your AI.
|
|
70
|
-
|
|
71
|
-
- **Project Knowledge** — API endpoints, database schemas, architecture decisions
|
|
72
|
-
- **Error Patterns** — Remembers bugs and their solutions
|
|
73
|
-
- **User Preferences** — Coding style, naming conventions, framework choices
|
|
74
|
-
- **Smart Retrieval** — Automatically recalls relevant context when needed
|
|
75
|
-
|
|
76
|
-
### 💫 AI Personality Evolution (NanoSoul)
|
|
77
|
-
Your AI assistant develops its own character.
|
|
78
|
-
|
|
79
|
-
- **Big Five Traits** — Openness, Conscientiousness, Extraversion, Agreeableness, Neuroticism
|
|
80
|
-
- **Coding Style** — Verbosity, abstraction level, safety margins
|
|
81
|
-
- **Domain Expertise** — Frontend, Backend, DevOps, AI/ML specializations
|
|
82
|
-
- **Emotional States** — Confidence, curiosity, flow state
|
|
83
|
-
|
|
84
|
-
> *After 50 sessions, your NanoPencil will code differently than anyone else's.*
|
|
85
|
-
|
|
86
|
-
### 🎨 Beautiful TUI
|
|
87
|
-
A terminal interface that feels alive.
|
|
88
|
-
|
|
89
|
-
- **Three Themes** — Dark, Light, and Warm (eye-friendly)
|
|
90
|
-
- **Smooth Animations** — Breathing pencil loader
|
|
91
|
-
- **Intuitive Navigation** — Vim-like keybindings, fuzzy search
|
|
92
|
-
- **Real-time Streaming** — Watch the AI think in real-time
|
|
93
|
-
|
|
94
|
-
### 🔌 MCP Protocol Support
|
|
95
|
-
Extend with the Model Context Protocol.
|
|
96
|
-
|
|
97
|
-
Built-in tools include:
|
|
98
|
-
- 📁 Filesystem operations
|
|
99
|
-
- 🌐 HTTP requests (Fetch)
|
|
100
|
-
- 🎭 Browser automation (Puppeteer)
|
|
101
|
-
- 🗄️ Database queries (SQLite)
|
|
102
|
-
- 🔧 Git operations
|
|
103
|
-
|
|
104
|
-
### 🌐 Multi-Model Support
|
|
105
|
-
Use the best model for each task.
|
|
106
|
-
|
|
107
|
-
- 🇨🇳 **Alibaba DashScope** — Qwen series (optimized for coding)
|
|
108
|
-
- 🤖 **OpenAI** — GPT-4, GPT-3.5
|
|
109
|
-
- 💬 **Anthropic** — Claude 3 Opus/Sonnet/Haiku
|
|
110
|
-
- 🔍 **Google** — Gemini Pro/Ultra
|
|
111
|
-
- 🏠 **Local** — Ollama (Qwen, Llama, Mistral, etc.)
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## 🚀 Quick Start
|
|
116
|
-
|
|
117
|
-
### Installation
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
npm install -g @pencil-agent/nano-pencil
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### First Run
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
nanopencil
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
1. **Select your model** — Choose from available providers
|
|
130
|
-
2. **Enter API key** — Securely stored in `~/.nanopencil/agent/auth.json`
|
|
131
|
-
3. **Start coding** — Just type what you want to build
|
|
132
|
-
|
|
133
|
-
### Example Session
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
You: Create a JWT authentication middleware for Express
|
|
137
|
-
|
|
138
|
-
AI: [Analyzing project structure...]
|
|
139
|
-
[Creating auth.middleware.ts...]
|
|
140
|
-
[Adding TypeScript types...]
|
|
141
|
-
[Writing tests...]
|
|
142
|
-
|
|
143
|
-
✅ Done! Created:
|
|
144
|
-
- src/middleware/auth.middleware.ts
|
|
145
|
-
- src/types/auth.d.ts
|
|
146
|
-
- tests/auth.middleware.test.ts
|
|
147
|
-
|
|
148
|
-
Features:
|
|
149
|
-
• JWT verification with RS256
|
|
150
|
-
• Refresh token rotation
|
|
151
|
-
• Role-based access control
|
|
152
|
-
• Rate limiting integration
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 🎮 Usage
|
|
158
|
-
|
|
159
|
-
### Interactive Mode
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
nanopencil # Start new session
|
|
163
|
-
nanopencil -c # Continue last session
|
|
164
|
-
nanopencil -r # Resume from history
|
|
165
|
-
nanopencil -m qwen-max # Use specific model
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Print Mode (Scripts)
|
|
169
|
-
|
|
170
|
-
```bash
|
|
171
|
-
# Single query
|
|
172
|
-
nanopencil -p "Refactor this to use async/await"
|
|
173
|
-
|
|
174
|
-
# Pipe input
|
|
175
|
-
cat bug-report.md | nanopencil -p "Analyze this bug"
|
|
176
|
-
|
|
177
|
-
# Chain commands
|
|
178
|
-
nanopencil -p "Generate API" | nanopencil -p "Write tests for it"
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Slash Commands
|
|
182
|
-
|
|
183
|
-
| Command | Description |
|
|
184
|
-
|---------|-------------|
|
|
185
|
-
| `/model` | Switch AI model |
|
|
186
|
-
| `/thinking` | Adjust reasoning depth |
|
|
187
|
-
| `/fork` | Branch conversation |
|
|
188
|
-
| `/tree` | Browse session history |
|
|
189
|
-
| `/memory` | View project memories |
|
|
190
|
-
| `/soul` | Check AI personality |
|
|
191
|
-
| `/settings` | Configure preferences |
|
|
192
|
-
| `/export` | Save as HTML |
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## 📊 Comparison
|
|
197
|
-
|
|
198
|
-
| Feature | NanoPencil | Cursor | Claude Code | Aider |
|
|
199
|
-
|---------|:----------:|:------:|:-----------:|:-----:|
|
|
200
|
-
| Terminal Native | ✅ | ❌ | ✅ | ✅ |
|
|
201
|
-
| Persistent Memory | ✅ | ❌ | ❌ | ❌ |
|
|
202
|
-
| AI Personality | ✅ | ❌ | ❌ | ❌ |
|
|
203
|
-
| Session Branching | ✅ | ✅ | ✅ | ❌ |
|
|
204
|
-
| Multi-Model | ✅ | ✅ | ❌ | ✅ |
|
|
205
|
-
| MCP Support | ✅ | ❌ | ✅ | ❌ |
|
|
206
|
-
| Offline Mode | ✅ | ❌ | ❌ | ✅ |
|
|
207
|
-
| Chinese Optimized | ✅ | ❌ | ❌ | ❌ |
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## 🏗️ Architecture Philosophy
|
|
212
|
-
|
|
213
|
-
NanoPencil is built on three pillars:
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
┌─────────────────────────────────────────┐
|
|
217
|
-
│ 🧠 COGNITIVE LAYER │
|
|
218
|
-
│ (Memory + Personality + Context) │
|
|
219
|
-
├─────────────────────────────────────────┤
|
|
220
|
-
│ 🔧 TOOL LAYER │
|
|
221
|
-
│ (File Ops + Bash + Search + MCP) │
|
|
222
|
-
├─────────────────────────────────────────┤
|
|
223
|
-
│ 🎨 INTERFACE LAYER │
|
|
224
|
-
│ (TUI + Themes + Keybindings) │
|
|
225
|
-
└─────────────────────────────────────────┘
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
**Design Principles:**
|
|
229
|
-
- **Terminal First** — No Electron, no browser, pure terminal
|
|
230
|
-
- **Privacy First** — Local storage, no telemetry, your data stays yours
|
|
231
|
-
- **Extensible** — Plugin system for tools, themes, and behaviors
|
|
232
|
-
- **Fast** — Sub-second startup, instant response
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## 📚 Documentation
|
|
237
|
-
|
|
238
|
-
- [Installation Guide](docs/INSTALL.md)
|
|
239
|
-
- [Configuration](docs/CONFIG.md)
|
|
240
|
-
- [Memory System](docs/记忆系统.md)
|
|
241
|
-
- [MCP Guide](docs/MCP集成指南.md)
|
|
242
|
-
- [Keybindings](docs/KEYBINDINGS.md)
|
|
243
|
-
- [Extensions](docs/EXTENSIONS.md)
|
|
244
|
-
|
|
245
|
-
---
|
|
246
|
-
|
|
247
|
-
## 🌍 Community
|
|
248
|
-
|
|
249
|
-
- 💬 [Discussions](https://github.com/pencil-agent/nano-pencil/discussions)
|
|
250
|
-
- 🐛 [Issues](https://github.com/pencil-agent/nano-pencil/issues)
|
|
251
|
-
- 📝 [Changelog](CHANGELOG.md)
|
|
252
|
-
|
|
253
|
-
---
|
|
254
|
-
|
|
255
|
-
## 📄 License
|
|
256
|
-
|
|
257
|
-
MIT © [Pencil Agent](https://github.com/pencil-agent)
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
<div align="center">
|
|
262
|
-
|
|
263
|
-
**[⬆ Back to Top](#-nanopencil)**
|
|
264
|
-
|
|
265
|
-
<sub>Built with ❤️ for terminal dwellers everywhere</sub>
|
|
266
|
-
|
|
267
|
-
</div>
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<pre>
|
|
4
|
+
.-~~~~~~~~~-._ _.-~~~~~~~~~-.
|
|
5
|
+
__.' ~. .~ `.__
|
|
6
|
+
.'// \./ \\`.
|
|
7
|
+
.'// | \\`.
|
|
8
|
+
.'// .-~""""""""""""""-._ | _,-""""""""""""""~-. \\`.
|
|
9
|
+
.'//.-" `-. | .-' "-.\\`.
|
|
10
|
+
.'//______.============-.. \ | / ..-============.______\\`.
|
|
11
|
+
.'______________________________\|/______________________________`.
|
|
12
|
+
</pre>
|
|
13
|
+
|
|
14
|
+
<h1>✎ NanoPencil</h1>
|
|
15
|
+
|
|
16
|
+
<p><strong>The AI Coding Agent That Remembers & Evolves</strong></p>
|
|
17
|
+
|
|
18
|
+
<p>
|
|
19
|
+
<a href="https://www.npmjs.com/package/@pencil-agent/nano-pencil">
|
|
20
|
+
<img src="https://img.shields.io/npm/v/@pencil-agent/nano-pencil.svg?style=flat-square&color=cb3837" alt="npm version">
|
|
21
|
+
</a>
|
|
22
|
+
<a href="https://nodejs.org">
|
|
23
|
+
<img src="https://img.shields.io/node/v/@pencil-agent/nano-pencil.svg?style=flat-square&color=339933" alt="Node.js">
|
|
24
|
+
</a>
|
|
25
|
+
<a href="https://www.npmjs.com/package/@pencil-agent/nano-pencil">
|
|
26
|
+
<img src="https://img.shields.io/npm/dm/@pencil-agent/nano-pencil.svg?style=flat-square&color=cb3837" alt="Downloads">
|
|
27
|
+
</a>
|
|
28
|
+
<img src="https://img.shields.io/badge/TypeScript-5.0+-blue?style=flat-square&color=3178C6" alt="TypeScript">
|
|
29
|
+
<img src="https://img.shields.io/badge/License-GPL--3.0-green?style=flat-square&color=brightgreen" alt="License">
|
|
30
|
+
</p>
|
|
31
|
+
|
|
32
|
+
<p>
|
|
33
|
+
<a href="#-why-nanopencil">Why NanoPencil?</a> •
|
|
34
|
+
<a href="#-features">Features</a> •
|
|
35
|
+
<a href="#-quick-start">Quick Start</a> •
|
|
36
|
+
<a href="#-documentation">Docs</a>
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
<p>
|
|
40
|
+
<a href="./README.md"><img src="https://img.shields.io/badge/English-Active-blue?style=flat-square" alt="English"></a>
|
|
41
|
+
<a href="./README_CN.md"><img src="https://img.shields.io/badge/中文-切换-orange?style=flat-square" alt="中文"></a>
|
|
42
|
+
</p>
|
|
43
|
+
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 🌟 Why NanoPencil?
|
|
49
|
+
|
|
50
|
+
> **"The only AI coding assistant that truly learns from you"**
|
|
51
|
+
|
|
52
|
+
NanoPencil isn't just another AI coding tool. It's a **terminal-native AI agent** with **persistent memory** and **evolving personality** — designed for developers who live in the terminal.
|
|
53
|
+
|
|
54
|
+
### What Makes It Different?
|
|
55
|
+
|
|
56
|
+
| | Other Tools | NanoPencil |
|
|
57
|
+
|---|---|---|
|
|
58
|
+
| **Memory** | ❌ Starts fresh every session | ✅ Remembers your projects, preferences, and coding style |
|
|
59
|
+
| **Personality** | ❌ Generic responses | ✅ Evolves a unique personality based on your interactions |
|
|
60
|
+
| **Terminal Native** | ❌ GUI wrappers or plugins | ✅ Pure TUI built for terminal workflows |
|
|
61
|
+
| **Model Freedom** | ❌ Vendor lock-in | ✅ 10+ providers, switch instantly |
|
|
62
|
+
| **Offline Ready** | ❌ Cloud dependent | ✅ Local models via Ollama |
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## ✨ Features
|
|
67
|
+
|
|
68
|
+
### 🧠 Persistent Memory (NanoMem)
|
|
69
|
+
Your projects have context. So should your AI.
|
|
70
|
+
|
|
71
|
+
- **Project Knowledge** — API endpoints, database schemas, architecture decisions
|
|
72
|
+
- **Error Patterns** — Remembers bugs and their solutions
|
|
73
|
+
- **User Preferences** — Coding style, naming conventions, framework choices
|
|
74
|
+
- **Smart Retrieval** — Automatically recalls relevant context when needed
|
|
75
|
+
|
|
76
|
+
### 💫 AI Personality Evolution (NanoSoul)
|
|
77
|
+
Your AI assistant develops its own character.
|
|
78
|
+
|
|
79
|
+
- **Big Five Traits** — Openness, Conscientiousness, Extraversion, Agreeableness, Neuroticism
|
|
80
|
+
- **Coding Style** — Verbosity, abstraction level, safety margins
|
|
81
|
+
- **Domain Expertise** — Frontend, Backend, DevOps, AI/ML specializations
|
|
82
|
+
- **Emotional States** — Confidence, curiosity, flow state
|
|
83
|
+
|
|
84
|
+
> *After 50 sessions, your NanoPencil will code differently than anyone else's.*
|
|
85
|
+
|
|
86
|
+
### 🎨 Beautiful TUI
|
|
87
|
+
A terminal interface that feels alive.
|
|
88
|
+
|
|
89
|
+
- **Three Themes** — Dark, Light, and Warm (eye-friendly)
|
|
90
|
+
- **Smooth Animations** — Breathing pencil loader
|
|
91
|
+
- **Intuitive Navigation** — Vim-like keybindings, fuzzy search
|
|
92
|
+
- **Real-time Streaming** — Watch the AI think in real-time
|
|
93
|
+
|
|
94
|
+
### 🔌 MCP Protocol Support
|
|
95
|
+
Extend with the Model Context Protocol.
|
|
96
|
+
|
|
97
|
+
Built-in tools include:
|
|
98
|
+
- 📁 Filesystem operations
|
|
99
|
+
- 🌐 HTTP requests (Fetch)
|
|
100
|
+
- 🎭 Browser automation (Puppeteer)
|
|
101
|
+
- 🗄️ Database queries (SQLite)
|
|
102
|
+
- 🔧 Git operations
|
|
103
|
+
|
|
104
|
+
### 🌐 Multi-Model Support
|
|
105
|
+
Use the best model for each task.
|
|
106
|
+
|
|
107
|
+
- 🇨🇳 **Alibaba DashScope** — Qwen series (optimized for coding)
|
|
108
|
+
- 🤖 **OpenAI** — GPT-4, GPT-3.5
|
|
109
|
+
- 💬 **Anthropic** — Claude 3 Opus/Sonnet/Haiku
|
|
110
|
+
- 🔍 **Google** — Gemini Pro/Ultra
|
|
111
|
+
- 🏠 **Local** — Ollama (Qwen, Llama, Mistral, etc.)
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 🚀 Quick Start
|
|
116
|
+
|
|
117
|
+
### Installation
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
npm install -g @pencil-agent/nano-pencil
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### First Run
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
nanopencil
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
1. **Select your model** — Choose from available providers
|
|
130
|
+
2. **Enter API key** — Securely stored in `~/.nanopencil/agent/auth.json`
|
|
131
|
+
3. **Start coding** — Just type what you want to build
|
|
132
|
+
|
|
133
|
+
### Example Session
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
You: Create a JWT authentication middleware for Express
|
|
137
|
+
|
|
138
|
+
AI: [Analyzing project structure...]
|
|
139
|
+
[Creating auth.middleware.ts...]
|
|
140
|
+
[Adding TypeScript types...]
|
|
141
|
+
[Writing tests...]
|
|
142
|
+
|
|
143
|
+
✅ Done! Created:
|
|
144
|
+
- src/middleware/auth.middleware.ts
|
|
145
|
+
- src/types/auth.d.ts
|
|
146
|
+
- tests/auth.middleware.test.ts
|
|
147
|
+
|
|
148
|
+
Features:
|
|
149
|
+
• JWT verification with RS256
|
|
150
|
+
• Refresh token rotation
|
|
151
|
+
• Role-based access control
|
|
152
|
+
• Rate limiting integration
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 🎮 Usage
|
|
158
|
+
|
|
159
|
+
### Interactive Mode
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
nanopencil # Start new session
|
|
163
|
+
nanopencil -c # Continue last session
|
|
164
|
+
nanopencil -r # Resume from history
|
|
165
|
+
nanopencil -m qwen-max # Use specific model
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Print Mode (Scripts)
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# Single query
|
|
172
|
+
nanopencil -p "Refactor this to use async/await"
|
|
173
|
+
|
|
174
|
+
# Pipe input
|
|
175
|
+
cat bug-report.md | nanopencil -p "Analyze this bug"
|
|
176
|
+
|
|
177
|
+
# Chain commands
|
|
178
|
+
nanopencil -p "Generate API" | nanopencil -p "Write tests for it"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Slash Commands
|
|
182
|
+
|
|
183
|
+
| Command | Description |
|
|
184
|
+
|---------|-------------|
|
|
185
|
+
| `/model` | Switch AI model |
|
|
186
|
+
| `/thinking` | Adjust reasoning depth |
|
|
187
|
+
| `/fork` | Branch conversation |
|
|
188
|
+
| `/tree` | Browse session history |
|
|
189
|
+
| `/memory` | View project memories |
|
|
190
|
+
| `/soul` | Check AI personality |
|
|
191
|
+
| `/settings` | Configure preferences |
|
|
192
|
+
| `/export` | Save as HTML |
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 📊 Comparison
|
|
197
|
+
|
|
198
|
+
| Feature | NanoPencil | Cursor | Claude Code | Aider |
|
|
199
|
+
|---------|:----------:|:------:|:-----------:|:-----:|
|
|
200
|
+
| Terminal Native | ✅ | ❌ | ✅ | ✅ |
|
|
201
|
+
| Persistent Memory | ✅ | ❌ | ❌ | ❌ |
|
|
202
|
+
| AI Personality | ✅ | ❌ | ❌ | ❌ |
|
|
203
|
+
| Session Branching | ✅ | ✅ | ✅ | ❌ |
|
|
204
|
+
| Multi-Model | ✅ | ✅ | ❌ | ✅ |
|
|
205
|
+
| MCP Support | ✅ | ❌ | ✅ | ❌ |
|
|
206
|
+
| Offline Mode | ✅ | ❌ | ❌ | ✅ |
|
|
207
|
+
| Chinese Optimized | ✅ | ❌ | ❌ | ❌ |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 🏗️ Architecture Philosophy
|
|
212
|
+
|
|
213
|
+
NanoPencil is built on three pillars:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
┌─────────────────────────────────────────┐
|
|
217
|
+
│ 🧠 COGNITIVE LAYER │
|
|
218
|
+
│ (Memory + Personality + Context) │
|
|
219
|
+
├─────────────────────────────────────────┤
|
|
220
|
+
│ 🔧 TOOL LAYER │
|
|
221
|
+
│ (File Ops + Bash + Search + MCP) │
|
|
222
|
+
├─────────────────────────────────────────┤
|
|
223
|
+
│ 🎨 INTERFACE LAYER │
|
|
224
|
+
│ (TUI + Themes + Keybindings) │
|
|
225
|
+
└─────────────────────────────────────────┘
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Design Principles:**
|
|
229
|
+
- **Terminal First** — No Electron, no browser, pure terminal
|
|
230
|
+
- **Privacy First** — Local storage, no telemetry, your data stays yours
|
|
231
|
+
- **Extensible** — Plugin system for tools, themes, and behaviors
|
|
232
|
+
- **Fast** — Sub-second startup, instant response
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 📚 Documentation
|
|
237
|
+
|
|
238
|
+
- [Installation Guide](docs/INSTALL.md)
|
|
239
|
+
- [Configuration](docs/CONFIG.md)
|
|
240
|
+
- [Memory System](docs/记忆系统.md)
|
|
241
|
+
- [MCP Guide](docs/MCP集成指南.md)
|
|
242
|
+
- [Keybindings](docs/KEYBINDINGS.md)
|
|
243
|
+
- [Extensions](docs/EXTENSIONS.md)
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 🌍 Community
|
|
248
|
+
|
|
249
|
+
- 💬 [Discussions](https://github.com/pencil-agent/nano-pencil/discussions)
|
|
250
|
+
- 🐛 [Issues](https://github.com/pencil-agent/nano-pencil/issues)
|
|
251
|
+
- 📝 [Changelog](CHANGELOG.md)
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 📄 License
|
|
256
|
+
|
|
257
|
+
MIT © [Pencil Agent](https://github.com/pencil-agent)
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
<div align="center">
|
|
262
|
+
|
|
263
|
+
**[⬆ Back to Top](#-nanopencil)**
|
|
264
|
+
|
|
265
|
+
<sub>Built with ❤️ for terminal dwellers everywhere</sub>
|
|
266
|
+
|
|
267
|
+
</div>
|
|
@@ -19,6 +19,7 @@ const BUNDLED_SOUL_EXTENSION = join(__dirname, "extensions", "defaults", "soul",
|
|
|
19
19
|
const BUNDLED_PRESENCE_EXTENSION = join(__dirname, "extensions", "defaults", "presence", "index.js");
|
|
20
20
|
const BUNDLED_INTERVIEW_EXTENSION = join(__dirname, "extensions", "defaults", "interview", "index.js");
|
|
21
21
|
const BUNDLED_LOOP_EXTENSION = join(__dirname, "extensions", "defaults", "loop", "index.js");
|
|
22
|
+
const BUNDLED_PLAN_EXTENSION = join(__dirname, "extensions", "defaults", "plan", "index.js");
|
|
22
23
|
const BUNDLED_SAL_EXTENSION = join(__dirname, "extensions", "defaults", "sal", "index.js");
|
|
23
24
|
const BUNDLED_GRUB_EXTENSION = join(__dirname, "extensions", "defaults", "grub", "index.js");
|
|
24
25
|
const BUNDLED_SUBAGENT_EXTENSION = join(__dirname, "extensions", "defaults", "subagent", "index.js");
|
|
@@ -84,25 +85,28 @@ export function getBuiltinExtensionPaths() {
|
|
|
84
85
|
paths.push(BUNDLED_NANOMEM_EXTENSION_PACKAGES);
|
|
85
86
|
}
|
|
86
87
|
else {
|
|
87
|
-
// 2)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
paths.push(extPath);
|
|
88
|
+
// 2) Development mode: local workspace source file (preferred over node_modules to avoid conflicts)
|
|
89
|
+
const memCoreTs = join(__dirname, "packages", "mem-core", "src", "extension.ts");
|
|
90
|
+
if (existsSync(memCoreTs)) {
|
|
91
|
+
paths.push(memCoreTs);
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
// 3)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
else {
|
|
94
|
+
// 3) require.resolve: mem-core in node_modules during development/local install
|
|
95
|
+
try {
|
|
96
|
+
const extPath = require.resolve("@pencil-agent/mem-core/extension.js");
|
|
97
|
+
if (existsSync(extPath))
|
|
98
|
+
paths.push(extPath);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// 4) Look for package root + node_modules/@pencil-agent/mem-core/dist/extension.js
|
|
102
|
+
const packageRoot = findPackageRoot(__dirname);
|
|
103
|
+
if (packageRoot) {
|
|
104
|
+
const candidate = join(packageRoot, "node_modules", "@pencil-agent", "mem-core", "dist", "extension.js");
|
|
105
|
+
if (existsSync(candidate))
|
|
106
|
+
paths.push(candidate);
|
|
107
|
+
}
|
|
100
108
|
}
|
|
101
109
|
}
|
|
102
|
-
// 4) Development mode: local workspace source file
|
|
103
|
-
const memCoreTs = join(__dirname, "packages", "mem-core", "src", "extension.ts");
|
|
104
|
-
if (existsSync(memCoreTs))
|
|
105
|
-
paths.push(memCoreTs);
|
|
106
110
|
}
|
|
107
111
|
// === Simplify extension (optional source, compiled to dist/extensions/optional/simplify) ===
|
|
108
112
|
if (existsSync(BUNDLED_SIMPLIFY_EXTENSION)) {
|
|
@@ -177,6 +181,15 @@ export function getBuiltinExtensionPaths() {
|
|
|
177
181
|
if (existsSync(loopTs))
|
|
178
182
|
paths.push(loopTs);
|
|
179
183
|
}
|
|
184
|
+
// === Plan extension (/plan mode for planning before coding) ===
|
|
185
|
+
if (existsSync(BUNDLED_PLAN_EXTENSION)) {
|
|
186
|
+
paths.push(BUNDLED_PLAN_EXTENSION);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const planTs = join(__dirname, "extensions", "defaults", "plan", "index.ts");
|
|
190
|
+
if (existsSync(planTs))
|
|
191
|
+
paths.push(planTs);
|
|
192
|
+
}
|
|
180
193
|
// === MCP extension (MCP tool protocol adapter) ===
|
|
181
194
|
// Built-in SubAgent extension
|
|
182
195
|
if (existsSync(BUNDLED_SUBAGENT_EXTENSION)) {
|