ideagraph-live 0.5.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.
Files changed (54) hide show
  1. ideagraph_live-0.5.0/LICENSE +21 -0
  2. ideagraph_live-0.5.0/PKG-INFO +176 -0
  3. ideagraph_live-0.5.0/README.md +152 -0
  4. ideagraph_live-0.5.0/ideagraph/__init__.py +1 -0
  5. ideagraph_live-0.5.0/ideagraph/__main__.py +350 -0
  6. ideagraph_live-0.5.0/ideagraph/brain.py +503 -0
  7. ideagraph_live-0.5.0/ideagraph/brain_engine.py +351 -0
  8. ideagraph_live-0.5.0/ideagraph/decay.py +65 -0
  9. ideagraph_live-0.5.0/ideagraph/demo.py +164 -0
  10. ideagraph_live-0.5.0/ideagraph/embedder.py +79 -0
  11. ideagraph_live-0.5.0/ideagraph/engine.py +58 -0
  12. ideagraph_live-0.5.0/ideagraph/evals.py +556 -0
  13. ideagraph_live-0.5.0/ideagraph/gaps.py +206 -0
  14. ideagraph_live-0.5.0/ideagraph/hygiene.py +188 -0
  15. ideagraph_live-0.5.0/ideagraph/intent.py +202 -0
  16. ideagraph_live-0.5.0/ideagraph/merge.py +211 -0
  17. ideagraph_live-0.5.0/ideagraph/model.py +56 -0
  18. ideagraph_live-0.5.0/ideagraph/reranker.py +67 -0
  19. ideagraph_live-0.5.0/ideagraph/retrieval.py +153 -0
  20. ideagraph_live-0.5.0/ideagraph/server.py +211 -0
  21. ideagraph_live-0.5.0/ideagraph/similarity.py +42 -0
  22. ideagraph_live-0.5.0/ideagraph/store.py +63 -0
  23. ideagraph_live-0.5.0/ideagraph/suggester.py +63 -0
  24. ideagraph_live-0.5.0/ideagraph/web/app.js +574 -0
  25. ideagraph_live-0.5.0/ideagraph/web/index.html +169 -0
  26. ideagraph_live-0.5.0/ideagraph/web/review.html +104 -0
  27. ideagraph_live-0.5.0/ideagraph/web/review.js +210 -0
  28. ideagraph_live-0.5.0/ideagraph_live.egg-info/PKG-INFO +176 -0
  29. ideagraph_live-0.5.0/ideagraph_live.egg-info/SOURCES.txt +52 -0
  30. ideagraph_live-0.5.0/ideagraph_live.egg-info/dependency_links.txt +1 -0
  31. ideagraph_live-0.5.0/ideagraph_live.egg-info/entry_points.txt +2 -0
  32. ideagraph_live-0.5.0/ideagraph_live.egg-info/requires.txt +10 -0
  33. ideagraph_live-0.5.0/ideagraph_live.egg-info/top_level.txt +1 -0
  34. ideagraph_live-0.5.0/pyproject.toml +40 -0
  35. ideagraph_live-0.5.0/setup.cfg +4 -0
  36. ideagraph_live-0.5.0/tests/test_audit_fixes.py +821 -0
  37. ideagraph_live-0.5.0/tests/test_brain.py +382 -0
  38. ideagraph_live-0.5.0/tests/test_cli.py +155 -0
  39. ideagraph_live-0.5.0/tests/test_decay.py +54 -0
  40. ideagraph_live-0.5.0/tests/test_demo.py +62 -0
  41. ideagraph_live-0.5.0/tests/test_evals.py +222 -0
  42. ideagraph_live-0.5.0/tests/test_frontend_xss.py +110 -0
  43. ideagraph_live-0.5.0/tests/test_gaps.py +99 -0
  44. ideagraph_live-0.5.0/tests/test_git_mode.py +116 -0
  45. ideagraph_live-0.5.0/tests/test_graph.py +101 -0
  46. ideagraph_live-0.5.0/tests/test_hygiene.py +163 -0
  47. ideagraph_live-0.5.0/tests/test_hygiene_reports.py +100 -0
  48. ideagraph_live-0.5.0/tests/test_ig_cycle_gate.py +65 -0
  49. ideagraph_live-0.5.0/tests/test_intent.py +50 -0
  50. ideagraph_live-0.5.0/tests/test_merge.py +216 -0
  51. ideagraph_live-0.5.0/tests/test_retrieval.py +43 -0
  52. ideagraph_live-0.5.0/tests/test_server.py +48 -0
  53. ideagraph_live-0.5.0/tests/test_server_errors.py +75 -0
  54. ideagraph_live-0.5.0/tests/test_tools.py +174 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SaltKing0
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,176 @@
1
+ Metadata-Version: 2.4
2
+ Name: ideagraph-live
3
+ Version: 0.5.0
4
+ Summary: Self-growing idea graph: Ingest β†’ Embed β†’ Suggest β†’ Visualize. A generic engine for a persistent knowledge graph backed by your own private git repo (the 'brain').
5
+ Author: SaltKing0
6
+ License: MIT
7
+ Keywords: knowledge-graph,memory,agent,embeddings,rag,zettelkasten
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
11
+ Classifier: Environment :: Web Environment
12
+ Requires-Python: >=3.10
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: fastapi==0.116.0
16
+ Requires-Dist: uvicorn[standard]==0.35.0
17
+ Requires-Dist: httpx==0.28.1
18
+ Requires-Dist: numpy==2.3.1
19
+ Provides-Extra: st
20
+ Requires-Dist: sentence-transformers==5.0.0; extra == "st"
21
+ Provides-Extra: dev
22
+ Requires-Dist: pytest==8.4.0; extra == "dev"
23
+ Dynamic: license-file
24
+
25
+ # IdeaGraph Live Engine πŸ•ΈοΈ
26
+
27
+ **A self-maintaining, self-improving knowledge graph engine.**
28
+
29
+ Ingest ideas as Markdown nodes into your own private git repo (the "brain"),
30
+ let the engine embed, link, and consolidate them β€” then steer research with
31
+ coverage gaps and grow the engine itself through an eval-gated feedback loop.
32
+
33
+ ![IdeaGraph β€” demo brain in the web UI](docs/screenshot.png)
34
+
35
+ ## Quickstart
36
+
37
+ ```bash
38
+ # 1) set up the engine (Python 3.10+) β€” lightweight core, HashEmbedder works
39
+ # out of the box; add the real embedder with: pip install -e ".[st]"
40
+ python3 -m venv .venv
41
+ .venv/bin/pip install -e ".[dev]"
42
+
43
+ # 2) create a brain β€” `--demo` seeds it with an example graph
44
+ ig init --demo # 13 nodes, 19 edges, 2 pending suggestions,
45
+ # 1 island (ig status), 1 near-dup pair (ig near-dup)
46
+
47
+ # 3) see it in the web UI
48
+ uvicorn ideagraph.server:app --port 8000 # β†’ http://localhost:8000
49
+ ```
50
+
51
+ Or install straight from the repository:
52
+
53
+ ```bash
54
+ pip install git+https://github.com/SaltKing0/ideagraph-live.git
55
+ # with the real (semantic) embedder β€” pulls PyTorch:
56
+ pip install "ideagraph-live[st] @ git+https://github.com/SaltKing0/ideagraph-live.git"
57
+ ```
58
+
59
+ The web UI ships inside the package, so a pip install serves it out of the
60
+ box. Without the `[st]` extra the engine falls back to the deterministic
61
+ HashEmbedder (lower quality, zero model download) with a notice on first use.
62
+
63
+ Start from scratch instead with `ig init` (empty brain), connect a private
64
+ remote with `ig init --remote <url>`, or auto-clone an existing brain on
65
+ first use via `IG_BRAIN_REMOTE=<url>`. Every ingest is a git commit β€” the
66
+ graph grows as visible history.
67
+
68
+ ## How it works
69
+
70
+ ```
71
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” git commit+push β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” git pull β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
72
+ β”‚ your agent β”‚ ──────────────────▢ β”‚ your brain repo β”‚ ◀──────────▢ β”‚ Live Engine β”‚
73
+ │ (CLI/API) │ (knowledge) │ (private, Markdown)│ (sync) │ Ingest→Embed→ │
74
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Suggestβ†’Viz+HITL β”‚
75
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
76
+ ```
77
+
78
+ - **Nodes** β€” one Markdown file per idea (`nodes/<id>.md`, YAML frontmatter:
79
+ `type: semantic|episodic|procedural`, `status: probation|active|tombstone`)
80
+ - **Edges** β€” `edges.jsonl`, typed (`similar`, `extends`,
81
+ `contradicts`, `supersedes`, `continues`, `same_as`),
82
+ bi-temporal (`valid_from`/`valid_to`) with confidence + provenance
83
+ - **vectors.jsonl** β€” embedding cache Β· **INDEX.md** β€” generated TOC
84
+ - **Human in the loop** β€” similarity edges β‰₯ 0.95 auto-accept, the rest go
85
+ pending for review (CLI `ig pending`/`ig accept` or the web UI)
86
+
87
+ ## Connect your agent
88
+
89
+ The engine is built for agents β€” the web UI is the human side, the CLI/API is
90
+ the agent side. Any agent that can run shell commands can own a brain:
91
+
92
+ ```bash
93
+ # the agent ingests what it learns (source is logged per node)
94
+ ig ingest "User prefers short answers over long essays" --source agent
95
+ cat research-note.md | ig ingest - --source research # from stdin
96
+
97
+ # suggestions pile up in pending; the human reviews when they feel like it
98
+ ig pending # what needs a decision
99
+ ig accept <edge_id> # or in the web UI, with one click
100
+ ```
101
+
102
+ Because the brain is a git repo, the agent and the human can work from
103
+ different machines: point the brain at a private remote (`ig init --remote`)
104
+ and every ingest pulls, commits, and pushes β€” the graph syncs itself, and the
105
+ git history shows exactly what the agent learned and when.
106
+
107
+ Prefer HTTP? Run the server and `POST /api/ingest` with
108
+ `{"text": "...", "source": "agent"}` β€” same dedupe, same pending flow,
109
+ live updates in the web UI over WebSocket.
110
+
111
+ A realistic loop: the agent ingests findings as it works, `ig gaps` tells it
112
+ which topics are thin, `ig status`/`ig near-dup` flag hygiene work β€” the
113
+ self-evolving pipeline below automates exactly that cycle.
114
+
115
+ ## The self-evolving loop (`tools/`)
116
+
117
+ The engine doesn't just store knowledge β€” it improves itself, in three tiers:
118
+
119
+ 1. **Measure** (`ig_cycle`) β€” safe mechanical ingest runs (marker-scan β†’
120
+ dry-run β†’ real ingest) record per-run metrics: nodes added, islands,
121
+ duration, acceptance.
122
+ 2. **Adapt** (`ig_adapt`) β€” an adaptive controller reads the metrics and
123
+ steers the next runs: research topics with the thinnest coverage get
124
+ higher weight, batch size adapts to timeout history.
125
+ 3. **Extend** (`ig_evolve`) β€” brain research becomes engine features via
126
+ red-spec eval cases in the roadmap harness, flipped to the golden set
127
+ only after implementation (first self-extension: `IG_EDGE_CONF_FLOOR`).
128
+
129
+ ## CLI
130
+
131
+ ```bash
132
+ ig init [--remote <url>] [--demo] # create a brain (empty / connected / demo)
133
+ ig ingest "New idea ..." # ingest (duplicates are merged)
134
+ ig search "attention" # hybrid search (dense + BM25 via RRF)
135
+ ig pending / accept / reject # review edge suggestions
136
+ ig gaps [--min 10] [--json] # coverage report + under-covered areas
137
+ ig status / near-dup # hygiene: islands, orphans, near-dup pairs
138
+ ig merge <survivor> <deletee> # consolidate a near-duplicate pair
139
+ ```
140
+
141
+ ## Configuration
142
+
143
+ | Variable | Default | Meaning |
144
+ |---|---|---|
145
+ | `IG_BRAIN_PATH` | `~/ideagraph-brain` | path to the brain clone |
146
+ | `IG_BRAIN_REMOTE` | *(none)* | remote brain URL β€” auto-clones on first use |
147
+ | `IG_BRAIN_MODE` | `git` | `local` = filesystem only (tests) |
148
+ | `IDEAGRAPH_EMBEDDER` | `st` | `hash` = deterministic test embedder |
149
+ | `IDEAGRAPH_AUTO_ACCEPT` | off | `1` = auto-accept all suggested edges |
150
+ | `IDEAGRAPH_INTENT_PENDING` | off | `1` = intent edges become pending (HITL) |
151
+ | `IDEAGRAPH_RERANKER` | none | optional cross-encoder rerank pass |
152
+ | `IG_BOT_NAME` / `IG_BOT_EMAIL` | ideagraph-bot | git commit author |
153
+
154
+ Dedupe: near-duplicate ingests (cosine β‰₯ 0.92) merge into the existing node
155
+ (`sources:` provenance); opt out with `allow_duplicates: true`.
156
+
157
+ ## Tests
158
+
159
+ ```bash
160
+ .venv/bin/python -m pytest tests/ -q # 233 tests
161
+ ```
162
+
163
+ ## Status
164
+
165
+ Core features, the hygiene loop, and the self-evolving pipeline are
166
+ implemented; release `v0.5.0` is published β€” see
167
+ [CHANGELOG.md](CHANGELOG.md).
168
+
169
+ ## Open source / privacy
170
+
171
+ The **engine is generic** (this public repo) β€” the **brain is your private
172
+ repo** with your data. The engine contains no brain data.
173
+
174
+ ## License
175
+
176
+ MIT β€” see `LICENSE`.
@@ -0,0 +1,152 @@
1
+ # IdeaGraph Live Engine πŸ•ΈοΈ
2
+
3
+ **A self-maintaining, self-improving knowledge graph engine.**
4
+
5
+ Ingest ideas as Markdown nodes into your own private git repo (the "brain"),
6
+ let the engine embed, link, and consolidate them β€” then steer research with
7
+ coverage gaps and grow the engine itself through an eval-gated feedback loop.
8
+
9
+ ![IdeaGraph β€” demo brain in the web UI](docs/screenshot.png)
10
+
11
+ ## Quickstart
12
+
13
+ ```bash
14
+ # 1) set up the engine (Python 3.10+) β€” lightweight core, HashEmbedder works
15
+ # out of the box; add the real embedder with: pip install -e ".[st]"
16
+ python3 -m venv .venv
17
+ .venv/bin/pip install -e ".[dev]"
18
+
19
+ # 2) create a brain β€” `--demo` seeds it with an example graph
20
+ ig init --demo # 13 nodes, 19 edges, 2 pending suggestions,
21
+ # 1 island (ig status), 1 near-dup pair (ig near-dup)
22
+
23
+ # 3) see it in the web UI
24
+ uvicorn ideagraph.server:app --port 8000 # β†’ http://localhost:8000
25
+ ```
26
+
27
+ Or install straight from the repository:
28
+
29
+ ```bash
30
+ pip install git+https://github.com/SaltKing0/ideagraph-live.git
31
+ # with the real (semantic) embedder β€” pulls PyTorch:
32
+ pip install "ideagraph-live[st] @ git+https://github.com/SaltKing0/ideagraph-live.git"
33
+ ```
34
+
35
+ The web UI ships inside the package, so a pip install serves it out of the
36
+ box. Without the `[st]` extra the engine falls back to the deterministic
37
+ HashEmbedder (lower quality, zero model download) with a notice on first use.
38
+
39
+ Start from scratch instead with `ig init` (empty brain), connect a private
40
+ remote with `ig init --remote <url>`, or auto-clone an existing brain on
41
+ first use via `IG_BRAIN_REMOTE=<url>`. Every ingest is a git commit β€” the
42
+ graph grows as visible history.
43
+
44
+ ## How it works
45
+
46
+ ```
47
+ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” git commit+push β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” git pull β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
48
+ β”‚ your agent β”‚ ──────────────────▢ β”‚ your brain repo β”‚ ◀──────────▢ β”‚ Live Engine β”‚
49
+ │ (CLI/API) │ (knowledge) │ (private, Markdown)│ (sync) │ Ingest→Embed→ │
50
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Suggestβ†’Viz+HITL β”‚
51
+ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
52
+ ```
53
+
54
+ - **Nodes** β€” one Markdown file per idea (`nodes/<id>.md`, YAML frontmatter:
55
+ `type: semantic|episodic|procedural`, `status: probation|active|tombstone`)
56
+ - **Edges** β€” `edges.jsonl`, typed (`similar`, `extends`,
57
+ `contradicts`, `supersedes`, `continues`, `same_as`),
58
+ bi-temporal (`valid_from`/`valid_to`) with confidence + provenance
59
+ - **vectors.jsonl** β€” embedding cache Β· **INDEX.md** β€” generated TOC
60
+ - **Human in the loop** β€” similarity edges β‰₯ 0.95 auto-accept, the rest go
61
+ pending for review (CLI `ig pending`/`ig accept` or the web UI)
62
+
63
+ ## Connect your agent
64
+
65
+ The engine is built for agents β€” the web UI is the human side, the CLI/API is
66
+ the agent side. Any agent that can run shell commands can own a brain:
67
+
68
+ ```bash
69
+ # the agent ingests what it learns (source is logged per node)
70
+ ig ingest "User prefers short answers over long essays" --source agent
71
+ cat research-note.md | ig ingest - --source research # from stdin
72
+
73
+ # suggestions pile up in pending; the human reviews when they feel like it
74
+ ig pending # what needs a decision
75
+ ig accept <edge_id> # or in the web UI, with one click
76
+ ```
77
+
78
+ Because the brain is a git repo, the agent and the human can work from
79
+ different machines: point the brain at a private remote (`ig init --remote`)
80
+ and every ingest pulls, commits, and pushes β€” the graph syncs itself, and the
81
+ git history shows exactly what the agent learned and when.
82
+
83
+ Prefer HTTP? Run the server and `POST /api/ingest` with
84
+ `{"text": "...", "source": "agent"}` β€” same dedupe, same pending flow,
85
+ live updates in the web UI over WebSocket.
86
+
87
+ A realistic loop: the agent ingests findings as it works, `ig gaps` tells it
88
+ which topics are thin, `ig status`/`ig near-dup` flag hygiene work β€” the
89
+ self-evolving pipeline below automates exactly that cycle.
90
+
91
+ ## The self-evolving loop (`tools/`)
92
+
93
+ The engine doesn't just store knowledge β€” it improves itself, in three tiers:
94
+
95
+ 1. **Measure** (`ig_cycle`) β€” safe mechanical ingest runs (marker-scan β†’
96
+ dry-run β†’ real ingest) record per-run metrics: nodes added, islands,
97
+ duration, acceptance.
98
+ 2. **Adapt** (`ig_adapt`) β€” an adaptive controller reads the metrics and
99
+ steers the next runs: research topics with the thinnest coverage get
100
+ higher weight, batch size adapts to timeout history.
101
+ 3. **Extend** (`ig_evolve`) β€” brain research becomes engine features via
102
+ red-spec eval cases in the roadmap harness, flipped to the golden set
103
+ only after implementation (first self-extension: `IG_EDGE_CONF_FLOOR`).
104
+
105
+ ## CLI
106
+
107
+ ```bash
108
+ ig init [--remote <url>] [--demo] # create a brain (empty / connected / demo)
109
+ ig ingest "New idea ..." # ingest (duplicates are merged)
110
+ ig search "attention" # hybrid search (dense + BM25 via RRF)
111
+ ig pending / accept / reject # review edge suggestions
112
+ ig gaps [--min 10] [--json] # coverage report + under-covered areas
113
+ ig status / near-dup # hygiene: islands, orphans, near-dup pairs
114
+ ig merge <survivor> <deletee> # consolidate a near-duplicate pair
115
+ ```
116
+
117
+ ## Configuration
118
+
119
+ | Variable | Default | Meaning |
120
+ |---|---|---|
121
+ | `IG_BRAIN_PATH` | `~/ideagraph-brain` | path to the brain clone |
122
+ | `IG_BRAIN_REMOTE` | *(none)* | remote brain URL β€” auto-clones on first use |
123
+ | `IG_BRAIN_MODE` | `git` | `local` = filesystem only (tests) |
124
+ | `IDEAGRAPH_EMBEDDER` | `st` | `hash` = deterministic test embedder |
125
+ | `IDEAGRAPH_AUTO_ACCEPT` | off | `1` = auto-accept all suggested edges |
126
+ | `IDEAGRAPH_INTENT_PENDING` | off | `1` = intent edges become pending (HITL) |
127
+ | `IDEAGRAPH_RERANKER` | none | optional cross-encoder rerank pass |
128
+ | `IG_BOT_NAME` / `IG_BOT_EMAIL` | ideagraph-bot | git commit author |
129
+
130
+ Dedupe: near-duplicate ingests (cosine β‰₯ 0.92) merge into the existing node
131
+ (`sources:` provenance); opt out with `allow_duplicates: true`.
132
+
133
+ ## Tests
134
+
135
+ ```bash
136
+ .venv/bin/python -m pytest tests/ -q # 233 tests
137
+ ```
138
+
139
+ ## Status
140
+
141
+ Core features, the hygiene loop, and the self-evolving pipeline are
142
+ implemented; release `v0.5.0` is published β€” see
143
+ [CHANGELOG.md](CHANGELOG.md).
144
+
145
+ ## Open source / privacy
146
+
147
+ The **engine is generic** (this public repo) β€” the **brain is your private
148
+ repo** with your data. The engine contains no brain data.
149
+
150
+ ## License
151
+
152
+ MIT β€” see `LICENSE`.
@@ -0,0 +1 @@
1
+ """IdeaGraph Live Engine."""