@llblab/pi-kit 0.36.0 → 0.36.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/BACKLOG.md CHANGED
@@ -2,10 +2,6 @@
2
2
 
3
3
  Package pins, resource order and bundled runtime ownership remain authoritative in `package.json`. Release outcomes belong in [CHANGELOG.md](./CHANGELOG.md).
4
4
 
5
- ## Automatic-update operations
6
-
7
- - **First changed-cohort smoke:** After the first live automatic pin update, confirm the four-file main commit, explicit `workflow_dispatch` to `publish-pi-kit.yml`, matching expected commit, and final npm/tag/GitHub Release identities. No-update runs and local bare-repository tests do not prove this hosted changed-cohort path. Do not fabricate an update or weaken branch protection for a smoke test; inspect the real run or disable the updater on failure.
8
-
9
5
  ## Carried checks
10
6
 
11
7
  - **Installed 0.35.4 Telegram smoke (operator-owned):** After separately authorized kit installation/reload of every Pi process together, run `/telegram-new` in one follower instance and confirm the same Thread is reused with a new letter slot and title, with no second tab and no orphan left behind. Then restart that instance, open a new session in the same folder, and confirm it adopts the retained Thread instead of provisioning another. Do not erase accepted work or replay uncertain input. Packed validation does not certify installed clients.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to `@llblab/pi-kit` are documented here.
4
4
 
5
+ ## 0.36.1: Bundled Package Updates (2026-10-22)
6
+
7
+ - `Exact pins`: `@llblab/pi-state-flow` 0.26.4 → 0.26.5.
8
+ - `Packaging`: Synchronizes the lockfile, bundle aliases and README inventory. Package membership and resource order remain unchanged; packed validation does not certify extension safety or installed-client behavior.
9
+
5
10
  ## 0.36.0: Bundled Package Updates (2026-10-21)
6
11
 
7
12
  - `Automatic updates`: Replaces the dependency PR/approval step with validated direct-to-main adoption of stable same-major patch/minor releases. Exact pins, bundle aliases, lockfile, README and kit version remain synchronized; preparation stays read-only and a fresh data-only writer rejects unsafe payloads and concurrent main changes.
package/README.md CHANGED
@@ -17,7 +17,7 @@ Package links lead to the owning repositories for usage, documentation, issues,
17
17
  | [`@llblab/pi-clean-room`](https://github.com/llblab/pi-clean-room) | `0.3.0` | Isolated nested Pi TUI with named npm extensions and compatible model selection |
18
18
  | [`@llblab/pi-codex-usage`](https://github.com/llblab/pi-codex-usage) | `0.13.1` | OpenAI/legacy Codex subscription quota and Business credit status, with persistent priority Fast toggle mirrored in Telegram |
19
19
  | [`@llblab/pi-grow-loop`](https://github.com/llblab/pi-grow-loop) | `0.9.0` | Visible continuation scheduling and bounded worker Skills through compiled, manifest-owned resources |
20
- | [`@llblab/pi-state-flow`](https://github.com/llblab/pi-state-flow) | `0.26.4` | Scoped context/memory compiler with step-independent current memory, stable Passive/Active modes and visible blocked-state status |
20
+ | [`@llblab/pi-state-flow`](https://github.com/llblab/pi-state-flow) | `0.26.5` | Scoped context/memory compiler with step-independent current memory, stable Passive/Active modes and visible blocked-state status |
21
21
  | [`@llblab/pi-telegram`](https://github.com/llblab/pi-telegram) | `0.57.3` | Telegram companion with per-prompt Steer, queued controls, Reroute/Restore, recoverable connections, previews, follower Threads, files, and voice |
22
22
  | [`@llblab/skills`](https://github.com/llblab/skills) | `1.15.0` | Portable workflows for engineering, review, design, context maintenance, and other focused tasks |
23
23
 
@@ -25,7 +25,7 @@ Versions are exact by design. An upstream release does not change an installed k
25
25
 
26
26
  ## Install
27
27
 
28
- Requires **Pi 1.0.0+** and **Node.js 22.19.0+**. State Flow requires its canonical checkpoint/tail storage format and does not convert unsupported stores in place. Preserve existing stores and consult the [owning package's storage guidance](https://github.com/llblab/pi-state-flow/blob/v0.26.4/docs/usage.md#moving-a-store-and-supported-formats) before changing installations.
28
+ Requires **Pi 1.0.0+** and **Node.js 22.19.0+**. State Flow requires its canonical checkpoint/tail storage format and does not convert unsupported stores in place. Preserve existing stores and consult the [owning package's storage guidance](https://github.com/llblab/pi-state-flow/blob/v0.26.5/docs/usage.md#moving-a-store-and-supported-formats) before changing installations.
29
29
 
30
30
  From npm:
31
31
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  > Each release keeps at most 8 outcome records of at most 512 characters.
4
4
 
5
+ ## 0.26.5: Telegram Mode Receipt Hotfix
6
+
7
+ - `Telegram mode controls`: Passive now refreshes the selected button on the first accepted click after Off, including existing-memory restoration and write-fence recovery during an active run. Accepted controls retain their renewed presentation receipt instead of being mistaken for canceled work; later mode choices, branch changes and shutdown still suppress obsolete updates. Memory storage and mode semantics are unchanged; no migration is required.
8
+
5
9
  ## 0.26.4: Passive Compaction Continuity
6
10
 
7
11
  - `Passive continuation`: After idle Stop, native compaction can replace the later user anchor with a summary. Passive now retains that summary, the available tool calls/results and later refinements instead of reducing requests to a frozen handoff. Reload/resume preserve the same continuation; discarded raw history is not reconstructed. Native compaction, memory scopes and stored state are unchanged; no migration or configuration change is required.
@@ -1214,11 +1214,11 @@ export default function stateFlowExtension(pi, options = {}) {
1214
1214
  });
1215
1215
  if (!modePersistenceError) {
1216
1216
  appendCheckpoint();
1217
- return { ok: true, message: `State Flow ${selectedMode}` };
1217
+ return { ok: true, message: `State Flow ${selectedMode}`, signal: sharedInspectionLifetime.signal };
1218
1218
  }
1219
1219
  const message = conciseDiagnostic(`State Flow ${selectedMode}; memory writes paused: ${modePersistenceError}`);
1220
1220
  notifyProblem(ctx, message, "warning");
1221
- return { ok: true, message };
1221
+ return { ok: true, message, signal: sharedInspectionLifetime.signal };
1222
1222
  };
1223
1223
  let accepted = false;
1224
1224
  try {
@@ -1291,10 +1291,11 @@ export default function stateFlowExtension(pi, options = {}) {
1291
1291
  const operation = selectMode(activeContext, mode);
1292
1292
  if (mode === "active")
1293
1293
  return operation;
1294
- // Inactive choices revoke older presentation at once; the receipt belongs to the new lifetime.
1294
+ // Native-only outcomes use the selected lifetime; async acceptance may renew and return its own receipt.
1295
1295
  const signal = sharedInspectionLifetime.signal;
1296
1296
  try {
1297
- return { ...await operation, signal };
1297
+ const result = await operation;
1298
+ return { ...result, signal: result.signal ?? signal };
1298
1299
  }
1299
1300
  catch (error) {
1300
1301
  return { ok: false, message: diagnosticText(error), signal };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llblab/pi-state-flow",
3
- "version": "0.26.4",
3
+ "version": "0.26.5",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "description": "Incremental scoped state/context/memory compiler for Pi, inspired by SKILL.state",
@@ -138,7 +138,7 @@ The optional adapter presents one Off | Passive | Active row and uses the same m
138
138
  - Inspection returns coherent state plus matching revisions, without publication.
139
139
  - Controls and inspections acknowledge callbacks before waiting, suppress revoked results and escape late failures in the current menu.
140
140
  - Synchronous mode-selection ports are supported.
141
- - A first Passive selection may install a read-only shared cache without invalidating its own success receipt. Later controls, branch changes and cancellation still revoke obsolete presentation.
141
+ - Passive acceptance returns its current presentation receipt after any internal restoration or lifetime renewal, including existing-memory reacquisition after Off and write-fence recovery. The adapter preserves that accepted receipt, so the first click refreshes the button in both busy and idle sessions. Pre-runtime shared-cache loading also retains its receipt. Later controls, branch changes and shutdown still revoke obsolete presentation, including a change away and back to the same mode while callback acknowledgement waits.
142
142
 
143
143
  Adapter tests establish these contracts with isolated transport fixtures; they are not a live Telegram smoke test. Missing or unready transport remains fail-open and cannot change core memory behavior.
144
144
 
@@ -211,6 +211,7 @@ When `pi-telegram` is available, its main-menu section shows `State Flow: active
211
211
 
212
212
  - A horizontal radio row presents `Off | Passive | Active`. The selected option uses 🟣, 🟡 or 🟢 respectively; each inactive option uses ⚫️.
213
213
  - Telegram Active requested during a run waits for settlement; Passive and Off apply immediately.
214
+ - The first accepted Passive click refreshes the selected button after memory restoration or write-fence recovery, including while the agent is busy. A later mode or branch selection still suppresses an obsolete menu update.
214
215
  - Ordinary successful controls add no redundant mode receipt; diagnostic outcomes stay visible.
215
216
  - Off exposes neither tool nor State Flow model context.
216
217
 
@@ -1200,11 +1200,11 @@ export default function stateFlowExtension(pi: ExtensionAPI, options: StateFlowE
1200
1200
  });
1201
1201
  if (!modePersistenceError) {
1202
1202
  appendCheckpoint();
1203
- return { ok: true, message: `State Flow ${selectedMode}` };
1203
+ return { ok: true, message: `State Flow ${selectedMode}`, signal: sharedInspectionLifetime.signal };
1204
1204
  }
1205
1205
  const message = conciseDiagnostic(`State Flow ${selectedMode}; memory writes paused: ${modePersistenceError}`);
1206
1206
  notifyProblem(ctx, message, "warning");
1207
- return { ok: true, message };
1207
+ return { ok: true, message, signal: sharedInspectionLifetime.signal };
1208
1208
  };
1209
1209
  let accepted = false;
1210
1210
  try {
@@ -1272,10 +1272,11 @@ export default function stateFlowExtension(pi: ExtensionAPI, options: StateFlowE
1272
1272
  if (!activeContext) throw new Error("State Flow is not attached to an active session yet");
1273
1273
  const operation = selectMode(activeContext, mode);
1274
1274
  if (mode === "active") return operation;
1275
- // Inactive choices revoke older presentation at once; the receipt belongs to the new lifetime.
1275
+ // Native-only outcomes use the selected lifetime; async acceptance may renew and return its own receipt.
1276
1276
  const signal = sharedInspectionLifetime.signal;
1277
1277
  try {
1278
- return { ...await operation, signal };
1278
+ const result = await operation;
1279
+ return { ...result, signal: result.signal ?? signal };
1279
1280
  } catch (error) {
1280
1281
  return { ok: false, message: diagnosticText(error), signal };
1281
1282
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llblab/pi-state-flow",
3
- "version": "0.26.4",
3
+ "version": "0.26.5",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "description": "Incremental scoped state/context/memory compiler for Pi, inspired by SKILL.state",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@llblab/pi-kit",
3
- "version": "0.36.0",
3
+ "version": "0.36.1",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -49,7 +49,7 @@
49
49
  "@llblab/pi-clean-room": "0.3.0",
50
50
  "@llblab/pi-codex-usage": "0.13.1",
51
51
  "@llblab/pi-grow-loop": "0.9.0",
52
- "@llblab/pi-state-flow": "0.26.4",
52
+ "@llblab/pi-state-flow": "0.26.5",
53
53
  "@llblab/pi-telegram": "0.57.3",
54
54
  "@llblab/skills": "1.15.0"
55
55
  },