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.
- oaken_core-0.1.0/.gitignore +241 -0
- oaken_core-0.1.0/PKG-INFO +51 -0
- oaken_core-0.1.0/README.md +29 -0
- oaken_core-0.1.0/pyproject.toml +49 -0
- oaken_core-0.1.0/src/oaken_core/__init__.py +13 -0
|
@@ -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
|
+
"""
|