memory-boost 0.1.0__py3-none-any.whl

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 (28) hide show
  1. memory_boost/__init__.py +3 -0
  2. memory_boost/cli.py +389 -0
  3. memory_boost/core.py +681 -0
  4. memory_boost/drift.py +145 -0
  5. memory_boost/example_transcripts/-work-acme-api/0a1b2c3d-1111-4aaa-8bbb-000000000001.jsonl +136 -0
  6. memory_boost/example_transcripts/-work-acme-api/0a1b2c3d-3333-4aaa-8bbb-000000000003.jsonl +46 -0
  7. memory_boost/example_transcripts/-work-acme-api/0a1b2c3d-4444-4aaa-8bbb-000000000004.jsonl +10 -0
  8. memory_boost/example_transcripts/-work-pixel-notes/0a1b2c3d-2222-4aaa-8bbb-000000000002.jsonl +54 -0
  9. memory_boost/example_wiki/concepts/money-as-integer-cents.md +15 -0
  10. memory_boost/example_wiki/concepts/retry-jobs-idempotently.md +16 -0
  11. memory_boost/example_wiki/context/preferences.md +7 -0
  12. memory_boost/example_wiki/decisions/cors-allow-all.md +9 -0
  13. memory_boost/example_wiki/decisions/float-money.md +9 -0
  14. memory_boost/example_wiki/decisions/pin-postgres-15.md +14 -0
  15. memory_boost/example_wiki/decisions/queue-in-postgres.md +15 -0
  16. memory_boost/example_wiki/decisions/sessions-in-redis.md +9 -0
  17. memory_boost/example_wiki/log.md +37 -0
  18. memory_boost/example_wiki/projects/acme-api.md +24 -0
  19. memory_boost/example_wiki/projects/legacy-dashboard.md +13 -0
  20. memory_boost/example_wiki/projects/pixel-notes.md +9 -0
  21. memory_boost/lessons.py +77 -0
  22. memory_boost/mine.py +172 -0
  23. memory_boost/server.py +102 -0
  24. memory_boost-0.1.0.dist-info/METADATA +229 -0
  25. memory_boost-0.1.0.dist-info/RECORD +28 -0
  26. memory_boost-0.1.0.dist-info/WHEEL +4 -0
  27. memory_boost-0.1.0.dist-info/entry_points.txt +2 -0
  28. memory_boost-0.1.0.dist-info/licenses/LICENSE +21 -0
memory_boost/server.py ADDED
@@ -0,0 +1,102 @@
1
+ """MCP server (stdio) exposing the memory as eight tools. Run: `memory-boost serve`."""
2
+ from __future__ import annotations
3
+
4
+ from mcp.server.fastmcp import FastMCP
5
+
6
+ from memory_boost import core, drift, lessons
7
+
8
+ mcp = FastMCP("memory")
9
+
10
+
11
+ @mcp.tool()
12
+ def memory_brief(project: str | None = None, budget: int = 1200) -> str:
13
+ """Cheap orientation (~1k tokens): wiki catalog, the project's stable context and
14
+ its latest sessions. Call it at the start of a session in harnesses without a
15
+ SessionStart hook, or to reload a project's context mid-session. `project` is a
16
+ project name or a directory path."""
17
+ return core.brief(project, budget=budget)["text"]
18
+
19
+
20
+ @mcp.tool()
21
+ def memory_recall(query: str, project: str | None = None, limit: int = 8,
22
+ include_historic: bool = False) -> str:
23
+ """Full-text search over wiki pages and log entries. Each hit is tagged
24
+ [kind | date | freshness]; current knowledge is listed before historic and
25
+ superseded. Historic hits are omitted unless include_historic=true."""
26
+ results = core.recall(query, project=project, limit=limit, include_historic=include_historic)
27
+ if not results:
28
+ return "(no results)"
29
+ lines = [f"[{r['kind']} | {r['date'] or '?'} | {r['freshness']}] {r['ref']} — {r['extract']}"
30
+ for r in results]
31
+ lines.append("\n> Read a whole section with memory_page(name, section)")
32
+ return "\n".join(lines)
33
+
34
+
35
+ @mcp.tool()
36
+ def memory_page(name: str, section: str | None = None) -> str:
37
+ """Read a wiki page by name (e.g. 'my-api'), or one section of it (a heading or
38
+ the anchor returned by memory_recall). Prefer this over reading the whole file."""
39
+ return core.get_page(name, section)
40
+
41
+
42
+ @mcp.tool()
43
+ def memory_save(project: str, action: str, detail: str | None = None, result: str = "ok",
44
+ agent: str = "mcp", pending: str | None = None) -> str:
45
+ """Record what was done in a session: one raw JSONL event plus one compiled entry
46
+ in wiki/log.md (creates the project page if it does not exist yet). `action` is a
47
+ one-line summary; `detail` a longer bullet; `pending` what is left to do.
48
+ Does not commit anything to git."""
49
+ slug = core.save(project, action, detail=detail, result=result, agent=agent, pending=pending)
50
+ return f"saved: {slug} | {action}"
51
+
52
+
53
+ @mcp.tool()
54
+ def memory_checkpoint(project: str, session_id: str, task: str, done: list[str] | None = None,
55
+ next_step: str | None = None, files: list[str] | None = None,
56
+ notes: list[str] | None = None, status: str = "active",
57
+ plan_ref: str | None = None, agent: str = "agent") -> str:
58
+ """Save this session's working state (a small JSON, no indexing) so it survives
59
+ context compaction and parallel sessions on the same project can see it. Call it
60
+ after each milestone: task = current goal (1 line), done = finished steps
61
+ (accumulated), next_step = the concrete next step, files = files touched.
62
+ session_id: the `checkpoint_session=` value injected at session start, or any
63
+ stable id. Set status=done when the session ends (after memory_save)."""
64
+ c = core.save_checkpoint(project, session_id, task, agent=agent, done=done,
65
+ next_step=next_step, files=files, notes=notes, status=status,
66
+ plan_ref=plan_ref)
67
+ return f"checkpoint: {c['project']} | {session_id} | {c['status']} | done={len(c['done'])}"
68
+
69
+
70
+ @mcp.tool()
71
+ def memory_resume(project: str, session_id: str | None = None) -> str:
72
+ """Return this session's checkpoint (if session_id is given) plus one line per
73
+ other active session on the project. Use after a compaction or when picking up
74
+ unfinished work; much cheaper than memory_recall."""
75
+ return core.resume_text(project, session_id)
76
+
77
+
78
+ @mcp.tool()
79
+ def memory_drift(project: str | None = None) -> str:
80
+ """What in the memory has drifted: decisions past review_by, superseded decisions
81
+ without a successor, project pages with no session for weeks, busy projects with no
82
+ recorded decisions, checkpoints left open. Whole wiki, or one project's findings."""
83
+ report = drift.drift_report()
84
+ if project:
85
+ lines = drift.for_project(project, n=20)
86
+ return "\n".join(lines) if lines else f"(nothing drifted for {core.norm_project(project)})"
87
+ return drift.format_report(report)
88
+
89
+
90
+ @mcp.tool()
91
+ def memory_lesson(name: str, title: str, applies_when: list[str], body: str,
92
+ learned_on: str | None = None) -> str:
93
+ """Record a lesson that should reach other projects: what worked (or failed), the
94
+ tools involved and when it applies. `applies_when` are stack/situation tags
95
+ (e.g. ["fastapi", "celery", "e2e-tests"]); projects whose page lists matching
96
+ `tags:` get this lesson in their session brief. `learned_on` = this project's slug."""
97
+ p = lessons.save_lesson(name, title, applies_when, body, learned_on=learned_on)
98
+ return f"lesson saved: {p.name} (applies_when: {', '.join(sorted(set(applies_when)))})"
99
+
100
+
101
+ def main() -> None:
102
+ mcp.run()
@@ -0,0 +1,229 @@
1
+ Metadata-Version: 2.5
2
+ Name: memory-boost
3
+ Version: 0.1.0
4
+ Summary: Memory that reviews itself: a markdown wiki for coding agents over MCP, plus drift reports on the wiki and digests of your own sessions.
5
+ Project-URL: Repository, https://github.com/arnaugonzalez/memory-boost
6
+ Project-URL: Issues, https://github.com/arnaugonzalez/memory-boost/issues
7
+ Project-URL: Changelog, https://github.com/arnaugonzalez/memory-boost/blob/main/CHANGELOG.md
8
+ Author: Arnau González
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: ai-agents,claude-code,codex,llm,mcp,memory
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: MacOS
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Software Development
19
+ Requires-Python: >=3.11
20
+ Requires-Dist: mcp<2,>=1.2
21
+ Description-Content-Type: text/markdown
22
+
23
+ <!-- mcp-name: io.github.arnaugonzalez/memory-boost -->
24
+ <h1 align="center">memory-boost</h1>
25
+
26
+ <p align="center"><em>Memory for coding agents that reviews itself.</em></p>
27
+
28
+ <p align="center">
29
+ <a href="https://github.com/arnaugonzalez/memory-boost/actions/workflows/ci.yml"><img src="https://github.com/arnaugonzalez/memory-boost/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
30
+ <img src="https://img.shields.io/badge/license-MIT-blue" alt="License: MIT">
31
+ <img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python 3.11+">
32
+ </p>
33
+
34
+ <p align="center">
35
+ <img src="docs/demo.gif" alt="memory-boost drift, mine and lessons running on the bundled example data" width="92%"><br>
36
+ <sub>drift, mine and lessons on the bundled example data · everything runs locally</sub>
37
+ </p>
38
+
39
+ <p align="center">
40
+ <a href="#try-it-in-30-seconds">Try it</a> ·
41
+ <a href="#what-it-answers">What it answers</a> ·
42
+ <a href="#connect-your-harness">Connect your agent</a> ·
43
+ <a href="#how-it-works">How it works</a> ·
44
+ <a href="#vs-alternatives">vs. alternatives</a>
45
+ </p>
46
+
47
+ **Your agents write everything down. Nobody reads it back.**
48
+
49
+ Every memory tool for coding agents helps them remember *more*. None of them mention that half of
50
+ what they remember expired in July. memory-boost keeps a plain-markdown memory your agents read
51
+ and write over MCP, and then does the unglamorous part: it audits that memory and your own
52
+ sessions, and tells you what drifted. Politely, with numbers.
53
+
54
+ Think of it as a code review for what your agents remember and a fitness tracker for how you work
55
+ with them. Mostly the fitness tracker: `mine` told me my most-failed command was `cd`. Sixty-nine
56
+ times.
57
+
58
+ ## What it answers
59
+
60
+ | You wonder… | memory-boost answers |
61
+ |---|---|
62
+ | Which decisions quietly expired while we were busy shipping? | `drift`: *review_by 2026-07-08, 78 days ago* |
63
+ | Which "active" projects actually died months ago? | `drift`: *last session 161 days ago; still listed as live* |
64
+ | We fixed this exact bug in another repo. How? | `lessons`: the fix follows you to every project with the same stack |
65
+ | Why does my agent keep re-reading the same file? | `mine`: *one file, read 18 times* |
66
+ | Is my agent spawning 20 subagents behind my back? | `mine`: yes, and in which session |
67
+ | Where was I before `/compact` ate my context? | The session-start hook puts your checkpoint back |
68
+
69
+ ## Try it in 30 seconds
70
+
71
+ No install needed; the wiki lands in `~/.local/share/memory-boost`:
72
+
73
+ ```bash
74
+ uvx memory-boost init --example # sample wiki with five kinds of rot + four synthetic transcripts
75
+ uvx memory-boost drift # what in that memory is stale, orphaned or never written down
76
+ uvx memory-boost mine # now on your real ~/.claude/projects: aggregates only
77
+ ```
78
+
79
+ To keep it in Claude Code, install the plugin. It brings the MCP server, the session-start
80
+ brief and the skills in one step; it only needs [uv](https://docs.astral.sh/uv/) on your PATH.
81
+
82
+ ```
83
+ /plugin marketplace add arnaugonzalez/memory-boost
84
+ /plugin install memory-boost@memory-boost
85
+ ```
86
+
87
+ Other agents, or the CLI on its own: `uv tool install memory-boost` (or `pipx install memory-boost`).
88
+
89
+ ## On a real machine
90
+
91
+ Five weeks of the author's own daily use: 29 decisions, 24 projects, 657 Claude Code transcripts.
92
+ Output as produced; only project and file names are replaced.
93
+
94
+ ```
95
+ $ memory-boost drift
96
+ # Drift report — 2026-09-24
97
+ 29 decisions · 24 projects · 204 log entries · 33 open checkpoints · **20 findings**
98
+
99
+ ## decision-expired (9)
100
+ - deploy-via-bastion — review_by 2026-07-08 (78 days ago); revisit or mark historic
101
+ - bot-guardrails — review_by 2026-07-08 (78 days ago); revisit or mark historic
102
+ …
103
+ ## project-no-decisions (2)
104
+ - thesis-solver — 20 sessions logged, 0 decisions tagged 'thesis-solver': the learning lives only in transcripts
105
+ ## project-silent (5)
106
+ - mood-api — last session 2026-04-16 (161 days ago); still listed as live
107
+ …
108
+
109
+ $ memory-boost mine
110
+ # Session digest — 2026-09-24
111
+ sessions 80 with ≥20 turns
112
+ tools Bash 5956 · Edit 860 · Read 692 · Write 493 · Agent 203 · ToolSearch 138
113
+ bash 5956 calls, 159 failed (2.7%); most failed: cd (69), sleep (12), ssh (9), pkill (8), ls (7)
114
+ bash/edit 4.4x; extreme: crm-wt-f11 107.5x, sandbox 70.0x, sandbox 54.0x
115
+ reads 692 calls, 131 re-reads of a file already read (19%); top: …/apply_email.py ×18
116
+ discipline 62 long sessions (≥60 turns): 47 never checkpointed, 29 never saved
117
+ subagents 203 spawned in 44 sessions; max in one session: 20
118
+ ```
119
+
120
+ Every line is a habit to change, a decision to revisit, or a rule worth writing down. None of
121
+ it needed a new tool: the data was already on disk. It needed a reader.
122
+
123
+ ## What it is
124
+
125
+ 1. **A wiki you own.** `projects/*.md`, `decisions/*.md`, `concepts/*.md`, `log.md`. Plain
126
+ markdown; edit by hand, keep it in git. SQLite FTS5 index as a disposable cache. Eight MCP
127
+ tools for any harness: `memory_brief`, `memory_recall`, `memory_page`, `memory_save`,
128
+ `memory_checkpoint`, `memory_resume`, `memory_drift`, `memory_lesson`.
129
+ 2. **Freshness as data.** Decisions carry `status:` and `review_by:`. Search results are tagged
130
+ `current / unclassified / review / historic / superseded`, current first.
131
+ 3. **Session checkpoints** that survive `/compact`, with one line per *other* active session on
132
+ the same project so parallel agents don't collide.
133
+ 4. **`drift`** reads the wiki and reports what expired, what went silent, what was never written
134
+ down and what was left half-done. The current project's top findings go into every session brief.
135
+ 5. **`mine`** reads your local Claude Code transcripts and reports tool usage, failed commands,
136
+ re-reads, subagent fan-out and checkpoint discipline. Aggregates only: no prompt, command or
137
+ file content is stored or printed, so the digest is safe to paste anywhere.
138
+ 6. **`lessons`**: `concepts/` pages with `applies_when: [tags]`. A project page that lists
139
+ matching `tags:` gets those lessons in its brief, so what worked in one repo reaches the next.
140
+ The `/retro` skill writes them at session end.
141
+
142
+ ## Connect your harness
143
+
144
+ MCP server (all harnesses): command `memory-boost`, args `["serve"]`.
145
+
146
+ | Harness | MCP registration | Context at session start |
147
+ |---|---|---|
148
+ | Claude Code (plugin) | `/plugin install memory-boost@memory-boost` | Included: hook, MCP server, skills |
149
+ | Claude Code (manual) | `claude mcp add memory -s user -- memory-boost serve` | Hook below (startup, resume, compact); `mine` reads its transcripts |
150
+ | Codex CLI | `codex mcp add memory -- memory-boost serve` | `AGENTS.md`: "call `memory_brief` first" |
151
+ | Cursor / VS Code / Gemini CLI | stdio entry in their `mcp.json` / `settings.json` | Same line in rules (hook adapters: roadmap) |
152
+
153
+ Manual Claude Code hook (`~/.claude/settings.json`), not needed with the plugin:
154
+
155
+ ```json
156
+ { "hooks": { "SessionStart": [ { "hooks": [ { "type": "command", "command": "memory-boost hook session-start" } ] } ] } }
157
+ ```
158
+
159
+ On `startup`/`resume` it injects ~1k tokens: catalog, the project's context and last sessions,
160
+ its drift, lessons from other projects, your open checkpoint. On `compact` only this session's
161
+ checkpoint. It never blocks session start: on any error it prints nothing.
162
+
163
+ Skills: `/memory-boost` (router: when to run what), `/save-session`, `/restore-session`,
164
+ `/retro`. The plugin installs them as `/memory-boost:retro` and so on; without it, copy
165
+ `skills/*` into `~/.claude/skills/`. The first session after installing the plugin takes a few
166
+ extra seconds while uv fetches the package; later sessions start in about 0.2 s.
167
+
168
+ CLI contract for agents: data on stdout, errors on stderr with a `fix:` line, `--json` on every
169
+ reading command (with a `version` field), exit 0 = trust stdout, 1 = not found, 2 = bad input.
170
+ Reports end with a `next:` line naming the exact command to run.
171
+
172
+ ## How it works
173
+
174
+ ```mermaid
175
+ flowchart LR
176
+ A[Claude Code / Codex / Cursor] -->|MCP stdio| S[memory-boost serve]
177
+ H[SessionStart hook] --> B[memory-boost hook]
178
+ S --> W[(wiki/*.md + log.md)]
179
+ S --> K[(checkpoints/*.json)]
180
+ D[memory-boost drift] --> W
181
+ D --> K
182
+ M[memory-boost mine] --> T[(~/.claude/projects/*.jsonl)]
183
+ D --> R[report + brief injection]
184
+ M --> R
185
+ W -.incremental refresh.-> I[(SQLite FTS5)]
186
+ ```
187
+
188
+ The project is resolved from the working directory name (`~/work/acme-api` → `projects/acme-api.md`);
189
+ map other names in `aliases.json`. Under 1,600 lines of Python, one dependency (`mcp`), no
190
+ embeddings, no daemon.
191
+
192
+ ## Configuration
193
+
194
+ | Variable | Default | Purpose |
195
+ |---|---|---|
196
+ | `MEMORY_BOOST_HOME` | `$XDG_DATA_HOME/memory-boost` | Wiki, events, checkpoints, `aliases.json` |
197
+ | `MEMORY_BOOST_WIKI` | `$MEMORY_BOOST_HOME/wiki` | Point at an existing wiki (e.g. a git repo) |
198
+ | `MEMORY_BOOST_INDEX` | `$XDG_CACHE_HOME/memory-boost/index-<hash>.db` | Search index |
199
+ | `MEMORY_BOOST_CHECKPOINTS` | `$MEMORY_BOOST_HOME/checkpoints` | Checkpoint directory |
200
+ | `MEMORY_BOOST_TRANSCRIPTS` | `~/.claude/projects` | Where `mine` looks (several dirs: `a:b`) |
201
+ | `MEMORY_BOOST_TODAY` | today (UTC) | Pin the date for reproducible reports |
202
+
203
+ ## vs. alternatives
204
+
205
+ | | memory-boost | [basic-memory](https://github.com/basicmachines-co/basic-memory) | [claude-mem](https://github.com/thedotmack/claude-mem) | [agent-retro](https://github.com/giannimassi/agent-retro) |
206
+ |---|---|---|---|---|
207
+ | Store | Markdown wiki you edit | Markdown | Captured observations | None (prompt skill) |
208
+ | Search | FTS5 | FTS + vectors | FTS + vectors | — |
209
+ | Freshness / review dates | Yes | No | No | — |
210
+ | Drift report over memory | Yes | No | No | No |
211
+ | Session analytics | Yes (aggregates, local) | No | No | LLM reads the conversation |
212
+ | Parallel-session awareness | Yes | No | No | — |
213
+ | License | MIT | AGPL-3.0 | Apache-2.0 | ? |
214
+
215
+ Want better search, more integrations and a community? Use basic-memory. Want everything
216
+ captured automatically? claude-mem. Use memory-boost if you want to *learn from* what your
217
+ agents already wrote down.
218
+
219
+ ## Limits / non-goals
220
+
221
+ - Keyword search only; no embeddings.
222
+ - `mine` understands Claude Code transcripts today. Codex is on the roadmap.
223
+ - Reports are as good as the wiki: an empty wiki yields an empty `drift`.
224
+ - Single user, local files. Linux and macOS; Windows untested.
225
+ - The wiki is read by your agents as instructions. Only use a wiki you trust; see [SECURITY.md](SECURITY.md).
226
+
227
+ ## License
228
+
229
+ MIT
@@ -0,0 +1,28 @@
1
+ memory_boost/__init__.py,sha256=x4SbW6W2VAjRLLAZ5V-EIvEb5yLkqljlC66g4MHnhGs,101
2
+ memory_boost/cli.py,sha256=Z158TZjAPJE9wZYB8zwPm-jcFfFZjFwVuqfT5fFsM5c,17354
3
+ memory_boost/core.py,sha256=m0NTI4xbjoMzmj0EfZiadJnYL5cN0uo18H7ha7afSdI,27980
4
+ memory_boost/drift.py,sha256=6eGmlnaHtSKuAzT4f9J_5oP2cnbSN5MHsB1UIHcnipE,7357
5
+ memory_boost/lessons.py,sha256=3wWB_azov5gpd4myOwY5apqtoU4paBix251wKeFBkC8,3452
6
+ memory_boost/mine.py,sha256=Xe_wIIYuEwvNbm6qS6zopMJGK9ZDRGgNk6l8T81mM2I,8406
7
+ memory_boost/server.py,sha256=bElZH0aaEfUDvi1CpcpchT64wS97WXrjkZ0EX2TjKIQ,5095
8
+ memory_boost/example_transcripts/-work-acme-api/0a1b2c3d-1111-4aaa-8bbb-000000000001.jsonl,sha256=LD5HvJRXIMRqfrIWmjdZdb1ctExaY0AhpEaK0_qjXBI,40158
9
+ memory_boost/example_transcripts/-work-acme-api/0a1b2c3d-3333-4aaa-8bbb-000000000003.jsonl,sha256=LIgPIaoCJX3Pl5H2OztYiT6nE_QHrWYEIzCtzcyB-1k,14199
10
+ memory_boost/example_transcripts/-work-acme-api/0a1b2c3d-4444-4aaa-8bbb-000000000004.jsonl,sha256=KaIR7U8whyGjFcj26pyrfo1VAF25Qo8dR_SUjTzPNGY,2914
11
+ memory_boost/example_transcripts/-work-pixel-notes/0a1b2c3d-2222-4aaa-8bbb-000000000002.jsonl,sha256=wdbZfBSeYzI22JX2ViNPfv-cYOScN3cbj6vbE2PTUGY,16718
12
+ memory_boost/example_wiki/log.md,sha256=lJ7M0QcHm3V1FrLk9ccadyz9TGSl4EfYNawBFhd9z10,1569
13
+ memory_boost/example_wiki/concepts/money-as-integer-cents.md,sha256=ElENsKlRweJX7tIYgNP0EhYPYOZd363CVqKbr3kdC7I,572
14
+ memory_boost/example_wiki/concepts/retry-jobs-idempotently.md,sha256=RxD23e8VDAMh-AnW4DKoF5xP_qPnachnZ_AMPGaS0lw,677
15
+ memory_boost/example_wiki/context/preferences.md,sha256=efVSlBi-ObOLIt2RR91ZrcSwfWkkV9xKuFqXRGDjmSE,145
16
+ memory_boost/example_wiki/decisions/cors-allow-all.md,sha256=0vvXvnZcx9dD1VHyIuI_zYBelnHyczchV8Ole8yyO40,278
17
+ memory_boost/example_wiki/decisions/float-money.md,sha256=auJCbLXid1uWvEF6XNLeQB4Wo2E7aZqfSD5MQGMEhK0,180
18
+ memory_boost/example_wiki/decisions/pin-postgres-15.md,sha256=WfzKqy0mz98AmoVwtTX2WphIeaOmdnKxaacsBoOu6cU,477
19
+ memory_boost/example_wiki/decisions/queue-in-postgres.md,sha256=3Lx9uu8FBWzDWS-HfmMGR0wpWdk7PZX66lwgzhubMGA,293
20
+ memory_boost/example_wiki/decisions/sessions-in-redis.md,sha256=uQ3YXi22QmOjRm_Alq9GBR8LEH8JvvpXRGD3NR6hIpA,179
21
+ memory_boost/example_wiki/projects/acme-api.md,sha256=kW_s1p8R93A5DPONfst85s7ulAAO-6qSNzXmbCpUU5w,694
22
+ memory_boost/example_wiki/projects/legacy-dashboard.md,sha256=rkVLTGeONq0oAEWn1ubR5J_m4tz8TuwM-I40i-4ggwk,311
23
+ memory_boost/example_wiki/projects/pixel-notes.md,sha256=1y8ej-vPQhC4T2YD_ARDxIq_VLSbF3k7g3WW5Ecge8I,269
24
+ memory_boost-0.1.0.dist-info/METADATA,sha256=WXaSlMg7eQMI_XdXrIsejDq9CASLeButtln92cExHLg,11374
25
+ memory_boost-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
26
+ memory_boost-0.1.0.dist-info/entry_points.txt,sha256=5_mus1iRcuFD2AFj8SHImnu4gvZlqDA4QWiW3XLcfiQ,55
27
+ memory_boost-0.1.0.dist-info/licenses/LICENSE,sha256=Oig0c4XeN86DBcOVv-Yl4ImWuWYARgDw0oxNljnRwlI,1072
28
+ memory_boost-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ memory-boost = memory_boost.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Arnau González
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.