oaken-core 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.
@@ -0,0 +1,241 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ *.lcov
51
+ .hypothesis/
52
+ .pytest_cache/
53
+ cover/
54
+
55
+ # Translations
56
+ *.mo
57
+ *.pot
58
+
59
+ # Django stuff:
60
+ *.log
61
+ local_settings.py
62
+ db.sqlite3
63
+ db.sqlite3-journal
64
+
65
+ # Flask stuff:
66
+ instance/
67
+ .webassets-cache
68
+
69
+ # Scrapy stuff:
70
+ .scrapy
71
+
72
+ # Sphinx documentation
73
+ docs/_build/
74
+
75
+ # PyBuilder
76
+ .pybuilder/
77
+ target/
78
+
79
+ # Jupyter Notebook
80
+ .ipynb_checkpoints
81
+
82
+ # IPython
83
+ profile_default/
84
+ ipython_config.py
85
+
86
+ # pyenv
87
+ # For a library or package, you might want to ignore these files since the code is
88
+ # intended to run in multiple environments; otherwise, check them in:
89
+ # .python-version
90
+
91
+ # pipenv
92
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
93
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
94
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
95
+ # install all needed dependencies.
96
+ # Pipfile.lock
97
+
98
+ # uv
99
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
100
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
101
+ # commonly ignored for libraries.
102
+ # uv.lock
103
+
104
+ # poetry
105
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
106
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
107
+ # commonly ignored for libraries.
108
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
109
+ # poetry.lock
110
+ # poetry.toml
111
+
112
+ # pdm
113
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
114
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
115
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
116
+ # pdm.lock
117
+ # pdm.toml
118
+ .pdm-python
119
+ .pdm-build/
120
+
121
+ # pixi
122
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
123
+ # pixi.lock
124
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
125
+ # in the .venv directory. It is recommended not to include this directory in version control.
126
+ .pixi/*
127
+ !.pixi/config.toml
128
+
129
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
130
+ __pypackages__/
131
+
132
+ # Celery stuff
133
+ celerybeat-schedule*
134
+ celerybeat.pid
135
+
136
+ # Redis
137
+ *.rdb
138
+ *.aof
139
+ *.pid
140
+
141
+ # RabbitMQ
142
+ mnesia/
143
+ rabbitmq/
144
+ rabbitmq-data/
145
+
146
+ # ActiveMQ
147
+ activemq-data/
148
+
149
+ # SageMath parsed files
150
+ *.sage.py
151
+
152
+ # Environments
153
+ .env
154
+ .envrc
155
+ .venv
156
+ env/
157
+ venv/
158
+ ENV/
159
+ env.bak/
160
+ venv.bak/
161
+
162
+ # Spyder project settings
163
+ .spyderproject
164
+ .spyproject
165
+
166
+ # Rope project settings
167
+ .ropeproject
168
+
169
+ # mkdocs/Zensical documentation
170
+ /site
171
+
172
+ # mypy
173
+ .mypy_cache/
174
+ .dmypy.json
175
+ dmypy.json
176
+
177
+ # Pyre type checker
178
+ .pyre/
179
+
180
+ # pytype static type analyzer
181
+ .pytype/
182
+
183
+ # Cython debug symbols
184
+ cython_debug/
185
+
186
+ # PyCharm
187
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
188
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
189
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
190
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
191
+ # .idea/
192
+
193
+ # Abstra
194
+ # Abstra is an AI-powered process automation framework.
195
+ # Ignore directories containing user credentials, local state, and settings.
196
+ # Learn more at https://abstra.io/docs
197
+ .abstra/
198
+
199
+ # Visual Studio Code
200
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore that
201
+ # can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
202
+ # and can be added to the global gitignore or merged into this file. However, if you prefer, you
203
+ # could uncomment the following to ignore the entire vscode folder
204
+ # .vscode/
205
+ # Temporary file for partial code execution
206
+ tempCodeRunnerFile.py
207
+
208
+ # Ruff stuff:
209
+ .ruff_cache/
210
+
211
+ # PyPI configuration file
212
+ .pypirc
213
+
214
+ # Marimo
215
+ marimo/_static/
216
+ marimo/_lsp/
217
+ __marimo__/
218
+
219
+ # Streamlit
220
+ .streamlit/secrets.toml
221
+
222
+ # --- Oaken Mail: never commit data, mail or secrets ---
223
+ *.db
224
+ *.db-*
225
+ *.sqlite*
226
+ *.eml
227
+ *.mbox
228
+ .env.*
229
+ !.env.example
230
+ token*.json
231
+ credentials*.json
232
+ client_secret*.json
233
+ node_modules/
234
+ site/
235
+ .claude/settings.local.json
236
+
237
+ # Synthetic test fixtures are committed (no real mail; see docs/architecture/parsing.md).
238
+ !src/oaken/mail/tests/fixtures/**/*.eml
239
+
240
+ # A real config.toml holds local settings and must never be committed (use config.example.toml).
241
+ config.toml
@@ -0,0 +1,51 @@
1
+ Metadata-Version: 2.5
2
+ Name: oaken-core
3
+ Version: 0.1.0
4
+ Summary: Oaken Core — the ingestion & enrichment pipeline, the CLI, and the MCP server, so an AI can work with your mail.
5
+ Project-URL: Homepage, https://dfoulks1.github.io/oaken-mail/
6
+ Project-URL: Source, https://github.com/dfoulks1/oaken-mail
7
+ License-Expression: Apache-2.0
8
+ Keywords: ai,email,llm,local-first,mail,mcp,mua,oaken,rag
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: End Users/Desktop
12
+ Classifier: License :: OSI Approved :: Apache Software License
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Communications :: Email
16
+ Classifier: Topic :: Communications :: Email :: Email Clients (MUA)
17
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
+ Requires-Python: >=3.11
19
+ Requires-Dist: oaken-cli==0.1.0
20
+ Requires-Dist: oaken[vec]==0.1.0
21
+ Description-Content-Type: text/markdown
22
+
23
+ # Oaken Core
24
+
25
+ **Oaken Core** is the ingestion & enrichment pipeline, the CLI, and the MCP server — the product
26
+ that lets an AI work with your mail, locally, with nothing leaving your machine unless you
27
+ configure it to.
28
+
29
+ Installing this bundle gives you the whole non-UI product:
30
+
31
+ - the **pipeline**: mail is pulled to local disk, filtered by your Sieve rules, parsed, indexed
32
+ (keyword + vectors) and enriched (summary, triage, actions, header/MIME inspector) by a local
33
+ model at ingest time, so search and question-answering are cheap in tokens;
34
+ - the local **API daemon** on `127.0.0.1` and the read-only `/stats` status page;
35
+ - the **MCP server** (`/mcp`) — the AI-facing surface, so a stronger model can analyse and act on
36
+ your mail through a narrow, audited, confirm-gated door while the mail stays on your machine;
37
+ - the **`oaken` command line** to start, configure and drive it (`oaken start`, `oaken auth`,
38
+ `oaken sync`, `oaken search`, `oaken ask`, `oaken pipeline`, `oaken mcp`, …);
39
+ - the first-party plugins: Gmail, IMAP, SMTP, Ollama, the enrichers, and the sqlite-vec store.
40
+
41
+ ```bash
42
+ pip install oaken-core
43
+ ```
44
+
45
+ The web UI is a **separate product**, built on the same API and CLI framework — install it on its
46
+ own with `pip install oaken-webui`. Other front-ends (desktop, mobile) are anticipated and are
47
+ likewise separate products that build on Oaken Core's HTTP API and MCP surfaces. See
48
+ [ADR 0014](../../docs/adr/0014-product-family-and-ui-surfaces.md) for the product family and the
49
+ surfaces a UI builds on.
50
+
51
+ License: Apache-2.0.
@@ -0,0 +1,29 @@
1
+ # Oaken Core
2
+
3
+ **Oaken Core** is the ingestion & enrichment pipeline, the CLI, and the MCP server — the product
4
+ that lets an AI work with your mail, locally, with nothing leaving your machine unless you
5
+ configure it to.
6
+
7
+ Installing this bundle gives you the whole non-UI product:
8
+
9
+ - the **pipeline**: mail is pulled to local disk, filtered by your Sieve rules, parsed, indexed
10
+ (keyword + vectors) and enriched (summary, triage, actions, header/MIME inspector) by a local
11
+ model at ingest time, so search and question-answering are cheap in tokens;
12
+ - the local **API daemon** on `127.0.0.1` and the read-only `/stats` status page;
13
+ - the **MCP server** (`/mcp`) — the AI-facing surface, so a stronger model can analyse and act on
14
+ your mail through a narrow, audited, confirm-gated door while the mail stays on your machine;
15
+ - the **`oaken` command line** to start, configure and drive it (`oaken start`, `oaken auth`,
16
+ `oaken sync`, `oaken search`, `oaken ask`, `oaken pipeline`, `oaken mcp`, …);
17
+ - the first-party plugins: Gmail, IMAP, SMTP, Ollama, the enrichers, and the sqlite-vec store.
18
+
19
+ ```bash
20
+ pip install oaken-core
21
+ ```
22
+
23
+ The web UI is a **separate product**, built on the same API and CLI framework — install it on its
24
+ own with `pip install oaken-webui`. Other front-ends (desktop, mobile) are anticipated and are
25
+ likewise separate products that build on Oaken Core's HTTP API and MCP surfaces. See
26
+ [ADR 0014](../../docs/adr/0014-product-family-and-ui-surfaces.md) for the product family and the
27
+ surfaces a UI builds on.
28
+
29
+ License: Apache-2.0.
@@ -0,0 +1,49 @@
1
+ [project]
2
+ name = "oaken-core"
3
+ dynamic = ["version"] # one source of truth: src/oaken/__init__.py (the whole product shares it)
4
+ description = "Oaken Core — the ingestion & enrichment pipeline, the CLI, and the MCP server, so an AI can work with your mail."
5
+ readme = "README.md"
6
+ license = "Apache-2.0"
7
+ requires-python = ">=3.11"
8
+ keywords = ["oaken", "email", "mail", "mua", "local-first", "ai", "mcp", "llm", "rag"]
9
+ classifiers = [
10
+ "Development Status :: 4 - Beta",
11
+ "Intended Audience :: End Users/Desktop",
12
+ "License :: OSI Approved :: Apache Software License",
13
+ "Operating System :: OS Independent",
14
+ "Environment :: Console",
15
+ "Programming Language :: Python :: 3",
16
+ "Topic :: Communications :: Email",
17
+ "Topic :: Communications :: Email :: Email Clients (MUA)",
18
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
19
+ ]
20
+ # A bundle, not code: it pulls together the product (ADR 0014). `oaken` is the engine (pipeline,
21
+ # API daemon, MCP server, first-party plugins); `oaken-cli` is the management surface and the stdio
22
+ # MCP bridge; `oaken[vec]` adds the sqlite-vec native library for embeddings. The web UI is a
23
+ # separate product (`oaken-webui`) and is deliberately NOT included.
24
+ # The pins below are the one spot that restates the version (a dependency string can't be dynamic);
25
+ # tests/test_version_lockstep.py asserts they match the shared version so they cannot drift.
26
+ dependencies = [
27
+ "oaken[vec]==0.1.0",
28
+ "oaken-cli==0.1.0",
29
+ ]
30
+
31
+ [project.urls]
32
+ Homepage = "https://dfoulks1.github.io/oaken-mail/"
33
+ Source = "https://github.com/dfoulks1/oaken-mail"
34
+
35
+ [tool.uv.sources]
36
+ oaken = { workspace = true }
37
+ oaken-cli = { workspace = true }
38
+
39
+ [build-system]
40
+ requires = ["hatchling"]
41
+ build-backend = "hatchling.build"
42
+
43
+ [tool.hatch.version]
44
+ source = "regex"
45
+ path = "../../src/oaken/__init__.py"
46
+ pattern = '__version__ = "(?P<version>[^"]+)"'
47
+
48
+ [tool.hatch.build.targets.wheel]
49
+ packages = ["src/oaken_core"]
@@ -0,0 +1,13 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ """Oaken Core — the product bundle.
3
+
4
+ Installing ``oaken-core`` brings in the whole non-UI product (ADR 0014): the ingestion and
5
+ enrichment pipeline and the local API daemon (``oaken``, with the first-party Gmail, IMAP, SMTP,
6
+ Ollama, enricher and vector-store plugins), the MCP server that lets an AI work with your mail
7
+ (hosted in core, at ``/mcp``), and the ``oaken`` command-line interface (``oaken-cli``) that starts,
8
+ configures and drives it. The web UI is a separate product (``oaken-webui``).
9
+
10
+ This package ships no code of its own; it exists so ``pip install oaken-core`` installs the bundle.
11
+ Its version is the product's single source of truth, ``oaken.__version__`` (all four distributions
12
+ read it), so there is no version literal here to drift.
13
+ """