@llblab/pi-kit 0.29.0 → 0.29.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 +2 -1
- package/CHANGELOG.md +4 -0
- package/README.md +3 -3
- package/node_modules/@llblab/pi-state-flow/BACKLOG.md +1 -32
- package/node_modules/@llblab/pi-state-flow/CHANGELOG.md +5 -0
- package/node_modules/@llblab/pi-state-flow/dist/lib/logging.js +1 -1
- package/node_modules/@llblab/pi-state-flow/dist/lib/telegram.js +1 -1
- package/node_modules/@llblab/pi-state-flow/dist/package.json +1 -1
- package/node_modules/@llblab/pi-state-flow/docs/agent-contract-relocation.md +1 -1
- package/node_modules/@llblab/pi-state-flow/docs/usage.md +2 -2
- package/node_modules/@llblab/pi-state-flow/lib/logging.ts +1 -1
- package/node_modules/@llblab/pi-state-flow/lib/telegram.ts +1 -1
- package/node_modules/@llblab/pi-state-flow/package.json +1 -1
- package/package.json +2 -2
package/BACKLOG.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Backlog
|
|
2
2
|
|
|
3
|
-
The 0.29.
|
|
3
|
+
The 0.29.1 composition advances State Flow to 0.26.1; package pins, resource order and bundled runtime ownership remain authoritative in `package.json`. Release outcomes belong in [CHANGELOG.md](./CHANGELOG.md).
|
|
4
4
|
|
|
5
5
|
## Carried checks
|
|
6
6
|
|
|
7
|
+
- **Installed 0.29.1 State Flow smoke (operator-owned):** After separately authorized installation/reload, use disposable storage to confirm new diagnostics use `tmp/pi-state-flow`, old `tmp/state-flow` logs and canonical memory stay untouched, and selected Telegram modes show 🟣 Off, 🟡 Passive and 🟢 Active. Packed validation does not certify installed clients.
|
|
7
8
|
- **Installed 0.29.0 State Flow smoke (operator-owned):** After separately authorized installation/reload, use disposable storage to confirm `/tree` to an old step and reload keep current memory writable in Active and Passive, a fork copies the parent's current memory, and unreadable current files show `active (blocked)` with Passive retry and Off releasing inference only. Packed validation does not certify installed clients.
|
|
8
9
|
- **Installed 0.28.0 Telegram smoke (operator-owned):** After separately authorized installation/reload and queue drain or accepted waiting-work loss, confirm Restore/routing controls and follower delivery with disposable runtime storage. Do not test damaged-state reset against live shared state. Windows Restore remains fail-closed without strict evidence; packed validation does not certify installed clients.
|
|
9
10
|
- **Installed 0.27.6 restoration/compaction smoke (operator-owned):** After separately authorized installation/reload, use disposable storage to confirm failed Active restoration blocks provider inference across tree/reload, explicit mode recovery remains available, and native Codemode values/deletions survive completed-history compaction. Packed validation does not certify installed clients.
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@llblab/pi-kit` are documented here.
|
|
4
4
|
|
|
5
|
+
## 0.29.1: State Flow Temporary Paths and Mode Colors
|
|
6
|
+
|
|
7
|
+
- `State Flow Consistency`: Advances the exact State Flow pin to `0.26.1`. New diagnostics and Git push failure logs use `tmp/pi-state-flow` without moving old logs or canonical memory. Selected Telegram modes use 🟣 Off, 🟡 Passive and 🟢 Active; unselected options remain ⚫️. Other pins, resources and load order are unchanged.
|
|
8
|
+
|
|
5
9
|
## 0.29.0: State Flow Stable Modes
|
|
6
10
|
|
|
7
11
|
- `Step-independent memory`: Advances the exact State Flow pin to `0.26.0`. Memory no longer depends on the Pi step: startup, reload, resume and `/tree` attach current same-session memory, old branch points never block or rewind it, and forks copy the parent's current memory. Passive stays writable across reload; unreadable memory under Active shows `active (blocked)`. Other pins, resources and load order are unchanged.
|
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.12.1` | Shared Codex quota/Business credit status and 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.
|
|
20
|
+
| [`@llblab/pi-state-flow`](https://github.com/llblab/pi-state-flow) | `0.26.1` | 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.52.0` | Telegram companion with Workspace Restore, routing lifetime, resilient runtime storage, follower Threads, files, voice, and controls |
|
|
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.
|
|
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.1/docs/usage.md#moving-a-store-and-supported-formats) before changing installations.
|
|
29
29
|
|
|
30
30
|
From npm:
|
|
31
31
|
|
|
@@ -45,7 +45,7 @@ Prefer the kit instead of separately loading the same packages. If you already u
|
|
|
45
45
|
|
|
46
46
|
## Development
|
|
47
47
|
|
|
48
|
-
The `0.29.
|
|
48
|
+
The `0.29.1` composition includes State Flow `0.26.1` with logs under `tmp/pi-state-flow` and selected Telegram mode colors 🟣 Off, 🟡 Passive and 🟢 Active. Current memory and stable modes are preserved; all other pins, resources and load order remain unchanged. Telegram runtime storage now uses `tmp/pi-telegram` without migrating the old directory. Drain the prompt queue or accept losing waiting work before reload/restart; damaged-state reset discards all profiles' runtime continuity. Windows Restore remains fail-closed without strict journal evidence. `npm run validate` checks exact installed pins, declared resources, dependency audit and bundled inventory. It does not certify installed-client rendering; carried checks remain in [Backlog](./BACKLOG.md).
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
51
|
npm install
|
|
@@ -1,34 +1,3 @@
|
|
|
1
1
|
# Backlog
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Out of scope
|
|
6
|
-
|
|
7
|
-
- Changing what a cascade deletes, including writes into an owned target made by the closing patch. That stays deleted by design and already appears in the receipt.
|
|
8
|
-
- Nested `lazy_navigation` and intent-ownership warnings, validation or rejection. Authored missing-deletion hints do not change cascade behavior.
|
|
9
|
-
- Any reduction of lifecycle state; the tagged-union question stays deferred.
|
|
10
|
-
|
|
11
|
-
## 0.26.0 acceptance
|
|
12
|
-
|
|
13
|
-
- **Installed stable-mode smoke (operator-owned).** After separately authorized reload, use disposable storage to confirm `/tree` to an old step and reload keep current memory writable in Active and Passive; a fork copies the parent's current memory; unreadable current files show `active (blocked)` in terminal/Telegram, Passive retries and Off releases inference only. Local/native validation does not certify the installed client.
|
|
14
|
-
|
|
15
|
-
## 0.25.5 acceptance
|
|
16
|
-
|
|
17
|
-
- **Installed restoration/compaction smoke (operator-owned).** After separately authorized reload, use disposable storage to confirm failed Active restoration blocks provider inference across tree/reload, explicit mode recovery remains available, and native Codemode values/deletions survive completed-history compaction. Local/native tests do not certify the installed client.
|
|
18
|
-
|
|
19
|
-
## Carried gates
|
|
20
|
-
|
|
21
|
-
- **Installed 0.25.4 cleanup smoke (operator-owned).** After separately authorized installation/reload, use disposable storage to confirm missing-deletion hints, recursive empty-object cleanup, inherited fallback and preserved array slots. Local validation and publication do not certify installed clients.
|
|
22
|
-
- **Installed 0.25.3 inspection smoke (operator-owned).** After separately authorized installation/reload, inspect a large nested field: real layout newlines/quotes, separate omitted-character notice and intact genuine JSON string escapes. Use disposable storage; local adapter tests do not certify installed Telegram clients.
|
|
23
|
-
- **Installed 0.25.2 smoke (operator-owned).** Disposable store: confirm one patch argument block followed by changed/no-op acknowledgements, compact rows with `showSuccessfulPatches: false`, and visible rejected arguments/errors.
|
|
24
|
-
- **Installed 0.25.1 smoke (operator-owned).** Disposable store: close an intent that owns a nested lazy key and confirm the receipt lists it under `cascaded`. May be combined with the open 0.25.0 smoke.
|
|
25
|
-
- **Installed 0.22.0, 0.23.0, 0.24.0 and 0.25.0 smokes** remain open as recorded.
|
|
26
|
-
|
|
27
|
-
## Deferred (decision inputs, not commitments)
|
|
28
|
-
|
|
29
|
-
- **Closing-patch losses.** In real sessions, look for closing patches that write into a target the same patch cascades. If frequent, revisit the closing sentence in the protocol, not the mechanism.
|
|
30
|
-
- Convention uptake, behavioural evaluation, lifecycle real-use measurement, lifecycle tagged union, Skill compilation fidelity and compaction threshold carry over unchanged from the 0.25.0 backlog.
|
|
31
|
-
|
|
32
|
-
## Release boundary
|
|
33
|
-
|
|
34
|
-
Installation/reload requires separate authorization and disposable storage. Local validation and publication do not certify installed clients.
|
|
3
|
+
No open work.
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
> Each release keeps at most 8 outcome records of at most 512 characters.
|
|
4
4
|
|
|
5
|
+
## 0.26.1: Consistent Temporary Paths and Mode Colors
|
|
6
|
+
|
|
7
|
+
- `Telegram mode colors`: The selected mode uses 🟣 Off, 🟡 Passive or 🟢 Active; unselected options remain ⚫️. Mode behavior and callbacks are unchanged.
|
|
8
|
+
- `Diagnostic directory`: New diagnostics and Git push failure logs use `<agentDir>/tmp/pi-state-flow/logs.jsonl`, matching the Pi extension temporary-directory naming convention. Older `tmp/state-flow` logs are left untouched; canonical `state-flow/` memory storage is unchanged.
|
|
9
|
+
|
|
5
10
|
## 0.26.0: Stable Modes
|
|
6
11
|
|
|
7
12
|
- `Step-independent memory`: Memory no longer depends on the Pi step. Startup, reload, resume and `/tree` attach the current same-session JSON state; native checkpoints supply only mode and run lifecycle. Old or expired branch points never block or rewind memory. Forks copy the parent's current memory. Past values remain readable through `read_state` offsets within retained history.
|
|
@@ -16,7 +16,7 @@ export function projectDiagnosticContent(content) {
|
|
|
16
16
|
}
|
|
17
17
|
/** Diagnostic JSONL lives beneath the active Pi agent directory, never inside the state repository. */
|
|
18
18
|
export function stateFlowLogPath(agentDir) {
|
|
19
|
-
return join(agentDir, "tmp", "state-flow", "logs.jsonl");
|
|
19
|
+
return join(agentDir, "tmp", "pi-state-flow", "logs.jsonl");
|
|
20
20
|
}
|
|
21
21
|
function ensureDiagnosticDirectory(path) {
|
|
22
22
|
if (dirname(path) !== path)
|
|
@@ -26,7 +26,7 @@ export function formatStateFlowSectionLabel(snapshot) {
|
|
|
26
26
|
}
|
|
27
27
|
export const STATE_FLOW_MODES = ["off", "passive", "active"];
|
|
28
28
|
const STATE_FLOW_MODE_LABELS = { off: "Off", passive: "Passive", active: "Active" };
|
|
29
|
-
const STATE_FLOW_SELECTED_MARKERS = { off: "
|
|
29
|
+
const STATE_FLOW_SELECTED_MARKERS = { off: "🟣", passive: "🟡", active: "🟢" };
|
|
30
30
|
function isStateFlowModeAction(value) {
|
|
31
31
|
return STATE_FLOW_MODES.includes(value);
|
|
32
32
|
}
|
|
@@ -59,7 +59,7 @@ This is the source-bound **paragraph-to-owner parity map** for the 8,141-word pr
|
|
|
59
59
|
- L43 terminal status and read-only scope inspection → [status and controls](usage.md#status-and-controls), [observability](architecture.md#observability).
|
|
60
60
|
- L48 system section, context refresh and foreign prompt precedence → [Pi lifecycle](architecture.md#pi-lifecycle), [host context compatibility](compatibility.md#context-tools-and-provider-input).
|
|
61
61
|
- L50 extension-agnostic core and Telegram controls/receipts → [composition](architecture.md#composition), [observability](architecture.md#observability), [Telegram compatibility](compatibility.md#telegram-adapter).
|
|
62
|
-
- L52 tag release authority and version alignment → [release workflow](../.github/workflows/release.yml), [release boundary](../
|
|
62
|
+
- L52 tag release authority and version alignment → [release workflow](../.github/workflows/release.yml), [release boundary](../AGENTS.md#delivery-discipline). Retain the durable no-token constraint in compact `AGENTS.md` until a permanent developer contract owns it.
|
|
63
63
|
- L53 opt-in benchmark location and source identity → [benchmark guide](../benchmarks/README.md), [performance validation](performance.md#validation-and-reporting).
|
|
64
64
|
- L54 provider callback completion witness → [temporal acceptance](temporal-acceptance.md#required-properties-and-witnesses), [integration tests](../tests/integration.test.ts).
|
|
65
65
|
- L55 awaited fixture handlers and withdrawal witness → [temporal acceptance](temporal-acceptance.md#required-properties-and-witnesses), [extension tests](../tests/extension.test.ts).
|
|
@@ -144,7 +144,7 @@ The canonical store is `state-flow/` beneath the agent directory. Keeping config
|
|
|
144
144
|
- Active initializes missing storage when safe.
|
|
145
145
|
- Passive reads existing memory without publishing; its first explicit patch may initialize absent storage without starting an episode or compaction.
|
|
146
146
|
- Off exposes neither memory tools nor State Flow context.
|
|
147
|
-
- `logging`: Defaults to `false`. When enabled, rejected patch executions, active barrier blocks, preparation failures and accepted-answer reconciliation failures are recorded locally at `tmp/state-flow/logs.jsonl` beneath the agent directory. Asynchronous Git push failures are recorded there even when this setting is off.
|
|
147
|
+
- `logging`: Defaults to `false`. When enabled, rejected patch executions, active barrier blocks, preparation failures and accepted-answer reconciliation failures are recorded locally at `tmp/pi-state-flow/logs.jsonl` beneath the agent directory. Older `tmp/state-flow` logs are left untouched and are not migrated. Asynchronous Git push failures are recorded there even when this setting is off.
|
|
148
148
|
- `showSuccessfulPatches`: Defaults to `true`. In interactive Pi, `patch_state` rows show pretty-printed JSON arguments once in the call, with blank lines between adjacent memory sections; the result shows the acceptance or no-op acknowledgement, never a second patch. Set it to `false` to hide call arguments and keep the compact acknowledgement. Rejected calls retain their arguments and error acknowledgement; State Flow adds no private validation turn.
|
|
149
149
|
- `historyLimit`: Defaults to `7` and accepts integers from `0` through `100`. It counts accepted semantic transitions, **not elapsed time or conversation length**, and bounds materialized-history and scope patch-history offsets.
|
|
150
150
|
- Lowering it on reload/restore/fork folds excess tails forward without losing current state; selected boundaries outside the new window become unavailable.
|
|
@@ -208,7 +208,7 @@ When `pi-telegram` is available, its main-menu section shows `State Flow: active
|
|
|
208
208
|
|
|
209
209
|
**Mode controls:**
|
|
210
210
|
|
|
211
|
-
- A horizontal radio row presents `Off | Passive | Active`. The selected option uses
|
|
211
|
+
- A horizontal radio row presents `Off | Passive | Active`. The selected option uses 🟣, 🟡 or 🟢 respectively; each inactive option uses ⚫️.
|
|
212
212
|
- Telegram Active requested during a run waits for settlement; Passive and Off apply immediately.
|
|
213
213
|
- Ordinary successful controls add no redundant mode receipt; diagnostic outcomes stay visible.
|
|
214
214
|
- Off exposes neither tool nor State Flow model context.
|
|
@@ -38,7 +38,7 @@ export function projectDiagnosticContent(content: unknown): StateFlowDiagnosticB
|
|
|
38
38
|
|
|
39
39
|
/** Diagnostic JSONL lives beneath the active Pi agent directory, never inside the state repository. */
|
|
40
40
|
export function stateFlowLogPath(agentDir: string): string {
|
|
41
|
-
return join(agentDir, "tmp", "state-flow", "logs.jsonl");
|
|
41
|
+
return join(agentDir, "tmp", "pi-state-flow", "logs.jsonl");
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
function ensureDiagnosticDirectory(path: string): void {
|
|
@@ -139,7 +139,7 @@ export function formatStateFlowSectionLabel(snapshot: StateFlowTelegramSnapshot)
|
|
|
139
139
|
|
|
140
140
|
export const STATE_FLOW_MODES = ["off", "passive", "active"] as const satisfies readonly StateFlowMode[];
|
|
141
141
|
const STATE_FLOW_MODE_LABELS: Record<StateFlowMode, string> = { off: "Off", passive: "Passive", active: "Active" };
|
|
142
|
-
const STATE_FLOW_SELECTED_MARKERS: Record<StateFlowMode, string> = { off: "
|
|
142
|
+
const STATE_FLOW_SELECTED_MARKERS: Record<StateFlowMode, string> = { off: "🟣", passive: "🟡", active: "🟢" };
|
|
143
143
|
|
|
144
144
|
function isStateFlowModeAction(value: string): value is StateFlowMode {
|
|
145
145
|
return (STATE_FLOW_MODES as readonly string[]).includes(value);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llblab/pi-kit",
|
|
3
|
-
"version": "0.29.
|
|
3
|
+
"version": "0.29.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@llblab/pi-clean-room": "0.3.0",
|
|
47
47
|
"@llblab/pi-codex-usage": "0.12.1",
|
|
48
48
|
"@llblab/pi-grow-loop": "0.9.0",
|
|
49
|
-
"@llblab/pi-state-flow": "0.26.
|
|
49
|
+
"@llblab/pi-state-flow": "0.26.1",
|
|
50
50
|
"@llblab/pi-telegram": "0.52.0",
|
|
51
51
|
"@llblab/skills": "1.15.0"
|
|
52
52
|
},
|