toolnet-memory 0.3.16 → 0.3.18

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.
Files changed (45) hide show
  1. package/.env.example +74 -0
  2. package/.release-target +1 -1
  3. package/README.md +157 -7
  4. package/bin/toolnet-memory +12 -0
  5. package/bundle/agy-hook.js +59 -59
  6. package/bundle/agy.js +58 -58
  7. package/bundle/api.js +15 -15
  8. package/bundle/audit.js +2 -0
  9. package/bundle/background-refresh.js +7 -7
  10. package/bundle/code-capabilities.js +2 -0
  11. package/bundle/codex.js +63 -63
  12. package/bundle/context-runtime.js +41 -41
  13. package/bundle/context.js +15 -15
  14. package/bundle/copilot-hook.js +73 -73
  15. package/bundle/cursor-hook.js +73 -73
  16. package/bundle/docker-healthcheck.js +3 -0
  17. package/bundle/doctor.js +4 -4
  18. package/bundle/full-index.js +20 -19
  19. package/bundle/gc.js +5 -3
  20. package/bundle/graph-cli.js +1 -1
  21. package/bundle/graph-index.js +5 -4
  22. package/bundle/graph-ui.js +4 -3
  23. package/bundle/grok-hook.js +52 -52
  24. package/bundle/handoff-refresh.js +2 -2
  25. package/bundle/help-cli.js +4 -4
  26. package/bundle/impact.js +5 -4
  27. package/bundle/incremental.js +5 -5
  28. package/bundle/init.js +35 -35
  29. package/bundle/kiro-hook.js +74 -74
  30. package/bundle/learner.js +8 -6
  31. package/bundle/mcp.js +19 -17
  32. package/bundle/memory-agent.js +4 -4
  33. package/bundle/memory-query.js +3 -3
  34. package/bundle/opencode.js +73 -73
  35. package/bundle/project-manual.js +7 -7
  36. package/bundle/public/index.html +1089 -2306
  37. package/bundle/runtime.js +16 -13
  38. package/bundle/semantic.js +6 -5
  39. package/bundle/service.js +11 -6
  40. package/bundle/snapshot.js +6 -4
  41. package/bundle/status-cli.js +4 -4
  42. package/bundle/toolnet-cli.js +49 -49
  43. package/bundle/work-continuity.js +7 -7
  44. package/package.json +26 -2
  45. package/release-manifest.json +57 -1
package/.env.example CHANGED
@@ -59,3 +59,77 @@ TOOLNET_API_TOKEN=
59
59
  # ToolNet Memory Hub
60
60
  TOOLNET_HUB_OWNER=owner
61
61
  TOOLNET_HUB_MAX_EVENTS=100
62
+
63
+ # ------------------------------------------------------------
64
+ # Graph UI
65
+ # ------------------------------------------------------------
66
+ #
67
+ # Localhost-only by default.
68
+ TOOLNET_GRAPH_HOST=127.0.0.1
69
+ TOOLNET_GRAPH_PORT=9749
70
+ # Optional API bearer token.
71
+ # Recommended whenever Graph UI is reachable from another host.
72
+ # Generate a strong random token, for example:
73
+ # openssl rand -hex 32
74
+ #
75
+ # TOOLNET_GRAPH_TOKEN=
76
+ # Optional comma-separated Host allow-list for reverse proxies
77
+ # or wildcard binds.
78
+ #
79
+ # TOOLNET_GRAPH_ALLOWED_HOSTS=graph.example.com
80
+
81
+ # ------------------------------------------------------------
82
+ # Optional remote client-side encryption
83
+ # ------------------------------------------------------------
84
+ #
85
+ # OFF by default. Normal ToolNet usage needs no encryption key.
86
+ #
87
+ # Enable only when you want ToolNet to encrypt objects before
88
+ # they are sent to S3 / R2 / Hugging Face object storage.
89
+ #
90
+ # TOOLNET_REMOTE_ENCRYPTION=on
91
+ #
92
+ # Generate a 32-byte key:
93
+ # openssl rand -base64 32
94
+ #
95
+ # Configure ONE:
96
+ #
97
+ # TOOLNET_REMOTE_ENCRYPTION_KEY=
98
+ #
99
+ # or preferably from a protected file / Docker secret:
100
+ #
101
+ # TOOLNET_REMOTE_ENCRYPTION_KEY_FILE=/run/secrets/toolnet_remote_encryption_key
102
+
103
+ # ------------------------------------------------------------
104
+ # Automatic garbage collection
105
+ # ------------------------------------------------------------
106
+ #
107
+ # Disabled by default.
108
+ #
109
+ # When enabled on the ToolNet service, GC runs only for already
110
+ # initialized projects observed by the service.
111
+ #
112
+ # TOOLNET_AUTO_GC=on
113
+ #
114
+ # Default: 168 hours = weekly.
115
+ #
116
+ # TOOLNET_AUTO_GC_INTERVAL_HOURS=168
117
+ #
118
+ # Internal due-check cadence. Default: 15 minutes.
119
+ #
120
+ # TOOLNET_AUTO_GC_TICK_MINUTES=15
121
+ #
122
+ # Remote snapshot deletion remains OFF unless explicitly enabled.
123
+ #
124
+ # TOOLNET_AUTO_GC_REMOTE=off
125
+ #
126
+ # Retention policy overrides:
127
+ #
128
+ # TOOLNET_AUTO_GC_KEEP_SNAPSHOTS=10
129
+ # TOOLNET_AUTO_GC_RUNTIME_DAYS=30
130
+ # TOOLNET_AUTO_GC_STALE_LOCK_MINUTES=10
131
+ # TOOLNET_AUTO_GC_SNAPSHOT_DAYS=30
132
+ #
133
+ # Optional audit actor identity:
134
+ #
135
+ # TOOLNET_AGENT_ID=
package/.release-target CHANGED
@@ -1 +1 @@
1
- 0.3.16
1
+ 0.3.17
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  **One project. Multiple coding agents. Continuous context.**
13
13
 
14
- Current release: **v0.3.16**
14
+ Current release: v0.3.17
15
15
 
16
16
  </div>
17
17
 
@@ -614,8 +614,48 @@ toolnet-memory project:manual-sync
614
614
 
615
615
  Secrets and credentials should remain in `.env` or another secret store, not in `PROJECT.md`.
616
616
 
617
+ ### Optional remote encryption
618
+
619
+ Remote S3 / R2 / Hugging Face objects can be encrypted client-side with
620
+ AES-256-GCM. Encryption remains disabled by default:
621
+
622
+ ```bash
623
+ export TOOLNET_REMOTE_ENCRYPTION=on
624
+ export TOOLNET_REMOTE_ENCRYPTION_KEY="$(openssl rand -base64 32)"
625
+ ```
626
+
627
+ Existing plaintext remote objects remain readable. New and rewritten
628
+ remote objects are encrypted while the feature is enabled. For services or
629
+ containers, `TOOLNET_REMOTE_ENCRYPTION_KEY_FILE` can load the key from a
630
+ protected file instead of placing the key directly in an environment
631
+ variable. See [`docs/remote-encryption.md`](docs/remote-encryption.md).
632
+
617
633
  ---
618
634
 
635
+ ### Graph UI security
636
+
637
+ `toolnet-memory graph` remains localhost-first:
638
+
639
+ ```text
640
+ 127.0.0.1:9749
641
+ ```
642
+
643
+ For remote exposure, Graph API endpoints support an optional bearer token:
644
+
645
+ ```bash
646
+ export TOOLNET_GRAPH_TOKEN="$(openssl rand -hex 32)"
647
+ export TOOLNET_GRAPH_HOST="0.0.0.0"
648
+ toolnet-memory graph
649
+ ```
650
+
651
+ The browser asks for the token when a protected Graph API returns HTTP 401 and
652
+ keeps it in sessionStorage for that browser session.
653
+
654
+ `/api/health` stays unauthenticated but returns only a minimal service status.
655
+
656
+ `TOOLNET_GRAPH_TOKEN` controls Graph API access only. It is not an encryption
657
+ key and is not required for normal localhost usage.
658
+
619
659
  ## Runtime Capability Truth
620
660
 
621
661
  ToolNet Memory is local-first and deterministic.
@@ -710,12 +750,15 @@ implementation.
710
750
 
711
751
  ToolNet provides secret scanning and durable-data sanitization.
712
752
 
713
- ToolNet does not provide client-side encryption by default and does not require
714
- an encryption key.
753
+ ToolNet does not provide mandatory client-side encryption. Remote
754
+ client-side encryption is optional and disabled by default. Normal ToolNet
755
+ usage does not require an encryption key. When
756
+ `TOOLNET_REMOTE_ENCRYPTION=on` is configured together with
757
+ `TOOLNET_REMOTE_ENCRYPTION_KEY` (or the `_FILE` variant), ToolNet encrypts
758
+ new remote object writes with AES-256-GCM before they reach S3 / R2 /
759
+ Hugging Face storage. Existing plaintext remote objects remain readable.
715
760
 
716
- Remote payload protection at rest therefore depends on the configured storage
717
- provider unless optional ToolNet client-side encryption is implemented in a
718
- future release.
761
+ See [`docs/remote-encryption.md`](docs/remote-encryption.md).
719
762
 
720
763
  Project instruction files are treated as untrusted project data, not as system
721
764
  or developer authority.
@@ -1091,7 +1134,7 @@ ToolNet Memory uses GitHub Actions for CI and npm releases.
1091
1134
  The current release line is:
1092
1135
 
1093
1136
  ```text
1094
- npm package: toolnet-memory@0.3.16
1137
+ npm package: toolnet-memory@0.3.17
1095
1138
  Git tag: v0.3.14
1096
1139
  ```
1097
1140
 
@@ -1117,3 +1160,110 @@ See [CHANGELOG.md](CHANGELOG.md) for release history.
1117
1160
  ## License
1118
1161
 
1119
1162
  MIT © 2026 LBT-AI. See [LICENSE](LICENSE).
1163
+
1164
+ Docker
1165
+
1166
+ ToolNet Memory includes a hardened Node.js 22 container build.
1167
+
1168
+ docker build -t toolnet-memory:local .
1169
+ docker run --rm toolnet-memory:local --version
1170
+
1171
+ Run the daemon with persistent ToolNet runtime state:
1172
+
1173
+ docker run --rm \
1174
+ -v toolnet-memory-home:/home/node/.toolnet \
1175
+ toolnet-memory:local
1176
+
1177
+ Run against the current project:
1178
+
1179
+ docker run --rm \
1180
+ -v "$PWD:/workspace" \
1181
+ -v toolnet-memory-home:/home/node/.toolnet \
1182
+ toolnet-memory:local \
1183
+ doctor
1184
+
1185
+ The final image runs as a non-root user and the Docker health check uses the
1186
+ ToolNet daemon's real Unix-socket ping protocol.
1187
+
1188
+ Release image target:
1189
+
1190
+ ghcr.io/lbt-ai/toolnet-memory
1191
+
1192
+ Optional Docker Hub publishing supports:
1193
+
1194
+ lbtai/toolnet-memory
1195
+
1196
+ when Docker Hub publishing is explicitly enabled in repository settings.
1197
+
1198
+ See docs/docker.md for Compose, shared-volume dedupe, permissions, health
1199
+ checks, and multi-architecture release details.
1200
+
1201
+ Standalone binaries
1202
+
1203
+ ToolNet Memory can run without a separately installed Node.js/npm runtime.
1204
+
1205
+ Release targets:
1206
+
1207
+ Linux x64 / arm64
1208
+ macOS x64 / arm64
1209
+ Windows x64
1210
+
1211
+ Example:
1212
+
1213
+ ```bash
1214
+ chmod +x toolnet-memory-linux-x64
1215
+ ./toolnet-memory-linux-x64 --version
1216
+ ```
1217
+
1218
+ Standalone binaries embed the Node.js runtime and ToolNet production
1219
+ dependency graph. The npm package remains fully supported.
1220
+
1221
+ See [`docs/standalone.md`](docs/standalone.md) for platform support,
1222
+ service limitations, checksums, and build instructions.
1223
+
1224
+ Audit log and automatic GC
1225
+
1226
+ ToolNet can maintain a tamper-evident project audit history:
1227
+
1228
+ .toolnet/audit/events.jsonl
1229
+
1230
+ Inspect and verify:
1231
+
1232
+ ```bash
1233
+ toolnet-memory audit
1234
+ toolnet-memory audit:verify
1235
+ ```
1236
+
1237
+ The log records durable memory writes, snapshot restore/recovery, Guard
1238
+ checks, and GC execution without intentionally storing raw memory
1239
+ content or raw shell commands.
1240
+
1241
+ Automatic GC remains opt-in:
1242
+
1243
+ ```bash
1244
+ export TOOLNET_AUTO_GC=on
1245
+ toolnet-memory service
1246
+ ```
1247
+
1248
+ The default interval is weekly. Remote snapshot GC remains disabled
1249
+ unless `TOOLNET_AUTO_GC_REMOTE=on` is explicitly configured.
1250
+
1251
+ See [`docs/audit-log.md`](docs/audit-log.md) and
1252
+ [`docs/auto-gc.md`](docs/auto-gc.md).
1253
+
1254
+ Non-TypeScript local code search
1255
+
1256
+ Structural graph parsing remains TypeScript/JavaScript-only.
1257
+
1258
+ Python, Go, Rust, C, and C++ files are now included in deterministic local
1259
+ code search through sanitized file chunks indexed by SQLite FTS5/BM25.
1260
+
1261
+ ```bash
1262
+ toolnet-memory code:capabilities
1263
+ ```
1264
+
1265
+ Optional external LSP installations are detected for capability reporting
1266
+ only. ToolNet does not auto-download or automatically execute language
1267
+ servers during indexing.
1268
+
1269
+ See [`docs/non-ts-intelligence.md`](docs/non-ts-intelligence.md).
@@ -80,6 +80,18 @@ case "$COMMAND" in
80
80
  shift
81
81
  run bundle/gc.js src/retention/cli.ts "$@"
82
82
  ;;
83
+ audit)
84
+ shift
85
+ run bundle/audit.js src/audit/cli.ts "$@"
86
+ ;;
87
+ audit:verify)
88
+ shift
89
+ run bundle/audit.js src/audit/cli.ts verify "$@"
90
+ ;;
91
+ code:capabilities)
92
+ shift
93
+ run bundle/code-capabilities.js src/code-intelligence/parsers/capability-cli.ts "$@"
94
+ ;;
83
95
 
84
96
  run)
85
97
  run bundle/runtime.js src/index.ts