@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.
- package/dist/build-meta.json +4 -4
- package/dist/builtin-extensions.js +1 -319
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.js +35 -324
- package/dist/cli/config-selector.js +1 -33
- package/dist/cli/file-processor.js +6 -81
- package/dist/cli/list-models.d.ts +9 -2
- package/dist/cli/list-models.js +2 -88
- package/dist/cli/session-picker.js +1 -36
- package/dist/cli.js +1 -37
- package/dist/config.js +1 -326
- package/dist/core/agent-dir/agent-dir-context.js +1 -84
- package/dist/core/agent-dir/agent-metadata.js +1 -68
- package/dist/core/agent-dir/migration-tool.js +7 -179
- package/dist/core/export-html/ansi-to-html.js +2 -242
- package/dist/core/export-html/index.js +2 -221
- package/dist/core/export-html/template.js +48 -1568
- package/dist/core/export-html/tool-renderer.js +1 -50
- package/dist/core/export-html/vendor/highlight.min.js +4 -1213
- package/dist/core/export-html/vendor/marked.min.js +56 -6
- package/dist/core/extensions-host/index.js +1 -11
- package/dist/core/extensions-host/loader.js +1 -488
- package/dist/core/extensions-host/runner.js +3 -903
- package/dist/core/extensions-host/types.d.ts +11 -6
- package/dist/core/extensions-host/types.js +1 -25
- package/dist/core/extensions-host/wrapper.js +2 -114
- package/dist/core/index.js +1 -19
- package/dist/{node_modules/@pencil-agent/agent-core/dist → core/lib/agent-core/src}/types.d.ts +2 -2
- package/dist/core/lib/agent-core/src/types.js +1 -0
- package/dist/{node_modules/@pencil-agent/ai/dist → core/lib/ai/src}/types.d.ts +17 -2
- package/dist/core/lib/ai/src/types.js +0 -0
- package/dist/core/lib/ai/src/utils/event-stream-types.js +0 -0
- package/dist/core/mcp/figma-auth.js +4 -490
- package/dist/core/mcp/index.js +1 -9
- package/dist/core/mcp/mcp-adapter.js +3 -116
- package/dist/core/mcp/mcp-client.js +6 -839
- package/dist/core/mcp/mcp-config.js +1 -262
- package/dist/core/mcp/mcp-guidance.js +13 -107
- package/dist/core/mcp/mcp-manager.js +1 -98
- package/dist/core/mcp/mcp-types.js +0 -7
- package/dist/core/messages.js +13 -116
- package/dist/core/model/custom-providers.d.ts +5 -1
- package/dist/core/model/custom-providers.js +1 -171
- package/dist/core/model/discovery-cache.d.ts +65 -0
- package/dist/core/model/discovery-cache.js +1 -0
- package/dist/core/model/discovery-cache.test.d.ts +7 -0
- package/dist/core/model/discovery-cache.test.js +1 -0
- package/dist/core/model/discovery.d.ts +79 -0
- package/dist/core/model/discovery.js +1 -0
- package/dist/core/model/discovery.test.d.ts +7 -0
- package/dist/core/model/discovery.test.js +1 -0
- package/dist/core/model/index.d.ts +4 -1
- package/dist/core/model/index.js +1 -7
- package/dist/core/model/known-models.d.ts +65 -0
- package/dist/core/model/known-models.generated.d.ts +2 -0
- package/dist/core/model/known-models.generated.js +1 -0
- package/dist/core/model/known-models.js +1 -0
- package/dist/core/model/switcher.js +1 -149
- package/dist/core/model-registry.d.ts +50 -0
- package/dist/core/model-registry.js +9 -620
- package/dist/core/model-resolver.js +1 -431
- package/dist/core/package-manager.js +3 -1449
- package/dist/core/persona/persona-manager.d.ts +2 -0
- package/dist/core/persona/persona-manager.js +2 -153
- package/dist/core/platform/abort-slot.js +1 -39
- package/dist/core/platform/config/auth-storage.js +1 -395
- package/dist/core/platform/config/defaults.js +1 -1
- package/dist/core/platform/config/diagnostics.js +0 -1
- package/dist/core/platform/config/resolve-config-value.js +1 -60
- package/dist/core/platform/config/resource-loader.js +2 -715
- package/dist/core/platform/config/settings-manager.js +1 -950
- package/dist/core/platform/exec/bash-executor.js +1 -211
- package/dist/core/platform/exec/exec.js +1 -73
- package/dist/core/platform/i18n/index.js +1 -63
- package/dist/core/platform/i18n/messages.js +1 -78
- package/dist/core/platform/i18n/messages.zh.js +1 -78
- package/dist/core/platform/i18n/slash-commands.js +1 -53
- package/dist/core/platform/i18n/slash-commands.zh.js +1 -53
- package/dist/core/platform/i18n/themes.js +1 -11
- package/dist/core/platform/i18n/themes.zh.js +1 -11
- package/dist/core/platform/keybindings.js +1 -162
- package/dist/core/platform/listeners.js +1 -37
- package/dist/core/platform/telemetry/batching-dispatcher.js +1 -89
- package/dist/core/platform/telemetry/build-meta.js +1 -57
- package/dist/core/platform/telemetry/caller-context.js +1 -19
- package/dist/core/platform/telemetry/credentials.js +1 -87
- package/dist/core/platform/telemetry/ext-events.js +1 -189
- package/dist/core/platform/telemetry/index.js +1 -6
- package/dist/core/platform/telemetry/insforge-base.js +1 -160
- package/dist/core/platform/telemetry/types.js +0 -7
- package/dist/core/platform/timings.js +3 -26
- package/dist/core/platform/utils/logger.js +1 -119
- package/dist/core/platform/utils/shell.js +9 -191
- package/dist/core/platform/utils/sleep.js +1 -23
- package/dist/core/platform/utils/tools-manager.js +1 -324
- package/dist/core/prompt/prompt-templates.js +2 -256
- package/dist/core/prompt/system-prompt.js +44 -155
- package/dist/core/runtime/agent-session.d.ts +56 -2
- package/dist/core/runtime/agent-session.js +15 -1777
- package/dist/core/runtime/bash-runner.js +2 -96
- package/dist/core/runtime/compaction-controller.js +1 -230
- package/dist/core/runtime/default-tools.js +1 -10
- package/dist/core/runtime/event-bridge.js +1 -99
- package/dist/core/runtime/event-bus.js +1 -31
- package/dist/core/runtime/export-bridge.js +1 -46
- package/dist/core/runtime/extension-core-bindings.js +3 -231
- package/dist/core/runtime/model-controller.js +1 -227
- package/dist/core/runtime/model-cycle.js +1 -26
- package/dist/core/runtime/pencil-agent.js +1 -303
- package/dist/core/runtime/prompt-assembly.js +3 -29
- package/dist/core/runtime/retry-coordinator.js +1 -151
- package/dist/core/runtime/sdk.d.ts +8 -0
- package/dist/core/runtime/sdk.js +1 -421
- package/dist/core/runtime/session-context.js +0 -12
- package/dist/core/runtime/session-lifecycle-controller.js +1 -158
- package/dist/core/runtime/session-tree-controller.js +1 -187
- package/dist/core/runtime/slash-command-catalog.js +1 -83
- package/dist/core/runtime/thinking-levels.js +1 -63
- package/dist/core/runtime/tool-runtime-controller.js +1 -79
- package/dist/core/runtime/turn-context.js +1 -39
- package/dist/core/session/compaction/branch-summarization.js +10 -207
- package/dist/core/session/compaction/compaction.js +26 -522
- package/dist/core/session/compaction/index.js +1 -9
- package/dist/core/session/compaction/utils.js +16 -133
- package/dist/core/session/session-manager.js +14 -1156
- package/dist/core/skills.js +4 -373
- package/dist/core/slash-commands.js +1 -90
- package/dist/core/soul-integration.js +1 -250
- package/dist/core/soul-options-contract.js +0 -7
- package/dist/core/sub-agent/agent-definition-loader.d.ts +96 -0
- package/dist/core/sub-agent/agent-definition-loader.js +2 -0
- package/dist/core/sub-agent/agent-definition.d.ts +162 -0
- package/dist/core/sub-agent/agent-definition.js +6 -0
- package/dist/core/sub-agent/agent-handoff-safety.d.ts +39 -0
- package/dist/core/sub-agent/agent-handoff-safety.js +1 -0
- package/dist/core/sub-agent/agent-input-output.d.ts +143 -0
- package/dist/core/sub-agent/agent-input-output.js +1 -0
- package/dist/core/sub-agent/agent-output-persistence.d.ts +43 -0
- package/dist/core/sub-agent/agent-output-persistence.js +3 -0
- package/dist/core/sub-agent/agent-prompt-builder.d.ts +37 -0
- package/dist/core/sub-agent/agent-prompt-builder.js +2 -0
- package/dist/core/sub-agent/agent-registry.d.ts +145 -0
- package/dist/core/sub-agent/agent-registry.js +1 -0
- package/dist/core/sub-agent/agent-result-extractor.d.ts +28 -0
- package/dist/core/sub-agent/agent-result-extractor.js +3 -0
- package/dist/core/sub-agent/agent-telemetry.d.ts +71 -0
- package/dist/core/sub-agent/agent-telemetry.js +1 -0
- package/dist/core/sub-agent/agent-tool-filter.d.ts +89 -0
- package/dist/core/sub-agent/agent-tool-filter.js +2 -0
- package/dist/core/sub-agent/agent-tool.d.ts +69 -0
- package/dist/core/sub-agent/agent-tool.js +11 -0
- package/dist/core/sub-agent/index.d.ts +19 -4
- package/dist/core/sub-agent/index.js +1 -9
- package/dist/core/sub-agent/send-message-tool.d.ts +33 -0
- package/dist/core/sub-agent/send-message-tool.js +2 -0
- package/dist/core/sub-agent/sub-agent-backend.d.ts +12 -0
- package/dist/core/sub-agent/sub-agent-backend.js +7 -225
- package/dist/core/sub-agent/sub-agent-runtime.d.ts +1 -5
- package/dist/core/sub-agent/sub-agent-runtime.js +1 -54
- package/dist/core/sub-agent/sub-agent-types.d.ts +16 -0
- package/dist/core/sub-agent/sub-agent-types.js +0 -8
- package/dist/core/sub-agent/subprocess-backend.js +1 -104
- package/dist/core/sub-agent/subprocess-worker.js +1 -40
- package/dist/core/theme-contract.js +0 -12
- package/dist/core/tools/bash.d.ts +8 -2
- package/dist/core/tools/bash.js +21 -424
- package/dist/core/tools/edit-diff.js +16 -244
- package/dist/core/tools/edit.js +1 -146
- package/dist/core/tools/file-state-cache.d.ts +30 -0
- package/dist/core/tools/file-state-cache.js +1 -0
- package/dist/core/tools/find.d.ts +2 -0
- package/dist/core/tools/find.js +8 -208
- package/dist/core/tools/grep.d.ts +14 -0
- package/dist/core/tools/grep.js +13 -248
- package/dist/core/tools/index.d.ts +14 -1
- package/dist/core/tools/index.js +1 -109
- package/dist/core/tools/input-validation.js +1 -14
- package/dist/core/tools/ls.js +4 -125
- package/dist/core/tools/orchestrator.js +1 -102
- package/dist/core/tools/path-utils.js +1 -86
- package/dist/core/tools/pdf-extract.d.ts +11 -0
- package/dist/core/tools/pdf-extract.js +1 -0
- package/dist/core/tools/read.d.ts +2 -0
- package/dist/core/tools/read.js +11 -169
- package/dist/core/tools/source.js +1 -96
- package/dist/core/tools/time.js +2 -51
- package/dist/core/tools/truncate.js +5 -201
- package/dist/core/tools/write-guard.js +1 -26
- package/dist/core/tools/write.js +1 -78
- package/dist/core/workspace/index.js +1 -7
- package/dist/core/workspace/worktree-manager.js +3 -374
- package/dist/extensions/builtin/AGENT.md +10 -0
- package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.d.ts +9 -0
- package/dist/extensions/builtin/ask-user-question/ask-user-question-tool.js +4 -0
- package/dist/extensions/builtin/ask-user-question/index.d.ts +8 -0
- package/dist/extensions/builtin/ask-user-question/index.js +1 -0
- package/dist/extensions/builtin/ask-user-question/prompt.d.ts +14 -0
- package/dist/extensions/builtin/ask-user-question/prompt.js +30 -0
- package/dist/extensions/builtin/ask-user-question/types.d.ts +69 -0
- package/dist/extensions/builtin/ask-user-question/types.js +1 -0
- package/dist/extensions/builtin/browser/index.js +15 -404
- package/dist/extensions/builtin/btw/index.js +9 -111
- package/dist/extensions/builtin/debug/collectors.js +7 -315
- package/dist/extensions/builtin/debug/index.js +24 -253
- package/dist/extensions/builtin/diagnostics/diagnostic-buffer.js +1 -139
- package/dist/extensions/builtin/diagnostics/index.js +1 -120
- package/dist/extensions/builtin/diagnostics/redaction.js +1 -45
- package/dist/extensions/builtin/diagnostics/reporter.js +1 -204
- package/dist/extensions/builtin/diagnostics/types.js +1 -7
- package/dist/extensions/builtin/discipline/index.js +7 -117
- package/dist/extensions/builtin/goal/README.md +67 -0
- package/dist/extensions/builtin/goal/goal-command.d.ts +13 -0
- package/dist/extensions/builtin/goal/goal-command.js +9 -0
- package/dist/extensions/builtin/goal/goal-controller.d.ts +114 -0
- package/dist/extensions/builtin/goal/goal-controller.js +1 -0
- package/dist/extensions/builtin/goal/goal-format.d.ts +52 -0
- package/dist/extensions/builtin/goal/goal-format.js +1 -0
- package/dist/extensions/builtin/goal/goal-parser.d.ts +27 -0
- package/dist/extensions/builtin/goal/goal-parser.js +2 -0
- package/dist/extensions/builtin/goal/goal-prompts.d.ts +13 -0
- package/dist/extensions/builtin/goal/goal-prompts.js +4 -0
- package/dist/extensions/builtin/goal/goal-store.d.ts +28 -0
- package/dist/extensions/builtin/goal/goal-store.js +1 -0
- package/dist/extensions/builtin/goal/goal-tools.d.ts +26 -0
- package/dist/extensions/builtin/goal/goal-tools.js +3 -0
- package/dist/extensions/builtin/goal/goal-types.d.ts +87 -0
- package/dist/extensions/builtin/goal/goal-types.js +1 -0
- package/dist/extensions/builtin/goal/index.d.ts +8 -0
- package/dist/extensions/builtin/goal/index.js +7 -0
- package/dist/extensions/builtin/grub/README.md +11 -0
- package/dist/extensions/builtin/grub/grub-controller.d.ts +2 -1
- package/dist/extensions/builtin/grub/grub-controller.js +1 -345
- package/dist/extensions/builtin/grub/grub-decision.js +1 -42
- package/dist/extensions/builtin/grub/grub-feature-list.d.ts +18 -0
- package/dist/extensions/builtin/grub/grub-feature-list.js +2 -213
- package/dist/extensions/builtin/grub/grub-format.js +4 -87
- package/dist/extensions/builtin/grub/grub-harness.js +3 -71
- package/dist/extensions/builtin/grub/grub-i18n.js +1 -198
- package/dist/extensions/builtin/grub/grub-parser.js +2 -164
- package/dist/extensions/builtin/grub/grub-persistence.js +2 -231
- package/dist/extensions/builtin/grub/grub-prompts.js +34 -92
- package/dist/extensions/builtin/grub/grub-turn.js +1 -61
- package/dist/extensions/builtin/grub/grub-types.d.ts +6 -0
- package/dist/extensions/builtin/grub/grub-types.js +1 -2
- package/dist/extensions/builtin/grub/index.js +6 -295
- package/dist/extensions/builtin/idle-think/curiosity.js +2 -137
- package/dist/extensions/builtin/idle-think/idle-think-runtime.js +1 -148
- package/dist/extensions/builtin/idle-think/index.js +1 -48
- package/dist/extensions/builtin/idle-think/insights.js +5 -131
- package/dist/extensions/builtin/idle-think/thinker.js +9 -208
- package/dist/extensions/builtin/insights/html-report.d.ts +21 -0
- package/dist/extensions/builtin/insights/html-report.js +463 -0
- package/dist/extensions/builtin/insights/index.d.ts +24 -0
- package/dist/extensions/builtin/insights/index.js +2 -0
- package/dist/extensions/builtin/insights/insights-engine.d.ts +18 -0
- package/dist/extensions/builtin/insights/insights-engine.js +39 -0
- package/dist/extensions/builtin/insights/prompts.d.ts +17 -0
- package/dist/extensions/builtin/insights/prompts.js +180 -0
- package/dist/extensions/builtin/insights/session-scanner.d.ts +27 -0
- package/dist/extensions/builtin/insights/session-scanner.js +19 -0
- package/dist/extensions/builtin/insights/stats.d.ts +13 -0
- package/dist/extensions/builtin/insights/stats.js +1 -0
- package/dist/extensions/builtin/insights/types.d.ts +199 -0
- package/dist/extensions/builtin/insights/types.js +0 -0
- package/dist/extensions/builtin/link-world/index.js +19 -431
- package/dist/extensions/builtin/loop/cron/cron-parser.d.ts +42 -29
- package/dist/extensions/builtin/loop/cron/cron-parser.js +1 -226
- package/dist/extensions/builtin/loop/cron/cron-scheduler.d.ts +75 -46
- package/dist/extensions/builtin/loop/cron/cron-scheduler.js +10 -329
- package/dist/extensions/builtin/loop/cron/cron-tasks-lock.d.ts +42 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks-lock.js +1 -0
- package/dist/extensions/builtin/loop/cron/cron-tasks.d.ts +182 -69
- package/dist/extensions/builtin/loop/cron/cron-tasks.js +2 -425
- package/dist/extensions/builtin/loop/cron/index.d.ts +16 -10
- package/dist/extensions/builtin/loop/cron/index.js +1 -10
- package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.d.ts +9 -4
- package/dist/extensions/builtin/loop/cron-tools/cron-create-tool.js +1 -71
- package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.d.ts +9 -4
- package/dist/extensions/builtin/loop/cron-tools/cron-delete-tool.js +1 -56
- package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.d.ts +9 -4
- package/dist/extensions/builtin/loop/cron-tools/cron-list-tool.js +2 -79
- package/dist/extensions/builtin/loop/cron-tools/index.d.ts +9 -4
- package/dist/extensions/builtin/loop/cron-tools/index.js +1 -9
- package/dist/extensions/builtin/loop/cron-tools/prompt.d.ts +35 -0
- package/dist/extensions/builtin/loop/cron-tools/prompt.js +38 -0
- package/dist/extensions/builtin/loop/index.d.ts +14 -3
- package/dist/extensions/builtin/loop/index.js +2 -476
- package/dist/extensions/builtin/loop/loop-skill.d.ts +18 -0
- package/dist/extensions/builtin/loop/loop-skill.js +58 -0
- package/dist/extensions/builtin/lsp/index.d.ts +8 -0
- package/dist/extensions/builtin/lsp/index.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-client.d.ts +22 -0
- package/dist/extensions/builtin/lsp/lsp-client.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-config.d.ts +8 -0
- package/dist/extensions/builtin/lsp/lsp-config.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-formatters.d.ts +15 -0
- package/dist/extensions/builtin/lsp/lsp-formatters.js +18 -0
- package/dist/extensions/builtin/lsp/lsp-server-instance.d.ts +24 -0
- package/dist/extensions/builtin/lsp/lsp-server-instance.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-server-manager.d.ts +21 -0
- package/dist/extensions/builtin/lsp/lsp-server-manager.js +1 -0
- package/dist/extensions/builtin/lsp/lsp-tool.d.ts +33 -0
- package/dist/extensions/builtin/lsp/lsp-tool.js +2 -0
- package/dist/extensions/builtin/lsp/types.d.ts +31 -0
- package/dist/extensions/builtin/lsp/types.js +1 -0
- package/dist/extensions/builtin/mcp/index.js +25 -385
- package/dist/extensions/builtin/plan/clear-context-state.d.ts +8 -0
- package/dist/extensions/builtin/plan/clear-context-state.js +1 -0
- package/dist/extensions/builtin/plan/enter-plan-mode-tool.d.ts +3 -1
- package/dist/extensions/builtin/plan/enter-plan-mode-tool.js +2 -64
- package/dist/extensions/builtin/plan/exit-plan-mode-tool.d.ts +10 -1
- package/dist/extensions/builtin/plan/exit-plan-mode-tool.js +13 -147
- package/dist/extensions/builtin/plan/index.js +24 -365
- package/dist/extensions/builtin/plan/plan-agents.js +8 -62
- package/dist/extensions/builtin/plan/plan-file-manager.js +1 -292
- package/dist/extensions/builtin/plan/plan-permissions.js +12 -234
- package/dist/extensions/builtin/plan/plan-validation.js +5 -77
- package/dist/extensions/builtin/plan/plan-workflow-prompt.d.ts +10 -4
- package/dist/extensions/builtin/plan/plan-workflow-prompt.js +60 -126
- package/dist/extensions/builtin/plan/teammate-approval.js +3 -134
- package/dist/extensions/builtin/plan/types.d.ts +11 -0
- package/dist/extensions/builtin/plan/types.js +1 -17
- package/dist/extensions/builtin/presence/index.d.ts +7 -0
- package/dist/extensions/builtin/presence/index.js +15 -708
- package/dist/extensions/builtin/presence/presence-memory.js +1 -203
- package/dist/extensions/builtin/recap/{CLAUDE.md → AGENT.md} +2 -2
- package/dist/extensions/builtin/recap/index.js +1 -116
- package/dist/extensions/builtin/recap/recap-budget.js +1 -21
- package/dist/extensions/builtin/recap/recap-extractor.js +3 -128
- package/dist/extensions/builtin/recap/recap-renderer.js +2 -55
- package/dist/extensions/builtin/recap/recap-synthesizer.js +12 -106
- package/dist/extensions/builtin/recap/recap-types.js +1 -16
- package/dist/extensions/builtin/sal/anchors.js +1 -248
- package/dist/extensions/builtin/sal/eval/index.js +1 -75
- package/dist/extensions/builtin/sal/eval/insforge-sink.js +1 -293
- package/dist/extensions/builtin/sal/eval/jsonl-sink.js +3 -93
- package/dist/extensions/builtin/sal/eval/noop-sink.js +1 -12
- package/dist/extensions/builtin/sal/eval/types.js +1 -21
- package/dist/extensions/builtin/sal/index.js +7 -720
- package/dist/extensions/builtin/sal/sal-config.js +1 -99
- package/dist/extensions/builtin/sal/sal-context.js +2 -94
- package/dist/extensions/builtin/sal/sal-runtime.js +0 -7
- package/dist/extensions/builtin/sal/sal-trace.js +1 -140
- package/dist/extensions/builtin/sal/terrain.js +3 -364
- package/dist/extensions/builtin/sal/weights.js +1 -48
- package/dist/extensions/builtin/security-audit/engine/detector.js +1 -251
- package/dist/extensions/builtin/security-audit/engine/interceptor.js +15 -194
- package/dist/extensions/builtin/security-audit/engine/logger.js +14 -225
- package/dist/extensions/builtin/security-audit/index.js +49 -264
- package/dist/extensions/builtin/security-audit/interface.js +1 -78
- package/dist/extensions/builtin/soul/index.js +1 -16
- package/dist/extensions/builtin/subagent/index.js +8 -214
- package/dist/extensions/builtin/subagent/subagent-parser.js +2 -76
- package/dist/extensions/builtin/subagent/subagent-runner.js +8 -275
- package/dist/extensions/builtin/subagent/subagent-types.js +0 -7
- package/dist/extensions/builtin/task/index.d.ts +8 -0
- package/dist/extensions/builtin/task/index.js +1 -0
- package/dist/extensions/builtin/task/task-store.d.ts +38 -0
- package/dist/extensions/builtin/task/task-store.js +1 -0
- package/dist/extensions/builtin/task/task-tools/task-create-tool.d.ts +37 -0
- package/dist/extensions/builtin/task/task-tools/task-create-tool.js +40 -0
- package/dist/extensions/builtin/task/task-tools/task-get-tool.d.ts +31 -0
- package/dist/extensions/builtin/task/task-tools/task-get-tool.js +23 -0
- package/dist/extensions/builtin/task/task-tools/task-list-tool.d.ts +27 -0
- package/dist/extensions/builtin/task/task-tools/task-list-tool.js +22 -0
- package/dist/extensions/builtin/task/task-tools/task-output-tool.d.ts +32 -0
- package/dist/extensions/builtin/task/task-tools/task-output-tool.js +10 -0
- package/dist/extensions/builtin/task/task-tools/task-stop-tool.d.ts +31 -0
- package/dist/extensions/builtin/task/task-tools/task-stop-tool.js +5 -0
- package/dist/extensions/builtin/task/task-tools/task-update-tool.d.ts +47 -0
- package/dist/extensions/builtin/task/task-tools/task-update-tool.js +77 -0
- package/dist/extensions/builtin/task/task-tools/tool-search-tool.d.ts +34 -0
- package/dist/extensions/builtin/task/task-tools/tool-search-tool.js +14 -0
- package/dist/extensions/builtin/task/task-types.d.ts +30 -0
- package/dist/extensions/builtin/task/task-types.js +1 -0
- package/dist/extensions/builtin/teach/README.md +197 -0
- package/dist/extensions/builtin/teach/index.d.ts +12 -0
- package/dist/extensions/builtin/teach/index.js +6 -0
- package/dist/extensions/builtin/teach/references/analogy-library.md +153 -0
- package/dist/extensions/builtin/teach/references/learning-paths.md +214 -0
- package/dist/extensions/builtin/teach/references/source-verification.md +268 -0
- package/dist/extensions/builtin/teach/references/teaching-template.md +237 -0
- package/dist/extensions/builtin/teach/teach-format.d.ts +35 -0
- package/dist/extensions/builtin/teach/teach-format.js +6 -0
- package/dist/extensions/builtin/teach/teach-i18n.d.ts +47 -0
- package/dist/extensions/builtin/teach/teach-i18n.js +1 -0
- package/dist/extensions/builtin/teach/teach-persistence.d.ts +36 -0
- package/dist/extensions/builtin/teach/teach-persistence.js +35 -0
- package/dist/extensions/builtin/teach/teach-prompts.d.ts +52 -0
- package/dist/extensions/builtin/teach/teach-prompts.js +35 -0
- package/dist/extensions/builtin/teach/teach-runtime.d.ts +93 -0
- package/dist/extensions/builtin/teach/teach-runtime.js +9 -0
- package/dist/extensions/builtin/teach/teach-types.d.ts +81 -0
- package/dist/extensions/builtin/teach/teach-types.js +0 -0
- package/dist/extensions/builtin/team/index.js +11 -626
- package/dist/extensions/builtin/team/team-dashboard.js +1 -117
- package/dist/extensions/builtin/team/team-harness.js +18 -351
- package/dist/extensions/builtin/team/team-mailbox.js +4 -110
- package/dist/extensions/builtin/team/team-orchestrator.js +5 -469
- package/dist/extensions/builtin/team/team-parser.js +2 -334
- package/dist/extensions/builtin/team/team-permissions.js +1 -120
- package/dist/extensions/builtin/team/team-presets.js +2 -259
- package/dist/extensions/builtin/team/team-psyche.js +5 -135
- package/dist/extensions/builtin/team/team-runtime-helpers.js +2 -324
- package/dist/extensions/builtin/team/team-runtime.js +3 -671
- package/dist/extensions/builtin/team/team-state-store.js +2 -75
- package/dist/extensions/builtin/team/team-task-store.js +2 -93
- package/dist/extensions/builtin/team/team-transcript.js +2 -58
- package/dist/extensions/builtin/team/team-types.js +0 -7
- package/dist/extensions/builtin/team/team-ui.js +2 -270
- package/dist/extensions/builtin/token-save/config.js +1 -66
- package/dist/extensions/builtin/token-save/filters.js +24 -279
- package/dist/extensions/builtin/token-save/index.js +4 -182
- package/dist/extensions/builtin/token-save/lexer.js +1 -51
- package/dist/extensions/builtin/token-save/recovery.js +1 -21
- package/dist/extensions/builtin/token-save/rewrite.js +1 -73
- package/dist/extensions/builtin/token-save/runner.js +3 -55
- package/dist/extensions/builtin/token-save/stream.js +1 -33
- package/dist/extensions/builtin/token-save/toml-dsl.js +3 -34
- package/dist/extensions/builtin/token-save/tracking.js +8 -74
- package/dist/extensions/optional/export-html/index.js +2 -269
- package/dist/extensions/optional/simplify/index.js +32 -423
- package/dist/index.js +1 -50
- package/dist/main.js +22 -908
- package/dist/migrations.js +4 -261
- package/dist/modes/acp/acp-mode.js +25 -1086
- package/dist/modes/index.js +1 -13
- package/dist/modes/interactive/agent-loop-status.js +1 -41
- package/dist/modes/interactive/components/apikey-input.js +3 -23
- package/dist/modes/interactive/components/armin.js +1 -338
- package/dist/modes/interactive/components/assistant-message.js +1 -101
- package/dist/modes/interactive/components/attachments-bar.js +1 -75
- package/dist/modes/interactive/components/bash-execution.js +13 -167
- package/dist/modes/interactive/components/bordered-loader.js +1 -56
- package/dist/modes/interactive/components/branch-summary-message.js +3 -49
- package/dist/modes/interactive/components/buddy/pet-sprites.js +1 -255
- package/dist/modes/interactive/components/compaction-summary-message.js +3 -50
- package/dist/modes/interactive/components/config-selector.js +1 -484
- package/dist/modes/interactive/components/countdown-timer.js +1 -38
- package/dist/modes/interactive/components/custom-editor.d.ts +9 -0
- package/dist/modes/interactive/components/custom-editor.js +1 -101
- package/dist/modes/interactive/components/custom-message.js +2 -88
- package/dist/modes/interactive/components/daxnuts.js +1 -145
- package/dist/modes/interactive/components/diff.js +3 -138
- package/dist/modes/interactive/components/dynamic-border.js +1 -26
- package/dist/modes/interactive/components/editor-buddy-layout.js +1 -44
- package/dist/modes/interactive/components/extension-editor.js +1 -115
- package/dist/modes/interactive/components/extension-input.js +2 -69
- package/dist/modes/interactive/components/extension-selector.js +2 -90
- package/dist/modes/interactive/components/footer.js +1 -239
- package/dist/modes/interactive/components/index.d.ts +1 -0
- package/dist/modes/interactive/components/index.js +1 -44
- package/dist/modes/interactive/components/keybinding-hints.js +1 -66
- package/dist/modes/interactive/components/login-dialog.js +1 -150
- package/dist/modes/interactive/components/memory-stats.js +2 -96
- package/dist/modes/interactive/components/model-selector.d.ts +8 -1
- package/dist/modes/interactive/components/model-selector.js +2 -284
- package/dist/modes/interactive/components/notification-queue.d.ts +49 -0
- package/dist/modes/interactive/components/notification-queue.js +1 -0
- package/dist/modes/interactive/components/oauth-selector.js +1 -94
- package/dist/modes/interactive/components/pencil-loader.d.ts +7 -1
- package/dist/modes/interactive/components/pencil-loader.js +1 -123
- package/dist/modes/interactive/components/persona-selector.d.ts +24 -0
- package/dist/modes/interactive/components/persona-selector.js +1 -0
- package/dist/modes/interactive/components/plan-progress-panel.d.ts +24 -0
- package/dist/modes/interactive/components/plan-progress-panel.js +1 -0
- package/dist/modes/interactive/components/provider-selector.js +1 -150
- package/dist/modes/interactive/components/raw-text.js +3 -28
- package/dist/modes/interactive/components/scoped-models-selector.js +1 -280
- package/dist/modes/interactive/components/session-selector-search.js +1 -160
- package/dist/modes/interactive/components/session-selector.js +2 -856
- package/dist/modes/interactive/components/settings-selector.js +1 -372
- package/dist/modes/interactive/components/show-images-selector.js +1 -40
- package/dist/modes/interactive/components/skill-invocation-message.js +3 -52
- package/dist/modes/interactive/components/soul-stats.js +2 -159
- package/dist/modes/interactive/components/sub-agent-panel.d.ts +24 -0
- package/dist/modes/interactive/components/sub-agent-panel.js +1 -0
- package/dist/modes/interactive/components/theme-selector.js +1 -51
- package/dist/modes/interactive/components/thinking-selector.js +1 -52
- package/dist/modes/interactive/components/tool-execution.js +58 -757
- package/dist/modes/interactive/components/tree-selector.js +1 -939
- package/dist/modes/interactive/components/user-message-selector.js +1 -118
- package/dist/modes/interactive/components/user-message.js +1 -21
- package/dist/modes/interactive/components/visual-truncate.js +1 -38
- package/dist/modes/interactive/controllers/auth-provider-config-controller.d.ts +3 -1
- package/dist/modes/interactive/controllers/auth-provider-config-controller.js +1 -401
- package/dist/modes/interactive/controllers/extension-ui/custom-overlay-host.js +1 -90
- package/dist/modes/interactive/controllers/extension-ui/editor-component-adapter.js +1 -78
- package/dist/modes/interactive/controllers/extension-ui/persistent-surface-registry.js +1 -169
- package/dist/modes/interactive/controllers/extension-ui/prompt-host.js +2 -109
- package/dist/modes/interactive/controllers/image-pipeline-controller.js +1 -359
- package/dist/modes/interactive/controllers/input-submit-controller.d.ts +6 -0
- package/dist/modes/interactive/controllers/input-submit-controller.js +2 -164
- package/dist/modes/interactive/controllers/interrupt-controller.js +1 -82
- package/dist/modes/interactive/controllers/model-overlay-controller.d.ts +3 -0
- package/dist/modes/interactive/controllers/model-overlay-controller.js +3 -346
- package/dist/modes/interactive/controllers/self-update-controller.js +24 -525
- package/dist/modes/interactive/controllers/settings-overlay-controller.js +2 -165
- package/dist/modes/interactive/controllers/slash-dispatcher-controller.js +1 -183
- package/dist/modes/interactive/controllers/stream-render-controller.d.ts +3 -2
- package/dist/modes/interactive/controllers/stream-render-controller.js +2 -325
- package/dist/modes/interactive/controllers/tree-overlay-controller.js +1 -171
- package/dist/modes/interactive/footer-data-provider.js +1 -147
- package/dist/modes/interactive/interactive-mode.d.ts +25 -1
- package/dist/modes/interactive/interactive-mode.js +100 -3441
- package/dist/modes/interactive/services/tips.js +1 -115
- package/dist/modes/interactive/slash-command-arguments.js +1 -126
- package/dist/modes/interactive/state/interactive-state.d.ts +29 -0
- package/dist/modes/interactive/state/interactive-state.js +1 -43
- package/dist/modes/interactive/theme/theme.js +16 -970
- package/dist/modes/print-mode.js +2 -171
- package/dist/modes/rpc/rpc-client.js +2 -417
- package/dist/modes/rpc/rpc-mode.js +1 -568
- package/dist/modes/rpc/rpc-types.js +0 -1
- package/dist/modes/utils/agent-loop-result-format.js +1 -69
- package/dist/modes/utils/clipboard-image.js +1 -170
- package/dist/modes/utils/clipboard-native.js +1 -47
- package/dist/modes/utils/clipboard.js +1 -72
- package/dist/modes/utils/image-convert.js +1 -40
- package/dist/modes/utils/image-resize.js +1 -186
- package/dist/nanopencil-defaults.d.ts +190 -4
- package/dist/nanopencil-defaults.js +2 -854
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-continuations.js +1 -60
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-stream-events.js +1 -55
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-results.js +3 -137
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-summaries.js +1 -64
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop.js +3 -913
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-run-result.js +1 -32
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent.js +1 -522
- package/dist/node_modules/@pencil-agent/agent-core/dist/errors.js +1 -146
- package/dist/node_modules/@pencil-agent/agent-core/dist/index.js +1 -19
- package/dist/node_modules/@pencil-agent/agent-core/dist/proxy.js +2 -279
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-agent-loop.js +1 -625
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-streaming-tool-executor.js +1 -189
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-tool-orchestration.js +3 -319
- package/dist/node_modules/@pencil-agent/agent-core/dist/types.js +1 -13
- package/dist/node_modules/@pencil-agent/ai/dist/api-registry.js +1 -152
- package/dist/node_modules/@pencil-agent/ai/dist/cli.js +9 -109
- package/dist/node_modules/@pencil-agent/ai/dist/config-path.js +1 -17
- package/dist/node_modules/@pencil-agent/ai/dist/debug-logger.js +4 -218
- package/dist/node_modules/@pencil-agent/ai/dist/env-api-keys.js +1 -107
- package/dist/node_modules/@pencil-agent/ai/dist/env.js +1 -7
- package/dist/node_modules/@pencil-agent/ai/dist/events.js +1 -7
- package/dist/node_modules/@pencil-agent/ai/dist/index.js +1 -20
- package/dist/node_modules/@pencil-agent/ai/dist/json.js +1 -7
- package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -14928
- package/dist/node_modules/@pencil-agent/ai/dist/models.js +1 -60
- package/dist/node_modules/@pencil-agent/ai/dist/overflow.js +1 -7
- package/dist/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.js +1 -606
- package/dist/node_modules/@pencil-agent/ai/dist/providers/anthropic.js +2 -737
- package/dist/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.js +1 -193
- package/dist/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.js +1 -34
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.js +2 -753
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google-shared.js +2 -311
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google-vertex.js +1 -380
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google.js +1 -360
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.js +7 -704
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-completions.js +6 -870
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.js +10 -432
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses.js +1 -207
- package/dist/node_modules/@pencil-agent/ai/dist/providers/register-builtins.js +1 -86
- package/dist/node_modules/@pencil-agent/ai/dist/providers/simple-options.js +1 -40
- package/dist/node_modules/@pencil-agent/ai/dist/providers/transform-messages.js +1 -175
- package/dist/node_modules/@pencil-agent/ai/dist/registry.js +1 -8
- package/dist/node_modules/@pencil-agent/ai/dist/schema.js +1 -9
- package/dist/node_modules/@pencil-agent/ai/dist/stream.js +1 -324
- package/dist/node_modules/@pencil-agent/ai/dist/types.js +0 -7
- package/dist/node_modules/@pencil-agent/ai/dist/utils/event-stream-types.js +0 -7
- package/dist/node_modules/@pencil-agent/ai/dist/utils/event-stream.js +1 -98
- package/dist/node_modules/@pencil-agent/ai/dist/utils/http-proxy.js +1 -20
- package/dist/node_modules/@pencil-agent/ai/dist/utils/json-parse.js +1 -34
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.js +1 -109
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/decode-credential.js +1 -25
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.js +1 -286
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.js +1 -378
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.js +1 -483
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/index.js +1 -131
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.js +2 -376
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.js +1 -36
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/types.js +0 -7
- package/dist/node_modules/@pencil-agent/ai/dist/utils/overflow.js +1 -120
- package/dist/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.js +1 -20
- package/dist/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.js +1 -26
- package/dist/node_modules/@pencil-agent/ai/dist/utils/validation.js +6 -78
- package/dist/node_modules/@pencil-agent/ai/package.json +24 -24
- package/dist/node_modules/@pencil-agent/tui/dist/autocomplete.js +2 -624
- package/dist/node_modules/@pencil-agent/tui/dist/components/box.js +1 -109
- package/dist/node_modules/@pencil-agent/tui/dist/components/cached-container.js +1 -0
- package/dist/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.js +1 -40
- package/dist/node_modules/@pencil-agent/tui/dist/components/editor.js +21 -1697
- package/dist/node_modules/@pencil-agent/tui/dist/components/image.js +1 -74
- package/dist/node_modules/@pencil-agent/tui/dist/components/input.js +2 -438
- package/dist/node_modules/@pencil-agent/tui/dist/components/loader.js +1 -54
- package/dist/node_modules/@pencil-agent/tui/dist/components/markdown.js +7 -634
- package/dist/node_modules/@pencil-agent/tui/dist/components/select-list.js +1 -157
- package/dist/node_modules/@pencil-agent/tui/dist/components/settings-list.js +1 -190
- package/dist/node_modules/@pencil-agent/tui/dist/components/spacer.js +1 -28
- package/dist/node_modules/@pencil-agent/tui/dist/components/text.js +1 -94
- package/dist/node_modules/@pencil-agent/tui/dist/components/truncated-text.js +2 -56
- package/dist/node_modules/@pencil-agent/tui/dist/editor-component.js +0 -7
- package/dist/node_modules/@pencil-agent/tui/dist/fuzzy.js +1 -152
- package/dist/node_modules/@pencil-agent/tui/dist/index.js +1 -37
- package/dist/node_modules/@pencil-agent/tui/dist/keybindings.js +1 -119
- package/dist/node_modules/@pencil-agent/tui/dist/keys.js +5 -948
- package/dist/node_modules/@pencil-agent/tui/dist/kill-ring.js +1 -49
- package/dist/node_modules/@pencil-agent/tui/dist/stdin-buffer.js +1 -307
- package/dist/node_modules/@pencil-agent/tui/dist/terminal-image.js +1 -287
- package/dist/node_modules/@pencil-agent/tui/dist/terminal.js +1 -266
- package/dist/node_modules/@pencil-agent/tui/dist/tui.js +12 -1001
- package/dist/node_modules/@pencil-agent/tui/dist/undo-stack.js +1 -30
- package/dist/node_modules/@pencil-agent/tui/dist/utils.js +2 -811
- package/dist/packages/extension-sdk/src/index.js +1 -12
- package/dist/packages/extension-sdk/src/lifecycle.js +0 -13
- package/dist/packages/extension-sdk/src/tools.js +0 -12
- package/dist/packages/mem-core/src/store.js +1 -120
- package/dist/packages/mem-core/src/types.js +0 -7
- package/dist/packages/soul-core/src/config.js +1 -92
- package/dist/packages/soul-core/src/diagnostics.js +1 -56
- package/dist/packages/soul-core/src/evolution.js +1 -273
- package/dist/packages/soul-core/src/index.js +1 -13
- package/dist/packages/soul-core/src/injection.js +8 -280
- package/dist/packages/soul-core/src/manager.js +1 -441
- package/dist/packages/soul-core/src/store.js +1 -279
- package/dist/packages/soul-core/src/types.js +0 -7
- package/dist/utils/changelog.js +4 -92
- package/dist/utils/diagnostics.js +1 -83
- package/dist/utils/frontmatter.js +4 -31
- package/dist/utils/git.js +1 -168
- package/dist/utils/mime.js +1 -31
- package/dist/utils/photon.js +1 -106
- package/dist/utils/startup-profiler.js +2 -150
- package/docs/cc-agent-design.md +1297 -0
- package/docs/cc-tui-design.md +1333 -0
- package/docs/codex-goal-command-impl.md +1055 -0
- package/docs/codex-goal-vs-grub.md +500 -0
- package/docs/custom-provider.md +27 -0
- package/docs/extensions.md +27 -0
- package/docs/keybindings.md +27 -0
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +251 -0
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +123 -0
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -0
- 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
- 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
- package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +321 -0
- package/docs/loop-usage-examples.md +215 -0
- package/docs/models.md +27 -0
- package/docs/packages.md +27 -0
- package/docs/pi-design-philosophy.md +457 -0
- package/docs/planmode.md +1987 -0
- package/docs/prompt-templates.md +27 -0
- package/docs/providers.md +27 -0
- package/docs/sdk.md +27 -0
- package/docs/skills.md +27 -0
- package/docs/themes.md +27 -0
- package/docs/tui.md +27 -0
- package/docs//345/257/271/346/240/207Claude-Code.md +1775 -0
- package/package.json +21 -8
- package/dist/core/export-html/CLAUDE.md +0 -12
- package/dist/extensions/builtin/CLAUDE.md +0 -74
- package/dist/extensions/builtin/interview/index.d.ts +0 -8
- package/dist/extensions/builtin/interview/index.js +0 -335
- package/dist/extensions/builtin/interview/interview-runtime.d.ts +0 -55
- package/dist/extensions/builtin/interview/interview-runtime.js +0 -551
- package/dist/extensions/builtin/loop/cron/cron-types.d.ts +0 -87
- package/dist/extensions/builtin/loop/cron/cron-types.js +0 -14
- package/dist/extensions/builtin/loop/scheduler-parser.d.ts +0 -13
- package/dist/extensions/builtin/loop/scheduler-parser.js +0 -214
- package/dist/extensions/builtin/loop/scheduler-types.d.ts +0 -63
- package/dist/extensions/builtin/loop/scheduler-types.js +0 -7
- package/dist/extensions/builtin/loop/skill/SKILL.md +0 -79
- package/dist/extensions/builtin/team/CLAUDE.md +0 -97
- package/dist/extensions/optional/CLAUDE.md +0 -11
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-continuations.d.ts +0 -17
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-stream-events.d.ts +0 -19
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-results.d.ts +0 -10
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop-tool-summaries.d.ts +0 -22
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-loop.d.ts +0 -26
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent-run-result.d.ts +0 -9
- package/dist/node_modules/@pencil-agent/agent-core/dist/agent.d.ts +0 -215
- package/dist/node_modules/@pencil-agent/agent-core/dist/errors.d.ts +0 -62
- package/dist/node_modules/@pencil-agent/agent-core/dist/index.d.ts +0 -14
- package/dist/node_modules/@pencil-agent/agent-core/dist/proxy.d.ts +0 -91
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-agent-loop.d.ts +0 -15
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-streaming-tool-executor.d.ts +0 -33
- package/dist/node_modules/@pencil-agent/agent-core/dist/structured-adaptive-tool-orchestration.d.ts +0 -35
- package/dist/node_modules/@pencil-agent/ai/dist/api-registry.d.ts +0 -27
- package/dist/node_modules/@pencil-agent/ai/dist/cli.d.ts +0 -2
- package/dist/node_modules/@pencil-agent/ai/dist/config-path.d.ts +0 -1
- package/dist/node_modules/@pencil-agent/ai/dist/debug-logger.d.ts +0 -94
- package/dist/node_modules/@pencil-agent/ai/dist/env-api-keys.d.ts +0 -8
- package/dist/node_modules/@pencil-agent/ai/dist/env.d.ts +0 -7
- package/dist/node_modules/@pencil-agent/ai/dist/events.d.ts +0 -8
- package/dist/node_modules/@pencil-agent/ai/dist/index.d.ts +0 -27
- package/dist/node_modules/@pencil-agent/ai/dist/json.d.ts +0 -7
- package/dist/node_modules/@pencil-agent/ai/dist/models.d.ts +0 -31
- package/dist/node_modules/@pencil-agent/ai/dist/models.generated.d.ts +0 -15159
- package/dist/node_modules/@pencil-agent/ai/dist/overflow.d.ts +0 -7
- package/dist/node_modules/@pencil-agent/ai/dist/providers/amazon-bedrock.d.ts +0 -20
- package/dist/node_modules/@pencil-agent/ai/dist/providers/anthropic.d.ts +0 -38
- package/dist/node_modules/@pencil-agent/ai/dist/providers/azure-openai-responses.d.ts +0 -21
- package/dist/node_modules/@pencil-agent/ai/dist/providers/github-copilot-headers.d.ts +0 -13
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google-gemini-cli.d.ts +0 -79
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google-shared.d.ts +0 -70
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google-vertex.d.ts +0 -20
- package/dist/node_modules/@pencil-agent/ai/dist/providers/google.d.ts +0 -18
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-codex-responses.d.ts +0 -8
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-completions.d.ts +0 -20
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses-shared.d.ts +0 -22
- package/dist/node_modules/@pencil-agent/ai/dist/providers/openai-responses.d.ts +0 -19
- package/dist/node_modules/@pencil-agent/ai/dist/providers/register-builtins.d.ts +0 -8
- package/dist/node_modules/@pencil-agent/ai/dist/providers/simple-options.d.ts +0 -13
- package/dist/node_modules/@pencil-agent/ai/dist/providers/transform-messages.d.ts +0 -13
- package/dist/node_modules/@pencil-agent/ai/dist/registry.d.ts +0 -8
- package/dist/node_modules/@pencil-agent/ai/dist/schema.d.ts +0 -10
- package/dist/node_modules/@pencil-agent/ai/dist/stream.d.ts +0 -25
- package/dist/node_modules/@pencil-agent/ai/dist/utils/event-stream.d.ts +0 -31
- package/dist/node_modules/@pencil-agent/ai/dist/utils/http-proxy.d.ts +0 -13
- package/dist/node_modules/@pencil-agent/ai/dist/utils/json-parse.d.ts +0 -14
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/anthropic.d.ts +0 -22
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/decode-credential.d.ts +0 -12
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/github-copilot.d.ts +0 -35
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-antigravity.d.ts +0 -31
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/google-gemini-cli.d.ts +0 -31
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/index.d.ts +0 -60
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/openai-codex.d.ts +0 -39
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/pkce.d.ts +0 -18
- package/dist/node_modules/@pencil-agent/ai/dist/utils/oauth/types.d.ts +0 -52
- package/dist/node_modules/@pencil-agent/ai/dist/utils/overflow.d.ts +0 -57
- package/dist/node_modules/@pencil-agent/ai/dist/utils/sanitize-unicode.d.ts +0 -16
- package/dist/node_modules/@pencil-agent/ai/dist/utils/typebox-helpers.d.ts +0 -22
- package/dist/node_modules/@pencil-agent/ai/dist/utils/validation.d.ts +0 -23
- package/dist/node_modules/@pencil-agent/tui/dist/autocomplete.d.ts +0 -62
- package/dist/node_modules/@pencil-agent/tui/dist/components/box.d.ts +0 -27
- package/dist/node_modules/@pencil-agent/tui/dist/components/cancellable-loader.d.ts +0 -27
- package/dist/node_modules/@pencil-agent/tui/dist/components/editor.d.ts +0 -218
- package/dist/node_modules/@pencil-agent/tui/dist/components/image.d.ts +0 -33
- package/dist/node_modules/@pencil-agent/tui/dist/components/input.d.ts +0 -42
- package/dist/node_modules/@pencil-agent/tui/dist/components/loader.d.ts +0 -26
- package/dist/node_modules/@pencil-agent/tui/dist/components/markdown.d.ts +0 -100
- package/dist/node_modules/@pencil-agent/tui/dist/components/select-list.d.ts +0 -37
- package/dist/node_modules/@pencil-agent/tui/dist/components/settings-list.d.ts +0 -55
- package/dist/node_modules/@pencil-agent/tui/dist/components/spacer.d.ts +0 -17
- package/dist/node_modules/@pencil-agent/tui/dist/components/text.d.ts +0 -24
- package/dist/node_modules/@pencil-agent/tui/dist/components/truncated-text.d.ts +0 -18
- package/dist/node_modules/@pencil-agent/tui/dist/editor-component.d.ts +0 -51
- package/dist/node_modules/@pencil-agent/tui/dist/fuzzy.d.ts +0 -32
- package/dist/node_modules/@pencil-agent/tui/dist/index.d.ts +0 -28
- package/dist/node_modules/@pencil-agent/tui/dist/keybindings.d.ts +0 -44
- package/dist/node_modules/@pencil-agent/tui/dist/keys.d.ts +0 -149
- package/dist/node_modules/@pencil-agent/tui/dist/kill-ring.d.ts +0 -33
- package/dist/node_modules/@pencil-agent/tui/dist/stdin-buffer.d.ts +0 -38
- package/dist/node_modules/@pencil-agent/tui/dist/terminal-image.d.ts +0 -73
- package/dist/node_modules/@pencil-agent/tui/dist/terminal.d.ts +0 -86
- package/dist/node_modules/@pencil-agent/tui/dist/tui.d.ts +0 -219
- package/dist/node_modules/@pencil-agent/tui/dist/undo-stack.d.ts +0 -22
- package/dist/node_modules/@pencil-agent/tui/dist/utils.d.ts +0 -83
- package/docs/API/345/257/206/351/222/245/344/277/256/345/244/215/346/200/273/347/273/223.md +0 -147
- package/docs/API/345/257/206/351/222/245/345/221/275/344/273/244.md +0 -66
- package/docs/API/345/257/206/351/222/245/346/214/207/345/215/227.md +0 -292
- package/docs/ARK/347/274/226/347/240/201/350/256/241/345/210/222.md +0 -51
- package/docs/AgentTeam/351/207/215/346/236/204/346/226/271/346/241/210.md +0 -446
- package/docs/InterviewRegression.md +0 -122
- package/docs/MCP/345/277/253/351/200/237/345/217/202/350/200/203.md +0 -113
- package/docs/MCP/351/233/206/346/210/220/346/214/207/345/215/227.md +0 -255
- package/docs/Persona/345/210/207/346/215/242.md +0 -97
- package/docs/Recap/346/211/251/345/261/225.md +0 -410
- package/docs/Simplify/346/211/251/345/261/225.md +0 -278
- package/docs/agent-loop-frameworks.md +0 -119
- package/docs/debug-logging.md +0 -148
- package/docs/eval/AGENT.md +0 -36
- package/docs/eval/README.md +0 -72
- package/docs/eval/decision-log-template.md +0 -51
- package/docs/eval/experiment-protocol.md +0 -77
- package/docs/eval/issue-usage/README.md +0 -32
- package/docs/eval/issue-usage/cases.md +0 -31
- package/docs/eval/issue-usage/metrics.md +0 -23
- package/docs/eval/issue-usage/workflow.md +0 -39
- package/docs/eval/sal-memory-anchor/README.md +0 -32
- package/docs/eval/sal-memory-anchor/hypothesis.md +0 -45
- package/docs/eval/sal-memory-anchor/metrics.md +0 -24
- package/docs/eval/sal-memory-anchor/runs.md +0 -29
- package/docs/eval/tool-usage-analysis/README.md +0 -32
- package/docs/eval/tool-usage-analysis/invalid-data-rules.md +0 -29
- package/docs/eval/tool-usage-analysis/metrics.md +0 -35
- package/docs/eval/tool-usage-analysis/report-template.md +0 -49
- package/docs/eval/tool-usage-analysis/sop.md +0 -63
- package/docs/multi-agent-fs-design.md +0 -1120
- package/docs/pencil-platform-charter.md +0 -21
- package/docs/project-structure-optimization.md +0 -66
- package/docs/remote-tool-register-design.md +0 -436
- package/docs//345/206/205/347/275/256MCP/345/267/245/345/205/267.md +0 -326
- package/docs//345/215/203/345/270/206/347/274/226/347/240/201/350/256/241/345/210/222.md +0 -52
- package/docs//345/215/225/344/275/223/344/273/223/345/272/223/350/207/252/350/277/260.md +0 -189
- package/docs//345/215/225/344/275/223/344/273/223/345/272/223/350/277/201/347/247/273/346/214/207/345/215/227.md +0 -232
- package/docs//345/217/221/345/270/203/346/214/207/345/215/227.md +0 -129
- package/docs//345/217/230/346/233/264/346/200/273/347/273/223.md +0 -138
- package/docs//345/217/230/346/233/264/346/227/245/345/277/227.md +0 -50
- package/docs//345/267/245/345/205/267/347/256/241/347/220/206/345/231/250/344/274/230/345/214/226.md +0 -208
- package/docs//345/276/252/347/216/257/345/221/275/344/273/244/350/256/241/345/210/222.md +0 -56
- package/docs//346/226/207/346/241/243/344/270/255/345/277/203.md +0 -146
- package/docs//346/236/266/346/236/204/344/274/230/345/214/226.md +0 -404
- package/docs//346/236/266/346/236/204/346/274/224/350/277/233.md +0 -228
- package/docs//347/211/210/346/234/2542.md +0 -199
- package/docs//347/272/263/350/257/272/350/256/260/345/277/206/350/257/273/345/206/231.md +0 -352
- package/docs//347/273/223/346/236/204.md +0 -339
- package/docs//350/256/241/345/210/222.md +0 -44
- package/docs//350/256/260/345/277/206/347/263/273/347/273/237.md +0 -236
- package/docs//350/277/201/347/247/273/346/200/273/347/273/223.md +0 -204
- package/docs//351/207/215/346/236/204/344/273/273/345/212/241.md +0 -181
- package/docs//351/207/215/346/236/204/350/256/241/345/210/222.md +0 -592
- /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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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};
|