@fitchmultz/pi-subagents 0.52.12 → 0.52.13
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 +13 -0
- package/README.md +6 -6
- package/dist/build-info.js +1 -1
- package/dist/shared/compact-cards.js +11 -8
- package/docs/development.md +0 -6
- package/docs/reference.md +1 -1
- package/package.json +5 -10
- package/scripts/linux-smoke.sh +2 -2
- package/src/shared/compact-cards.ts +14 -6
- package/tsconfig.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.52.13 - 2026-11-02
|
|
6
|
+
|
|
7
|
+
<!-- npm-release:unreleased:start -->
|
|
8
|
+
<!-- npm-release:unreleased:end -->
|
|
9
|
+
|
|
10
|
+
- Raise the Pi floor to 1.5.0 (#329) ([fdc15e0](https://github.com/fitchmultz/pi-subagents/commit/fdc15e09fff7bedb74901b09374779b1e8fe4449))
|
|
11
|
+
|
|
12
|
+
### What's Changed
|
|
13
|
+
|
|
14
|
+
- Raise the Pi floor to 1.5.0 by @fitchmultz in https://github.com/fitchmultz/pi-subagents/pull/329
|
|
15
|
+
|
|
16
|
+
**Full Changelog**: https://github.com/fitchmultz/pi-subagents/compare/v0.52.12...v0.52.13
|
|
17
|
+
|
|
5
18
|
## 0.52.12 - 2026-11-02
|
|
6
19
|
|
|
7
20
|
<!-- npm-release:unreleased:start -->
|
package/README.md
CHANGED
|
@@ -127,9 +127,9 @@ It never runs during startup/install, deletes data, or reclaims disk space.
|
|
|
127
127
|
- [Development and qualification](docs/development.md)
|
|
128
128
|
- [Diagnosis, baseline, and measurable rebuild gates](docs/single-agent-rebuild.md)
|
|
129
129
|
|
|
130
|
-
Supports official Pi and the maintained `fitchmultz/pi` fork
|
|
131
|
-
qualified separately, including native Android/Termux. Node.js
|
|
132
|
-
[development prerequisites](docs/development.md). Source
|
|
133
|
-
need an Android-native `tsgo` on PATH; the prebuilt npm
|
|
134
|
-
compiler. See
|
|
135
|
-
MIT licensed.
|
|
130
|
+
Supports official Pi and the maintained `fitchmultz/pi` fork at 1.5.0 or later;
|
|
131
|
+
the two hosts are qualified separately, including native Android/Termux. Node.js
|
|
132
|
+
is required; see [development prerequisites](docs/development.md). Source
|
|
133
|
+
installs on Android also need an Android-native `tsgo` on PATH; the prebuilt npm
|
|
134
|
+
package does not need a compiler. See
|
|
135
|
+
[native Android/Termux](docs/development.md#native-androidtermux). MIT licensed.
|
package/dist/build-info.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const EXTENSION_BUILD = Object.freeze({"version":"0.52.
|
|
1
|
+
export const EXTENSION_BUILD = Object.freeze({"version":"0.52.13","sha256":"239fe0f6aa0caf99a00fff7fe7a1031b902d697eab9a95f5dae05c3458b58cf0"});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getMarkdownTheme,
|
|
1
|
+
import { getMarkdownTheme, truncateToVisualLines, } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { Box, Container, Markdown, Spacer, Text, truncateToWidth, } from "@earendil-works/pi-tui";
|
|
3
3
|
import { actionText } from "./tui-action.js";
|
|
4
|
-
function preview(content, expanded, theme,
|
|
4
|
+
function preview(content, expanded, theme, expandHint) {
|
|
5
5
|
if (expanded) {
|
|
6
6
|
return content;
|
|
7
7
|
}
|
|
@@ -10,7 +10,7 @@ function preview(content, expanded, theme, showHint = true) {
|
|
|
10
10
|
render(width) {
|
|
11
11
|
if (cache?.width !== width) {
|
|
12
12
|
const { visualLines, skippedCount } = truncateToVisualLines(content.render(width).join("\n"), 4, width, 0, "start");
|
|
13
|
-
const hint = theme.fg("dim", `… ${skippedCount} more lines${
|
|
13
|
+
const hint = theme.fg("dim", `… ${skippedCount} more lines${expandHint === undefined ? "" : ` · ${expandHint}`}`);
|
|
14
14
|
cache = {
|
|
15
15
|
width,
|
|
16
16
|
lines: skippedCount > 0 ? [...visualLines, truncateToWidth(hint, width)] : visualLines,
|
|
@@ -24,10 +24,12 @@ function preview(content, expanded, theme, showHint = true) {
|
|
|
24
24
|
},
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
export const renderCompactResult = (result, { expanded }, theme) => preview(new Text(theme.fg("toolOutput", result.content
|
|
27
|
+
export const renderCompactResult = (result, { expanded }, theme, context) => preview(new Text(theme.fg("toolOutput", result.content
|
|
28
28
|
.filter((block) => block.type === "text")
|
|
29
29
|
.map((block) => block.text)
|
|
30
|
-
.join("\n")), 0, 0), expanded, theme
|
|
30
|
+
.join("\n")), 0, 0), expanded, theme,
|
|
31
|
+
// Pi injects keyHint so the hint shows the user's configured keys.
|
|
32
|
+
context.keyHint("app.tools.expand", "to expand"));
|
|
31
33
|
export function registerCompactMessages(pi, types) {
|
|
32
34
|
let ui;
|
|
33
35
|
pi.on("session_start", (_event, ctx) => {
|
|
@@ -37,7 +39,8 @@ export function registerCompactMessages(pi, types) {
|
|
|
37
39
|
ui = undefined;
|
|
38
40
|
});
|
|
39
41
|
for (const type of types) {
|
|
40
|
-
pi.registerMessageRenderer(type, (message,
|
|
42
|
+
pi.registerMessageRenderer(type, (message, options, theme) => {
|
|
43
|
+
const { expanded, outputPad } = options;
|
|
41
44
|
const text = typeof message.content === "string"
|
|
42
45
|
? message.content
|
|
43
46
|
: message.content
|
|
@@ -53,13 +56,13 @@ export function registerCompactMessages(pi, types) {
|
|
|
53
56
|
this.clear();
|
|
54
57
|
const label = theme.fg("customMessageLabel", theme.bold(`[${type}]`));
|
|
55
58
|
this.addChild(markdown.render(width).length > 4
|
|
56
|
-
? actionText(`${label} · ${keyHint("app.tools.expand", expanded ? "to collapse" : "to expand")}`, () => ui?.setToolsExpanded(!expanded))
|
|
59
|
+
? actionText(`${label} · ${options.keyHint("app.tools.expand", expanded ? "to collapse" : "to expand")}`, () => ui?.setToolsExpanded(!expanded))
|
|
57
60
|
: new Text(label, 0, 0));
|
|
58
61
|
return super.render(width);
|
|
59
62
|
}
|
|
60
63
|
})());
|
|
61
64
|
box.addChild(new Spacer(1));
|
|
62
|
-
box.addChild(preview(markdown, expanded, theme
|
|
65
|
+
box.addChild(preview(markdown, expanded, theme));
|
|
63
66
|
return box;
|
|
64
67
|
});
|
|
65
68
|
}
|
package/docs/development.md
CHANGED
|
@@ -53,12 +53,6 @@ hosted CI; do not substitute a weakened checker or incompatible Linux executable
|
|
|
53
53
|
|
|
54
54
|
## Runtime qualification
|
|
55
55
|
|
|
56
|
-
The official development SDK 1.4.0 pins Undici 8.10.2 exactly. A parent-scoped
|
|
57
|
-
override selects 8.12.3 for that development graph to fix GHSA-4qv8-2p9j-2685,
|
|
58
|
-
GHSA-f72v-6w45-q472 and GHSA-xjj6-f33q-929c. Remove the override when an official
|
|
59
|
-
SDK release supplies a fixed version. It does not replace a consumer's host SDK
|
|
60
|
-
or Node's built-in fetch.
|
|
61
|
-
|
|
62
56
|
Qualify the latest stable official Pi and the intended fork revision separately.
|
|
63
57
|
Record the exact package root, revision/build, Node binary, and executed test
|
|
64
58
|
commands. Matching versions do not establish matching runtime behavior.
|
package/docs/reference.md
CHANGED
|
@@ -29,7 +29,7 @@ unknown IDs and invalid suffixes fail without fuzzy matching or another provider
|
|
|
29
29
|
Native resolution follows Pi's case-insensitive ID matching. Pi still applies the
|
|
30
30
|
selected model's native thinking capabilities.
|
|
31
31
|
|
|
32
|
-
Official Pi
|
|
32
|
+
Official Pi, including 1.5.0, does not export that resolver. Older fork runtimes also
|
|
33
33
|
lack the export. Those hosts retain
|
|
34
34
|
case-sensitive literal-ID overrides and inherited thinking; suffix requests fail with an upgrade
|
|
35
35
|
message rather than being parsed by an extension-side replacement. This requires
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fitchmultz/pi-subagents",
|
|
3
|
-
"version": "0.52.
|
|
3
|
+
"version": "0.52.13",
|
|
4
4
|
"description": "Pi extension for subagent orchestration and local session coordination",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -104,10 +104,10 @@
|
|
|
104
104
|
}
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
|
-
"@earendil-works/pi-agent-core": "1.
|
|
108
|
-
"@earendil-works/pi-ai": "1.
|
|
109
|
-
"@earendil-works/pi-coding-agent": "1.
|
|
110
|
-
"@earendil-works/pi-tui": "1.
|
|
107
|
+
"@earendil-works/pi-agent-core": "1.5.0",
|
|
108
|
+
"@earendil-works/pi-ai": "1.5.0",
|
|
109
|
+
"@earendil-works/pi-coding-agent": "1.5.0",
|
|
110
|
+
"@earendil-works/pi-tui": "1.5.0",
|
|
111
111
|
"@types/node": "24.19.2",
|
|
112
112
|
"@types/sinon": "22.0.2",
|
|
113
113
|
"oxfmt": "0.75.0",
|
|
@@ -123,10 +123,5 @@
|
|
|
123
123
|
},
|
|
124
124
|
"engines": {
|
|
125
125
|
"node": ">=24.21.0"
|
|
126
|
-
},
|
|
127
|
-
"overrides": {
|
|
128
|
-
"@earendil-works/pi-coding-agent": {
|
|
129
|
-
"undici": "8.12.3"
|
|
130
|
-
}
|
|
131
126
|
}
|
|
132
127
|
}
|
package/scripts/linux-smoke.sh
CHANGED
|
@@ -4,7 +4,7 @@ set -euo pipefail
|
|
|
4
4
|
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
|
5
5
|
printf '%s\n' 'Usage: bash scripts/linux-smoke.sh
|
|
6
6
|
|
|
7
|
-
Validate committed HEAD in Docker against a credential-free, prebuilt Pi 1.0
|
|
7
|
+
Validate committed HEAD in Docker against a credential-free, prebuilt Pi 1.5.0+
|
|
8
8
|
Linux archive with a single top-level pi/ directory and built SDK/CLI output.
|
|
9
9
|
|
|
10
10
|
Example:
|
|
@@ -21,7 +21,7 @@ if [[ $# -ne 0 ]]; then
|
|
|
21
21
|
printf '%s\n' 'No arguments accepted; use --help.' >&2
|
|
22
22
|
exit 2
|
|
23
23
|
fi
|
|
24
|
-
: "${PI_LINUX_PI_ARCHIVE:?Set PI_LINUX_PI_ARCHIVE to an absolute path to a credential-free prebuilt Linux Pi 1.0 .tar.gz (top-level pi/) with its Linux dependencies and built SDK/CLI.}"
|
|
24
|
+
: "${PI_LINUX_PI_ARCHIVE:?Set PI_LINUX_PI_ARCHIVE to an absolute path to a credential-free prebuilt Linux Pi 1.5.0+ .tar.gz (top-level pi/) with its Linux dependencies and built SDK/CLI.}"
|
|
25
25
|
|
|
26
26
|
# Validate committed HEAD without passing host credentials or mounting the checkout.
|
|
27
27
|
git -C "$(dirname "$0")/.." archive HEAD | docker run --rm --init -i \
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getMarkdownTheme,
|
|
3
|
-
keyHint,
|
|
4
3
|
truncateToVisualLines,
|
|
5
4
|
type ExtensionAPI,
|
|
6
5
|
type ExtensionContext,
|
|
@@ -18,7 +17,12 @@ import {
|
|
|
18
17
|
} from "@earendil-works/pi-tui";
|
|
19
18
|
import { actionText } from "./tui-action.ts";
|
|
20
19
|
|
|
21
|
-
function preview(
|
|
20
|
+
function preview(
|
|
21
|
+
content: Component,
|
|
22
|
+
expanded: boolean,
|
|
23
|
+
theme: Theme,
|
|
24
|
+
expandHint?: string,
|
|
25
|
+
): Component {
|
|
22
26
|
if (expanded) {
|
|
23
27
|
return content;
|
|
24
28
|
}
|
|
@@ -35,7 +39,7 @@ function preview(content: Component, expanded: boolean, theme: Theme, showHint =
|
|
|
35
39
|
);
|
|
36
40
|
const hint = theme.fg(
|
|
37
41
|
"dim",
|
|
38
|
-
`… ${skippedCount} more lines${
|
|
42
|
+
`… ${skippedCount} more lines${expandHint === undefined ? "" : ` · ${expandHint}`}`,
|
|
39
43
|
);
|
|
40
44
|
cache = {
|
|
41
45
|
width,
|
|
@@ -55,6 +59,7 @@ export const renderCompactResult: NonNullable<ToolDefinition["renderResult"]> =
|
|
|
55
59
|
result,
|
|
56
60
|
{ expanded },
|
|
57
61
|
theme,
|
|
62
|
+
context,
|
|
58
63
|
) =>
|
|
59
64
|
preview(
|
|
60
65
|
new Text(
|
|
@@ -70,6 +75,8 @@ export const renderCompactResult: NonNullable<ToolDefinition["renderResult"]> =
|
|
|
70
75
|
),
|
|
71
76
|
expanded,
|
|
72
77
|
theme,
|
|
78
|
+
// Pi injects keyHint so the hint shows the user's configured keys.
|
|
79
|
+
context.keyHint("app.tools.expand", "to expand"),
|
|
73
80
|
);
|
|
74
81
|
|
|
75
82
|
export function registerCompactMessages(pi: ExtensionAPI, types: readonly string[]): void {
|
|
@@ -81,7 +88,8 @@ export function registerCompactMessages(pi: ExtensionAPI, types: readonly string
|
|
|
81
88
|
ui = undefined;
|
|
82
89
|
});
|
|
83
90
|
for (const type of types) {
|
|
84
|
-
pi.registerMessageRenderer(type, (message,
|
|
91
|
+
pi.registerMessageRenderer(type, (message, options, theme) => {
|
|
92
|
+
const { expanded, outputPad } = options;
|
|
85
93
|
const text =
|
|
86
94
|
typeof message.content === "string"
|
|
87
95
|
? message.content
|
|
@@ -101,7 +109,7 @@ export function registerCompactMessages(pi: ExtensionAPI, types: readonly string
|
|
|
101
109
|
this.addChild(
|
|
102
110
|
markdown.render(width).length > 4
|
|
103
111
|
? actionText(
|
|
104
|
-
`${label} · ${keyHint("app.tools.expand", expanded ? "to collapse" : "to expand")}`,
|
|
112
|
+
`${label} · ${options.keyHint("app.tools.expand", expanded ? "to collapse" : "to expand")}`,
|
|
105
113
|
() => ui?.setToolsExpanded(!expanded),
|
|
106
114
|
)
|
|
107
115
|
: new Text(label, 0, 0),
|
|
@@ -111,7 +119,7 @@ export function registerCompactMessages(pi: ExtensionAPI, types: readonly string
|
|
|
111
119
|
})(),
|
|
112
120
|
);
|
|
113
121
|
box.addChild(new Spacer(1));
|
|
114
|
-
box.addChild(preview(markdown, expanded, theme
|
|
122
|
+
box.addChild(preview(markdown, expanded, theme));
|
|
115
123
|
return box;
|
|
116
124
|
});
|
|
117
125
|
}
|
package/tsconfig.json
CHANGED
|
@@ -23,7 +23,12 @@
|
|
|
23
23
|
"exactOptionalPropertyTypes": true,
|
|
24
24
|
"noUncheckedSideEffectImports": true,
|
|
25
25
|
"forceConsistentCasingInFileNames": true,
|
|
26
|
-
"noCheck": false
|
|
26
|
+
"noCheck": false,
|
|
27
|
+
"paths": {
|
|
28
|
+
"@earendil-works/pi-ai": [
|
|
29
|
+
"./node_modules/@earendil-works/pi-coding-agent/dist/core/extensions/pi-ai-extension-view.d.ts"
|
|
30
|
+
]
|
|
31
|
+
}
|
|
27
32
|
},
|
|
28
33
|
"include": [
|
|
29
34
|
"**/*.ts",
|