@tian.zuo/pi-beautify-style 0.0.0-stage → 0.2.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/ATTRIBUTION.md +49 -0
- package/CHANGELOG.md +144 -0
- package/LICENSE +21 -0
- package/README.md +127 -2
- package/extensions/config/config.ts +200 -0
- package/extensions/feature/agent-summary/core.ts +160 -0
- package/extensions/feature/agent-summary/index.ts +30 -0
- package/extensions/feature/compact-thinking.ts +1303 -0
- package/extensions/feature/context.ts +973 -0
- package/extensions/feature/reference/index.ts +532 -0
- package/extensions/feature/reference/session.ts +341 -0
- package/extensions/feature/reference/subagent.ts +265 -0
- package/extensions/feature/shell/flush-docked-bash.ts +55 -0
- package/extensions/feature/shell/footer-currency.ts +29 -0
- package/extensions/feature/shell/footer-layout.ts +82 -0
- package/extensions/feature/shell/footer.ts +595 -0
- package/extensions/feature/shell/git-stats.ts +162 -0
- package/extensions/feature/shell/mcp-chip.ts +136 -0
- package/extensions/feature/shell/prompt-editor.ts +99 -0
- package/extensions/feature/shell/token-rate.ts +224 -0
- package/extensions/feature/shell/working-message.ts +238 -0
- package/extensions/index.ts +42 -0
- package/extensions/renderer/compact-mode.ts +2504 -0
- package/extensions/renderer/default-mode.ts +434 -0
- package/extensions/renderer/index.ts +261 -0
- package/extensions/renderer/markdown-enhance.ts +214 -0
- package/extensions/renderer/mouse/hover.ts +152 -0
- package/extensions/renderer/mouse/interaction.ts +1230 -0
- package/extensions/renderer/mouse/layout.ts +192 -0
- package/extensions/renderer/mouse/packets.ts +95 -0
- package/extensions/renderer/mouse/scroll.ts +325 -0
- package/extensions/renderer/mouse/sticky-prompt.ts +474 -0
- package/extensions/renderer/tool/ask-user-question.ts +185 -0
- package/extensions/renderer/tool/ccstyle-tool.ts +489 -0
- package/extensions/renderer/tool/codemode.ts +417 -0
- package/extensions/renderer/tool/diff/ATTRIBUTION.md +28 -0
- package/extensions/renderer/tool/diff/ansi-utils.ts +113 -0
- package/extensions/renderer/tool/diff/diff-component.ts +125 -0
- package/extensions/renderer/tool/diff/diff-edit-render.ts +280 -0
- package/extensions/renderer/tool/diff/diff-header.ts +136 -0
- package/extensions/renderer/tool/diff/diff-highlight.ts +151 -0
- package/extensions/renderer/tool/diff/diff-inline.ts +324 -0
- package/extensions/renderer/tool/diff/diff-layout.ts +762 -0
- package/extensions/renderer/tool/diff/diff-limits.ts +153 -0
- package/extensions/renderer/tool/diff/diff-palette.ts +441 -0
- package/extensions/renderer/tool/diff/diff-parse.ts +535 -0
- package/extensions/renderer/tool/diff/diff-presentation.ts +111 -0
- package/extensions/renderer/tool/diff/diff-renderer.ts +27 -0
- package/extensions/renderer/tool/diff/diff-text.ts +45 -0
- package/extensions/renderer/tool/diff/diff-write-render.ts +594 -0
- package/extensions/renderer/tool/diff/index.ts +187 -0
- package/extensions/renderer/tool/diff/line-width-safety.ts +93 -0
- package/extensions/renderer/tool/diff/shiki-highlight.ts +116 -0
- package/extensions/renderer/tool/diff/write-execution.ts +113 -0
- package/extensions/renderer/tool/grouping.ts +782 -0
- package/extensions/renderer/tool/mcp-title.ts +39 -0
- package/extensions/renderer/tool/message-display.ts +174 -0
- package/extensions/renderer/tool/names.ts +490 -0
- package/extensions/renderer/tool/result.ts +204 -0
- package/extensions/renderer/tool/tool-io.ts +769 -0
- package/extensions/renderer/tool/tool-state.ts +187 -0
- package/extensions/renderer/transcript-refresh.ts +73 -0
- package/extensions/utils/ansi-color.ts +44 -0
- package/extensions/utils/ansi-text.ts +77 -0
- package/extensions/utils/component-tree.ts +34 -0
- package/extensions/utils/format.ts +37 -0
- package/extensions/utils/fullscreen-detect.ts +179 -0
- package/extensions/utils/patch-keys.ts +127 -0
- package/extensions/utils/sgr-mouse.ts +70 -0
- package/extensions/utils/tool-loading-icon.ts +9 -0
- package/extensions/utils/tool-result-sanitize.ts +24 -0
- package/index.ts +67 -0
- package/lib/prompt.ts +27 -0
- package/package.json +55 -3
package/ATTRIBUTION.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Attribution
|
|
2
|
+
|
|
3
|
+
`pi-beautify-style` is a fork. Most of the code under `extensions/` is vendored
|
|
4
|
+
verbatim from upstream projects and then adapted to this monorepo.
|
|
5
|
+
|
|
6
|
+
## pi-cc-extensions
|
|
7
|
+
|
|
8
|
+
The Claude Code-style TUI — tool cards, compact mode, rich diffs, footer chips,
|
|
9
|
+
`/context`, session/subagent references, mouse interaction, and the bundled
|
|
10
|
+
Rendering approach — comes from
|
|
11
|
+
[minuque/pi-cc-extensions](https://github.com/minuque/pi-cc-extensions)
|
|
12
|
+
(commit `4b93074`), Copyright (c) 2026 minuque, used under the MIT License.
|
|
13
|
+
|
|
14
|
+
Local changes are marked with comments in the affected files. They are:
|
|
15
|
+
|
|
16
|
+
- `ask_user` (from `@tian.zuo/pi-ask-user`) reuses the `ask_user_question`
|
|
17
|
+
card, including its `choice: { label, wasCustom }` answer shape.
|
|
18
|
+
- `terminal_wait`, `terminal_stop`, and `terminal_log_read` (from
|
|
19
|
+
`@tian.zuo/pi-background-terminals`) reuse the shell card and timing path.
|
|
20
|
+
- The footer treats `setStatus("usage")` — the key used by
|
|
21
|
+
`@tian.zuo/pi-usage` — as the usage chip.
|
|
22
|
+
|
|
23
|
+
## pi-tool-display
|
|
24
|
+
|
|
25
|
+
The rich diff renderer under `extensions/renderer/tool/diff/` is adapted from
|
|
26
|
+
[MasuRii/pi-tool-display](https://github.com/MasuRii/pi-tool-display) at commit
|
|
27
|
+
`91cef7580078371f8dc49a8607222807ad6a424d`, Copyright (c) MasuRii and
|
|
28
|
+
pi-tool-display contributors, used under the MIT License. The upstream notice
|
|
29
|
+
is reproduced in `extensions/renderer/tool/diff/ATTRIBUTION.md`.
|
|
30
|
+
|
|
31
|
+
## MIT License
|
|
32
|
+
|
|
33
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
34
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
35
|
+
in the Software without restriction, including without limitation the rights
|
|
36
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
37
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
38
|
+
furnished to do so, subject to the following conditions:
|
|
39
|
+
|
|
40
|
+
The above copyright notice and this permission notice shall be included in all
|
|
41
|
+
copies or substantial portions of the Software.
|
|
42
|
+
|
|
43
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
44
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
45
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
46
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
47
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
48
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
49
|
+
SOFTWARE.
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# @tian.zuo/pi-beautify-style
|
|
2
|
+
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#176](https://github.com/TianZuo555/pi-extensions/pull/176) [`69f9f0e`](https://github.com/TianZuo555/pi-extensions/commit/69f9f0eba56e00d7b29ca28d6f757da5018ac542) Thanks [@TianZuo555](https://github.com/TianZuo555)! - First published release.
|
|
8
|
+
|
|
9
|
+
`@tian.zuo/pi-beautify-style` replaces `@tian.zuo/pi-compact-output` with a vendored Claude Code-style TUI: tool cards, rich diffs, a status footer, `/context`, `@session` and `@subagent` references, and integrations for this repository's `ask_user`, background-terminal, and usage extensions.
|
|
10
|
+
|
|
11
|
+
The rendering stack comes from `minuque/pi-cc-extensions` (MIT, see `ATTRIBUTION.md`), so this repository owns it. Install this package instead of `npm:pi-cc-extensions` — both patch `ToolExecutionComponent` and must not run together.
|
|
12
|
+
|
|
13
|
+
There is no runtime configuration. Render mode, diff layout, footer chips, and the reasoning preview length are source constants in `extensions/config/config.ts`. The package ships no theme files; every color comes from the active Pi theme.
|
|
14
|
+
|
|
15
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Remove runtime configuration.
|
|
16
|
+
|
|
17
|
+
The package no longer has a settings surface. Gone:
|
|
18
|
+
|
|
19
|
+
- the `/ccstyle` command (`on` / `compact` / `off` / `status` / `panel`)
|
|
20
|
+
- the six-tab settings panel (`extensions/config/panel.ts`)
|
|
21
|
+
- `~/.pi/agent/pi-beautify-style.json`, including the migration from
|
|
22
|
+
`pi-cc-extensions.json` and `claude-code-style.json`
|
|
23
|
+
|
|
24
|
+
Every knob — render mode, diff layout, footer chips, reasoning preview length,
|
|
25
|
+
`@` reference features — is now a source constant in
|
|
26
|
+
`extensions/config/config.ts`. Edit that file and restart Pi to change
|
|
27
|
+
behavior. Any existing `pi-beautify-style.json` is ignored and can be deleted.
|
|
28
|
+
|
|
29
|
+
Render mode is fixed to `"on"` (Claude Code tool cards with rich diffs).
|
|
30
|
+
|
|
31
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Remove the custom startup header.
|
|
32
|
+
|
|
33
|
+
The package no longer paints its own banner over Pi's built-in header, and the `showStartupHeader` option is gone from the config file, the `/ccstyle panel`, and `/ccstyle status`. Any local `showStartupHeader` value is ignored on load.
|
|
34
|
+
|
|
35
|
+
This frees the `ctx.ui.setHeader()` slot for whichever extension the user actually wants there — this repo's `welcome` extension, for example — instead of competing with it.
|
|
36
|
+
|
|
37
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Remove the bundled `cc-dark` and `cc-light` themes.
|
|
38
|
+
|
|
39
|
+
The package now renders entirely through the active Pi theme. Every color —
|
|
40
|
+
tool cards, diffs, reasoning, footer chips — comes from the theme's slots
|
|
41
|
+
(`toolSuccessBg`, `toolErrorBg`, `dim`, `accent`, …), so whichever theme you run
|
|
42
|
+
applies as-is.
|
|
43
|
+
|
|
44
|
+
`package.json` no longer declares `pi.themes` or ships a `themes/` directory.
|
|
45
|
+
If you selected `cc-dark` or `cc-light` from this package, switch to another
|
|
46
|
+
theme; those two names will not resolve after upgrading.
|
|
47
|
+
|
|
48
|
+
### Patch Changes
|
|
49
|
+
|
|
50
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Address three review findings.
|
|
51
|
+
|
|
52
|
+
**Narrow terminals.** The footer prepended its editor-alignment indent before clamping the payload, so a width smaller than the indent still emitted at least one payload column plus the full indent — `render(1)` produced three columns. `indentFooterLine` now clamps the indent to the width first and gives the payload whatever remains, down to zero.
|
|
53
|
+
|
|
54
|
+
**Prompt separation.** The `@session:[...]` header, including the instruction that referenced sessions are untrusted context, was inlined in `extensions/feature/reference/session.ts`. It moved to `lib/prompt.ts` as `SESSION_REFERENCE_HEADER`, next to the subagent delegation text, so all model-facing wording lives in one auditable place.
|
|
55
|
+
|
|
56
|
+
**Main-screen patch cleanup.** `installMainScreenDoRenderPatch` patched `TuiMainScreen.prototype.applyLineResets` but returned nothing, so unloading the extension left the stale-scrollback behavior active until the process restarted. It now returns an ownership-guarded disposer, called from `session_shutdown`, that restores the original method only when the slot still holds this installation.
|
|
57
|
+
|
|
58
|
+
- [#193](https://github.com/TianZuo555/pi-extensions/pull/193) [`b49c918`](https://github.com/TianZuo555/pi-extensions/commit/b49c9184ecc729eb60fe69800b8086af19cecb06) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Keep the input box in place when a block collapses.
|
|
59
|
+
|
|
60
|
+
In regular TUI mode the whole frame is one line buffer: transcript, then the input dock (status line, editor, footer). When a block inside the viewport got shorter — the reasoning window shrinking from five rows to the `Thought for …` row, or a tool card collapsing — the renderer moved the whole tail up, so the input box jumped a few rows and left blank rows at the bottom.
|
|
61
|
+
|
|
62
|
+
The regular-mode patch now adds the lost rows as blank filler just above the input dock, and moves the hardware cursor by the same offset. The dock keeps its screen rows; the gap appears at the end of the transcript and new output fills it again. Sessions with a transcript shorter than the terminal no longer jump at the end of every reasoning pass.
|
|
63
|
+
|
|
64
|
+
The patch finds the dock by the editor block that the editor rendered in the same frame. Multi-line input that contains a pasted shell prompt (` ❯ npm test`) no longer splits the input box.
|
|
65
|
+
|
|
66
|
+
- [#177](https://github.com/TianZuo555/pi-extensions/pull/177) [`33fd5ae`](https://github.com/TianZuo555/pi-extensions/commit/33fd5ae9fea337ca9e2d8c44d271b5ec9a7fdc9a) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Clip the long session and branch names in the footer.
|
|
67
|
+
|
|
68
|
+
`footerLabelClip` (default 16) limits the session name and the branch name. A longer name keeps its head and ends with `…`, so `fix/beautify-style-review` shows as `fix/beautify-sty…`. The change stats after the branch name do not move. Set it to `0` to show the full names.
|
|
69
|
+
|
|
70
|
+
- [#177](https://github.com/TianZuo555/pi-extensions/pull/177) [`33fd5ae`](https://github.com/TianZuo555/pi-extensions/commit/33fd5ae9fea337ca9e2d8c44d271b5ec9a7fdc9a) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Lay the footer out in three fixed rows so plugin chips never crowd the location
|
|
71
|
+
line.
|
|
72
|
+
|
|
73
|
+
Row 1 keeps the builtin statistics (model, context, cache, rate, cost). Row 2
|
|
74
|
+
keeps the location (cwd, session name, branch) plus the MCP server count, which
|
|
75
|
+
this package draws itself. Row 3 collects every other extension's `setStatus()`
|
|
76
|
+
text, including `pi-usage`.
|
|
77
|
+
|
|
78
|
+
Before this change, plugin chips were appended to row 2 next to the cwd and
|
|
79
|
+
branch, and any `usage`/`quota`/`balance` key went to row 1. The footer grew
|
|
80
|
+
sideways as extensions registered status text. Now the first two rows stay
|
|
81
|
+
stable and row 3 is the only one that flexes. Row 3 stays hidden while no plugin
|
|
82
|
+
publishes text, so the footer still shrinks to two rows when quiet.
|
|
83
|
+
|
|
84
|
+
Remove the line-assignment helpers (`moveFooterKeyToLine`, `shiftFooterKeyLine`,
|
|
85
|
+
`reorderFooterKey`, `toggleFooterKeyHidden`, `resolveFooterChipLayout`,
|
|
86
|
+
`normalizeFooterChipLayout`, `defaultFooterLine`) and the `footerLine1Keys` /
|
|
87
|
+
`footerLine2Keys` / `footerLine3Keys` config fields. They existed for a settings
|
|
88
|
+
panel this package no longer has, and the rows are no longer user-assigned.
|
|
89
|
+
`footerHiddenKeys` stays: it still hides a plugin chip on row 3.
|
|
90
|
+
|
|
91
|
+
The MCP chip no longer enters the plugin channel. It is location information,
|
|
92
|
+
so it sits on row 2 next to the branch, and a third-party `mcp` status still
|
|
93
|
+
suppresses the builtin one to avoid a duplicate chip.
|
|
94
|
+
|
|
95
|
+
- [#177](https://github.com/TianZuo555/pi-extensions/pull/177) [`33fd5ae`](https://github.com/TianZuo555/pi-extensions/commit/33fd5ae9fea337ca9e2d8c44d271b5ec9a7fdc9a) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Stream reasoning in a five-row window, hide it when the run ends, and open it
|
|
96
|
+
with `ctrl+t`.
|
|
97
|
+
|
|
98
|
+
While a thinking run streams, the card shows at most `liveThinkingLines`
|
|
99
|
+
(default `5`) rows. Newer reasoning pushes older rows up out of the window, so
|
|
100
|
+
the block stays a stable height instead of growing down the transcript.
|
|
101
|
+
|
|
102
|
+
When the run finishes (text or a tool call follows), the body is hidden
|
|
103
|
+
completely. Only one row remains: `Thought for 8s · ctrl+t to expand`, or
|
|
104
|
+
`Thought for 8s · click to show more` in fullscreen.
|
|
105
|
+
|
|
106
|
+
`ctrl+t` (`app.thinking.toggle`) expands every finished thinking card to its
|
|
107
|
+
full text and keeps new cards expanded, the same way Pi's own toggle works.
|
|
108
|
+
Press it again to hide the bodies. Clicking one card while the toggle is on
|
|
109
|
+
collapses only that card. Selector and dialog screens keep their own `ctrl+t`
|
|
110
|
+
(for example the `/tree` filter).
|
|
111
|
+
|
|
112
|
+
`previewLines` is renamed to `liveThinkingLines` because it now sizes the live
|
|
113
|
+
window, not a finished preview. This package also always owns the reasoning
|
|
114
|
+
block now; Pi's own renderer used to stay in place whenever `hideThinkingBlock`
|
|
115
|
+
was off, which made the setting silently inert.
|
|
116
|
+
|
|
117
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Restore the docked-bash prototype patch when an interactive session shuts down, and keep headless sessions from installing it. Clear disposed main-screen patch registry entries even when another extension wraps the method.
|
|
118
|
+
|
|
119
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Render reasoning text with the theme's `thinkingText` slot instead of `dim`.
|
|
120
|
+
|
|
121
|
+
`thinkingText` is Pi's dedicated "Thinking block text color" — Pi's own thinking renderer uses it — so reasoning now follows whatever the active theme sets for it. The `Thought for 6s` heading and the `N more lines` hint stay on `dim`, which keeps them reading as metadata rather than content.
|
|
122
|
+
|
|
123
|
+
- [#177](https://github.com/TianZuo555/pi-extensions/pull/177) [`33fd5ae`](https://github.com/TianZuo555/pi-extensions/commit/33fd5ae9fea337ca9e2d8c44d271b5ec9a7fdc9a) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Fix review findings.
|
|
124
|
+
|
|
125
|
+
- Every tool uses the beautify card, including the `bash` and `terminal_*` tools from `@tian.zuo/pi-background-terminals`. Only `Agent` keeps its own renderer.
|
|
126
|
+
- A settled tool title no longer gets wider than the terminal when it renders again. On a narrow terminal the extra width made Pi stop with "Rendered line exceeds terminal width".
|
|
127
|
+
- The `write` override is installed only in TUI sessions. Print and headless sessions keep the `write` tool that is already registered.
|
|
128
|
+
- Session shutdown always removes this installation's patches, and the next session installs them again. A newer installation's sticky-prompt patches are no longer removed by an older shutdown.
|
|
129
|
+
- `setStatus("token-speed")` from `@tian.zuo/pi-token-speed` fills the footer rate chip instead of adding a second rate chip.
|
|
130
|
+
- `setStatus("usage")` from `@tian.zuo/pi-usage` fills the usage chip and is shown once.
|
|
131
|
+
- The `@subagent:[name]` delegation instruction is sent only when an `Agent` tool exists. An unreadable entry in `~/.pi/agent/agents` is skipped instead of failing the handler.
|
|
132
|
+
- Syntax highlighting does not try again on every repaint for a language that failed.
|
|
133
|
+
- The `/clear` and `/exit` aliases are removed.
|
|
134
|
+
- The unused `lib/our-tools.ts` helpers and their exports are removed.
|
|
135
|
+
|
|
136
|
+
- [#171](https://github.com/TianZuo555/pi-extensions/pull/171) [`8aad15a`](https://github.com/TianZuo555/pi-extensions/commit/8aad15a5d566564b39f6b8dd0e3c79e8aafdc46d) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Tighten the git and rate chips.
|
|
137
|
+
|
|
138
|
+
The git chip dropped its parentheses: `(+12 −4)` is now ` +12/−4`, which reads as one token instead of a nested group. The rate chip replaced the `avg` prefix with the same md-flash glyph the rest of the footer uses, so `avg 211 tok/s` is now ` 211 tok/s`. `live` keeps its word, since that mode has to stay distinguishable from the average.
|
|
139
|
+
|
|
140
|
+
- [#193](https://github.com/TianZuo555/pi-extensions/pull/193) [`b49c918`](https://github.com/TianZuo555/pi-extensions/commit/b49c9184ecc729eb60fe69800b8086af19cecb06) Thanks [@TianZuo555](https://github.com/TianZuo555)! - Keep wrapped output readable and group headers clickable.
|
|
141
|
+
|
|
142
|
+
- Wrapped tool output keeps the source indentation on every row. Indented `stdout`, JSON dumps, and nested lists used to fall back to the card edge after a line break, which made the continuation look like a separate line. Deep indents are clamped to half the width so text stays readable.
|
|
143
|
+
- A narrow tool-group header truncates the title and counts, never the expand hint. In fullscreen mode the hint is the click target, so cutting it made the whole card unclickable.
|
|
144
|
+
- `terminal_log_read` is removed from the background-terminal summary table. `@tian.zuo/pi-background-terminals` no longer registers that tool.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Tian Zuo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,128 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @tian.zuo/pi-beautify-style
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Release notes: [changelog](https://github.com/TianZuo555/pi-extensions/blob/main/packages/pi-beautify-style/CHANGELOG.md) · [GitHub releases](https://github.com/TianZuo555/pi-extensions/releases)
|
|
4
|
+
|
|
5
|
+
A Claude Code-style TUI for the [pi coding agent](https://pi.dev): tool cards,
|
|
6
|
+
rich diffs, a status footer, and `/context`. It also knows about this
|
|
7
|
+
repository's `ask_user`, background-terminal, and usage extensions.
|
|
8
|
+
|
|
9
|
+
This package is a maintained fork of
|
|
10
|
+
[minuque/pi-cc-extensions](https://github.com/minuque/pi-cc-extensions) (MIT).
|
|
11
|
+
See [ATTRIBUTION.md](./ATTRIBUTION.md). Install **one or the other**, not both.
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pi install npm:@tian.zuo/pi-beautify-style
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
If `pi-cc-extensions` is installed, remove it first — both extensions patch the
|
|
20
|
+
same `ToolExecutionComponent` and would fight over every tool card:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pi remove npm:pi-cc-extensions
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Try from a checkout without installing:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pi -e ./packages/pi-beautify-style
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## What it does
|
|
33
|
+
|
|
34
|
+
- **Tool cards** in three modes — `on`, `compact`, `off` — with collapsed
|
|
35
|
+
summaries, click-to-expand, and a spinner plus elapsed time while a tool runs.
|
|
36
|
+
- **Rich diffs** for `edit` and `write`, with split/unified layout, Shiki
|
|
37
|
+
highlighting, and configurable collapse limits.
|
|
38
|
+
- **Compact mode**: one summary line per assistant message, with per-round tool
|
|
39
|
+
counts.
|
|
40
|
+
- **Footer** in three fixed rows: builtin statistics (model, context, cache,
|
|
41
|
+
rate, cost), then location (cwd, session name, git), then every other
|
|
42
|
+
extension's `setStatus` chip, including `pi-usage` and the MCP count. Plugin
|
|
43
|
+
chips never crowd the first two rows.
|
|
44
|
+
- **Fixed input box**: in regular TUI mode the input box keeps its screen row
|
|
45
|
+
when a block above it collapses — the reasoning window shrinking to
|
|
46
|
+
`Thought for …`, or a tool card closing. The freed rows become blank space at
|
|
47
|
+
the end of the transcript, and new output fills it again.
|
|
48
|
+
- **`/context`** to inspect context usage and preview the system prompt, memory,
|
|
49
|
+
skills, and tool definitions.
|
|
50
|
+
- **`@` references** to pull context from an earlier session or a running
|
|
51
|
+
subagent.
|
|
52
|
+
- **Fullscreen extras**: click-to-expand cards, hover highlighting, sticky user
|
|
53
|
+
message, and a back-to-bottom button (`--tui-mode fullscreen`).
|
|
54
|
+
|
|
55
|
+
## Integration with this repo
|
|
56
|
+
|
|
57
|
+
The fork adapts upstream's renderers to the sibling packages:
|
|
58
|
+
|
|
59
|
+
| Package | What changes |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| `@tian.zuo/pi-ask-user` | The `ask_user` card uses the same answer tree as upstream's `ask_user_question`, including `choice: { label, wasCustom }` answers, the question-count suffix, and custom ("Other") text. |
|
|
62
|
+
| `@tian.zuo/pi-background-terminals` | Its `bash` and `terminal_wait`/`terminal_stop` tools use the same beautify card as every other tool: a live elapsed timer, and the terminal id in the title of the `terminal_*` cards. |
|
|
63
|
+
| `@tian.zuo/pi-usage` | The footer treats `setStatus("usage")` as the usage chip on row 3. Upstream only recognized `pi-usage`/`localUsage`, so this package's chip used to stay empty. |
|
|
64
|
+
|
|
65
|
+
`@tian.zuo/pi-token-speed` needs no integration either: its
|
|
66
|
+
`setStatus("token-speed")` text fills the footer's built-in rate chip instead of
|
|
67
|
+
adding a second one.
|
|
68
|
+
|
|
69
|
+
`@tian.zuo/pi-compact-output` is superseded by this package — its compact tool
|
|
70
|
+
blocks and reasoning boxes are what this package renders. Do not run both.
|
|
71
|
+
|
|
72
|
+
## Configuration
|
|
73
|
+
|
|
74
|
+
There is none. This package ships no `/ccstyle` command, no settings panel, and
|
|
75
|
+
no JSON file. Every knob — render mode, diff layout, footer chips, reasoning
|
|
76
|
+
window height — is a source constant in
|
|
77
|
+
[`extensions/config/config.ts`](./extensions/config/config.ts). Edit that file
|
|
78
|
+
and restart Pi to change behavior.
|
|
79
|
+
|
|
80
|
+
> [!TIP]
|
|
81
|
+
> In fullscreen mode, click `click to show more` to expand a tool card, a
|
|
82
|
+
> reasoning block, or a compact summary. Expanded cards show the full diff;
|
|
83
|
+
> Input/Output past their line limit open a full preview.
|
|
84
|
+
>
|
|
85
|
+
> Reasoning streams in a five-row window and hides completely once the run
|
|
86
|
+
> ends (`Thought for 8s · ctrl+t to expand`). Press `ctrl+t` to open every
|
|
87
|
+
> finished reasoning block; press it again to hide them.
|
|
88
|
+
>
|
|
89
|
+
> When the reasoning leads with a heading — `## Plan`, `**Plan**`, or an OpenAI
|
|
90
|
+
> summary title — that heading becomes the card title while it streams, and stays
|
|
91
|
+
> on the finished card (`Plan · Thought for 8s`). A heading copied out of tool
|
|
92
|
+
> output mid-reasoning is ignored.
|
|
93
|
+
|
|
94
|
+
> [!NOTE]
|
|
95
|
+
> For Mermaid diagrams, set `markdown.mermaid` to `final` in
|
|
96
|
+
> `~/.pi/agent/settings.json`. The default `streaming` mode repaints on every
|
|
97
|
+
> frame and is less stable.
|
|
98
|
+
|
|
99
|
+
## Compatibility
|
|
100
|
+
|
|
101
|
+
- Node.js `>=22.19.0`, Pi `^1.2.0`.
|
|
102
|
+
- Patches `ToolExecutionComponent`, `AssistantMessageComponent`, and
|
|
103
|
+
`Container.addChild`. If a future Pi drops one of them, the extension installs
|
|
104
|
+
without patching and Pi's native rendering stays in place.
|
|
105
|
+
|
|
106
|
+
## Development
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
pnpm install
|
|
110
|
+
pnpm --filter @tian.zuo/pi-beautify-style test
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Tests under `test/` come from upstream and run unmodified except where the fork
|
|
114
|
+
intentionally changes behavior (see the `usage` key assertions in
|
|
115
|
+
`test/footer.test.ts`). Two upstream tests are not carried over because they
|
|
116
|
+
load extension modules through `jiti`, which this repo does not depend on.
|
|
117
|
+
|
|
118
|
+
## Attribution
|
|
119
|
+
|
|
120
|
+
- Rendering stack and most of `extensions/`: `minuque/pi-cc-extensions`
|
|
121
|
+
(MIT).
|
|
122
|
+
- Rich diff renderer: `MasuRii/pi-tool-display` (MIT).
|
|
123
|
+
|
|
124
|
+
Full text in [ATTRIBUTION.md](./ATTRIBUTION.md).
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
[MIT](./LICENSE) © Tian Zuo, and the upstream authors listed above.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { CompactThinkingConfig } from "../feature/compact-thinking.ts";
|
|
2
|
+
|
|
3
|
+
export type CompactStyleMode = "on" | "compact" | "off";
|
|
4
|
+
|
|
5
|
+
export type DiffViewMode = "auto" | "split" | "unified";
|
|
6
|
+
export type DiffIndicatorMode = "bars" | "classic" | "none";
|
|
7
|
+
export type FooterGitStatsMode = "working" | "branch";
|
|
8
|
+
export type FooterTokenRateMode = "average" | "live";
|
|
9
|
+
export type ScrollButtonMode = "dock" | "native";
|
|
10
|
+
|
|
11
|
+
export interface ToolDisplayConfig {
|
|
12
|
+
diffViewMode: DiffViewMode;
|
|
13
|
+
diffIndicatorMode: DiffIndicatorMode;
|
|
14
|
+
diffSplitMinWidth: number;
|
|
15
|
+
/** Edit-only collapsed body lines. 0 = change counts and an expand hint. */
|
|
16
|
+
editDiffCollapsedLines: number;
|
|
17
|
+
/** Write-only collapsed body lines. 0 = `↳ created · click to show more`. */
|
|
18
|
+
writeDiffCollapsedLines: number;
|
|
19
|
+
diffWordWrap: boolean;
|
|
20
|
+
expandedPreviewMaxLines: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const DEFAULT_TOOL_DISPLAY_CONFIG: ToolDisplayConfig = {
|
|
24
|
+
diffViewMode: "auto",
|
|
25
|
+
diffIndicatorMode: "bars",
|
|
26
|
+
diffSplitMinWidth: 120,
|
|
27
|
+
/** Collapsed edit/diff body: ~half a typical terminal after chrome. */
|
|
28
|
+
editDiffCollapsedLines: 24,
|
|
29
|
+
/**
|
|
30
|
+
* Write create/overwrite collapsed body.
|
|
31
|
+
* 0 = `↳ created · click to show more` (stats stay on the title).
|
|
32
|
+
*/
|
|
33
|
+
writeDiffCollapsedLines: 0,
|
|
34
|
+
diffWordWrap: true,
|
|
35
|
+
/**
|
|
36
|
+
* Expanded TaskList body cap. Tool Input/Output and diffs use their own settings;
|
|
37
|
+
* an expanded diff always renders every line.
|
|
38
|
+
*/
|
|
39
|
+
expandedPreviewMaxLines: 40,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export type Config = {
|
|
43
|
+
mode: CompactStyleMode;
|
|
44
|
+
excludeRenderers: string[];
|
|
45
|
+
diffViewMode: DiffViewMode;
|
|
46
|
+
diffIndicatorMode: DiffIndicatorMode;
|
|
47
|
+
diffSplitMinWidth: number;
|
|
48
|
+
editDiffCollapsedLines: number;
|
|
49
|
+
writeDiffCollapsedLines: number;
|
|
50
|
+
diffWordWrap: boolean;
|
|
51
|
+
expandedPreviewMaxLines: number;
|
|
52
|
+
expandedInputMaxLines: number;
|
|
53
|
+
expandedOutputMaxLines: number;
|
|
54
|
+
toolLabelClip: number;
|
|
55
|
+
/**
|
|
56
|
+
* Title the reasoning card from a heading the reasoning leads with: an OpenAI
|
|
57
|
+
* Responses summary heading, or a leading `# Heading` / `**Bold**` line. Other
|
|
58
|
+
* providers get no title because their reasoning carries no reliable heading.
|
|
59
|
+
* The title stays on the finished card (`Plan · Thought for 8s`).
|
|
60
|
+
*/
|
|
61
|
+
useSummaryTitlesAsThinkingTitle: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Max reasoning rows shown **while** a run streams; longer text scrolls inside the
|
|
64
|
+
* window and the newest row stays at the bottom. A finished run hides the body
|
|
65
|
+
* entirely (heading only) until `app.thinking.toggle` (ctrl+t) expands it.
|
|
66
|
+
*/
|
|
67
|
+
liveThinkingLines: number;
|
|
68
|
+
animationIntervalMs: number;
|
|
69
|
+
/** fullscreen:userMessage 正文首行滚出视口上沿后钉住,直到下一条指令接手。 */
|
|
70
|
+
stickyUserMessage: boolean;
|
|
71
|
+
/** fullscreen 回到底部按钮:扩展 dock 行,或 Pi 原生浮层;两者文案相同。 */
|
|
72
|
+
scrollButtonMode: ScrollButtonMode;
|
|
73
|
+
enableSessionReference: boolean;
|
|
74
|
+
enableSubagentAutocomplete: boolean;
|
|
75
|
+
enableContextCommand: boolean;
|
|
76
|
+
enableAgentSummary: boolean;
|
|
77
|
+
enableWorkingMessage: boolean;
|
|
78
|
+
/** markdown 转换:Mermaid 方言渲染、圈数字转半角括号。关掉让位给其他扩展。 */
|
|
79
|
+
enableMarkdownEnhance: boolean;
|
|
80
|
+
/** 输入框 `❯ ` 前缀(占左侧 2 列,颜色随 thinking/bash mode 联动)。 */
|
|
81
|
+
enableEditorPrefix: boolean;
|
|
82
|
+
enableCustomFooter: boolean;
|
|
83
|
+
/** footer 输出速率芯片。关则不显示。 */
|
|
84
|
+
footerTokenRate: boolean;
|
|
85
|
+
/** average:整段指令墙钟平均;live:最近 1 秒瞬时速率,空档回退平均。 */
|
|
86
|
+
footerTokenRateMode: FooterTokenRateMode;
|
|
87
|
+
/** 速率芯片是否带 TTFT。关则只显示速率。 */
|
|
88
|
+
footerTokenRateTtft: boolean;
|
|
89
|
+
/** ISO 4217 显示币种。USD 时不换算。 */
|
|
90
|
+
footerCurrency: string;
|
|
91
|
+
/** 1 单位费用对应的显示币种数量。null 只换符号、不乘倍率。 */
|
|
92
|
+
footerCurrencyRate: number | null;
|
|
93
|
+
footerNerdIcons: boolean;
|
|
94
|
+
/** Session name and branch name cap, in characters. 0 = no cap. */
|
|
95
|
+
footerLabelClip: number;
|
|
96
|
+
footerGitStatsMode: FooterGitStatsMode;
|
|
97
|
+
/** 第三行的插件芯片里要隐藏的 `setStatus()` key。 */
|
|
98
|
+
footerHiddenKeys: string[];
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
export const DIFF_VIEW_MODES: DiffViewMode[] = ["auto", "split", "unified"];
|
|
102
|
+
export const DIFF_INDICATOR_MODES: DiffIndicatorMode[] = ["bars", "classic", "none"];
|
|
103
|
+
export const FOOTER_GIT_STATS_MODES: FooterGitStatsMode[] = ["working", "branch"];
|
|
104
|
+
export const FOOTER_TOKEN_RATE_MODES: FooterTokenRateMode[] = ["average", "live"];
|
|
105
|
+
export const SCROLL_BUTTON_MODES: ScrollButtonMode[] = ["dock", "native"];
|
|
106
|
+
export const DIFF_SPLIT_MIN_WIDTH_VALUES = ["80", "100", "120", "140", "160", "180"];
|
|
107
|
+
export const DIFF_COLLAPSED_LINES_VALUES = ["0", "12", "24", "36", "48", "80", "120"];
|
|
108
|
+
/** Write collapsed presets. 0 = stats only (`+N -0` + expand hint). */
|
|
109
|
+
export const WRITE_DIFF_COLLAPSED_LINES_VALUES = ["0", "4", "8", "12", "24", "36"];
|
|
110
|
+
/** Presets for expanded body height — keep low options first so cycling stays TUI-friendly. */
|
|
111
|
+
export const EXPANDED_PREVIEW_MAX_LINES_VALUES = ["40", "60", "80", "120", "200", "500", "2000"];
|
|
112
|
+
/** 展开工具卡 Input 可见行数预设。 */
|
|
113
|
+
export const EXPANDED_INPUT_MAX_LINES_VALUES = ["5", "10", "20", "40", "80"];
|
|
114
|
+
/** 展开工具卡 Output 可见行数预设。 */
|
|
115
|
+
export const EXPANDED_OUTPUT_MAX_LINES_VALUES = ["10", "20", "40", "80", "120"];
|
|
116
|
+
/** 工具摘要里 path/command 等输入的折叠字符数;0 = 只按可用宽度截断。 */
|
|
117
|
+
export const TOOL_LABEL_CLIP_VALUES = ["0", "40", "60", "80", "100", "120", "160"];
|
|
118
|
+
export const THINKING_LIVE_LINES_VALUES = ["1", "3", "5", "8", "10"];
|
|
119
|
+
export const THINKING_ANIMATION_INTERVAL_VALUES = ["40", "60", "90", "120", "180"];
|
|
120
|
+
/** Tools commonly excluded from ccstyle rendering. */
|
|
121
|
+
export const EXCLUDE_RENDERER_CANDIDATES = [
|
|
122
|
+
"bash",
|
|
123
|
+
"powershell",
|
|
124
|
+
"read",
|
|
125
|
+
"edit",
|
|
126
|
+
"write",
|
|
127
|
+
"grep",
|
|
128
|
+
"find",
|
|
129
|
+
"ls",
|
|
130
|
+
"webfetch",
|
|
131
|
+
"wait",
|
|
132
|
+
];
|
|
133
|
+
|
|
134
|
+
export const DEFAULT_CONFIG: Config = {
|
|
135
|
+
mode: "on",
|
|
136
|
+
excludeRenderers: [],
|
|
137
|
+
diffViewMode: DEFAULT_TOOL_DISPLAY_CONFIG.diffViewMode,
|
|
138
|
+
diffIndicatorMode: DEFAULT_TOOL_DISPLAY_CONFIG.diffIndicatorMode,
|
|
139
|
+
diffSplitMinWidth: DEFAULT_TOOL_DISPLAY_CONFIG.diffSplitMinWidth,
|
|
140
|
+
editDiffCollapsedLines: DEFAULT_TOOL_DISPLAY_CONFIG.editDiffCollapsedLines,
|
|
141
|
+
writeDiffCollapsedLines: DEFAULT_TOOL_DISPLAY_CONFIG.writeDiffCollapsedLines,
|
|
142
|
+
diffWordWrap: DEFAULT_TOOL_DISPLAY_CONFIG.diffWordWrap,
|
|
143
|
+
expandedPreviewMaxLines: DEFAULT_TOOL_DISPLAY_CONFIG.expandedPreviewMaxLines,
|
|
144
|
+
expandedInputMaxLines: 5,
|
|
145
|
+
expandedOutputMaxLines: 10,
|
|
146
|
+
toolLabelClip: 0,
|
|
147
|
+
useSummaryTitlesAsThinkingTitle: true,
|
|
148
|
+
liveThinkingLines: 5,
|
|
149
|
+
animationIntervalMs: 90,
|
|
150
|
+
stickyUserMessage: true,
|
|
151
|
+
scrollButtonMode: "dock",
|
|
152
|
+
enableSessionReference: true,
|
|
153
|
+
enableSubagentAutocomplete: true,
|
|
154
|
+
enableContextCommand: true,
|
|
155
|
+
enableAgentSummary: true,
|
|
156
|
+
enableWorkingMessage: true,
|
|
157
|
+
enableMarkdownEnhance: true,
|
|
158
|
+
enableEditorPrefix: true,
|
|
159
|
+
enableCustomFooter: true,
|
|
160
|
+
footerTokenRate: true,
|
|
161
|
+
footerTokenRateMode: "average",
|
|
162
|
+
footerTokenRateTtft: true,
|
|
163
|
+
footerCurrency: "USD",
|
|
164
|
+
footerCurrencyRate: null,
|
|
165
|
+
footerNerdIcons: true,
|
|
166
|
+
footerLabelClip: 16,
|
|
167
|
+
footerGitStatsMode: "working",
|
|
168
|
+
footerHiddenKeys: [],
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Source constants for the render and feature switches.
|
|
173
|
+
*
|
|
174
|
+
* This package has no runtime configuration surface: no `/ccstyle` command, no
|
|
175
|
+
* settings panel, no JSON file. The object is mutable only so tests can
|
|
176
|
+
* override fields; production code must treat it as read-only. Edit
|
|
177
|
+
* `DEFAULT_CONFIG` and restart Pi to change behavior.
|
|
178
|
+
*/
|
|
179
|
+
export const config: Config = { ...DEFAULT_CONFIG };
|
|
180
|
+
|
|
181
|
+
export function getCompactThinkingConfig(source: Config = config): CompactThinkingConfig {
|
|
182
|
+
return {
|
|
183
|
+
useSummaryTitlesAsThinkingTitle: source.useSummaryTitlesAsThinkingTitle,
|
|
184
|
+
liveThinkingLines: source.liveThinkingLines,
|
|
185
|
+
animationIntervalMs: source.animationIntervalMs,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export function getToolDisplayConfig(source: Config = config): ToolDisplayConfig {
|
|
190
|
+
return {
|
|
191
|
+
diffViewMode: source.diffViewMode,
|
|
192
|
+
diffIndicatorMode: source.diffIndicatorMode,
|
|
193
|
+
diffSplitMinWidth: source.diffSplitMinWidth,
|
|
194
|
+
editDiffCollapsedLines: source.editDiffCollapsedLines,
|
|
195
|
+
writeDiffCollapsedLines: source.writeDiffCollapsedLines,
|
|
196
|
+
diffWordWrap: source.diffWordWrap,
|
|
197
|
+
expandedPreviewMaxLines: source.expandedPreviewMaxLines,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|