@fitchmultz/pi-subagents 0.52.5 → 0.52.6

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,6 +2,24 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.52.6 - 2026-11-01
6
+
7
+ <!-- npm-release:unreleased:start -->
8
+
9
+ - Qualify a retained npm candidate through the native child and package-install smoke on the selected Pi hosts.
10
+ - Reconcile main-branch changes into reviewed patch releases and publish the qualified archive to npm and GitHub.
11
+
12
+ <!-- npm-release:unreleased:end -->
13
+
14
+ - Automate qualified npm releases (#315) ([e769f2d](https://github.com/fitchmultz/pi-subagents/commit/e769f2d62f4b731f56e301160b57929a3a0cec6b))
15
+
16
+ ### What's Changed
17
+
18
+ - Qualify retained Subagents candidates on native hosts (1/2) by @fitchmultz in https://github.com/fitchmultz/pi-subagents/pull/314
19
+ - Automate qualified Subagents releases (2/2) by @fitchmultz in https://github.com/fitchmultz/pi-subagents/pull/315
20
+
21
+ **Full Changelog**: https://github.com/fitchmultz/pi-subagents/compare/v0.52.5...v0.52.6
22
+
5
23
  ## [0.52.5] - 2026-10-31
6
24
 
7
25
  ### Fixed
@@ -1 +1 @@
1
- export const EXTENSION_BUILD = Object.freeze({"version":"0.52.5","sha256":"ccb2b2cb4725bfa7f5e813494a2007dc60ed9c04e677502d08df23612cc30af8"});
1
+ export const EXTENSION_BUILD = Object.freeze({"version":"0.52.6","sha256":"ccb2b2cb4725bfa7f5e813494a2007dc60ed9c04e677502d08df23612cc30af8"});
@@ -65,15 +65,25 @@ commands. Matching versions do not establish matching runtime behavior.
65
65
 
66
66
  Production-only installs must resolve the selected host's SDK and TypeBox, not
67
67
  shadow them with this package's development graph. Exercise the packed single
68
- entry through the real Pi loader and an actual native child session. Native faux
69
- providers can test tools, receipts, journals, process lifecycle and output without
70
- paid model calls; they are not live-model evidence.
68
+ entry through the real Pi loader and an actual native child session. When release
69
+ CI receives a prepared candidate, it verifies the candidate and selected host
70
+ identities and exercises that same tarball through the native package smoke.
71
+ Native faux providers can test tools, receipts, journals, process lifecycle and
72
+ output without paid model calls; they are not live-model evidence.
71
73
 
72
74
  Real-model acceptance additionally checks that full forked history preserves an
73
75
  actual earlier delegation result, and that ordinary main/child sessions discover,
74
76
  message, and read last responses across agent directories under the confirmed
75
77
  two-level topology. Never publish credentials or private transcripts as evidence.
76
78
 
79
+ ## npm releases
80
+
81
+ Main-branch changes are reconciled into a reviewed patch-version PR. After that PR
82
+ merges, release CI prepares one npm candidate and runs the complete host CI and
83
+ native package smoke against it. The qualification receipt binds the candidate,
84
+ source, host identities and workflow run before the same archive is published to
85
+ npm and attached to the matching GitHub release.
86
+
77
87
  ## Isolation and safety
78
88
 
79
89
  Every test/smoke broker uses a short, explicit `PI_INTERCOM_RUNTIME_DIR` owned by
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fitchmultz/pi-subagents",
3
- "version": "0.52.5",
3
+ "version": "0.52.6",
4
4
  "description": "Pi extension for subagent orchestration and local session coordination",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,19 +12,21 @@ import {
12
12
  writeFileSync,
13
13
  } from "node:fs";
14
14
  import { tmpdir } from "node:os";
15
- import { dirname, join } from "node:path";
15
+ import { dirname, join, resolve } from "node:path";
16
16
  import { fileURLToPath, pathToFileURL } from "node:url";
17
17
  import { hostRoot } from "./compat-host.mjs";
18
18
  import { compilerInvocation } from "./typescript.mjs";
19
19
 
20
20
  if (process.argv.includes("--help") || process.argv.includes("-h")) {
21
21
  console.log(
22
- "Usage: node scripts/package-smoke.mjs\n\nPack and install the single-entry package without development dependencies. Verify host SDK/TypeBox identity and execute a real native actor using a credential-free local provider. No publication or paid model calls.\nExit codes: 0 passed; 1 packaging, native execution or cleanup failed.",
22
+ "Usage: node scripts/package-smoke.mjs [tarball]\n\nPack and install the single-entry package without development dependencies, or test an existing tarball unchanged. Verify host SDK/TypeBox identity and execute a real native actor using a credential-free local provider. No publication or paid model calls.\nExit codes: 0 passed; 1 packaging, native execution or cleanup failed.",
23
23
  );
24
24
  process.exit(0);
25
25
  }
26
+ assert.ok(process.argv.length <= 3, "Expected at most one package tarball; use --help");
26
27
 
27
28
  const packageJson = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
29
+ const candidate = process.argv[2] ? resolve(process.argv[2]) : undefined;
28
30
  const root = mkdtempSync(join(tmpdir(), "ps-package-"));
29
31
  const packDir = join(root, "pack");
30
32
  mkdirSync(packDir);
@@ -202,9 +204,25 @@ try {
202
204
  verifyManifest(packageJson);
203
205
  process.env.PI_PACKAGE_DIR = hostRoot;
204
206
  const pack = Object.values(
205
- JSON.parse(run("npm", ["pack", "--json", "--pack-destination", packDir])),
207
+ JSON.parse(
208
+ run("npm", [
209
+ "pack",
210
+ "--json",
211
+ "--pack-destination",
212
+ packDir,
213
+ ...(candidate ? [candidate] : []),
214
+ ]),
215
+ ),
206
216
  )[0];
207
217
  assert.ok(pack && Array.isArray(pack.files), "npm pack must report files");
218
+ if (candidate) {
219
+ assert.equal(pack.name, packageJson.name);
220
+ assert.equal(pack.version, packageJson.version, "Candidate version differs from source");
221
+ assert.ok(
222
+ readFileSync(join(packDir, pack.filename)).equals(readFileSync(candidate)),
223
+ "npm changed the candidate tarball",
224
+ );
225
+ }
208
226
  const paths = new Set(pack.files.map((file) => file.path));
209
227
  for (const path of [
210
228
  "package.json",