@pencil-agent/nano-pencil 2.0.0-beta.8 → 2.0.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.
Files changed (241) 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/extensions-host/index.d.ts +1 -1
  7. package/dist/core/extensions-host/loader.js +1 -1
  8. package/dist/core/extensions-host/runner.d.ts +1 -0
  9. package/dist/core/extensions-host/runner.js +2 -2
  10. package/dist/core/extensions-host/types.d.ts +17 -22
  11. package/dist/core/lib/ai/src/types.d.ts +12 -2
  12. package/dist/core/persona/persona-manager.js +5 -2
  13. package/dist/core/runtime/agent-session.js +3 -3
  14. package/dist/core/runtime/extension-core-bindings.d.ts +1 -0
  15. package/dist/core/runtime/extension-core-bindings.js +2 -2
  16. package/dist/extensions/builtin/AGENT.md +115 -115
  17. package/dist/extensions/builtin/browser/AGENT.md +17 -17
  18. package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -12
  19. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -198
  20. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -341
  21. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -311
  22. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -333
  23. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -70
  24. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -578
  25. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -440
  26. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -110
  27. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -325
  28. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -463
  29. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -360
  30. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -390
  31. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -568
  32. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -323
  33. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -349
  34. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -435
  35. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -506
  36. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -363
  37. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -168
  38. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -236
  39. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -295
  40. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -108
  41. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -493
  42. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -580
  43. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -511
  44. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -65
  45. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -184
  46. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -543
  47. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -122
  48. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -461
  49. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -383
  50. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -243
  51. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -473
  52. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -271
  53. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -436
  54. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -1021
  55. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -349
  56. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -109
  57. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -170
  58. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -537
  59. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -120
  60. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -414
  61. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -477
  62. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -478
  63. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -339
  64. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -205
  65. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -472
  66. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -470
  67. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -490
  68. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -478
  69. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -234
  70. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -307
  71. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -421
  72. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -364
  73. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -352
  74. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -124
  75. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -233
  76. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -361
  77. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -36
  78. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -72
  79. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -109
  80. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -137
  81. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -362
  82. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -339
  83. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -435
  84. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -575
  85. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -338
  86. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -52
  87. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -107
  88. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -309
  89. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -88
  90. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -375
  91. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -444
  92. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -306
  93. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -398
  94. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -596
  95. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -356
  96. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -84
  97. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -418
  98. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -433
  99. package/dist/extensions/builtin/browser/browser.md +73 -73
  100. package/dist/extensions/builtin/browser/install.md +142 -142
  101. package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -48
  102. package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -3
  103. package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -3
  104. package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -64
  105. package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -3
  106. package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -3
  107. package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -3
  108. package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -3
  109. package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -3
  110. package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -3
  111. package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -90
  112. package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -17
  113. package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -3
  114. package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -3
  115. package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -69
  116. package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -1
  117. package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -3
  118. package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -15
  119. package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -8
  120. package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -90
  121. package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -722
  122. package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -328
  123. package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -396
  124. package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -103
  125. package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -33
  126. package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -25
  127. package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -25
  128. package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -22
  129. package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -31
  130. package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -28
  131. package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -32
  132. package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -25
  133. package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -27
  134. package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -26
  135. package/dist/extensions/builtin/goal/README.md +67 -67
  136. package/dist/extensions/builtin/goal/goal-controller.d.ts +39 -10
  137. package/dist/extensions/builtin/goal/goal-controller.js +1 -1
  138. package/dist/extensions/builtin/goal/goal-format.js +1 -1
  139. package/dist/extensions/builtin/goal/goal-prompts.d.ts +2 -0
  140. package/dist/extensions/builtin/goal/goal-prompts.js +5 -4
  141. package/dist/extensions/builtin/goal/goal-store.js +1 -1
  142. package/dist/extensions/builtin/goal/index.d.ts +1 -1
  143. package/dist/extensions/builtin/goal/index.js +10 -7
  144. package/dist/extensions/builtin/grub/README.md +112 -112
  145. package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -16
  146. package/dist/extensions/builtin/link-world/index.js +6 -6
  147. package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -65
  148. package/dist/extensions/builtin/link-world/link-world-agent.md +82 -82
  149. package/dist/extensions/builtin/link-world/linkworld.md +313 -313
  150. package/dist/extensions/builtin/link-world/{network-routing.md → network-routing/network-routing.md} +67 -67
  151. package/dist/extensions/builtin/loop/README.md +92 -92
  152. package/dist/extensions/builtin/mcp/figma-design.md +68 -68
  153. package/dist/extensions/builtin/mcp/mcp-management.md +85 -85
  154. package/dist/extensions/builtin/plan/index.js +1 -1
  155. package/dist/extensions/builtin/recap/AGENT.md +15 -15
  156. package/dist/extensions/builtin/sal/README.md +72 -72
  157. package/dist/extensions/builtin/security-audit/README.md +289 -289
  158. package/dist/extensions/builtin/task/task-store.d.ts +4 -0
  159. package/dist/extensions/builtin/task/task-store.js +1 -1
  160. package/dist/extensions/builtin/team/AGENT.md +112 -112
  161. package/dist/extensions/builtin/team/TESTING.md +299 -299
  162. package/dist/extensions/builtin/token-save/README.md +56 -56
  163. package/dist/extensions/optional/AGENT.md +10 -10
  164. package/dist/index.d.ts +5 -30
  165. package/dist/index.js +1 -1
  166. package/dist/models.d.ts +7 -0
  167. package/dist/models.js +1 -0
  168. package/dist/modes/interactive/components/footer.js +1 -1
  169. package/dist/modes/interactive/components/task-status-panel.d.ts +36 -0
  170. package/dist/modes/interactive/components/task-status-panel.js +1 -0
  171. package/dist/modes/interactive/controllers/stream-render-controller.d.ts +7 -0
  172. package/dist/modes/interactive/controllers/stream-render-controller.js +2 -2
  173. package/dist/modes/interactive/interactive-mode.js +40 -40
  174. package/dist/modes/interactive/state/interactive-state.d.ts +2 -0
  175. package/dist/modes/interactive/state/interactive-state.js +1 -1
  176. package/dist/modes/interactive/theme/dark.json +85 -85
  177. package/dist/modes/interactive/theme/light.json +84 -84
  178. package/dist/modes/interactive/theme/theme-schema.json +335 -335
  179. package/dist/modes/interactive/theme/warm.json +81 -81
  180. package/dist/node_modules/@pencil-agent/ai/dist/cli.js +0 -0
  181. package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -1
  182. package/dist/node_modules/@pencil-agent/ai/dist/providers/anthropic.js +2 -2
  183. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-completions.js +5 -5
  184. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses.js +1 -1
  185. package/dist/node_modules/@pencil-agent/ai/dist/stream.js +1 -1
  186. package/dist/packages/protocol/src/commands.d.ts +33 -0
  187. package/dist/packages/protocol/src/flags.d.ts +20 -0
  188. package/dist/packages/protocol/src/hooks.d.ts +17 -0
  189. package/dist/packages/protocol/src/hooks.js +0 -0
  190. package/dist/packages/{extension-sdk → protocol}/src/index.d.ts +7 -4
  191. package/dist/packages/protocol/src/index.js +1 -0
  192. package/dist/packages/{extension-sdk → protocol}/src/lifecycle.d.ts +15 -27
  193. package/dist/packages/protocol/src/lifecycle.js +0 -0
  194. package/dist/packages/{extension-sdk → protocol}/src/tools.d.ts +1 -1
  195. package/dist/packages/protocol/src/tools.js +0 -0
  196. package/dist/public-config.d.ts +12 -0
  197. package/dist/public-config.js +1 -0
  198. package/dist/runtime.d.ts +9 -0
  199. package/dist/runtime.js +1 -0
  200. package/dist/session-compaction.d.ts +7 -0
  201. package/dist/session-compaction.js +1 -0
  202. package/dist/session.d.ts +7 -0
  203. package/dist/session.js +1 -0
  204. package/dist/skills.d.ts +7 -0
  205. package/dist/skills.js +1 -0
  206. package/dist/tools.d.ts +7 -0
  207. package/dist/tools.js +1 -0
  208. 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
  209. package/docs/SDK-TESTING.md +364 -0
  210. package/docs/codex-goal-command-impl.md +1055 -1055
  211. package/docs/codex-goal-vs-grub.md +500 -500
  212. package/docs/custom-provider.md +27 -27
  213. package/docs/extensions.md +27 -27
  214. package/docs/keybindings.md +27 -27
  215. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +250 -250
  216. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +122 -122
  217. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -1222
  218. 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
  219. 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
  220. package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +320 -320
  221. package/docs/loop-usage-examples.md +214 -214
  222. package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +593 -0
  223. package/docs/models.md +27 -27
  224. package/docs/packages.md +27 -27
  225. package/docs/pi-design-philosophy.md +457 -457
  226. package/docs/planmode.md +1987 -1987
  227. package/docs/prompt-templates.md +27 -27
  228. package/docs/providers.md +27 -27
  229. package/docs/sdk.md +27 -27
  230. package/docs/skills.md +27 -27
  231. package/docs/startup-performance-optimization.md +301 -0
  232. package/docs/themes.md +27 -27
  233. package/docs/tui.md +27 -27
  234. package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +47 -0
  235. package/package.json +190 -162
  236. package/dist/packages/extension-sdk/src/index.js +0 -1
  237. package/docs/cc-agent-design.md +0 -1297
  238. package/docs/cc-tui-design.md +0 -1333
  239. package/docs//345/257/271/346/240/207Claude-Code.md +0 -1775
  240. /package/dist/packages/{extension-sdk/src/lifecycle.js → protocol/src/commands.js} +0 -0
  241. /package/dist/packages/{extension-sdk/src/tools.js → protocol/src/flags.js} +0 -0
@@ -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]]