pi-one-ui 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.2] - 2026-09-28
10
+
11
+ ### Changed
12
+
13
+ - The Editor completion dropdown now paints the selected row with the editor frame color, so the selection follows the same static/adaptive thinking-level chain as the frame border while unselected rows keep Pi's native styling.
14
+
15
+ ### Fixed
16
+
17
+ - Keep the pending tool loading animation alive during long-running commands: the updateDisplay render cache now rebuilds pending tool rows so each animation tick re-enters the renderer, preventing the spinner from freezing while a command is still executing.
18
+
19
+ ### Migration
20
+
21
+ - No configuration migration is required. Existing canonical v1 files and command names remain supported.
22
+ - For an unpinned npm installation, run `pi update npm:pi-one-ui`; for an existing version pin, run `pi install npm:pi-one-ui@0.7.2`. Fully exit and restart Pi after updating the package.
23
+
9
24
  ## [0.7.1] - 2026-09-21
10
25
 
11
26
  ### Changed
@@ -24,6 +39,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
24
39
  - No configuration migration is required. Existing canonical v1 files and command names remain supported.
25
40
  - For an unpinned npm installation, run `pi update npm:pi-one-ui`; for an existing version pin, run `pi install npm:pi-one-ui@0.7.1`. Fully exit and restart Pi after updating the package.
26
41
 
42
+ ### Release verification
43
+
44
+ - Release source: [`e4451a2`](https://github.com/kerolt/pi-one-ui/commit/e4451a244838550f0914469bd8ff5ddbaebc1f8f). [CI](https://github.com/kerolt/pi-one-ui/actions/runs/35567977181) and [Publish](https://github.com/kerolt/pi-one-ui/actions/runs/35567977360) completed successfully; local and CI `npm run verify` passed 1,176 tests across 69 files, and `npm run pack:check` confirmed 124 package files.
45
+ - Real Pi regular/fullscreen TUI probes passed, covering settings, Context Inspector, Editor input and focus, presets, reload, session tree, compaction, session replacement, input listeners, and third-party Editor ownership. User-specific terminal, theme, and extension combinations still require manual verification.
46
+ - At publication, npm `latest` resolved to `0.7.1` with the matching release `gitHead` and package SHA-1 `0252f3b21190f56170a96ff8c3a2a1e8df74874f`. The [provenance statement](https://registry.npmjs.org/-/npm/v1/attestations/pi-one-ui@0.7.1) was published at [Sigstore log index 2905054424](https://search.sigstore.dev/?logIndex=2905054424).
47
+
27
48
  ## [0.7.0] - 2026-09-13
28
49
 
29
50
  ### Added
@@ -153,7 +174,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
153
174
 
154
175
  - Reduced rendering lag when expanding settled tool groups by reusing cached child output.
155
176
 
156
- [Unreleased]: https://github.com/kerolt/pi-one-ui/compare/v0.7.1...HEAD
177
+ [Unreleased]: https://github.com/kerolt/pi-one-ui/compare/v0.7.2...HEAD
178
+ [0.7.2]: https://github.com/kerolt/pi-one-ui/compare/v0.7.1...v0.7.2
157
179
  [0.7.1]: https://github.com/kerolt/pi-one-ui/compare/v0.7.0...v0.7.1
158
180
  [0.7.0]: https://github.com/kerolt/pi-one-ui/compare/v0.6.1...v0.7.0
159
181
  [0.6.1]: https://github.com/kerolt/pi-one-ui/compare/v0.6.0...v0.6.1
package/README.en.md CHANGED
@@ -76,11 +76,11 @@ Then open the unified settings panel:
76
76
  /oneui
77
77
  ```
78
78
 
79
- ### Upgrading to 0.7.1
79
+ ### Upgrading to 0.7.2
80
80
 
81
- This release centralizes component composition, settings application, and session lifecycle management. Each preset saves and applies all related component settings in one update, Header settings apply immediately, and session replacement cleans up overlays and input listeners.
81
+ This release paints the Editor completion dropdown selection with the editor frame color so it follows the adaptive thinking-level chain, and keeps the tool loading animation alive during long-running commands.
82
82
 
83
- Existing canonical v1 configurations and commands remain compatible; no migration is required. Corrupt or unreadable configuration files now produce an explicit error.
83
+ Existing canonical v1 configurations and commands remain compatible; no migration is required.
84
84
 
85
85
  For an unpinned npm installation, run:
86
86
 
@@ -88,7 +88,7 @@ For an unpinned npm installation, run:
88
88
  pi update npm:pi-one-ui
89
89
  ```
90
90
 
91
- If your installation pins a version, run `pi install npm:pi-one-ui@0.7.1` to update the pin. Fully exit and restart Pi after updating the package.
91
+ If your installation pins a version, run `pi install npm:pi-one-ui@0.7.2` to update the pin. Fully exit and restart Pi after updating the package.
92
92
 
93
93
  ## Configuration
94
94
 
@@ -158,7 +158,7 @@ To keep the configuration section clean and focused, in-depth options, template
158
158
  - Saved changes apply the next time `/oneui` opens; no `/reload` needed.
159
159
  - **Color system & theme customization**: see [Editor Colors Reference (docs/editor-colors.md)](./docs/editor-colors.md)
160
160
  - All colors resolve through unified theme semantics. Configured `colors.*` values resolve as theme tokens (adapting automatically across themes), while ANSI names map to semantic tokens (e.g. `red` to `error`). Fixed terminal colors can be specified using hex codes, 256-color indexes, or `fg:`/`bg:` prefixes.
161
- - Full support for adaptive thinking-effort border colors (from Low to Max) and labels.
161
+ - Full support for adaptive thinking-effort border colors (from Low to Max) and labels. The completion menu selection shares the editor frame color and follows the same chain.
162
162
  - **Migration from legacy versions**: Field cleanups from 0.5.x/0.6.0 (such as merging `opencode` into `minimalist`, or removing `colorSource`) are covered in [docs/configuration.md: Changes and Migration](./docs/configuration.md#6-变更与迁移).
163
163
 
164
164
  ## Upstream origins and project evolution
package/README.md CHANGED
@@ -76,11 +76,11 @@ pi install git:github.com/kerolt/pi-one-ui
76
76
  /oneui
77
77
  ```
78
78
 
79
- ### 升级到 0.7.1
79
+ ### 升级到 0.7.2
80
80
 
81
- 本次集中管理组件装配、设置应用与会话生命周期。Preset 会一次保存并应用所有相关组件配置,Header 设置即时生效;会话切换时会清理 Overlay 与输入监听。
81
+ 本次统一编辑器补全下拉选中项与编辑器外框的颜色,选中项随 thinking 档位自适应变化;同时修复长时间命令执行期间工具加载动画停止刷新的问题。
82
82
 
83
- 现有 canonical v1 配置和命令保持兼容,无需迁移。配置文件损坏或无法读取时会明确报告错误。
83
+ 现有 canonical v1 配置和命令保持兼容,无需迁移。
84
84
 
85
85
  未固定版本的 npm 安装可执行:
86
86
 
@@ -88,7 +88,7 @@ pi install git:github.com/kerolt/pi-one-ui
88
88
  pi update npm:pi-one-ui
89
89
  ```
90
90
 
91
- 若安装时固定了版本,执行 `pi install npm:pi-one-ui@0.7.1` 更新版本指定。更新安装包后,完整退出并重启 Pi。
91
+ 若安装时固定了版本,执行 `pi install npm:pi-one-ui@0.7.2` 更新版本指定。更新安装包后,完整退出并重启 Pi。
92
92
 
93
93
  ## 配置
94
94
 
@@ -158,7 +158,7 @@ pi update npm:pi-one-ui
158
158
  - 修改保存后下次打开 `/oneui` 即生效,无需 `/reload`。
159
159
  - **颜色体系与主题定制**:详见 [Editor 颜色配置说明 (docs/editor-colors.md)](./docs/editor-colors.md)
160
160
  - 所有颜色统一按 Theme 语义解释,优先解析为当前主题语义 Token(随主题自动切换),ANSI 色名自动映射为语义色(如 `red` 对应 `error`);如需固定色彩,可直接指定 Hex、256 色索引或 `fg:`/`bg:` 前缀。
161
- - 支持完整的 Thinking 思考档位(Low 至 Max)自适应边框与标签分级配色。
161
+ - 支持完整的 Thinking 思考档位(Low 至 Max)自适应边框与标签分级配色,补全下拉选中项与编辑器外框同色,跟随同一条颜色链。
162
162
  - **历史版本迁移**:旧版升级带来的字段收敛(如 `opencode` 样式统一合并入 `minimalist`、`colorSource` 双模式移除等)参见 [docs/configuration.md 变更与迁移节](./docs/configuration.md#6-变更与迁移)。
163
163
 
164
164
  ## 上游来源与项目演进
@@ -80,6 +80,25 @@ function fingerprintOf(
80
80
  ];
81
81
  }
82
82
 
83
+ /**
84
+ * 工具行是否处于「loading 图标动画应当持续」的状态。
85
+ *
86
+ * 与 default-mode renderCall 中 `scheduleAnimation` 的条件保持一致
87
+ * (本函数必须是其超集):动画 tick 经 ctx.invalidate → updateDisplay
88
+ * 回到渲染路径,缓存命中若跳过重建,renderCall 不会再执行,共享 timer
89
+ * 不再排期,长命令期间 loading 图标就会冻结在当前帧。
90
+ */
91
+ function schedulesPendingAnimation(component: any): boolean {
92
+ const visualState = component?.rendererState?.ccstyleToolVisualState as
93
+ | string
94
+ | undefined;
95
+ const pending =
96
+ visualState === "pending" ||
97
+ (!visualState &&
98
+ (component.isPartial === true || component.executionStarted === true));
99
+ return Boolean(pending && component.executionStarted === true);
100
+ }
101
+
83
102
  function componentsOf(component: any): [unknown, unknown] {
84
103
  return [component.callRendererComponent, component.resultRendererComponent];
85
104
  }
@@ -291,6 +310,12 @@ export function installToggleRenderCache(): ToggleRenderCacheHooks {
291
310
  if (inputsMatch && entry) {
292
311
  if (entry.current === slotKey) {
293
312
  if (sameComponents(slot.components, componentsNow)) {
313
+ // pending 行必须重建:renderCall 既刷新 loading 图标帧,也给共享
314
+ // 动画 timer 续期;指纹未变时跳过重建会中断动画循环。
315
+ if (schedulesPendingAnimation(self)) {
316
+ rebuild();
317
+ return;
318
+ }
294
319
  // 容器内容仍是该槽,无重建必要;仅恢复可能被外部改写的派生字段。
295
320
  self.hideComponent = slot.hideComponent;
296
321
  return;
@@ -59,6 +59,22 @@ function clampLines(lines: string[], width: number): string[] {
59
59
  return lines.map((line) => truncateToWidth(line, Math.max(0, width), ""));
60
60
  }
61
61
 
62
+ /** 原生 SelectList 选中行的 `→ ` 标记;前置 SGR 是 Pi 的 selectedText 颜色。 */
63
+ const NATIVE_SELECTED_AUTOCOMPLETE_ROW = /^((?:(?:\x1b\[|\u009b)[0-9:;]*m)*)→ /;
64
+
65
+ /**
66
+ * 用帧边框色重绘原生下拉选中行:去掉 Pi 的 selectedText 颜色序列,
67
+ * 使选中项与编辑器外框共用同一条 static/adaptive 颜色链。
68
+ */
69
+ function renderSelectedAutocompleteRow(
70
+ line: string,
71
+ renderBorder: (text: string) => string,
72
+ ): string {
73
+ const match = NATIVE_SELECTED_AUTOCOMPLETE_ROW.exec(line);
74
+ if (!match) return line;
75
+ return renderBorder(line.slice((match[1] ?? "").length));
76
+ }
77
+
62
78
  export function renderFramedAutocompleteRows({
63
79
  width,
64
80
  lines,
@@ -75,7 +91,7 @@ export function renderFramedAutocompleteRows({
75
91
  `${renderBorder("├")}${renderBorder("─".repeat(width - 2))}${renderBorder("┤")}`,
76
92
  ...lines.map(
77
93
  (line) =>
78
- `${renderBorder("│")} ${fillLine(line, contentWidth)} ${renderBorder("│")}`,
94
+ `${renderBorder("│")} ${fillLine(renderSelectedAutocompleteRow(line, renderBorder), contentWidth)} ${renderBorder("│")}`,
79
95
  ),
80
96
  ],
81
97
  width,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-one-ui",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "A single, customizable Pi UI package with layout-oriented Context and Shell rendering for Pi.",
5
5
  "type": "module",
6
6
  "license": "MIT",