@pencil-agent/nano-pencil 2.0.0-beta.4 → 2.0.0-beta.7

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 (811) hide show
  1. package/dist/build-meta.json +4 -4
  2. package/dist/builtin-extensions.js +1 -319
  3. package/dist/cli/args.d.ts +1 -0
  4. package/dist/cli/args.js +35 -324
  5. package/dist/cli/config-selector.js +1 -33
  6. package/dist/cli/file-processor.js +6 -81
  7. package/dist/cli/list-models.d.ts +9 -2
  8. package/dist/cli/list-models.js +2 -88
  9. package/dist/cli/session-picker.js +1 -36
  10. package/dist/cli.js +1 -37
  11. package/dist/config.js +1 -326
  12. package/dist/core/agent-dir/agent-dir-context.js +1 -84
  13. package/dist/core/agent-dir/agent-metadata.js +1 -68
  14. package/dist/core/agent-dir/migration-tool.js +7 -179
  15. package/dist/core/export-html/ansi-to-html.js +2 -242
  16. package/dist/core/export-html/index.js +2 -221
  17. package/dist/core/export-html/template.js +48 -1568
  18. package/dist/core/export-html/tool-renderer.js +1 -50
  19. package/dist/core/export-html/vendor/highlight.min.js +4 -1213
  20. package/dist/core/export-html/vendor/marked.min.js +56 -6
  21. package/dist/core/extensions-host/index.js +1 -11
  22. package/dist/core/extensions-host/loader.js +1 -488
  23. package/dist/core/extensions-host/runner.js +3 -903
  24. package/dist/core/extensions-host/types.d.ts +11 -6
  25. package/dist/core/extensions-host/types.js +1 -25
  26. package/dist/core/extensions-host/wrapper.js +2 -114
  27. package/dist/core/index.js +1 -19
  28. package/dist/{node_modules/@pencil-agent/agent-core/dist → core/lib/agent-core/src}/types.d.ts +2 -2
  29. package/dist/core/lib/agent-core/src/types.js +1 -0
  30. package/dist/{node_modules/@pencil-agent/ai/dist → core/lib/ai/src}/types.d.ts +17 -2
  31. package/dist/core/lib/ai/src/types.js +0 -0
  32. package/dist/core/lib/ai/src/utils/event-stream-types.js +0 -0
  33. package/dist/core/mcp/figma-auth.js +4 -490
  34. package/dist/core/mcp/index.js +1 -9
  35. package/dist/core/mcp/mcp-adapter.js +3 -116
  36. package/dist/core/mcp/mcp-client.js +6 -839
  37. package/dist/core/mcp/mcp-config.js +1 -262
  38. package/dist/core/mcp/mcp-guidance.js +13 -107
  39. package/dist/core/mcp/mcp-manager.js +1 -98
  40. package/dist/core/mcp/mcp-types.js +0 -7
  41. package/dist/core/messages.js +13 -116
  42. package/dist/core/model/custom-providers.d.ts +5 -1
  43. package/dist/core/model/custom-providers.js +1 -171
  44. package/dist/core/model/discovery-cache.d.ts +65 -0
  45. package/dist/core/model/discovery-cache.js +1 -0
  46. package/dist/core/model/discovery-cache.test.d.ts +7 -0
  47. package/dist/core/model/discovery-cache.test.js +1 -0
  48. package/dist/core/model/discovery.d.ts +79 -0
  49. package/dist/core/model/discovery.js +1 -0
  50. package/dist/core/model/discovery.test.d.ts +7 -0
  51. package/dist/core/model/discovery.test.js +1 -0
  52. package/dist/core/model/index.d.ts +4 -1
  53. package/dist/core/model/index.js +1 -7
  54. package/dist/core/model/known-models.d.ts +65 -0
  55. package/dist/core/model/known-models.generated.d.ts +2 -0
  56. package/dist/core/model/known-models.generated.js +1 -0
  57. package/dist/core/model/known-models.js +1 -0
  58. package/dist/core/model/switcher.js +1 -149
  59. package/dist/core/model-registry.d.ts +50 -0
  60. package/dist/core/model-registry.js +9 -620
  61. package/dist/core/model-resolver.js +1 -431
  62. package/dist/core/package-manager.js +3 -1449
  63. package/dist/core/persona/persona-manager.d.ts +2 -0
  64. package/dist/core/persona/persona-manager.js +2 -153
  65. package/dist/core/platform/abort-slot.js +1 -39
  66. package/dist/core/platform/config/auth-storage.js +1 -395
  67. package/dist/core/platform/config/defaults.js +1 -1
  68. package/dist/core/platform/config/diagnostics.js +0 -1
  69. package/dist/core/platform/config/resolve-config-value.js +1 -60
  70. package/dist/core/platform/config/resource-loader.js +2 -715
  71. package/dist/core/platform/config/settings-manager.js +1 -950
  72. package/dist/core/platform/exec/bash-executor.js +1 -211
  73. package/dist/core/platform/exec/exec.js +1 -73
  74. package/dist/core/platform/i18n/index.js +1 -63
  75. package/dist/core/platform/i18n/messages.js +1 -78
  76. package/dist/core/platform/i18n/messages.zh.js +1 -78
  77. package/dist/core/platform/i18n/slash-commands.js +1 -53
  78. package/dist/core/platform/i18n/slash-commands.zh.js +1 -53
  79. package/dist/core/platform/i18n/themes.js +1 -11
  80. package/dist/core/platform/i18n/themes.zh.js +1 -11
  81. package/dist/core/platform/keybindings.js +1 -162
  82. package/dist/core/platform/listeners.js +1 -37
  83. package/dist/core/platform/telemetry/batching-dispatcher.js +1 -89
  84. package/dist/core/platform/telemetry/build-meta.js +1 -57
  85. package/dist/core/platform/telemetry/caller-context.js +1 -19
  86. package/dist/core/platform/telemetry/credentials.js +1 -87
  87. package/dist/core/platform/telemetry/ext-events.js +1 -189
  88. package/dist/core/platform/telemetry/index.js +1 -6
  89. package/dist/core/platform/telemetry/insforge-base.js +1 -160
  90. package/dist/core/platform/telemetry/types.js +0 -7
  91. package/dist/core/platform/timings.js +3 -26
  92. package/dist/core/platform/utils/logger.js +1 -119
  93. package/dist/core/platform/utils/shell.js +9 -191
  94. package/dist/core/platform/utils/sleep.js +1 -23
  95. package/dist/core/platform/utils/tools-manager.js +1 -324
  96. package/dist/core/prompt/prompt-templates.js +2 -256
  97. package/dist/core/prompt/system-prompt.js +44 -155
  98. package/dist/core/runtime/agent-session.d.ts +56 -2
  99. package/dist/core/runtime/agent-session.js +15 -1777
  100. package/dist/core/runtime/bash-runner.js +2 -96
  101. package/dist/core/runtime/compaction-controller.js +1 -230
  102. package/dist/core/runtime/default-tools.js +1 -10
  103. package/dist/core/runtime/event-bridge.js +1 -99
  104. package/dist/core/runtime/event-bus.js +1 -31
  105. package/dist/core/runtime/export-bridge.js +1 -46
  106. package/dist/core/runtime/extension-core-bindings.js +3 -231
  107. package/dist/core/runtime/model-controller.js +1 -227
  108. package/dist/core/runtime/model-cycle.js +1 -26
  109. package/dist/core/runtime/pencil-agent.js +1 -303
  110. package/dist/core/runtime/prompt-assembly.js +3 -29
  111. package/dist/core/runtime/retry-coordinator.js +1 -151
  112. package/dist/core/runtime/sdk.d.ts +8 -0
  113. package/dist/core/runtime/sdk.js +1 -421
  114. package/dist/core/runtime/session-context.js +0 -12
  115. package/dist/core/runtime/session-lifecycle-controller.js +1 -158
  116. package/dist/core/runtime/session-tree-controller.js +1 -187
  117. package/dist/core/runtime/slash-command-catalog.js +1 -83
  118. package/dist/core/runtime/thinking-levels.js +1 -63
  119. package/dist/core/runtime/tool-runtime-controller.js +1 -79
  120. package/dist/core/runtime/turn-context.js +1 -39
  121. package/dist/core/session/compaction/branch-summarization.js +10 -207
  122. package/dist/core/session/compaction/compaction.js +26 -522
  123. package/dist/core/session/compaction/index.js +1 -9
  124. package/dist/core/session/compaction/utils.js +16 -133
  125. package/dist/core/session/session-manager.js +14 -1156
  126. package/dist/core/skills.js +4 -373
  127. package/dist/core/slash-commands.js +1 -90
  128. package/dist/core/soul-integration.js +1 -250
  129. package/dist/core/soul-options-contract.js +0 -7
  130. package/dist/core/sub-agent/agent-definition-loader.d.ts +96 -0
  131. package/dist/core/sub-agent/agent-definition-loader.js +2 -0
  132. package/dist/core/sub-agent/agent-definition.d.ts +162 -0
  133. package/dist/core/sub-agent/agent-definition.js +6 -0
  134. package/dist/core/sub-agent/agent-handoff-safety.d.ts +39 -0
  135. package/dist/core/sub-agent/agent-handoff-safety.js +1 -0
  136. package/dist/core/sub-agent/agent-input-output.d.ts +143 -0
  137. package/dist/core/sub-agent/agent-input-output.js +1 -0
  138. package/dist/core/sub-agent/agent-output-persistence.d.ts +43 -0
  139. package/dist/core/sub-agent/agent-output-persistence.js +3 -0
  140. package/dist/core/sub-agent/agent-prompt-builder.d.ts +37 -0
  141. package/dist/core/sub-agent/agent-prompt-builder.js +2 -0
  142. package/dist/core/sub-agent/agent-registry.d.ts +145 -0
  143. package/dist/core/sub-agent/agent-registry.js +1 -0
  144. package/dist/core/sub-agent/agent-result-extractor.d.ts +28 -0
  145. package/dist/core/sub-agent/agent-result-extractor.js +3 -0
  146. package/dist/core/sub-agent/agent-telemetry.d.ts +71 -0
  147. package/dist/core/sub-agent/agent-telemetry.js +1 -0
  148. package/dist/core/sub-agent/agent-tool-filter.d.ts +89 -0
  149. package/dist/core/sub-agent/agent-tool-filter.js +2 -0
  150. package/dist/core/sub-agent/agent-tool.d.ts +69 -0
  151. package/dist/core/sub-agent/agent-tool.js +11 -0
  152. package/dist/core/sub-agent/index.d.ts +19 -4
  153. package/dist/core/sub-agent/index.js +1 -9
  154. package/dist/core/sub-agent/send-message-tool.d.ts +33 -0
  155. package/dist/core/sub-agent/send-message-tool.js +2 -0
  156. package/dist/core/sub-agent/sub-agent-backend.d.ts +12 -0
  157. package/dist/core/sub-agent/sub-agent-backend.js +7 -225
  158. package/dist/core/sub-agent/sub-agent-runtime.d.ts +1 -5
  159. package/dist/core/sub-agent/sub-agent-runtime.js +1 -54
  160. package/dist/core/sub-agent/sub-agent-types.d.ts +16 -0
  161. package/dist/core/sub-agent/sub-agent-types.js +0 -8
  162. package/dist/core/sub-agent/subprocess-backend.js +1 -104
  163. package/dist/core/sub-agent/subprocess-worker.js +1 -40
  164. package/dist/core/theme-contract.js +0 -12
  165. package/dist/core/tools/bash.d.ts +8 -2
  166. package/dist/core/tools/bash.js +21 -424
  167. package/dist/core/tools/edit-diff.js +16 -244
  168. package/dist/core/tools/edit.js +1 -146
  169. package/dist/core/tools/file-state-cache.d.ts +30 -0
  170. package/dist/core/tools/file-state-cache.js +1 -0
  171. package/dist/core/tools/find.d.ts +2 -0
  172. package/dist/core/tools/find.js +8 -208
  173. package/dist/core/tools/grep.d.ts +14 -0
  174. package/dist/core/tools/grep.js +13 -248
  175. package/dist/core/tools/index.d.ts +14 -1
  176. package/dist/core/tools/index.js +1 -109
  177. package/dist/core/tools/input-validation.js +1 -14
  178. package/dist/core/tools/ls.js +4 -125
  179. package/dist/core/tools/orchestrator.js +1 -102
  180. package/dist/core/tools/path-utils.js +1 -86
  181. package/dist/core/tools/pdf-extract.d.ts +11 -0
  182. package/dist/core/tools/pdf-extract.js +1 -0
  183. package/dist/core/tools/read.d.ts +2 -0
  184. package/dist/core/tools/read.js +11 -169
  185. package/dist/core/tools/source.js +1 -96
  186. package/dist/core/tools/time.js +2 -51
  187. package/dist/core/tools/truncate.js +5 -201
  188. package/dist/core/tools/write-guard.js +1 -26
  189. package/dist/core/tools/write.js +1 -78
  190. package/dist/core/workspace/index.js +1 -7
  191. package/dist/core/workspace/worktree-manager.js +3 -374
  192. package/dist/extensions/builtin/AGENT.md +10 -0
  193. package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.d.ts +9 -0
  194. package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.js +4 -0
  195. package/dist/extensions/builtin/ask-user-question/index.d.ts +8 -0
  196. package/dist/extensions/builtin/ask-user-question/index.js +1 -0
  197. package/dist/extensions/builtin/ask-user-question/prompt.d.ts +14 -0
  198. package/dist/extensions/builtin/ask-user-question/prompt.js +30 -0
  199. package/dist/extensions/builtin/ask-user-question/types.d.ts +69 -0
  200. package/dist/extensions/builtin/ask-user-question/types.js +1 -0
  201. package/dist/extensions/builtin/browser/index.js +15 -404
  202. package/dist/extensions/builtin/btw/index.js +9 -111
  203. package/dist/extensions/builtin/debug/collectors.js +7 -315
  204. package/dist/extensions/builtin/debug/index.js +24 -253
  205. package/dist/extensions/builtin/diagnostics/diagnostic-buffer.js +1 -139
  206. package/dist/extensions/builtin/diagnostics/index.js +1 -120
  207. package/dist/extensions/builtin/diagnostics/redaction.js +1 -45
  208. package/dist/extensions/builtin/diagnostics/reporter.js +1 -204
  209. package/dist/extensions/builtin/diagnostics/types.js +1 -7
  210. package/dist/extensions/builtin/discipline/index.js +7 -117
  211. package/dist/extensions/builtin/goal/README.md +67 -0
  212. package/dist/extensions/builtin/goal/goal-command.d.ts +13 -0
  213. package/dist/extensions/builtin/goal/goal-command.js +9 -0
  214. package/dist/extensions/builtin/goal/goal-controller.d.ts +114 -0
  215. package/dist/extensions/builtin/goal/goal-controller.js +1 -0
  216. package/dist/extensions/builtin/goal/goal-format.d.ts +52 -0
  217. package/dist/extensions/builtin/goal/goal-format.js +1 -0
  218. package/dist/extensions/builtin/goal/goal-parser.d.ts +27 -0
  219. package/dist/extensions/builtin/goal/goal-parser.js +2 -0
  220. package/dist/extensions/builtin/goal/goal-prompts.d.ts +13 -0
  221. package/dist/extensions/builtin/goal/goal-prompts.js +4 -0
  222. package/dist/extensions/builtin/goal/goal-store.d.ts +28 -0
  223. package/dist/extensions/builtin/goal/goal-store.js +1 -0
  224. package/dist/extensions/builtin/goal/goal-tools.d.ts +26 -0
  225. package/dist/extensions/builtin/goal/goal-tools.js +3 -0
  226. package/dist/extensions/builtin/goal/goal-types.d.ts +87 -0
  227. package/dist/extensions/builtin/goal/goal-types.js +1 -0
  228. package/dist/extensions/builtin/goal/index.d.ts +8 -0
  229. package/dist/extensions/builtin/goal/index.js +7 -0
  230. package/dist/extensions/builtin/grub/README.md +11 -0
  231. package/dist/extensions/builtin/grub/grub-controller.d.ts +2 -1
  232. package/dist/extensions/builtin/grub/grub-controller.js +1 -345
  233. package/dist/extensions/builtin/grub/grub-decision.js +1 -42
  234. package/dist/extensions/builtin/grub/grub-feature-list.d.ts +18 -0
  235. package/dist/extensions/builtin/grub/grub-feature-list.js +2 -213
  236. package/dist/extensions/builtin/grub/grub-format.js +4 -87
  237. package/dist/extensions/builtin/grub/grub-harness.js +3 -71
  238. package/dist/extensions/builtin/grub/grub-i18n.js +1 -198
  239. package/dist/extensions/builtin/grub/grub-parser.js +2 -164
  240. package/dist/extensions/builtin/grub/grub-persistence.js +2 -231
  241. package/dist/extensions/builtin/grub/grub-prompts.js +34 -92
  242. package/dist/extensions/builtin/grub/grub-turn.js +1 -61
  243. package/dist/extensions/builtin/grub/grub-types.d.ts +6 -0
  244. package/dist/extensions/builtin/grub/grub-types.js +1 -2
  245. package/dist/extensions/builtin/grub/index.js +6 -295
  246. package/dist/extensions/builtin/idle-think/curiosity.js +2 -137
  247. package/dist/extensions/builtin/idle-think/idle-think-runtime.js +1 -148
  248. package/dist/extensions/builtin/idle-think/index.js +1 -48
  249. package/dist/extensions/builtin/idle-think/insights.js +5 -131
  250. package/dist/extensions/builtin/idle-think/thinker.js +9 -208
  251. package/dist/extensions/builtin/insights/html-report.d.ts +21 -0
  252. package/dist/extensions/builtin/insights/html-report.js +463 -0
  253. package/dist/extensions/builtin/insights/index.d.ts +24 -0
  254. package/dist/extensions/builtin/insights/index.js +2 -0
  255. package/dist/extensions/builtin/insights/insights-engine.d.ts +18 -0
  256. package/dist/extensions/builtin/insights/insights-engine.js +39 -0
  257. package/dist/extensions/builtin/insights/prompts.d.ts +17 -0
  258. package/dist/extensions/builtin/insights/prompts.js +180 -0
  259. package/dist/extensions/builtin/insights/session-scanner.d.ts +27 -0
  260. package/dist/extensions/builtin/insights/session-scanner.js +19 -0
  261. package/dist/extensions/builtin/insights/stats.d.ts +13 -0
  262. package/dist/extensions/builtin/insights/stats.js +1 -0
  263. package/dist/extensions/builtin/insights/types.d.ts +199 -0
  264. package/dist/extensions/builtin/insights/types.js +0 -0
  265. package/dist/extensions/builtin/link-world/index.js +19 -431
  266. package/dist/extensions/builtin/loop/cron/cron-parser.d.ts +42 -29
  267. package/dist/extensions/builtin/loop/cron/cron-parser.js +1 -226
  268. package/dist/extensions/builtin/loop/cron/cron-scheduler.d.ts +75 -46
  269. package/dist/extensions/builtin/loop/cron/cron-scheduler.js +10 -329
  270. package/dist/extensions/builtin/loop/cron/cron-tasks-lock.d.ts +42 -0
  271. package/dist/extensions/builtin/loop/cron/cron-tasks-lock.js +1 -0
  272. package/dist/extensions/builtin/loop/cron/cron-tasks.d.ts +182 -69
  273. package/dist/extensions/builtin/loop/cron/cron-tasks.js +2 -425
  274. package/dist/extensions/builtin/loop/cron/index.d.ts +16 -10
  275. package/dist/extensions/builtin/loop/cron/index.js +1 -10
  276. package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.d.ts +9 -4
  277. package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.js +1 -71
  278. package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.d.ts +9 -4
  279. package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.js +1 -56
  280. package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.d.ts +9 -4
  281. package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.js +2 -79
  282. package/dist/extensions/builtin/loop/cron-tools/index.d.ts +9 -4
  283. package/dist/extensions/builtin/loop/cron-tools/index.js +1 -9
  284. package/dist/extensions/builtin/loop/cron-tools/prompt.d.ts +35 -0
  285. package/dist/extensions/builtin/loop/cron-tools/prompt.js +38 -0
  286. package/dist/extensions/builtin/loop/index.d.ts +14 -3
  287. package/dist/extensions/builtin/loop/index.js +2 -476
  288. package/dist/extensions/builtin/loop/loop-skill.d.ts +18 -0
  289. package/dist/extensions/builtin/loop/loop-skill.js +58 -0
  290. package/dist/extensions/builtin/lsp/index.d.ts +8 -0
  291. package/dist/extensions/builtin/lsp/index.js +1 -0
  292. package/dist/extensions/builtin/lsp/lsp-client.d.ts +22 -0
  293. package/dist/extensions/builtin/lsp/lsp-client.js +1 -0
  294. package/dist/extensions/builtin/lsp/lsp-config.d.ts +8 -0
  295. package/dist/extensions/builtin/lsp/lsp-config.js +1 -0
  296. package/dist/extensions/builtin/lsp/lsp-formatters.d.ts +15 -0
  297. package/dist/extensions/builtin/lsp/lsp-formatters.js +18 -0
  298. package/dist/extensions/builtin/lsp/lsp-server-instance.d.ts +24 -0
  299. package/dist/extensions/builtin/lsp/lsp-server-instance.js +1 -0
  300. package/dist/extensions/builtin/lsp/lsp-server-manager.d.ts +21 -0
  301. package/dist/extensions/builtin/lsp/lsp-server-manager.js +1 -0
  302. package/dist/extensions/builtin/lsp/lsp-tool.d.ts +33 -0
  303. package/dist/extensions/builtin/lsp/lsp-tool.js +2 -0
  304. package/dist/extensions/builtin/lsp/types.d.ts +31 -0
  305. package/dist/extensions/builtin/lsp/types.js +1 -0
  306. package/dist/extensions/builtin/mcp/index.js +25 -385
  307. package/dist/extensions/builtin/plan/clear-context-state.d.ts +8 -0
  308. package/dist/extensions/builtin/plan/clear-context-state.js +1 -0
  309. package/dist/extensions/builtin/plan/enter-plan-mode-tool.d.ts +3 -1
  310. package/dist/extensions/builtin/plan/enter-plan-mode-tool.js +2 -64
  311. package/dist/extensions/builtin/plan/exit-plan-mode-tool.d.ts +10 -1
  312. package/dist/extensions/builtin/plan/exit-plan-mode-tool.js +13 -147
  313. package/dist/extensions/builtin/plan/index.js +24 -365
  314. package/dist/extensions/builtin/plan/plan-agents.js +8 -62
  315. package/dist/extensions/builtin/plan/plan-file-manager.js +1 -292
  316. package/dist/extensions/builtin/plan/plan-permissions.js +12 -234
  317. package/dist/extensions/builtin/plan/plan-validation.js +5 -77
  318. package/dist/extensions/builtin/plan/plan-workflow-prompt.d.ts +10 -4
  319. package/dist/extensions/builtin/plan/plan-workflow-prompt.js +60 -126
  320. package/dist/extensions/builtin/plan/teammate-approval.js +3 -134
  321. package/dist/extensions/builtin/plan/types.d.ts +11 -0
  322. package/dist/extensions/builtin/plan/types.js +1 -17
  323. package/dist/extensions/builtin/presence/index.d.ts +7 -0
  324. package/dist/extensions/builtin/presence/index.js +15 -708
  325. package/dist/extensions/builtin/presence/presence-memory.js +1 -203
  326. package/dist/extensions/builtin/recap/{CLAUDE.md → AGENT.md} +2 -2
  327. package/dist/extensions/builtin/recap/index.js +1 -116
  328. package/dist/extensions/builtin/recap/recap-budget.js +1 -21
  329. package/dist/extensions/builtin/recap/recap-extractor.js +3 -128
  330. package/dist/extensions/builtin/recap/recap-renderer.js +2 -55
  331. package/dist/extensions/builtin/recap/recap-synthesizer.js +12 -106
  332. package/dist/extensions/builtin/recap/recap-types.js +1 -16
  333. package/dist/extensions/builtin/sal/anchors.js +1 -248
  334. package/dist/extensions/builtin/sal/eval/index.js +1 -75
  335. package/dist/extensions/builtin/sal/eval/insforge-sink.js +1 -293
  336. package/dist/extensions/builtin/sal/eval/jsonl-sink.js +3 -93
  337. package/dist/extensions/builtin/sal/eval/noop-sink.js +1 -12
  338. package/dist/extensions/builtin/sal/eval/types.js +1 -21
  339. package/dist/extensions/builtin/sal/index.js +7 -720
  340. package/dist/extensions/builtin/sal/sal-config.js +1 -99
  341. package/dist/extensions/builtin/sal/sal-context.js +2 -94
  342. package/dist/extensions/builtin/sal/sal-runtime.js +0 -7
  343. package/dist/extensions/builtin/sal/sal-trace.js +1 -140
  344. package/dist/extensions/builtin/sal/terrain.js +3 -364
  345. package/dist/extensions/builtin/sal/weights.js +1 -48
  346. package/dist/extensions/builtin/security-audit/engine/detector.js +1 -251
  347. package/dist/extensions/builtin/security-audit/engine/interceptor.js +15 -194
  348. package/dist/extensions/builtin/security-audit/engine/logger.js +14 -225
  349. package/dist/extensions/builtin/security-audit/index.js +49 -264
  350. package/dist/extensions/builtin/security-audit/interface.js +1 -78
  351. package/dist/extensions/builtin/soul/index.js +1 -16
  352. package/dist/extensions/builtin/subagent/index.js +8 -214
  353. package/dist/extensions/builtin/subagent/subagent-parser.js +2 -76
  354. package/dist/extensions/builtin/subagent/subagent-runner.js +8 -275
  355. package/dist/extensions/builtin/subagent/subagent-types.js +0 -7
  356. package/dist/extensions/builtin/task/index.d.ts +8 -0
  357. package/dist/extensions/builtin/task/index.js +1 -0
  358. package/dist/extensions/builtin/task/task-store.d.ts +38 -0
  359. package/dist/extensions/builtin/task/task-store.js +1 -0
  360. package/dist/extensions/builtin/task/task-tools/task-create-tool.d.ts +37 -0
  361. package/dist/extensions/builtin/task/task-tools/task-create-tool.js +40 -0
  362. package/dist/extensions/builtin/task/task-tools/task-get-tool.d.ts +31 -0
  363. package/dist/extensions/builtin/task/task-tools/task-get-tool.js +23 -0
  364. package/dist/extensions/builtin/task/task-tools/task-list-tool.d.ts +27 -0
  365. package/dist/extensions/builtin/task/task-tools/task-list-tool.js +22 -0
  366. package/dist/extensions/builtin/task/task-tools/task-output-tool.d.ts +32 -0
  367. package/dist/extensions/builtin/task/task-tools/task-output-tool.js +10 -0
  368. package/dist/extensions/builtin/task/task-tools/task-stop-tool.d.ts +31 -0
  369. package/dist/extensions/builtin/task/task-tools/task-stop-tool.js +5 -0
  370. package/dist/extensions/builtin/task/task-tools/task-update-tool.d.ts +47 -0
  371. package/dist/extensions/builtin/task/task-tools/task-update-tool.js +77 -0
  372. package/dist/extensions/builtin/task/task-tools/tool-search-tool.d.ts +34 -0
  373. package/dist/extensions/builtin/task/task-tools/tool-search-tool.js +14 -0
  374. package/dist/extensions/builtin/task/task-types.d.ts +30 -0
  375. package/dist/extensions/builtin/task/task-types.js +1 -0
  376. package/dist/extensions/builtin/teach/README.md +197 -0
  377. package/dist/extensions/builtin/teach/index.d.ts +12 -0
  378. package/dist/extensions/builtin/teach/index.js +6 -0
  379. package/dist/extensions/builtin/teach/references/analogy-library.md +153 -0
  380. package/dist/extensions/builtin/teach/references/learning-paths.md +214 -0
  381. package/dist/extensions/builtin/teach/references/source-verification.md +268 -0
  382. package/dist/extensions/builtin/teach/references/teaching-template.md +237 -0
  383. package/dist/extensions/builtin/teach/teach-format.d.ts +35 -0
  384. package/dist/extensions/builtin/teach/teach-format.js +6 -0
  385. package/dist/extensions/builtin/teach/teach-i18n.d.ts +47 -0
  386. package/dist/extensions/builtin/teach/teach-i18n.js +1 -0
  387. package/dist/extensions/builtin/teach/teach-persistence.d.ts +36 -0
  388. package/dist/extensions/builtin/teach/teach-persistence.js +35 -0
  389. package/dist/extensions/builtin/teach/teach-prompts.d.ts +52 -0
  390. package/dist/extensions/builtin/teach/teach-prompts.js +35 -0
  391. package/dist/extensions/builtin/teach/teach-runtime.d.ts +93 -0
  392. package/dist/extensions/builtin/teach/teach-runtime.js +9 -0
  393. package/dist/extensions/builtin/teach/teach-types.d.ts +81 -0
  394. package/dist/extensions/builtin/teach/teach-types.js +0 -0
  395. package/dist/extensions/builtin/team/index.js +11 -626
  396. package/dist/extensions/builtin/team/team-dashboard.js +1 -117
  397. package/dist/extensions/builtin/team/team-harness.js +18 -351
  398. package/dist/extensions/builtin/team/team-mailbox.js +4 -110
  399. package/dist/extensions/builtin/team/team-orchestrator.js +5 -469
  400. package/dist/extensions/builtin/team/team-parser.js +2 -334
  401. package/dist/extensions/builtin/team/team-permissions.js +1 -120
  402. package/dist/extensions/builtin/team/team-presets.js +2 -259
  403. package/dist/extensions/builtin/team/team-psyche.js +5 -135
  404. package/dist/extensions/builtin/team/team-runtime-helpers.js +2 -324
  405. package/dist/extensions/builtin/team/team-runtime.js +3 -671
  406. package/dist/extensions/builtin/team/team-state-store.js +2 -75
  407. package/dist/extensions/builtin/team/team-task-store.js +2 -93
  408. package/dist/extensions/builtin/team/team-transcript.js +2 -58
  409. package/dist/extensions/builtin/team/team-types.js +0 -7
  410. package/dist/extensions/builtin/team/team-ui.js +2 -270
  411. package/dist/extensions/builtin/token-save/config.js +1 -66
  412. package/dist/extensions/builtin/token-save/filters.js +24 -279
  413. package/dist/extensions/builtin/token-save/index.js +4 -182
  414. package/dist/extensions/builtin/token-save/lexer.js +1 -51
  415. package/dist/extensions/builtin/token-save/recovery.js +1 -21
  416. package/dist/extensions/builtin/token-save/rewrite.js +1 -73
  417. package/dist/extensions/builtin/token-save/runner.js +3 -55
  418. package/dist/extensions/builtin/token-save/stream.js +1 -33
  419. package/dist/extensions/builtin/token-save/toml-dsl.js +3 -34
  420. package/dist/extensions/builtin/token-save/tracking.js +8 -74
  421. package/dist/extensions/optional/export-html/index.js +2 -269
  422. package/dist/extensions/optional/simplify/index.js +32 -423
  423. package/dist/index.js +1 -50
  424. package/dist/main.js +22 -908
  425. package/dist/migrations.js +4 -261
  426. package/dist/modes/acp/acp-mode.js +25 -1086
  427. package/dist/modes/index.js +1 -13
  428. package/dist/modes/interactive/agent-loop-status.js +1 -41
  429. package/dist/modes/interactive/components/apikey-input.js +3 -23
  430. package/dist/modes/interactive/components/armin.js +1 -338
  431. package/dist/modes/interactive/components/assistant-message.js +1 -101
  432. package/dist/modes/interactive/components/attachments-bar.js +1 -75
  433. package/dist/modes/interactive/components/bash-execution.js +13 -167
  434. package/dist/modes/interactive/components/bordered-loader.js +1 -56
  435. package/dist/modes/interactive/components/branch-summary-message.js +3 -49
  436. package/dist/modes/interactive/components/buddy/pet-sprites.js +1 -255
  437. package/dist/modes/interactive/components/compaction-summary-message.js +3 -50
  438. package/dist/modes/interactive/components/config-selector.js +1 -484
  439. package/dist/modes/interactive/components/countdown-timer.js +1 -38
  440. package/dist/modes/interactive/components/custom-editor.d.ts +9 -0
  441. package/dist/modes/interactive/components/custom-editor.js +1 -101
  442. package/dist/modes/interactive/components/custom-message.js +2 -88
  443. package/dist/modes/interactive/components/daxnuts.js +1 -145
  444. package/dist/modes/interactive/components/diff.js +3 -138
  445. package/dist/modes/interactive/components/dynamic-border.js +1 -26
  446. package/dist/modes/interactive/components/editor-buddy-layout.js +1 -44
  447. package/dist/modes/interactive/components/extension-editor.js +1 -115
  448. package/dist/modes/interactive/components/extension-input.js +2 -69
  449. package/dist/modes/interactive/components/extension-selector.js +2 -90
  450. package/dist/modes/interactive/components/footer.js +1 -239
  451. package/dist/modes/interactive/components/index.d.ts +1 -0
  452. package/dist/modes/interactive/components/index.js +1 -44
  453. package/dist/modes/interactive/components/keybinding-hints.js +1 -66
  454. package/dist/modes/interactive/components/login-dialog.js +1 -150
  455. package/dist/modes/interactive/components/memory-stats.js +2 -96
  456. package/dist/modes/interactive/components/model-selector.d.ts +8 -1
  457. package/dist/modes/interactive/components/model-selector.js +2 -284
  458. package/dist/modes/interactive/components/notification-queue.d.ts +49 -0
  459. package/dist/modes/interactive/components/notification-queue.js +1 -0
  460. package/dist/modes/interactive/components/oauth-selector.js +1 -94
  461. package/dist/modes/interactive/components/pencil-loader.d.ts +7 -1
  462. package/dist/modes/interactive/components/pencil-loader.js +1 -123
  463. package/dist/modes/interactive/components/persona-selector.d.ts +24 -0
  464. package/dist/modes/interactive/components/persona-selector.js +1 -0
  465. package/dist/modes/interactive/components/plan-progress-panel.d.ts +24 -0
  466. package/dist/modes/interactive/components/plan-progress-panel.js +1 -0
  467. package/dist/modes/interactive/components/provider-selector.js +1 -150
  468. package/dist/modes/interactive/components/raw-text.js +3 -28
  469. package/dist/modes/interactive/components/scoped-models-selector.js +1 -280
  470. package/dist/modes/interactive/components/session-selector-search.js +1 -160
  471. package/dist/modes/interactive/components/session-selector.js +2 -856
  472. package/dist/modes/interactive/components/settings-selector.js +1 -372
  473. package/dist/modes/interactive/components/show-images-selector.js +1 -40
  474. package/dist/modes/interactive/components/skill-invocation-message.js +3 -52
  475. package/dist/modes/interactive/components/soul-stats.js +2 -159
  476. package/dist/modes/interactive/components/sub-agent-panel.d.ts +24 -0
  477. package/dist/modes/interactive/components/sub-agent-panel.js +1 -0
  478. package/dist/modes/interactive/components/theme-selector.js +1 -51
  479. package/dist/modes/interactive/components/thinking-selector.js +1 -52
  480. package/dist/modes/interactive/components/tool-execution.js +58 -757
  481. package/dist/modes/interactive/components/tree-selector.js +1 -939
  482. package/dist/modes/interactive/components/user-message-selector.js +1 -118
  483. package/dist/modes/interactive/components/user-message.js +1 -21
  484. package/dist/modes/interactive/components/visual-truncate.js +1 -38
  485. package/dist/modes/interactive/controllers/auth-provider-config-controller.d.ts +3 -1
  486. package/dist/modes/interactive/controllers/auth-provider-config-controller.js +1 -401
  487. package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.js +1 -90
  488. package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.js +1 -78
  489. package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.js +1 -169
  490. package/dist/modes/interactive/controllers/extension-ui/prompt-host.js +2 -109
  491. package/dist/modes/interactive/controllers/image-pipeline-controller.js +1 -359
  492. package/dist/modes/interactive/controllers/input-submit-controller.d.ts +6 -0
  493. package/dist/modes/interactive/controllers/input-submit-controller.js +2 -164
  494. package/dist/modes/interactive/controllers/interrupt-controller.js +1 -82
  495. package/dist/modes/interactive/controllers/model-overlay-controller.d.ts +3 -0
  496. package/dist/modes/interactive/controllers/model-overlay-controller.js +3 -346
  497. package/dist/modes/interactive/controllers/self-update-controller.js +24 -525
  498. package/dist/modes/interactive/controllers/settings-overlay-controller.js +2 -165
  499. package/dist/modes/interactive/controllers/slash-dispatcher-controller.js +1 -183
  500. package/dist/modes/interactive/controllers/stream-render-controller.d.ts +3 -2
  501. package/dist/modes/interactive/controllers/stream-render-controller.js +2 -325
  502. package/dist/modes/interactive/controllers/tree-overlay-controller.js +1 -171
  503. package/dist/modes/interactive/footer-data-provider.js +1 -147
  504. package/dist/modes/interactive/interactive-mode.d.ts +25 -1
  505. package/dist/modes/interactive/interactive-mode.js +100 -3441
  506. package/dist/modes/interactive/services/tips.js +1 -115
  507. package/dist/modes/interactive/slash-command-arguments.js +1 -126
  508. package/dist/modes/interactive/state/interactive-state.d.ts +29 -0
  509. package/dist/modes/interactive/state/interactive-state.js +1 -43
  510. package/dist/modes/interactive/theme/theme.js +16 -970
  511. package/dist/modes/print-mode.js +2 -171
  512. package/dist/modes/rpc/rpc-client.js +2 -417
  513. package/dist/modes/rpc/rpc-mode.js +1 -568
  514. package/dist/modes/rpc/rpc-types.js +0 -1
  515. package/dist/modes/utils/agent-loop-result-format.js +1 -69
  516. package/dist/modes/utils/clipboard-image.js +1 -170
  517. package/dist/modes/utils/clipboard-native.js +1 -47
  518. package/dist/modes/utils/clipboard.js +1 -72
  519. package/dist/modes/utils/image-convert.js +1 -40
  520. package/dist/modes/utils/image-resize.js +1 -186
  521. package/dist/nanopencil-defaults.d.ts +190 -4
  522. package/dist/nanopencil-defaults.js +2 -854
  523. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-continuations.js +1 -60
  524. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-stream-events.js +1 -55
  525. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-results.js +3 -137
  526. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-summaries.js +1 -64
  527. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop.js +3 -913
  528. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-run-result.js +1 -32
  529. package/dist/node_modules/@pencil-agent/agent-core/dist/agent.js +1 -522
  530. package/dist/node_modules/@pencil-agent/agent-core/dist/errors.js +1 -146
  531. package/dist/node_modules/@pencil-agent/agent-core/dist/index.js +1 -19
  532. package/dist/node_modules/@pencil-agent/agent-core/dist/proxy.js +2 -279
  533. package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-agent-loop.js +1 -625
  534. package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-streaming-tool-executor.js +1 -189
  535. package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-tool-orchestration.js +3 -319
  536. package/dist/node_modules/@pencil-agent/agent-core/dist/types.js +1 -13
  537. package/dist/node_modules/@pencil-agent/ai/dist/api-registry.js +1 -152
  538. package/dist/node_modules/@pencil-agent/ai/dist/cli.js +9 -109
  539. package/dist/node_modules/@pencil-agent/ai/dist/config-path.js +1 -17
  540. package/dist/node_modules/@pencil-agent/ai/dist/debug-logger.js +4 -218
  541. package/dist/node_modules/@pencil-agent/ai/dist/env-api-keys.js +1 -107
  542. package/dist/node_modules/@pencil-agent/ai/dist/env.js +1 -7
  543. package/dist/node_modules/@pencil-agent/ai/dist/events.js +1 -7
  544. package/dist/node_modules/@pencil-agent/ai/dist/index.js +1 -20
  545. package/dist/node_modules/@pencil-agent/ai/dist/json.js +1 -7
  546. package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -14928
  547. package/dist/node_modules/@pencil-agent/ai/dist/models.js +1 -60
  548. package/dist/node_modules/@pencil-agent/ai/dist/overflow.js +1 -7
  549. package/dist/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.js +1 -606
  550. package/dist/node_modules/@pencil-agent/ai/dist/providers/anthropic.js +2 -737
  551. package/dist/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.js +1 -193
  552. package/dist/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.js +1 -34
  553. package/dist/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.js +2 -753
  554. package/dist/node_modules/@pencil-agent/ai/dist/providers/google-shared.js +2 -311
  555. package/dist/node_modules/@pencil-agent/ai/dist/providers/google-vertex.js +1 -380
  556. package/dist/node_modules/@pencil-agent/ai/dist/providers/google.js +1 -360
  557. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.js +7 -704
  558. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-completions.js +6 -870
  559. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.js +10 -432
  560. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses.js +1 -207
  561. package/dist/node_modules/@pencil-agent/ai/dist/providers/register-builtins.js +1 -86
  562. package/dist/node_modules/@pencil-agent/ai/dist/providers/simple-options.js +1 -40
  563. package/dist/node_modules/@pencil-agent/ai/dist/providers/transform-messages.js +1 -175
  564. package/dist/node_modules/@pencil-agent/ai/dist/registry.js +1 -8
  565. package/dist/node_modules/@pencil-agent/ai/dist/schema.js +1 -9
  566. package/dist/node_modules/@pencil-agent/ai/dist/stream.js +1 -324
  567. package/dist/node_modules/@pencil-agent/ai/dist/types.js +0 -7
  568. package/dist/node_modules/@pencil-agent/ai/dist/utils/event-stream-types.js +0 -7
  569. package/dist/node_modules/@pencil-agent/ai/dist/utils/event-stream.js +1 -98
  570. package/dist/node_modules/@pencil-agent/ai/dist/utils/http-proxy.js +1 -20
  571. package/dist/node_modules/@pencil-agent/ai/dist/utils/json-parse.js +1 -34
  572. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.js +1 -109
  573. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/decode-credential.js +1 -25
  574. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.js +1 -286
  575. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.js +1 -378
  576. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.js +1 -483
  577. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/index.js +1 -131
  578. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.js +2 -376
  579. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.js +1 -36
  580. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/types.js +0 -7
  581. package/dist/node_modules/@pencil-agent/ai/dist/utils/overflow.js +1 -120
  582. package/dist/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.js +1 -20
  583. package/dist/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.js +1 -26
  584. package/dist/node_modules/@pencil-agent/ai/dist/utils/validation.js +6 -78
  585. package/dist/node_modules/@pencil-agent/ai/package.json +24 -24
  586. package/dist/node_modules/@pencil-agent/tui/dist/autocomplete.js +2 -624
  587. package/dist/node_modules/@pencil-agent/tui/dist/components/box.js +1 -109
  588. package/dist/node_modules/@pencil-agent/tui/dist/components/cached-container.js +1 -0
  589. package/dist/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.js +1 -40
  590. package/dist/node_modules/@pencil-agent/tui/dist/components/editor.js +21 -1697
  591. package/dist/node_modules/@pencil-agent/tui/dist/components/image.js +1 -74
  592. package/dist/node_modules/@pencil-agent/tui/dist/components/input.js +2 -438
  593. package/dist/node_modules/@pencil-agent/tui/dist/components/loader.js +1 -54
  594. package/dist/node_modules/@pencil-agent/tui/dist/components/markdown.js +7 -634
  595. package/dist/node_modules/@pencil-agent/tui/dist/components/select-list.js +1 -157
  596. package/dist/node_modules/@pencil-agent/tui/dist/components/settings-list.js +1 -190
  597. package/dist/node_modules/@pencil-agent/tui/dist/components/spacer.js +1 -28
  598. package/dist/node_modules/@pencil-agent/tui/dist/components/text.js +1 -94
  599. package/dist/node_modules/@pencil-agent/tui/dist/components/truncated-text.js +2 -56
  600. package/dist/node_modules/@pencil-agent/tui/dist/editor-component.js +0 -7
  601. package/dist/node_modules/@pencil-agent/tui/dist/fuzzy.js +1 -152
  602. package/dist/node_modules/@pencil-agent/tui/dist/index.js +1 -37
  603. package/dist/node_modules/@pencil-agent/tui/dist/keybindings.js +1 -119
  604. package/dist/node_modules/@pencil-agent/tui/dist/keys.js +5 -948
  605. package/dist/node_modules/@pencil-agent/tui/dist/kill-ring.js +1 -49
  606. package/dist/node_modules/@pencil-agent/tui/dist/stdin-buffer.js +1 -307
  607. package/dist/node_modules/@pencil-agent/tui/dist/terminal-image.js +1 -287
  608. package/dist/node_modules/@pencil-agent/tui/dist/terminal.js +1 -266
  609. package/dist/node_modules/@pencil-agent/tui/dist/tui.js +12 -1001
  610. package/dist/node_modules/@pencil-agent/tui/dist/undo-stack.js +1 -30
  611. package/dist/node_modules/@pencil-agent/tui/dist/utils.js +2 -811
  612. package/dist/packages/extension-sdk/src/index.js +1 -12
  613. package/dist/packages/extension-sdk/src/lifecycle.js +0 -13
  614. package/dist/packages/extension-sdk/src/tools.js +0 -12
  615. package/dist/packages/mem-core/src/store.js +1 -120
  616. package/dist/packages/mem-core/src/types.js +0 -7
  617. package/dist/packages/soul-core/src/config.js +1 -92
  618. package/dist/packages/soul-core/src/diagnostics.js +1 -56
  619. package/dist/packages/soul-core/src/evolution.js +1 -273
  620. package/dist/packages/soul-core/src/index.js +1 -13
  621. package/dist/packages/soul-core/src/injection.js +8 -280
  622. package/dist/packages/soul-core/src/manager.js +1 -441
  623. package/dist/packages/soul-core/src/store.js +1 -279
  624. package/dist/packages/soul-core/src/types.js +0 -7
  625. package/dist/utils/changelog.js +4 -92
  626. package/dist/utils/diagnostics.js +1 -83
  627. package/dist/utils/frontmatter.js +4 -31
  628. package/dist/utils/git.js +1 -168
  629. package/dist/utils/mime.js +1 -31
  630. package/dist/utils/photon.js +1 -106
  631. package/dist/utils/startup-profiler.js +2 -150
  632. package/docs/cc-agent-design.md +1297 -0
  633. package/docs/cc-tui-design.md +1333 -0
  634. package/docs/codex-goal-command-impl.md +1055 -0
  635. package/docs/codex-goal-vs-grub.md +500 -0
  636. package/docs/custom-provider.md +27 -0
  637. package/docs/extensions.md +27 -0
  638. package/docs/keybindings.md +27 -0
  639. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +251 -0
  640. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +123 -0
  641. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -0
  642. 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 -0
  643. 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 -0
  644. package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +321 -0
  645. package/docs/loop-usage-examples.md +215 -0
  646. package/docs/models.md +27 -0
  647. package/docs/packages.md +27 -0
  648. package/docs/pi-design-philosophy.md +457 -0
  649. package/docs/planmode.md +1987 -0
  650. package/docs/prompt-templates.md +27 -0
  651. package/docs/providers.md +27 -0
  652. package/docs/sdk.md +27 -0
  653. package/docs/skills.md +27 -0
  654. package/docs/themes.md +27 -0
  655. package/docs/tui.md +27 -0
  656. package/docs//345/257/271/346/240/207Claude-Code.md +1775 -0
  657. package/package.json +21 -8
  658. package/dist/core/export-html/CLAUDE.md +0 -12
  659. package/dist/extensions/builtin/CLAUDE.md +0 -74
  660. package/dist/extensions/builtin/interview/index.d.ts +0 -8
  661. package/dist/extensions/builtin/interview/index.js +0 -335
  662. package/dist/extensions/builtin/interview/interview-runtime.d.ts +0 -55
  663. package/dist/extensions/builtin/interview/interview-runtime.js +0 -551
  664. package/dist/extensions/builtin/loop/cron/cron-types.d.ts +0 -87
  665. package/dist/extensions/builtin/loop/cron/cron-types.js +0 -14
  666. package/dist/extensions/builtin/loop/scheduler-parser.d.ts +0 -13
  667. package/dist/extensions/builtin/loop/scheduler-parser.js +0 -214
  668. package/dist/extensions/builtin/loop/scheduler-types.d.ts +0 -63
  669. package/dist/extensions/builtin/loop/scheduler-types.js +0 -7
  670. package/dist/extensions/builtin/loop/skill/SKILL.md +0 -79
  671. package/dist/extensions/builtin/team/CLAUDE.md +0 -97
  672. package/dist/extensions/optional/CLAUDE.md +0 -11
  673. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-continuations.d.ts +0 -17
  674. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-stream-events.d.ts +0 -19
  675. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-results.d.ts +0 -10
  676. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-summaries.d.ts +0 -22
  677. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop.d.ts +0 -26
  678. package/dist/node_modules/@pencil-agent/agent-core/dist/agent-run-result.d.ts +0 -9
  679. package/dist/node_modules/@pencil-agent/agent-core/dist/agent.d.ts +0 -215
  680. package/dist/node_modules/@pencil-agent/agent-core/dist/errors.d.ts +0 -62
  681. package/dist/node_modules/@pencil-agent/agent-core/dist/index.d.ts +0 -14
  682. package/dist/node_modules/@pencil-agent/agent-core/dist/proxy.d.ts +0 -91
  683. package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-agent-loop.d.ts +0 -15
  684. package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-streaming-tool-executor.d.ts +0 -33
  685. package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-tool-orchestration.d.ts +0 -35
  686. package/dist/node_modules/@pencil-agent/ai/dist/api-registry.d.ts +0 -27
  687. package/dist/node_modules/@pencil-agent/ai/dist/cli.d.ts +0 -2
  688. package/dist/node_modules/@pencil-agent/ai/dist/config-path.d.ts +0 -1
  689. package/dist/node_modules/@pencil-agent/ai/dist/debug-logger.d.ts +0 -94
  690. package/dist/node_modules/@pencil-agent/ai/dist/env-api-keys.d.ts +0 -8
  691. package/dist/node_modules/@pencil-agent/ai/dist/env.d.ts +0 -7
  692. package/dist/node_modules/@pencil-agent/ai/dist/events.d.ts +0 -8
  693. package/dist/node_modules/@pencil-agent/ai/dist/index.d.ts +0 -27
  694. package/dist/node_modules/@pencil-agent/ai/dist/json.d.ts +0 -7
  695. package/dist/node_modules/@pencil-agent/ai/dist/models.d.ts +0 -31
  696. package/dist/node_modules/@pencil-agent/ai/dist/models.generated.d.ts +0 -15159
  697. package/dist/node_modules/@pencil-agent/ai/dist/overflow.d.ts +0 -7
  698. package/dist/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.d.ts +0 -20
  699. package/dist/node_modules/@pencil-agent/ai/dist/providers/anthropic.d.ts +0 -38
  700. package/dist/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.d.ts +0 -21
  701. package/dist/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.d.ts +0 -13
  702. package/dist/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.d.ts +0 -79
  703. package/dist/node_modules/@pencil-agent/ai/dist/providers/google-shared.d.ts +0 -70
  704. package/dist/node_modules/@pencil-agent/ai/dist/providers/google-vertex.d.ts +0 -20
  705. package/dist/node_modules/@pencil-agent/ai/dist/providers/google.d.ts +0 -18
  706. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.d.ts +0 -8
  707. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-completions.d.ts +0 -20
  708. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.d.ts +0 -22
  709. package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses.d.ts +0 -19
  710. package/dist/node_modules/@pencil-agent/ai/dist/providers/register-builtins.d.ts +0 -8
  711. package/dist/node_modules/@pencil-agent/ai/dist/providers/simple-options.d.ts +0 -13
  712. package/dist/node_modules/@pencil-agent/ai/dist/providers/transform-messages.d.ts +0 -13
  713. package/dist/node_modules/@pencil-agent/ai/dist/registry.d.ts +0 -8
  714. package/dist/node_modules/@pencil-agent/ai/dist/schema.d.ts +0 -10
  715. package/dist/node_modules/@pencil-agent/ai/dist/stream.d.ts +0 -25
  716. package/dist/node_modules/@pencil-agent/ai/dist/utils/event-stream.d.ts +0 -31
  717. package/dist/node_modules/@pencil-agent/ai/dist/utils/http-proxy.d.ts +0 -13
  718. package/dist/node_modules/@pencil-agent/ai/dist/utils/json-parse.d.ts +0 -14
  719. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.d.ts +0 -22
  720. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/decode-credential.d.ts +0 -12
  721. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.d.ts +0 -35
  722. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.d.ts +0 -31
  723. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.d.ts +0 -31
  724. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/index.d.ts +0 -60
  725. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.d.ts +0 -39
  726. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.d.ts +0 -18
  727. package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/types.d.ts +0 -52
  728. package/dist/node_modules/@pencil-agent/ai/dist/utils/overflow.d.ts +0 -57
  729. package/dist/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.d.ts +0 -16
  730. package/dist/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.d.ts +0 -22
  731. package/dist/node_modules/@pencil-agent/ai/dist/utils/validation.d.ts +0 -23
  732. package/dist/node_modules/@pencil-agent/tui/dist/autocomplete.d.ts +0 -62
  733. package/dist/node_modules/@pencil-agent/tui/dist/components/box.d.ts +0 -27
  734. package/dist/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.d.ts +0 -27
  735. package/dist/node_modules/@pencil-agent/tui/dist/components/editor.d.ts +0 -218
  736. package/dist/node_modules/@pencil-agent/tui/dist/components/image.d.ts +0 -33
  737. package/dist/node_modules/@pencil-agent/tui/dist/components/input.d.ts +0 -42
  738. package/dist/node_modules/@pencil-agent/tui/dist/components/loader.d.ts +0 -26
  739. package/dist/node_modules/@pencil-agent/tui/dist/components/markdown.d.ts +0 -100
  740. package/dist/node_modules/@pencil-agent/tui/dist/components/select-list.d.ts +0 -37
  741. package/dist/node_modules/@pencil-agent/tui/dist/components/settings-list.d.ts +0 -55
  742. package/dist/node_modules/@pencil-agent/tui/dist/components/spacer.d.ts +0 -17
  743. package/dist/node_modules/@pencil-agent/tui/dist/components/text.d.ts +0 -24
  744. package/dist/node_modules/@pencil-agent/tui/dist/components/truncated-text.d.ts +0 -18
  745. package/dist/node_modules/@pencil-agent/tui/dist/editor-component.d.ts +0 -51
  746. package/dist/node_modules/@pencil-agent/tui/dist/fuzzy.d.ts +0 -32
  747. package/dist/node_modules/@pencil-agent/tui/dist/index.d.ts +0 -28
  748. package/dist/node_modules/@pencil-agent/tui/dist/keybindings.d.ts +0 -44
  749. package/dist/node_modules/@pencil-agent/tui/dist/keys.d.ts +0 -149
  750. package/dist/node_modules/@pencil-agent/tui/dist/kill-ring.d.ts +0 -33
  751. package/dist/node_modules/@pencil-agent/tui/dist/stdin-buffer.d.ts +0 -38
  752. package/dist/node_modules/@pencil-agent/tui/dist/terminal-image.d.ts +0 -73
  753. package/dist/node_modules/@pencil-agent/tui/dist/terminal.d.ts +0 -86
  754. package/dist/node_modules/@pencil-agent/tui/dist/tui.d.ts +0 -219
  755. package/dist/node_modules/@pencil-agent/tui/dist/undo-stack.d.ts +0 -22
  756. package/dist/node_modules/@pencil-agent/tui/dist/utils.d.ts +0 -83
  757. package/docs/API/345/257/206/351/222/245/344/277/256/345/244/215/346/200/273/347/273/223.md +0 -147
  758. package/docs/API/345/257/206/351/222/245/345/221/275/344/273/244.md +0 -66
  759. package/docs/API/345/257/206/351/222/245/346/214/207/345/215/227.md +0 -292
  760. package/docs/ARK/347/274/226/347/240/201/350/256/241/345/210/222.md +0 -51
  761. package/docs/AgentTeam/351/207/215/346/236/204/346/226/271/346/241/210.md +0 -446
  762. package/docs/InterviewRegression.md +0 -122
  763. package/docs/MCP/345/277/253/351/200/237/345/217/202/350/200/203.md +0 -113
  764. package/docs/MCP/351/233/206/346/210/220/346/214/207/345/215/227.md +0 -255
  765. package/docs/Persona/345/210/207/346/215/242.md +0 -97
  766. package/docs/Recap/346/211/251/345/261/225.md +0 -410
  767. package/docs/Simplify/346/211/251/345/261/225.md +0 -278
  768. package/docs/agent-loop-frameworks.md +0 -119
  769. package/docs/debug-logging.md +0 -148
  770. package/docs/eval/AGENT.md +0 -36
  771. package/docs/eval/README.md +0 -72
  772. package/docs/eval/decision-log-template.md +0 -51
  773. package/docs/eval/experiment-protocol.md +0 -77
  774. package/docs/eval/issue-usage/README.md +0 -32
  775. package/docs/eval/issue-usage/cases.md +0 -31
  776. package/docs/eval/issue-usage/metrics.md +0 -23
  777. package/docs/eval/issue-usage/workflow.md +0 -39
  778. package/docs/eval/sal-memory-anchor/README.md +0 -32
  779. package/docs/eval/sal-memory-anchor/hypothesis.md +0 -45
  780. package/docs/eval/sal-memory-anchor/metrics.md +0 -24
  781. package/docs/eval/sal-memory-anchor/runs.md +0 -29
  782. package/docs/eval/tool-usage-analysis/README.md +0 -32
  783. package/docs/eval/tool-usage-analysis/invalid-data-rules.md +0 -29
  784. package/docs/eval/tool-usage-analysis/metrics.md +0 -35
  785. package/docs/eval/tool-usage-analysis/report-template.md +0 -49
  786. package/docs/eval/tool-usage-analysis/sop.md +0 -63
  787. package/docs/multi-agent-fs-design.md +0 -1120
  788. package/docs/pencil-platform-charter.md +0 -21
  789. package/docs/project-structure-optimization.md +0 -66
  790. package/docs/remote-tool-register-design.md +0 -436
  791. package/docs//345/206/205/347/275/256MCP/345/267/245/345/205/267.md +0 -326
  792. package/docs//345/215/203/345/270/206/347/274/226/347/240/201/350/256/241/345/210/222.md +0 -52
  793. package/docs//345/215/225/344/275/223/344/273/223/345/272/223/350/207/252/350/277/260.md +0 -189
  794. package/docs//345/215/225/344/275/223/344/273/223/345/272/223/350/277/201/347/247/273/346/214/207/345/215/227.md +0 -232
  795. package/docs//345/217/221/345/270/203/346/214/207/345/215/227.md +0 -129
  796. package/docs//345/217/230/346/233/264/346/200/273/347/273/223.md +0 -138
  797. package/docs//345/217/230/346/233/264/346/227/245/345/277/227.md +0 -50
  798. package/docs//345/267/245/345/205/267/347/256/241/347/220/206/345/231/250/344/274/230/345/214/226.md +0 -208
  799. package/docs//345/276/252/347/216/257/345/221/275/344/273/244/350/256/241/345/210/222.md +0 -56
  800. package/docs//346/226/207/346/241/243/344/270/255/345/277/203.md +0 -146
  801. package/docs//346/236/266/346/236/204/344/274/230/345/214/226.md +0 -404
  802. package/docs//346/236/266/346/236/204/346/274/224/350/277/233.md +0 -228
  803. package/docs//347/211/210/346/234/2542.md +0 -199
  804. package/docs//347/272/263/350/257/272/350/256/260/345/277/206/350/257/273/345/206/231.md +0 -352
  805. package/docs//347/273/223/346/236/204.md +0 -339
  806. package/docs//350/256/241/345/210/222.md +0 -44
  807. package/docs//350/256/260/345/277/206/347/263/273/347/273/237.md +0 -236
  808. package/docs//350/277/201/347/247/273/346/200/273/347/273/223.md +0 -204
  809. package/docs//351/207/215/346/236/204/344/273/273/345/212/241.md +0 -181
  810. package/docs//351/207/215/346/236/204/350/256/241/345/210/222.md +0 -592
  811. /package/dist/{node_modules/@pencil-agent/ai/dist → core/lib/ai/src}/utils/event-stream-types.d.ts +0 -0
@@ -1,525 +1,24 @@
1
- /**
2
- * [WHO]: Provides SelfUpdateController, SelfUpdateContext version check / update / reinstall / restart
3
- * [FROM]: Depends on @pencil-agent/tui (Container/Text/Spacer), config (VERSION/PACKAGE_NAME/getUpdateInstruction),
4
- * theme, components/dynamic-border, node:child_process (spawn)
5
- * [TO]: Consumed by modes/interactive/interactive-mode.ts (constructs one, delegates /update, /reinstall, startup check)
6
- * [HERE]: modes/interactive/controllers/self-update-controller.ts — P5 UI slice (UI02, 纯搬)
7
- *
8
- * Extracted from InteractiveMode (P5 self-update). Owns the npm-based update/reinstall workflow
9
- * and the startup version check an ops flow that happens to use the TUI for prompts. Reads chat
10
- * container / render / settings / selector through a narrow SelfUpdateContext (no InteractiveMode
11
- * reference). Behavior is identical to the former InteractiveMode methods. P5 keeps it inside
12
- * modes/interactive; only a second mode consumer would justify moving it to modes/_shell/update.
13
- */
14
- import { spawn } from "node:child_process";
15
- import { Spacer, Text } from "@pencil-agent/tui";
16
- import { getUpdateInstruction, PACKAGE_NAME, VERSION } from "../../../config.js";
17
- import { DynamicBorder } from "../components/dynamic-border.js";
18
- import { theme } from "../theme/theme.js";
19
- function spawnNpm(args) {
20
- if (process.platform === "win32") {
21
- // On Windows, use shell mode with a single string to avoid DEP0190 warning.
22
- // We quote arguments that contain spaces.
23
- const fullCommand = ["npm", ...args]
24
- .map((arg) => (arg.includes(" ") ? `"${arg}"` : arg))
25
- .join(" ");
26
- return spawn(fullCommand, {
27
- stdio: ["ignore", "pipe", "pipe"],
28
- env: process.env,
29
- shell: true,
30
- });
31
- }
32
- return spawn("npm", args, {
33
- stdio: ["ignore", "pipe", "pipe"],
34
- env: process.env,
35
- });
36
- }
37
- export class SelfUpdateController {
38
- ctx;
39
- constructor(ctx) {
40
- this.ctx = ctx;
41
- }
42
- get chat() {
43
- return this.ctx.getChatContainer();
44
- }
45
- render() {
46
- this.ctx.requestRender();
47
- }
48
- // ----- public surface (called by mount) -----
49
- async checkForNewVersion() {
50
- if (process.env.NANOPENCIL_SKIP_VERSION_CHECK || process.env.NANOPENCIL_OFFLINE)
51
- return undefined;
52
- try {
53
- const response = await fetch(`https://registry.npmjs.org/${encodeURIComponent(PACKAGE_NAME)}`, {
54
- signal: AbortSignal.timeout(10000),
55
- });
56
- if (!response.ok)
57
- return undefined;
58
- const data = (await response.json());
59
- const latestVersion = data["dist-tags"]?.latest ?? data.version;
60
- // Only return latestVersion if it's actually newer than current version
61
- if (latestVersion && this.compareVersion(latestVersion, VERSION) > 0) {
62
- return latestVersion;
63
- }
64
- return undefined;
65
- }
66
- catch {
67
- return undefined;
68
- }
69
- }
70
- showNewVersionNotification(newVersion) {
71
- const action = theme.fg("accent", getUpdateInstruction(PACKAGE_NAME));
72
- const updateInstruction = theme.fg("muted", `New version ${newVersion} is available. `) + action;
73
- this.chat.addChild(new Spacer(1));
74
- this.chat.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
75
- this.chat.addChild(new Text(`${theme.bold(theme.fg("warning", "Update Available"))}\n${updateInstruction}`, 1, 0));
76
- this.chat.addChild(new DynamicBorder((text) => theme.fg("warning", text)));
77
- this.render();
78
- }
79
- async handleUpdateCommand() {
80
- this.chat.addChild(new Spacer(1));
81
- this.chat.addChild(new Text(theme.fg("accent", "🔍 Checking for updates..."), 1, 0));
82
- this.render();
83
- try {
84
- const response = await fetch("https://registry.npmjs.org/@pencil-agent/nano-pencil", {
85
- signal: AbortSignal.timeout(10000),
86
- });
87
- if (!response.ok) {
88
- throw new Error(`Failed to check for updates: ${response.status}`);
89
- }
90
- const data = (await response.json());
91
- const latestVersion = data["dist-tags"]?.latest ?? "unknown";
92
- const currentVersion = VERSION;
93
- const versionComparison = latestVersion !== "unknown" ? this.compareVersion(latestVersion, currentVersion) : 0;
94
- const lines = [];
95
- lines.push(theme.fg("accent", "📦 NanoPencil Update Checker"));
96
- lines.push("");
97
- lines.push(`Current version: ${theme.fg("dim", currentVersion)}`);
98
- lines.push(`Latest version: ${theme.fg(versionComparison > 0 ? "success" : "dim", latestVersion)}`);
99
- lines.push("");
100
- if (latestVersion !== "unknown" && versionComparison > 0) {
101
- lines.push(theme.fg("success", `✨ New version ${latestVersion} available!`));
102
- lines.push("");
103
- this.chat.addChild(new Spacer(1));
104
- this.chat.addChild(new Text(lines.join("\n"), 1, 0));
105
- this.render();
106
- // Show interactive update options
107
- await this.showUpdateOptions(latestVersion);
108
- return;
109
- }
110
- else if (latestVersion !== "unknown" && versionComparison < 0) {
111
- lines.push(theme.fg("success", "✨ You're ahead!"));
112
- lines.push("");
113
- lines.push(theme.fg("dim", "You're running a pre-release or newer version than published on npm."));
114
- }
115
- else {
116
- lines.push(theme.fg("success", "✨ Up to date!"));
117
- lines.push("");
118
- lines.push(theme.fg("dim", "You're running the latest version of NanoPencil."));
119
- }
120
- this.chat.addChild(new Spacer(1));
121
- this.chat.addChild(new Text(lines.join("\n"), 1, 0));
122
- }
123
- catch (error) {
124
- this.chat.addChild(new Spacer(1));
125
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Failed to check for updates: ${error instanceof Error ? error.message : "Unknown error"}`), 1, 0));
126
- this.chat.addChild(new Text(theme.fg("dim", "Visit https://www.npmjs.com/package/@pencil-agent/nano-pencil to check manually"), 1, 0));
127
- }
128
- this.render();
129
- }
130
- /**
131
- * Handle /reinstall command - force clean reinstall.
132
- */
133
- handleReinstallCommand() {
134
- this.chat.addChild(new Spacer(1));
135
- this.chat.addChild(new Text(theme.fg("accent", "🔄 Force Reinstalling NanoPencil..."), 1, 0));
136
- this.chat.addChild(new Text(theme.fg("dim", "This will uninstall and reinstall with cache cleared."), 1, 0));
137
- this.render();
138
- // Step 1: Uninstall
139
- const uninstall = spawnNpm(["uninstall", "-g", PACKAGE_NAME]);
140
- uninstall.on("close", (code) => {
141
- if (code !== 0) {
142
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Uninstall failed (exit code ${code}), continuing anyway...`), 1, 0));
143
- this.render();
144
- }
145
- // Step 2: Clear cache
146
- this.chat.addChild(new Text(theme.fg("dim", "🧹 Clearing npm cache..."), 1, 0));
147
- this.render();
148
- const cacheClean = spawnNpm(["cache", "clean", "--force"]);
149
- cacheClean.on("close", () => {
150
- // Step 3: Reinstall
151
- this.chat.addChild(new Text(theme.fg("dim", "📦 Installing latest version..."), 1, 0));
152
- this.render();
153
- const install = spawnNpm(["install", "-g", "--force", `${PACKAGE_NAME}@latest`]);
154
- install.on("close", (installCode) => {
155
- if (installCode === 0) {
156
- this.chat.addChild(new Text(theme.fg("success", "✅ NanoPencil reinstalled successfully!"), 1, 0));
157
- this.chat.addChild(new Text(theme.fg("accent", "Press 'R' to restart NanoPencil"), 1, 0));
158
- this.render();
159
- // Wait for R to restart
160
- const waitForRestart = async () => {
161
- const key = await this.waitForKeyPress(["r", "R", "q", "Q", "\x03"]);
162
- if (key === "r" || key === "R") {
163
- this.restartNanoPencil();
164
- }
165
- else {
166
- process.exit(0);
167
- }
168
- };
169
- waitForRestart();
170
- }
171
- else {
172
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Reinstall failed (exit code ${installCode})`), 1, 0));
173
- this.chat.addChild(new Text(theme.fg("dim", "Try running manually: npm uninstall -g @pencil-agent/nano-pencil && npm install -g @pencil-agent/nano-pencil"), 1, 0));
174
- this.render();
175
- }
176
- });
177
- install.on("error", (err) => {
178
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Install failed: ${err.message}`), 1, 0));
179
- this.render();
180
- });
181
- });
182
- });
183
- uninstall.on("error", (err) => {
184
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Uninstall failed: ${err.message}`), 1, 0));
185
- this.render();
186
- });
187
- }
188
- /**
189
- * Check for updates on startup if auto-update is enabled.
190
- */
191
- async checkAutoUpdateOnStartup() {
192
- const autoUpdate = this.ctx.getAutoUpdate();
193
- if (autoUpdate !== "always") {
194
- return;
195
- }
196
- try {
197
- const response = await fetch("https://registry.npmjs.org/@pencil-agent/nano-pencil", {
198
- signal: AbortSignal.timeout(5000), // Shorter timeout for startup
199
- });
200
- if (!response.ok) {
201
- return;
202
- }
203
- const data = (await response.json());
204
- const latestVersion = data["dist-tags"]?.latest;
205
- if (!latestVersion) {
206
- return;
207
- }
208
- const currentVersion = VERSION;
209
- const skippedVersion = this.ctx.getSkippedVersion();
210
- // Skip if already skipped this version
211
- if (skippedVersion === latestVersion) {
212
- return;
213
- }
214
- // Compare versions properly
215
- if (this.compareVersion(latestVersion, currentVersion) > 0) {
216
- // Show confirmation dialog before auto-update
217
- const title = `${theme.fg("accent", "📦 Update Available")}\n\n${theme.fg("dim", `Current: ${currentVersion}`)}\n${theme.fg("success", `Latest: ${latestVersion}`)}\n\n${theme.fg("dim", "A new version is available. Would you like to update now?")}`;
218
- const options = [
219
- "1. Update now and restart",
220
- "2. Skip this version",
221
- "3. Continue without updating",
222
- ];
223
- const choice = await this.ctx.showSelector(title, options);
224
- if (!choice) {
225
- // User cancelled, continue without update
226
- return;
227
- }
228
- if (choice.includes("Update now")) {
229
- // Perform update
230
- await this.performUpdate(latestVersion);
231
- }
232
- else if (choice.includes("Skip")) {
233
- // Skip this version
234
- this.ctx.setSkippedVersion(latestVersion);
235
- this.chat.addChild(new Spacer(1));
236
- this.chat.addChild(new Text(theme.fg("dim", `⏭️ Skipped version ${latestVersion}. You won't be prompted again.`), 1, 0));
237
- this.render();
238
- }
239
- else if (choice.includes("Continue")) {
240
- // Continue without updating
241
- this.chat.addChild(new Spacer(1));
242
- this.chat.addChild(new Text(theme.fg("dim", "Continuing without update..."), 1, 0));
243
- this.render();
244
- }
245
- }
246
- }
247
- catch {
248
- // Silently fail on startup check - don't block user
249
- }
250
- }
251
- // ----- private -----
252
- /**
253
- * Show interactive update options when a new version is available.
254
- */
255
- async showUpdateOptions(latestVersion) {
256
- const autoUpdate = this.ctx.getAutoUpdate();
257
- const skippedVersion = this.ctx.getSkippedVersion();
258
- // If user has already skipped this version, offer options to clear it
259
- if (skippedVersion === latestVersion) {
260
- const title = `${theme.fg("accent", "Update Skipped")}\n\n${theme.fg("dim", `You previously chose to skip version ${latestVersion}.`)}\n${theme.fg("dim", `Current: ${VERSION}`)}\n${theme.fg("success", `Latest: ${latestVersion}`)}\n\n${theme.fg("dim", "What would you like to do?")}`;
261
- const skipOptions = [
262
- "1. Update now",
263
- "2. Clear skip and enable auto-update",
264
- "3. Continue without updating",
265
- ];
266
- const skipChoice = await this.ctx.showSelector(title, skipOptions);
267
- if (!skipChoice) {
268
- this.chat.addChild(new Text(theme.fg("dim", "Returning to chat..."), 1, 0));
269
- this.render();
270
- return;
271
- }
272
- if (skipChoice.includes("Update now")) {
273
- await this.performUpdate(latestVersion);
274
- return;
275
- }
276
- else if (skipChoice.includes("Clear skip")) {
277
- this.ctx.setSkippedVersion(undefined);
278
- this.ctx.setAutoUpdate("always");
279
- this.chat.addChild(new Spacer(1));
280
- this.chat.addChild(new Text(theme.fg("success", "✅ Skip cleared! Auto-update enabled. NanoPencil will check for updates on startup."), 1, 0));
281
- this.render();
282
- // Proceed with update
283
- await this.performUpdate(latestVersion);
284
- return;
285
- }
286
- // Continue without updating
287
- this.chat.addChild(new Text(theme.fg("dim", "Continuing without update..."), 1, 0));
288
- this.render();
289
- return;
290
- }
291
- // Build title with version info
292
- const title = `${theme.fg("accent", "Update Available")}\n\n${theme.fg("dim", `Current: ${VERSION}`)}\n${theme.fg("success", `Latest: ${latestVersion}`)}`;
293
- // Build options list with consistent numbering
294
- const options = [];
295
- options.push("1. Update now and restart");
296
- options.push("2. Exit and I'll update manually");
297
- options.push("3. Skip this version");
298
- // Add auto-update toggle option
299
- if (autoUpdate !== "always") {
300
- options.push("4. Enable auto-update");
301
- }
302
- else {
303
- options.push("4. Disable auto-update");
304
- }
305
- // Add status subtitle
306
- const subtitle = autoUpdate === "always"
307
- ? `\n\n${theme.fg("success", "● Auto-update is enabled")}`
308
- : `\n\n${theme.fg("dim", "○ Auto-update is disabled")}`;
309
- const choice = await this.ctx.showSelector(title + subtitle, options);
310
- if (!choice) {
311
- // User cancelled, return to chat
312
- this.chat.addChild(new Text(theme.fg("dim", "Returning to chat..."), 1, 0));
313
- this.render();
314
- return;
315
- }
316
- if (choice.includes("Update now")) {
317
- await this.performUpdate(latestVersion);
318
- }
319
- else if (choice.includes("Exit")) {
320
- this.chat.addChild(new Spacer(1));
321
- this.chat.addChild(new Text(theme.fg("accent", "👋 Exiting. Run this command to update:"), 1, 0));
322
- this.chat.addChild(new Text(theme.fg("dim", ` npm install -g ${PACKAGE_NAME}@latest`), 1, 0));
323
- this.render();
324
- await new Promise((resolve) => setTimeout(resolve, 2000));
325
- process.exit(0);
326
- }
327
- else if (choice.includes("Skip")) {
328
- this.ctx.setSkippedVersion(latestVersion);
329
- this.chat.addChild(new Spacer(1));
330
- this.chat.addChild(new Text(theme.fg("dim", `⏭️ Skipped version ${latestVersion}. You won't be prompted for this version again.`), 1, 0));
331
- this.chat.addChild(new Text(theme.fg("dim", " You can clear this skip later from settings."), 1, 0));
332
- this.render();
333
- }
334
- else if (choice.includes("Enable auto-update")) {
335
- this.ctx.setAutoUpdate("always");
336
- this.chat.addChild(new Spacer(1));
337
- this.chat.addChild(new Text(theme.fg("success", "✅ Auto-update enabled! NanoPencil will check for updates on startup."), 1, 0));
338
- this.render();
339
- // Proceed with update after enabling auto-update
340
- await this.performUpdate(latestVersion);
341
- }
342
- else if (choice.includes("Disable auto-update")) {
343
- this.ctx.setAutoUpdate("prompt");
344
- this.chat.addChild(new Spacer(1));
345
- this.chat.addChild(new Text(theme.fg("dim", "✅ Auto-update disabled. You'll be prompted when updates are available."), 1, 0));
346
- this.render();
347
- }
348
- }
349
- /**
350
- * Perform the actual npm install update.
351
- */
352
- async performUpdate(latestVersion, retryCount = 0) {
353
- this.chat.addChild(new Spacer(1));
354
- this.chat.addChild(new Text(theme.fg("accent", "🔄 Updating NanoPencil..."), 1, 0));
355
- this.render();
356
- return new Promise((resolve) => {
357
- const child = spawnNpm(["install", "-g", "--force", `${PACKAGE_NAME}@latest`]);
358
- let errorOutput = "";
359
- child.stderr?.on("data", (data) => {
360
- errorOutput += data.toString();
361
- });
362
- child.on("close", async (code) => {
363
- if (code === 0) {
364
- this.chat.addChild(new Text(theme.fg("success", `✅ Successfully updated to version ${latestVersion}!`), 1, 0));
365
- this.chat.addChild(new Spacer(1));
366
- this.chat.addChild(new Text(theme.fg("accent", "Press 'R' to restart or Ctrl+C to exit manually"), 1, 0));
367
- this.render();
368
- // Wait for user to press R to restart
369
- const waitForRestart = async () => {
370
- const key = await this.waitForKeyPress(["r", "R", "q", "Q", "\x03"]);
371
- if (key === "r" || key === "R") {
372
- this.chat.addChild(new Text(theme.fg("dim", "🔄 Restarting NanoPencil..."), 1, 0));
373
- this.render();
374
- // Use the improved restart method
375
- this.restartNanoPencil();
376
- }
377
- else {
378
- process.exit(0);
379
- }
380
- };
381
- waitForRestart().then(() => resolve());
382
- }
383
- else {
384
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Update failed (exit code ${code})`), 1, 0));
385
- this.chat.addChild(new Text(theme.fg("dim", "This may be a network issue or permissions problem."), 1, 0));
386
- this.render();
387
- resolve();
388
- // Offer retry option
389
- this.showRetryOptions(latestVersion, retryCount);
390
- }
391
- });
392
- child.on("error", async (err) => {
393
- this.chat.addChild(new Text(theme.fg("warning", `⚠️ Failed to run npm: ${err.message}`), 1, 0));
394
- this.chat.addChild(new Text(theme.fg("dim", "Make sure npm is installed and in your PATH."), 1, 0));
395
- this.render();
396
- resolve();
397
- // Offer retry option
398
- this.showRetryOptions(latestVersion, retryCount);
399
- });
400
- });
401
- }
402
- /**
403
- * Show retry options after a failed update attempt.
404
- */
405
- async showRetryOptions(latestVersion, retryCount) {
406
- await new Promise((r) => setTimeout(r, 500));
407
- const options = ["1. Try again", "2. Exit and update manually"];
408
- const choice = await this.ctx.showSelector(`${theme.fg("accent", "Update Failed")}\n\n${theme.fg("dim", "What would you like to do?")}`, options);
409
- if (choice?.includes("Try again")) {
410
- if (retryCount < 3) {
411
- await this.performUpdate(latestVersion, retryCount + 1);
412
- }
413
- else {
414
- this.chat.addChild(new Text(theme.fg("dim", "Multiple retry attempts failed. Please try updating manually."), 1, 0));
415
- this.chat.addChild(new Text(theme.fg("dim", ` npm install -g ${PACKAGE_NAME}@latest`), 1, 0));
416
- this.render();
417
- }
418
- }
419
- else {
420
- this.chat.addChild(new Spacer(1));
421
- this.chat.addChild(new Text(theme.fg("accent", "👋 Exiting. Run this command to update:"), 1, 0));
422
- this.chat.addChild(new Text(theme.fg("dim", ` npm install -g ${PACKAGE_NAME}@latest`), 1, 0));
423
- this.render();
424
- await new Promise((resolve) => setTimeout(resolve, 2000));
425
- process.exit(0);
426
- }
427
- }
428
- /**
429
- * Wait for a specific key press from user.
430
- * Falls back to selector UI if TTY is not available.
431
- */
432
- async waitForKeyPress(keys) {
433
- // Check if we're in a TTY environment
434
- if (!process.stdin.isTTY) {
435
- // Fall back to selector UI
436
- const options = keys
437
- .filter((k) => k !== "\x03")
438
- .map((k) => `Press '${k}'`);
439
- options.push("Cancel");
440
- const choice = await this.ctx.showSelector(theme.fg("accent", "Restart Options"), options);
441
- if (!choice || choice.includes("Cancel")) {
442
- return "\x03";
443
- }
444
- const selectedKey = keys.find((k) => choice.includes(k));
445
- return selectedKey ?? "\x03";
446
- }
447
- return new Promise((resolve) => {
448
- const stdin = process.stdin;
449
- const originalRawMode = stdin.isRaw;
450
- const cleanup = () => {
451
- try {
452
- if (stdin.isTTY) {
453
- stdin.setRawMode(originalRawMode);
454
- }
455
- }
456
- catch {
457
- // Ignore errors when restoring raw mode
458
- }
459
- stdin.pause();
460
- stdin.removeListener("data", onData);
461
- };
462
- const onData = (data) => {
463
- const key = data.toString();
464
- // Check for Ctrl+C or matching keys
465
- if (key === "\x03" || keys.includes(key)) {
466
- cleanup();
467
- resolve(key === "\x03" ? "\x03" : key);
468
- }
469
- };
470
- try {
471
- stdin.setRawMode(true);
472
- stdin.resume();
473
- stdin.on("data", onData);
474
- }
475
- catch (err) {
476
- cleanup();
477
- resolve(null);
478
- }
479
- });
480
- }
481
- /**
482
- * Restart NanoPencil by spawning a new process.
483
- * Tries to detect the correct command to restart.
484
- */
485
- restartNanoPencil() {
486
- // Try to detect how NanoPencil was launched
487
- const execArgv = process.argv;
488
- const cmd = execArgv[0]; // e.g., /usr/local/bin/nanopencil or node
489
- const args = execArgv.slice(1);
490
- // Check if running as global CLI (nanopencil) or via node (node dist/cli.js)
491
- const isGlobalCli = cmd.includes("nanopencil");
492
- if (isGlobalCli) {
493
- // Running as global CLI command
494
- spawn(cmd, args, {
495
- detached: true,
496
- stdio: "ignore",
497
- }).unref();
498
- }
499
- else {
500
- // Running via node (development or bundled)
501
- spawn(process.execPath, execArgv.slice(1), {
502
- detached: true,
503
- stdio: "ignore",
504
- }).unref();
505
- }
506
- process.exit(0);
507
- }
508
- /**
509
- * Compare two version strings (semver style).
510
- * Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
511
- */
512
- compareVersion(v1, v2) {
513
- const parts1 = v1.split(".").map(Number);
514
- const parts2 = v2.split(".").map(Number);
515
- for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
516
- const p1 = parts1[i] ?? 0;
517
- const p2 = parts2[i] ?? 0;
518
- if (p1 > p2)
519
- return 1;
520
- if (p1 < p2)
521
- return -1;
522
- }
523
- return 0;
524
- }
525
- }
1
+ var $=Object.defineProperty;var p=(w,e)=>$(w,"name",{value:e,configurable:!0});import{spawn as g}from"node:child_process";import{Spacer as c,Text as i}from"@pencil-agent/tui";import{getUpdateInstruction as k,PACKAGE_NAME as l,VERSION as f}from"../../../config.js";import{DynamicBorder as y}from"../components/dynamic-border.js";import{theme as t}from"../theme/theme.js";function m(w){if(process.platform==="win32"){const e=["npm",...w].map(a=>a.includes(" ")?`"${a}"`:a).join(" ");return g(e,{stdio:["ignore","pipe","pipe"],env:process.env,shell:!0})}return g("npm",w,{stdio:["ignore","pipe","pipe"],env:process.env})}p(m,"spawnNpm");class R{static{p(this,"SelfUpdateController")}ctx;constructor(e){this.ctx=e}get chat(){return this.ctx.getChatContainer()}render(){this.ctx.requestRender()}async checkForNewVersion(){if(!(process.env.NANOPENCIL_SKIP_VERSION_CHECK||process.env.NANOPENCIL_OFFLINE))try{const e=await fetch(`https://registry.npmjs.org/${encodeURIComponent(l)}`,{signal:AbortSignal.timeout(1e4)});if(!e.ok)return;const a=await e.json(),n=a["dist-tags"]?.latest??a.version;return n&&this.compareVersion(n,f)>0?n:void 0}catch{return}}showNewVersionNotification(e){const a=t.fg("accent",k(l)),n=t.fg("muted",`New version ${e} is available. `)+a;this.chat.addChild(new c(1)),this.chat.addChild(new y(r=>t.fg("warning",r))),this.chat.addChild(new i(`${t.bold(t.fg("warning","Update Available"))}
2
+ ${n}`,1,0)),this.chat.addChild(new y(r=>t.fg("warning",r))),this.render()}async handleUpdateCommand(){this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("accent","\u{1F50D} Checking for updates..."),1,0)),this.render();try{const e=await fetch("https://registry.npmjs.org/@pencil-agent/nano-pencil",{signal:AbortSignal.timeout(1e4)});if(!e.ok)throw new Error(`Failed to check for updates: ${e.status}`);const n=(await e.json())["dist-tags"]?.latest??"unknown",r=f,s=n!=="unknown"?this.compareVersion(n,r):0,d=[];if(d.push(t.fg("accent","\u{1F4E6} NanoPencil Update Checker")),d.push(""),d.push(`Current version: ${t.fg("dim",r)}`),d.push(`Latest version: ${t.fg(s>0?"success":"dim",n)}`),d.push(""),n!=="unknown"&&s>0){d.push(t.fg("success",`\u2728 New version ${n} available!`)),d.push(""),this.chat.addChild(new c(1)),this.chat.addChild(new i(d.join(`
3
+ `),1,0)),this.render(),await this.showUpdateOptions(n);return}else n!=="unknown"&&s<0?(d.push(t.fg("success","\u2728 You're ahead!")),d.push(""),d.push(t.fg("dim","You're running a pre-release or newer version than published on npm."))):(d.push(t.fg("success","\u2728 Up to date!")),d.push(""),d.push(t.fg("dim","You're running the latest version of NanoPencil.")));this.chat.addChild(new c(1)),this.chat.addChild(new i(d.join(`
4
+ `),1,0))}catch(e){this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Failed to check for updates: ${e instanceof Error?e.message:"Unknown error"}`),1,0)),this.chat.addChild(new i(t.fg("dim","Visit https://www.npmjs.com/package/@pencil-agent/nano-pencil to check manually"),1,0))}this.render()}handleReinstallCommand(){this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("accent","\u{1F504} Force Reinstalling NanoPencil..."),1,0)),this.chat.addChild(new i(t.fg("dim","This will uninstall and reinstall with cache cleared."),1,0)),this.render();const e=m(["uninstall","-g",l]);e.on("close",a=>{a!==0&&(this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Uninstall failed (exit code ${a}), continuing anyway...`),1,0)),this.render()),this.chat.addChild(new i(t.fg("dim","\u{1F9F9} Clearing npm cache..."),1,0)),this.render(),m(["cache","clean","--force"]).on("close",()=>{this.chat.addChild(new i(t.fg("dim","\u{1F4E6} Installing latest version..."),1,0)),this.render();const r=m(["install","-g","--force",`${l}@latest`]);r.on("close",s=>{s===0?(this.chat.addChild(new i(t.fg("success","\u2705 NanoPencil reinstalled successfully!"),1,0)),this.chat.addChild(new i(t.fg("accent","Press 'R' to restart NanoPencil"),1,0)),this.render(),p(async()=>{const o=await this.waitForKeyPress(["r","R","q","Q",""]);o==="r"||o==="R"?this.restartNanoPencil():process.exit(0)},"waitForRestart")()):(this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Reinstall failed (exit code ${s})`),1,0)),this.chat.addChild(new i(t.fg("dim","Try running manually: npm uninstall -g @pencil-agent/nano-pencil && npm install -g @pencil-agent/nano-pencil"),1,0)),this.render())}),r.on("error",s=>{this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Install failed: ${s.message}`),1,0)),this.render()})})}),e.on("error",a=>{this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Uninstall failed: ${a.message}`),1,0)),this.render()})}async checkAutoUpdateOnStartup(){if(this.ctx.getAutoUpdate()==="always")try{const a=await fetch("https://registry.npmjs.org/@pencil-agent/nano-pencil",{signal:AbortSignal.timeout(5e3)});if(!a.ok)return;const r=(await a.json())["dist-tags"]?.latest;if(!r)return;const s=f;if(this.ctx.getSkippedVersion()===r)return;if(this.compareVersion(r,s)>0){const o=`${t.fg("accent","\u{1F4E6} Update Available")}
5
+
6
+ ${t.fg("dim",`Current: ${s}`)}
7
+ ${t.fg("success",`Latest: ${r}`)}
8
+
9
+ ${t.fg("dim","A new version is available. Would you like to update now?")}`,h=["1. Update now and restart","2. Skip this version","3. Continue without updating"],u=await this.ctx.showSelector(o,h);if(!u)return;u.includes("Update now")?await this.performUpdate(r):u.includes("Skip")?(this.ctx.setSkippedVersion(r),this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("dim",`\u23ED\uFE0F Skipped version ${r}. You won't be prompted again.`),1,0)),this.render()):u.includes("Continue")&&(this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("dim","Continuing without update..."),1,0)),this.render())}}catch{}}async showUpdateOptions(e){const a=this.ctx.getAutoUpdate();if(this.ctx.getSkippedVersion()===e){const h=`${t.fg("accent","Update Skipped")}
10
+
11
+ ${t.fg("dim",`You previously chose to skip version ${e}.`)}
12
+ ${t.fg("dim",`Current: ${f}`)}
13
+ ${t.fg("success",`Latest: ${e}`)}
14
+
15
+ ${t.fg("dim","What would you like to do?")}`,u=["1. Update now","2. Clear skip and enable auto-update","3. Continue without updating"],C=await this.ctx.showSelector(h,u);if(!C){this.chat.addChild(new i(t.fg("dim","Returning to chat..."),1,0)),this.render();return}if(C.includes("Update now")){await this.performUpdate(e);return}else if(C.includes("Clear skip")){this.ctx.setSkippedVersion(void 0),this.ctx.setAutoUpdate("always"),this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("success","\u2705 Skip cleared! Auto-update enabled. NanoPencil will check for updates on startup."),1,0)),this.render(),await this.performUpdate(e);return}this.chat.addChild(new i(t.fg("dim","Continuing without update..."),1,0)),this.render();return}const r=`${t.fg("accent","Update Available")}
16
+
17
+ ${t.fg("dim",`Current: ${f}`)}
18
+ ${t.fg("success",`Latest: ${e}`)}`,s=[];s.push("1. Update now and restart"),s.push("2. Exit and I'll update manually"),s.push("3. Skip this version"),a!=="always"?s.push("4. Enable auto-update"):s.push("4. Disable auto-update");const d=a==="always"?`
19
+
20
+ ${t.fg("success","\u25CF Auto-update is enabled")}`:`
21
+
22
+ ${t.fg("dim","\u25CB Auto-update is disabled")}`,o=await this.ctx.showSelector(r+d,s);if(!o){this.chat.addChild(new i(t.fg("dim","Returning to chat..."),1,0)),this.render();return}o.includes("Update now")?await this.performUpdate(e):o.includes("Exit")?(this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("accent","\u{1F44B} Exiting. Run this command to update:"),1,0)),this.chat.addChild(new i(t.fg("dim",` npm install -g ${l}@latest`),1,0)),this.render(),await new Promise(h=>setTimeout(h,2e3)),process.exit(0)):o.includes("Skip")?(this.ctx.setSkippedVersion(e),this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("dim",`\u23ED\uFE0F Skipped version ${e}. You won't be prompted for this version again.`),1,0)),this.chat.addChild(new i(t.fg("dim"," You can clear this skip later from settings."),1,0)),this.render()):o.includes("Enable auto-update")?(this.ctx.setAutoUpdate("always"),this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("success","\u2705 Auto-update enabled! NanoPencil will check for updates on startup."),1,0)),this.render(),await this.performUpdate(e)):o.includes("Disable auto-update")&&(this.ctx.setAutoUpdate("prompt"),this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("dim","\u2705 Auto-update disabled. You'll be prompted when updates are available."),1,0)),this.render())}async performUpdate(e,a=0){return this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("accent","\u{1F504} Updating NanoPencil..."),1,0)),this.render(),new Promise(n=>{const r=m(["install","-g","--force",`${l}@latest`]);let s="";r.stderr?.on("data",d=>{s+=d.toString()}),r.on("close",async d=>{d===0?(this.chat.addChild(new i(t.fg("success",`\u2705 Successfully updated to version ${e}!`),1,0)),this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("accent","Press 'R' to restart or Ctrl+C to exit manually"),1,0)),this.render(),p(async()=>{const h=await this.waitForKeyPress(["r","R","q","Q",""]);h==="r"||h==="R"?(this.chat.addChild(new i(t.fg("dim","\u{1F504} Restarting NanoPencil..."),1,0)),this.render(),this.restartNanoPencil()):process.exit(0)},"waitForRestart")().then(()=>n())):(this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Update failed (exit code ${d})`),1,0)),this.chat.addChild(new i(t.fg("dim","This may be a network issue or permissions problem."),1,0)),this.render(),n(),this.showRetryOptions(e,a))}),r.on("error",async d=>{this.chat.addChild(new i(t.fg("warning",`\u26A0\uFE0F Failed to run npm: ${d.message}`),1,0)),this.chat.addChild(new i(t.fg("dim","Make sure npm is installed and in your PATH."),1,0)),this.render(),n(),this.showRetryOptions(e,a)})})}async showRetryOptions(e,a){await new Promise(s=>setTimeout(s,500));const n=["1. Try again","2. Exit and update manually"];(await this.ctx.showSelector(`${t.fg("accent","Update Failed")}
23
+
24
+ ${t.fg("dim","What would you like to do?")}`,n))?.includes("Try again")?a<3?await this.performUpdate(e,a+1):(this.chat.addChild(new i(t.fg("dim","Multiple retry attempts failed. Please try updating manually."),1,0)),this.chat.addChild(new i(t.fg("dim",` npm install -g ${l}@latest`),1,0)),this.render()):(this.chat.addChild(new c(1)),this.chat.addChild(new i(t.fg("accent","\u{1F44B} Exiting. Run this command to update:"),1,0)),this.chat.addChild(new i(t.fg("dim",` npm install -g ${l}@latest`),1,0)),this.render(),await new Promise(s=>setTimeout(s,2e3)),process.exit(0))}async waitForKeyPress(e){if(!process.stdin.isTTY){const a=e.filter(s=>s!=="").map(s=>`Press '${s}'`);a.push("Cancel");const n=await this.ctx.showSelector(t.fg("accent","Restart Options"),a);return!n||n.includes("Cancel")?"":e.find(s=>n.includes(s))??""}return new Promise(a=>{const n=process.stdin,r=n.isRaw,s=p(()=>{try{n.isTTY&&n.setRawMode(r)}catch{}n.pause(),n.removeListener("data",d)},"cleanup"),d=p(o=>{const h=o.toString();(h===""||e.includes(h))&&(s(),a(h===""?"":h))},"onData");try{n.setRawMode(!0),n.resume(),n.on("data",d)}catch{s(),a(null)}})}restartNanoPencil(){const e=process.argv,a=e[0],n=e.slice(1);a.includes("nanopencil")?g(a,n,{detached:!0,stdio:"ignore"}).unref():g(process.execPath,e.slice(1),{detached:!0,stdio:"ignore"}).unref(),process.exit(0)}compareVersion(e,a){const n=e.split(".").map(Number),r=a.split(".").map(Number);for(let s=0;s<Math.max(n.length,r.length);s++){const d=n[s]??0,o=r[s]??0;if(d>o)return 1;if(d<o)return-1}return 0}}export{R as SelfUpdateController};