forge-me-notes 0.1.0__tar.gz
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.
- forge_me_notes-0.1.0/LICENSE +21 -0
- forge_me_notes-0.1.0/PKG-INFO +213 -0
- forge_me_notes-0.1.0/README.md +187 -0
- forge_me_notes-0.1.0/fmn/__init__.py +2 -0
- forge_me_notes-0.1.0/fmn/audit.py +826 -0
- forge_me_notes-0.1.0/fmn/cli.py +198 -0
- forge_me_notes-0.1.0/fmn/config.py +53 -0
- forge_me_notes-0.1.0/fmn/cost.py +128 -0
- forge_me_notes-0.1.0/fmn/generate.py +328 -0
- forge_me_notes-0.1.0/fmn/pack.py +134 -0
- forge_me_notes-0.1.0/fmn/run.py +133 -0
- forge_me_notes-0.1.0/fmn/vault_config.py +261 -0
- forge_me_notes-0.1.0/fmn/write.py +98 -0
- forge_me_notes-0.1.0/forge_me_notes.egg-info/PKG-INFO +213 -0
- forge_me_notes-0.1.0/forge_me_notes.egg-info/SOURCES.txt +21 -0
- forge_me_notes-0.1.0/forge_me_notes.egg-info/dependency_links.txt +1 -0
- forge_me_notes-0.1.0/forge_me_notes.egg-info/entry_points.txt +2 -0
- forge_me_notes-0.1.0/forge_me_notes.egg-info/requires.txt +15 -0
- forge_me_notes-0.1.0/forge_me_notes.egg-info/top_level.txt +1 -0
- forge_me_notes-0.1.0/pyproject.toml +53 -0
- forge_me_notes-0.1.0/setup.cfg +4 -0
- forge_me_notes-0.1.0/tests/test_audit.py +567 -0
- forge_me_notes-0.1.0/tests/test_vault_config.py +231 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenMash contributors
|
|
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.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: forge-me-notes
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Build and maintain Obsidian knowledge bases with LLM assistance
|
|
5
|
+
Author: OpenMash contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://codeberg.org/DenvaDude/forge-me-notes
|
|
8
|
+
Project-URL: Repository, https://codeberg.org/DenvaDude/forge-me-notes
|
|
9
|
+
Project-URL: Issues, https://codeberg.org/DenvaDude/forge-me-notes/issues
|
|
10
|
+
Requires-Python: >=3.10
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: pyyaml>=6.0
|
|
14
|
+
Requires-Dist: python-frontmatter>=1.0.0
|
|
15
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
16
|
+
Requires-Dist: anthropic>=0.25.0
|
|
17
|
+
Provides-Extra: openai
|
|
18
|
+
Requires-Dist: openai>=1.0.0; extra == "openai"
|
|
19
|
+
Provides-Extra: ollama
|
|
20
|
+
Requires-Dist: requests>=2.31.0; extra == "ollama"
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
23
|
+
Requires-Dist: black>=24.0; extra == "dev"
|
|
24
|
+
Requires-Dist: ruff>=0.4; extra == "dev"
|
|
25
|
+
Dynamic: license-file
|
|
26
|
+
|
|
27
|
+
# forge-me-notes
|
|
28
|
+
|
|
29
|
+
> 🇩🇪 [Deutsche Version](README.de.md)
|
|
30
|
+
|
|
31
|
+
**fmn** is a command-line tool for building and maintaining structured [Obsidian](https://obsidian.md) vaults with LLM assistance.
|
|
32
|
+
|
|
33
|
+
Use it for anything you want to develop as structured, connected knowledge: business planning, research, civic data projects, hobby projects, home renovation. You describe what you want in plain English — fmn handles the context, the LLM call, and the note writing.
|
|
34
|
+
|
|
35
|
+
> *The LLM doesn't write the knowledge. It writes the YAML. The knowledge comes from you.*
|
|
36
|
+
|
|
37
|
+
Works with any consistently structured Obsidian vault. The [OpenMash vault](https://codeberg.org/DenvaDude/openmash) is one example — a civic open data toolkit built with fmn.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## How it works
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Your vault → fmn pack → context snapshot
|
|
45
|
+
context snapshot + your request → fmn generate → input/notes.yaml
|
|
46
|
+
review input/notes.yaml → fmn write → new notes in your vault
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Or all at once:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
fmn run "Add 3 use cases for air quality monitoring" --provider anthropic
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The LLM never writes directly to your vault. `fmn generate` produces an intermediate `input/notes.yaml` that you review before `fmn write` touches anything.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Who is this for?
|
|
60
|
+
|
|
61
|
+
- **Anyone** who maintains a structured Obsidian vault and wants LLM help expanding it
|
|
62
|
+
- **Civic technologists and researchers** building open data knowledge bases
|
|
63
|
+
- **NGOs and community groups** mapping datasets, user groups, or use cases
|
|
64
|
+
- **Developers** who want a scriptable vault generation pipeline
|
|
65
|
+
|
|
66
|
+
You do not need to be a programmer. If you can run a terminal command, you can use fmn.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Installation
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
pipx install forge-me-notes
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
> No `pipx`? Run `pip install pipx && pipx ensurepath` first, or see [pipx.pypa.io](https://pipx.pypa.io).
|
|
77
|
+
> Alternatively: `pip install forge-me-notes`
|
|
78
|
+
|
|
79
|
+
Set your vault path:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
export VAULT_PATH=/path/to/your/vault
|
|
83
|
+
# or pass it per command:
|
|
84
|
+
fmn --vault /path/to/your/vault pack
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Quick start
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
fmn pack # snapshot your vault
|
|
93
|
+
fmn generate "Add 3 notes about Nordic city cycling policy" # LLM → input/notes.yaml
|
|
94
|
+
fmn write # review passed → write notes
|
|
95
|
+
|
|
96
|
+
# Or all at once:
|
|
97
|
+
fmn run "Add 3 notes about Nordic city cycling policy" --provider anthropic
|
|
98
|
+
|
|
99
|
+
# Check vault health:
|
|
100
|
+
fmn audit
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Commands
|
|
106
|
+
|
|
107
|
+
| Command | What it does |
|
|
108
|
+
|--------|--------------|
|
|
109
|
+
| `fmn pack` | Scans your vault → exports context snapshot to `context/` |
|
|
110
|
+
| `fmn write` | Reads `input/notes.yaml` → writes notes into the vault |
|
|
111
|
+
| `fmn generate "request"` | Context + request → LLM → produces `input/notes.yaml` |
|
|
112
|
+
| `fmn run "request"` | Pack + generate + confirm + write in one step |
|
|
113
|
+
| `fmn audit` | Checks vault health: broken links, orphans, missing properties |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## LLM providers
|
|
118
|
+
|
|
119
|
+
No API key? Use `--provider manual` — fmn prints the full prompt and you paste it into any chat interface yourself.
|
|
120
|
+
|
|
121
|
+
| Provider | Flag | Requires |
|
|
122
|
+
|----------|------|----------|
|
|
123
|
+
| Anthropic (Claude) | `--provider anthropic` | `ANTHROPIC_API_KEY` |
|
|
124
|
+
| OpenAI (GPT-4o) | `--provider openai` | `OPENAI_API_KEY` |
|
|
125
|
+
| Ollama (local) | `--provider ollama` | [Ollama](https://ollama.com) running locally — free |
|
|
126
|
+
| Manual (any chat UI) | `--provider manual` | Nothing |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Command reference
|
|
131
|
+
|
|
132
|
+
### `fmn pack`
|
|
133
|
+
```bash
|
|
134
|
+
fmn pack # snapshot index + metadata
|
|
135
|
+
fmn pack --notes # also include full note bodies
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### `fmn generate "request"`
|
|
139
|
+
```bash
|
|
140
|
+
fmn generate "Add a user group note for Roma communities" --provider ollama --model mistral
|
|
141
|
+
fmn generate "Add 3 inspiration notes about Nordic cities" --provider manual
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### `fmn write`
|
|
145
|
+
```bash
|
|
146
|
+
fmn write # write notes from input/notes.yaml
|
|
147
|
+
fmn write --force # overwrite existing notes
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### `fmn run "request"`
|
|
151
|
+
```bash
|
|
152
|
+
fmn run "Update all use cases to reference my new Vienna datasets" --force
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### `fmn audit`
|
|
156
|
+
```bash
|
|
157
|
+
fmn audit # summary (capped at 5 per category)
|
|
158
|
+
fmn audit --verbose # show all issues
|
|
159
|
+
fmn audit --fix # auto-repair broken links with near-matches
|
|
160
|
+
fmn audit --report # save report as a timestamped vault note
|
|
161
|
+
fmn audit --trend # show audit history from .fmn/history.yaml
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Project structure
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
forge-me-notes/
|
|
170
|
+
├── fmn/
|
|
171
|
+
│ ├── cli.py # entry point
|
|
172
|
+
│ ├── pack.py # vault scanner
|
|
173
|
+
│ ├── generate.py # LLM interface
|
|
174
|
+
│ ├── write.py # note writer
|
|
175
|
+
│ ├── audit.py # vault health checker
|
|
176
|
+
│ └── run.py # orchestrator
|
|
177
|
+
├── input/notes.yaml # generated note specs — review before fmn write
|
|
178
|
+
├── context/all.md # vault context snapshot
|
|
179
|
+
├── prompts/system_prompt.md
|
|
180
|
+
└── tests/
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Example vault: OpenMash
|
|
186
|
+
|
|
187
|
+
[OpenMash](https://codeberg.org/DenvaDude/openmash) is a civic open data toolkit built with fmn — a structured Obsidian vault for mapping datasets, user groups, barriers, and use cases for any city. It ships with a Karlsruhe example and a full workshop facilitation kit.
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
git clone https://codeberg.org/DenvaDude/openmash
|
|
191
|
+
cd openmash/openmash-vault
|
|
192
|
+
export VAULT_PATH=$(pwd)
|
|
193
|
+
fmn audit
|
|
194
|
+
fmn run "Add 3 use cases for cycling infrastructure" --provider anthropic
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Contributing
|
|
200
|
+
|
|
201
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). See [DECISIONS.md](DECISIONS.md) for the reasoning behind key design choices.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Changelog
|
|
206
|
+
|
|
207
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## License
|
|
212
|
+
|
|
213
|
+
MIT © 2026 OpenMash contributors
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# forge-me-notes
|
|
2
|
+
|
|
3
|
+
> 🇩🇪 [Deutsche Version](README.de.md)
|
|
4
|
+
|
|
5
|
+
**fmn** is a command-line tool for building and maintaining structured [Obsidian](https://obsidian.md) vaults with LLM assistance.
|
|
6
|
+
|
|
7
|
+
Use it for anything you want to develop as structured, connected knowledge: business planning, research, civic data projects, hobby projects, home renovation. You describe what you want in plain English — fmn handles the context, the LLM call, and the note writing.
|
|
8
|
+
|
|
9
|
+
> *The LLM doesn't write the knowledge. It writes the YAML. The knowledge comes from you.*
|
|
10
|
+
|
|
11
|
+
Works with any consistently structured Obsidian vault. The [OpenMash vault](https://codeberg.org/DenvaDude/openmash) is one example — a civic open data toolkit built with fmn.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## How it works
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Your vault → fmn pack → context snapshot
|
|
19
|
+
context snapshot + your request → fmn generate → input/notes.yaml
|
|
20
|
+
review input/notes.yaml → fmn write → new notes in your vault
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Or all at once:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
fmn run "Add 3 use cases for air quality monitoring" --provider anthropic
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The LLM never writes directly to your vault. `fmn generate` produces an intermediate `input/notes.yaml` that you review before `fmn write` touches anything.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Who is this for?
|
|
34
|
+
|
|
35
|
+
- **Anyone** who maintains a structured Obsidian vault and wants LLM help expanding it
|
|
36
|
+
- **Civic technologists and researchers** building open data knowledge bases
|
|
37
|
+
- **NGOs and community groups** mapping datasets, user groups, or use cases
|
|
38
|
+
- **Developers** who want a scriptable vault generation pipeline
|
|
39
|
+
|
|
40
|
+
You do not need to be a programmer. If you can run a terminal command, you can use fmn.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Installation
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pipx install forge-me-notes
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
> No `pipx`? Run `pip install pipx && pipx ensurepath` first, or see [pipx.pypa.io](https://pipx.pypa.io).
|
|
51
|
+
> Alternatively: `pip install forge-me-notes`
|
|
52
|
+
|
|
53
|
+
Set your vault path:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
export VAULT_PATH=/path/to/your/vault
|
|
57
|
+
# or pass it per command:
|
|
58
|
+
fmn --vault /path/to/your/vault pack
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Quick start
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
fmn pack # snapshot your vault
|
|
67
|
+
fmn generate "Add 3 notes about Nordic city cycling policy" # LLM → input/notes.yaml
|
|
68
|
+
fmn write # review passed → write notes
|
|
69
|
+
|
|
70
|
+
# Or all at once:
|
|
71
|
+
fmn run "Add 3 notes about Nordic city cycling policy" --provider anthropic
|
|
72
|
+
|
|
73
|
+
# Check vault health:
|
|
74
|
+
fmn audit
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Commands
|
|
80
|
+
|
|
81
|
+
| Command | What it does |
|
|
82
|
+
|--------|--------------|
|
|
83
|
+
| `fmn pack` | Scans your vault → exports context snapshot to `context/` |
|
|
84
|
+
| `fmn write` | Reads `input/notes.yaml` → writes notes into the vault |
|
|
85
|
+
| `fmn generate "request"` | Context + request → LLM → produces `input/notes.yaml` |
|
|
86
|
+
| `fmn run "request"` | Pack + generate + confirm + write in one step |
|
|
87
|
+
| `fmn audit` | Checks vault health: broken links, orphans, missing properties |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## LLM providers
|
|
92
|
+
|
|
93
|
+
No API key? Use `--provider manual` — fmn prints the full prompt and you paste it into any chat interface yourself.
|
|
94
|
+
|
|
95
|
+
| Provider | Flag | Requires |
|
|
96
|
+
|----------|------|----------|
|
|
97
|
+
| Anthropic (Claude) | `--provider anthropic` | `ANTHROPIC_API_KEY` |
|
|
98
|
+
| OpenAI (GPT-4o) | `--provider openai` | `OPENAI_API_KEY` |
|
|
99
|
+
| Ollama (local) | `--provider ollama` | [Ollama](https://ollama.com) running locally — free |
|
|
100
|
+
| Manual (any chat UI) | `--provider manual` | Nothing |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Command reference
|
|
105
|
+
|
|
106
|
+
### `fmn pack`
|
|
107
|
+
```bash
|
|
108
|
+
fmn pack # snapshot index + metadata
|
|
109
|
+
fmn pack --notes # also include full note bodies
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### `fmn generate "request"`
|
|
113
|
+
```bash
|
|
114
|
+
fmn generate "Add a user group note for Roma communities" --provider ollama --model mistral
|
|
115
|
+
fmn generate "Add 3 inspiration notes about Nordic cities" --provider manual
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### `fmn write`
|
|
119
|
+
```bash
|
|
120
|
+
fmn write # write notes from input/notes.yaml
|
|
121
|
+
fmn write --force # overwrite existing notes
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### `fmn run "request"`
|
|
125
|
+
```bash
|
|
126
|
+
fmn run "Update all use cases to reference my new Vienna datasets" --force
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### `fmn audit`
|
|
130
|
+
```bash
|
|
131
|
+
fmn audit # summary (capped at 5 per category)
|
|
132
|
+
fmn audit --verbose # show all issues
|
|
133
|
+
fmn audit --fix # auto-repair broken links with near-matches
|
|
134
|
+
fmn audit --report # save report as a timestamped vault note
|
|
135
|
+
fmn audit --trend # show audit history from .fmn/history.yaml
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Project structure
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
forge-me-notes/
|
|
144
|
+
├── fmn/
|
|
145
|
+
│ ├── cli.py # entry point
|
|
146
|
+
│ ├── pack.py # vault scanner
|
|
147
|
+
│ ├── generate.py # LLM interface
|
|
148
|
+
│ ├── write.py # note writer
|
|
149
|
+
│ ├── audit.py # vault health checker
|
|
150
|
+
│ └── run.py # orchestrator
|
|
151
|
+
├── input/notes.yaml # generated note specs — review before fmn write
|
|
152
|
+
├── context/all.md # vault context snapshot
|
|
153
|
+
├── prompts/system_prompt.md
|
|
154
|
+
└── tests/
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Example vault: OpenMash
|
|
160
|
+
|
|
161
|
+
[OpenMash](https://codeberg.org/DenvaDude/openmash) is a civic open data toolkit built with fmn — a structured Obsidian vault for mapping datasets, user groups, barriers, and use cases for any city. It ships with a Karlsruhe example and a full workshop facilitation kit.
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
git clone https://codeberg.org/DenvaDude/openmash
|
|
165
|
+
cd openmash/openmash-vault
|
|
166
|
+
export VAULT_PATH=$(pwd)
|
|
167
|
+
fmn audit
|
|
168
|
+
fmn run "Add 3 use cases for cycling infrastructure" --provider anthropic
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Contributing
|
|
174
|
+
|
|
175
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md). See [DECISIONS.md](DECISIONS.md) for the reasoning behind key design choices.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Changelog
|
|
180
|
+
|
|
181
|
+
See [CHANGELOG.md](CHANGELOG.md).
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## License
|
|
186
|
+
|
|
187
|
+
MIT © 2026 OpenMash contributors
|