dsh-loci 2.0.0 → 2.0.2

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/docs/PRIVACY.md CHANGED
@@ -1,93 +1,93 @@
1
- # PRIVACY — what is stored, where it goes, and how to delete it
2
-
3
- ## What is stored
4
-
5
- | Data | Contents | Default retention |
6
- |---|---|---|
7
- | Memory entries | title, body, tags, entity names, status, evidence quote, source session id | until deleted |
8
- | Revision history | every prior version of an entry | with the entry |
9
- | Audit log | event name, timestamp, memory id, byte counts, session id | 5 generations × 8 MB |
10
- | Request statistics | per-request injected bytes, listed/hidden counts | 90 days |
11
- | Session summaries | a deterministic digest of the last 24 messages of a finished session | as an entry |
12
-
13
- Never stored: tool results, full transcripts, model reasoning, credentials, or
14
- anything from a session that is not the root session of a conversation.
15
-
16
- ## Where it is
17
-
18
- `$DSH_HOME/memory/loci/` — nothing outside it. The location is printed by
19
- `dsh-loci doctor` and by `loci_stats`.
20
-
21
- ## What leaves the machine
22
-
23
- Nothing, by default. There is no telemetry, no analytics, and no network call in the
24
- plugin's normal path.
25
-
26
- Two things can reach the network, and both are opt-in:
27
-
28
- | Path | When | What is sent | How to disable |
29
- |---|---|---|---|
30
- | Update check | only when you press "check for updates" on the sidebar card | one `GET https://registry.npmjs.org/dsh-loci/latest`; no query string, no identifier | `updateCheck: false`, or simply never press it |
31
- | Embedding channel | only when `vectorMode` is `http` and an endpoint is configured | the text of the memory being embedded | leave `vectorMode` at `off` |
32
-
33
- Opening the panel or the card does **not** contact the registry - the version
34
- badge renders what is installed, and the update answer is served from a local
35
- cache that only a press populates. `updateRegistry` exists for people behind a
36
- slow or blocked route (`https://registry.npmmirror.com` works); it is a config
37
- value, never something a project file can set.
38
-
39
- Optional and off by default:
40
-
41
- - **`vectorMode: 'http'`** sends the entry text (at write time) and the query text
42
- (at search time) to the endpoint you configure. Set it to your own
43
- `llama-server`/embedding gateway if you want vectors without a third party.
44
- - The MCP facade, if you compose it, is a local stdio process; it makes no network
45
- calls itself.
46
-
47
- The model provider already sees the injected index, because that is what a prompt
48
- is. The index contains titles, kinds and dates — not bodies. Bodies reach the model
49
- only when a tool returns them for a specific query.
50
-
51
- ## What a model sees
52
-
53
- 1. **Every request**: the index (default budget 3,584 bytes ≈ 1.2k tokens), plus the
54
- rules block. Titles only.
55
- 2. **On demand**: `loci_search` snippets and `loci_get` bodies, for the entries the
56
- model chose to fetch.
57
- 3. **Never**: candidates, disputed entries, deleted entries, superseded revisions,
58
- or history — unless a tool asks for them explicitly.
59
-
60
- ## User control
61
-
62
- | Want | Where |
63
- |---|---|
64
- | See everything | Memory panel → Index / Stats; `dsh-loci stats` |
65
- | See what is waiting | Memory panel → Review; `dsh-loci review` |
66
- | Approve or reject | Review tab: Verify / Dispute |
67
- | Delete a fact | entry detail → Delete (soft; history retained) |
68
- | Delete permanently | `dsh-loci purge --id <id> --confirm <id>` (requires `allowHardDelete: true`) |
69
- | Turn capture off | Settings → Session capture → off |
70
- | Turn injection off | set `sectionMaxBytes` to its minimum and keep everything unverified, or disable the bundle |
71
- | Export a copy | `dsh-loci export` |
72
- | Stop everything | remove the bundle and delete `$DSH_HOME/memory/loci/` |
73
-
74
- ## Retention details
75
-
76
- - **Deletion is soft by default**: the head revision is marked `deleted`, excluded
77
- from search and injection, and the history stays readable by id. `purge` removes
78
- every revision, the full-text rows, entity links and embeddings, and writes one
79
- audit line.
80
- - **Expiry is time-based, not destructive**: `valid_to` in the past means "no longer
81
- current"; the row remains queryable with `asOf`.
82
- - **Candidates** older than 30 days are closed by maintenance (still readable, no
83
- longer counted as pending).
84
- - **Audit** rotates at 8 MB and keeps 5 generations; its lines contain ids and counts,
85
- never text.
86
- - **Request statistics** are pruned after 90 days.
87
-
88
- ## Data a third party could infer
89
-
90
- If someone obtains `memory.db`, they obtain the memory. If they obtain
91
- `audit.jsonl`, they obtain the *pattern* of activity (when memory was written or
92
- searched, how many bytes were injected, which memory ids), not its content. Treat
93
- both as private files; neither is encrypted by Loci.
1
+ # PRIVACY — what is stored, where it goes, and how to delete it
2
+
3
+ ## What is stored
4
+
5
+ | Data | Contents | Default retention |
6
+ |---|---|---|
7
+ | Memory entries | title, body, tags, entity names, status, evidence quote, source session id | until deleted |
8
+ | Revision history | every prior version of an entry | with the entry |
9
+ | Audit log | event name, timestamp, memory id, byte counts, session id | 5 generations × 8 MB |
10
+ | Request statistics | per-request injected bytes, listed/hidden counts | 90 days |
11
+ | Session summaries | a deterministic digest of the last 24 messages of a finished session | as an entry |
12
+
13
+ Never stored: tool results, full transcripts, model reasoning, credentials, or
14
+ anything from a session that is not the root session of a conversation.
15
+
16
+ ## Where it is
17
+
18
+ `$DSH_HOME/memory/loci/` — nothing outside it. The location is printed by
19
+ `dsh-loci doctor` and by `loci_stats`.
20
+
21
+ ## What leaves the machine
22
+
23
+ Nothing, by default. There is no telemetry, no analytics, and no network call in the
24
+ plugin's normal path.
25
+
26
+ Two things can reach the network, and both are opt-in:
27
+
28
+ | Path | When | What is sent | How to disable |
29
+ |---|---|---|---|
30
+ | Update check | only when you press "check for updates" on the sidebar card | one `GET https://registry.npmjs.org/dsh-loci/latest`; no query string, no identifier | `updateCheck: false`, or simply never press it |
31
+ | Embedding channel | only when `vectorMode` is `http` and an endpoint is configured | the text of the memory being embedded | leave `vectorMode` at `off` |
32
+
33
+ Opening the panel or the card does **not** contact the registry - the version
34
+ badge renders what is installed, and the update answer is served from a local
35
+ cache that only a press populates. `updateRegistry` exists for people behind a
36
+ slow or blocked route (`https://registry.npmmirror.com` works); it is a config
37
+ value, never something a project file can set.
38
+
39
+ Optional and off by default:
40
+
41
+ - **`vectorMode: 'http'`** sends the entry text (at write time) and the query text
42
+ (at search time) to the endpoint you configure. Set it to your own
43
+ `llama-server`/embedding gateway if you want vectors without a third party.
44
+ - The MCP facade, if you compose it, is a local stdio process; it makes no network
45
+ calls itself.
46
+
47
+ The model provider already sees the injected index, because that is what a prompt
48
+ is. The index contains titles, kinds and dates — not bodies. Bodies reach the model
49
+ only when a tool returns them for a specific query.
50
+
51
+ ## What a model sees
52
+
53
+ 1. **Every request**: the index (default budget 3,584 bytes ≈ 1.2k tokens), plus the
54
+ rules block. Titles only.
55
+ 2. **On demand**: `loci_search` snippets and `loci_get` bodies, for the entries the
56
+ model chose to fetch.
57
+ 3. **Never**: candidates, disputed entries, deleted entries, superseded revisions,
58
+ or history — unless a tool asks for them explicitly.
59
+
60
+ ## User control
61
+
62
+ | Want | Where |
63
+ |---|---|
64
+ | See everything | Memory panel → Index / Stats; `dsh-loci stats` |
65
+ | See what is waiting | Memory panel → Review; `dsh-loci review` |
66
+ | Approve or reject | Review tab: Verify / Dispute |
67
+ | Delete a fact | entry detail → Delete (soft; history retained) |
68
+ | Delete permanently | `dsh-loci purge --id <id> --confirm <id>` (requires `allowHardDelete: true`) |
69
+ | Turn capture off | Settings → Session capture → off |
70
+ | Turn injection off | set `sectionMaxBytes` to its minimum and keep everything unverified, or disable the bundle |
71
+ | Export a copy | `dsh-loci export` |
72
+ | Stop everything | remove the bundle and delete `$DSH_HOME/memory/loci/` |
73
+
74
+ ## Retention details
75
+
76
+ - **Deletion is soft by default**: the head revision is marked `deleted`, excluded
77
+ from search and injection, and the history stays readable by id. `purge` removes
78
+ every revision, the full-text rows, entity links and embeddings, and writes one
79
+ audit line.
80
+ - **Expiry is time-based, not destructive**: `valid_to` in the past means "no longer
81
+ current"; the row remains queryable with `asOf`.
82
+ - **Candidates** older than 30 days are closed by maintenance (still readable, no
83
+ longer counted as pending).
84
+ - **Audit** rotates at 8 MB and keeps 5 generations; its lines contain ids and counts,
85
+ never text.
86
+ - **Request statistics** are pruned after 90 days.
87
+
88
+ ## Data a third party could infer
89
+
90
+ If someone obtains `memory.db`, they obtain the memory. If they obtain
91
+ `audit.jsonl`, they obtain the *pattern* of activity (when memory was written or
92
+ searched, how many bytes were injected, which memory ids), not its content. Treat
93
+ both as private files; neither is encrypted by Loci.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-loci",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Layered long-term memory for DeepSeek Harness: the prompt sees only a stable index, full text is one lookup away. Bi-temporal facts, strict scope isolation, verified-only injection.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,7 +33,7 @@
33
33
  "./package.json": "./package.json"
34
34
  },
35
35
  "bin": {
36
- "dsh-loci": "./scripts/cli.mjs"
36
+ "dsh-loci": "scripts/cli.mjs"
37
37
  },
38
38
  "files": [
39
39
  "index.js",