@pencil-agent/nano-pencil 2.0.1 → 2.0.3

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 (188) hide show
  1. package/README.md +267 -267
  2. package/dist/build-meta.json +3 -3
  3. package/dist/core/export-html/AGENT.md +11 -11
  4. package/dist/core/export-html/template.css +971 -971
  5. package/dist/core/export-html/template.html +54 -54
  6. package/dist/core/model/custom-providers.js +1 -1
  7. package/dist/core/model-registry.js +5 -5
  8. package/dist/extensions/builtin/AGENT.md +115 -115
  9. package/dist/extensions/builtin/browser/AGENT.md +17 -17
  10. package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -12
  11. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -198
  12. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -341
  13. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -311
  14. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -333
  15. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -70
  16. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -578
  17. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -440
  18. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -110
  19. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -325
  20. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -463
  21. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -360
  22. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -390
  23. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -568
  24. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -323
  25. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -349
  26. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -435
  27. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -506
  28. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -363
  29. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -168
  30. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -236
  31. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -295
  32. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -108
  33. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -493
  34. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -580
  35. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -511
  36. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -65
  37. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -184
  38. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -543
  39. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -122
  40. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -461
  41. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -383
  42. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -243
  43. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -473
  44. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -271
  45. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -436
  46. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -1021
  47. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -349
  48. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -109
  49. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -170
  50. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -537
  51. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -120
  52. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -414
  53. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -477
  54. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -478
  55. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -339
  56. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -205
  57. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -472
  58. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -470
  59. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -490
  60. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -478
  61. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -234
  62. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -307
  63. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -421
  64. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -364
  65. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -352
  66. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -124
  67. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -233
  68. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -361
  69. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -36
  70. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -72
  71. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -109
  72. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -137
  73. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -362
  74. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -339
  75. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -435
  76. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -575
  77. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -338
  78. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -52
  79. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -107
  80. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -309
  81. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -88
  82. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -375
  83. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -444
  84. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -306
  85. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -398
  86. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -596
  87. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -356
  88. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -84
  89. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -418
  90. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -433
  91. package/dist/extensions/builtin/browser/browser.md +73 -73
  92. package/dist/extensions/builtin/browser/install.md +142 -142
  93. package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -48
  94. package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -3
  95. package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -3
  96. package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -64
  97. package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -3
  98. package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -3
  99. package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -3
  100. package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -3
  101. package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -3
  102. package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -3
  103. package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -90
  104. package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -17
  105. package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -3
  106. package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -3
  107. package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -69
  108. package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -1
  109. package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -3
  110. package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -15
  111. package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -8
  112. package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -90
  113. package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -722
  114. package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -328
  115. package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -396
  116. package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -103
  117. package/dist/extensions/builtin/debug/index.js +9 -9
  118. package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -33
  119. package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -25
  120. package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -25
  121. package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -22
  122. package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -31
  123. package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -28
  124. package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -32
  125. package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -25
  126. package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -27
  127. package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -26
  128. package/dist/extensions/builtin/goal/README.md +67 -67
  129. package/dist/extensions/builtin/goal/index.js +6 -6
  130. package/dist/extensions/builtin/grub/README.md +112 -112
  131. package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -16
  132. package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -65
  133. package/dist/extensions/builtin/link-world/link-world-agent.md +82 -82
  134. package/dist/extensions/builtin/link-world/linkworld.md +313 -313
  135. package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -67
  136. package/dist/extensions/builtin/loop/README.md +92 -92
  137. package/dist/extensions/builtin/mcp/figma-design.md +68 -68
  138. package/dist/extensions/builtin/mcp/mcp-management.md +85 -85
  139. package/dist/extensions/builtin/recap/AGENT.md +15 -15
  140. package/dist/extensions/builtin/sal/README.md +72 -72
  141. package/dist/extensions/builtin/security-audit/README.md +289 -289
  142. package/dist/extensions/builtin/team/AGENT.md +112 -112
  143. package/dist/extensions/builtin/team/TESTING.md +299 -299
  144. package/dist/extensions/builtin/token-save/README.md +56 -56
  145. package/dist/extensions/optional/AGENT.md +10 -10
  146. package/dist/modes/interactive/controllers/input-submit-controller.js +2 -2
  147. package/dist/modes/interactive/controllers/stream-render-controller.js +2 -2
  148. package/dist/modes/interactive/interactive-mode.js +19 -19
  149. package/dist/modes/interactive/theme/dark.json +85 -85
  150. package/dist/modes/interactive/theme/light.json +84 -84
  151. package/dist/modes/interactive/theme/theme-schema.json +335 -335
  152. package/dist/modes/interactive/theme/warm.json +81 -81
  153. package/dist/node_modules/@pencil-agent/ai/dist/cli.js +0 -0
  154. package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -1
  155. 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 +851 -0
  156. package/docs/SDK-TESTING.md +364 -0
  157. package/docs/codex-goal-command-impl.md +1055 -1055
  158. package/docs/codex-goal-vs-grub.md +500 -500
  159. package/docs/custom-provider.md +27 -27
  160. package/docs/extensions.md +27 -27
  161. package/docs/keybindings.md +27 -27
  162. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +250 -250
  163. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +122 -122
  164. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -1222
  165. 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
  166. 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
  167. package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +320 -320
  168. package/docs/loop-usage-examples.md +214 -214
  169. package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +593 -0
  170. package/docs/models.md +27 -27
  171. package/docs/packages.md +27 -27
  172. package/docs/pi-design-philosophy.md +457 -457
  173. package/docs/planmode.md +1987 -1987
  174. package/docs/prompt-templates.md +27 -27
  175. package/docs/providers.md +27 -27
  176. package/docs/sdk.md +27 -27
  177. package/docs/skills.md +27 -27
  178. package/docs/startup-performance-optimization.md +301 -0
  179. package/docs/themes.md +27 -27
  180. package/docs/tui.md +27 -27
  181. package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +47 -0
  182. package/package.json +190 -190
  183. package/docs/cc-agent-design.md +0 -1297
  184. package/docs/cc-tui-design.md +0 -1333
  185. package/docs/nanoPencil-/345/255/246/344/271/240/350/256/241/345/210/222.md +0 -170
  186. package/docs/scan-report.md +0 -3820
  187. package/docs//345/257/271/346/240/207Claude-Code.md +0 -1775
  188. 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 +0 -261
@@ -1,27 +1,27 @@
1
- ---
2
- name: prompt-templates
3
- description: Use when the user asks how to customize system prompts or prompt templates.
4
- surface: TODO # user entry points: /command, --flag, config key, file location
5
- owner: core/prompt/ # DIP P2 anchor — read its AGENT.md member list to find code
6
- status: draft
7
- ---
8
-
9
- # Prompt Templates
10
-
11
- > TODO: one line — what this feature does for the user.
12
-
13
- ## When to use
14
- TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
-
16
- ## Usage
17
- TODO: commands / flags / config keys / file locations, with one minimal example.
18
-
19
- ## Behavior & defaults
20
- TODO: default on/off, side effects, opt-in/opt-out.
21
-
22
- ## Code map → DIP
23
- - Owner: `core/prompt/` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
- - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
-
26
- ## Related
27
- [[skills]]
1
+ ---
2
+ name: prompt-templates
3
+ description: Use when the user asks how to customize system prompts or prompt templates.
4
+ surface: TODO # user entry points: /command, --flag, config key, file location
5
+ owner: core/prompt/ # DIP P2 anchor — read its AGENT.md member list to find code
6
+ status: draft
7
+ ---
8
+
9
+ # Prompt Templates
10
+
11
+ > TODO: one line — what this feature does for the user.
12
+
13
+ ## When to use
14
+ TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
+
16
+ ## Usage
17
+ TODO: commands / flags / config keys / file locations, with one minimal example.
18
+
19
+ ## Behavior & defaults
20
+ TODO: default on/off, side effects, opt-in/opt-out.
21
+
22
+ ## Code map → DIP
23
+ - Owner: `core/prompt/` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
+ - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
+
26
+ ## Related
27
+ [[skills]]
package/docs/providers.md CHANGED
@@ -1,27 +1,27 @@
1
- ---
2
- name: providers
3
- description: Use when the user hits 'no models available' or asks how to configure providers and API keys.
4
- surface: TODO # user entry points: /command, --flag, config key, file location
5
- owner: core/model-registry.ts # DIP P2 anchor — read its AGENT.md member list to find code
6
- status: draft
7
- ---
8
-
9
- # Providers
10
-
11
- > TODO: one line — what this feature does for the user.
12
-
13
- ## When to use
14
- TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
-
16
- ## Usage
17
- TODO: commands / flags / config keys / file locations, with one minimal example.
18
-
19
- ## Behavior & defaults
20
- TODO: default on/off, side effects, opt-in/opt-out.
21
-
22
- ## Code map → DIP
23
- - Owner: `core/model-registry.ts` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
- - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
-
26
- ## Related
27
- [[custom-provider]] [[models]]
1
+ ---
2
+ name: providers
3
+ description: Use when the user hits 'no models available' or asks how to configure providers and API keys.
4
+ surface: TODO # user entry points: /command, --flag, config key, file location
5
+ owner: core/model-registry.ts # DIP P2 anchor — read its AGENT.md member list to find code
6
+ status: draft
7
+ ---
8
+
9
+ # Providers
10
+
11
+ > TODO: one line — what this feature does for the user.
12
+
13
+ ## When to use
14
+ TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
+
16
+ ## Usage
17
+ TODO: commands / flags / config keys / file locations, with one minimal example.
18
+
19
+ ## Behavior & defaults
20
+ TODO: default on/off, side effects, opt-in/opt-out.
21
+
22
+ ## Code map → DIP
23
+ - Owner: `core/model-registry.ts` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
+ - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
+
26
+ ## Related
27
+ [[custom-provider]] [[models]]
package/docs/sdk.md CHANGED
@@ -1,27 +1,27 @@
1
- ---
2
- name: sdk
3
- description: Use when the user asks how to embed NanoPencil programmatically (createAgentSession).
4
- surface: TODO # user entry points: /command, --flag, config key, file location
5
- owner: core/runtime/sdk.ts # DIP P2 anchor — read its AGENT.md member list to find code
6
- status: draft
7
- ---
8
-
9
- # SDK Integration
10
-
11
- > TODO: one line — what this feature does for the user.
12
-
13
- ## When to use
14
- TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
-
16
- ## Usage
17
- TODO: commands / flags / config keys / file locations, with one minimal example.
18
-
19
- ## Behavior & defaults
20
- TODO: default on/off, side effects, opt-in/opt-out.
21
-
22
- ## Code map → DIP
23
- - Owner: `core/runtime/sdk.ts` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
- - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
-
26
- ## Related
27
- [[extensions]] [[packages]]
1
+ ---
2
+ name: sdk
3
+ description: Use when the user asks how to embed NanoPencil programmatically (createAgentSession).
4
+ surface: TODO # user entry points: /command, --flag, config key, file location
5
+ owner: core/runtime/sdk.ts # DIP P2 anchor — read its AGENT.md member list to find code
6
+ status: draft
7
+ ---
8
+
9
+ # SDK Integration
10
+
11
+ > TODO: one line — what this feature does for the user.
12
+
13
+ ## When to use
14
+ TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
+
16
+ ## Usage
17
+ TODO: commands / flags / config keys / file locations, with one minimal example.
18
+
19
+ ## Behavior & defaults
20
+ TODO: default on/off, side effects, opt-in/opt-out.
21
+
22
+ ## Code map → DIP
23
+ - Owner: `core/runtime/sdk.ts` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
+ - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
+
26
+ ## Related
27
+ [[extensions]] [[packages]]
package/docs/skills.md CHANGED
@@ -1,27 +1,27 @@
1
- ---
2
- name: skills
3
- description: Use when the user asks how skills work or how to add a skill.
4
- surface: TODO # user entry points: /command, --flag, config key, file location
5
- owner: core/skills.ts # DIP P2 anchor — read its AGENT.md member list to find code
6
- status: draft
7
- ---
8
-
9
- # Skills
10
-
11
- > TODO: one line — what this feature does for the user.
12
-
13
- ## When to use
14
- TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
-
16
- ## Usage
17
- TODO: commands / flags / config keys / file locations, with one minimal example.
18
-
19
- ## Behavior & defaults
20
- TODO: default on/off, side effects, opt-in/opt-out.
21
-
22
- ## Code map → DIP
23
- - Owner: `core/skills.ts` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
- - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
-
26
- ## Related
27
- [[extensions]] [[prompt-templates]]
1
+ ---
2
+ name: skills
3
+ description: Use when the user asks how skills work or how to add a skill.
4
+ surface: TODO # user entry points: /command, --flag, config key, file location
5
+ owner: core/skills.ts # DIP P2 anchor — read its AGENT.md member list to find code
6
+ status: draft
7
+ ---
8
+
9
+ # Skills
10
+
11
+ > TODO: one line — what this feature does for the user.
12
+
13
+ ## When to use
14
+ TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
+
16
+ ## Usage
17
+ TODO: commands / flags / config keys / file locations, with one minimal example.
18
+
19
+ ## Behavior & defaults
20
+ TODO: default on/off, side effects, opt-in/opt-out.
21
+
22
+ ## Code map → DIP
23
+ - Owner: `core/skills.ts` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
+ - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
+
26
+ ## Related
27
+ [[extensions]] [[prompt-templates]]
@@ -0,0 +1,301 @@
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%)
package/docs/themes.md CHANGED
@@ -1,27 +1,27 @@
1
- ---
2
- name: themes
3
- description: Use when the user asks how to change, create, or configure a NanoPencil theme.
4
- surface: TODO # user entry points: /command, --flag, config key, file location
5
- owner: modes/interactive/theme/ # DIP P2 anchor — read its AGENT.md member list to find code
6
- status: draft
7
- ---
8
-
9
- # Themes
10
-
11
- > TODO: one line — what this feature does for the user.
12
-
13
- ## When to use
14
- TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
-
16
- ## Usage
17
- TODO: commands / flags / config keys / file locations, with one minimal example.
18
-
19
- ## Behavior & defaults
20
- TODO: default on/off, side effects, opt-in/opt-out.
21
-
22
- ## Code map → DIP
23
- - Owner: `modes/interactive/theme/` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
- - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
-
26
- ## Related
27
- [[tui]] [[keybindings]]
1
+ ---
2
+ name: themes
3
+ description: Use when the user asks how to change, create, or configure a NanoPencil theme.
4
+ surface: TODO # user entry points: /command, --flag, config key, file location
5
+ owner: modes/interactive/theme/ # DIP P2 anchor — read its AGENT.md member list to find code
6
+ status: draft
7
+ ---
8
+
9
+ # Themes
10
+
11
+ > TODO: one line — what this feature does for the user.
12
+
13
+ ## When to use
14
+ TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
+
16
+ ## Usage
17
+ TODO: commands / flags / config keys / file locations, with one minimal example.
18
+
19
+ ## Behavior & defaults
20
+ TODO: default on/off, side effects, opt-in/opt-out.
21
+
22
+ ## Code map → DIP
23
+ - Owner: `modes/interactive/theme/` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
+ - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
+
26
+ ## Related
27
+ [[tui]] [[keybindings]]
package/docs/tui.md CHANGED
@@ -1,27 +1,27 @@
1
- ---
2
- name: tui
3
- description: Use when the user asks about the terminal UI components or how rendering works.
4
- surface: TODO # user entry points: /command, --flag, config key, file location
5
- owner: core/lib/tui/ # DIP P2 anchor — read its AGENT.md member list to find code
6
- status: draft
7
- ---
8
-
9
- # TUI Components
10
-
11
- > TODO: one line — what this feature does for the user.
12
-
13
- ## When to use
14
- TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
-
16
- ## Usage
17
- TODO: commands / flags / config keys / file locations, with one minimal example.
18
-
19
- ## Behavior & defaults
20
- TODO: default on/off, side effects, opt-in/opt-out.
21
-
22
- ## Code map → DIP
23
- - Owner: `core/lib/tui/` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
- - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
-
26
- ## Related
27
- [[themes]] [[keybindings]]
1
+ ---
2
+ name: tui
3
+ description: Use when the user asks about the terminal UI components or how rendering works.
4
+ surface: TODO # user entry points: /command, --flag, config key, file location
5
+ owner: core/lib/tui/ # DIP P2 anchor — read its AGENT.md member list to find code
6
+ status: draft
7
+ ---
8
+
9
+ # TUI Components
10
+
11
+ > TODO: one line — what this feature does for the user.
12
+
13
+ ## When to use
14
+ TODO: the user intents that should pull this doc (mirrors the frontmatter `description`).
15
+
16
+ ## Usage
17
+ TODO: commands / flags / config keys / file locations, with one minimal example.
18
+
19
+ ## Behavior & defaults
20
+ TODO: default on/off, side effects, opt-in/opt-out.
21
+
22
+ ## Code map → DIP
23
+ - Owner: `core/lib/tui/` — read its DIP **P2 member list** (the nearest `AGENT.md`) to locate files.
24
+ - Then follow **P3** file headers (WHO / FROM / TO / HERE) to navigate. Do **not** duplicate code paths here.
25
+
26
+ ## Related
27
+ [[themes]] [[keybindings]]