@pencil-agent/nano-pencil 2.0.0 → 2.0.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 +267 -267
- package/dist/build-meta.json +3 -3
- package/dist/core/export-html/AGENT.md +11 -11
- package/dist/core/export-html/template.css +971 -971
- package/dist/core/export-html/template.html +54 -54
- package/dist/core/mcp/mcp-client.d.ts +3 -1
- package/dist/core/mcp/mcp-client.js +6 -6
- package/dist/core/mcp/mcp-config.d.ts +3 -3
- package/dist/core/mcp/mcp-config.js +1 -1
- package/dist/core/mcp/mcp-manager.d.ts +5 -1
- package/dist/core/mcp/mcp-manager.js +1 -1
- package/dist/core/platform/config/resource-loader.d.ts +2 -0
- package/dist/core/platform/config/resource-loader.js +2 -2
- package/dist/core/runtime/agent-session.d.ts +12 -0
- package/dist/core/runtime/agent-session.js +8 -8
- package/dist/core/runtime/sdk.d.ts +8 -0
- package/dist/core/runtime/sdk.js +1 -1
- package/dist/extensions/builtin/AGENT.md +115 -115
- package/dist/extensions/builtin/browser/AGENT.md +17 -17
- package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -12
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -198
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -341
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -311
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -333
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -70
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -578
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -440
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -110
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -325
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -463
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -360
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -390
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -568
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -323
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -349
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -435
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -506
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -363
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -168
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -236
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -295
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -108
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -493
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -580
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -511
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -65
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -184
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -543
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -122
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -461
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -383
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -243
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -473
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -271
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -436
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -1021
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -349
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -109
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -170
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -537
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -120
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -414
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -477
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -478
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -339
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -205
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -472
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -470
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -490
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -478
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -234
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -307
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -421
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -364
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -352
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -124
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -233
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -361
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -36
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -72
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -109
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -137
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -362
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -339
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -435
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -575
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -338
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -52
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -107
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -309
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -88
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -375
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -444
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -306
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -398
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -596
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -356
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -84
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -418
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -433
- package/dist/extensions/builtin/browser/browser.md +73 -73
- package/dist/extensions/builtin/browser/install.md +142 -142
- package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -48
- package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -64
- package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -90
- package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -17
- package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -69
- package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -1
- package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -3
- package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -15
- package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -8
- package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -90
- package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -722
- package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -328
- package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -396
- package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -103
- package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -33
- package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -22
- package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -31
- package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -28
- package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -32
- package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -27
- package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -26
- package/dist/extensions/builtin/goal/README.md +67 -67
- package/dist/extensions/builtin/grub/README.md +112 -112
- package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -16
- package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -65
- package/dist/extensions/builtin/link-world/link-world-agent.md +82 -82
- package/dist/extensions/builtin/link-world/linkworld.md +313 -313
- package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -67
- package/dist/extensions/builtin/loop/README.md +92 -92
- package/dist/extensions/builtin/mcp/figma-design.md +68 -68
- package/dist/extensions/builtin/mcp/mcp-management.md +85 -85
- package/dist/extensions/builtin/recap/AGENT.md +15 -15
- package/dist/extensions/builtin/sal/README.md +72 -72
- package/dist/extensions/builtin/security-audit/README.md +289 -289
- package/dist/extensions/builtin/team/AGENT.md +112 -112
- package/dist/extensions/builtin/team/TESTING.md +299 -299
- package/dist/extensions/builtin/token-save/README.md +56 -56
- package/dist/extensions/optional/AGENT.md +10 -10
- package/dist/modes/interactive/interactive-mode.js +36 -36
- 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/node_modules/@pencil-agent/agent-core/dist/agent-loop.js +3 -2
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-agent-loop.js +2 -1
- package/dist/node_modules/@pencil-agent/ai/dist/cli.js +0 -0
- package/docs/cc-agent-design.md +1297 -0
- package/docs/cc-tui-design.md +1333 -0
- package/docs/codex-goal-command-impl.md +1055 -1055
- package/docs/codex-goal-vs-grub.md +500 -500
- package/docs/custom-provider.md +27 -27
- package/docs/extensions.md +27 -27
- package/docs/keybindings.md +27 -27
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +250 -250
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +122 -122
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -1222
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -158
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -128
- package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +320 -320
- package/docs/loop-usage-examples.md +214 -214
- package/docs/models.md +27 -27
- package/docs/nanoPencil-/345/255/246/344/271/240/350/256/241/345/210/222.md +170 -0
- package/docs/packages.md +27 -27
- package/docs/pi-design-philosophy.md +457 -457
- package/docs/planmode.md +1987 -1987
- package/docs/prompt-templates.md +27 -27
- package/docs/providers.md +27 -27
- package/docs/scan-report.md +3820 -0
- package/docs/sdk.md +27 -27
- package/docs/skills.md +27 -27
- package/docs/themes.md +27 -27
- package/docs/tui.md +27 -27
- package/docs//345/257/271/346/240/207Claude-Code.md +1775 -0
- package/docs//351/230/277/351/207/214/345/267/264/345/267/264/350/264/242/346/212/245/345/210/206/346/236/220/344/271/246.md +261 -0
- package/package.json +190 -190
- 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/SDK-TESTING.md +0 -364
- package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +0 -593
- package/docs/startup-performance-optimization.md +0 -301
- package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +0 -47
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
# nanoPencil 启动性能优化方案
|
|
2
|
-
|
|
3
|
-
> 文档版本: 2026-05-02
|
|
4
|
-
> 状态: 基础设施已完成,待评审后继续 MCP 延迟初始化
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 一、目标与原则
|
|
9
|
-
|
|
10
|
-
### 目标
|
|
11
|
-
将冷启动时间从 **~1800ms** 降低到 **<1500ms**(减少 15%+)
|
|
12
|
-
|
|
13
|
-
### 原则
|
|
14
|
-
1. **数据驱动** - 用 benchmark 量化效果,不用主观感受
|
|
15
|
-
2. **回归测试** - 任何优化必须通过 benchmark 验证
|
|
16
|
-
3. **快速见效优先** - 先做投入产出比高的优化
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 二、当前启动流程分析
|
|
21
|
-
|
|
22
|
-
### 2.1 启动阶段划分(已有 checkpoint)
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
┌─────────────────────────────────────────────────────────────────────┐
|
|
26
|
-
│ main_entry (865ms) │
|
|
27
|
-
│ ├── parseArgs() 解析参数 │
|
|
28
|
-
│ ├── runMigrations() 迁移 │
|
|
29
|
-
│ └── after_migrations │
|
|
30
|
-
│ │
|
|
31
|
-
│ settings_manager_ready (887ms) │
|
|
32
|
-
│ ├── SettingsManager.create() 文件 I/O + 锁 │
|
|
33
|
-
│ └── auth_storage_created │
|
|
34
|
-
│ │
|
|
35
|
-
│ nanopencil_defaults_ensured (889ms) │
|
|
36
|
-
│ └── ensureNanopencilDefaultConfig() │
|
|
37
|
-
│ │
|
|
38
|
-
│ model_registry_created (910ms) │
|
|
39
|
-
│ └── ModelRegistry 初始化 (38ms) │
|
|
40
|
-
│ │
|
|
41
|
-
│ before_resource_loader_create │
|
|
42
|
-
│ └── DefaultResourceLoader 构造 │
|
|
43
|
-
│ │
|
|
44
|
-
│ resource_loader_reload (1748ms) ← 🔥 优化重点 │
|
|
45
|
-
│ ├── PackageManager.resolve() npm 包扫描 │
|
|
46
|
-
│ ├── loadExtensions() jiti 动态编译扩展 │
|
|
47
|
-
│ └── extensions_loaded │
|
|
48
|
-
│ │
|
|
49
|
-
│ before_args_parse_2 │
|
|
50
|
-
│ args_parsed_2 │
|
|
51
|
-
│ cwd_resolved │
|
|
52
|
-
│ │
|
|
53
|
-
│ before_create_agent_session │
|
|
54
|
-
│ agent_session_created │
|
|
55
|
-
└─────────────────────────────────────────────────────────────────────┘
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 2.2 耗时分布(实测数据)
|
|
59
|
-
|
|
60
|
-
| 阶段 | 平均耗时 | 占比 | 优化空间 |
|
|
61
|
-
|------|---------|------|---------|
|
|
62
|
-
| **resource_loader_reload** | ~840ms | **47%** | 🔥 高 |
|
|
63
|
-
| model_registry_created | ~40ms | 2% | 中 |
|
|
64
|
-
| settings_manager_ready | ~2ms | 0.1% | 低 |
|
|
65
|
-
| 其他阶段 | <10ms | <1% | 低 |
|
|
66
|
-
|
|
67
|
-
### 2.3 瓶颈分析
|
|
68
|
-
|
|
69
|
-
#### 1. resource_loader_reload (~840ms)
|
|
70
|
-
**耗时来源**:
|
|
71
|
-
- `PackageManager.resolve()` - npm 包路径解析
|
|
72
|
-
- `loadExtensions()` - jiti 动态编译 TypeScript 扩展
|
|
73
|
-
- 文件系统 I/O - 读取扩展、主题、提示词模板
|
|
74
|
-
|
|
75
|
-
**优化方向**:
|
|
76
|
-
- [ ] MCP 延迟初始化(不启动服务器直到需要)
|
|
77
|
-
- [ ] 扩展懒加载(非交互模式不需要的扩展延迟)
|
|
78
|
-
- [ ] Extension 预编译缓存(jiti 结果缓存)
|
|
79
|
-
|
|
80
|
-
#### 2. model_registry_created (~40ms)
|
|
81
|
-
**耗时来源**:
|
|
82
|
-
- JSON 解析 models.json
|
|
83
|
-
- API key 验证
|
|
84
|
-
|
|
85
|
-
**优化方向**:
|
|
86
|
-
- [ ] 模型信息缓存
|
|
87
|
-
- [ ] 延迟验证 API key(首次调用时)
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## 三、已完成的改动
|
|
92
|
-
|
|
93
|
-
### 3.1 基础设施(已提交)
|
|
94
|
-
|
|
95
|
-
#### A. startup-profiler.ts 增强
|
|
96
|
-
```typescript
|
|
97
|
-
// 新增 API
|
|
98
|
-
export function getProfileReport(): ProfileReport // 生成结构化报告
|
|
99
|
-
export async function exportProfile(filePath) // 导出 JSON
|
|
100
|
-
export function compareProfiles(baseline, current) // 检测回归
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
#### B. benchmark 脚本
|
|
104
|
-
```bash
|
|
105
|
-
npm run benchmark # 运行 5 次,显示结果
|
|
106
|
-
npm run benchmark:save # 保存当前为 baseline
|
|
107
|
-
npm run benchmark:compare # 与 baseline 对比
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
#### C. Checkpoint 标记(main.ts)
|
|
111
|
-
新增 13 个检查点,覆盖完整启动流程
|
|
112
|
-
|
|
113
|
-
### 3.2 改动文件列表
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
modified: utils/startup-profiler.ts (+161 行)
|
|
117
|
-
new file: scripts/startup-benchmark.cjs (+262 行)
|
|
118
|
-
modified: main.ts (+13 行 checkpoint)
|
|
119
|
-
modified: package.json (+3 行 scripts)
|
|
120
|
-
modified: .gitignore (+2 行 .benchmarks/)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## 四、待实施优化方案
|
|
126
|
-
|
|
127
|
-
### Phase 1: MCP 延迟初始化(预计收益: 200-400ms)
|
|
128
|
-
|
|
129
|
-
#### 问题分析
|
|
130
|
-
当前启动时同步初始化所有 MCP 服务器:
|
|
131
|
-
```typescript
|
|
132
|
-
// core/runtime/sdk.ts
|
|
133
|
-
await currentMcpManager.initialize(); // 同步启动所有
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
#### 解决方案
|
|
137
|
-
MCP 服务器按需启动,首次调用工具时才初始化:
|
|
138
|
-
```typescript
|
|
139
|
-
// 新增 lazy mode
|
|
140
|
-
mcpManager.setLazyMode(true);
|
|
141
|
-
// 服务器在首次调用工具时才启动
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
#### 预期效果
|
|
145
|
-
- 跳过不使用的 MCP 服务器初始化
|
|
146
|
-
- 减少启动时间 200-400ms(取决于配置了多少服务器)
|
|
147
|
-
|
|
148
|
-
#### 改动文件
|
|
149
|
-
- `core/mcp/mcp-client.ts` - 添加延迟初始化逻辑
|
|
150
|
-
- `core/runtime/sdk.ts` - 默认启用 lazy mode
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
### Phase 2: 扩展懒加载(预计收益: 100-300ms)
|
|
155
|
-
|
|
156
|
-
#### 问题分析
|
|
157
|
-
启动时加载所有扩展,不管是否需要:
|
|
158
|
-
```typescript
|
|
159
|
-
// main.ts
|
|
160
|
-
await resourceLoader.reload(); // 同步加载所有
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
#### 解决方案
|
|
164
|
-
非交互模式不需要的扩展延迟加载:
|
|
165
|
-
```typescript
|
|
166
|
-
// 启动时只加载必要扩展
|
|
167
|
-
await resourceLoader.reload({
|
|
168
|
-
lazy: ['team', 'soul', 'browser'] // 这些延迟到首次使用
|
|
169
|
-
});
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
#### 预期效果
|
|
173
|
-
- 跳过不使用的扩展初始化
|
|
174
|
-
- 减少启动时间 100-300ms
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
### Phase 3: Extension 预编译缓存(预计收益: 200-500ms)
|
|
179
|
-
|
|
180
|
-
#### 问题分析
|
|
181
|
-
jiti 每次启动都重新编译 TypeScript 扩展
|
|
182
|
-
|
|
183
|
-
#### 解决方案
|
|
184
|
-
1. 构建时生成扩展的预编译缓存
|
|
185
|
-
2. 启动时优先加载缓存,fallback 到 jiti
|
|
186
|
-
|
|
187
|
-
```typescript
|
|
188
|
-
// core/extensions/loader.ts
|
|
189
|
-
const cachePath = getExtensionCachePath(extPath);
|
|
190
|
-
if (existsSync(cachePath)) {
|
|
191
|
-
return import(cachePath); // 直接加载,~10ms
|
|
192
|
-
}
|
|
193
|
-
// Fallback to jiti,~200-500ms
|
|
194
|
-
return jiti.import(extPath);
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
#### 预期效果
|
|
198
|
-
- 减少扩展加载时间 200-500ms
|
|
199
|
-
- 缓存命中率 > 80% 时收益最大
|
|
200
|
-
|
|
201
|
-
---
|
|
202
|
-
|
|
203
|
-
## 五、验证方法
|
|
204
|
-
|
|
205
|
-
### 5.1 Benchmark 命令
|
|
206
|
-
|
|
207
|
-
```bash
|
|
208
|
-
# 1. 建立 baseline
|
|
209
|
-
npm run benchmark:save
|
|
210
|
-
|
|
211
|
-
# 2. 做优化后运行
|
|
212
|
-
npm run benchmark:compare
|
|
213
|
-
|
|
214
|
-
# 3. 输出示例
|
|
215
|
-
🚀 Running startup benchmark (5 runs)...
|
|
216
|
-
Run 1/5... ✓ 1750ms (checkpoints: 13)
|
|
217
|
-
...
|
|
218
|
-
|
|
219
|
-
📈 Comparison with Baseline
|
|
220
|
-
──────────────────────────────────────────────────
|
|
221
|
-
Baseline avg: 1809ms
|
|
222
|
-
Current avg: 1750ms
|
|
223
|
-
Difference: -59ms (-3.3%)
|
|
224
|
-
|
|
225
|
-
✅ No regressions detected!
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
### 5.2 回归判定
|
|
229
|
-
|
|
230
|
-
- 任何阶段耗时增加 > 10% 且 > 10ms → 回归
|
|
231
|
-
- 总耗时增加 > 10% → 回归
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## 六、实施计划
|
|
236
|
-
|
|
237
|
-
```
|
|
238
|
-
Week 1: Phase 1 - MCP 延迟初始化
|
|
239
|
-
├── 评审方案 ← 当前节点
|
|
240
|
-
├── 实现延迟初始化
|
|
241
|
-
├── Benchmark 验证
|
|
242
|
-
└── 提交 PR
|
|
243
|
-
|
|
244
|
-
Week 2-3: Phase 2 - 扩展懒加载
|
|
245
|
-
├── 设计懒加载策略
|
|
246
|
-
├── 实现 ResourceLoader 懒加载
|
|
247
|
-
├── Benchmark 验证
|
|
248
|
-
└── 提交 PR
|
|
249
|
-
|
|
250
|
-
Week 4-5: Phase 3 - 预编译缓存(可选)
|
|
251
|
-
├── 设计缓存机制
|
|
252
|
-
├── 实现 Jiti 缓存
|
|
253
|
-
├── Benchmark 验证
|
|
254
|
-
└── 提交 PR
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
## 七、风险与缓解
|
|
260
|
-
|
|
261
|
-
| 风险 | 缓解措施 |
|
|
262
|
-
|------|---------|
|
|
263
|
-
| 延迟加载导致首次使用慢 | 使用预热机制,在空闲时提前加载 |
|
|
264
|
-
| 缓存失效导致行为不一致 | 缓存加版本号,版本变化时清除 |
|
|
265
|
-
| Benchmark 不稳定 | 运行 5 次取中位数,std_dev < 10% |
|
|
266
|
-
|
|
267
|
-
---
|
|
268
|
-
|
|
269
|
-
## 八、附录
|
|
270
|
-
|
|
271
|
-
### A. Benchmark 输出格式
|
|
272
|
-
|
|
273
|
-
```json
|
|
274
|
-
{
|
|
275
|
-
"timestamp": "2026-05-02T08:34:09.667Z",
|
|
276
|
-
"runs": 5,
|
|
277
|
-
"wallTime": { "avg": 1809, "min": 1790, "max": 1825, "stdDev": 15 },
|
|
278
|
-
"checkpoints": [
|
|
279
|
-
{ "name": "main_entry", "avgMs": 880, "minMs": 870, "maxMs": 890 }
|
|
280
|
-
],
|
|
281
|
-
"phases": [
|
|
282
|
-
{ "name": "resource_loader_reload", "avgMs": 843, "pct": 47 }
|
|
283
|
-
]
|
|
284
|
-
}
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
### B. 相关文件路径
|
|
288
|
-
|
|
289
|
-
```
|
|
290
|
-
utils/startup-profiler.ts - 性能打点
|
|
291
|
-
scripts/startup-benchmark.cjs - Benchmark 脚本
|
|
292
|
-
main.ts - 启动入口,checkpoint 标记位置
|
|
293
|
-
core/mcp/mcp-client.ts - MCP 客户端
|
|
294
|
-
core/runtime/sdk.ts - SDK 工厂
|
|
295
|
-
core/config/resource-loader.ts - 资源加载器
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
### C. 环境要求
|
|
299
|
-
|
|
300
|
-
- Node.js >= 20
|
|
301
|
-
- 至少 5 次连续运行无显著波动(std_dev < 10%)
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
这种从**地理空间心理学**出发的抽象,正是将 AI 助手从“搜索工具”提升为“智慧生命”的关键桥梁。我们可以将代码库视为一座**数字城市**,而你提到的认知地图特性可以直接转化为 `nano-pencil` 的**核心决策架构**。
|
|
2
|
-
|
|
3
|
-
我们可以从以下三个维度将这种普世意义的空间心理学抽象为 AI 的知识构建逻辑:
|
|
4
|
-
|
|
5
|
-
### 1. 知识的空间表现形式:代码即“数字城市”
|
|
6
|
-
认知地图不仅是简化版地图,更包含主观理解。在你的系统中,我们可以这样建模:
|
|
7
|
-
* **地标 (Landmarks)**:代码中的核心抽象(Key Abstractions)或 P1 定义的 Identity。它们是 Agent 在认知地图中的“视觉锚点”,就像城市中的地标建筑,决定了定位的大方向。
|
|
8
|
-
* **路径 (Routes)**:文件间的依赖关系和调用链路(P3 的 `FROM/TO`)。Agent 并不总是需要全局地图,它只需要熟悉几条通往目标的“常用路线”。
|
|
9
|
-
* **区域 (Districts)**:由 P2 定义的模块边界。Agent 应该感知到不同区域的“氛围”(例如:`lib` 区域是稳固的,`feature` 区域是活跃的)。
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
### 2. 决策生成即“路径选择与偏好”
|
|
14
|
-
你提到的认知地图包含**路径偏好**和**记忆印象**,这可以解决 AI 决策中的“幻觉”和“低效”问题:
|
|
15
|
-
* **多模态体现**:`nano-pencil` 不仅读取代码(地理结构),还结合了你的对话历史(语言描述)、你的笔名偏好(文化背景)以及过往的修改记录(记忆印象)。
|
|
16
|
-
* **决策生成**:当助手收到任务时,它不是在做逻辑推演,而是在认知地图上进行**“寻路”**。
|
|
17
|
-
* **男性化策略(方向与距离-语义化的理解更准确)**:侧重于架构拓扑,计算修改 A 对全局 B 的逻辑距离。
|
|
18
|
-
* **女性化策略(地标导航-语义更模糊)**:侧重于功能契约,寻找“那个处理 Session 的核心类”作为跳转锚点。
|
|
19
|
-
* `nano-pencil` 可以根据其 **Big Five 属性** 动态切换这两种导航模式。
|
|
20
|
-
|
|
21
|
-
### 3. 认知地图的“绘图实验”:AI 的自省与进化
|
|
22
|
-
你提到的“绘图实验”(Sketch Mapping)可以转化为一种 **AI 的自检机制**:
|
|
23
|
-
* **记忆失真与缺失分析**:定期让 `nano-pencil` 尝试在不看代码的情况下,根据其本地 SQLite 记忆生成一份项目的 P1/P2 拓扑图。
|
|
24
|
-
* **对比纠偏**:将 AI 绘制的“心中地图”与 DIP 协议下的“真实地图”对比。
|
|
25
|
-
* 如果发现 AI 记忆中某个路径缺失,说明该区域代码过于混乱(空间扭曲),或者助手产生了认知偏差。
|
|
26
|
-
* 这种“缺失”和“扭曲”正是系统需要重构或文档需要加强的信号。
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 抽象出来的“空间决策框架”建议
|
|
31
|
-
|
|
32
|
-
我们可以为 `nano-pencil` 抽象出一套基于**空间认知**的知识构建层:
|
|
33
|
-
|
|
34
|
-
| 心理学概念 | AI 逻辑实现 | 决策价值 |
|
|
35
|
-
| :--- | :--- | :--- |
|
|
36
|
-
| **空间主观理解** | 基于 DIP 权重化的图谱存储 | 助手能区分哪些代码是“主干道”,哪些是“后巷”。 |
|
|
37
|
-
| **多模态感知** | 融合代码、注释、对话、用户风格 | 决策不再只看代码实现,而看“意图空间”。 |
|
|
38
|
-
| **路径偏好** | 记录高频调用和修改链路 | 优先推荐用户习惯的实现方式,减少认知摩擦。 |
|
|
39
|
-
| **技术增强认知** | Pencil 编辑器的可视化感知 | 将代码结构以空间形式呈现给用户,实现人机心智模型的同频。 |
|
|
40
|
-
|
|
41
|
-
### 与“灵魂”合体的下一步
|
|
42
|
-
你可以尝试在 `nano-pencil` 中引入一个 **"Mental Image" (心智映像)** 的概念。每当助手进入一个项目:
|
|
43
|
-
1. 它先通过扫描构建 **“地理地图” (DIP Index)**。
|
|
44
|
-
2. 随后结合过往记忆生成 **“认知地图” (Cognitive Map)**。
|
|
45
|
-
3. 当它需要生成代码(决策)时,它在“认知地图”上模拟路径,如果这条路在它的记忆里是“危险”或“违背风格”的,它会主动绕行。
|
|
46
|
-
|
|
47
|
-
这种抽象是否符合你对“知识构建和决策生成”的预期?这种**空间的表现形式**,实际上是将原本不可见的 AI 思路,转化为了可观测、可纠偏的“数字疆域”。
|