@herbertgao/pi-extensions 2026.9.19 → 2026.10.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/README.md +14 -16
- package/THIRD_PARTY_NOTICES.md +29 -3
- package/node_modules/@herbertgao/pi-bark/README.md +39 -3
- package/node_modules/@herbertgao/pi-bark/package.json +1 -1
- package/node_modules/@herbertgao/pi-bark/src/index.ts +275 -15
- package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +85 -68
- package/node_modules/@herbertgao/pi-cc-extensions/README.md +79 -62
- package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/preview.webp +0 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +116 -34
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +370 -118
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +6 -36
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/index.ts +2 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +31 -33
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +330 -360
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/index.ts +56 -108
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/session.ts +97 -15
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/subagent.ts +80 -45
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/flush-docked-bash.ts +36 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/footer-layout.ts +229 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/footer.ts +521 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/mcp-chip.ts +136 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/startup-header.ts +92 -61
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/working-message.ts +58 -38
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts +19 -3
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +1127 -231
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +267 -262
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/index.ts +38 -48
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/markdown-enhance.ts +8 -2
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/hover.ts +2 -7
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +287 -114
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/layout.ts +15 -6
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/packets.ts +18 -72
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/scroll.ts +61 -26
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +303 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/ansi-utils.ts +25 -57
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-component.ts +125 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-edit-render.ts +227 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-header.ts +136 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-highlight.ts +151 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-inline.ts +324 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-layout.ts +762 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-limits.ts +152 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-palette.ts +410 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-parse.ts +535 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-presentation.ts +4 -4
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-renderer.ts +21 -3219
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-text.ts +44 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-write-render.ts +568 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/index.ts +103 -48
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/line-width-safety.ts +8 -7
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-execution.ts +2 -1
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +171 -196
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/mcp-title.ts +39 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{message-display.ts → tool/message-display.ts} +27 -93
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/names.ts +429 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/result.ts +259 -164
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{show-more-hint.ts → tool/show-more-hint.ts} +10 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/transcript-refresh.ts +8 -26
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/ansi-color.ts +44 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/ansi-text.ts +77 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/component-tree.ts +34 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/format.ts +28 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/fullscreen-detect.ts +51 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/patch-keys.ts +124 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/sgr-mouse.ts +70 -0
- package/node_modules/@herbertgao/pi-cc-extensions/package.json +10 -8
- package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
- package/node_modules/@herbertgao/pi-subagents/package.json +1 -1
- package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +3 -2
- package/node_modules/@herbertgao/sol-pi/CONTRIBUTING.md +22 -0
- package/node_modules/@herbertgao/sol-pi/README.md +36 -17
- package/node_modules/@herbertgao/sol-pi/THIRD_PARTY_NOTICES.md +10 -6
- package/node_modules/@herbertgao/sol-pi/agents-install.md +15 -12
- package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +24 -8
- package/node_modules/@herbertgao/sol-pi/docs/configuration.md +2 -2
- package/node_modules/@herbertgao/sol-pi/docs/star-history.md +18 -0
- package/node_modules/@herbertgao/sol-pi/package.json +4 -2
- package/node_modules/@herbertgao/sol-pi/scripts/check-sol-pi-config.mjs +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/config.ts +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/file-queue.ts +23 -4
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +32 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/then-run.ts +3 -2
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/observation-pack/observation.ts +1 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/economics.ts +27 -7
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/extension.ts +137 -41
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/index.ts +1 -0
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/plan.ts +2 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/projection.ts +58 -0
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +28 -6
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/tools.ts +2 -1
- package/node_modules/@herbertgao/sol-pi/src/sol-pi/runtime-paths.ts +15 -2
- package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
- package/node_modules/@pi-plugins/fast-mode/README.md +7 -1
- package/node_modules/@pi-plugins/fast-mode/dist/index.d.mts.map +1 -1
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +7 -1
- package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -1
- package/node_modules/@pi-plugins/fast-mode/package.json +5 -5
- package/node_modules/pi-antigravity/README.md +3 -0
- package/node_modules/pi-antigravity/package.json +8 -8
- package/node_modules/pi-antigravity/src/auth/oauth.ts +6 -3
- package/node_modules/pi-antigravity/src/index.ts +114 -110
- package/node_modules/pi-antigravity/src/stream/stream.ts +1 -1
- package/node_modules/pi-antigravity/src/utils/util.ts +18 -1
- package/node_modules/pi-multi-account/CHANGELOG.md +20 -0
- package/node_modules/pi-multi-account/README.md +46 -8
- package/node_modules/pi-multi-account/config-file-transaction.ts +42 -0
- package/node_modules/pi-multi-account/index.ts +255 -269
- package/node_modules/pi-multi-account/model-pins.ts +36 -0
- package/node_modules/pi-multi-account/package.json +9 -7
- package/node_modules/pi-multi-account/slot-proxy-auth.ts +12 -2
- package/node_modules/pi-multi-account/slot-proxy.ts +27 -5
- package/node_modules/pi-web-access/CHANGELOG.md +17 -0
- package/node_modules/pi-web-access/README.md +6 -3
- package/node_modules/pi-web-access/brave-rate-limit.ts +170 -0
- package/node_modules/pi-web-access/brave.ts +28 -11
- package/node_modules/pi-web-access/dist/index.js +202 -33
- package/node_modules/pi-web-access/gemini-search.ts +2 -5
- package/node_modules/pi-web-access/index.ts +13 -7
- package/node_modules/pi-web-access/openai-search.ts +24 -10
- package/node_modules/pi-web-access/package.json +1 -1
- package/node_modules/pi-web-access/summary-review.ts +8 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/README.md +16 -12
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/adapter.d.ts +0 -5
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/adapter.js +2 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/contract.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/reader.d.ts +3 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/reader.js +27 -15
- package/node_modules/{@herbertgao/resume-from/dist/adapters/codex → resume-from/dist/adapters/claude-code}/redaction.js +16 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/writer.d.ts +2 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/writer.js +1 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/contract.d.ts +2 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/index.js +1 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/read.d.ts +16 -0
- package/node_modules/resume-from/dist/adapters/codex/read.js +723 -0
- package/node_modules/{@herbertgao/resume-from/dist/adapters/pi → resume-from/dist/adapters/codex}/redaction.js +16 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/rollout.d.ts +44 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/rollout.js +88 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/write.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/write.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/contract.d.ts +5 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/adapter.js +10 -6
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/contract.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from/dist/adapters/claude-code → resume-from/dist/adapters/pi}/redaction.js +16 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/serialize.d.ts +2 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/serialize.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/render.d.ts +1 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/render.js +4 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/runner.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/contract.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/command.js +31 -8
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/wiring.d.ts +1 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/wiring.js +1 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/confirmation.d.ts +4 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/confirmation.js +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/contract.d.ts +8 -6
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/contract.d.ts +10 -5
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/finder.d.ts +2 -1
- package/node_modules/resume-from/dist/import/discovery/finder.js +269 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/contract.d.ts +3 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/lander.js +3 -3
- package/node_modules/resume-from/dist/import/pipeline.d.ts +28 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/pipeline.js +31 -11
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/builder.d.ts +2 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/builder.js +9 -5
- package/node_modules/resume-from/dist/import/preview/warnings.d.ts +14 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/warnings.js +26 -20
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/wiring.js +12 -2
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.d.ts +9 -3
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/git.d.ts +4 -4
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/git.js +7 -4
- package/node_modules/resume-from/dist/platform/repo/reader.d.ts +3 -0
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/reader.js +60 -20
- package/node_modules/{@herbertgao/resume-from → resume-from}/dist/session/contract.d.ts +8 -1
- package/node_modules/{@herbertgao/resume-from → resume-from}/package.json +19 -32
- package/node_modules/{@herbertgao/resume-from → resume-from}/shims/pi/extensions/resume-from.js +2 -2
- package/package.json +18 -22
- package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.en.svg +0 -101
- package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.svg +0 -101
- package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/welcome.webp +0 -0
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/render-utils.ts +0 -5
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/types.ts +0 -30
- package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-display-utils.ts +0 -12
- package/node_modules/@herbertgao/resume-from/dist/adapters/codex/read.js +0 -270
- package/node_modules/@herbertgao/resume-from/dist/import/discovery/finder.js +0 -129
- package/node_modules/@herbertgao/resume-from/dist/import/pipeline.d.ts +0 -17
- package/node_modules/@herbertgao/resume-from/dist/import/preview/warnings.d.ts +0 -11
- package/node_modules/@herbertgao/resume-from/dist/platform/repo/reader.d.ts +0 -8
- package/node_modules/pi-footer/CHANGELOG.md +0 -145
- package/node_modules/pi-footer/LICENSE +0 -21
- package/node_modules/pi-footer/README.md +0 -354
- package/node_modules/pi-footer/package.json +0 -68
- package/node_modules/pi-footer/src/cache.ts +0 -106
- package/node_modules/pi-footer/src/colors.ts +0 -237
- package/node_modules/pi-footer/src/config.ts +0 -202
- package/node_modules/pi-footer/src/event-widgets.ts +0 -41
- package/node_modules/pi-footer/src/extension-statuses.ts +0 -102
- package/node_modules/pi-footer/src/git.ts +0 -135
- package/node_modules/pi-footer/src/index.ts +0 -268
- package/node_modules/pi-footer/src/metrics.ts +0 -141
- package/node_modules/pi-footer/src/presets.ts +0 -383
- package/node_modules/pi-footer/src/render.ts +0 -114
- package/node_modules/pi-footer/src/separators.ts +0 -52
- package/node_modules/pi-footer/src/types.ts +0 -122
- package/node_modules/pi-footer/src/ui/color-level-confirm.ts +0 -22
- package/node_modules/pi-footer/src/ui/color-options.ts +0 -195
- package/node_modules/pi-footer/src/ui/config-lifecycle.ts +0 -61
- package/node_modules/pi-footer/src/ui/edit-colors.ts +0 -13
- package/node_modules/pi-footer/src/ui/events.ts +0 -35
- package/node_modules/pi-footer/src/ui/extension-status-picker.ts +0 -60
- package/node_modules/pi-footer/src/ui/extension-statuses.ts +0 -73
- package/node_modules/pi-footer/src/ui/fields.ts +0 -252
- package/node_modules/pi-footer/src/ui/global-menu.ts +0 -126
- package/node_modules/pi-footer/src/ui/helpers.ts +0 -44
- package/node_modules/pi-footer/src/ui/layout.ts +0 -17
- package/node_modules/pi-footer/src/ui/line-list.ts +0 -19
- package/node_modules/pi-footer/src/ui/model.ts +0 -64
- package/node_modules/pi-footer/src/ui/navigation.ts +0 -29
- package/node_modules/pi-footer/src/ui/option-edit.ts +0 -93
- package/node_modules/pi-footer/src/ui/overlay-render.ts +0 -103
- package/node_modules/pi-footer/src/ui/screen-context.ts +0 -18
- package/node_modules/pi-footer/src/ui/screen-controller.ts +0 -27
- package/node_modules/pi-footer/src/ui/screen-render.ts +0 -32
- package/node_modules/pi-footer/src/ui/screen-state.ts +0 -20
- package/node_modules/pi-footer/src/ui/screen.ts +0 -243
- package/node_modules/pi-footer/src/ui/screens/add-widget.ts +0 -92
- package/node_modules/pi-footer/src/ui/screens/confirm-exit.ts +0 -52
- package/node_modules/pi-footer/src/ui/screens/controller.ts +0 -12
- package/node_modules/pi-footer/src/ui/screens/edit-colors.ts +0 -68
- package/node_modules/pi-footer/src/ui/screens/edit-widget.ts +0 -115
- package/node_modules/pi-footer/src/ui/screens/extension-status-row.ts +0 -61
- package/node_modules/pi-footer/src/ui/screens/global.ts +0 -75
- package/node_modules/pi-footer/src/ui/screens/line-list.ts +0 -108
- package/node_modules/pi-footer/src/ui/screens/main.ts +0 -99
- package/node_modules/pi-footer/src/ui/screens/terminal.ts +0 -121
- package/node_modules/pi-footer/src/ui/screens/widget-list.ts +0 -154
- package/node_modules/pi-footer/src/ui/terminal-menu.ts +0 -32
- package/node_modules/pi-footer/src/ui/theme.ts +0 -48
- package/node_modules/pi-footer/src/ui/title-bar.ts +0 -100
- package/node_modules/pi-footer/src/ui/widget-actions.ts +0 -76
- package/node_modules/pi-footer/src/ui.ts +0 -66
- package/node_modules/pi-footer/src/widgets/context.ts +0 -28
- package/node_modules/pi-footer/src/widgets/core/active-tools.ts +0 -17
- package/node_modules/pi-footer/src/widgets/core/context-window.ts +0 -24
- package/node_modules/pi-footer/src/widgets/core/cwd-basename.ts +0 -19
- package/node_modules/pi-footer/src/widgets/core/cwd.ts +0 -108
- package/node_modules/pi-footer/src/widgets/core/event.ts +0 -34
- package/node_modules/pi-footer/src/widgets/core/external-status.ts +0 -102
- package/node_modules/pi-footer/src/widgets/core/model-provider.ts +0 -20
- package/node_modules/pi-footer/src/widgets/core/model.ts +0 -35
- package/node_modules/pi-footer/src/widgets/core/provider.ts +0 -17
- package/node_modules/pi-footer/src/widgets/core/session-name.ts +0 -17
- package/node_modules/pi-footer/src/widgets/core/text-verbosity.ts +0 -17
- package/node_modules/pi-footer/src/widgets/core/thinking-level.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/ahead-behind.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/branch.ts +0 -81
- package/node_modules/pi-footer/src/widgets/git/clean.ts +0 -19
- package/node_modules/pi-footer/src/widgets/git/deletions.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/diff.ts +0 -38
- package/node_modules/pi-footer/src/widgets/git/insertions.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/remote.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/root.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/sha.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/staged.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/status.ts +0 -19
- package/node_modules/pi-footer/src/widgets/git/unstaged.ts +0 -17
- package/node_modules/pi-footer/src/widgets/git/untracked.ts +0 -17
- package/node_modules/pi-footer/src/widgets/instance.ts +0 -118
- package/node_modules/pi-footer/src/widgets/layout/custom-text.ts +0 -18
- package/node_modules/pi-footer/src/widgets/layout/flex-separator.ts +0 -32
- package/node_modules/pi-footer/src/widgets/layout/separator.ts +0 -57
- package/node_modules/pi-footer/src/widgets/layout/spacer.ts +0 -31
- package/node_modules/pi-footer/src/widgets/options.ts +0 -122
- package/node_modules/pi-footer/src/widgets/project/runtime.ts +0 -361
- package/node_modules/pi-footer/src/widgets/registry.ts +0 -223
- package/node_modules/pi-footer/src/widgets/session/assistant-messages.ts +0 -17
- package/node_modules/pi-footer/src/widgets/session/compactions.ts +0 -17
- package/node_modules/pi-footer/src/widgets/session/elapsed.ts +0 -18
- package/node_modules/pi-footer/src/widgets/session/last-activity.ts +0 -18
- package/node_modules/pi-footer/src/widgets/session/messages.ts +0 -19
- package/node_modules/pi-footer/src/widgets/session/session-id.ts +0 -17
- package/node_modules/pi-footer/src/widgets/session/session-start.ts +0 -18
- package/node_modules/pi-footer/src/widgets/session/tool-results.ts +0 -17
- package/node_modules/pi-footer/src/widgets/session/total-messages.ts +0 -19
- package/node_modules/pi-footer/src/widgets/session/total-time.ts +0 -18
- package/node_modules/pi-footer/src/widgets/session/user-messages.ts +0 -17
- package/node_modules/pi-footer/src/widgets/store.ts +0 -26
- package/node_modules/pi-footer/src/widgets/tokens/cache-hit-rate.ts +0 -55
- package/node_modules/pi-footer/src/widgets/tokens/cache-read.ts +0 -18
- package/node_modules/pi-footer/src/widgets/tokens/cache-write.ts +0 -18
- package/node_modules/pi-footer/src/widgets/tokens/context-bar.ts +0 -108
- package/node_modules/pi-footer/src/widgets/tokens/context-length.ts +0 -26
- package/node_modules/pi-footer/src/widgets/tokens/context-remaining.ts +0 -29
- package/node_modules/pi-footer/src/widgets/tokens/context.ts +0 -29
- package/node_modules/pi-footer/src/widgets/tokens/cost.ts +0 -51
- package/node_modules/pi-footer/src/widgets/tokens/input-speed.ts +0 -25
- package/node_modules/pi-footer/src/widgets/tokens/input-tokens.ts +0 -18
- package/node_modules/pi-footer/src/widgets/tokens/output-speed.ts +0 -25
- package/node_modules/pi-footer/src/widgets/tokens/output-tokens.ts +0 -18
- package/node_modules/pi-footer/src/widgets/tokens/tokens.ts +0 -20
- package/node_modules/pi-footer/src/widgets/tokens/total-speed.ts +0 -25
- package/node_modules/pi-footer/src/widgets/tokens/total-tokens.ts +0 -18
- package/node_modules/pi-footer/src/widgets/types.ts +0 -181
- package/node_modules/pi-footer/src/widgets/utils/colors.ts +0 -11
- package/node_modules/pi-footer/src/widgets/utils/context.ts +0 -112
- package/node_modules/pi-footer/src/widgets/utils/session.ts +0 -19
- package/node_modules/pi-footer/src/widgets/utils/token-format.ts +0 -78
- /package/node_modules/{@herbertgao/resume-from → resume-from}/LICENSE +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/entries.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/entries.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/layout.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/layout.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/readback.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/readback.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/redaction.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/validation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/validation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/readback.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/readback.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/redaction.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/validation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/validation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/adapter.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/format.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/format.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/parse.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/parse.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/redaction.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/validate.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/validate.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/bin.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/bin.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/agents.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/agents.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/args.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/args.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/presentation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/presentation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/runner.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/entry.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/entry.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/command.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/picker.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/picker.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/presentation.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/presentation.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/register.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/register.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/ui.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/ui.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/profile.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/profile.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/registry.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/registry.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/homes.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/homes.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/ordering.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/ordering.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/handover.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/handover.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/lander.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/marker.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/marker.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/format.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/format.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/rules.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/rules.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/wiring.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/defaults.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/defaults.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/errors.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/errors.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/loader.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/loader.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/paths.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/paths.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/validate.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/validate.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/file-committer.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/file-committer.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/contract.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/contract.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/estimator.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/estimator.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/index.d.ts +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/index.js +0 -0
- /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/session/contract.js +0 -0
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolExecutionComponent } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { hasActiveTextPreview, showTextPreview } from "../../feature/context.ts";
|
|
3
|
+
import { ThinkingPreviewBlock } from "../../feature/compact-thinking.ts";
|
|
4
|
+
import {
|
|
5
|
+
patchRegistry,
|
|
6
|
+
TOOL_GROUPING_PARENT_KEY,
|
|
7
|
+
TOOL_MOUSE_OWNER_KEY,
|
|
8
|
+
} from "../../utils/patch-keys.ts";
|
|
3
9
|
import { ToolGroupComponent } from "../tool/grouping.ts";
|
|
4
|
-
import {
|
|
5
|
-
|
|
10
|
+
import {
|
|
11
|
+
isCompactAssistantComponent,
|
|
12
|
+
markCompactRoundToolExpanded,
|
|
13
|
+
setHoveredCompactAssistant,
|
|
14
|
+
} from "../compact-mode.ts";
|
|
15
|
+
import { isMessageDisplayComponent } from "../tool/message-display.ts";
|
|
6
16
|
import { config } from "../../config/config.ts";
|
|
7
17
|
import { isLazyProxyTui } from "../../utils/fullscreen-detect.ts";
|
|
8
|
-
import { setToolTuiFullscreen } from "../show-more-hint.ts";
|
|
18
|
+
import { setToolTuiFullscreen, isCollapseHintLine } from "../tool/show-more-hint.ts";
|
|
9
19
|
import {
|
|
10
20
|
type ExpandedToolIoView,
|
|
11
21
|
getActiveIoViewFrame,
|
|
@@ -17,6 +27,7 @@ import {
|
|
|
17
27
|
import {
|
|
18
28
|
collectToolComponents,
|
|
19
29
|
extractToolFramePlacements,
|
|
30
|
+
isSgrIdleMotion,
|
|
20
31
|
isSgrLeftPress,
|
|
21
32
|
isSgrLeftRelease,
|
|
22
33
|
isToolExecutionComponent,
|
|
@@ -36,19 +47,18 @@ import {
|
|
|
36
47
|
isScrollbarColumnAt,
|
|
37
48
|
} from "./layout.ts";
|
|
38
49
|
import {
|
|
39
|
-
disableOfficialScrollToEnd,
|
|
40
50
|
fullscreenLazyTui,
|
|
41
51
|
hideScrollButton,
|
|
52
|
+
restoreOfficialScrollToEnd,
|
|
53
|
+
syncOfficialScrollToEnd,
|
|
42
54
|
isScrollBottomInput,
|
|
43
55
|
renderScrollButton,
|
|
44
56
|
resetScrollButtonState,
|
|
45
|
-
restoreOfficialScrollToEnd,
|
|
46
57
|
scheduleScrollButtonSync,
|
|
47
58
|
setScrollButtonHovered,
|
|
48
59
|
setScrollButtonVisible,
|
|
49
60
|
setScrollButtonWidget,
|
|
50
61
|
setToolMouseTui,
|
|
51
|
-
syncOfficialScrollToEnd,
|
|
52
62
|
getScrollButtonVisible,
|
|
53
63
|
getScrollButtonWidget,
|
|
54
64
|
getToolMouseTui,
|
|
@@ -74,7 +84,7 @@ type FrameToolRender = {
|
|
|
74
84
|
};
|
|
75
85
|
|
|
76
86
|
type InteractionRegion = {
|
|
77
|
-
kind: "collapsed-hint" | "expanded-card" | "show-more" | "scroll-bottom";
|
|
87
|
+
kind: "collapsed-hint" | "collapse-hint" | "expanded-card" | "show-more" | "scroll-bottom";
|
|
78
88
|
row: number;
|
|
79
89
|
startCol: number;
|
|
80
90
|
endCol: number;
|
|
@@ -89,9 +99,7 @@ const TOOL_MOUSE_WIDGET_KEY = "ccstyle-tool-mouse";
|
|
|
89
99
|
const TOOL_MOUSE_MOTION_ENABLE = "\x1b[?1003h\x1b[?1006h";
|
|
90
100
|
const TOOL_MOUSE_MOTION_DISABLE = "\x1b[?1003l";
|
|
91
101
|
const FULLSCREEN_MOTION_ENABLED = Symbol("ccstyle.fullscreen-motion-enabled");
|
|
92
|
-
const
|
|
93
|
-
type ToolMouseOwner = object;
|
|
94
|
-
const DEFAULT_TOOL_MOUSE_OWNER: ToolMouseOwner = {};
|
|
102
|
+
const DEFAULT_TOOL_MOUSE_OWNER = {};
|
|
95
103
|
export const TOOL_MOUSE_DISABLE = "\x1b[?1006l\x1b[?1003l\x1b[?1000l";
|
|
96
104
|
|
|
97
105
|
let toolMouseUi: any = null;
|
|
@@ -101,7 +109,7 @@ let toolMouseRenderPatchOriginal: ((...args: any[]) => any) | null = null;
|
|
|
101
109
|
let toolMouseRenderPatchWrapper: ((...args: any[]) => any) | null = null;
|
|
102
110
|
let toolMouseRenderPatchState: { active: boolean } | null = null;
|
|
103
111
|
let toolMouseRawWrite: ((data: string) => unknown) | null = null;
|
|
104
|
-
let toolMouseInstallationOwner:
|
|
112
|
+
let toolMouseInstallationOwner: object | null = null;
|
|
105
113
|
let fullscreenMotionTerminal: any = null;
|
|
106
114
|
let ownsFullscreenMotion = false;
|
|
107
115
|
let sessionRenderTimer: ReturnType<typeof setTimeout> | null = null;
|
|
@@ -119,6 +127,7 @@ function interactionRegionAt(packet: SgrMousePacket): InteractionRegion | null {
|
|
|
119
127
|
matches.find((region) => region.kind === "show-more") ??
|
|
120
128
|
matches.find((region) => region.kind === "scroll-bottom") ??
|
|
121
129
|
matches.find((region) => region.kind === "collapsed-hint") ??
|
|
130
|
+
matches.find((region) => region.kind === "collapse-hint") ??
|
|
122
131
|
matches.find((region) => region.kind === "expanded-card") ??
|
|
123
132
|
null
|
|
124
133
|
);
|
|
@@ -135,18 +144,26 @@ function tryOpenToolIoShowMore(region: InteractionRegion): boolean {
|
|
|
135
144
|
}
|
|
136
145
|
const title = section === "input" ? "Tool Input" : "Tool Output";
|
|
137
146
|
const content = section === "input" ? ioView.getInputBody() : ioView.getOutputBody();
|
|
138
|
-
|
|
147
|
+
// 整段就是代码时包一层围栏:弹框按 Markdown 渲染,围栏代码块才会着色
|
|
148
|
+
const fence = section === "input" ? ioView.getInputCodeFence() : undefined;
|
|
149
|
+
const preview = fence ? `\`\`\`${fence.language}\n${fence.code}\n\`\`\`` : content;
|
|
150
|
+
void showTextPreview({ ui }, title, preview || "(empty)");
|
|
139
151
|
return true;
|
|
140
152
|
}
|
|
141
153
|
|
|
142
154
|
function updateToolSummaryHover(tui: any, packet: SgrMousePacket): void {
|
|
143
|
-
if ((packet
|
|
155
|
+
if (!isSgrIdleMotion(packet)) return;
|
|
144
156
|
const region = interactionRegionAt(packet);
|
|
145
157
|
const nextScrollButtonHovered = region?.kind === "scroll-bottom";
|
|
146
158
|
const scrollButtonChanged = setScrollButtonHovered(nextScrollButtonHovered);
|
|
147
159
|
const component = region?.component;
|
|
148
160
|
const nextToolCallId = region?.kind === "collapsed-hint" ? (component?.toolCallId ?? null) : null;
|
|
149
|
-
|
|
161
|
+
// group 只在提示文字上高亮(展开卡整行都是 expanded-card,不能算 hint)。
|
|
162
|
+
const nextGroup =
|
|
163
|
+
(region?.kind === "collapsed-hint" || region?.kind === "collapse-hint") &&
|
|
164
|
+
component instanceof ToolGroupComponent
|
|
165
|
+
? component
|
|
166
|
+
: null;
|
|
150
167
|
const nextIoView = region?.kind === "show-more" ? (region.view ?? null) : null;
|
|
151
168
|
const nextIoSection = region?.kind === "show-more" ? (region.section ?? null) : null;
|
|
152
169
|
const changed = nextToolCallId !== sharedToolHoverState().toolCallId;
|
|
@@ -160,74 +177,92 @@ function updateToolSummaryHover(tui: any, packet: SgrMousePacket): void {
|
|
|
160
177
|
tui.requestRender?.();
|
|
161
178
|
}
|
|
162
179
|
|
|
163
|
-
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
180
|
+
/** 单击判定:按下与松开落在同一格(renderer 合成 click 的条件),位移与时限各留容差。 */
|
|
181
|
+
const COLLAPSE_CLICK_MOVE_TOLERANCE = 1;
|
|
182
|
+
const COLLAPSE_CLICK_MAX_MS = 600;
|
|
183
|
+
/** 扩展收起自有卡后,官方 click 可能对同一次点击再 toggle 内部工具卡,短暂吞掉。 */
|
|
184
|
+
const SUPPRESS_OFFICIAL_CARD_CLICK_MS = 300;
|
|
185
|
+
/** 官方 fullscreen 的焦点事件串:发给原 handler 可清掉选区锚点(见 tui-alt-screen)。 */
|
|
186
|
+
const FULLSCREEN_FOCUS_OUT = "\x1b[O";
|
|
169
187
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
188
|
+
let pendingCollapsePress: {
|
|
189
|
+
card: any;
|
|
190
|
+
/** 命中的最内层组件:官方工具卡由 MouseRegion 的 click 收起。 */
|
|
191
|
+
component: any;
|
|
192
|
+
col: number;
|
|
193
|
+
row: number;
|
|
194
|
+
at: number;
|
|
195
|
+
} | null = null;
|
|
196
|
+
let suppressOfficialCardClickUntil = 0;
|
|
175
197
|
|
|
176
|
-
function
|
|
177
|
-
|
|
178
|
-
const id = expandPanelIdentity(card);
|
|
179
|
-
const prev = lastExpandClick;
|
|
180
|
-
pendingExpandPress = { id };
|
|
181
|
-
if (prev && prev.id === id && now - prev.at <= EXPAND_PANEL_DOUBLE_CLICK_MS) {
|
|
182
|
-
pendingExpandPress = null;
|
|
183
|
-
lastExpandClick = null;
|
|
184
|
-
return true;
|
|
185
|
-
}
|
|
186
|
-
return false;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
function completeExpandPanelClick(): void {
|
|
190
|
-
if (!pendingExpandPress) return;
|
|
191
|
-
const click = { id: pendingExpandPress.id, at: Date.now() };
|
|
192
|
-
pendingExpandPress = null;
|
|
193
|
-
if (armExpandClickTimer) clearTimeout(armExpandClickTimer);
|
|
194
|
-
armExpandClickTimer = setTimeout(() => {
|
|
195
|
-
armExpandClickTimer = null;
|
|
196
|
-
if (pendingExpandPress) return;
|
|
197
|
-
lastExpandClick = click;
|
|
198
|
-
}, EXPAND_PANEL_CLICK_ARM_MS);
|
|
199
|
-
if (
|
|
200
|
-
typeof armExpandClickTimer === "object" &&
|
|
201
|
-
armExpandClickTimer &&
|
|
202
|
-
"unref" in armExpandClickTimer
|
|
203
|
-
) {
|
|
204
|
-
armExpandClickTimer.unref();
|
|
205
|
-
}
|
|
198
|
+
function clearPendingCollapsePress(): void {
|
|
199
|
+
pendingCollapsePress = null;
|
|
206
200
|
}
|
|
207
201
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if (
|
|
212
|
-
|
|
213
|
-
|
|
202
|
+
/** 带键拖动或滚轮:位置真的变了(超出抖动容差)就不再是单击。 */
|
|
203
|
+
function clearPendingCollapsePressOnMove(packet: SgrMousePacket): void {
|
|
204
|
+
const press = pendingCollapsePress;
|
|
205
|
+
if (!press) return;
|
|
206
|
+
if ((packet.code & 64) !== 0) {
|
|
207
|
+
pendingCollapsePress = null;
|
|
208
|
+
return;
|
|
214
209
|
}
|
|
210
|
+
if (Math.abs(packet.col - press.col) <= COLLAPSE_CLICK_MOVE_TOLERANCE) {
|
|
211
|
+
if (Math.abs(packet.row - press.row) <= COLLAPSE_CLICK_MOVE_TOLERANCE) return;
|
|
212
|
+
}
|
|
213
|
+
pendingCollapsePress = null;
|
|
215
214
|
}
|
|
216
215
|
|
|
217
|
-
function
|
|
218
|
-
// 单击也 consume,避免官方链再合成一次 press 把单击当成双击。
|
|
219
|
-
if (!isExpandPanelDoubleClick(card)) return true;
|
|
220
|
-
card.setExpanded(false);
|
|
216
|
+
function clearHoverState(): void {
|
|
221
217
|
setHoveredToolCallId(null);
|
|
222
218
|
setHoveredToolGroup(null);
|
|
223
219
|
setHoveredThinking(null);
|
|
224
220
|
setHoveredMessageDisplay(null);
|
|
225
221
|
setHoveredToolIo(null, null);
|
|
226
222
|
setHoveredCompactAssistant(null);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/** 收起一张展开卡(group 的 setExpanded 会传播到内部工具)。 */
|
|
226
|
+
function collapseExpandedCard(tui: any, card: any): void {
|
|
227
|
+
card.setExpanded(false);
|
|
228
|
+
clearHoverState();
|
|
227
229
|
card.invalidate?.();
|
|
228
|
-
tui
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
tui?.requestRender?.();
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function rememberCollapsePress(card: any, component: any, packet: SgrMousePacket): void {
|
|
234
|
+
pendingCollapsePress = { card, component, col: packet.col, row: packet.row, at: Date.now() };
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* 松手结算:只有"按下与松开在同一格"的完整单击才收起,拖动选择文本时保持展开。
|
|
239
|
+
* 官方工具卡(result 区的 MouseRegion)由 guard 在官方 click 里收起,这里必须跳过,
|
|
240
|
+
* 否则先收起会被官方 click 的 setExpanded(!expanded) 翻回来。
|
|
241
|
+
*/
|
|
242
|
+
function resolveCollapsePress(
|
|
243
|
+
tui: any,
|
|
244
|
+
packet: SgrMousePacket,
|
|
245
|
+
options: { skipOfficialCards: boolean },
|
|
246
|
+
): any {
|
|
247
|
+
const press = pendingCollapsePress;
|
|
248
|
+
pendingCollapsePress = null;
|
|
249
|
+
if (!press || packet.final !== "m") return undefined;
|
|
250
|
+
if (Math.abs(packet.col - press.col) > COLLAPSE_CLICK_MOVE_TOLERANCE) return undefined;
|
|
251
|
+
if (Math.abs(packet.row - press.row) > COLLAPSE_CLICK_MOVE_TOLERANCE) return undefined;
|
|
252
|
+
if (Date.now() - press.at > COLLAPSE_CLICK_MAX_MS) return undefined;
|
|
253
|
+
if (options.skipOfficialCards && press.component instanceof ToolExecutionComponent)
|
|
254
|
+
return undefined;
|
|
255
|
+
const card = press.card;
|
|
256
|
+
if (
|
|
257
|
+
(card instanceof ToolGroupComponent || isCompactAssistantComponent(card)) &&
|
|
258
|
+
press.component !== card
|
|
259
|
+
) {
|
|
260
|
+
// 点击落在卡内工具行:官方 click 会对同一次点击再次 toggle,吞掉它。
|
|
261
|
+
suppressOfficialCardClickUntil = Date.now() + SUPPRESS_OFFICIAL_CARD_CLICK_MS;
|
|
262
|
+
}
|
|
263
|
+
collapseExpandedCard(tui, card);
|
|
264
|
+
// 返回收起的卡:调用方只对 compact 面板清官方选区。
|
|
265
|
+
return card;
|
|
231
266
|
}
|
|
232
267
|
|
|
233
268
|
function toggleToolAtMouseClick(tui: any, packet: SgrMousePacket): boolean {
|
|
@@ -237,12 +272,15 @@ function toggleToolAtMouseClick(tui: any, packet: SgrMousePacket): boolean {
|
|
|
237
272
|
if (region.kind === "show-more") return tryOpenToolIoShowMore(region);
|
|
238
273
|
const component = region.component;
|
|
239
274
|
if (!component) return false;
|
|
240
|
-
if (region.kind === "expanded-card"
|
|
275
|
+
if (region.kind === "expanded-card" || region.kind === "collapse-hint") {
|
|
276
|
+
// regular 模式没有官方 click 合成,按下先记账,松手结算是否收起。
|
|
277
|
+
rememberCollapsePress(component, component, packet);
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
241
280
|
component.setExpanded(true);
|
|
242
|
-
|
|
281
|
+
clearPendingCollapsePress();
|
|
243
282
|
setHoveredToolCallId(null);
|
|
244
283
|
setHoveredToolGroup(null);
|
|
245
|
-
setHoveredThinking(null);
|
|
246
284
|
setHoveredToolIo(null, null);
|
|
247
285
|
component.invalidate?.();
|
|
248
286
|
tui.requestRender?.();
|
|
@@ -312,11 +350,37 @@ function releaseFullscreenToolMouseMotion(tui?: any): void {
|
|
|
312
350
|
const FULLSCREEN_VIEWPORT_PATCH = Symbol("ccstyle.fullscreen-viewport-patch");
|
|
313
351
|
const FULLSCREEN_WHEEL_SCROLL_ORIGINAL = Symbol("ccstyle.fullscreen-wheel-scroll-original");
|
|
314
352
|
|
|
353
|
+
/**
|
|
354
|
+
* diff 结果组件自带 remainder 行:声明存在时只有那一行是展开入口(正文里的同名字样不算);
|
|
355
|
+
* 未声明的组件继续用文本规则。
|
|
356
|
+
*/
|
|
357
|
+
function isCollapsedHintRow(component: any, finalLine: string): boolean {
|
|
358
|
+
const result = component?.resultRendererComponent;
|
|
359
|
+
return typeof result?.isCollapsedHintLine === "function"
|
|
360
|
+
? result.isCollapsedHintLine(finalLine)
|
|
361
|
+
: true;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* pi 0.87 给工具结果区套了 MouseRegion:整卡左键 click 都会 setExpanded。
|
|
366
|
+
* 命中该区域时官方会跳过文本选区,所以可以安全吞掉;单行摘要卡没有声明
|
|
367
|
+
* remainder 行,继续走官方整行行为。
|
|
368
|
+
*/
|
|
369
|
+
function blocksOfficialCardToggle(component: any, event: any): boolean {
|
|
370
|
+
if (event?.type !== "click" || event.button !== "left" || component?.expanded) return false;
|
|
371
|
+
const result = component?.resultRendererComponent;
|
|
372
|
+
if (typeof result?.isCollapsedHintLine !== "function") return false;
|
|
373
|
+
const lines = component.render?.(Math.max(1, Math.floor(Number(event.width) || 0)));
|
|
374
|
+
const line = Array.isArray(lines) ? lines[event.y] : undefined;
|
|
375
|
+
return typeof line === "string" && !result.isCollapsedHintLine(line);
|
|
376
|
+
}
|
|
377
|
+
|
|
315
378
|
/**
|
|
316
379
|
* 官方 fullscreen 工具卡点击:collapsed hint 单击展开
|
|
317
|
-
* (有且仅保持一个展开:展开前收起其他工具卡),expanded
|
|
318
|
-
*
|
|
319
|
-
*
|
|
380
|
+
* (有且仅保持一个展开:展开前收起其他工具卡),expanded 卡放行官方 press,
|
|
381
|
+
* 位置不变的松手才收起(官方卡经 guard,思考/group/compact 自有卡由扩展结算),
|
|
382
|
+
* 拖动选择文本时不收起;截断头 show-more 单击打开全量预览;回到底部按钮 scrollToBottom。
|
|
383
|
+
* 滚动条列、含 OSC8 链接行、非工具区域、折叠卡正文放行官方。
|
|
320
384
|
*/
|
|
321
385
|
function handleFullscreenToolClick(tui: any, packet: SgrMousePacket): boolean {
|
|
322
386
|
const layout = tui.currentLayout;
|
|
@@ -334,7 +398,10 @@ function handleFullscreenToolClick(tui: any, packet: SgrMousePacket): boolean {
|
|
|
334
398
|
const target = componentAtLocalRow(hit.box.component, hit.localRow, contentWidth);
|
|
335
399
|
if (!target) return false;
|
|
336
400
|
const component = target.component;
|
|
337
|
-
|
|
401
|
+
// compact 展开面板内命中时 owner 是面板:收起对象与记账对象都归面板,
|
|
402
|
+
// 否则 skipOfficialCards 会把内部工具当成官方卡跳过。
|
|
403
|
+
const card = target.group ?? target.owner ?? component;
|
|
404
|
+
const pressComponent = target.owner ?? component;
|
|
338
405
|
// 回到底部按钮:按组件引用命中,不依赖渲染行缓存。
|
|
339
406
|
if (getScrollButtonVisible() && component === getScrollButtonWidget()) {
|
|
340
407
|
tui.scrollToBottom?.();
|
|
@@ -352,20 +419,38 @@ function handleFullscreenToolClick(tui: any, packet: SgrMousePacket): boolean {
|
|
|
352
419
|
if (!component.expanded) {
|
|
353
420
|
// collapsed 仅按钮文本可展开,不能把同一行正文/留白变成点击区。
|
|
354
421
|
const hint = collapsedHintHitbox(line);
|
|
355
|
-
|
|
422
|
+
const onHint = Boolean(
|
|
423
|
+
hint &&
|
|
424
|
+
packet.col >= hint.startCol &&
|
|
425
|
+
packet.col <= hint.endCol &&
|
|
426
|
+
isCollapsedHintRow(component, line),
|
|
427
|
+
);
|
|
428
|
+
if (!onHint) {
|
|
429
|
+
// 面板内非提示区(工具卡标题/摘要行、thinking 预览正文):单击收起整块面板。
|
|
430
|
+
if (target.owner) rememberCollapsePress(target.owner, target.owner, packet);
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
356
433
|
// single-expand:展开前收起其他已展开工具卡/group。
|
|
357
434
|
const others: any[] = [];
|
|
358
435
|
collectFullscreenToolCards(hit.box.component, others);
|
|
359
436
|
for (const other of others) {
|
|
360
437
|
if (other !== component && other.expanded) {
|
|
361
|
-
// 展开 round
|
|
362
|
-
|
|
438
|
+
// 展开 round 卡内 thinking/工具时,外层 compact 卡是它的容器,不能收起。
|
|
439
|
+
// 面板挂在摘要行时,anchor 与摘要行是同一张外层卡,点内部工具不能收起它。
|
|
440
|
+
if (
|
|
441
|
+
(isThinking || isTool) &&
|
|
442
|
+
isCompactAssistantComponent(other) &&
|
|
443
|
+
(other === target.owner || other === target.owner?.roundAnchor)
|
|
444
|
+
)
|
|
445
|
+
continue;
|
|
363
446
|
other.setExpanded(false);
|
|
364
447
|
other.invalidate?.();
|
|
365
448
|
}
|
|
366
449
|
}
|
|
450
|
+
// 展开 round 卡内工具时,让 compact 的强制折叠放行它(非 round 内工具为空操作)。
|
|
451
|
+
if (isTool) markCompactRoundToolExpanded(component);
|
|
367
452
|
component.setExpanded(true);
|
|
368
|
-
|
|
453
|
+
clearPendingCollapsePress();
|
|
369
454
|
} else {
|
|
370
455
|
// 普通工具截断头 show-more:打开全量预览(不收起)。
|
|
371
456
|
const view = isTool ? component.resultRendererComponent : null;
|
|
@@ -373,7 +458,7 @@ function handleFullscreenToolClick(tui: any, packet: SgrMousePacket): boolean {
|
|
|
373
458
|
const plain = stripTerminalSequencesPreservingLayout(line);
|
|
374
459
|
const section = view.matchShowMoreLine(plain);
|
|
375
460
|
if (section) {
|
|
376
|
-
|
|
461
|
+
clearPendingCollapsePress();
|
|
377
462
|
const box = view.showMoreHitbox(plain);
|
|
378
463
|
return tryOpenToolIoShowMore({
|
|
379
464
|
kind: "show-more",
|
|
@@ -386,17 +471,20 @@ function handleFullscreenToolClick(tui: any, packet: SgrMousePacket): boolean {
|
|
|
386
471
|
});
|
|
387
472
|
}
|
|
388
473
|
}
|
|
389
|
-
//
|
|
390
|
-
|
|
474
|
+
// 其余放行官方:选区、OSC8 链接与 click 合成都交给 renderer。
|
|
475
|
+
// 完整单击的收起:官方卡由 guard 处理,自有卡在松手时结算。
|
|
476
|
+
rememberCollapsePress(card, pressComponent, packet);
|
|
477
|
+
return false;
|
|
391
478
|
}
|
|
392
|
-
// 点击后清 hover
|
|
479
|
+
// 点击后清 hover 高亮。只 invalidate 点中的组件(或它所在的 group),
|
|
480
|
+
// 不要动 owner 面板:面板 invalidate 会连带重跑 updateContent,重建 thinking 实例。
|
|
393
481
|
setHoveredToolCallId(null);
|
|
394
482
|
setHoveredToolGroup(null);
|
|
395
483
|
setHoveredThinking(null);
|
|
396
484
|
setHoveredMessageDisplay(null);
|
|
397
485
|
setHoveredToolIo(null, null);
|
|
398
486
|
setHoveredCompactAssistant(null);
|
|
399
|
-
|
|
487
|
+
(target.group ?? component).invalidate?.();
|
|
400
488
|
tui.requestRender?.();
|
|
401
489
|
return true;
|
|
402
490
|
}
|
|
@@ -406,7 +494,7 @@ function handleFullscreenToolClick(tui: any, packet: SgrMousePacket): boolean {
|
|
|
406
494
|
* expanded 卡截断头 show-more、回到底部按钮。motion 不 consume,官方链照常。
|
|
407
495
|
*/
|
|
408
496
|
function handleFullscreenToolHover(tui: any, packet: SgrMousePacket): void {
|
|
409
|
-
if (packet
|
|
497
|
+
if (!isSgrIdleMotion(packet)) return;
|
|
410
498
|
const layout = tui.currentLayout;
|
|
411
499
|
if (!layout?.root) return;
|
|
412
500
|
const x = packet.col - 1;
|
|
@@ -500,17 +588,33 @@ function patchFullscreenViewportInput(tui: any): void {
|
|
|
500
588
|
if (packets && tui.hasOverlay?.() && hasActiveTextPreview()) return undefined;
|
|
501
589
|
if (packets && !tui.hasOverlay?.()) {
|
|
502
590
|
for (const packet of packets) {
|
|
503
|
-
if (isSgrLeftRelease(packet))
|
|
591
|
+
if (isSgrLeftRelease(packet)) {
|
|
592
|
+
// 只给 compact 面板清选区:自有面板收起会重排布局,官方选区锚点
|
|
593
|
+
// 还停在旧布局上,同一次 release 会结算出多行高亮。
|
|
594
|
+
if (
|
|
595
|
+
isCompactAssistantComponent(
|
|
596
|
+
resolveCollapsePress(tui, packet, { skipOfficialCards: true }),
|
|
597
|
+
)
|
|
598
|
+
) {
|
|
599
|
+
try {
|
|
600
|
+
Reflect.apply(original, this, [FULLSCREEN_FOCUS_OUT]);
|
|
601
|
+
} catch {
|
|
602
|
+
/* 老版本没有选区状态 */
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
} else if (!isSgrLeftPress(packet) && !isSgrIdleMotion(packet))
|
|
606
|
+
clearPendingCollapsePressOnMove(packet);
|
|
504
607
|
if (isSgrLeftPress(packet) && handleFullscreenToolClick(tui, packet)) {
|
|
505
608
|
return { consume: true };
|
|
506
609
|
}
|
|
507
|
-
|
|
610
|
+
// 仅无按键移动走 hover;左键拖动(文本多选)放行官方选区,避免每像素命中+重绘。
|
|
611
|
+
if (isSgrIdleMotion(packet)) {
|
|
508
612
|
handleFullscreenToolHover(tui, packet);
|
|
509
613
|
}
|
|
510
614
|
}
|
|
511
615
|
}
|
|
512
616
|
}
|
|
513
|
-
return
|
|
617
|
+
return Reflect.apply(original, this, [data]);
|
|
514
618
|
};
|
|
515
619
|
}
|
|
516
620
|
|
|
@@ -574,7 +678,11 @@ function buildInteractionFrame(
|
|
|
574
678
|
const line = placement.finalLine;
|
|
575
679
|
if (!component.expanded) {
|
|
576
680
|
const box = collapsedHintHitbox(line);
|
|
577
|
-
if (
|
|
681
|
+
if (
|
|
682
|
+
box &&
|
|
683
|
+
COLLAPSED_TOOL_SUMMARY.test(stripTerminalSequences(line)) &&
|
|
684
|
+
isCollapsedHintRow(component, line)
|
|
685
|
+
) {
|
|
578
686
|
regions.push({ kind: "collapsed-hint", row: finalRow, ...box, component });
|
|
579
687
|
}
|
|
580
688
|
continue;
|
|
@@ -608,6 +716,11 @@ function buildInteractionFrame(
|
|
|
608
716
|
if (placement.componentRow < cardStart) continue;
|
|
609
717
|
const finalRow = lineIndexToScreenRow(placement.lineIndex);
|
|
610
718
|
if (finalRow >= 1 && finalRow <= visibleRows) {
|
|
719
|
+
// 展开态的 ↑ Collapse 提示单独成区:hover 高亮 hint,点击仍收起整卡。
|
|
720
|
+
const hintBox = collapsedHintHitbox(placement.finalLine);
|
|
721
|
+
if (hintBox && isCollapseHintLine(stripTerminalSequences(placement.finalLine))) {
|
|
722
|
+
regions.push({ kind: "collapse-hint", row: finalRow, ...hintBox, component });
|
|
723
|
+
}
|
|
611
724
|
regions.push({
|
|
612
725
|
kind: "expanded-card",
|
|
613
726
|
row: finalRow,
|
|
@@ -650,7 +763,7 @@ function wrapToolRendersForFrame(
|
|
|
650
763
|
) {
|
|
651
764
|
const boxOriginal = box.render;
|
|
652
765
|
const boxWrapped = function (this: any, ...boxArgs: any[]) {
|
|
653
|
-
const boxLines =
|
|
766
|
+
const boxLines = Reflect.apply(boxOriginal, this, boxArgs);
|
|
654
767
|
if (Array.isArray(boxLines)) contentBoxLines = boxLines.length;
|
|
655
768
|
return boxLines;
|
|
656
769
|
};
|
|
@@ -660,7 +773,7 @@ function wrapToolRendersForFrame(
|
|
|
660
773
|
}
|
|
661
774
|
}
|
|
662
775
|
try {
|
|
663
|
-
const lines =
|
|
776
|
+
const lines = Reflect.apply(originalRender, this, renderArgs);
|
|
664
777
|
if (!Array.isArray(lines)) return lines;
|
|
665
778
|
renderedTools.push({
|
|
666
779
|
component,
|
|
@@ -736,10 +849,10 @@ function patchToolMouseMotionAfterRender(tui: any): void {
|
|
|
736
849
|
const rawWrite = typeof terminal?.write === "function" ? terminal.write : undefined;
|
|
737
850
|
if (typeof original !== "function") return;
|
|
738
851
|
|
|
739
|
-
toolMouseRawWrite = rawWrite ? (data) =>
|
|
852
|
+
toolMouseRawWrite = rawWrite ? (data) => Reflect.apply(rawWrite, terminal, [data]) : null;
|
|
740
853
|
const patchState = { active: true };
|
|
741
854
|
const wrapper = function (this: any, ...args: any[]) {
|
|
742
|
-
if (!patchState.active) return
|
|
855
|
+
if (!patchState.active) return Reflect.apply(original, this, args);
|
|
743
856
|
const renderedTools: FrameToolRender[] = [];
|
|
744
857
|
const idToComponent = new Map<number, any>();
|
|
745
858
|
const frame: IoViewFrameState = {
|
|
@@ -756,7 +869,7 @@ function patchToolMouseMotionAfterRender(tui: any): void {
|
|
|
756
869
|
let sawTuiRender = false;
|
|
757
870
|
if (originalTuiRender) {
|
|
758
871
|
const wrappedTuiRender = function (this: any, ...renderArgs: any[]) {
|
|
759
|
-
const lines =
|
|
872
|
+
const lines = Reflect.apply(originalTuiRender, this, renderArgs);
|
|
760
873
|
if (!Array.isArray(lines)) return lines;
|
|
761
874
|
sawTuiRender = true;
|
|
762
875
|
const extracted = extractToolFramePlacements(
|
|
@@ -773,7 +886,7 @@ function patchToolMouseMotionAfterRender(tui: any): void {
|
|
|
773
886
|
const previousFrame = getActiveIoViewFrame();
|
|
774
887
|
setActiveIoViewFrame(frame);
|
|
775
888
|
try {
|
|
776
|
-
const result =
|
|
889
|
+
const result = Reflect.apply(original, this, args);
|
|
777
890
|
succeeded = true;
|
|
778
891
|
// Test harnesses may paint via doRender without tui.render; recover markers there.
|
|
779
892
|
if (!sawTuiRender && Array.isArray(this.previousLines)) {
|
|
@@ -837,8 +950,15 @@ function handleToolMouseInput(data: string): { consume: true } | undefined {
|
|
|
837
950
|
let consumed = false;
|
|
838
951
|
for (const packet of packets) {
|
|
839
952
|
updateToolSummaryHover(getToolMouseTui(), packet);
|
|
840
|
-
if (isSgrLeftRelease(packet))
|
|
841
|
-
|
|
953
|
+
if (isSgrLeftRelease(packet)) {
|
|
954
|
+
resolveCollapsePress(getToolMouseTui(), packet, { skipOfficialCards: false });
|
|
955
|
+
continue;
|
|
956
|
+
}
|
|
957
|
+
if (!isSgrLeftPress(packet)) {
|
|
958
|
+
// 带键拖动或滚轮:位置变了就不再是单击。
|
|
959
|
+
if (!isSgrIdleMotion(packet)) clearPendingCollapsePressOnMove(packet);
|
|
960
|
+
continue;
|
|
961
|
+
}
|
|
842
962
|
if (toggleToolAtMouseClick(getToolMouseTui(), packet)) {
|
|
843
963
|
consumed = true;
|
|
844
964
|
}
|
|
@@ -851,10 +971,10 @@ function handleToolMouseInput(data: string): { consume: true } | undefined {
|
|
|
851
971
|
}
|
|
852
972
|
|
|
853
973
|
export function teardownToolMouseInteraction(
|
|
854
|
-
owner:
|
|
974
|
+
owner: object = toolMouseInstallationOwner ?? DEFAULT_TOOL_MOUSE_OWNER,
|
|
855
975
|
): void {
|
|
856
|
-
const
|
|
857
|
-
if (
|
|
976
|
+
const current = patchRegistry.get<object>(TOOL_MOUSE_OWNER_KEY);
|
|
977
|
+
if (current && current !== owner) return;
|
|
858
978
|
if (sessionRenderTimer) {
|
|
859
979
|
clearTimeout(sessionRenderTimer);
|
|
860
980
|
sessionRenderTimer = null;
|
|
@@ -867,7 +987,9 @@ export function teardownToolMouseInteraction(
|
|
|
867
987
|
setHoveredMessageDisplay(null);
|
|
868
988
|
setHoveredToolIo(null, null);
|
|
869
989
|
setHoveredCompactAssistant(null);
|
|
870
|
-
|
|
990
|
+
releaseToolCardMouseGuard();
|
|
991
|
+
clearPendingCollapsePress();
|
|
992
|
+
suppressOfficialCardClickUntil = 0;
|
|
871
993
|
try {
|
|
872
994
|
if (isLazyProxyTui(getToolMouseTui())) releaseFullscreenToolMouseMotion(getToolMouseTui());
|
|
873
995
|
else getToolMouseTui()?.terminal?.write?.(TOOL_MOUSE_DISABLE);
|
|
@@ -885,7 +1007,7 @@ export function teardownToolMouseInteraction(
|
|
|
885
1007
|
resetScrollButtonState();
|
|
886
1008
|
setToolMouseTui(null);
|
|
887
1009
|
toolMouseUi = null;
|
|
888
|
-
|
|
1010
|
+
patchRegistry.dispose(TOOL_MOUSE_OWNER_KEY, owner);
|
|
889
1011
|
if (toolMouseInstallationOwner === owner) toolMouseInstallationOwner = null;
|
|
890
1012
|
}
|
|
891
1013
|
|
|
@@ -901,9 +1023,66 @@ export function resetToolHoverState(): void {
|
|
|
901
1023
|
releaseFullscreenToolMouseMotion(getToolMouseTui());
|
|
902
1024
|
}
|
|
903
1025
|
|
|
1026
|
+
/**
|
|
1027
|
+
* pi 0.87 起工具卡结果区自带 MouseRegion,整卡左键 click 都会 setExpanded。
|
|
1028
|
+
* ccstyle 的多行折叠卡(rich diff)只允许声明的 remainder 行展开,
|
|
1029
|
+
* 其余位置直接吞掉 click,避免官方把 diff 正文当展开入口。
|
|
1030
|
+
* 0.84 及更早没有 handleMouse,安装时跳过。
|
|
1031
|
+
*/
|
|
1032
|
+
const TOOL_CARD_MOUSE_GUARD_KEY = Symbol.for("pi.ccstyle.tool-card-mouse-guard");
|
|
1033
|
+
|
|
1034
|
+
type ToolCardMouseGuard = {
|
|
1035
|
+
prototype: any;
|
|
1036
|
+
original: (event: any) => any;
|
|
1037
|
+
wrapper: (event: any) => any;
|
|
1038
|
+
};
|
|
1039
|
+
|
|
1040
|
+
/** 官方 click 落在展开卡上:同一 group 的任意内部工具行都收起整个 group。 */
|
|
1041
|
+
function collapseExpandedCardFromOfficialClick(component: any): void {
|
|
1042
|
+
if (typeof component?.setExpanded !== "function") return;
|
|
1043
|
+
const group = component?.[TOOL_GROUPING_PARENT_KEY];
|
|
1044
|
+
collapseExpandedCard(getToolMouseTui(), group instanceof ToolGroupComponent ? group : component);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
function installToolCardMouseGuard(): void {
|
|
1048
|
+
const prototype = (ToolExecutionComponent as any)?.prototype;
|
|
1049
|
+
if (typeof prototype?.handleMouse !== "function") return;
|
|
1050
|
+
const previous = (globalThis as any)[TOOL_CARD_MOUSE_GUARD_KEY] as ToolCardMouseGuard | undefined;
|
|
1051
|
+
if (previous && previous.prototype === prototype && prototype.handleMouse === previous.wrapper)
|
|
1052
|
+
return;
|
|
1053
|
+
// 每次取当前值作为下游,可能是别的扩展的包装。
|
|
1054
|
+
const original = prototype.handleMouse;
|
|
1055
|
+
const wrapper = function (this: any, event: any) {
|
|
1056
|
+
if (event?.type === "click" && event.button === "left") {
|
|
1057
|
+
// 扩展刚收起过自有卡:这次 click 属于同一次单击,吞掉避免内部工具被翻回展开。
|
|
1058
|
+
if (suppressOfficialCardClickUntil && Date.now() <= suppressOfficialCardClickUntil) {
|
|
1059
|
+
suppressOfficialCardClickUntil = 0;
|
|
1060
|
+
if (this?.expanded) collapseExpandedCardFromOfficialClick(this);
|
|
1061
|
+
return { handled: true };
|
|
1062
|
+
}
|
|
1063
|
+
// 展开卡整卡 click:接管官方 toggle,改为收起(group 内部工具行收起整个 group)。
|
|
1064
|
+
if (this?.expanded && typeof this.setExpanded === "function") {
|
|
1065
|
+
collapseExpandedCardFromOfficialClick(this);
|
|
1066
|
+
return { handled: true };
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
if (blocksOfficialCardToggle(this, event)) return { handled: true };
|
|
1070
|
+
return original.call(this, event);
|
|
1071
|
+
};
|
|
1072
|
+
prototype.handleMouse = wrapper;
|
|
1073
|
+
(globalThis as any)[TOOL_CARD_MOUSE_GUARD_KEY] = { prototype, original, wrapper };
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
function releaseToolCardMouseGuard(): void {
|
|
1077
|
+
const guard = (globalThis as any)[TOOL_CARD_MOUSE_GUARD_KEY] as ToolCardMouseGuard | undefined;
|
|
1078
|
+
if (!guard) return;
|
|
1079
|
+
if (guard.prototype?.handleMouse === guard.wrapper) guard.prototype.handleMouse = guard.original;
|
|
1080
|
+
(globalThis as any)[TOOL_CARD_MOUSE_GUARD_KEY] = undefined;
|
|
1081
|
+
}
|
|
1082
|
+
|
|
904
1083
|
export function installToolMouseInteraction(
|
|
905
1084
|
ctx: any,
|
|
906
|
-
owner:
|
|
1085
|
+
owner: object = DEFAULT_TOOL_MOUSE_OWNER,
|
|
907
1086
|
): void {
|
|
908
1087
|
teardownToolMouseInteraction(toolMouseInstallationOwner ?? owner);
|
|
909
1088
|
if (ctx?.mode !== "tui" || !ctx?.hasUI) return;
|
|
@@ -911,7 +1090,8 @@ export function installToolMouseInteraction(
|
|
|
911
1090
|
return;
|
|
912
1091
|
|
|
913
1092
|
toolMouseInstallationOwner = owner;
|
|
914
|
-
(
|
|
1093
|
+
patchRegistry.install(TOOL_MOUSE_OWNER_KEY, owner);
|
|
1094
|
+
installToolCardMouseGuard();
|
|
915
1095
|
setHoveredToolCallId(null);
|
|
916
1096
|
toolMouseUi = ctx.ui;
|
|
917
1097
|
// 0.84+ 的 tui 是惰性 Proxy:regular 保留原生 scrollback;fullscreen
|
|
@@ -920,14 +1100,14 @@ export function installToolMouseInteraction(
|
|
|
920
1100
|
setToolMouseTui(tui);
|
|
921
1101
|
setToolTuiFullscreen(fullscreenLazyTui(tui));
|
|
922
1102
|
if (isLazyProxyTui(tui)) {
|
|
923
|
-
syncOfficialScrollToEnd(tui);
|
|
924
1103
|
patchFullscreenViewportInput(tui);
|
|
925
1104
|
ensureFullscreenToolMouseMotion(tui);
|
|
1105
|
+
syncOfficialScrollToEnd(tui);
|
|
926
1106
|
setScrollButtonWidget({
|
|
927
1107
|
render: (width: number) => {
|
|
928
|
-
syncOfficialScrollToEnd(tui);
|
|
929
1108
|
patchFullscreenViewportInput(tui);
|
|
930
1109
|
ensureFullscreenToolMouseMotion(tui);
|
|
1110
|
+
syncOfficialScrollToEnd(tui);
|
|
931
1111
|
return renderScrollButton(width, theme);
|
|
932
1112
|
},
|
|
933
1113
|
invalidate() {},
|
|
@@ -969,10 +1149,3 @@ export function scheduleSessionRender(refresh?: () => void): void {
|
|
|
969
1149
|
tui.requestRender(true);
|
|
970
1150
|
}, 0);
|
|
971
1151
|
}
|
|
972
|
-
|
|
973
|
-
export {
|
|
974
|
-
hoveredToolCallId,
|
|
975
|
-
isToolCallHovered,
|
|
976
|
-
setHoveredToolGroup,
|
|
977
|
-
setHoveredToolIo,
|
|
978
|
-
} from "./hover.ts";
|