pi-smart-compact 9.7.1 → 10.0.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/ARCHITECTURE.md +973 -372
- package/CHANGELOG.md +721 -0
- package/LICENSE +8 -0
- package/README.md +128 -640
- package/SECURITY.md +34 -12
- package/SUPPORT.md +26 -9
- package/assets/DejaVu-LICENSE.txt +187 -0
- package/assets/DejaVuSansMono.ttf +0 -0
- package/assets/README.md +26 -0
- package/assets/skills/context-management/SKILL.md +34 -0
- package/dist/app/anchor-cache.d.ts +36 -0
- package/dist/app/anchor-cache.d.ts.map +1 -0
- package/dist/app/artifact-storage.d.ts +47 -0
- package/dist/app/artifact-storage.d.ts.map +1 -0
- package/dist/app/background-preparation.d.ts +39 -0
- package/dist/app/background-preparation.d.ts.map +1 -0
- package/dist/app/compaction-commit-store.d.ts +5 -1
- package/dist/app/compaction-commit-store.d.ts.map +1 -1
- package/dist/app/context-evidence.d.ts +57 -0
- package/dist/app/context-evidence.d.ts.map +1 -0
- package/dist/app/context-guide.d.ts +3 -0
- package/dist/app/context-guide.d.ts.map +1 -0
- package/dist/app/context-operations.d.ts +106 -0
- package/dist/app/context-operations.d.ts.map +1 -0
- package/dist/app/effective-state.d.ts +23 -0
- package/dist/app/effective-state.d.ts.map +1 -0
- package/dist/app/global-settings-runtime.d.ts +3 -3
- package/dist/app/global-settings-runtime.d.ts.map +1 -1
- package/dist/app/hindsight-memory.d.ts +100 -0
- package/dist/app/hindsight-memory.d.ts.map +1 -0
- package/dist/app/host-cache-ledger.d.ts +68 -0
- package/dist/app/host-cache-ledger.d.ts.map +1 -0
- package/dist/app/lazy-tools.d.ts +36 -0
- package/dist/app/lazy-tools.d.ts.map +1 -0
- package/dist/app/memory-backend.d.ts +58 -0
- package/dist/app/memory-backend.d.ts.map +1 -0
- package/dist/app/mnemopi-memory.d.ts +13 -0
- package/dist/app/mnemopi-memory.d.ts.map +1 -0
- package/dist/app/mnemopi-protocol.d.ts +78 -0
- package/dist/app/mnemopi-protocol.d.ts.map +1 -0
- package/dist/app/mnemopi-worker.d.ts +2 -0
- package/dist/app/mnemopi-worker.d.ts.map +1 -0
- package/dist/app/model-feasibility.d.ts +20 -0
- package/dist/app/model-feasibility.d.ts.map +1 -0
- package/dist/app/native-compaction.d.ts +88 -0
- package/dist/app/native-compaction.d.ts.map +1 -0
- package/dist/app/native-continuity-bridge.d.ts.map +1 -1
- package/dist/app/navigation-data.d.ts +28 -0
- package/dist/app/navigation-data.d.ts.map +1 -0
- package/dist/app/navigation-types.d.ts +60 -0
- package/dist/app/navigation-types.d.ts.map +1 -0
- package/dist/app/pending-slot.d.ts +11 -1
- package/dist/app/pending-slot.d.ts.map +1 -1
- package/dist/app/preflight.d.ts.map +1 -1
- package/dist/app/register-context-tools.d.ts +16 -3
- package/dist/app/register-context-tools.d.ts.map +1 -1
- package/dist/app/register-navigation.d.ts +20 -0
- package/dist/app/register-navigation.d.ts.map +1 -0
- package/dist/app/register-smart-compact-command.d.ts +17 -2
- package/dist/app/register-smart-compact-command.d.ts.map +1 -1
- package/dist/app/register-smart-compact-tool.d.ts.map +1 -1
- package/dist/app/register-smart-context-tool.d.ts +55 -0
- package/dist/app/register-smart-context-tool.d.ts.map +1 -0
- package/dist/app/run-context.d.ts +1 -0
- package/dist/app/run-context.d.ts.map +1 -1
- package/dist/app/run-smart-compact.d.ts +3 -3
- package/dist/app/run-smart-compact.d.ts.map +1 -1
- package/dist/app/session-handoff.d.ts +64 -0
- package/dist/app/session-handoff.d.ts.map +1 -0
- package/dist/app/session-lineage.d.ts +17 -0
- package/dist/app/session-lineage.d.ts.map +1 -0
- package/dist/app/session-run-lock.d.ts +0 -2
- package/dist/app/session-run-lock.d.ts.map +1 -1
- package/dist/app/settled-auto-trigger.d.ts +2 -0
- package/dist/app/settled-auto-trigger.d.ts.map +1 -1
- package/dist/app/smart-compact-input.d.ts +1 -1
- package/dist/app/smart-compact-input.d.ts.map +1 -1
- package/dist/app/smart-compact-policy.d.ts +1 -1
- package/dist/app/smart-compact-policy.d.ts.map +1 -1
- package/dist/app/steps/extract.d.ts +45 -1
- package/dist/app/steps/extract.d.ts.map +1 -1
- package/dist/app/steps/metrics.d.ts +1 -0
- package/dist/app/steps/metrics.d.ts.map +1 -1
- package/dist/app/steps/persist.d.ts.map +1 -1
- package/dist/app/steps/prepare.d.ts.map +1 -1
- package/dist/app/steps/recover.d.ts +9 -0
- package/dist/app/steps/recover.d.ts.map +1 -1
- package/dist/app/steps/synthesize.d.ts.map +1 -1
- package/dist/app/steps/tier.d.ts.map +1 -1
- package/dist/app/steps/verify.d.ts.map +1 -1
- package/dist/app/steps/visual.d.ts +4 -0
- package/dist/app/steps/visual.d.ts.map +1 -0
- package/dist/app/steps/window.d.ts.map +1 -1
- package/dist/app/tool-artifacts.d.ts +27 -0
- package/dist/app/tool-artifacts.d.ts.map +1 -0
- package/dist/app/visual-archive.d.ts +29 -0
- package/dist/app/visual-archive.d.ts.map +1 -0
- package/dist/constants.d.ts +96 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/domain/compaction-usage.d.ts +16 -0
- package/dist/domain/compaction-usage.d.ts.map +1 -0
- package/dist/domain/model-capacity.d.ts +12 -0
- package/dist/domain/model-capacity.d.ts.map +1 -0
- package/dist/domain/provider-evaluation.d.ts +7 -0
- package/dist/domain/provider-evaluation.d.ts.map +1 -1
- package/dist/domain/telemetry.d.ts +43 -2
- package/dist/domain/telemetry.d.ts.map +1 -1
- package/dist/domain/tool-semantics.d.ts +23 -0
- package/dist/domain/tool-semantics.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15757 -6942
- package/dist/infra/ai-messages.d.ts +1 -1
- package/dist/infra/ai-messages.d.ts.map +1 -1
- package/dist/infra/context-graph.d.ts +38 -7
- package/dist/infra/context-graph.d.ts.map +1 -1
- package/dist/infra/fs.d.ts.map +1 -1
- package/dist/infra/hindsight-client.d.ts +73 -0
- package/dist/infra/hindsight-client.d.ts.map +1 -0
- package/dist/infra/hindsight-receipts.d.ts +68 -0
- package/dist/infra/hindsight-receipts.d.ts.map +1 -0
- package/dist/infra/llm-client.d.ts +26 -23
- package/dist/infra/llm-client.d.ts.map +1 -1
- package/dist/infra/memory-ref.d.ts +27 -0
- package/dist/infra/memory-ref.d.ts.map +1 -0
- package/dist/infra/native-protocol.d.ts +54 -0
- package/dist/infra/native-protocol.d.ts.map +1 -0
- package/dist/infra/optional-components.d.ts +15 -0
- package/dist/infra/optional-components.d.ts.map +1 -0
- package/dist/infra/paths.d.ts +2 -0
- package/dist/infra/paths.d.ts.map +1 -1
- package/dist/infra/services.d.ts +15 -5
- package/dist/infra/services.d.ts.map +1 -1
- package/dist/infra/visual-renderer.d.ts +16 -0
- package/dist/infra/visual-renderer.d.ts.map +1 -0
- package/dist/mnemopi-worker.js +213 -0
- package/dist/phases/explore.d.ts +12 -9
- package/dist/phases/explore.d.ts.map +1 -1
- package/dist/phases/synthesize.d.ts +18 -3
- package/dist/phases/synthesize.d.ts.map +1 -1
- package/dist/phases/verify.d.ts +5 -1
- package/dist/phases/verify.d.ts.map +1 -1
- package/dist/rtk.d.ts +7 -0
- package/dist/rtk.d.ts.map +1 -0
- package/dist/rtk.js +767 -0
- package/dist/types.d.ts +128 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/dashboard-format.d.ts +2 -1
- package/dist/ui/dashboard-format.d.ts.map +1 -1
- package/dist/ui/dashboard-insights.d.ts +9 -1
- package/dist/ui/dashboard-insights.d.ts.map +1 -1
- package/dist/ui/error-format.d.ts +7 -2
- package/dist/ui/error-format.d.ts.map +1 -1
- package/dist/ui/handoff-overlay.d.ts +26 -0
- package/dist/ui/handoff-overlay.d.ts.map +1 -0
- package/dist/ui/home-overlay.d.ts +54 -0
- package/dist/ui/home-overlay.d.ts.map +1 -0
- package/dist/ui/metrics-dashboard-overlay.d.ts.map +1 -1
- package/dist/ui/metrics-report.d.ts.map +1 -1
- package/dist/ui/navigation-overlay.d.ts +92 -0
- package/dist/ui/navigation-overlay.d.ts.map +1 -0
- package/dist/ui/overlays.d.ts +12 -2
- package/dist/ui/overlays.d.ts.map +1 -1
- package/dist/ui/profiles.d.ts +51 -0
- package/dist/ui/profiles.d.ts.map +1 -0
- package/dist/ui/settings-complex.d.ts +49 -3
- package/dist/ui/settings-complex.d.ts.map +1 -1
- package/dist/ui/settings-list.d.ts +28 -0
- package/dist/ui/settings-list.d.ts.map +1 -0
- package/dist/ui/settings-overlay.d.ts +13 -6
- package/dist/ui/settings-overlay.d.ts.map +1 -1
- package/dist/ui/storage-report.d.ts +4 -0
- package/dist/ui/storage-report.d.ts.map +1 -0
- package/dist/utils/backups.d.ts.map +1 -1
- package/dist/utils/cache.d.ts +6 -2
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/config.d.ts +12 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/id-fingerprint.d.ts +3 -1
- package/dist/utils/id-fingerprint.d.ts.map +1 -1
- package/dist/utils/issues.d.ts +61 -0
- package/dist/utils/issues.d.ts.map +1 -0
- package/dist/utils/pruning.d.ts.map +1 -1
- package/dist/utils/session-log.d.ts +0 -2
- package/dist/utils/session-log.d.ts.map +1 -1
- package/dist/utils/state.d.ts +3 -1
- package/dist/utils/state.d.ts.map +1 -1
- package/dist/utils/tokens.d.ts +10 -2
- package/dist/utils/tokens.d.ts.map +1 -1
- package/docs/MIGRATING_TO_V8.md +7 -1
- package/docs/README.md +69 -0
- package/docs/RELEASE.md +173 -56
- package/docs/assets/banner.png +0 -0
- package/docs/assets/banner.svg +1158 -70
- package/docs/assets/pi-smart-compact.png +0 -0
- package/docs/assets/pi-smart-compact.svg +24 -0
- package/docs/configuration.md +637 -0
- package/docs/evaluation.md +408 -0
- package/docs/guide.md +860 -0
- package/docs/hindsight-memory.md +314 -0
- package/docs/identity.md +124 -0
- package/package.json +44 -11
- package/dist/provider-eval.js +0 -2122
- package/dist/provider-scenario-eval.js +0 -2900
- package/dist/telemetry-report.js +0 -1973
- package/docs/provider-evaluation-2026-08-06.md +0 -63
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
# Hindsight memory backend
|
|
2
|
+
|
|
3
|
+
Cross-session memory is the optional fourth layer of Pi Continuity (the
|
|
4
|
+
`pi-smart-compact` package), after context hygiene, recoverable continuity and
|
|
5
|
+
compaction. The guide's [memory section](./guide.md#memory-what-is-stored-where)
|
|
6
|
+
compares the three stores; see
|
|
7
|
+
[architecture](../ARCHITECTURE.md#4-optional-cross-session-memory) for how the
|
|
8
|
+
backends fit together and [configuration](./configuration.md#memory) for all
|
|
9
|
+
settings.
|
|
10
|
+
|
|
11
|
+
Contents: [Set up](#set-up) · [Configuration](#configuration) ·
|
|
12
|
+
[Data that leaves the machine](#data-that-leaves-the-machine) ·
|
|
13
|
+
[Consent](#consent) · [Identity, refs, and lifecycle](#identity-refs-and-lifecycle) ·
|
|
14
|
+
[Readiness](#readiness) · [Troubleshooting](#troubleshooting) · [Tests](#tests)
|
|
15
|
+
|
|
16
|
+
The extension can optionally send **explicitly confirmed** project memories to
|
|
17
|
+
an existing [Hindsight](https://hindsight.vectorize.io) server, and include a
|
|
18
|
+
bounded, project-scoped Hindsight recall in `smart_recall`. The default backend
|
|
19
|
+
is `local`, which never contacts any server.
|
|
20
|
+
|
|
21
|
+
**One exclusive backend.** `memoryBackend` selects the single store used by
|
|
22
|
+
`smart_save_memory` / `smart_recall` — local graph, Hindsight, or Mnemopi.
|
|
23
|
+
While Hindsight is selected, no other memory store is read, written, indexed,
|
|
24
|
+
or started: there is no local-graph copy of confirmed saves, no Mnemopi
|
|
25
|
+
worker, and no fallback to any other store if the server fails or its outcome
|
|
26
|
+
is unknown. Switching backends never moves, merges, or deletes existing
|
|
27
|
+
memories; data saved earlier in another store stays on disk, inactive and
|
|
28
|
+
untouched, until that backend is selected again.
|
|
29
|
+
|
|
30
|
+
What this feature does **not** do:
|
|
31
|
+
|
|
32
|
+
- No automatic retain. Transcripts, compaction summaries, tool output and
|
|
33
|
+
recalled text are never uploaded. Only the single fact shown in a
|
|
34
|
+
confirmation dialog is sent.
|
|
35
|
+
- No `reflect`, mental models, or prompt injection of remote memory. It never
|
|
36
|
+
changes bank missions or server settings.
|
|
37
|
+
- No provider-opaque memory upload.
|
|
38
|
+
- No bank-wide operations. The client has exactly four fixed routes (retain,
|
|
39
|
+
operation status, recall, delete one document) and no generic request
|
|
40
|
+
method, so it cannot reach routes such as `DELETE /memories`.
|
|
41
|
+
- No server installation, setup, or bootstrap. An already-running server's
|
|
42
|
+
URL and an explicit bank are required configuration; an API key is
|
|
43
|
+
optional and is read from a named environment variable. Readiness checks
|
|
44
|
+
are presence-level only.
|
|
45
|
+
|
|
46
|
+
## Set up
|
|
47
|
+
|
|
48
|
+
1. Have a Hindsight server running and a bank for these memories. Pi
|
|
49
|
+
Continuity never creates either.
|
|
50
|
+
2. If the server needs a key, export it in the environment Pi starts from,
|
|
51
|
+
for example `export HINDSIGHT_API_TOKEN=…`. Only the variable's **name**
|
|
52
|
+
goes into settings.
|
|
53
|
+
3. Configure the store (below), either in `~/.pi/agent/settings.json` or in
|
|
54
|
+
`/smart-compact settings` → **Memory**: set *Memory store* to *Hindsight
|
|
55
|
+
server*, then fill the *› Hindsight server* submenu (Server URL, Memory
|
|
56
|
+
bank, API key variable, Request timeout (ms), Recall size (tokens)).
|
|
57
|
+
4. Open Home → **Status & help** → **Readiness & details**. `configuration
|
|
58
|
+
complete` means the values are present; it does not prove the server is
|
|
59
|
+
reachable or the key is valid.
|
|
60
|
+
5. Ask the agent to save one fact. Approve the confirmation dialog, then
|
|
61
|
+
check the reported receipt state (see [receipt states](#identity-refs-and-lifecycle)).
|
|
62
|
+
|
|
63
|
+
## Configuration
|
|
64
|
+
|
|
65
|
+
In `~/.pi/agent/settings.json` (only this global file is read):
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"smartCompact": {
|
|
70
|
+
"memoryBackend": "hindsight",
|
|
71
|
+
"hindsightBaseUrl": "https://hindsight.example.com",
|
|
72
|
+
"hindsightBankId": "my-agents",
|
|
73
|
+
"hindsightApiKeyEnv": "HINDSIGHT_API_TOKEN",
|
|
74
|
+
"hindsightTimeoutMs": 12000,
|
|
75
|
+
"hindsightRecallMaxTokens": 2048
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
| Key | Default | Meaning |
|
|
81
|
+
| --- | --- | --- |
|
|
82
|
+
| `memoryBackend` | `"local"` | `local`, `hindsight`, or `mnemopi` (local SQLite full-text store). The selected backend is the only store contacted. |
|
|
83
|
+
| `hindsightBaseUrl` | `null` | HTTPS URL. Plain `http` only for loopback (`localhost`, `127.x`, `::1`). Credentials, query and fragment are rejected. Redirects are refused. |
|
|
84
|
+
| `hindsightBankId` | `null` | Required. Never inferred. `[A-Za-z0-9][A-Za-z0-9._-]{0,127}`. |
|
|
85
|
+
| `hindsightApiKeyEnv` | `null` | Optional. **Name** of the environment variable that holds the API key (`[A-Z_][A-Z0-9_]*`, at most 128 characters), sent as `Authorization: Bearer`. With `null`, requests carry no `Authorization` header. The key itself never goes into settings, receipts, tool output or errors. If the variable is named but unset, Hindsight is treated as not configured: saves and recalls are refused and nothing is written anywhere else. |
|
|
86
|
+
| `hindsightTimeoutMs` | `12000` | Per-request timeout, 1000–60000. |
|
|
87
|
+
| `hindsightRecallMaxTokens` | `2048` | Server-side recall budget, 128–4096. Rendered output is additionally capped locally at about 3000 characters, 600 per fact. |
|
|
88
|
+
|
|
89
|
+
Invalid values are dropped with a warning and the defaults apply. Rejected
|
|
90
|
+
values are never echoed, because they may be pasted secrets.
|
|
91
|
+
|
|
92
|
+
The historical `hindsightLocalFallback` setting (`always` / `on-failure` /
|
|
93
|
+
`never`) is removed: the selected backend is now exclusive, so no local copy
|
|
94
|
+
policy exists. A stale key still present in `settings.json` is ignored with a
|
|
95
|
+
one-time notice and otherwise left alone.
|
|
96
|
+
|
|
97
|
+
With `memoryBackend: "hindsight"`, the memory tools stay available regardless
|
|
98
|
+
of `contextGraphEnabled`; that flag only governs the local backend (and its
|
|
99
|
+
compaction-state indexing). Saves and recalls contact only the server.
|
|
100
|
+
|
|
101
|
+
## Data that leaves the machine
|
|
102
|
+
|
|
103
|
+
- **Save:** the scrubbed fact, formatted as `[kind] title`, the content, and
|
|
104
|
+
the related paths. It is sent with tags `psc-project:<hashed project id>`,
|
|
105
|
+
`psc-kind:<kind>` and `psc-source:smart-compact`, plus metadata (kind, hashed
|
|
106
|
+
project id, local memory id, revision). The raw working directory is not
|
|
107
|
+
sent. `scrubSecrets` and `scrubPii` apply before the confirmation, so the
|
|
108
|
+
user approves exactly what is sent.
|
|
109
|
+
- **Recall:** the scrubbed query (at most 500 characters), restricted to the
|
|
110
|
+
current project tag with
|
|
111
|
+
`tags_match: "all_strict"`, `budget: "low"`, and no chunks, source facts or
|
|
112
|
+
entities. Results that lack the project tag are also discarded client-side.
|
|
113
|
+
`scope: "session"` is not supported on this backend and searches nothing.
|
|
114
|
+
- **Resolve:** a `DELETE` of that single document id.
|
|
115
|
+
|
|
116
|
+
Server-side caveats, observed on a real server (API 0.9.2); check your own
|
|
117
|
+
server's configuration:
|
|
118
|
+
|
|
119
|
+
- `store_document_text` is enabled there, so **the raw retained text is
|
|
120
|
+
stored on the server**, not only the extracted facts.
|
|
121
|
+
- Hindsight runs its own LLM and embedding models over retained text. Even a
|
|
122
|
+
self-hosted server may forward the text to the model providers it is
|
|
123
|
+
configured with.
|
|
124
|
+
- Deleting a document removes its memory units through the API. It makes no
|
|
125
|
+
promise about server backups or logs.
|
|
126
|
+
|
|
127
|
+
## Consent
|
|
128
|
+
|
|
129
|
+
- Enabling `memoryBackend: "hindsight"` is the consent for remote **recall**
|
|
130
|
+
of scrubbed queries.
|
|
131
|
+
- Every **save and resolve** still requires your approval in Pi's
|
|
132
|
+
confirmation dialog. The dialog shows the kind, title, full scrubbed
|
|
133
|
+
content, paths, and the destination:
|
|
134
|
+
- server URL and bank;
|
|
135
|
+
- project tag;
|
|
136
|
+
- document id and the ref;
|
|
137
|
+
- for resolve, "DELETE this one document".
|
|
138
|
+
- Sessions without an interactive UI (print, RPC, SDK) are refused, and
|
|
139
|
+
nothing is sent.
|
|
140
|
+
|
|
141
|
+
What to save:
|
|
142
|
+
|
|
143
|
+
- Save: durable engineering decisions with rationale, enforced conventions,
|
|
144
|
+
resolved bugs with root cause, tooling gotchas, and stated preferences.
|
|
145
|
+
- Never save: raw files, logs, stack traces, TODOs, narration, unexecuted
|
|
146
|
+
plans, speculation, secrets, or facts that are cheap to re-derive from the
|
|
147
|
+
repository.
|
|
148
|
+
|
|
149
|
+
## Identity, refs, and lifecycle
|
|
150
|
+
|
|
151
|
+
- **Memory refs:** saves and recall results for facts confirmed through Pi
|
|
152
|
+
Continuity carry a ref naming the backend, stable id, and a mandatory
|
|
153
|
+
96-bit target digest: `local:cg-…@…`, `mnemopi:cg-…@…`,
|
|
154
|
+
`hindsight:cg-…@…`. The target is the local graph file, Mnemopi database
|
|
155
|
+
path, or Hindsight server+bank respectively. Hindsight additionally binds
|
|
156
|
+
the project and document id: a copied ref or a document id combined with
|
|
157
|
+
another project's target cannot delete across projects. Unsuffixed or
|
|
158
|
+
altered refs are rejected; there is no legacy retargeting path.
|
|
159
|
+
Compaction-derived graph items and unrelated remote documents have no
|
|
160
|
+
actionable ref. Resolving (`smart_save_memory` with `status: "resolved"`)
|
|
161
|
+
requires the ref; recall renders truncated previews, so exact-text matching
|
|
162
|
+
is gone. A ref never
|
|
163
|
+
embeds a URL, bank, or path: the destination is re-derived from current
|
|
164
|
+
configuration and compared against the digest, so after a config switch an
|
|
165
|
+
old ref cannot silently act on another server, bank, or data root.
|
|
166
|
+
- **Refs are exclusive to their backend:** resolving requires
|
|
167
|
+
`memoryBackend` to match the ref's own backend. A `local:` or `mnemopi:` ref
|
|
168
|
+
presented while Hindsight is selected (or any other mismatch) is refused
|
|
169
|
+
with an explicit "Switch Memory store to …" message — the inactive store
|
|
170
|
+
is not contacted, and nothing is migrated, copied, or deleted anywhere.
|
|
171
|
+
Switch back to that backend to act on the ref; its data is unchanged.
|
|
172
|
+
Saving the same fact to two backends (by switching between two saves) yields
|
|
173
|
+
two distinct refs and two independent copies that never observe each other.
|
|
174
|
+
- **Local close vs remote delete:** a `local:` ref soft-closes the graph node
|
|
175
|
+
(status=resolved); `mnemopi:` and `hindsight:` refs delete the stored fact.
|
|
176
|
+
- **Document id:** `psc-` + the local manual memory id. That id is a hash of
|
|
177
|
+
the project, kind and normalized content, so the same fact always maps to
|
|
178
|
+
the same document. Retains use `update_mode: "replace"`.
|
|
179
|
+
- **Operation id:** a deterministic UUID derived from origin, bank, project,
|
|
180
|
+
document, content revision and generation. Resending the same confirmed save
|
|
181
|
+
after an unknown outcome is idempotent: the server answers 409, which is
|
|
182
|
+
treated as "already accepted". After a confirmed deletion or a definite
|
|
183
|
+
failure, the generation advances, so a later save gets a new operation id.
|
|
184
|
+
If the server acknowledges a different operation id, the receipt stores it
|
|
185
|
+
and status checks use the server's id.
|
|
186
|
+
- **Receipts:** stored at `~/.pi/agent/.cache/smart-compact/hindsight-receipts.json`
|
|
187
|
+
(next to the context graph). They are keyed by origin, bank, project,
|
|
188
|
+
document and revision, so changing the target can never resolve or report
|
|
189
|
+
another server's state. There are at most 500 receipts. Completed, failed
|
|
190
|
+
and deleted receipts are pruned oldest-first. Open receipts are never
|
|
191
|
+
evicted: new remote saves are refused until they are refreshed, and the
|
|
192
|
+
refusal names the receipts file.
|
|
193
|
+
|
|
194
|
+
Receipt states and how the tools report them:
|
|
195
|
+
|
|
196
|
+
| State | Meaning | Tool wording |
|
|
197
|
+
| --- | --- | --- |
|
|
198
|
+
| `submitted` | Request sent; no response yet | — |
|
|
199
|
+
| `accepted` | Async operation acknowledged; extraction still running | "accepted, NOT yet searchable" |
|
|
200
|
+
| `completed` | Operation completed | "completed … indexed and searchable" |
|
|
201
|
+
| `failed` | Server refused the request, or the operation failed or was cancelled | "FAILED" |
|
|
202
|
+
| `unknown` | Timeout or network error after sending; the server may have accepted it | "outcome unknown … safe to retry" |
|
|
203
|
+
| `deleted` | The owned document was deleted by a confirmed resolve | "deleted document …" |
|
|
204
|
+
|
|
205
|
+
Status checks are bounded:
|
|
206
|
+
|
|
207
|
+
- A save makes one status check right after acceptance.
|
|
208
|
+
- `smart_recall` refreshes at most 3 open receipts per call — including
|
|
209
|
+
`unknown` ones, which also count against the ledger cap — and lists
|
|
210
|
+
documents that are not yet searchable. An `unknown` receipt stays `unknown`
|
|
211
|
+
on `not_found` (delayed acceptance or pruned status record); a definitive
|
|
212
|
+
terminal status (`completed`/`failed`) frees it. A receipt whose operation
|
|
213
|
+
the server has reported missing for 24 hours since its last state change is
|
|
214
|
+
marked `failed` (`not_found`) so the ledger drains. Uncertain receipts are
|
|
215
|
+
never auto-retried as writes.
|
|
216
|
+
- If a retain completed but the local receipt could not be updated (for
|
|
217
|
+
example, another process held the ledger lock), the save reports `unknown`
|
|
218
|
+
and the next `smart_recall` refresh reconciles the receipt.
|
|
219
|
+
|
|
220
|
+
**Resolve safety:**
|
|
221
|
+
|
|
222
|
+
- Resolve addresses exactly one document, chosen by the ref. Before deleting,
|
|
223
|
+
it checks open retains for that document (at most 3 status checks). Any
|
|
224
|
+
submitted, accepted or unknown outcome blocks deletion: delayed completion
|
|
225
|
+
could recreate the fact. A missing operation status is not proof of absence.
|
|
226
|
+
The tool reports operation ids and asks for a later retry; if status was
|
|
227
|
+
permanently lost, verify the operation on the server before recovery.
|
|
228
|
+
`smart_recall` marks such a receipt `failed` after 24 hours missing, which
|
|
229
|
+
then unblocks deletion. A deletion marks only the receipts it checked, so a
|
|
230
|
+
save that lands meanwhile stays open. The extension never removes a lock
|
|
231
|
+
automatically.
|
|
232
|
+
|
|
233
|
+
**Failure honesty:** remote failure is never silent and never triggers a
|
|
234
|
+
fallback. The tool text and `details.remote` always carry the remote state;
|
|
235
|
+
`failed` and `unknown` outcomes leave every other store untouched (no local
|
|
236
|
+
graph file is even created). "Queued" is never reported as "completed".
|
|
237
|
+
|
|
238
|
+
## Readiness
|
|
239
|
+
|
|
240
|
+
Home → **Status & help** → **Readiness & details** reports memory readiness
|
|
241
|
+
for the selected store only. It is read-only and sends nothing:
|
|
242
|
+
|
|
243
|
+
- **Hindsight:** checks that the server URL and an explicit bank are
|
|
244
|
+
configured and, when `hindsightApiKeyEnv` is set, that the variable is
|
|
245
|
+
present. Server reachability, authentication and server-side models are
|
|
246
|
+
**not** verified, and no server is installed, started, or configured.
|
|
247
|
+
- **Local:** reflects `contextGraphEnabled`.
|
|
248
|
+
- **Mnemopi:** checks the optional component, the worker file, and a usable
|
|
249
|
+
Bun executable: first the optional `bun` component installed beside the
|
|
250
|
+
extension (resolved from package metadata and the installed layout, never
|
|
251
|
+
downloaded or self-installed at runtime), then a supported Bun (>= 1.3.14)
|
|
252
|
+
on `PATH`. A missing component is reported with its install command.
|
|
253
|
+
|
|
254
|
+
## Troubleshooting
|
|
255
|
+
|
|
256
|
+
| Symptom | Cause and action |
|
|
257
|
+
| --- | --- |
|
|
258
|
+
| "Project memory not changed: Hindsight is not usable (…)" or "Hindsight recall not contacted: …" | The reason names the problem: missing or invalid URL, missing bank, or a named key variable that is not set in Pi's environment. Fix the setting, or export the variable and restart Pi. |
|
|
259
|
+
| URL rejected | Use HTTPS. Plain `http` works only for `localhost`, `127.x` and `::1`; credentials, query and fragment are not allowed, and redirects are refused. |
|
|
260
|
+
| Save reports "accepted, NOT yet searchable" | Hindsight extracts asynchronously. The next `smart_recall` refreshes up to 3 open receipts and reports when the document is searchable. |
|
|
261
|
+
| Save reports "outcome unknown … safe to retry" | A timeout or network error after sending. Retrying the same confirmed save is idempotent (the server answers 409 for an operation it already accepted). |
|
|
262
|
+
| New saves refused, naming the receipts file | 500 receipts are open. Run `smart_recall` so open receipts are refreshed; receipts the server has reported missing for 24 hours are marked `failed` and free their slot. |
|
|
263
|
+
| Resolve refused because a retain is still open | A submitted, accepted or unknown save of that document could recreate it. Retry later; verify the operation on the server if its status was lost. |
|
|
264
|
+
| Resolve refused with "Switch Memory store to …" | The ref belongs to another store. Select that store to act on it. |
|
|
265
|
+
| `scope: "session"` recall returns nothing | Not supported on Hindsight; use project scope. |
|
|
266
|
+
| Readiness says complete, but requests fail | Readiness does not contact the server. Check reachability, the key and the server logs. |
|
|
267
|
+
|
|
268
|
+
## Tests
|
|
269
|
+
|
|
270
|
+
For maintainers. The test files live in the
|
|
271
|
+
[source repository](https://github.com/alpertarhan/pi-smart-compact/tree/main/test),
|
|
272
|
+
not in the npm package.
|
|
273
|
+
|
|
274
|
+
- `test/hindsight-client.test.ts`: HTTP contract against a loopback fake —
|
|
275
|
+
payload shapes, auth, strict tags, path encoding, conflict, redirect refusal,
|
|
276
|
+
response caps, timeout, network errors, and no secret leakage.
|
|
277
|
+
- `test/hindsight-memory.test.ts`: end-to-end tool behaviour — confirmation
|
|
278
|
+
destination, non-interactive refusal, scrubbing, the accepted, unknown and
|
|
279
|
+
failed lifecycle, idempotent retry, exclusive-store isolation across
|
|
280
|
+
backend switches (no local fallback on failure/unknown/misconfiguration,
|
|
281
|
+
old data unchanged, foreign refs refused), resolve racing a pending
|
|
282
|
+
retain, target-scoped receipts, cap blocking, render caps and injection
|
|
283
|
+
neutralization.
|
|
284
|
+
- `test/hindsight-config.test.ts`: validation, defaults, stale-key removal
|
|
285
|
+
and hot-apply.
|
|
286
|
+
- `test/context-tools.test.ts` and `test/context-graph.test.ts`:
|
|
287
|
+
backend-exclusivity regressions at the tool and index layers (mnemopi-only
|
|
288
|
+
recall cannot see local facts, mid-drain backend switches cancel queued
|
|
289
|
+
index jobs without creating the graph).
|
|
290
|
+
- `test/memory-backend.test.ts`: Bun executable resolution (installed
|
|
291
|
+
component metadata/layout, placeholder rejection, platform fallback,
|
|
292
|
+
traversal refusal), version gate, readiness evidence, and the
|
|
293
|
+
exclusive-policy guard.
|
|
294
|
+
- `test/hindsight-live.canary.ts`: opt-in live canary. It is not run by
|
|
295
|
+
`bun test`.
|
|
296
|
+
|
|
297
|
+
```sh
|
|
298
|
+
PSC_HINDSIGHT_LIVE=1 PSC_HINDSIGHT_URL=https://… PSC_HINDSIGHT_BANK=… \
|
|
299
|
+
PSC_HINDSIGHT_KEY_ENV=HINDSIGHT_API_TOKEN bun run test/hindsight-live.canary.ts
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
- A fetch guard enforces a hard budget: 1 retain, at most 10 status checks,
|
|
303
|
+
1 recall, 1 delete. There are no retries.
|
|
304
|
+
- It uses a synthetic fact under a unique per-run project tag, and cleanup
|
|
305
|
+
deletes only that owned document.
|
|
306
|
+
- `HOME` is a temporary directory during the run.
|
|
307
|
+
- Only ids, states and counts are printed.
|
|
308
|
+
- If cleanup cannot be confirmed, it reports the owned document and
|
|
309
|
+
operation ids.
|
|
310
|
+
|
|
311
|
+
Last run (2026-09-24, API 0.9.2): accepted → completed after 4 status
|
|
312
|
+
checks; recall returned 1 in-scope fact from the owned document; the server
|
|
313
|
+
reported the document deleted (1 memory unit). There was no extra call to
|
|
314
|
+
verify the deletion independently.
|
package/docs/identity.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Pi Continuity: identity and naming
|
|
2
|
+
|
|
3
|
+
[Documentation](./README.md) · [Project overview](../README.md)
|
|
4
|
+
|
|
5
|
+
## Product name
|
|
6
|
+
|
|
7
|
+
**Pi Continuity** describes the goal: keep useful working context and a way back
|
|
8
|
+
to evidence through long coding sessions. Context hygiene, recoverable research,
|
|
9
|
+
compaction and optional project memory support that goal.
|
|
10
|
+
|
|
11
|
+
The name does not promise lossless compression, perfect recall, persistent model
|
|
12
|
+
attention or an independent session engine. Pi owns the session lifecycle.
|
|
13
|
+
|
|
14
|
+
## What changed—and what did not
|
|
15
|
+
|
|
16
|
+
This is a product-identity and documentation change, not a package migration.
|
|
17
|
+
|
|
18
|
+
| Surface | Name |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| Product identity and visual assets | **Pi Continuity** |
|
|
21
|
+
| npm package | `pi-smart-compact` |
|
|
22
|
+
| Repository | `alpertarhan/pi-smart-compact` |
|
|
23
|
+
| Command and current TUI title | `/smart-compact` / Smart Compact |
|
|
24
|
+
| Agent tool family | `smart_*`: loader, navigation, history, memory and compaction tools |
|
|
25
|
+
| Settings namespace | `smartCompact` |
|
|
26
|
+
| Runtime directories, record types and reference formats | Unchanged |
|
|
27
|
+
|
|
28
|
+
Install with `pi install npm:pi-smart-compact`. Do not install `pi-continuity`
|
|
29
|
+
or rename settings, directories, memory tags or references because of the
|
|
30
|
+
branding. Existing state needs no migration.
|
|
31
|
+
|
|
32
|
+
The npm name-availability check on 2026-09-27 was an observation, not a
|
|
33
|
+
reservation, trademark clearance or guarantee of future availability. No new
|
|
34
|
+
package is published by this identity change.
|
|
35
|
+
|
|
36
|
+
## Visual language
|
|
37
|
+
|
|
38
|
+
The mark is one **open return path**. Its outer curve holds the working context;
|
|
39
|
+
the inner turn leads back to a gold anchor. It expresses recoverability without
|
|
40
|
+
using a generic compression arrow, database stack or infinity symbol. This is a
|
|
41
|
+
visual metaphor, not a diagram of the compaction algorithm.
|
|
42
|
+
|
|
43
|
+
| Role | Color | Use |
|
|
44
|
+
| --- | --- | --- |
|
|
45
|
+
| Deep ink | `#183E4B` | Outer path and wordmark |
|
|
46
|
+
| Return teal | `#147D88` | Inner return path |
|
|
47
|
+
| Anchor gold | `#E8B55B` | One retained point; never body text |
|
|
48
|
+
| Supporting ink | `#466674` | Banner descriptor |
|
|
49
|
+
| Mist | `#F3F8F9` | Banner and rounded catalog tile |
|
|
50
|
+
|
|
51
|
+
The wordmark uses **Avenir Next Demi Bold**; the descriptor uses **Avenir Next
|
|
52
|
+
Regular**. Both are converted to vector paths in the master artwork. Rendering
|
|
53
|
+
and PNG export require no installed fonts, network requests or embedded font
|
|
54
|
+
files. Documentation body type follows the reader's GitHub/npm renderer; the
|
|
55
|
+
runtime's separate DejaVu font is not a branding font.
|
|
56
|
+
|
|
57
|
+
Keep the supplied proportions and clear space. Use the catalog tile on light or
|
|
58
|
+
dark surfaces rather than recoloring the mark. Use at least **32×32** for a
|
|
59
|
+
standalone icon; the banner is a wordmark, not a place for essential instructions.
|
|
60
|
+
Installation steps, controls and warnings must remain available as text.
|
|
61
|
+
|
|
62
|
+
## Visual assets
|
|
63
|
+
|
|
64
|
+
<p>
|
|
65
|
+
<img src="./assets/pi-smart-compact.png" alt="Pi Continuity: a return path with a gold anchor" width="128" height="128" />
|
|
66
|
+
</p>
|
|
67
|
+
|
|
68
|
+
| File | Dimensions | Purpose |
|
|
69
|
+
| --- | --- | --- |
|
|
70
|
+
| [`banner.svg`](./assets/banner.svg) | 1280×320 | **Editable master**: mark, outlined wordmark and descriptor. Self-contained SVG with a title and description. |
|
|
71
|
+
| [`banner.png`](./assets/banner.png) | 1280×320 | README banner; raster compatibility without a font dependency. |
|
|
72
|
+
| [`pi-smart-compact.svg`](./assets/pi-smart-compact.svg) | 512×512 | Generated catalog tile; vector reuse at any size. |
|
|
73
|
+
| [`pi-smart-compact.png`](./assets/pi-smart-compact.png) | 512×512 | Generated catalog image at the established `package.json` → `pi.image` URL. |
|
|
74
|
+
|
|
75
|
+
The master replaces the former separately generated PNG artwork. All exports
|
|
76
|
+
now share its geometry and palette. Keep the existing filenames and catalog URL;
|
|
77
|
+
there is no separate theme-specific logo to maintain.
|
|
78
|
+
|
|
79
|
+
### Regenerate the exports
|
|
80
|
+
|
|
81
|
+
From a source checkout with development dependencies installed
|
|
82
|
+
(`bun install --frozen-lockfile`), run the following with the pinned
|
|
83
|
+
`@resvg/resvg-js@2.6.2`. It uses no system fonts and makes no network request:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
bun --eval '
|
|
87
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
88
|
+
import { Resvg } from "@resvg/resvg-js";
|
|
89
|
+
|
|
90
|
+
const root = "docs/assets/";
|
|
91
|
+
const banner = readFileSync(root + "banner.svg", "utf8");
|
|
92
|
+
const mark = banner.match(/<g id="continuity-mark">[\s\S]*?<\/g>/)?.[0];
|
|
93
|
+
if (!mark) throw new Error("Missing continuity-mark group in banner.svg");
|
|
94
|
+
const icon = `<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 320 320" role="img" aria-labelledby="title description">
|
|
95
|
+
<title id="title">Pi Continuity</title>
|
|
96
|
+
<desc id="description">An open return path with a gold anchor: useful context kept within reach.</desc>
|
|
97
|
+
<!-- Generated from banner.svg; regenerate using docs/identity.md. -->
|
|
98
|
+
<rect width="320" height="320" rx="64" fill="#F3F8F9"/>
|
|
99
|
+
<g transform="translate(-8 0)">${mark}</g>
|
|
100
|
+
</svg>
|
|
101
|
+
`;
|
|
102
|
+
writeFileSync(root + "pi-smart-compact.svg", icon);
|
|
103
|
+
for (const [name, svg] of [["banner", banner], ["pi-smart-compact", icon]]) {
|
|
104
|
+
const image = new Resvg(svg, { font: { loadSystemFonts: false } }).render();
|
|
105
|
+
writeFileSync(root + name + ".png", image.asPng());
|
|
106
|
+
}
|
|
107
|
+
'
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Edit `banner.svg`, not the generated files. Keep `continuity-mark` as a flat
|
|
111
|
+
group: the export command extracts that group and centers it on the catalog tile.
|
|
112
|
+
If you change the lettering, convert it to paths again before export. Review the
|
|
113
|
+
banner at README width and the icon at 32 and 64 pixels on light and dark surfaces.
|
|
114
|
+
Do not add generated previews to the repository.
|
|
115
|
+
|
|
116
|
+
## A full rename would be a separate release
|
|
117
|
+
|
|
118
|
+
No package rename is scheduled here. A future rename would need explicit
|
|
119
|
+
release-owner approval, ownership checks, a complete public-interface cutover,
|
|
120
|
+
and a tested migration for existing settings, sessions, references and stored
|
|
121
|
+
state. Renaming a directory is not a data migration.
|
|
122
|
+
|
|
123
|
+
There are no new command aliases, runtime shims, automatic data moves or
|
|
124
|
+
duplicate packages in this branding change.
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-smart-compact",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "10.0.1",
|
|
4
|
+
"description": "Pi Continuity — context hygiene and session continuity for Pi Coding Agent: recoverable cleanup, checkpoints, memory and verified compaction.",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"packageManager": "bun@1.4.
|
|
6
|
+
"packageManager": "bun@1.4.2",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=22.19.0"
|
|
9
9
|
},
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
".": {
|
|
15
15
|
"types": "./dist/index.d.ts",
|
|
16
16
|
"default": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./rtk": {
|
|
19
|
+
"types": "./dist/rtk.d.ts",
|
|
20
|
+
"default": "./dist/rtk.js"
|
|
17
21
|
}
|
|
18
22
|
},
|
|
19
23
|
"author": "Alper Tarhan <alpertarhan@gmail.com>",
|
|
@@ -31,6 +35,10 @@
|
|
|
31
35
|
"pi-extension",
|
|
32
36
|
"pi-coding-agent",
|
|
33
37
|
"pi-smart-compact",
|
|
38
|
+
"pi-continuity",
|
|
39
|
+
"context-hygiene",
|
|
40
|
+
"session-continuity",
|
|
41
|
+
"context-recovery",
|
|
34
42
|
"smart-compaction",
|
|
35
43
|
"context-compression",
|
|
36
44
|
"eesv",
|
|
@@ -40,6 +48,9 @@
|
|
|
40
48
|
"files": [
|
|
41
49
|
"dist",
|
|
42
50
|
"docs",
|
|
51
|
+
"!docs/findings",
|
|
52
|
+
"!docs/reports",
|
|
53
|
+
"assets",
|
|
43
54
|
"README.md",
|
|
44
55
|
"ARCHITECTURE.md",
|
|
45
56
|
"LICENSE",
|
|
@@ -50,13 +61,15 @@
|
|
|
50
61
|
"scripts": {
|
|
51
62
|
"sync-version": "bun run scripts/sync-version.ts",
|
|
52
63
|
"prebuild": "bun run sync-version",
|
|
53
|
-
"build": "rm -rf dist && mkdir dist && bun build ./src/index.ts --outdir ./dist --target bun --external '@earendil-works/*' --external 'typebox' && bun build ./
|
|
64
|
+
"build": "rm -rf dist && mkdir dist && bun build ./src/index.ts ./src/rtk.ts --outdir ./dist --target bun --external '@earendil-works/*' --external 'typebox' --external '@resvg/resvg-js' && bun build ./src/app/mnemopi-worker.ts --outfile ./dist/mnemopi-worker.js --target bun --external '@oh-my-pi/pi-mnemopi' --external 'typebox' && bun x tsc --emitDeclarationOnly --outDir dist",
|
|
54
65
|
"test": "bun test",
|
|
55
66
|
"bench": "bun bench/hot-paths.bench.ts",
|
|
56
67
|
"gate": "bun run scripts/eval-gate.ts",
|
|
57
|
-
"provider-eval": "bun run
|
|
58
|
-
"provider-eval:live": "bun run
|
|
59
|
-
"telemetry-report": "bun run
|
|
68
|
+
"provider-eval": "bun run scripts/provider-eval.ts",
|
|
69
|
+
"provider-eval:live": "bun run scripts/provider-scenario-eval.ts",
|
|
70
|
+
"telemetry-report": "bun run scripts/telemetry-report.ts",
|
|
71
|
+
"task-eval": "bun run scripts/task-eval.ts",
|
|
72
|
+
"replay-eval": "bun run scripts/replay-eval.ts",
|
|
60
73
|
"compat:pi": "bun run scripts/check-pi-compat.ts",
|
|
61
74
|
"release:audit": "bun run scripts/release-audit.ts",
|
|
62
75
|
"release:check": "bun run typecheck && bun test && bun run gate && bun run bench && bun run build && bun run release:audit && bun run compat:pi latest",
|
|
@@ -70,15 +83,35 @@
|
|
|
70
83
|
"image": "https://raw.githubusercontent.com/alpertarhan/pi-smart-compact/main/docs/assets/pi-smart-compact.png"
|
|
71
84
|
},
|
|
72
85
|
"peerDependencies": {
|
|
73
|
-
"@earendil-works/pi-ai": "
|
|
74
|
-
"@earendil-works/pi-coding-agent": "
|
|
75
|
-
"@earendil-works/pi-tui": "
|
|
86
|
+
"@earendil-works/pi-ai": ">=0.87.1",
|
|
87
|
+
"@earendil-works/pi-coding-agent": ">=0.87.1",
|
|
88
|
+
"@earendil-works/pi-tui": ">=0.87.1",
|
|
89
|
+
"@oh-my-pi/pi-mnemopi": "18.3.1",
|
|
90
|
+
"@resvg/resvg-js": "2.6.2",
|
|
91
|
+
"bun": "1.4.2",
|
|
76
92
|
"typebox": "*"
|
|
77
93
|
},
|
|
94
|
+
"peerDependenciesMeta": {
|
|
95
|
+
"@oh-my-pi/pi-mnemopi": {
|
|
96
|
+
"optional": true
|
|
97
|
+
},
|
|
98
|
+
"@resvg/resvg-js": {
|
|
99
|
+
"optional": true
|
|
100
|
+
},
|
|
101
|
+
"bun": {
|
|
102
|
+
"optional": true
|
|
103
|
+
}
|
|
104
|
+
},
|
|
78
105
|
"devDependencies": {
|
|
79
|
-
"@earendil-works/pi-
|
|
106
|
+
"@earendil-works/pi-ai": "0.87.1",
|
|
107
|
+
"@earendil-works/pi-coding-agent": "0.87.1",
|
|
108
|
+
"@earendil-works/pi-server": "0.87.1",
|
|
109
|
+
"@earendil-works/pi-tui": "0.87.1",
|
|
110
|
+
"@oh-my-pi/pi-mnemopi": "18.3.1",
|
|
111
|
+
"@resvg/resvg-js": "2.6.2",
|
|
80
112
|
"@types/bun": "1.4.2",
|
|
81
113
|
"@types/node": "^26.3.0",
|
|
114
|
+
"bun": "1.4.2",
|
|
82
115
|
"typescript": "^7.0.2"
|
|
83
116
|
},
|
|
84
117
|
"publishConfig": {
|