oaken 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.
Files changed (754) hide show
  1. oaken-0.1.0/.gitattributes +3 -0
  2. oaken-0.1.0/.github/workflows/ci.yml +41 -0
  3. oaken-0.1.0/.github/workflows/pages.yml +18 -0
  4. oaken-0.1.0/.gitignore +241 -0
  5. oaken-0.1.0/.import_linter_cache/.gitignore +2 -0
  6. oaken-0.1.0/.import_linter_cache/71507c3f98dc9e82724a874bbfe8eb1f355ab577.data.json +1 -0
  7. oaken-0.1.0/.import_linter_cache/CACHEDIR.TAG +3 -0
  8. oaken-0.1.0/.import_linter_cache/oaken.meta.json +1 -0
  9. oaken-0.1.0/.import_linter_cache/oaken_cli.meta.json +1 -0
  10. oaken-0.1.0/.import_linter_cache/oaken_enrichers.meta.json +1 -0
  11. oaken-0.1.0/.import_linter_cache/oaken_gmail.meta.json +1 -0
  12. oaken-0.1.0/.import_linter_cache/oaken_imap.meta.json +1 -0
  13. oaken-0.1.0/.import_linter_cache/oaken_ollama.meta.json +1 -0
  14. oaken-0.1.0/.import_linter_cache/oaken_smtp.meta.json +1 -0
  15. oaken-0.1.0/.import_linter_cache/oaken_vec_sqlite.meta.json +1 -0
  16. oaken-0.1.0/.import_linter_cache/oaken_webui.meta.json +1 -0
  17. oaken-0.1.0/.kiro/settings/lsp.json +205 -0
  18. oaken-0.1.0/.pre-commit-config.yaml +20 -0
  19. oaken-0.1.0/.secrets.baseline +133 -0
  20. oaken-0.1.0/CHANGELOG.md +50 -0
  21. oaken-0.1.0/CODE_OF_CONDUCT.md +117 -0
  22. oaken-0.1.0/CONTRIBUTING.md +183 -0
  23. oaken-0.1.0/LICENSE +201 -0
  24. oaken-0.1.0/NOTICE +5 -0
  25. oaken-0.1.0/PKG-INFO +60 -0
  26. oaken-0.1.0/README.md +16 -0
  27. oaken-0.1.0/SECURITY.md +10 -0
  28. oaken-0.1.0/apps/cli/README.md +9 -0
  29. oaken-0.1.0/apps/cli/pyproject.toml +43 -0
  30. oaken-0.1.0/apps/cli/src/oaken_cli/__init__.py +14 -0
  31. oaken-0.1.0/apps/cli/src/oaken_cli/__main__.py +10 -0
  32. oaken-0.1.0/apps/cli/src/oaken_cli/client.py +144 -0
  33. oaken-0.1.0/apps/cli/src/oaken_cli/commands/__init__.py +3 -0
  34. oaken-0.1.0/apps/cli/src/oaken_cli/commands/account_cmd.py +349 -0
  35. oaken-0.1.0/apps/cli/src/oaken_cli/commands/agent_cmd.py +207 -0
  36. oaken-0.1.0/apps/cli/src/oaken_cli/commands/completion.py +64 -0
  37. oaken-0.1.0/apps/cli/src/oaken_cli/commands/content_cmd.py +266 -0
  38. oaken-0.1.0/apps/cli/src/oaken_cli/commands/daemon_cmd.py +99 -0
  39. oaken-0.1.0/apps/cli/src/oaken_cli/commands/mail_cmd.py +349 -0
  40. oaken-0.1.0/apps/cli/src/oaken_cli/commands/mcp_cmd.py +263 -0
  41. oaken-0.1.0/apps/cli/src/oaken_cli/commands/operation_cmd.py +162 -0
  42. oaken-0.1.0/apps/cli/src/oaken_cli/commands/runtime.py +147 -0
  43. oaken-0.1.0/apps/cli/src/oaken_cli/commands/schedule_cmd.py +138 -0
  44. oaken-0.1.0/apps/cli/src/oaken_cli/commands/system_cmd.py +408 -0
  45. oaken-0.1.0/apps/cli/src/oaken_cli/daemon.py +99 -0
  46. oaken-0.1.0/apps/cli/src/oaken_cli/discovery.py +184 -0
  47. oaken-0.1.0/apps/cli/src/oaken_cli/exits.py +74 -0
  48. oaken-0.1.0/apps/cli/src/oaken_cli/http.py +252 -0
  49. oaken-0.1.0/apps/cli/src/oaken_cli/inprocess.py +119 -0
  50. oaken-0.1.0/apps/cli/src/oaken_cli/main.py +840 -0
  51. oaken-0.1.0/apps/cli/src/oaken_cli/output.py +114 -0
  52. oaken-0.1.0/apps/cli/src/oaken_cli/sanitize.py +77 -0
  53. oaken-0.1.0/apps/cli/src/oaken_cli/tests/__init__.py +1 -0
  54. oaken-0.1.0/apps/cli/src/oaken_cli/tests/conftest.py +97 -0
  55. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_accounts.py +204 -0
  56. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_commands.py +290 -0
  57. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_e2e.py +113 -0
  58. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_http.py +279 -0
  59. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_mcp.py +228 -0
  60. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_unit.py +102 -0
  61. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_cli_usage.py +48 -0
  62. oaken-0.1.0/apps/cli/src/oaken_cli/tests/test_version.py +12 -0
  63. oaken-0.1.0/apps/core/README.md +29 -0
  64. oaken-0.1.0/apps/core/pyproject.toml +49 -0
  65. oaken-0.1.0/apps/core/src/oaken_core/__init__.py +13 -0
  66. oaken-0.1.0/apps/webui/README.md +35 -0
  67. oaken-0.1.0/apps/webui/oakenmail-templates/accounts.html +417 -0
  68. oaken-0.1.0/apps/webui/oakenmail-templates/assets/api.js +98 -0
  69. oaken-0.1.0/apps/webui/oakenmail-templates/assets/brand/apple-touch-icon.png +0 -0
  70. oaken-0.1.0/apps/webui/oakenmail-templates/assets/brand/favicon.png +0 -0
  71. oaken-0.1.0/apps/webui/oakenmail-templates/assets/demo-fixtures.js +223 -0
  72. oaken-0.1.0/apps/webui/oakenmail-templates/assets/oaken.css +327 -0
  73. oaken-0.1.0/apps/webui/oakenmail-templates/assets/oaken.js +969 -0
  74. oaken-0.1.0/apps/webui/oakenmail-templates/compose.html +213 -0
  75. oaken-0.1.0/apps/webui/oakenmail-templates/config.html +466 -0
  76. oaken-0.1.0/apps/webui/oakenmail-templates/contacts.html +232 -0
  77. oaken-0.1.0/apps/webui/oakenmail-templates/index.html +238 -0
  78. oaken-0.1.0/apps/webui/oakenmail-templates/login.html +49 -0
  79. oaken-0.1.0/apps/webui/oakenmail-templates/message.html +206 -0
  80. oaken-0.1.0/apps/webui/oakenmail-templates/search.html +206 -0
  81. oaken-0.1.0/apps/webui/oakenmail-templates/settings.html +415 -0
  82. oaken-0.1.0/apps/webui/oakenmail-templates/sieve.html +322 -0
  83. oaken-0.1.0/apps/webui/pyproject.toml +49 -0
  84. oaken-0.1.0/apps/webui/src/oaken_webui/__init__.py +14 -0
  85. oaken-0.1.0/apps/webui/src/oaken_webui/app.py +260 -0
  86. oaken-0.1.0/apps/webui/src/oaken_webui/main.py +276 -0
  87. oaken-0.1.0/apps/webui/src/oaken_webui/tests/__init__.py +1 -0
  88. oaken-0.1.0/apps/webui/src/oaken_webui/tests/test_app.py +234 -0
  89. oaken-0.1.0/apps/webui/src/oaken_webui/tests/test_main.py +135 -0
  90. oaken-0.1.0/apps/webui/src/oaken_webui/tests/test_templates.py +34 -0
  91. oaken-0.1.0/apps/webui/ui-contract.json +71 -0
  92. oaken-0.1.0/config.example.toml +147 -0
  93. oaken-0.1.0/docs/.nojekyll +0 -0
  94. oaken-0.1.0/docs/.site-manifest +59 -0
  95. oaken-0.1.0/docs/404.html +22 -0
  96. oaken-0.1.0/docs/adr/0001-record-architecture-decisions.md +20 -0
  97. oaken-0.1.0/docs/adr/0002-core-daemon-and-thin-clients.md +27 -0
  98. oaken-0.1.0/docs/adr/0003-sqlite-access-layer.md +42 -0
  99. oaken-0.1.0/docs/adr/0004-mcp-server-in-core.md +51 -0
  100. oaken-0.1.0/docs/adr/0005-http-stack-and-api-security.md +77 -0
  101. oaken-0.1.0/docs/adr/0006-clients-live-in-apps.md +36 -0
  102. oaken-0.1.0/docs/adr/0007-webui-is-a-separate-client.md +54 -0
  103. oaken-0.1.0/docs/adr/0008-location-and-enrichment-attrs.md +77 -0
  104. oaken-0.1.0/docs/adr/0009-sieve-write-path.md +74 -0
  105. oaken-0.1.0/docs/adr/0010-the-stable-surface-and-its-versioning.md +87 -0
  106. oaken-0.1.0/docs/adr/0011-service-units-for-the-composition-root.md +63 -0
  107. oaken-0.1.0/docs/adr/0012-plugin-extension-hooks.md +68 -0
  108. oaken-0.1.0/docs/adr/0013-read-only-stats-page.md +91 -0
  109. oaken-0.1.0/docs/adr/0014-product-family-and-ui-surfaces.md +81 -0
  110. oaken-0.1.0/docs/adr/index.html +198 -0
  111. oaken-0.1.0/docs/architecture/ai-safety.html +208 -0
  112. oaken-0.1.0/docs/architecture/ai-safety.md +105 -0
  113. oaken-0.1.0/docs/architecture/daemon.html +362 -0
  114. oaken-0.1.0/docs/architecture/daemon.md +165 -0
  115. oaken-0.1.0/docs/architecture/index.html +221 -0
  116. oaken-0.1.0/docs/architecture/index.md +94 -0
  117. oaken-0.1.0/docs/architecture/ingest-pipeline.html +376 -0
  118. oaken-0.1.0/docs/architecture/ingest-pipeline.md +167 -0
  119. oaken-0.1.0/docs/architecture/jobs.html +264 -0
  120. oaken-0.1.0/docs/architecture/jobs.md +130 -0
  121. oaken-0.1.0/docs/architecture/operations.html +267 -0
  122. oaken-0.1.0/docs/architecture/operations.md +117 -0
  123. oaken-0.1.0/docs/architecture/overview.html +228 -0
  124. oaken-0.1.0/docs/architecture/overview.md +84 -0
  125. oaken-0.1.0/docs/architecture/parsing.html +322 -0
  126. oaken-0.1.0/docs/architecture/parsing.md +165 -0
  127. oaken-0.1.0/docs/architecture/read-state.html +323 -0
  128. oaken-0.1.0/docs/architecture/read-state.md +113 -0
  129. oaken-0.1.0/docs/architecture/retrieval.html +271 -0
  130. oaken-0.1.0/docs/architecture/retrieval.md +119 -0
  131. oaken-0.1.0/docs/architecture/sieve.html +299 -0
  132. oaken-0.1.0/docs/architecture/sieve.md +154 -0
  133. oaken-0.1.0/docs/architecture/software-map.html +439 -0
  134. oaken-0.1.0/docs/architecture/storage.html +206 -0
  135. oaken-0.1.0/docs/architecture/storage.md +87 -0
  136. oaken-0.1.0/docs/architecture/swarm.html +255 -0
  137. oaken-0.1.0/docs/architecture/swarm.md +154 -0
  138. oaken-0.1.0/docs/architecture/sync-schedule.html +245 -0
  139. oaken-0.1.0/docs/architecture/sync-schedule.md +101 -0
  140. oaken-0.1.0/docs/architecture/vectors.html +199 -0
  141. oaken-0.1.0/docs/architecture/vectors.md +63 -0
  142. oaken-0.1.0/docs/assets/brand/apple-touch-icon.png +0 -0
  143. oaken-0.1.0/docs/assets/brand/favicon.png +0 -0
  144. oaken-0.1.0/docs/assets/brand/logo.png +0 -0
  145. oaken-0.1.0/docs/assets/site.css +247 -0
  146. oaken-0.1.0/docs/assets/site.js +53 -0
  147. oaken-0.1.0/docs/code-of-conduct.html +194 -0
  148. oaken-0.1.0/docs/contributing.html +488 -0
  149. oaken-0.1.0/docs/demo/accounts.html +415 -0
  150. oaken-0.1.0/docs/demo/assets/api.js +98 -0
  151. oaken-0.1.0/docs/demo/assets/brand/apple-touch-icon.png +0 -0
  152. oaken-0.1.0/docs/demo/assets/brand/favicon.png +0 -0
  153. oaken-0.1.0/docs/demo/assets/demo-fixtures.js +223 -0
  154. oaken-0.1.0/docs/demo/assets/oaken.css +327 -0
  155. oaken-0.1.0/docs/demo/assets/oaken.js +969 -0
  156. oaken-0.1.0/docs/demo/compose.html +211 -0
  157. oaken-0.1.0/docs/demo/config.html +464 -0
  158. oaken-0.1.0/docs/demo/contacts.html +230 -0
  159. oaken-0.1.0/docs/demo/index.html +236 -0
  160. oaken-0.1.0/docs/demo/login.html +47 -0
  161. oaken-0.1.0/docs/demo/message.html +204 -0
  162. oaken-0.1.0/docs/demo/search.html +204 -0
  163. oaken-0.1.0/docs/demo/settings.html +413 -0
  164. oaken-0.1.0/docs/demo/sieve.html +320 -0
  165. oaken-0.1.0/docs/evals/latest.json +222 -0
  166. oaken-0.1.0/docs/evals/latest.md +44 -0
  167. oaken-0.1.0/docs/getting-started.html +219 -0
  168. oaken-0.1.0/docs/getting-started.md +135 -0
  169. oaken-0.1.0/docs/index.html +100 -0
  170. oaken-0.1.0/docs/index.md +24 -0
  171. oaken-0.1.0/docs/keyring.html +177 -0
  172. oaken-0.1.0/docs/keyring.md +78 -0
  173. oaken-0.1.0/docs/mcp.html +411 -0
  174. oaken-0.1.0/docs/plugins.html +485 -0
  175. oaken-0.1.0/docs/plugins.md +407 -0
  176. oaken-0.1.0/docs/prompts/00-context.md +210 -0
  177. oaken-0.1.0/docs/prompts/01-bootstrap.md +72 -0
  178. oaken-0.1.0/docs/prompts/01a-docs-site-scaffold.md +142 -0
  179. oaken-0.1.0/docs/prompts/02-core-foundation.md +57 -0
  180. oaken-0.1.0/docs/prompts/03-events-and-jobs.md +57 -0
  181. oaken-0.1.0/docs/prompts/03b-swarm-foundations.md +59 -0
  182. oaken-0.1.0/docs/prompts/04-plugin-host.md +97 -0
  183. oaken-0.1.0/docs/prompts/05-raw-store.md +70 -0
  184. oaken-0.1.0/docs/prompts/06-parsing-and-cleaning.md +85 -0
  185. oaken-0.1.0/docs/prompts/06c-sieve-filtering.md +98 -0
  186. oaken-0.1.0/docs/prompts/07-index-and-fts.md +96 -0
  187. oaken-0.1.0/docs/prompts/08-vector-store.md +61 -0
  188. oaken-0.1.0/docs/prompts/09-ingest-pipeline.md +151 -0
  189. oaken-0.1.0/docs/prompts/10-ollama-and-prompt-safety.md +112 -0
  190. oaken-0.1.0/docs/prompts/11-gmail-plugin.md +121 -0
  191. oaken-0.1.0/docs/prompts/11b-smtp-send.md +48 -0
  192. oaken-0.1.0/docs/prompts/11c-imap-provider.md +28 -0
  193. oaken-0.1.0/docs/prompts/12-read-state.md +85 -0
  194. oaken-0.1.0/docs/prompts/12b-sync-scheduling.md +83 -0
  195. oaken-0.1.0/docs/prompts/13-operation-registry.md +74 -0
  196. oaken-0.1.0/docs/prompts/14-enrichers.md +88 -0
  197. oaken-0.1.0/docs/prompts/15-retrieval-and-ask.md +69 -0
  198. oaken-0.1.0/docs/prompts/16-api-daemon.md +84 -0
  199. oaken-0.1.0/docs/prompts/17-cli-client.md +167 -0
  200. oaken-0.1.0/docs/prompts/18-mcp-shim.md +84 -0
  201. oaken-0.1.0/docs/prompts/19-security-hardening.md +73 -0
  202. oaken-0.1.0/docs/prompts/20-oss-docs.md +76 -0
  203. oaken-0.1.0/docs/prompts/21-webui-server.md +69 -0
  204. oaken-0.1.0/docs/prompts/21b-webui-client-foundation.md +413 -0
  205. oaken-0.1.0/docs/prompts/22-api-parity.md +95 -0
  206. oaken-0.1.0/docs/prompts/23-plugin-settings.md +195 -0
  207. oaken-0.1.0/docs/prompts/24-accounts-onboarding.md +89 -0
  208. oaken-0.1.0/docs/prompts/25-folders-labels-counts.md +95 -0
  209. oaken-0.1.0/docs/prompts/26-sieve-management.md +97 -0
  210. oaken-0.1.0/docs/prompts/27-contacts-people.md +82 -0
  211. oaken-0.1.0/docs/prompts/28-compose-and-send.md +160 -0
  212. oaken-0.1.0/docs/prompts/29-system-settings.md +84 -0
  213. oaken-0.1.0/docs/prompts/30-pipeline-management.md +127 -0
  214. oaken-0.1.0/docs/prompts/31-workspace-management.md +82 -0
  215. oaken-0.1.0/docs/prompts/32-mcp-settings.md +140 -0
  216. oaken-0.1.0/docs/prompts/33-agent-enrichment.md +132 -0
  217. oaken-0.1.0/docs/prompts/34-stabilize-core.md +379 -0
  218. oaken-0.1.0/docs/prompts/README.md +73 -0
  219. oaken-0.1.0/docs/providers/gmail.html +243 -0
  220. oaken-0.1.0/docs/providers/gmail.md +139 -0
  221. oaken-0.1.0/docs/providers/imap.html +238 -0
  222. oaken-0.1.0/docs/providers/imap.md +136 -0
  223. oaken-0.1.0/docs/providers/smtp.html +187 -0
  224. oaken-0.1.0/docs/providers/smtp.md +87 -0
  225. oaken-0.1.0/docs/reference/api.html +747 -0
  226. oaken-0.1.0/docs/reference/cli.html +789 -0
  227. oaken-0.1.0/docs/reference/evaluation.html +250 -0
  228. oaken-0.1.0/docs/reference/operations.html +964 -0
  229. oaken-0.1.0/docs/reference/plugin-contracts.html +1192 -0
  230. oaken-0.1.0/docs/releasing.md +130 -0
  231. oaken-0.1.0/docs/robots.txt +3 -0
  232. oaken-0.1.0/docs/security.html +100 -0
  233. oaken-0.1.0/docs/site.toml +188 -0
  234. oaken-0.1.0/docs/sitemap.xml +37 -0
  235. oaken-0.1.0/docs/softmap.toml +829 -0
  236. oaken-0.1.0/docs/spikes/sqlite-vec.md +44 -0
  237. oaken-0.1.0/docs/spikes/sqlite_vec_bench.py +215 -0
  238. oaken-0.1.0/docs/token-savings.html +208 -0
  239. oaken-0.1.0/docs/token-savings.md +103 -0
  240. oaken-0.1.0/docs/tools/brand/apple-touch-icon.png +0 -0
  241. oaken-0.1.0/docs/tools/brand/favicon.png +0 -0
  242. oaken-0.1.0/docs/tools/brand/logo.png +0 -0
  243. oaken-0.1.0/docs/tools/build_site.py +320 -0
  244. oaken-0.1.0/docs/tools/check_docs.py +288 -0
  245. oaken-0.1.0/docs/tools/compute_sri.py +51 -0
  246. oaken-0.1.0/docs/tools/gen_api_reference.py +194 -0
  247. oaken-0.1.0/docs/tools/gen_cli_reference.py +168 -0
  248. oaken-0.1.0/docs/tools/gen_evaluation.py +158 -0
  249. oaken-0.1.0/docs/tools/gen_mcp.py +222 -0
  250. oaken-0.1.0/docs/tools/gen_operations.py +85 -0
  251. oaken-0.1.0/docs/tools/gen_plugin_contracts.py +201 -0
  252. oaken-0.1.0/docs/tools/generated.py +101 -0
  253. oaken-0.1.0/docs/tools/model.py +227 -0
  254. oaken-0.1.0/docs/tools/pagebase.py +214 -0
  255. oaken-0.1.0/docs/tools/render.py +186 -0
  256. oaken-0.1.0/docs/tools/softmap.py +672 -0
  257. oaken-0.1.0/docs/tools/sri.toml +17 -0
  258. oaken-0.1.0/docs/tools/templates/404.html +22 -0
  259. oaken-0.1.0/docs/tools/templates/_footer_scripts.html +4 -0
  260. oaken-0.1.0/docs/tools/templates/_head.html +14 -0
  261. oaken-0.1.0/docs/tools/templates/cards.html +4 -0
  262. oaken-0.1.0/docs/tools/templates/home.html +33 -0
  263. oaken-0.1.0/docs/tools/templates/page.html +53 -0
  264. oaken-0.1.0/docs/tools/tests/conftest.py +34 -0
  265. oaken-0.1.0/docs/tools/tests/test_check_docs.py +187 -0
  266. oaken-0.1.0/docs/tools/tests/test_gen_evaluation.py +36 -0
  267. oaken-0.1.0/docs/tools/tests/test_publish.py +69 -0
  268. oaken-0.1.0/docs/tools/tests/test_real_docs.py +42 -0
  269. oaken-0.1.0/docs/tools/tests/test_site.py +242 -0
  270. oaken-0.1.0/docs/tools/tests/test_softmap.py +174 -0
  271. oaken-0.1.0/docs/tools/tests/treekit.py +130 -0
  272. oaken-0.1.0/pyproject.toml +303 -0
  273. oaken-0.1.0/src/oaken/__init__.py +4 -0
  274. oaken-0.1.0/src/oaken/ai/__init__.py +21 -0
  275. oaken-0.1.0/src/oaken/ai/access.py +40 -0
  276. oaken-0.1.0/src/oaken/ai/cache.py +66 -0
  277. oaken-0.1.0/src/oaken/ai/caller.py +8 -0
  278. oaken-0.1.0/src/oaken/ai/fresh.py +9 -0
  279. oaken-0.1.0/src/oaken/ai/generate.py +138 -0
  280. oaken-0.1.0/src/oaken/ai/prompts.py +104 -0
  281. oaken-0.1.0/src/oaken/ai/summarize.py +29 -0
  282. oaken-0.1.0/src/oaken/ai/tests/__init__.py +1 -0
  283. oaken-0.1.0/src/oaken/ai/tests/conftest.py +60 -0
  284. oaken-0.1.0/src/oaken/ai/tests/test_access.py +45 -0
  285. oaken-0.1.0/src/oaken/ai/tests/test_generate.py +149 -0
  286. oaken-0.1.0/src/oaken/ai/tests/test_lint_prompts.py +92 -0
  287. oaken-0.1.0/src/oaken/ai/tests/test_untrusted.py +67 -0
  288. oaken-0.1.0/src/oaken/ai/workspaces.py +65 -0
  289. oaken-0.1.0/src/oaken/api/__init__.py +8 -0
  290. oaken-0.1.0/src/oaken/api/app.py +383 -0
  291. oaken-0.1.0/src/oaken/api/errors.py +65 -0
  292. oaken-0.1.0/src/oaken/api/guard.py +272 -0
  293. oaken-0.1.0/src/oaken/api/mcp_server.py +305 -0
  294. oaken-0.1.0/src/oaken/api/models.py +79 -0
  295. oaken-0.1.0/src/oaken/api/openapi.py +250 -0
  296. oaken-0.1.0/src/oaken/api/ratelimit.py +37 -0
  297. oaken-0.1.0/src/oaken/api/ring.py +100 -0
  298. oaken-0.1.0/src/oaken/api/runtime.py +172 -0
  299. oaken-0.1.0/src/oaken/api/server.py +86 -0
  300. oaken-0.1.0/src/oaken/api/stats.py +196 -0
  301. oaken-0.1.0/src/oaken/api/templates/oaken-logo.png +0 -0
  302. oaken-0.1.0/src/oaken/api/templates/stats.html +316 -0
  303. oaken-0.1.0/src/oaken/api/templates/stats.js +66 -0
  304. oaken-0.1.0/src/oaken/api/tests/__init__.py +1 -0
  305. oaken-0.1.0/src/oaken/api/tests/conftest.py +109 -0
  306. oaken-0.1.0/src/oaken/api/tests/test_agents.py +174 -0
  307. oaken-0.1.0/src/oaken/api/tests/test_events.py +166 -0
  308. oaken-0.1.0/src/oaken/api/tests/test_guard.py +180 -0
  309. oaken-0.1.0/src/oaken/api/tests/test_mcp.py +317 -0
  310. oaken-0.1.0/src/oaken/api/tests/test_mcp_agent.py +206 -0
  311. oaken-0.1.0/src/oaken/api/tests/test_operations.py +153 -0
  312. oaken-0.1.0/src/oaken/api/tests/test_runtime.py +101 -0
  313. oaken-0.1.0/src/oaken/api/tests/test_stats.py +116 -0
  314. oaken-0.1.0/src/oaken/core/__init__.py +2 -0
  315. oaken-0.1.0/src/oaken/core/actors.py +22 -0
  316. oaken-0.1.0/src/oaken/core/agents.py +197 -0
  317. oaken-0.1.0/src/oaken/core/attrs.py +214 -0
  318. oaken-0.1.0/src/oaken/core/clock.py +49 -0
  319. oaken-0.1.0/src/oaken/core/cron.py +129 -0
  320. oaken-0.1.0/src/oaken/core/db.py +325 -0
  321. oaken-0.1.0/src/oaken/core/errors.py +107 -0
  322. oaken-0.1.0/src/oaken/core/events.py +323 -0
  323. oaken-0.1.0/src/oaken/core/ids.py +46 -0
  324. oaken-0.1.0/src/oaken/core/jobs.py +837 -0
  325. oaken-0.1.0/src/oaken/core/logging.py +122 -0
  326. oaken-0.1.0/src/oaken/core/mailbox.py +207 -0
  327. oaken-0.1.0/src/oaken/core/migrations/0001_jobs.sql +29 -0
  328. oaken-0.1.0/src/oaken/core/migrations/0002_schedules.sql +15 -0
  329. oaken-0.1.0/src/oaken/core/migrations/0003_swarm.sql +32 -0
  330. oaken-0.1.0/src/oaken/core/migrations/0004_raw_store.sql +55 -0
  331. oaken-0.1.0/src/oaken/core/migrations/0005_message_attrs.sql +29 -0
  332. oaken-0.1.0/src/oaken/core/migrations/0006_store_identity.sql +9 -0
  333. oaken-0.1.0/src/oaken/core/migrations/0007_ingest.sql +33 -0
  334. oaken-0.1.0/src/oaken/core/migrations/0008_llm_cache.sql +20 -0
  335. oaken-0.1.0/src/oaken/core/migrations/0009_audit_log.sql +21 -0
  336. oaken-0.1.0/src/oaken/core/migrations/0010_sync_schedules.sql +29 -0
  337. oaken-0.1.0/src/oaken/core/migrations/0011_operation_settings.sql +10 -0
  338. oaken-0.1.0/src/oaken/core/migrations/0012_location_attrs.sql +33 -0
  339. oaken-0.1.0/src/oaken/core/migrations/0013_pipeline_control.sql +14 -0
  340. oaken-0.1.0/src/oaken/core/migrations/0014_mailbox_nodes.sql +18 -0
  341. oaken-0.1.0/src/oaken/core/migrations/0015_account_removed.sql +6 -0
  342. oaken-0.1.0/src/oaken/core/migrations/0016_savings.sql +20 -0
  343. oaken-0.1.0/src/oaken/core/operations/__init__.py +44 -0
  344. oaken-0.1.0/src/oaken/core/operations/builtin/__init__.py +46 -0
  345. oaken-0.1.0/src/oaken/core/operations/builtin/accounts.py +300 -0
  346. oaken-0.1.0/src/oaken/core/operations/builtin/agents.py +122 -0
  347. oaken-0.1.0/src/oaken/core/operations/builtin/common.py +154 -0
  348. oaken-0.1.0/src/oaken/core/operations/builtin/enrichment.py +88 -0
  349. oaken-0.1.0/src/oaken/core/operations/builtin/filtering.py +255 -0
  350. oaken-0.1.0/src/oaken/core/operations/builtin/jobs.py +287 -0
  351. oaken-0.1.0/src/oaken/core/operations/builtin/mail.py +410 -0
  352. oaken-0.1.0/src/oaken/core/operations/builtin/mailbox.py +231 -0
  353. oaken-0.1.0/src/oaken/core/operations/builtin/messages.py +713 -0
  354. oaken-0.1.0/src/oaken/core/operations/builtin/savings.py +90 -0
  355. oaken-0.1.0/src/oaken/core/operations/builtin/schedules.py +187 -0
  356. oaken-0.1.0/src/oaken/core/operations/builtin/system.py +546 -0
  357. oaken-0.1.0/src/oaken/core/operations/caller.py +65 -0
  358. oaken-0.1.0/src/oaken/core/operations/client.py +181 -0
  359. oaken-0.1.0/src/oaken/core/operations/context.py +23 -0
  360. oaken-0.1.0/src/oaken/core/operations/exposure.py +82 -0
  361. oaken-0.1.0/src/oaken/core/operations/gate.py +112 -0
  362. oaken-0.1.0/src/oaken/core/operations/limits.py +72 -0
  363. oaken-0.1.0/src/oaken/core/operations/openapi.py +126 -0
  364. oaken-0.1.0/src/oaken/core/operations/plugin_ops.py +92 -0
  365. oaken-0.1.0/src/oaken/core/operations/registry.py +227 -0
  366. oaken-0.1.0/src/oaken/core/operations/savings.py +76 -0
  367. oaken-0.1.0/src/oaken/core/operations/services.py +103 -0
  368. oaken-0.1.0/src/oaken/core/operations/tests/__init__.py +1 -0
  369. oaken-0.1.0/src/oaken/core/operations/tests/conftest.py +234 -0
  370. oaken-0.1.0/src/oaken/core/operations/tests/operation_schemas.json +7057 -0
  371. oaken-0.1.0/src/oaken/core/operations/tests/test_accounts.py +184 -0
  372. oaken-0.1.0/src/oaken/core/operations/tests/test_enrichment_sieve.py +171 -0
  373. oaken-0.1.0/src/oaken/core/operations/tests/test_exposure.py +189 -0
  374. oaken-0.1.0/src/oaken/core/operations/tests/test_folders_counts.py +67 -0
  375. oaken-0.1.0/src/oaken/core/operations/tests/test_gate.py +195 -0
  376. oaken-0.1.0/src/oaken/core/operations/tests/test_job_control.py +74 -0
  377. oaken-0.1.0/src/oaken/core/operations/tests/test_limits.py +71 -0
  378. oaken-0.1.0/src/oaken/core/operations/tests/test_operations.py +199 -0
  379. oaken-0.1.0/src/oaken/core/operations/tests/test_paging.py +208 -0
  380. oaken-0.1.0/src/oaken/core/operations/tests/test_pipeline_control.py +89 -0
  381. oaken-0.1.0/src/oaken/core/operations/tests/test_policy.py +29 -0
  382. oaken-0.1.0/src/oaken/core/operations/tests/test_read_state.py +261 -0
  383. oaken-0.1.0/src/oaken/core/operations/tests/test_receive_only.py +126 -0
  384. oaken-0.1.0/src/oaken/core/operations/tests/test_registry.py +148 -0
  385. oaken-0.1.0/src/oaken/core/operations/tests/test_savings.py +83 -0
  386. oaken-0.1.0/src/oaken/core/operations/tests/test_schema_snapshot.py +73 -0
  387. oaken-0.1.0/src/oaken/core/operations/tests/test_thread.py +104 -0
  388. oaken-0.1.0/src/oaken/core/operations/tests/test_ui_contract.py +86 -0
  389. oaken-0.1.0/src/oaken/core/paths.py +42 -0
  390. oaken-0.1.0/src/oaken/core/rawstore.py +701 -0
  391. oaken-0.1.0/src/oaken/core/scheduler.py +157 -0
  392. oaken-0.1.0/src/oaken/core/search/__init__.py +28 -0
  393. oaken-0.1.0/src/oaken/core/search/ask.py +175 -0
  394. oaken-0.1.0/src/oaken/core/search/context.py +297 -0
  395. oaken-0.1.0/src/oaken/core/search/hybrid.py +385 -0
  396. oaken-0.1.0/src/oaken/core/search/query.py +37 -0
  397. oaken-0.1.0/src/oaken/core/search/quotes.py +36 -0
  398. oaken-0.1.0/src/oaken/core/search/rewrite.py +61 -0
  399. oaken-0.1.0/src/oaken/core/search/service.py +118 -0
  400. oaken-0.1.0/src/oaken/core/search/signals.py +79 -0
  401. oaken-0.1.0/src/oaken/core/search/tests/__init__.py +1 -0
  402. oaken-0.1.0/src/oaken/core/search/tests/conftest.py +80 -0
  403. oaken-0.1.0/src/oaken/core/search/tests/test_ask.py +164 -0
  404. oaken-0.1.0/src/oaken/core/search/tests/test_context.py +120 -0
  405. oaken-0.1.0/src/oaken/core/search/tests/test_hybrid.py +204 -0
  406. oaken-0.1.0/src/oaken/core/search/tests/test_query.py +33 -0
  407. oaken-0.1.0/src/oaken/core/search/tests/test_quotes.py +36 -0
  408. oaken-0.1.0/src/oaken/core/search/tests/test_signals.py +29 -0
  409. oaken-0.1.0/src/oaken/core/settings.py +458 -0
  410. oaken-0.1.0/src/oaken/core/tests/__init__.py +1 -0
  411. oaken-0.1.0/src/oaken/core/tests/conftest.py +50 -0
  412. oaken-0.1.0/src/oaken/core/tests/event_snapshot.json +149 -0
  413. oaken-0.1.0/src/oaken/core/tests/test_cron.py +140 -0
  414. oaken-0.1.0/src/oaken/core/tests/test_db.py +253 -0
  415. oaken-0.1.0/src/oaken/core/tests/test_event_snapshot.py +72 -0
  416. oaken-0.1.0/src/oaken/core/tests/test_events.py +150 -0
  417. oaken-0.1.0/src/oaken/core/tests/test_jobs.py +526 -0
  418. oaken-0.1.0/src/oaken/core/tests/test_logging.py +97 -0
  419. oaken-0.1.0/src/oaken/core/tests/test_rawstore.py +428 -0
  420. oaken-0.1.0/src/oaken/core/tests/test_relocation.py +47 -0
  421. oaken-0.1.0/src/oaken/core/tests/test_scheduler.py +193 -0
  422. oaken-0.1.0/src/oaken/core/tests/test_settings.py +93 -0
  423. oaken-0.1.0/src/oaken/core/tests/test_small_modules.py +79 -0
  424. oaken-0.1.0/src/oaken/core/tests/test_swarm.py +439 -0
  425. oaken-0.1.0/src/oaken/core/untrusted.py +88 -0
  426. oaken-0.1.0/src/oaken/daemon/__init__.py +7 -0
  427. oaken-0.1.0/src/oaken/daemon/__main__.py +8 -0
  428. oaken-0.1.0/src/oaken/daemon/core.py +272 -0
  429. oaken-0.1.0/src/oaken/daemon/lifecycle.py +248 -0
  430. oaken-0.1.0/src/oaken/daemon/tests/__init__.py +1 -0
  431. oaken-0.1.0/src/oaken/daemon/tests/conftest.py +31 -0
  432. oaken-0.1.0/src/oaken/daemon/tests/test_daemon.py +295 -0
  433. oaken-0.1.0/src/oaken/daemon/tests/test_mcp.py +122 -0
  434. oaken-0.1.0/src/oaken/daemon/tests/test_units.py +77 -0
  435. oaken-0.1.0/src/oaken/daemon/units.py +101 -0
  436. oaken-0.1.0/src/oaken/evals/__init__.py +140 -0
  437. oaken-0.1.0/src/oaken/evals/__main__.py +161 -0
  438. oaken-0.1.0/src/oaken/evals/retrieval/corpus.py +301 -0
  439. oaken-0.1.0/src/oaken/evals/retrieval/embedder.py +71 -0
  440. oaken-0.1.0/src/oaken/evals/retrieval/metrics.py +28 -0
  441. oaken-0.1.0/src/oaken/evals/retrieval/reader.py +61 -0
  442. oaken-0.1.0/src/oaken/evals/retrieval/report.py +117 -0
  443. oaken-0.1.0/src/oaken/evals/retrieval/run.py +389 -0
  444. oaken-0.1.0/src/oaken/evals/retrieval/tests/__init__.py +1 -0
  445. oaken-0.1.0/src/oaken/evals/retrieval/tests/test_corpus.py +22 -0
  446. oaken-0.1.0/src/oaken/evals/retrieval/tests/test_metrics.py +22 -0
  447. oaken-0.1.0/src/oaken/evals/retrieval/tests/test_retrieval_eval.py +55 -0
  448. oaken-0.1.0/src/oaken/index/__init__.py +52 -0
  449. oaken-0.1.0/src/oaken/index/analyze.py +51 -0
  450. oaken-0.1.0/src/oaken/index/migrations/0001_index.sql +85 -0
  451. oaken-0.1.0/src/oaken/index/migrations/0002_location.sql +6 -0
  452. oaken-0.1.0/src/oaken/index/migrations/0003_threading.sql +9 -0
  453. oaken-0.1.0/src/oaken/index/query.py +264 -0
  454. oaken-0.1.0/src/oaken/index/service.py +343 -0
  455. oaken-0.1.0/src/oaken/index/store.py +893 -0
  456. oaken-0.1.0/src/oaken/index/tests/__init__.py +1 -0
  457. oaken-0.1.0/src/oaken/index/tests/conftest.py +76 -0
  458. oaken-0.1.0/src/oaken/index/tests/test_query.py +186 -0
  459. oaken-0.1.0/src/oaken/index/tests/test_rebuild.py +357 -0
  460. oaken-0.1.0/src/oaken/index/tests/test_store.py +426 -0
  461. oaken-0.1.0/src/oaken/ingest/__init__.py +44 -0
  462. oaken-0.1.0/src/oaken/ingest/backends.py +142 -0
  463. oaken-0.1.0/src/oaken/ingest/pipeline.py +790 -0
  464. oaken-0.1.0/src/oaken/ingest/pipeline_control.py +82 -0
  465. oaken-0.1.0/src/oaken/ingest/quarantine.py +121 -0
  466. oaken-0.1.0/src/oaken/ingest/schedule.py +706 -0
  467. oaken-0.1.0/src/oaken/ingest/sync.py +171 -0
  468. oaken-0.1.0/src/oaken/ingest/tests/__init__.py +1 -0
  469. oaken-0.1.0/src/oaken/ingest/tests/conftest.py +195 -0
  470. oaken-0.1.0/src/oaken/ingest/tests/test_crash.py +112 -0
  471. oaken-0.1.0/src/oaken/ingest/tests/test_pipeline.py +260 -0
  472. oaken-0.1.0/src/oaken/ingest/tests/test_plugin_stages.py +83 -0
  473. oaken-0.1.0/src/oaken/ingest/tests/test_schedule.py +670 -0
  474. oaken-0.1.0/src/oaken/ingest/tests/test_stages.py +177 -0
  475. oaken-0.1.0/src/oaken/ingest/usage.py +168 -0
  476. oaken-0.1.0/src/oaken/mail/__init__.py +38 -0
  477. oaken-0.1.0/src/oaken/mail/attachments.py +87 -0
  478. oaken-0.1.0/src/oaken/mail/chunk.py +133 -0
  479. oaken-0.1.0/src/oaken/mail/clean.py +415 -0
  480. oaken-0.1.0/src/oaken/mail/filtering.py +211 -0
  481. oaken-0.1.0/src/oaken/mail/html.py +188 -0
  482. oaken-0.1.0/src/oaken/mail/parse.py +386 -0
  483. oaken-0.1.0/src/oaken/mail/sendpolicy.py +42 -0
  484. oaken-0.1.0/src/oaken/mail/sieve/__init__.py +31 -0
  485. oaken-0.1.0/src/oaken/mail/sieve/interp.py +546 -0
  486. oaken-0.1.0/src/oaken/mail/sieve/match.py +159 -0
  487. oaken-0.1.0/src/oaken/mail/sieve/parser.py +288 -0
  488. oaken-0.1.0/src/oaken/mail/sieve/script.py +244 -0
  489. oaken-0.1.0/src/oaken/mail/sieve/view.py +45 -0
  490. oaken-0.1.0/src/oaken/mail/tests/__init__.py +1 -0
  491. oaken-0.1.0/src/oaken/mail/tests/conftest.py +59 -0
  492. oaken-0.1.0/src/oaken/mail/tests/fixtures/alternative/faithful.cleaned.txt +4 -0
  493. oaken-0.1.0/src/oaken/mail/tests/fixtures/alternative/faithful.eml +21 -0
  494. oaken-0.1.0/src/oaken/mail/tests/fixtures/alternative/stub-plain.cleaned.txt +5 -0
  495. oaken-0.1.0/src/oaken/mail/tests/fixtures/alternative/stub-plain.eml +20 -0
  496. oaken-0.1.0/src/oaken/mail/tests/fixtures/attachments/exe-and-inline-image.cleaned.txt +1 -0
  497. oaken-0.1.0/src/oaken/mail/tests/fixtures/attachments/exe-and-inline-image.eml +28 -0
  498. oaken-0.1.0/src/oaken/mail/tests/fixtures/attachments/pdf-small.cleaned.txt +1 -0
  499. oaken-0.1.0/src/oaken/mail/tests/fixtures/attachments/pdf-small.eml +32 -0
  500. oaken-0.1.0/src/oaken/mail/tests/fixtures/attachments/text-attachment.cleaned.txt +1 -0
  501. oaken-0.1.0/src/oaken/mail/tests/fixtures/attachments/text-attachment.eml +20 -0
  502. oaken-0.1.0/src/oaken/mail/tests/fixtures/bounce/dsn.cleaned.txt +5 -0
  503. oaken-0.1.0/src/oaken/mail/tests/fixtures/bounce/dsn.eml +35 -0
  504. oaken-0.1.0/src/oaken/mail/tests/fixtures/calendar/invite.cleaned.txt +3 -0
  505. oaken-0.1.0/src/oaken/mail/tests/fixtures/calendar/invite.eml +32 -0
  506. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/bad-bytes-utf8.cleaned.txt +1 -0
  507. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/bad-bytes-utf8.eml +10 -0
  508. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/koi8r-qp.cleaned.txt +1 -0
  509. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/koi8r-qp.eml +11 -0
  510. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/latin1-qp.cleaned.txt +3 -0
  511. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/latin1-qp.eml +12 -0
  512. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/raw-8bit-latin1.cleaned.txt +1 -0
  513. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/raw-8bit-latin1.eml +10 -0
  514. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/shiftjis-base64.cleaned.txt +1 -0
  515. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/shiftjis-base64.eml +10 -0
  516. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/unknown-charset.cleaned.txt +1 -0
  517. oaken-0.1.0/src/oaken/mail/tests/fixtures/charset/unknown-charset.eml +10 -0
  518. oaken-0.1.0/src/oaken/mail/tests/fixtures/disclaimer/legal-footer.cleaned.txt +5 -0
  519. oaken-0.1.0/src/oaken/mail/tests/fixtures/disclaimer/legal-footer.eml +20 -0
  520. oaken-0.1.0/src/oaken/mail/tests/fixtures/disclaimer/only-disclaimer.cleaned.txt +1 -0
  521. oaken-0.1.0/src/oaken/mail/tests/fixtures/disclaimer/only-disclaimer.eml +9 -0
  522. oaken-0.1.0/src/oaken/mail/tests/fixtures/forward/attached-forward.cleaned.txt +1 -0
  523. oaken-0.1.0/src/oaken/mail/tests/fixtures/forward/attached-forward.eml +28 -0
  524. oaken-0.1.0/src/oaken/mail/tests/fixtures/forward/inline-forward.cleaned.txt +13 -0
  525. oaken-0.1.0/src/oaken/mail/tests/fixtures/forward/inline-forward.eml +22 -0
  526. oaken-0.1.0/src/oaken/mail/tests/fixtures/forward/nested-forward.cleaned.txt +1 -0
  527. oaken-0.1.0/src/oaken/mail/tests/fixtures/forward/nested-forward.eml +47 -0
  528. oaken-0.1.0/src/oaken/mail/tests/fixtures/html/data-table.cleaned.txt +11 -0
  529. oaken-0.1.0/src/oaken/mail/tests/fixtures/html/data-table.eml +12 -0
  530. oaken-0.1.0/src/oaken/mail/tests/fixtures/html/html-only.cleaned.txt +11 -0
  531. oaken-0.1.0/src/oaken/mail/tests/fixtures/html/html-only.eml +14 -0
  532. oaken-0.1.0/src/oaken/mail/tests/fixtures/html/marketing.cleaned.txt +8 -0
  533. oaken-0.1.0/src/oaken/mail/tests/fixtures/html/marketing.eml +20 -0
  534. oaken-0.1.0/src/oaken/mail/tests/fixtures/list/mailman-post.cleaned.txt +6 -0
  535. oaken-0.1.0/src/oaken/mail/tests/fixtures/list/mailman-post.eml +21 -0
  536. oaken-0.1.0/src/oaken/mail/tests/fixtures/list/newsletter.cleaned.txt +7 -0
  537. oaken-0.1.0/src/oaken/mail/tests/fixtures/list/newsletter.eml +22 -0
  538. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/bad-base64.cleaned.txt +1 -0
  539. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/bad-base64.eml +10 -0
  540. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/bad-boundary.cleaned.txt +5 -0
  541. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/bad-boundary.eml +13 -0
  542. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/bad-date-and-from.cleaned.txt +1 -0
  543. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/bad-date-and-from.eml +7 -0
  544. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/binary-garbage.cleaned.txt +4 -0
  545. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/binary-garbage.eml +0 -0
  546. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/duplicate-headers.cleaned.txt +1 -0
  547. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/duplicate-headers.eml +10 -0
  548. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/empty.cleaned.txt +1 -0
  549. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/empty.eml +0 -0
  550. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/headers-only.cleaned.txt +1 -0
  551. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/headers-only.eml +5 -0
  552. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/no-headers.cleaned.txt +1 -0
  553. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/no-headers.eml +1 -0
  554. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/truncated-mime.cleaned.txt +1 -0
  555. oaken-0.1.0/src/oaken/mail/tests/fixtures/malformed/truncated-mime.eml +17 -0
  556. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/crlf.cleaned.txt +4 -0
  557. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/crlf.eml +12 -0
  558. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/mobile.cleaned.txt +1 -0
  559. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/mobile.eml +11 -0
  560. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/simple.cleaned.txt +7 -0
  561. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/simple.eml +15 -0
  562. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/unicode-and-invisibles.cleaned.txt +7 -0
  563. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/unicode-and-invisibles.eml +18 -0
  564. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/with-closing-signature.cleaned.txt +3 -0
  565. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/with-closing-signature.eml +15 -0
  566. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/with-signature-delim.cleaned.txt +2 -0
  567. oaken-0.1.0/src/oaken/mail/tests/fixtures/plain/with-signature-delim.eml +15 -0
  568. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/german.cleaned.txt +1 -0
  569. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/german.eml +13 -0
  570. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/gmail-chain.cleaned.txt +1 -0
  571. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/gmail-chain.eml +19 -0
  572. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/html-gmail-quote.cleaned.txt +1 -0
  573. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/html-gmail-quote.eml +12 -0
  574. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/interleaved.cleaned.txt +7 -0
  575. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/interleaved.eml +22 -0
  576. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/original-message-marker.cleaned.txt +1 -0
  577. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/original-message-marker.eml +17 -0
  578. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/outlook-chain.cleaned.txt +4 -0
  579. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/outlook-chain.eml +21 -0
  580. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/wrapped-attribution.cleaned.txt +1 -0
  581. oaken-0.1.0/src/oaken/mail/tests/fixtures/reply/wrapped-attribution.eml +14 -0
  582. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/orphan-reply.cleaned.txt +1 -0
  583. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/orphan-reply.eml +9 -0
  584. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-1.cleaned.txt +1 -0
  585. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-1.eml +9 -0
  586. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-2.cleaned.txt +1 -0
  587. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-2.eml +11 -0
  588. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-3.cleaned.txt +1 -0
  589. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-3.eml +11 -0
  590. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-4.cleaned.txt +1 -0
  591. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t1-4.eml +11 -0
  592. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t2-1.cleaned.txt +1 -0
  593. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t2-1.eml +9 -0
  594. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t2-2.cleaned.txt +1 -0
  595. oaken-0.1.0/src/oaken/mail/tests/fixtures/threads/t2-2.eml +11 -0
  596. oaken-0.1.0/src/oaken/mail/tests/sieve_helpers.py +46 -0
  597. oaken-0.1.0/src/oaken/mail/tests/test_attachments.py +38 -0
  598. oaken-0.1.0/src/oaken/mail/tests/test_chunk.py +130 -0
  599. oaken-0.1.0/src/oaken/mail/tests/test_clean.py +288 -0
  600. oaken-0.1.0/src/oaken/mail/tests/test_filtering.py +296 -0
  601. oaken-0.1.0/src/oaken/mail/tests/test_fixtures.py +67 -0
  602. oaken-0.1.0/src/oaken/mail/tests/test_fuzz.py +51 -0
  603. oaken-0.1.0/src/oaken/mail/tests/test_html.py +82 -0
  604. oaken-0.1.0/src/oaken/mail/tests/test_mailbox.py +156 -0
  605. oaken-0.1.0/src/oaken/mail/tests/test_parse.py +271 -0
  606. oaken-0.1.0/src/oaken/mail/tests/test_sieve_parser.py +144 -0
  607. oaken-0.1.0/src/oaken/mail/tests/test_sieve_rfc.py +108 -0
  608. oaken-0.1.0/src/oaken/mail/tests/test_sieve_run.py +311 -0
  609. oaken-0.1.0/src/oaken/mail/tests/test_sieve_safety.py +174 -0
  610. oaken-0.1.0/src/oaken/mail/tests/test_thread_tree.py +70 -0
  611. oaken-0.1.0/src/oaken/mail/tests/test_threading.py +88 -0
  612. oaken-0.1.0/src/oaken/mail/tests/test_tokens.py +71 -0
  613. oaken-0.1.0/src/oaken/mail/thread_tree.py +83 -0
  614. oaken-0.1.0/src/oaken/mail/threading.py +92 -0
  615. oaken-0.1.0/src/oaken/mail/tokens.py +69 -0
  616. oaken-0.1.0/src/oaken/plugins/__init__.py +4 -0
  617. oaken-0.1.0/src/oaken/plugins/accounts.py +78 -0
  618. oaken-0.1.0/src/oaken/plugins/adapt.py +153 -0
  619. oaken-0.1.0/src/oaken/plugins/authorize.py +90 -0
  620. oaken-0.1.0/src/oaken/plugins/base.py +211 -0
  621. oaken-0.1.0/src/oaken/plugins/contracts.py +593 -0
  622. oaken-0.1.0/src/oaken/plugins/host.py +581 -0
  623. oaken-0.1.0/src/oaken/plugins/jobs.py +105 -0
  624. oaken-0.1.0/src/oaken/plugins/tests/__init__.py +1 -0
  625. oaken-0.1.0/src/oaken/plugins/tests/conftest.py +35 -0
  626. oaken-0.1.0/src/oaken/plugins/tests/contract_snapshot.json +342 -0
  627. oaken-0.1.0/src/oaken/plugins/tests/test_account_names.py +59 -0
  628. oaken-0.1.0/src/oaken/plugins/tests/test_accounts.py +133 -0
  629. oaken-0.1.0/src/oaken/plugins/tests/test_adapt.py +179 -0
  630. oaken-0.1.0/src/oaken/plugins/tests/test_config_validation.py +111 -0
  631. oaken-0.1.0/src/oaken/plugins/tests/test_contract_snapshot.py +139 -0
  632. oaken-0.1.0/src/oaken/plugins/tests/test_host.py +394 -0
  633. oaken-0.1.0/src/oaken/plugins/tests/test_plugin_events.py +184 -0
  634. oaken-0.1.0/src/oaken/plugins/tests/test_plugin_jobs.py +106 -0
  635. oaken-0.1.0/src/oaken/plugins/tests/test_plugin_operations.py +145 -0
  636. oaken-0.1.0/src/oaken/plugins/tests/test_plugin_schedules.py +108 -0
  637. oaken-0.1.0/src/oaken/plugins/validate.py +268 -0
  638. oaken-0.1.0/src/oaken/py.typed +0 -0
  639. oaken-0.1.0/src/oaken/readstate/__init__.py +25 -0
  640. oaken-0.1.0/src/oaken/readstate/audit.py +116 -0
  641. oaken-0.1.0/src/oaken/readstate/service.py +544 -0
  642. oaken-0.1.0/src/oaken/readstate/tests/__init__.py +1 -0
  643. oaken-0.1.0/src/oaken/readstate/tests/conftest.py +133 -0
  644. oaken-0.1.0/src/oaken/readstate/tests/test_policy.py +128 -0
  645. oaken-0.1.0/src/oaken/readstate/tests/test_presented.py +74 -0
  646. oaken-0.1.0/src/oaken/readstate/tests/test_undo.py +97 -0
  647. oaken-0.1.0/src/oaken/readstate/tests/test_writeback.py +179 -0
  648. oaken-0.1.0/src/oaken/testing/__init__.py +3 -0
  649. oaken-0.1.0/src/oaken/testing/contracts.py +550 -0
  650. oaken-0.1.0/src/oaken/testing/corpus.py +43 -0
  651. oaken-0.1.0/src/oaken/testing/fakes.py +375 -0
  652. oaken-0.1.0/src/oaken/testing/tests/__init__.py +1 -0
  653. oaken-0.1.0/src/oaken/testing/tests/test_contracts.py +210 -0
  654. oaken-0.1.0/src/oaken/testing/tests/test_extension_contracts.py +109 -0
  655. oaken-0.1.0/src/oaken_enrichers/__init__.py +14 -0
  656. oaken-0.1.0/src/oaken_enrichers/_common.py +78 -0
  657. oaken-0.1.0/src/oaken_enrichers/actions.py +156 -0
  658. oaken-0.1.0/src/oaken_enrichers/inspector.py +192 -0
  659. oaken-0.1.0/src/oaken_enrichers/summary.py +89 -0
  660. oaken-0.1.0/src/oaken_enrichers/tests/__init__.py +1 -0
  661. oaken-0.1.0/src/oaken_enrichers/tests/conftest.py +128 -0
  662. oaken-0.1.0/src/oaken_enrichers/tests/evals/actions/injection.json +25 -0
  663. oaken-0.1.0/src/oaken_enrichers/tests/evals/actions/invented-task-is-dropped.json +24 -0
  664. oaken-0.1.0/src/oaken_enrichers/tests/evals/actions/nothing-asked.json +17 -0
  665. oaken-0.1.0/src/oaken_enrichers/tests/evals/actions/task-with-deadline.json +30 -0
  666. oaken-0.1.0/src/oaken_enrichers/tests/evals/inspector/clean.json +26 -0
  667. oaken-0.1.0/src/oaken_enrichers/tests/evals/inspector/dmarc-fail-reply-to.json +27 -0
  668. oaken-0.1.0/src/oaken_enrichers/tests/evals/inspector/risky-attachment.json +23 -0
  669. oaken-0.1.0/src/oaken_enrichers/tests/evals/summary/injection.json +26 -0
  670. oaken-0.1.0/src/oaken_enrichers/tests/evals/summary/invoice.json +27 -0
  671. oaken-0.1.0/src/oaken_enrichers/tests/evals/summary/reply-with-parent.json +26 -0
  672. oaken-0.1.0/src/oaken_enrichers/tests/evals/summary/reschedule.json +33 -0
  673. oaken-0.1.0/src/oaken_enrichers/tests/evals/triage/colleague-asks.json +30 -0
  674. oaken-0.1.0/src/oaken_enrichers/tests/evals/triage/family.json +25 -0
  675. oaken-0.1.0/src/oaken_enrichers/tests/evals/triage/injection.json +28 -0
  676. oaken-0.1.0/src/oaken_enrichers/tests/evals/triage/mailing-list.json +20 -0
  677. oaken-0.1.0/src/oaken_enrichers/tests/evals/triage/no-reply.json +15 -0
  678. oaken-0.1.0/src/oaken_enrichers/tests/evals/triage/receipt.json +26 -0
  679. oaken-0.1.0/src/oaken_enrichers/tests/test_actions.py +116 -0
  680. oaken-0.1.0/src/oaken_enrichers/tests/test_evals.py +72 -0
  681. oaken-0.1.0/src/oaken_enrichers/tests/test_injection.py +85 -0
  682. oaken-0.1.0/src/oaken_enrichers/tests/test_inspector.py +179 -0
  683. oaken-0.1.0/src/oaken_enrichers/tests/test_pipeline.py +180 -0
  684. oaken-0.1.0/src/oaken_enrichers/tests/test_summary.py +98 -0
  685. oaken-0.1.0/src/oaken_enrichers/tests/test_triage.py +90 -0
  686. oaken-0.1.0/src/oaken_enrichers/triage.py +127 -0
  687. oaken-0.1.0/src/oaken_gmail/__init__.py +28 -0
  688. oaken-0.1.0/src/oaken_gmail/api.py +117 -0
  689. oaken-0.1.0/src/oaken_gmail/config.py +37 -0
  690. oaken-0.1.0/src/oaken_gmail/oauth.py +159 -0
  691. oaken-0.1.0/src/oaken_gmail/provider.py +582 -0
  692. oaken-0.1.0/src/oaken_gmail/tests/__init__.py +1 -0
  693. oaken-0.1.0/src/oaken_gmail/tests/conftest.py +353 -0
  694. oaken-0.1.0/src/oaken_gmail/tests/test_contract.py +34 -0
  695. oaken-0.1.0/src/oaken_gmail/tests/test_live.py +35 -0
  696. oaken-0.1.0/src/oaken_gmail/tests/test_oauth.py +236 -0
  697. oaken-0.1.0/src/oaken_gmail/tests/test_sync.py +325 -0
  698. oaken-0.1.0/src/oaken_gmail/tests/test_tokens.py +199 -0
  699. oaken-0.1.0/src/oaken_gmail/tests/test_write.py +156 -0
  700. oaken-0.1.0/src/oaken_gmail/tokens.py +227 -0
  701. oaken-0.1.0/src/oaken_imap/__init__.py +31 -0
  702. oaken-0.1.0/src/oaken_imap/config.py +42 -0
  703. oaken-0.1.0/src/oaken_imap/cursor.py +78 -0
  704. oaken-0.1.0/src/oaken_imap/folders.py +58 -0
  705. oaken-0.1.0/src/oaken_imap/password.py +51 -0
  706. oaken-0.1.0/src/oaken_imap/provider.py +404 -0
  707. oaken-0.1.0/src/oaken_imap/session.py +280 -0
  708. oaken-0.1.0/src/oaken_imap/tests/__init__.py +1 -0
  709. oaken-0.1.0/src/oaken_imap/tests/conftest.py +93 -0
  710. oaken-0.1.0/src/oaken_imap/tests/fake_server.py +458 -0
  711. oaken-0.1.0/src/oaken_imap/tests/test_contract.py +54 -0
  712. oaken-0.1.0/src/oaken_imap/tests/test_live.py +55 -0
  713. oaken-0.1.0/src/oaken_imap/tests/test_parse.py +145 -0
  714. oaken-0.1.0/src/oaken_imap/tests/test_security.py +123 -0
  715. oaken-0.1.0/src/oaken_imap/tests/test_sync.py +207 -0
  716. oaken-0.1.0/src/oaken_imap/tests/test_write.py +134 -0
  717. oaken-0.1.0/src/oaken_imap/uidset.py +36 -0
  718. oaken-0.1.0/src/oaken_ollama/__init__.py +14 -0
  719. oaken-0.1.0/src/oaken_ollama/client.py +196 -0
  720. oaken-0.1.0/src/oaken_ollama/embedder.py +55 -0
  721. oaken-0.1.0/src/oaken_ollama/llm.py +76 -0
  722. oaken-0.1.0/src/oaken_ollama/tests/__init__.py +1 -0
  723. oaken-0.1.0/src/oaken_ollama/tests/conftest.py +103 -0
  724. oaken-0.1.0/src/oaken_ollama/tests/fixtures/chat_json.json +7 -0
  725. oaken-0.1.0/src/oaken_ollama/tests/fixtures/chat_text.json +7 -0
  726. oaken-0.1.0/src/oaken_ollama/tests/fixtures/show_embed.json +5 -0
  727. oaken-0.1.0/src/oaken_ollama/tests/fixtures/show_llm.json +5 -0
  728. oaken-0.1.0/src/oaken_ollama/tests/fixtures/tags.json +8 -0
  729. oaken-0.1.0/src/oaken_ollama/tests/test_live.py +36 -0
  730. oaken-0.1.0/src/oaken_ollama/tests/test_ollama.py +273 -0
  731. oaken-0.1.0/src/oaken_smtp/__init__.py +27 -0
  732. oaken-0.1.0/src/oaken_smtp/config.py +39 -0
  733. oaken-0.1.0/src/oaken_smtp/message.py +87 -0
  734. oaken-0.1.0/src/oaken_smtp/password.py +51 -0
  735. oaken-0.1.0/src/oaken_smtp/provider.py +243 -0
  736. oaken-0.1.0/src/oaken_smtp/tests/__init__.py +1 -0
  737. oaken-0.1.0/src/oaken_smtp/tests/conftest.py +235 -0
  738. oaken-0.1.0/src/oaken_smtp/tests/test_config.py +97 -0
  739. oaken-0.1.0/src/oaken_smtp/tests/test_contract.py +38 -0
  740. oaken-0.1.0/src/oaken_smtp/tests/test_live.py +40 -0
  741. oaken-0.1.0/src/oaken_smtp/tests/test_message.py +64 -0
  742. oaken-0.1.0/src/oaken_smtp/tests/test_send.py +188 -0
  743. oaken-0.1.0/src/oaken_vec_sqlite/__init__.py +10 -0
  744. oaken-0.1.0/src/oaken_vec_sqlite/store.py +565 -0
  745. oaken-0.1.0/src/oaken_vec_sqlite/tests/__init__.py +1 -0
  746. oaken-0.1.0/src/oaken_vec_sqlite/tests/conftest.py +18 -0
  747. oaken-0.1.0/src/oaken_vec_sqlite/tests/test_benchmark.py +74 -0
  748. oaken-0.1.0/src/oaken_vec_sqlite/tests/test_contract.py +18 -0
  749. oaken-0.1.0/src/oaken_vec_sqlite/tests/test_store.py +419 -0
  750. oaken-0.1.0/tests/__init__.py +1 -0
  751. oaken-0.1.0/tests/test_import_boundaries.py +42 -0
  752. oaken-0.1.0/tests/test_repo_hygiene.py +59 -0
  753. oaken-0.1.0/tests/test_version_lockstep.py +43 -0
  754. oaken-0.1.0/uv.lock +2685 -0
@@ -0,0 +1,3 @@
1
+ # Generated site files must be byte-identical on every OS (check_docs compares bytes).
2
+ docs/** text eol=lf
3
+ docs/**/*.png binary
@@ -0,0 +1,41 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ test:
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ os: [ubuntu-latest, macos-latest, windows-latest]
17
+ python: ["3.11", "3.12"]
18
+ runs-on: ${{ matrix.os }}
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ - uses: astral-sh/setup-uv@v5
22
+ - run: uv python install ${{ matrix.python }}
23
+ - run: uv sync --python ${{ matrix.python }}
24
+ - run: uv run ruff check
25
+ - run: uv run ruff format --check
26
+ - run: uv run mypy
27
+ - run: uv run lint-imports
28
+ - run: uv run pytest
29
+
30
+ secrets:
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ - uses: actions/checkout@v4
34
+ - uses: astral-sh/setup-uv@v5
35
+ - run: uv sync
36
+ - name: detect-secrets
37
+ shell: bash
38
+ run: |
39
+ # generated site HTML carries SRI hashes, which look like secrets
40
+ git ls-files -z | grep -zvE '^docs/(.*\.html|sitemap\.xml)$' \
41
+ | xargs -0 uv run detect-secrets-hook --baseline .secrets.baseline
@@ -0,0 +1,18 @@
1
+ name: Docs check
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ check:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
16
+ - uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5
17
+ - run: uv sync
18
+ - run: uv run --group docs python docs/tools/check_docs.py
oaken-0.1.0/.gitignore ADDED
@@ -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,2 @@
1
+ # Automatically created by Grimp.
2
+ *