@astralyn/pi 1.4.11 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/dist/bundle/chunks/anthropic-messages-G5ZGBHOH.js +6 -0
- package/dist/bundle/chunks/azure-openai-responses-EMPTMYNF.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +22 -15
- package/dist/bundle/chunks/chunk-AXX7FFFD.js +2 -0
- package/dist/bundle/chunks/chunk-FNGB3ASD.js +2 -0
- package/dist/bundle/chunks/chunk-FPALVF3F.js +4 -0
- package/dist/bundle/chunks/chunk-H3UF54OB.js +9 -0
- package/dist/bundle/chunks/chunk-IC6JXX2J.js +10 -0
- package/dist/bundle/chunks/{chunk-TH3QDDPD.js → chunk-IRUUTK4W.js} +1 -1
- package/dist/bundle/chunks/{chunk-MZJC45TM.js → chunk-J7L6O5XA.js} +3 -3
- package/dist/bundle/chunks/{chunk-DLVLAQEG.js → chunk-KBFO53OG.js} +3 -3
- package/dist/bundle/chunks/{chunk-TPVFPFJP.js → chunk-P7VXFB2M.js} +1 -1
- package/dist/bundle/chunks/chunk-PSYLMRL6.js +9 -0
- package/dist/bundle/chunks/chunk-QNZARXLE.js +82 -0
- package/dist/bundle/chunks/chunk-R3YHAMWH.js +1503 -0
- package/dist/bundle/chunks/chunk-RAIYJ5FC.js +4 -0
- package/dist/bundle/chunks/{chunk-OV2VMHBX.js → chunk-SR6EWNPW.js} +1 -1
- package/dist/bundle/chunks/chunk-TA3YH2ZI.js +16 -0
- package/dist/bundle/chunks/{chunk-NUQMVNKQ.js → chunk-THAJ4BZF.js} +58 -62
- package/dist/bundle/chunks/{chunk-24FY4C5S.js → chunk-TRSJS3FM.js} +1 -1
- package/dist/bundle/chunks/chunk-ZRI3ICDE.js +2 -0
- package/dist/bundle/chunks/{cli-MBFCFGI2.js → cli-LAZQG54B.js} +11 -9
- package/dist/bundle/chunks/{cloudflare-workers-ai-system-one-7BKATOEJ.js → cloudflare-workers-ai-system-one-4L2ABUJE.js} +1 -1
- package/dist/bundle/chunks/{execute-VLAIP26K.js → execute-ACWDKC3C.js} +1 -1
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/{google-generative-ai-HTUSU45F.js → google-generative-ai-OOVDGS5W.js} +1 -1
- package/dist/bundle/chunks/{google-vertex-AVQV4P76.js → google-vertex-IK5RNG7J.js} +1 -1
- package/dist/bundle/chunks/image-resize-worker.js +1 -1
- package/dist/bundle/chunks/kimi-coding.js +1 -1
- package/dist/bundle/chunks/{llama-cpp-classify-27QYLJZY.js → llama-cpp-classify-XHAVT37C.js} +1 -1
- package/dist/bundle/chunks/meta.js +1 -1
- package/dist/bundle/chunks/mistral-conversations-Z56KY4OJ.js +5 -0
- package/dist/bundle/chunks/{openai-codex-responses-Q25MHDFX.js → openai-codex-responses-5NAH3SK6.js} +1 -1
- package/dist/bundle/chunks/openai-completions-S7S6PO3J.js +7 -0
- package/dist/bundle/chunks/{openai-decisions-3WYFPGSK.js → openai-decisions-7A36EAHE.js} +1 -1
- package/dist/bundle/chunks/{openai-responses-E4BNZIQK.js → openai-responses-ZQRZJKH4.js} +1 -1
- package/dist/bundle/chunks/{openrouter-images-CBP3OPOD.js → openrouter-images-X7PX72ON.js} +1 -1
- package/dist/bundle/chunks/pi-messages-TXNWPLI4.js +8 -0
- package/dist/bundle/chunks/radius.js +1 -1
- package/dist/bundle/chunks/{runtime-3RPOJS5T.js → runtime-X3XOMNXQ.js} +1 -1
- package/dist/bundle/chunks/{typesafe-system-one-BNICP2LS.js → typesafe-system-one-XJGMSHWL.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-T2KLVAFL.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +8 -7
- package/dist/cli/args.js.map +1 -1
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +24 -5
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +0 -5
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +12 -28
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +21 -14
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +67 -93
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +4 -2
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +16 -4
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/exec.d.ts +9 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +104 -60
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/template.css +9 -0
- package/dist/core/export-html/template.js +165 -45
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +5 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +7 -6
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/pi-ai-extension-view.d.ts +19 -0
- package/dist/core/extensions/pi-ai-extension-view.d.ts.map +1 -0
- package/dist/core/extensions/pi-ai-extension-view.js +22 -0
- package/dist/core/extensions/pi-ai-extension-view.js.map +1 -0
- package/dist/core/extensions/runner.d.ts +0 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -12
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +41 -23
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/virtual-modules.js +8 -7
- package/dist/core/extensions/virtual-modules.js.map +1 -1
- package/dist/core/mcp-servers.d.ts +11 -4
- package/dist/core/mcp-servers.d.ts.map +1 -1
- package/dist/core/mcp-servers.js +15 -5
- package/dist/core/mcp-servers.js.map +1 -1
- package/dist/core/model-config.d.ts +1678 -2029
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +2 -3
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +16 -10
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +14 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +160 -46
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-ai-schemas.d.ts +163 -0
- package/dist/core/pi-ai-schemas.d.ts.map +1 -0
- package/dist/core/pi-ai-schemas.js +21 -0
- package/dist/core/pi-ai-schemas.js.map +1 -0
- package/dist/core/pi-manifest.d.ts +1 -0
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +4 -0
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/project-trust.js +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/quiescence.d.ts +24 -0
- package/dist/core/quiescence.d.ts.map +1 -0
- package/dist/core/quiescence.js +81 -0
- package/dist/core/quiescence.js.map +1 -0
- package/dist/core/resource-loader.d.ts +4 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +41 -28
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +3 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +7 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +32 -13
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +2 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +11 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/settings-schema.d.ts +4 -2
- package/dist/core/settings-schema.d.ts.map +1 -1
- package/dist/core/settings-schema.js +8 -1
- package/dist/core/settings-schema.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +6 -14
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-command-name.d.ts +6 -0
- package/dist/core/slash-command-name.d.ts.map +1 -0
- package/dist/core/slash-command-name.js +11 -0
- package/dist/core/slash-command-name.js.map +1 -0
- package/dist/core/slash-commands.js +2 -2
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/source-info.d.ts +9 -0
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js +13 -0
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -6
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tasks/codec.d.ts +14 -0
- package/dist/core/tasks/codec.d.ts.map +1 -1
- package/dist/core/tasks/codec.js +57 -4
- package/dist/core/tasks/codec.js.map +1 -1
- package/dist/core/tasks/record.d.ts +1 -7
- package/dist/core/tasks/record.d.ts.map +1 -1
- package/dist/core/tasks/record.js +0 -18
- package/dist/core/tasks/record.js.map +1 -1
- package/dist/core/tasks/reminder.d.ts +3 -2
- package/dist/core/tasks/reminder.d.ts.map +1 -1
- package/dist/core/tasks/reminder.js +4 -3
- package/dist/core/tasks/reminder.js.map +1 -1
- package/dist/core/tasks/runtime.d.ts +0 -2
- package/dist/core/tasks/runtime.d.ts.map +1 -1
- package/dist/core/tasks/runtime.js +2 -15
- package/dist/core/tasks/runtime.js.map +1 -1
- package/dist/core/tasks/session.d.ts +9 -2
- package/dist/core/tasks/session.d.ts.map +1 -1
- package/dist/core/tasks/session.js +23 -9
- package/dist/core/tasks/session.js.map +1 -1
- package/dist/core/tasks/types.d.ts +1 -18
- package/dist/core/tasks/types.d.ts.map +1 -1
- package/dist/core/tasks/types.js +1 -1
- package/dist/core/tasks/types.js.map +1 -1
- package/dist/core/tools/bash.d.ts +8 -7
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +6 -5
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +3 -3
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +2 -4
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +2 -2
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +2 -2
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts +2 -2
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +1 -5
- package/dist/core/tools/powershell.d.ts.map +1 -1
- package/dist/core/tools/read.d.ts +2 -2
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts +4 -6
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js +19 -41
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/renderers/bash.d.ts.map +1 -1
- package/dist/core/tools/renderers/bash.js +3 -25
- package/dist/core/tools/renderers/bash.js.map +1 -1
- package/dist/core/tools/renderers/write.d.ts.map +1 -1
- package/dist/core/tools/renderers/write.js +18 -19
- package/dist/core/tools/renderers/write.js.map +1 -1
- package/dist/core/tools/shell-execution.d.ts +20 -13
- package/dist/core/tools/shell-execution.d.ts.map +1 -1
- package/dist/core/tools/shell-execution.js +165 -183
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/shell-tool.d.ts +9 -14
- package/dist/core/tools/shell-tool.d.ts.map +1 -1
- package/dist/core/tools/shell-tool.js +38 -66
- package/dist/core/tools/shell-tool.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts +14 -4
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js +2 -3
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/write.d.ts +2 -2
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +30 -13
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/usage-totals.d.ts +0 -9
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +24 -91
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/agent/activity-lines.d.ts +2 -3
- package/dist/extensions/agent/activity-lines.d.ts.map +1 -1
- package/dist/extensions/agent/activity-lines.js +5 -9
- package/dist/extensions/agent/activity-lines.js.map +1 -1
- package/dist/extensions/agent/activity.d.ts +0 -2
- package/dist/extensions/agent/activity.d.ts.map +1 -1
- package/dist/extensions/agent/activity.js +1 -1
- package/dist/extensions/agent/activity.js.map +1 -1
- package/dist/extensions/agent/progress.d.ts +0 -3
- package/dist/extensions/agent/progress.d.ts.map +1 -1
- package/dist/extensions/agent/progress.js +2 -8
- package/dist/extensions/agent/progress.js.map +1 -1
- package/dist/extensions/agent/render.js +1 -1
- package/dist/extensions/agent/render.js.map +1 -1
- package/dist/extensions/agent/tool.d.ts.map +1 -1
- package/dist/extensions/agent/tool.js +0 -6
- package/dist/extensions/agent/tool.js.map +1 -1
- package/dist/{core/isolated-session.d.ts → extensions/agent/worker-session.d.ts} +6 -6
- package/dist/extensions/agent/worker-session.d.ts.map +1 -0
- package/dist/{core/isolated-session.js → extensions/agent/worker-session.js} +9 -9
- package/dist/extensions/agent/worker-session.js.map +1 -0
- package/dist/extensions/agent/worker.d.ts +0 -3
- package/dist/extensions/agent/worker.d.ts.map +1 -1
- package/dist/extensions/agent/worker.js +2 -3
- package/dist/extensions/agent/worker.js.map +1 -1
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +2 -1
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
- package/dist/extensions/cached-compaction/render.js +3 -3
- package/dist/extensions/cached-compaction/render.js.map +1 -1
- package/dist/extensions/codemode/renderer.d.ts.map +1 -1
- package/dist/extensions/codemode/renderer.js +6 -2
- package/dist/extensions/codemode/renderer.js.map +1 -1
- package/dist/extensions/codemode/tool.d.ts +2 -1
- package/dist/extensions/codemode/tool.d.ts.map +1 -1
- package/dist/extensions/codemode/tool.js +33 -8
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/deepwiki/schema.d.ts.map +1 -1
- package/dist/extensions/deepwiki/schema.js +1 -1
- package/dist/extensions/deepwiki/schema.js.map +1 -1
- package/dist/extensions/llama/ui.d.ts.map +1 -1
- package/dist/extensions/llama/ui.js +16 -4
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/extensions/mcp/cli.d.ts.map +1 -1
- package/dist/extensions/mcp/cli.js +34 -8
- package/dist/extensions/mcp/cli.js.map +1 -1
- package/dist/extensions/mcp/oauth.d.ts +1 -1
- package/dist/extensions/mcp/oauth.d.ts.map +1 -1
- package/dist/extensions/mcp/oauth.js +36 -13
- package/dist/extensions/mcp/oauth.js.map +1 -1
- package/dist/extensions/mcp/ui.d.ts +1 -0
- package/dist/extensions/mcp/ui.d.ts.map +1 -1
- package/dist/extensions/mcp/ui.js +33 -24
- package/dist/extensions/mcp/ui.js.map +1 -1
- package/dist/extensions/run-summary/index.d.ts +1 -1
- package/dist/extensions/run-summary/index.d.ts.map +1 -1
- package/dist/extensions/run-summary/index.js +11 -23
- package/dist/extensions/run-summary/index.js.map +1 -1
- package/dist/extensions/statusline/usage.d.ts.map +1 -1
- package/dist/extensions/statusline/usage.js +2 -1
- package/dist/extensions/statusline/usage.js.map +1 -1
- package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
- package/dist/extensions/tasks/tool/schema.js +1 -1
- package/dist/extensions/tasks/tool/schema.js.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.d.ts +5 -1
- package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/completion-render.js +25 -70
- package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
- package/dist/extensions/tasks/ui/inspector.d.ts +1 -1
- package/dist/extensions/tasks/ui/inspector.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/inspector.js +0 -6
- package/dist/extensions/tasks/ui/inspector.js.map +1 -1
- package/dist/extensions/tasks/ui/manager.d.ts +1 -1
- package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/manager.js.map +1 -1
- package/dist/extensions/tasks/ui/views.d.ts +2 -4
- package/dist/extensions/tasks/ui/views.d.ts.map +1 -1
- package/dist/extensions/tasks/ui/views.js +3 -7
- package/dist/extensions/tasks/ui/views.js.map +1 -1
- package/dist/extensions/tool-presentation/fallback.d.ts.map +1 -0
- package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/fallback.js +5 -5
- package/dist/extensions/tool-presentation/fallback.js.map +1 -0
- package/dist/extensions/tool-presentation/index.js +1 -1
- package/dist/extensions/tool-presentation/index.js.map +1 -1
- package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/shell.d.ts +1 -1
- package/dist/extensions/tool-presentation/shell.d.ts.map +1 -0
- package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/shell.js +3 -3
- package/dist/extensions/tool-presentation/shell.js.map +1 -0
- package/dist/extensions/tool-search/tool.d.ts +21 -6
- package/dist/extensions/tool-search/tool.d.ts.map +1 -1
- package/dist/extensions/tool-search/tool.js +104 -36
- package/dist/extensions/tool-search/tool.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +15 -8
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +5 -3
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +61 -45
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector-skills.d.ts +54 -0
- package/dist/modes/interactive/components/config-selector-skills.d.ts.map +1 -0
- package/dist/modes/interactive/components/config-selector-skills.js +178 -0
- package/dist/modes/interactive/components/config-selector-skills.js.map +1 -0
- package/dist/modes/interactive/components/config-selector.d.ts +2 -11
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +31 -181
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +7 -0
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +2 -1
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +2 -1
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +2 -0
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +4 -0
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +5 -0
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +103 -10
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +2 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.js +3 -2
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +17 -6
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +1 -0
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +13 -4
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +14 -3
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +86 -22
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +2 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +15 -23
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.js +2 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +7 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +48 -9
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -0
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +5 -6
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +1 -0
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +9 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +3 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +4 -2
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/editor-host.d.ts.map +1 -1
- package/dist/modes/interactive/editor-host.js +3 -2
- package/dist/modes/interactive/editor-host.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts +1 -0
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +17 -5
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +8 -12
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +169 -112
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts +10 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js +21 -0
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +10 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +30 -23
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/interactive/tool-view/chat.d.ts +2 -2
- package/dist/modes/interactive/tool-view/chat.d.ts.map +1 -1
- package/dist/modes/interactive/tool-view/chat.js +22 -19
- package/dist/modes/interactive/tool-view/chat.js.map +1 -1
- package/dist/modes/interactive/transcript-layout.d.ts +2 -0
- package/dist/modes/interactive/transcript-layout.d.ts.map +1 -1
- package/dist/modes/interactive/transcript-layout.js +5 -2
- package/dist/modes/interactive/transcript-layout.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +9 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +23 -23
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +0 -3
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +55 -4
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +5 -2
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/clipboard-command.d.ts.map +1 -1
- package/dist/utils/clipboard-command.js +4 -0
- package/dist/utils/clipboard-command.js.map +1 -1
- package/dist/utils/git.d.ts +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js +5 -3
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js +4 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts +17 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +42 -1
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +14 -0
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts +5 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +7 -0
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +30 -35
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/usage.d.ts +5 -0
- package/dist/utils/usage.d.ts.map +1 -0
- package/dist/utils/usage.js +16 -0
- package/dist/utils/usage.js.map +1 -0
- package/docs/bundled/README.md +1 -1
- package/docs/bundled/extensions/agent.md +5 -5
- package/docs/bundled/extensions/run-summary.md +4 -4
- package/docs/bundled/tasks.md +2 -4
- package/docs/bundled/tool-presentation.md +2 -2
- package/docs/custom-provider.md +1 -1
- package/docs/environment-variables.md +2 -0
- package/docs/extensions.md +36 -21
- package/docs/keybindings.md +1 -1
- package/docs/llama-cpp.md +17 -12
- package/docs/mcp.md +6 -4
- package/docs/packages.md +26 -1
- package/docs/rpc.md +1 -1
- package/docs/sdk.md +7 -5
- package/docs/session-format.md +2 -2
- package/docs/sessions.md +10 -0
- package/docs/settings.md +5 -4
- package/docs/terminal-setup.md +2 -2
- package/docs/tmux.md +6 -0
- package/docs/tui.md +12 -7
- package/docs/usage.md +19 -9
- package/docs/windows.md +29 -0
- package/examples/extensions/README.md +2 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +27 -31
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/debug-provider.ts +2 -2
- package/examples/extensions/gondolin/package-lock.json +19 -29
- package/examples/extensions/gondolin/package.json +2 -2
- package/examples/extensions/preset.ts +2 -0
- package/examples/extensions/reload-runtime.ts +17 -5
- package/examples/extensions/tools.ts +2 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +9 -9
- package/schemas/models.schema.json +36 -36
- package/schemas/settings.schema.json +17 -0
- package/dist/bundle/chunks/anthropic-messages-HWL6AS7T.js +0 -6
- package/dist/bundle/chunks/azure-openai-responses-4YYPDYV5.js +0 -2
- package/dist/bundle/chunks/chunk-6JS2SOFO.js +0 -11
- package/dist/bundle/chunks/chunk-ANCZPKX7.js +0 -2
- package/dist/bundle/chunks/chunk-FEZ5RM2B.js +0 -2
- package/dist/bundle/chunks/chunk-LPF7HQ3S.js +0 -4
- package/dist/bundle/chunks/chunk-MMNIHCU7.js +0 -2
- package/dist/bundle/chunks/chunk-PUU43PDV.js +0 -1484
- package/dist/bundle/chunks/chunk-R267VV5T.js +0 -82
- package/dist/bundle/chunks/chunk-RVKT7OUB.js +0 -9
- package/dist/bundle/chunks/chunk-SA2AQYEI.js +0 -7
- package/dist/bundle/chunks/chunk-ZAIGBRV5.js +0 -16
- package/dist/bundle/chunks/mistral-conversations-V2JJTMJ5.js +0 -5
- package/dist/bundle/chunks/openai-completions-TXZXILJR.js +0 -7
- package/dist/bundle/chunks/pi-messages-LBJQ4NGP.js +0 -8
- package/dist/bundle/chunks/virtual-modules-63XNTSVN.js +0 -2
- package/dist/core/isolated-session.d.ts.map +0 -1
- package/dist/core/isolated-session.js.map +0 -1
- package/dist/modes/interactive/tool-view/fallback.d.ts.map +0 -1
- package/dist/modes/interactive/tool-view/fallback.js.map +0 -1
- package/dist/modes/interactive/tool-view/shell.d.ts.map +0 -1
- package/dist/modes/interactive/tool-view/shell.js.map +0 -1
- package/dist/utils/path-identity.d.ts +0 -12
- package/dist/utils/path-identity.d.ts.map +0 -1
- package/dist/utils/path-identity.js +0 -63
- package/dist/utils/path-identity.js.map +0 -1
- package/examples/extensions/sandbox/index.ts +0 -321
- package/examples/extensions/sandbox/package-lock.json +0 -92
- package/examples/extensions/sandbox/package.json +0 -19
- /package/dist/{modes/interactive/tool-view → extensions/tool-presentation}/fallback.d.ts +0 -0
|
@@ -30,6 +30,7 @@ import { RADIUS_MCP_URL, RADIUS_PROVIDER_ID } from "../../core/radius.js";
|
|
|
30
30
|
import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
|
|
31
31
|
import { SessionManager, sessionEntryToContextMessages, } from "../../core/session-manager.js";
|
|
32
32
|
import { BUILTIN_SLASH_COMMANDS } from "../../core/slash-commands.js";
|
|
33
|
+
import { getSourcePackageKey } from "../../core/source-info.js";
|
|
33
34
|
import { isInstallTelemetryEnabled } from "../../core/telemetry.js";
|
|
34
35
|
import { withBuiltInRenderers } from "../../core/tools/renderers/index.js";
|
|
35
36
|
import { hasTrustRequiringProjectResources, ProjectTrustStore } from "../../core/trust-manager.js";
|
|
@@ -40,16 +41,17 @@ import { copyToClipboard, readClipboardFilePaths, readClipboardText } from "../.
|
|
|
40
41
|
import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js";
|
|
41
42
|
import { parseGitUrl } from "../../utils/git.js";
|
|
42
43
|
import { ensurePngTranscoder } from "../../utils/image-convert.js";
|
|
43
|
-
import { getCwdRelativePath } from "../../utils/paths.js";
|
|
44
|
+
import { getCwdRelativePath, shortenHomePath } from "../../utils/paths.js";
|
|
44
45
|
import { getPiUserAgent } from "../../utils/pi-user-agent.js";
|
|
45
46
|
import { killTrackedDetachedChildren } from "../../utils/shell.js";
|
|
46
47
|
import { loadAllHighlightLanguages } from "../../utils/syntax-highlight.js";
|
|
48
|
+
import { stripBom } from "../../utils/text.js";
|
|
47
49
|
import { ensureTool } from "../../utils/tools-manager.js";
|
|
48
50
|
import { checkForNewPiVersion } from "../../utils/version-check.js";
|
|
49
51
|
import { reportBug } from "./bug-report.js";
|
|
50
52
|
import { createChatViewport } from "./chat-viewport.js";
|
|
51
53
|
import { ArminComponent } from "./components/armin.js";
|
|
52
|
-
import { AssistantMessageComponent
|
|
54
|
+
import { AssistantMessageComponent } from "./components/assistant-message.js";
|
|
53
55
|
import { BashExecutionComponent } from "./components/bash-execution.js";
|
|
54
56
|
import { BranchSummaryMessageComponent } from "./components/branch-summary-message.js";
|
|
55
57
|
import { CompactionSummaryMessageComponent } from "./components/compaction-summary-message.js";
|
|
@@ -123,9 +125,6 @@ class BuiltInHeader extends ExpandableText {
|
|
|
123
125
|
return { handled: true };
|
|
124
126
|
}
|
|
125
127
|
}
|
|
126
|
-
function isTranscriptNote(item) {
|
|
127
|
-
return "type" in item && item.type === "transcript_note";
|
|
128
|
-
}
|
|
129
128
|
function isCustomSessionEntry(item) {
|
|
130
129
|
return "type" in item && item.type === "custom";
|
|
131
130
|
}
|
|
@@ -262,10 +261,12 @@ export class InteractiveMode {
|
|
|
262
261
|
this.workingVisible = true;
|
|
263
262
|
this.workingIndicatorOptions = undefined;
|
|
264
263
|
this.defaultWorkingMessage = "Working";
|
|
265
|
-
this.
|
|
264
|
+
this.defaultHiddenThinkingLabel = "Thinking...";
|
|
265
|
+
this.hiddenThinkingLabel = this.defaultHiddenThinkingLabel;
|
|
266
266
|
this.lastSigintTime = 0;
|
|
267
267
|
this.lastEscapeTime = 0;
|
|
268
268
|
this.changelogMarkdown = undefined;
|
|
269
|
+
this.extensionChangelogUpdates = [];
|
|
269
270
|
this.startupNoticesShown = false;
|
|
270
271
|
this.anthropicSubscriptionWarningShown = false;
|
|
271
272
|
// Status line tracking (for mutating immediately-sequential status updates)
|
|
@@ -323,10 +324,6 @@ export class InteractiveMode {
|
|
|
323
324
|
// The last entry is visible; see pushExtensionDialog().
|
|
324
325
|
this.extensionDialogs = [];
|
|
325
326
|
this.extensionTerminalInputSubscriptions = new Set();
|
|
326
|
-
// Ephemeral extension notes anchored to session entries and rebuilt with the transcript.
|
|
327
|
-
this.extensionTranscriptNotes = new Map();
|
|
328
|
-
this.hasRenderedTranscript = false;
|
|
329
|
-
this.transcriptNotesRefreshScheduled = false;
|
|
330
327
|
// Extension widgets (components rendered above/below the editor)
|
|
331
328
|
this.extensionWidgetsAbove = new Map();
|
|
332
329
|
this.extensionWidgetsBelow = new Map();
|
|
@@ -550,24 +547,44 @@ export class InteractiveMode {
|
|
|
550
547
|
return;
|
|
551
548
|
}
|
|
552
549
|
this.startupNoticesShown = true;
|
|
553
|
-
if (!this.changelogMarkdown) {
|
|
550
|
+
if (!this.changelogMarkdown && this.extensionChangelogUpdates.length === 0) {
|
|
554
551
|
return;
|
|
555
552
|
}
|
|
556
553
|
if (this.chatContainer.children.length > 0) {
|
|
557
554
|
this.chatContainer.addChild(new Spacer(1));
|
|
558
555
|
}
|
|
559
556
|
this.chatContainer.addChild(new DynamicBorder());
|
|
560
|
-
if (this.
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
557
|
+
if (this.changelogMarkdown) {
|
|
558
|
+
if (this.settingsManager.getCollapseChangelog()) {
|
|
559
|
+
const versionMatch = this.changelogMarkdown.match(/##\s+\[?(\d+\.\d+\.\d+)\]?/);
|
|
560
|
+
const latestVersion = versionMatch ? versionMatch[1] : this.version;
|
|
561
|
+
const condensedText = `Updated to v${latestVersion}. Use ${theme.bold("/changelog")} to view full changelog.`;
|
|
562
|
+
this.chatContainer.addChild(new Text(condensedText, 1, 0));
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
this.chatContainer.addChild(new ThemedText(() => theme.bold(theme.fg("accent", "What's New")), 1, 0));
|
|
566
|
+
this.chatContainer.addChild(new Spacer(1));
|
|
567
|
+
this.chatContainer.addChild(new Markdown(this.changelogMarkdown.trim(), 1, 0, this.getMarkdownThemeWithSettings()));
|
|
568
|
+
this.chatContainer.addChild(new Spacer(1));
|
|
569
|
+
}
|
|
565
570
|
}
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
this.
|
|
571
|
+
if (this.extensionChangelogUpdates.length > 0) {
|
|
572
|
+
if (this.changelogMarkdown) {
|
|
573
|
+
this.chatContainer.addChild(new Spacer(1));
|
|
574
|
+
}
|
|
575
|
+
if (this.settingsManager.getCollapseChangelog()) {
|
|
576
|
+
const condensedText = this.extensionChangelogUpdates
|
|
577
|
+
.map((update) => `Updated ${update.name} to v${update.version}.`)
|
|
578
|
+
.join("\n");
|
|
579
|
+
this.chatContainer.addChild(new Text(condensedText, 1, 0));
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
this.chatContainer.addChild(new ThemedText(() => theme.bold(theme.fg("accent", "Extension Updates")), 1, 0));
|
|
583
|
+
this.chatContainer.addChild(new Spacer(1));
|
|
584
|
+
const markdown = this.extensionChangelogUpdates.map((update) => update.markdown).join("\n\n");
|
|
585
|
+
this.chatContainer.addChild(new Markdown(markdown, 1, 0, this.getMarkdownThemeWithSettings()));
|
|
586
|
+
this.chatContainer.addChild(new Spacer(1));
|
|
587
|
+
}
|
|
571
588
|
}
|
|
572
589
|
this.chatContainer.addChild(new DynamicBorder());
|
|
573
590
|
}
|
|
@@ -644,20 +661,15 @@ export class InteractiveMode {
|
|
|
644
661
|
if (this.isInitialized)
|
|
645
662
|
return;
|
|
646
663
|
this.registerSignalHandlers();
|
|
647
|
-
// Load
|
|
664
|
+
// Load changelogs (only show new entries, skip for resumed sessions)
|
|
648
665
|
this.changelogMarkdown = this.getChangelogForDisplay();
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
.
|
|
656
|
-
const cycleKeys = this.keybindings.getKeys("app.model.cycleForward");
|
|
657
|
-
const cycleHint = cycleKeys.length > 0
|
|
658
|
-
? theme.fg("muted", ` (${formatKeyText(cycleKeys.join("/"), { capitalize: true })} to cycle)`)
|
|
659
|
-
: "";
|
|
660
|
-
console.log(theme.fg("dim", `Model scope: ${modelList}${cycleHint}`));
|
|
666
|
+
this.extensionChangelogUpdates = this.getExtensionChangelogUpdates();
|
|
667
|
+
// Fullscreen renders on the alternate screen, so text printed to stdout here would stay in the shell
|
|
668
|
+
// after exit. Fullscreen shows the notice in the header instead (#11508).
|
|
669
|
+
if (this.renderer.mode !== "fullscreen") {
|
|
670
|
+
const modelScopeNotice = this.getModelScopeNotice();
|
|
671
|
+
if (modelScopeNotice)
|
|
672
|
+
console.log(modelScopeNotice);
|
|
661
673
|
}
|
|
662
674
|
// Keep one component tree and remount it when changing renderers.
|
|
663
675
|
this.renderWidgets(); // Initialize with default spacer
|
|
@@ -759,6 +771,8 @@ export class InteractiveMode {
|
|
|
759
771
|
this.builtInHeader = new Text("", 0, 0);
|
|
760
772
|
this.headerContainer.addChild(this.builtInHeader);
|
|
761
773
|
}
|
|
774
|
+
if (this.renderer.mode === "fullscreen")
|
|
775
|
+
this.showFullscreenModelScopeNotice();
|
|
762
776
|
this.ui.requestRender();
|
|
763
777
|
// Ensure fd and rg are available after mounting the TUI (downloads if missing, adds to PATH via getBinDir)
|
|
764
778
|
// so slow downloads do not make startup appear frozen.
|
|
@@ -996,6 +1010,58 @@ export class InteractiveMode {
|
|
|
996
1010
|
}
|
|
997
1011
|
return undefined;
|
|
998
1012
|
}
|
|
1013
|
+
getExtensionChangelogUpdates() {
|
|
1014
|
+
// Skip changelog for resumed/continued sessions (already have messages)
|
|
1015
|
+
if (this.session.state.messages.length > 0) {
|
|
1016
|
+
return [];
|
|
1017
|
+
}
|
|
1018
|
+
const seenKeys = new Set();
|
|
1019
|
+
const updates = [];
|
|
1020
|
+
for (const { sourceInfo } of this.session.resourceLoader.getExtensions().extensions) {
|
|
1021
|
+
if (sourceInfo.origin !== "package" || !sourceInfo.baseDir || !sourceInfo.changelogPath) {
|
|
1022
|
+
continue;
|
|
1023
|
+
}
|
|
1024
|
+
const key = getSourcePackageKey(sourceInfo);
|
|
1025
|
+
if (seenKeys.has(key)) {
|
|
1026
|
+
continue;
|
|
1027
|
+
}
|
|
1028
|
+
seenKeys.add(key);
|
|
1029
|
+
const pkg = this.readPackageJson(sourceInfo.baseDir);
|
|
1030
|
+
if (!pkg?.version) {
|
|
1031
|
+
continue;
|
|
1032
|
+
}
|
|
1033
|
+
const lastVersion = this.settingsManager.getExtensionChangelogVersion(key);
|
|
1034
|
+
if (!lastVersion) {
|
|
1035
|
+
// Fresh install - record the version, don't show changelog
|
|
1036
|
+
this.settingsManager.setExtensionChangelogVersion(key, pkg.version);
|
|
1037
|
+
continue;
|
|
1038
|
+
}
|
|
1039
|
+
const newEntries = getNewEntries(parseChangelog(sourceInfo.changelogPath), lastVersion);
|
|
1040
|
+
if (newEntries.length > 0) {
|
|
1041
|
+
this.settingsManager.setExtensionChangelogVersion(key, pkg.version);
|
|
1042
|
+
const name = pkg.name || sourceInfo.source;
|
|
1043
|
+
// Prefix each "## [x.y.z]" heading with the package name so entries render like Pi's own.
|
|
1044
|
+
const markdown = newEntries
|
|
1045
|
+
.map((entry) => entry.content.replace(/^##\s+/, `## ${name} `))
|
|
1046
|
+
.join("\n\n")
|
|
1047
|
+
.trim();
|
|
1048
|
+
updates.push({ name, version: pkg.version, markdown });
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
return updates;
|
|
1052
|
+
}
|
|
1053
|
+
readPackageJson(packageRoot) {
|
|
1054
|
+
try {
|
|
1055
|
+
const pkg = JSON.parse(stripBom(fs.readFileSync(path.join(packageRoot, "package.json"), "utf-8")));
|
|
1056
|
+
return {
|
|
1057
|
+
name: typeof pkg.name === "string" ? pkg.name : undefined,
|
|
1058
|
+
version: typeof pkg.version === "string" ? pkg.version : undefined,
|
|
1059
|
+
};
|
|
1060
|
+
}
|
|
1061
|
+
catch {
|
|
1062
|
+
return undefined;
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
999
1065
|
reportInstallTelemetry(version) {
|
|
1000
1066
|
if (process.env.PI_OFFLINE) {
|
|
1001
1067
|
return;
|
|
@@ -1024,13 +1090,7 @@ export class InteractiveMode {
|
|
|
1024
1090
|
// Extension System
|
|
1025
1091
|
// =========================================================================
|
|
1026
1092
|
formatDisplayPath(p) {
|
|
1027
|
-
|
|
1028
|
-
let result = p;
|
|
1029
|
-
// Replace home directory with ~
|
|
1030
|
-
if (result.startsWith(home)) {
|
|
1031
|
-
result = `~${result.slice(home.length)}`;
|
|
1032
|
-
}
|
|
1033
|
-
return result;
|
|
1093
|
+
return shortenHomePath(p);
|
|
1034
1094
|
}
|
|
1035
1095
|
formatExtensionDisplayPath(path) {
|
|
1036
1096
|
let result = this.formatDisplayPath(path);
|
|
@@ -1054,6 +1114,27 @@ export class InteractiveMode {
|
|
|
1054
1114
|
return this.options.verbose === true || this.settingsManager.getQuietStartup() !== true;
|
|
1055
1115
|
}
|
|
1056
1116
|
/** Startup details (model scope, loaded resources). Hidden by quietStartup: true or "header". */
|
|
1117
|
+
getModelScopeNotice() {
|
|
1118
|
+
if (this.session.scopedModels.length === 0 || !this.shouldShowStartupDetails())
|
|
1119
|
+
return undefined;
|
|
1120
|
+
const modelList = this.session.scopedModels
|
|
1121
|
+
.map((sm) => {
|
|
1122
|
+
const thinkingStr = sm.thinkingLevel ? `:${sm.thinkingLevel}` : "";
|
|
1123
|
+
return `${sm.model.id}${thinkingStr}`;
|
|
1124
|
+
})
|
|
1125
|
+
.join(", ");
|
|
1126
|
+
const cycleKeys = this.keybindings.getKeys("app.model.cycleForward");
|
|
1127
|
+
const cycleHint = cycleKeys.length > 0
|
|
1128
|
+
? theme.fg("muted", ` (${formatKeyText(cycleKeys.join("/"), { capitalize: true })} to cycle)`)
|
|
1129
|
+
: "";
|
|
1130
|
+
return theme.fg("dim", `Model scope: ${modelList}${cycleHint}`);
|
|
1131
|
+
}
|
|
1132
|
+
showFullscreenModelScopeNotice() {
|
|
1133
|
+
if (!this.getModelScopeNotice())
|
|
1134
|
+
return;
|
|
1135
|
+
this.headerContainer.addChild(new ThemedText(() => this.getModelScopeNotice() ?? "", 1, 0));
|
|
1136
|
+
this.headerContainer.addChild(new Spacer(1));
|
|
1137
|
+
}
|
|
1057
1138
|
shouldShowStartupDetails() {
|
|
1058
1139
|
return this.options.verbose === true || this.settingsManager.getQuietStartup() === false;
|
|
1059
1140
|
}
|
|
@@ -1424,7 +1505,7 @@ export class InteractiveMode {
|
|
|
1424
1505
|
const skillDiagnostics = skillsResult.diagnostics;
|
|
1425
1506
|
if (skillDiagnostics.length > 0) {
|
|
1426
1507
|
const warningLines = () => this.formatDiagnostics(skillDiagnostics, sourceInfos);
|
|
1427
|
-
this.loadedResourcesContainer.addChild(new ThemedText(() => `${theme.fg("warning", "[Skill
|
|
1508
|
+
this.loadedResourcesContainer.addChild(new ThemedText(() => `${theme.fg("warning", "[Skill warnings]")}\n${warningLines()}`, 0, 0));
|
|
1428
1509
|
this.loadedResourcesContainer.addChild(new Spacer(1));
|
|
1429
1510
|
}
|
|
1430
1511
|
const promptDiagnostics = promptsResult.diagnostics;
|
|
@@ -1792,14 +1873,14 @@ export class InteractiveMode {
|
|
|
1792
1873
|
this.ui.requestRender();
|
|
1793
1874
|
}
|
|
1794
1875
|
setHiddenThinkingLabel(label) {
|
|
1795
|
-
this.
|
|
1876
|
+
this.hiddenThinkingLabel = label ?? this.defaultHiddenThinkingLabel;
|
|
1796
1877
|
for (const child of this.chatContainer.children) {
|
|
1797
1878
|
if (child instanceof AssistantMessageComponent) {
|
|
1798
|
-
child.setHiddenThinkingLabel(this.
|
|
1879
|
+
child.setHiddenThinkingLabel(this.hiddenThinkingLabel);
|
|
1799
1880
|
}
|
|
1800
1881
|
}
|
|
1801
1882
|
if (this.streamingComponent) {
|
|
1802
|
-
this.streamingComponent.setHiddenThinkingLabel(this.
|
|
1883
|
+
this.streamingComponent.setHiddenThinkingLabel(this.hiddenThinkingLabel);
|
|
1803
1884
|
}
|
|
1804
1885
|
this.ui.requestRender();
|
|
1805
1886
|
}
|
|
@@ -1853,9 +1934,6 @@ export class InteractiveMode {
|
|
|
1853
1934
|
}
|
|
1854
1935
|
resetExtensionUI() {
|
|
1855
1936
|
this.editorHost.clear();
|
|
1856
|
-
this.extensionTranscriptNotes.clear();
|
|
1857
|
-
this.hasRenderedTranscript = false;
|
|
1858
|
-
this.transcriptNotesRefreshScheduled = false;
|
|
1859
1937
|
if (this.extensionDialogs.length > 0) {
|
|
1860
1938
|
for (const dialog of this.extensionDialogs) {
|
|
1861
1939
|
dialog.component.dispose?.();
|
|
@@ -2027,7 +2105,6 @@ export class InteractiveMode {
|
|
|
2027
2105
|
setWorkingIndicator: (options) => this.setWorkingIndicator(options),
|
|
2028
2106
|
setHiddenThinkingLabel: (label) => this.setHiddenThinkingLabel(label),
|
|
2029
2107
|
setWidget: (key, content, options) => this.setExtensionWidget(key, content, options),
|
|
2030
|
-
addTranscriptNote: (key, text, options) => this.addExtensionTranscriptNote(key, text, options),
|
|
2031
2108
|
setFooter: (factory) => this.setExtensionFooter(factory),
|
|
2032
2109
|
setHeader: (factory) => this.setExtensionHeader(factory),
|
|
2033
2110
|
setTitle: (title) => this.ui.terminal.setTitle(title),
|
|
@@ -2173,8 +2250,12 @@ export class InteractiveMode {
|
|
|
2173
2250
|
this.editorComponentFactory = factory;
|
|
2174
2251
|
// Save text from current editor before switching
|
|
2175
2252
|
const currentText = this.editor.getText();
|
|
2176
|
-
|
|
2177
|
-
this.
|
|
2253
|
+
// An open extension dialog keeps the editor slot; the new editor is shown when the last dialog closes.
|
|
2254
|
+
const dialogOpen = this.extensionDialogs.length > 0;
|
|
2255
|
+
if (!dialogOpen) {
|
|
2256
|
+
this.disposeActiveSelector();
|
|
2257
|
+
this.editorContainer.clear();
|
|
2258
|
+
}
|
|
2178
2259
|
if (factory) {
|
|
2179
2260
|
// Create the custom editor with tui, theme, and keybindings
|
|
2180
2261
|
const newEditor = factory(this.ui, getEditorTheme(), this.keybindings);
|
|
@@ -2225,7 +2306,8 @@ export class InteractiveMode {
|
|
|
2225
2306
|
this.defaultEditor.setText(currentText);
|
|
2226
2307
|
this.editor = this.defaultEditor;
|
|
2227
2308
|
}
|
|
2228
|
-
|
|
2309
|
+
if (!dialogOpen)
|
|
2310
|
+
this.editorContainer.addChild(this.editor);
|
|
2229
2311
|
if (this.activeStatusIndicator) {
|
|
2230
2312
|
this.statusContainer.clear();
|
|
2231
2313
|
this.activeWorkingIndicatorEmbedded = this.setEditorWorkingStatusIndicator(this.activeStatusIndicator);
|
|
@@ -2233,7 +2315,8 @@ export class InteractiveMode {
|
|
|
2233
2315
|
this.statusContainer.addChild(this.activeStatusIndicator);
|
|
2234
2316
|
}
|
|
2235
2317
|
}
|
|
2236
|
-
|
|
2318
|
+
if (!dialogOpen)
|
|
2319
|
+
this.ui.setFocus(this.editor);
|
|
2237
2320
|
this.ui.requestRender();
|
|
2238
2321
|
}
|
|
2239
2322
|
/**
|
|
@@ -2305,7 +2388,7 @@ export class InteractiveMode {
|
|
|
2305
2388
|
options?.onHandle?.(overlayHandle);
|
|
2306
2389
|
}
|
|
2307
2390
|
else {
|
|
2308
|
-
this.pushExtensionDialog(c);
|
|
2391
|
+
this.pushExtensionDialog(c, options?.blocked);
|
|
2309
2392
|
}
|
|
2310
2393
|
})
|
|
2311
2394
|
.catch((err) => {
|
|
@@ -2762,7 +2845,7 @@ export class InteractiveMode {
|
|
|
2762
2845
|
this.ui.requestRender();
|
|
2763
2846
|
}
|
|
2764
2847
|
else if (event.message.role === "assistant") {
|
|
2765
|
-
this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.
|
|
2848
|
+
this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.getMarkdownTransformers());
|
|
2766
2849
|
this.streamingMessage = event.message;
|
|
2767
2850
|
this.chatContainer.addChild(this.streamingComponent);
|
|
2768
2851
|
this.streamingComponent.updateContent(this.streamingMessage, true);
|
|
@@ -3064,41 +3147,6 @@ export class InteractiveMode {
|
|
|
3064
3147
|
this.lastStatusText = text;
|
|
3065
3148
|
this.ui.requestRender();
|
|
3066
3149
|
}
|
|
3067
|
-
addExtensionTranscriptNote(key, text, options) {
|
|
3068
|
-
if (this.extensionTranscriptNotes.has(key))
|
|
3069
|
-
return;
|
|
3070
|
-
const note = { key, text, afterEntryId: options.afterEntryId };
|
|
3071
|
-
this.extensionTranscriptNotes.set(key, note);
|
|
3072
|
-
if (this.hasRenderedTranscript && options.afterEntryId === this.sessionManager.getLeafId()) {
|
|
3073
|
-
this.addTranscriptNoteToChat({ type: "transcript_note", ...note });
|
|
3074
|
-
this.ui.requestRender();
|
|
3075
|
-
return;
|
|
3076
|
-
}
|
|
3077
|
-
this.scheduleTranscriptNotesRefresh();
|
|
3078
|
-
}
|
|
3079
|
-
/** Coalesce restored historical notes into one rebuild; initial rendering will pick them up itself. */
|
|
3080
|
-
scheduleTranscriptNotesRefresh() {
|
|
3081
|
-
if (!this.hasRenderedTranscript || this.transcriptNotesRefreshScheduled || !this.session.isIdle)
|
|
3082
|
-
return;
|
|
3083
|
-
this.transcriptNotesRefreshScheduled = true;
|
|
3084
|
-
const session = this.session;
|
|
3085
|
-
queueMicrotask(() => {
|
|
3086
|
-
if (this.session !== session || !this.transcriptNotesRefreshScheduled)
|
|
3087
|
-
return;
|
|
3088
|
-
this.transcriptNotesRefreshScheduled = false;
|
|
3089
|
-
if (!session.isIdle)
|
|
3090
|
-
return;
|
|
3091
|
-
this.rebuildTranscriptWithNotes();
|
|
3092
|
-
});
|
|
3093
|
-
}
|
|
3094
|
-
rebuildTranscriptWithNotes() {
|
|
3095
|
-
this.chatContainer.clear();
|
|
3096
|
-
this.renderInitialMessages({ populateHistory: false });
|
|
3097
|
-
}
|
|
3098
|
-
addTranscriptNoteToChat(note) {
|
|
3099
|
-
this.chatContainer.addChild(new Spacer(1));
|
|
3100
|
-
this.chatContainer.addChild(new ThemedText(() => theme.fg("dim", note.text), this.outputPad, 0));
|
|
3101
|
-
}
|
|
3102
3150
|
addCustomEntryToChat(entry) {
|
|
3103
3151
|
const renderer = this.session.extensionRunner.getEntryRenderer(entry.customType);
|
|
3104
3152
|
if (!renderer) {
|
|
@@ -3169,12 +3217,12 @@ export class InteractiveMode {
|
|
|
3169
3217
|
// Render user message separately if present
|
|
3170
3218
|
if (skillBlock.userMessage) {
|
|
3171
3219
|
this.chatContainer.addChild(new Spacer(1));
|
|
3172
|
-
const userComponent = new UserMessageComponent(skillBlock.userMessage, this.getMarkdownThemeWithSettings(), this.outputPad, this.getMarkdownTransformers());
|
|
3220
|
+
const userComponent = new UserMessageComponent(skillBlock.userMessage, this.getMarkdownThemeWithSettings(), this.outputPad, this.getMarkdownTransformers(), options?.messageId, options?.timestamp);
|
|
3173
3221
|
this.chatContainer.addChild(userComponent);
|
|
3174
3222
|
}
|
|
3175
3223
|
}
|
|
3176
3224
|
else {
|
|
3177
|
-
const userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings(), this.outputPad, this.getMarkdownTransformers());
|
|
3225
|
+
const userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings(), this.outputPad, this.getMarkdownTransformers(), options?.messageId, options?.timestamp);
|
|
3178
3226
|
this.chatContainer.addChild(userComponent);
|
|
3179
3227
|
}
|
|
3180
3228
|
if (options?.populateHistory) {
|
|
@@ -3184,7 +3232,7 @@ export class InteractiveMode {
|
|
|
3184
3232
|
break;
|
|
3185
3233
|
}
|
|
3186
3234
|
case "assistant": {
|
|
3187
|
-
const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.
|
|
3235
|
+
const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.getMarkdownTransformers(), options?.messageId, options?.timestamp);
|
|
3188
3236
|
this.chatContainer.addChild(assistantComponent);
|
|
3189
3237
|
break;
|
|
3190
3238
|
}
|
|
@@ -3197,7 +3245,7 @@ export class InteractiveMode {
|
|
|
3197
3245
|
}
|
|
3198
3246
|
}
|
|
3199
3247
|
}
|
|
3200
|
-
renderSessionItems(items, options = {}) {
|
|
3248
|
+
renderSessionItems(items, messageMeta, options = {}) {
|
|
3201
3249
|
this.pendingTools.clear();
|
|
3202
3250
|
const renderedPendingTools = new Map();
|
|
3203
3251
|
// Cache misses are not persisted, unlike successful cache-warming usage.
|
|
@@ -3210,10 +3258,6 @@ export class InteractiveMode {
|
|
|
3210
3258
|
this.updateEditorBorderColor();
|
|
3211
3259
|
}
|
|
3212
3260
|
for (const item of items) {
|
|
3213
|
-
if (isTranscriptNote(item)) {
|
|
3214
|
-
this.addTranscriptNoteToChat(item);
|
|
3215
|
-
continue;
|
|
3216
|
-
}
|
|
3217
3261
|
if (isCustomSessionEntry(item)) {
|
|
3218
3262
|
this.addCustomEntryToChat(item);
|
|
3219
3263
|
continue;
|
|
@@ -3229,7 +3273,11 @@ export class InteractiveMode {
|
|
|
3229
3273
|
const message = item;
|
|
3230
3274
|
// Assistant messages need special handling for tool calls
|
|
3231
3275
|
if (message.role === "assistant") {
|
|
3232
|
-
|
|
3276
|
+
const meta = messageMeta?.get(message);
|
|
3277
|
+
this.addMessageToChat(message, {
|
|
3278
|
+
messageId: meta?.id,
|
|
3279
|
+
timestamp: meta?.timestamp,
|
|
3280
|
+
});
|
|
3233
3281
|
// Render tool call components
|
|
3234
3282
|
for (const content of message.content) {
|
|
3235
3283
|
if (content.type === "toolCall") {
|
|
@@ -3275,7 +3323,12 @@ export class InteractiveMode {
|
|
|
3275
3323
|
}
|
|
3276
3324
|
else {
|
|
3277
3325
|
// All other messages use standard rendering
|
|
3278
|
-
|
|
3326
|
+
const meta = messageMeta?.get(message);
|
|
3327
|
+
this.addMessageToChat(message, {
|
|
3328
|
+
...options,
|
|
3329
|
+
messageId: meta?.id,
|
|
3330
|
+
timestamp: meta?.timestamp,
|
|
3331
|
+
});
|
|
3279
3332
|
}
|
|
3280
3333
|
}
|
|
3281
3334
|
for (const [toolCallId, component] of renderedPendingTools) {
|
|
@@ -3293,22 +3346,21 @@ export class InteractiveMode {
|
|
|
3293
3346
|
// Selection coordinates point into the transcript being replaced (#9311).
|
|
3294
3347
|
if (this.renderer instanceof TuiAltScreen)
|
|
3295
3348
|
this.renderer.resetTextSelection();
|
|
3349
|
+
const messageMeta = new Map();
|
|
3296
3350
|
const items = entries.flatMap((entry) => {
|
|
3297
|
-
const notes = [...this.extensionTranscriptNotes.values()]
|
|
3298
|
-
.filter((note) => note.afterEntryId === entry.id)
|
|
3299
|
-
.map((note) => ({ type: "transcript_note", ...note }));
|
|
3300
3351
|
if (entry.type === "custom" || (entry.type === "usage" && entry.kind === "cache_warm")) {
|
|
3301
|
-
return [entry
|
|
3352
|
+
return [entry];
|
|
3302
3353
|
}
|
|
3303
3354
|
const messages = sessionEntryToContextMessages(entry);
|
|
3355
|
+
for (const msg of messages) {
|
|
3356
|
+
messageMeta.set(msg, { id: entry.id, timestamp: entry.timestamp });
|
|
3357
|
+
}
|
|
3304
3358
|
if ((entry.type === "compaction" || entry.type === "branch_summary") && entry.usage && messages.length > 0) {
|
|
3305
|
-
return [...messages, { type: "compaction_cost", kind: entry.type, usage: entry.usage }
|
|
3359
|
+
return [...messages, { type: "compaction_cost", kind: entry.type, usage: entry.usage }];
|
|
3306
3360
|
}
|
|
3307
|
-
return
|
|
3361
|
+
return messages;
|
|
3308
3362
|
});
|
|
3309
|
-
this.renderSessionItems(items, options);
|
|
3310
|
-
this.hasRenderedTranscript = true;
|
|
3311
|
-
this.transcriptNotesRefreshScheduled = false;
|
|
3363
|
+
this.renderSessionItems(items, messageMeta, options);
|
|
3312
3364
|
}
|
|
3313
3365
|
addCacheWarmingUsage(entry) {
|
|
3314
3366
|
if (!this.settingsManager.getShowCacheMissNotices())
|
|
@@ -3396,11 +3448,11 @@ export class InteractiveMode {
|
|
|
3396
3448
|
this.chatContainer.addChild(new Spacer(1));
|
|
3397
3449
|
this.chatContainer.addChild(new ThemedText(() => theme.fg("warning", `${label}: ${reBilled}`), 1, 0));
|
|
3398
3450
|
}
|
|
3399
|
-
renderInitialMessages(
|
|
3451
|
+
renderInitialMessages() {
|
|
3400
3452
|
const entries = this.sessionManager.buildContextEntries();
|
|
3401
3453
|
this.renderSessionEntries(entries, {
|
|
3402
3454
|
updateFooter: true,
|
|
3403
|
-
populateHistory:
|
|
3455
|
+
populateHistory: true,
|
|
3404
3456
|
});
|
|
3405
3457
|
this.renderProjectTrustWarningIfNeeded();
|
|
3406
3458
|
// Show compaction info if session was compacted
|
|
@@ -3457,7 +3509,6 @@ export class InteractiveMode {
|
|
|
3457
3509
|
if (this.isShuttingDown)
|
|
3458
3510
|
return;
|
|
3459
3511
|
this.isShuttingDown = true;
|
|
3460
|
-
this.session.tasks.close();
|
|
3461
3512
|
// Keep signal handlers registered until terminal cleanup has completed.
|
|
3462
3513
|
// `signal-exit` checks the listener list during the same SIGTERM/SIGHUP
|
|
3463
3514
|
// dispatch and re-sends the signal if only its own listeners remain.
|
|
@@ -3480,9 +3531,12 @@ export class InteractiveMode {
|
|
|
3480
3531
|
// the final frame while the process is exiting.
|
|
3481
3532
|
// Drain any in-flight Kitty key release events before stopping.
|
|
3482
3533
|
// This prevents escape sequences from leaking to the parent shell over slow SSH.
|
|
3534
|
+
// Close task admission first, so no completion turn starts while the terminal drains.
|
|
3535
|
+
const stoppingTasks = this.session.shutdownTasks();
|
|
3483
3536
|
this.themeController.disableAutoSync();
|
|
3484
3537
|
await this.ui.terminal.drainInput(1000);
|
|
3485
3538
|
this.stop();
|
|
3539
|
+
await stoppingTasks;
|
|
3486
3540
|
await this.runtimeHost.dispose();
|
|
3487
3541
|
const resumeCommand = formatResumeCommand(this.sessionManager);
|
|
3488
3542
|
if (resumeCommand) {
|
|
@@ -3754,6 +3808,9 @@ export class InteractiveMode {
|
|
|
3754
3808
|
if (result.status === "complete") {
|
|
3755
3809
|
this.editor.setText(result.content);
|
|
3756
3810
|
}
|
|
3811
|
+
else {
|
|
3812
|
+
this.showStatus(result.message);
|
|
3813
|
+
}
|
|
3757
3814
|
}
|
|
3758
3815
|
finally {
|
|
3759
3816
|
this.ui.start();
|