minnimemory 1.0.0-beta.1 → 1.0.0

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 (66) hide show
  1. package/CHANGELOG.md +193 -0
  2. package/LICENSE +45 -39
  3. package/README.md +382 -693
  4. package/examples/README.md +4 -0
  5. package/package.json +58 -52
  6. package/pkg/chunks/chunk-74LHXLLF.js +34 -0
  7. package/pkg/chunks/chunk-QDDKAHAE.js +19 -0
  8. package/pkg/chunks/chunk-QUL7N4BR.js +120 -0
  9. package/pkg/chunks/mcpServer-EWPP2F2F.js +2 -0
  10. package/pkg/cli.js +302 -0
  11. package/pkg/index.d.ts +27 -0
  12. package/pkg/index.js +2 -0
  13. package/dist/bench.d.ts +0 -98
  14. package/dist/bench.js +0 -142
  15. package/dist/benchReport.d.ts +0 -12
  16. package/dist/benchReport.js +0 -128
  17. package/dist/bounds.d.ts +0 -40
  18. package/dist/bounds.js +0 -44
  19. package/dist/cli.d.ts +0 -15
  20. package/dist/cli.js +0 -503
  21. package/dist/compile.d.ts +0 -187
  22. package/dist/compile.js +0 -516
  23. package/dist/discover.d.ts +0 -125
  24. package/dist/discover.js +0 -520
  25. package/dist/doctor.d.ts +0 -9
  26. package/dist/doctor.js +0 -67
  27. package/dist/episodic.d.ts +0 -47
  28. package/dist/episodic.js +0 -130
  29. package/dist/hook.d.ts +0 -45
  30. package/dist/hook.js +0 -104
  31. package/dist/index.d.ts +0 -18
  32. package/dist/index.js +0 -18
  33. package/dist/init.d.ts +0 -125
  34. package/dist/init.js +0 -475
  35. package/dist/instructions.d.ts +0 -60
  36. package/dist/instructions.js +0 -270
  37. package/dist/mcp.d.ts +0 -109
  38. package/dist/mcp.js +0 -252
  39. package/dist/mcpServer.d.ts +0 -136
  40. package/dist/mcpServer.js +0 -997
  41. package/dist/paths.d.ts +0 -25
  42. package/dist/paths.js +0 -47
  43. package/dist/recall.d.ts +0 -113
  44. package/dist/recall.js +0 -256
  45. package/dist/recallDir.d.ts +0 -50
  46. package/dist/recallDir.js +0 -187
  47. package/dist/reorganize.d.ts +0 -62
  48. package/dist/reorganize.js +0 -216
  49. package/dist/report.d.ts +0 -16
  50. package/dist/report.js +0 -204
  51. package/dist/router.d.ts +0 -141
  52. package/dist/router.js +0 -314
  53. package/dist/rules.d.ts +0 -32
  54. package/dist/rules.js +0 -651
  55. package/dist/scan.d.ts +0 -110
  56. package/dist/scan.js +0 -173
  57. package/dist/text.d.ts +0 -158
  58. package/dist/text.js +0 -395
  59. package/dist/tokenizer.d.ts +0 -26
  60. package/dist/tokenizer.js +0 -69
  61. package/dist/types.d.ts +0 -156
  62. package/dist/types.js +0 -17
  63. package/dist/version.d.ts +0 -7
  64. package/dist/version.js +0 -7
  65. package/dist/writeProtocol.d.ts +0 -19
  66. package/dist/writeProtocol.js +0 -45
package/CHANGELOG.md ADDED
@@ -0,0 +1,193 @@
1
+ # Changelog
2
+
3
+ All notable changes to the `minnimemory` package. Dates are publish dates; an entry that has not
4
+ been published yet says `unreleased` and gets its date on the day it goes out.
5
+
6
+ ## 1.0.0 - 2026-09-27
7
+
8
+ The first stable release. Prepared 2026-09-22, published 2026-09-27 as `latest`; `1.0.0-beta.2`
9
+ (2026-09-18) stays on the `beta` tag.
10
+
11
+ - Changed (2026-09-27): `init` opens with the map of every file Claude Code loads for the
12
+ project, from Claude Code's documented rules: managed policy, user `CLAUDE.md` and
13
+ `~/.claude/rules/`, `CLAUDE.md` / `.claude/CLAUDE.md` / `CLAUDE.local.md` here and in every
14
+ folder above, `AGENTS.md` when no `CLAUDE.md` exists, recursive and `paths:`-scoped rules,
15
+ subfolder files, imports and auto memory, each with when it loads, whose it is and its tokens.
16
+ `--map` prints only the map.
17
+ - Added: `install` registers an `InstructionsLoaded` hook (`minnimemory loaded`) that records what
18
+ Claude Code actually loads per project, machine-local; `init` checks its map against it and
19
+ `doctor` reports a file Claude loaded that the map missed (MM016). `install --remove` removes it.
20
+ - Fixed: the always-loaded total now counts user rules, the managed policy file, parent folders'
21
+ CLAUDE files and nested rules, and no longer counts `paths:`-scoped rules; a host at
22
+ `.claude/CLAUDE.md` is found and compiled with its manifest at the project root.
23
+
24
+ - Fixed (2026-09-27, macOS dev run): the auto-memory folder and the load log are found the way
25
+ Claude Code keys them. A project reached through a symlink (macOS `/tmp` and `/var` point into
26
+ `/private`, or a `~/dev` linked to another drive) is keyed by its real path, with the path as
27
+ typed as a fallback; a git worktree, and any folder inside it, shares the main checkout's
28
+ folder, as the Claude Code memory docs say. Before, both missed that memory. doctor's note on a
29
+ repo's own `autoMemoryDirectory` now says Claude Code does use it in a trusted folder and that
30
+ minnimemory still does not follow it (the 2026-09-26 security decision stands).
31
+ - Fixed (2026-09-27, end-to-end dev run): an `@path` import line in a section apply routes out
32
+ now stays in the always-loaded file, under `## Imports`. Claude Code follows imports only from
33
+ files it loads at session start, so a routed import had silently stopped its file loading.
34
+
35
+ - Fixed (2026-09-27, hands-on audit of the map): `AGENTS.md` is read when the only CLAUDE file
36
+ above is the user's own `~/.claude/CLAUDE.md` or an excluded one (the map was empty for an
37
+ AGENTS.md repo under the home folder). Printed commands use forward slashes, so Git Bash no
38
+ longer strips a Windows target path. The map says when its subfolder scan stopped at its cap;
39
+ `doctor` and the drift hook skip that scan, and MM016 builds the map only once a load log
40
+ exists (doctor on a 6,000-folder tree: 4.3 s to 0.2 s). `loaded` resolves a relative path
41
+ against the session's folder, and the map ignores logged files that no longer exist.
42
+
43
+ - Fixed (2026-09-27, messy-developer live proof): a hand edit apply has nothing to route out of (a
44
+ sorted rule file, or `MEMORY.md` outside its list) is kept byte for byte and taken as the new
45
+ baseline, so the MM010 drift it raised clears; before, `apply` said "nothing to apply" and the
46
+ drift never cleared. The accepted file is backed up under `previous/`, so `undo` still names it.
47
+ `undo` with `force: true` over MCP returns a command that carries `--force`.
48
+ - Fixed (2026-09-27, pre-publish audit): a project host file's budget is now that file's alone.
49
+ The user-level `~/.claude/CLAUDE.md`, its imports, the auto-memory index and `.claude/rules`
50
+ stay in MM001 (the audit line) but no longer enter the plan's before/after, share or manifest, so a machine with a
51
+ large user-level memory no longer compiles every project `CLAUDE.md` down to its title line,
52
+ and the MCP server's plan (made without the user-level host unless launched with
53
+ `--include-auto-memory`) hashes the same as the CLI's, so the printed `apply --plan` runs.
54
+ - Fixed: `install` quotes the arguments it hands the shell on Windows, so a cli path with a
55
+ space (`C:\Users\First Last\...`) registers as one argument and the server starts.
56
+ - Fixed: a source that is not valid UTF-8 is refused instead of rewritten (and backed up) with
57
+ replacement characters; a CRLF source is rewritten with CRLF.
58
+ - Fixed: `undo` refuses without `--force` when a compiled file was edited since the last apply
59
+ or the workspace was re-applied since the first, naming what it would discard.
60
+ - Fixed: MM008 also recognises `sk-proj-` OpenAI keys, AWS secret access keys and plain
61
+ `password:`/`api_key=` assignments that look like a real value.
62
+ - Fixed: `.minnimemory/.gitignore` (replacing `original/.gitignore`) keeps `original/`,
63
+ `previous/` and the drift stamp out of git; a re-apply of an older workspace adds it.
64
+ - Fixed: the memory-folder plan no longer says "nothing here is volatile" beside a routed
65
+ history piece, or offers a budget that saves a negative number; the CLI's dry-run line prints
66
+ the apply command on its own line; `install` warns when it registers a copy in the npx cache;
67
+ a `--budget -5` error says how to write it.
68
+
69
+ - Changed (2026-09-27, workflow audit): over MCP, `apply` and `undo` return the command to run
70
+ (`npx -y minnimemory apply --plan <hash> [target]`, `npx -y minnimemory undo [target]`) and
71
+ the operation list with paths and line deltas, never file content, unless called with
72
+ `content: true` (for a host that cannot run commands). An `apply` on the example file went
73
+ from about 3,500 tokens to about 240; on an 85-file memory folder from about 13,400 to about
74
+ 300 (moves are grouped by destination). The command names the target whenever it is not the server root (absolute for the
75
+ auto-memory folder) and always uses the `npx` form, so it runs as printed; the CLI's `init`
76
+ and `doctor` print the same real command (`init` used to print a literal `<hash>`).
77
+ - New (2026-09-27): verdict `sort`. A memory-folder plan that recompiles no always-loaded file
78
+ and only moves loose topic files says so, with what the sort costs or saves per turn, instead
79
+ of "compile ... saves -173 tokens".
80
+ - Changed (2026-09-27, MCP live proof): the operations block prints paths relative to the root
81
+ the header names, groups backups and moves per destination folder, and `doctor`/`init` over
82
+ MCP show four findings per rule (`format: "json"` keeps every one). On a real 78-file memory
83
+ folder a summary `doctor` went from about 11,000 tokens to about 3,500 and `apply` from about
84
+ 3,300 to about 900. The CLI prints the same shorter block.
85
+ - Fixed (2026-09-27, MCP live proof): `apply` is a fixed point. The command `apply` returns
86
+ (and the CLI's next-step line) carries the budget the plan was made with, `--force` on a leave
87
+ verdict and the CLI's own `--profile`/`--episodic-json`, so the hash is recomputed from the
88
+ same plan (a real agent got "the plan on disk no longer matches" for a plan made at `--budget
89
+ 12000`). The plan's `after` now counts the user-level CLAUDE.md import lines growing by
90
+ `AlwaysOnMemory/`. The manifest records the budget it was applied with, and a re-apply with no
91
+ `--budget` or the same one leaves every undrifted compiled source alone instead of re-sharing
92
+ the pool over the trimmed sizes and trimming again; a different `--budget` recompiles.
93
+ - Fixed (2026-09-27, MCP live proof): `install` writes the user-scope drift hook into the
94
+ Claude Code config dir's `settings.json` (`CLAUDE_CONFIG_DIR` when set), not always `~/.claude`;
95
+ under a relocated config dir it wrote the hook into the wrong file. The commands the tool
96
+ prints call the installed copy directly (`node "<path>/cli.js" apply ...`) when the CLI knows
97
+ where it runs from, so the plan hash is recomputed by the build that made it; `npx -y
98
+ minnimemory` is the fallback.
99
+ - Fixed (2026-09-27, live proof): a memory saved into a topic file the sort only moved is no
100
+ longer reported as drift by `doctor` or the drift hook; MM010 checks the files the tool
101
+ rewrote and the routed pieces, as DESIGN.md 6.11 decision 3 always said. The sorted index's
102
+ header now names the folder its paths are relative to (in full for the machine-local Claude
103
+ Code memory folder), after the live proof's agent resolved `OnDemandMemory/pc_setup.md`
104
+ against the project directory first and wasted two reads.
105
+ - Fixed (2026-09-27): the drift hook now also checks the project's Claude Code auto-memory
106
+ folder, whose `.minnimemory/` lives outside the project; it never fired there before. The
107
+ hook costs about 0.15 s per prompt (was 0.35 s): the CLI loads the MCP SDK only for the
108
+ `mcp` command.
109
+ - Changed (2026-09-27): `install` registers the MCP server as a direct call to the installed
110
+ copy (`node "<path>/cli.js" mcp`), the same form as the drift hook, so Claude Code does not
111
+ re-resolve the package through `npx` on every launch; a registration that runs a different
112
+ command is repointed on the next `install` without `--force`. `npx -y minnimemory mcp` stays
113
+ the form for other hosts' JSON snippets and when `install` cannot tell where it runs from.
114
+ - Fixed (2026-09-27): `apply` renders its report before writing, so every write shows its real
115
+ line delta (was `+0 -0`) and an empty `diff:` header no longer appears; it ends with what it
116
+ wrote and the undo command. `doctor`'s drift lines and the MCP error for an unflagged
117
+ `auto-memory` target name the exact command to run next.
118
+ - First stable release. Same four verbs as the betas: `doctor`, `init`, `apply`, `undo`, in the
119
+ terminal and over MCP (`--profile basic`, the default); the seven-tool `--profile full` is unchanged.
120
+ - New: `init` and `doctor` are one preview. Both print the audit, then a unified diff of every
121
+ file `apply` would write, then the next step ("run apply", or "nothing to apply"). `doctor`
122
+ keeps its CI exit code. `init` is the first-time name, `doctor` the returning one.
123
+ - New: memory folders compile. `apply`/`undo` on an index plus topic files, or on a
124
+ project's Claude Code auto-memory folder, used to answer "nothing to compile"; now every
125
+ always-loaded topic file the index (or the user-level host) imports sorts into
126
+ `AlwaysOnMemory/`, trimmed in place; every other topic file sorts into `OnDemandMemory/`,
127
+ untouched; routed pieces join it there, one piece per parent per reason
128
+ (`<parent>__history.md`, `<parent>__detail.md`), not one per section. A project root goes
129
+ through the same engine: the host file is trimmed in place, routed pieces land in
130
+ `.claude/OnDemandMemory/`. `undo` puts every file back byte for byte, including a workspace
131
+ compiled by the pre-reorganization layout (manifest v4/v5), which `doctor` now names as such
132
+ and `apply`/`init` refuse ("run undo, then apply") rather than compile over it. DESIGN.md 6.10.
133
+ - New: `apply` returns operations (copy, move, write, delete) instead of full file content for a
134
+ backup or a sorted move, and carries a `plan` hash plus the exact `npx -y minnimemory apply --plan
135
+ <hash> [target]` command; the CLI's `apply` gains `--plan <hash>` and refuses when the plan on disk no
136
+ longer matches. Drift (MM010) tracks only what the tool wrote: a file saved into
137
+ `AlwaysOnMemory/`/`OnDemandMemory/` by hand is not drift. DESIGN.md 6.11.
138
+ - New: `doctor`/`init` take `diff: "summary"` (default over MCP) or `"full"`: the plan table plus
139
+ one line per file (action, path, lines added/removed), with the import rewrite and every move/
140
+ delete still shown in full. The CLI keeps the full diff by default. DESIGN.md 6.10.
141
+ - New (revised 2026-09-27): on a memory folder the import is the placement decision. Every
142
+ stable section of an imported file is a candidate to stay, whatever its heading says;
143
+ "volatile" means a status heading, a changelog-shaped body or repeated status phrases, never
144
+ a date cited in a rule's rationale (`doctor`'s MM003 reads imported files the same way). With
145
+ no `--budget` every stable section stays and only volatile sections move; when nothing is
146
+ volatile the plan says so and names what a lower budget would save, from a real second plan.
147
+ A lower `--budget` is shared fairly (a file that fits an equal share stays whole, the largest
148
+ files split the rest) and a heading-less file over its share keeps its leading paragraphs and
149
+ routes the rest as `<name>__detail.md`. A single host file keeps the flat 2,000 default. The
150
+ first cut (a proportional share of half the sources, hint-matched headings, the lenient
151
+ volatility scorer) hollowed the maintainer's own rule files to frontmatter shells. DESIGN.md
152
+ 6.10, decision 8.
153
+ - New: the always-loaded count includes `.claude/rules/*.md` and `CLAUDE.local.md`, which Claude
154
+ Code also auto-loads beside the host file, alongside the user-level `~/.claude/CLAUDE.md` and
155
+ its imports (behind `--include-auto-memory` over MCP; always in the terminal).
156
+ - Changed: when a project has no memory file but its auto-memory folder exists and was not
157
+ included, the error names the folder and the flag instead of listing places it did not look.
158
+ - Changed: over MCP, `apply` and `undo` accept the `auto-memory` target behind
159
+ `--include-auto-memory`, like `doctor` and `init`; paths outside the server root come back
160
+ absolute, with the folder named.
161
+ - Changed: `undo` gains `--force` (`force: true` over MCP) for a memory folder whose routed
162
+ files were edited since the last apply.
163
+ - Changed (2026-09-27): `install` writes the drift hook as a direct call to the installed CLI (`node "<path>/cli.js" drift`) instead of `npx -y minnimemory drift`: about 0.3 s per prompt instead of 1.3 to 1.7 s. An existing npx entry is updated in place; re-run `install` after an upgrade. `init()`'s MCP description is one line (basic tools/list 986 -> 940 tokens). The plan's verdict line states the per-turn arithmetic: the saving on a turn with no routed file open and the extra cost on a turn with every routed file open.
164
+ - Fixed (2026-09-27): `doctor`, `apply` and `undo` given the host file's path on a compiled workspace now read that workspace (they used to see a bare file, plan to strip its fenced list, and find nothing to undo). apply's write guard for a memory folder allows exactly the user-level host file outside the folder, not its whole directory. The MEMORY.md-as-host message points at `doctor`/`apply` on the folder. Dead write-protocol module and five unreachable exports removed. README, GUIDE and the site transcript regenerated from a real 1.0.0 run.
165
+ - New: `minnimemory drift`, a Claude Code `UserPromptSubmit` hook that prints one short notice when
166
+ a memory file changed since the last `apply`, once per change, nothing when clean.
167
+ `minnimemory install` turns it on by default now; `--no-hook` opts out.
168
+ - New: `minnimemory install --remove` removes the MCP registration and the drift hook `install`
169
+ added, leaving every other key and every other hook in Claude Code's settings untouched; every
170
+ successful `install` path prints the next step in one line.
171
+ - New: the `apply` refusal on a source too small to benefit (verdict "leave"), in the CLI and
172
+ over MCP, shows the always-loaded token count before and after, and the break-even figure.
173
+ - Removed: the compiler no longer adds section anchors to the OnDemandMemory list. They raised the
174
+ always-loaded prefix on every turn against a saving that was only ever projected, and no freshly
175
+ compiled workspace could produce one. Compiled output is otherwise unchanged. `doctor`'s MM014
176
+ stays, so a workspace compiled by an earlier version still gets told what its anchor lines cost.
177
+ - The package ships as a minified bundle (`pkg/`) with one public declaration file. Behaviour is
178
+ unchanged.
179
+ - The generated instruction block carries a one-line MinniAI copyright notice, and the LICENSE
180
+ gains a clause on the generated instructions. The LICENSE no longer calls itself a beta license.
181
+ - Claude Code is the only supported host; the README no longer documents other hosts.
182
+ - README rewritten terminal-first: install, first doctor, apply, undo, then use, commands,
183
+ security and license.
184
+
185
+ ## 1.0.0-beta.2 - 2026-09-18
186
+
187
+ - `minnimemory install` registers the server with Claude Code in one command; running the bare
188
+ package with no TTY starts the server, so MCP hosts can launch it directly.
189
+ - Shipped comments and strings scrubbed of internal paths; a leak check runs before every publish.
190
+
191
+ ## 1.0.0-beta.1 - 2026-09-17
192
+
193
+ - First public release on npm.
package/LICENSE CHANGED
@@ -1,39 +1,45 @@
1
- MinniMemoryMCP License (Beta)
2
-
3
- Copyright (c) 2026 MinniAI. All rights reserved.
4
-
5
- 1. Grant. MinniAI gives you a free, non-exclusive, non-transferable, revocable
6
- license to install and run this software package (the "Software"),
7
- unmodified, for your own use. Use inside your own company or for your own
8
- commercial projects is allowed.
9
-
10
- 2. Restrictions. You may not:
11
- (a) copy, redistribute, sublicense, sell, rent or host the Software for
12
- others;
13
- (b) modify, translate or create derivative works of the Software;
14
- (c) reverse engineer, decompile or disassemble the Software, except where
15
- applicable law forbids this restriction;
16
- (d) remove or alter any copyright or license notice in the Software.
17
-
18
- 3. Your files. The files the Software reads or writes on your machine (memory
19
- files such as CLAUDE.md, the .minnimemory folder, backups) are yours.
20
- MinniAI claims no rights in them. The Software makes no network calls and
21
- sends nothing off your machine.
22
-
23
- 4. Beta software. This is a pre-release version. Features, output and
24
- behaviour may change between versions without notice.
25
-
26
- 5. No warranty. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
27
- KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
29
- Back up your files before using write features such as --allow-write.
30
-
31
- 6. Limitation of liability. IN NO EVENT SHALL MINNIAI BE LIABLE FOR ANY
32
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
33
- OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
34
- THE USE OF OR OTHER DEALINGS IN THE SOFTWARE.
35
-
36
- 7. Termination. This license ends automatically if you break any of its
37
- terms. When it ends, stop using the Software and delete your copies.
38
-
39
- 8. Contact. https://minniai.com
1
+ MinniMemoryMCP License
2
+
3
+ Copyright (c) 2026 MinniAI. All rights reserved.
4
+
5
+ 1. Grant. MinniAI gives you a free, non-exclusive, non-transferable, revocable
6
+ license to install and run this software package (the "Software"),
7
+ unmodified, for your own use. Use inside your own company or for your own
8
+ commercial projects is allowed.
9
+
10
+ 2. Restrictions. You may not:
11
+ (a) copy, redistribute, sublicense, sell, rent or host the Software for
12
+ others;
13
+ (b) modify, translate or create derivative works of the Software;
14
+ (c) reverse engineer, decompile or disassemble the Software, except where
15
+ applicable law forbids this restriction;
16
+ (d) remove or alter any copyright or license notice in the Software.
17
+
18
+ 3. Your files. The files the Software reads or writes on your machine (memory
19
+ files such as CLAUDE.md, the .minnimemory folder, backups) are yours.
20
+ MinniAI claims no rights in them. The Software makes no network calls and
21
+ sends nothing off your machine.
22
+
23
+ 4. Generated instructions. The instruction text, rule text and structure
24
+ that the Software writes into your memory files (the "Generated
25
+ Instructions") are MinniAI's copyrighted work. You may keep and use them
26
+ in memory files on machines you control, for your own or your company's
27
+ AI agents. You may not extract, republish, redistribute or sell the
28
+ Generated Instructions, include them in another product or service, or
29
+ use them, in whole or in part, as training or evaluation data for a
30
+ machine learning model.
31
+
32
+ 5. No warranty. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
33
+ KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
35
+ Back up your files before using write features such as --allow-write.
36
+
37
+ 6. Limitation of liability. IN NO EVENT SHALL MINNIAI BE LIABLE FOR ANY
38
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
39
+ OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
40
+ THE USE OF OR OTHER DEALINGS IN THE SOFTWARE.
41
+
42
+ 7. Termination. This license ends automatically if you break any of its
43
+ terms. When it ends, stop using the Software and delete your copies.
44
+
45
+ 8. Contact. https://minniai.com