koobi 0.0.1__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.
koobi-0.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 blu3c0ral
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.
koobi-0.0.1/PKG-INFO ADDED
@@ -0,0 +1,235 @@
1
+ Metadata-Version: 2.4
2
+ Name: koobi
3
+ Version: 0.0.1
4
+ Summary: File-native model and experiment registry
5
+ Author-email: blu3c0ral <blu3c0ral@protonmail.ch>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/blu3c0ral/koobi
8
+ Project-URL: Repository, https://github.com/blu3c0ral/koobi
9
+ Project-URL: Issues, https://github.com/blu3c0ral/koobi/issues
10
+ Keywords: experiment-tracking,model-registry,marimo,duckdb,markdown
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Topic :: Scientific/Engineering
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: altair
24
+ Requires-Dist: duckdb
25
+ Requires-Dist: marimo
26
+ Requires-Dist: pandas
27
+ Requires-Dist: pyarrow
28
+ Requires-Dist: python-frontmatter
29
+ Requires-Dist: tomli; python_version < "3.11"
30
+ Provides-Extra: dev
31
+ Requires-Dist: pytest; extra == "dev"
32
+ Dynamic: license-file
33
+
34
+ # Koobi
35
+
36
+ <p align="center">
37
+ <img src=".github/assets/koobi_icon.png" alt="Koobi project icon" width="180" />
38
+ </p>
39
+
40
+ File-native model and experiment registry for local workflows.
41
+
42
+ Koobi stores experiment metadata as plain Markdown cards, builds a disposable DuckDB index, and serves an interactive Marimo UI for browsing, filtering, visualizing, and editing cards. The source of truth is always your files.
43
+
44
+ ## Why Koobi
45
+
46
+ Most experiment trackers assume a hosted service and database-backed runs. Koobi is designed for local-first users who want:
47
+
48
+ - readable, versionable records in Git
49
+ - zero-server operation
50
+ - domain-agnostic metrics and parameters
51
+ - workflows friendly to both humans and coding agents
52
+
53
+ ## Current MVP Capabilities
54
+
55
+ - Markdown card parsing and serialization with preserved body/key ordering
56
+ - additive card updates (only targeted fields are rewritten)
57
+ - DuckDB index build with:
58
+ - `cards` table (metadata + body)
59
+ - `measures` table (long-format metrics)
60
+ - `series_registry` table (series pointers)
61
+ - Marimo app with:
62
+ - project/status/search filters
63
+ - model table view
64
+ - card detail view (metrics/params/tags/body)
65
+ - edit form (name/status/tags/body) with write-back
66
+ - one measure bar chart
67
+ - CLI commands:
68
+ - `koobi init`
69
+ - `koobi new`
70
+ - `koobi index`
71
+ - `koobi ui`
72
+
73
+ ## Architecture Overview
74
+
75
+ ```text
76
+ cards/*.md --> index.duckdb --> Marimo app
77
+ ^ |
78
+ |---------- edit/write-back -------|
79
+ ```
80
+
81
+ - Cards are authoritative.
82
+ - Index is derived and disposable.
83
+ - UI reads from index and writes edits back to cards.
84
+
85
+ ## Installation
86
+
87
+ Install into any project or environment directly from Git:
88
+
89
+ ```bash
90
+ pip install git+https://github.com/blu3c0ral/koobi.git
91
+ ```
92
+
93
+ This installs the `koobi` command and the importable `koobi` package.
94
+
95
+ For local development on Koobi itself, install editable with dev extras:
96
+
97
+ ```bash
98
+ python3 -m venv .venv
99
+ source .venv/bin/activate
100
+ python -m pip install -e ".[dev]"
101
+ ```
102
+
103
+ ## Quickstart
104
+
105
+ Koobi discovers its configuration automatically: every command searches the
106
+ current directory and its parents for a `koobi.toml`. Work from inside your
107
+ workspace and no `--config` flag is needed.
108
+
109
+ ### 1) Create (or enter) a workspace
110
+
111
+ ```bash
112
+ koobi init --path my-registry
113
+ cd my-registry
114
+ ```
115
+
116
+ Or use the bundled demo workspace:
117
+
118
+ ```bash
119
+ python examples/local_example_to_cards.py --overwrite
120
+ cd examples/local
121
+ ```
122
+
123
+ ### 2) Build the index
124
+
125
+ ```bash
126
+ koobi index
127
+ ```
128
+
129
+ ### 3) Launch the UI
130
+
131
+ ```bash
132
+ koobi ui
133
+ ```
134
+
135
+ The UI opens at http://localhost:2718.
136
+
137
+ ### Running from outside the workspace
138
+
139
+ If you prefer not to `cd`, point Koobi at the config explicitly or via an
140
+ environment variable (precedence: `--config` > `KOOBI_CONFIG` > current dir):
141
+
142
+ ```bash
143
+ koobi ui --config examples/local/koobi.toml
144
+ # or
145
+ export KOOBI_CONFIG=examples/local/koobi.toml
146
+ koobi ui
147
+ ```
148
+
149
+ ## CLI Reference
150
+
151
+ Initialize a new workspace:
152
+
153
+ ```bash
154
+ koobi init --path /path/to/workspace
155
+ ```
156
+
157
+ Create a new card (run from inside the workspace):
158
+
159
+ ```bash
160
+ koobi new demo_project.my_model
161
+ ```
162
+
163
+ Rebuild index:
164
+
165
+ ```bash
166
+ koobi index
167
+ ```
168
+
169
+ Run UI:
170
+
171
+ ```bash
172
+ koobi ui
173
+ ```
174
+
175
+ ## Use as a Library
176
+
177
+ Koobi's core is importable, so other projects and coding agents can read,
178
+ query, and write cards programmatically:
179
+
180
+ ```python
181
+ from koobi import load_config, build, connect, query_cards
182
+ from koobi import Card, load_card, save_card
183
+
184
+ # Resolve config by searching upward from a path (file or directory)
185
+ cfg = load_config("path/to/workspace")
186
+
187
+ # Build the disposable DuckDB index from the Markdown cards
188
+ build(cfg)
189
+
190
+ # Query cards joined with wide-format measures
191
+ con = connect(cfg)
192
+ df = query_cards(con, project="demo_project", status="active")
193
+
194
+ # Read, mutate, and write back a single card (only targeted fields change)
195
+ card = load_card("path/to/workspace/cards/demo_project.my_model.md")
196
+ card.status = "shipped"
197
+ save_card(card, fields=["status"])
198
+ ```
199
+
200
+ The full public API is exported from the top-level `koobi` package; see
201
+ `koobi.__all__`.
202
+
203
+ ## Repository Layout
204
+
205
+ ```text
206
+ src/koobi/ # core package (schema, cards, config, index, charts, app, cli)
207
+ tests/ # unit tests
208
+ examples/local/ # self-contained demo workspace
209
+ examples/local_example_to_cards.py
210
+ docs/ # product, technical, and future feature docs
211
+ ```
212
+
213
+ ## Development
214
+
215
+ Run tests:
216
+
217
+ ```bash
218
+ pytest
219
+ ```
220
+
221
+ Recommended pre-PR checklist:
222
+
223
+ - run `pytest`
224
+ - regenerate local example cards if example inputs changed
225
+ - verify `koobi index` and `koobi ui` against `examples/local/koobi.toml`
226
+
227
+ ## Documentation
228
+
229
+ - [`docs/product_design.md`](docs/product_design.md) - product framing and roadmap
230
+ - [`docs/technical_design.md`](docs/technical_design.md) - architecture and data contracts
231
+ - [`docs/future_features.md`](docs/future_features.md) - planned automation and extensions
232
+
233
+ ## Status
234
+
235
+ Active MVP implementation with local example workflow included. Phase 0 focus is stability of file contracts, indexing, and interactive editing.
koobi-0.0.1/README.md ADDED
@@ -0,0 +1,202 @@
1
+ # Koobi
2
+
3
+ <p align="center">
4
+ <img src=".github/assets/koobi_icon.png" alt="Koobi project icon" width="180" />
5
+ </p>
6
+
7
+ File-native model and experiment registry for local workflows.
8
+
9
+ Koobi stores experiment metadata as plain Markdown cards, builds a disposable DuckDB index, and serves an interactive Marimo UI for browsing, filtering, visualizing, and editing cards. The source of truth is always your files.
10
+
11
+ ## Why Koobi
12
+
13
+ Most experiment trackers assume a hosted service and database-backed runs. Koobi is designed for local-first users who want:
14
+
15
+ - readable, versionable records in Git
16
+ - zero-server operation
17
+ - domain-agnostic metrics and parameters
18
+ - workflows friendly to both humans and coding agents
19
+
20
+ ## Current MVP Capabilities
21
+
22
+ - Markdown card parsing and serialization with preserved body/key ordering
23
+ - additive card updates (only targeted fields are rewritten)
24
+ - DuckDB index build with:
25
+ - `cards` table (metadata + body)
26
+ - `measures` table (long-format metrics)
27
+ - `series_registry` table (series pointers)
28
+ - Marimo app with:
29
+ - project/status/search filters
30
+ - model table view
31
+ - card detail view (metrics/params/tags/body)
32
+ - edit form (name/status/tags/body) with write-back
33
+ - one measure bar chart
34
+ - CLI commands:
35
+ - `koobi init`
36
+ - `koobi new`
37
+ - `koobi index`
38
+ - `koobi ui`
39
+
40
+ ## Architecture Overview
41
+
42
+ ```text
43
+ cards/*.md --> index.duckdb --> Marimo app
44
+ ^ |
45
+ |---------- edit/write-back -------|
46
+ ```
47
+
48
+ - Cards are authoritative.
49
+ - Index is derived and disposable.
50
+ - UI reads from index and writes edits back to cards.
51
+
52
+ ## Installation
53
+
54
+ Install into any project or environment directly from Git:
55
+
56
+ ```bash
57
+ pip install git+https://github.com/blu3c0ral/koobi.git
58
+ ```
59
+
60
+ This installs the `koobi` command and the importable `koobi` package.
61
+
62
+ For local development on Koobi itself, install editable with dev extras:
63
+
64
+ ```bash
65
+ python3 -m venv .venv
66
+ source .venv/bin/activate
67
+ python -m pip install -e ".[dev]"
68
+ ```
69
+
70
+ ## Quickstart
71
+
72
+ Koobi discovers its configuration automatically: every command searches the
73
+ current directory and its parents for a `koobi.toml`. Work from inside your
74
+ workspace and no `--config` flag is needed.
75
+
76
+ ### 1) Create (or enter) a workspace
77
+
78
+ ```bash
79
+ koobi init --path my-registry
80
+ cd my-registry
81
+ ```
82
+
83
+ Or use the bundled demo workspace:
84
+
85
+ ```bash
86
+ python examples/local_example_to_cards.py --overwrite
87
+ cd examples/local
88
+ ```
89
+
90
+ ### 2) Build the index
91
+
92
+ ```bash
93
+ koobi index
94
+ ```
95
+
96
+ ### 3) Launch the UI
97
+
98
+ ```bash
99
+ koobi ui
100
+ ```
101
+
102
+ The UI opens at http://localhost:2718.
103
+
104
+ ### Running from outside the workspace
105
+
106
+ If you prefer not to `cd`, point Koobi at the config explicitly or via an
107
+ environment variable (precedence: `--config` > `KOOBI_CONFIG` > current dir):
108
+
109
+ ```bash
110
+ koobi ui --config examples/local/koobi.toml
111
+ # or
112
+ export KOOBI_CONFIG=examples/local/koobi.toml
113
+ koobi ui
114
+ ```
115
+
116
+ ## CLI Reference
117
+
118
+ Initialize a new workspace:
119
+
120
+ ```bash
121
+ koobi init --path /path/to/workspace
122
+ ```
123
+
124
+ Create a new card (run from inside the workspace):
125
+
126
+ ```bash
127
+ koobi new demo_project.my_model
128
+ ```
129
+
130
+ Rebuild index:
131
+
132
+ ```bash
133
+ koobi index
134
+ ```
135
+
136
+ Run UI:
137
+
138
+ ```bash
139
+ koobi ui
140
+ ```
141
+
142
+ ## Use as a Library
143
+
144
+ Koobi's core is importable, so other projects and coding agents can read,
145
+ query, and write cards programmatically:
146
+
147
+ ```python
148
+ from koobi import load_config, build, connect, query_cards
149
+ from koobi import Card, load_card, save_card
150
+
151
+ # Resolve config by searching upward from a path (file or directory)
152
+ cfg = load_config("path/to/workspace")
153
+
154
+ # Build the disposable DuckDB index from the Markdown cards
155
+ build(cfg)
156
+
157
+ # Query cards joined with wide-format measures
158
+ con = connect(cfg)
159
+ df = query_cards(con, project="demo_project", status="active")
160
+
161
+ # Read, mutate, and write back a single card (only targeted fields change)
162
+ card = load_card("path/to/workspace/cards/demo_project.my_model.md")
163
+ card.status = "shipped"
164
+ save_card(card, fields=["status"])
165
+ ```
166
+
167
+ The full public API is exported from the top-level `koobi` package; see
168
+ `koobi.__all__`.
169
+
170
+ ## Repository Layout
171
+
172
+ ```text
173
+ src/koobi/ # core package (schema, cards, config, index, charts, app, cli)
174
+ tests/ # unit tests
175
+ examples/local/ # self-contained demo workspace
176
+ examples/local_example_to_cards.py
177
+ docs/ # product, technical, and future feature docs
178
+ ```
179
+
180
+ ## Development
181
+
182
+ Run tests:
183
+
184
+ ```bash
185
+ pytest
186
+ ```
187
+
188
+ Recommended pre-PR checklist:
189
+
190
+ - run `pytest`
191
+ - regenerate local example cards if example inputs changed
192
+ - verify `koobi index` and `koobi ui` against `examples/local/koobi.toml`
193
+
194
+ ## Documentation
195
+
196
+ - [`docs/product_design.md`](docs/product_design.md) - product framing and roadmap
197
+ - [`docs/technical_design.md`](docs/technical_design.md) - architecture and data contracts
198
+ - [`docs/future_features.md`](docs/future_features.md) - planned automation and extensions
199
+
200
+ ## Status
201
+
202
+ Active MVP implementation with local example workflow included. Phase 0 focus is stability of file contracts, indexing, and interactive editing.
@@ -0,0 +1,55 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "koobi"
7
+ version = "0.0.1"
8
+ description = "File-native model and experiment registry"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "blu3c0ral", email = "blu3c0ral@protonmail.ch" }]
14
+ keywords = ["experiment-tracking", "model-registry", "marimo", "duckdb", "markdown"]
15
+ classifiers = [
16
+ "Development Status :: 3 - Alpha",
17
+ "Intended Audience :: Science/Research",
18
+ "Intended Audience :: Developers",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Programming Language :: Python :: 3.12",
23
+ "Operating System :: OS Independent",
24
+ "Topic :: Scientific/Engineering",
25
+ ]
26
+ dependencies = [
27
+ "altair",
28
+ "duckdb",
29
+ "marimo",
30
+ "pandas",
31
+ "pyarrow",
32
+ "python-frontmatter",
33
+ "tomli; python_version < '3.11'",
34
+ ]
35
+
36
+ [project.optional-dependencies]
37
+ dev = ["pytest"]
38
+
39
+ [project.urls]
40
+ Homepage = "https://github.com/blu3c0ral/koobi"
41
+ Repository = "https://github.com/blu3c0ral/koobi"
42
+ Issues = "https://github.com/blu3c0ral/koobi/issues"
43
+
44
+ [project.scripts]
45
+ koobi = "koobi.cli:main"
46
+
47
+ [tool.setuptools]
48
+ package-dir = {"" = "src"}
49
+
50
+ [tool.setuptools.packages.find]
51
+ where = ["src"]
52
+
53
+ [tool.pytest.ini_options]
54
+ pythonpath = ["src"]
55
+ testpaths = ["tests"]
koobi-0.0.1/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,35 @@
1
+ """Koobi: file-native model and experiment registry.
2
+
3
+ This module exposes the stable public API. Import the high-level helpers
4
+ directly from ``koobi`` rather than reaching into submodules::
5
+
6
+ from koobi import load_config, build, connect, query_cards
7
+ from koobi import Card, load_card, save_card
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from .cards import iter_cards, load_card, save_card
13
+ from .charts import measure_bar
14
+ from .config import Config, load_config
15
+ from .index import build, connect, query_cards
16
+ from .schema import Card, SeriesRef, dump_card, parse_card
17
+
18
+ __version__ = "0.0.1"
19
+
20
+ __all__ = [
21
+ "__version__",
22
+ "Card",
23
+ "Config",
24
+ "SeriesRef",
25
+ "build",
26
+ "connect",
27
+ "dump_card",
28
+ "iter_cards",
29
+ "load_card",
30
+ "load_config",
31
+ "measure_bar",
32
+ "parse_card",
33
+ "query_cards",
34
+ "save_card",
35
+ ]