@oh-my-pi/pi-coding-agent 12.15.0 → 12.15.1
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
|
@@ -2,10 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [12.15.1] - 2026-02-20
|
|
5
6
|
|
|
6
7
|
### Changed
|
|
7
8
|
|
|
8
|
-
-
|
|
9
|
+
- Replaced nerd font pie-chart spinner with clock-outline icons for smoother looping
|
|
10
|
+
- Moved status icon to front of code-cell headers in formatHeader
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Fixed ReadToolGroupComponent to show status icon before title instead of trailing
|
|
15
|
+
- Fixed bash-interactive status badge to dim only bracket characters, not the enclosed text
|
|
9
16
|
|
|
10
17
|
## [12.15.0] - 2026-02-20
|
|
11
18
|
|
|
@@ -16,6 +23,7 @@
|
|
|
16
23
|
|
|
17
24
|
### Changed
|
|
18
25
|
|
|
26
|
+
- Updated browser tool prompt to bias towards `observe` over `screenshot` by default
|
|
19
27
|
- Changed auth credential removal to use soft-delete (disable) instead of hard-delete when OAuth refresh fails, keeping credentials in database for audit purposes
|
|
20
28
|
- Changed default value of `tools.intentTracing` setting from false to true
|
|
21
29
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-my-pi/pi-coding-agent",
|
|
3
|
-
"version": "12.15.
|
|
3
|
+
"version": "12.15.1",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -85,12 +85,12 @@
|
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
87
|
"@mozilla/readability": "0.6.0",
|
|
88
|
-
"@oh-my-pi/omp-stats": "12.15.
|
|
89
|
-
"@oh-my-pi/pi-agent-core": "12.15.
|
|
90
|
-
"@oh-my-pi/pi-ai": "12.15.
|
|
91
|
-
"@oh-my-pi/pi-natives": "12.15.
|
|
92
|
-
"@oh-my-pi/pi-tui": "12.15.
|
|
93
|
-
"@oh-my-pi/pi-utils": "12.15.
|
|
88
|
+
"@oh-my-pi/omp-stats": "12.15.1",
|
|
89
|
+
"@oh-my-pi/pi-agent-core": "12.15.1",
|
|
90
|
+
"@oh-my-pi/pi-ai": "12.15.1",
|
|
91
|
+
"@oh-my-pi/pi-natives": "12.15.1",
|
|
92
|
+
"@oh-my-pi/pi-tui": "12.15.1",
|
|
93
|
+
"@oh-my-pi/pi-utils": "12.15.1",
|
|
94
94
|
"@sinclair/typebox": "^0.34.48",
|
|
95
95
|
"@xterm/headless": "^6.0.0",
|
|
96
96
|
"ajv": "^8.18.0",
|
|
@@ -84,9 +84,7 @@ export class ReadToolGroupComponent extends Container implements ToolExecutionHa
|
|
|
84
84
|
const entry = entries[0];
|
|
85
85
|
const statusSymbol = this.#formatStatus(entry.status);
|
|
86
86
|
const pathDisplay = this.#formatPath(entry);
|
|
87
|
-
this.#text.setText(
|
|
88
|
-
` ${theme.format.bullet} ${theme.fg("toolTitle", theme.bold("Read"))} ${pathDisplay} ${statusSymbol}`.trimEnd(),
|
|
89
|
-
);
|
|
87
|
+
this.#text.setText(` ${statusSymbol} ${theme.fg("toolTitle", theme.bold("Read"))} ${pathDisplay}`.trimEnd());
|
|
90
88
|
return;
|
|
91
89
|
}
|
|
92
90
|
|
package/src/modes/theme/theme.ts
CHANGED
|
@@ -765,7 +765,7 @@ const SPINNER_FRAMES: Record<SymbolPreset, Record<SpinnerType, string[]>> = {
|
|
|
765
765
|
activity: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
|
|
766
766
|
},
|
|
767
767
|
nerd: {
|
|
768
|
-
status: ["
|
|
768
|
+
status: ["", "", "", "", "", "", "", "", "", "", "", ""],
|
|
769
769
|
activity: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
|
|
770
770
|
},
|
|
771
771
|
ascii: {
|
|
@@ -288,9 +288,7 @@ User works in a high-reliability industry—defense, finance, healthcare, infras
|
|
|
288
288
|
|
|
289
289
|
<critical>
|
|
290
290
|
- Every turn must advance the deliverable. A non-final turn without at least one side-effect is invalid.
|
|
291
|
-
-
|
|
292
|
-
- Don't claim unverified correctness.
|
|
291
|
+
- Default to action. Never ask for confirmation to continue work. If you hit an error, fix it. If you know the next step, take it. The user will intervene if needed.
|
|
293
292
|
- Do not ask when it may be obtained from available tools or repo context/files.
|
|
294
|
-
-
|
|
295
|
-
{{#has tools "ask"}}- If files differ from expectations: ask before discarding uncommitted work.{{/has}}
|
|
293
|
+
- Verify the effect. When a task involves a behavioral change, confirm the change is observable before yielding: run the specific test, command, or scenario that covers your change.
|
|
296
294
|
</critical>
|
|
@@ -14,7 +14,7 @@ import xterm from "@xterm/headless";
|
|
|
14
14
|
import type { Theme } from "../modes/theme/theme";
|
|
15
15
|
import { OutputSink, type OutputSummary } from "../session/streaming-output";
|
|
16
16
|
import { getStateIcon } from "../tui";
|
|
17
|
-
import { replaceTabs
|
|
17
|
+
import { replaceTabs } from "./render-utils";
|
|
18
18
|
|
|
19
19
|
export interface BashInteractiveResult extends OutputSummary {
|
|
20
20
|
exitCode: number | undefined;
|
|
@@ -240,7 +240,7 @@ class BashInteractiveOverlayComponent implements Component {
|
|
|
240
240
|
? getStateIcon("success", this.uiTheme)
|
|
241
241
|
: getStateIcon("warning", this.uiTheme);
|
|
242
242
|
const title = this.uiTheme.fg("accent", "Console");
|
|
243
|
-
const statusBadge = this.uiTheme.fg("dim",
|
|
243
|
+
const statusBadge = `${this.uiTheme.fg("dim", this.uiTheme.format.bracketLeft)}${this.#stateText()}${this.uiTheme.fg("dim", this.uiTheme.format.bracketRight)}`;
|
|
244
244
|
const prefix = `${statusIcon} ${title} `;
|
|
245
245
|
const suffix = ` ${statusBadge}`;
|
|
246
246
|
const available = Math.max(1, innerWidth - visibleWidth(prefix) - visibleWidth(suffix));
|
package/src/tui/code-cell.ts
CHANGED
|
@@ -34,18 +34,6 @@ function getState(status?: CodeCellOptions["status"]): State | undefined {
|
|
|
34
34
|
function formatHeader(options: CodeCellOptions, theme: Theme): { title: string; meta?: string } {
|
|
35
35
|
const { index, total, title, status, spinnerFrame, duration } = options;
|
|
36
36
|
const parts: string[] = [];
|
|
37
|
-
if (index !== undefined && total !== undefined) {
|
|
38
|
-
parts.push(theme.fg("accent", `[${index + 1}/${total}]`));
|
|
39
|
-
}
|
|
40
|
-
if (title) {
|
|
41
|
-
parts.push(theme.fg("toolTitle", title));
|
|
42
|
-
}
|
|
43
|
-
const headerTitle = parts.length > 0 ? parts.join(" ") : theme.fg("toolTitle", "Code");
|
|
44
|
-
|
|
45
|
-
const metaParts: string[] = [];
|
|
46
|
-
if (duration !== undefined) {
|
|
47
|
-
metaParts.push(theme.fg("dim", `(${formatDuration(duration)})`));
|
|
48
|
-
}
|
|
49
37
|
if (status) {
|
|
50
38
|
const icon = getStateIcon(
|
|
51
39
|
status === "complete"
|
|
@@ -59,12 +47,23 @@ function formatHeader(options: CodeCellOptions, theme: Theme): { title: string;
|
|
|
59
47
|
spinnerFrame,
|
|
60
48
|
);
|
|
61
49
|
if (status === "pending" || status === "running") {
|
|
62
|
-
|
|
50
|
+
parts.push(`${icon} ${theme.fg("muted", status)}`);
|
|
63
51
|
} else {
|
|
64
|
-
|
|
52
|
+
parts.push(icon);
|
|
65
53
|
}
|
|
66
54
|
}
|
|
55
|
+
if (index !== undefined && total !== undefined) {
|
|
56
|
+
parts.push(theme.fg("accent", `[${index + 1}/${total}]`));
|
|
57
|
+
}
|
|
58
|
+
if (title) {
|
|
59
|
+
parts.push(theme.fg("toolTitle", title));
|
|
60
|
+
}
|
|
61
|
+
const headerTitle = parts.length > 0 ? parts.join(" ") : theme.fg("toolTitle", "Code");
|
|
67
62
|
|
|
63
|
+
const metaParts: string[] = [];
|
|
64
|
+
if (duration !== undefined) {
|
|
65
|
+
metaParts.push(theme.fg("dim", `(${formatDuration(duration)})`));
|
|
66
|
+
}
|
|
68
67
|
if (metaParts.length === 0) return { title: headerTitle };
|
|
69
68
|
return { title: headerTitle, meta: metaParts.join(theme.fg("dim", theme.sep.dot)) };
|
|
70
69
|
}
|