4dpocket 0.1.3__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 (273) hide show
  1. 4dpocket-0.1.3/.claude/AGENTS.md +1 -0
  2. 4dpocket-0.1.3/.claude/CLAUDE.md +65 -0
  3. 4dpocket-0.1.3/.claude/rules/README.md +41 -0
  4. 4dpocket-0.1.3/.claude/rules/coding-style.md +74 -0
  5. 4dpocket-0.1.3/.claude/rules/git-workflow.md +41 -0
  6. 4dpocket-0.1.3/.claude/rules/karpathy-guidelines.md +59 -0
  7. 4dpocket-0.1.3/.claude/rules/performance.md +40 -0
  8. 4dpocket-0.1.3/.claude/rules/security.md +41 -0
  9. 4dpocket-0.1.3/.claude/rules/testing.md +42 -0
  10. 4dpocket-0.1.3/.claude/skills/omc-reference/SKILL.md +141 -0
  11. 4dpocket-0.1.3/.dockerignore +51 -0
  12. 4dpocket-0.1.3/.env.example +77 -0
  13. 4dpocket-0.1.3/.github/workflows/ci.yml +127 -0
  14. 4dpocket-0.1.3/.github/workflows/release.yml +311 -0
  15. 4dpocket-0.1.3/.gitignore +74 -0
  16. 4dpocket-0.1.3/AGENTS.md +94 -0
  17. 4dpocket-0.1.3/CLAUDE.md +84 -0
  18. 4dpocket-0.1.3/CONTRIBUTING.md +122 -0
  19. 4dpocket-0.1.3/DEVELOPMENT.md +242 -0
  20. 4dpocket-0.1.3/Dockerfile +66 -0
  21. 4dpocket-0.1.3/LICENSE +675 -0
  22. 4dpocket-0.1.3/Makefile +25 -0
  23. 4dpocket-0.1.3/PKG-INFO +42 -0
  24. 4dpocket-0.1.3/PRD.md +1369 -0
  25. 4dpocket-0.1.3/README.md +495 -0
  26. 4dpocket-0.1.3/alembic.ini +37 -0
  27. 4dpocket-0.1.3/docker-compose.simple.yml +23 -0
  28. 4dpocket-0.1.3/docker-compose.yml +110 -0
  29. 4dpocket-0.1.3/docker-entrypoint.sh +26 -0
  30. 4dpocket-0.1.3/extension/.output/chrome-mv3/assets/options-CyTw-_vy.css +1 -0
  31. 4dpocket-0.1.3/extension/.output/chrome-mv3/assets/popup-BUGXBmrp.css +1 -0
  32. 4dpocket-0.1.3/extension/.output/chrome-mv3/assets/sidepanel-DZsNxMlg.css +1 -0
  33. 4dpocket-0.1.3/extension/.output/chrome-mv3/background.js +2 -0
  34. 4dpocket-0.1.3/extension/.output/chrome-mv3/chunks/auth-C4kx9BHk.js +1 -0
  35. 4dpocket-0.1.3/extension/.output/chrome-mv3/chunks/items-BcXKT9tZ.js +1 -0
  36. 4dpocket-0.1.3/extension/.output/chrome-mv3/chunks/options-DF3jaevs.js +1 -0
  37. 4dpocket-0.1.3/extension/.output/chrome-mv3/chunks/popup-yFNzwLsh.js +1 -0
  38. 4dpocket-0.1.3/extension/.output/chrome-mv3/chunks/sidepanel-R5bbuIM1.js +1 -0
  39. 4dpocket-0.1.3/extension/.output/chrome-mv3/content-scripts/content.js +46 -0
  40. 4dpocket-0.1.3/extension/.output/chrome-mv3/manifest.json +1 -0
  41. 4dpocket-0.1.3/extension/.output/chrome-mv3/options.html +58 -0
  42. 4dpocket-0.1.3/extension/.output/chrome-mv3/popup.html +89 -0
  43. 4dpocket-0.1.3/extension/.output/chrome-mv3/sidepanel.html +50 -0
  44. 4dpocket-0.1.3/extension/.wxt/tsconfig.json +28 -0
  45. 4dpocket-0.1.3/extension/.wxt/types/globals.d.ts +15 -0
  46. 4dpocket-0.1.3/extension/.wxt/types/i18n.d.ts +81 -0
  47. 4dpocket-0.1.3/extension/.wxt/types/imports.d.ts +22 -0
  48. 4dpocket-0.1.3/extension/.wxt/types/paths.d.ts +17 -0
  49. 4dpocket-0.1.3/extension/.wxt/wxt.d.ts +6 -0
  50. 4dpocket-0.1.3/extension/package.json +19 -0
  51. 4dpocket-0.1.3/extension/pnpm-lock.yaml +3412 -0
  52. 4dpocket-0.1.3/extension/src/core/api-client.ts +56 -0
  53. 4dpocket-0.1.3/extension/src/core/auth.ts +74 -0
  54. 4dpocket-0.1.3/extension/src/core/constants.ts +6 -0
  55. 4dpocket-0.1.3/extension/src/core/highlights.ts +36 -0
  56. 4dpocket-0.1.3/extension/src/core/items.ts +35 -0
  57. 4dpocket-0.1.3/extension/src/core/types.ts +41 -0
  58. 4dpocket-0.1.3/extension/src/entrypoints/background.ts +175 -0
  59. 4dpocket-0.1.3/extension/src/entrypoints/content.ts +242 -0
  60. 4dpocket-0.1.3/extension/src/entrypoints/options/index.html +57 -0
  61. 4dpocket-0.1.3/extension/src/entrypoints/options/main.ts +119 -0
  62. 4dpocket-0.1.3/extension/src/entrypoints/options/style.css +165 -0
  63. 4dpocket-0.1.3/extension/src/entrypoints/popup/index.html +87 -0
  64. 4dpocket-0.1.3/extension/src/entrypoints/popup/main.ts +162 -0
  65. 4dpocket-0.1.3/extension/src/entrypoints/popup/style.css +344 -0
  66. 4dpocket-0.1.3/extension/src/entrypoints/sidepanel/index.html +48 -0
  67. 4dpocket-0.1.3/extension/src/entrypoints/sidepanel/main.ts +157 -0
  68. 4dpocket-0.1.3/extension/src/entrypoints/sidepanel/style.css +218 -0
  69. 4dpocket-0.1.3/extension/tsconfig.json +3 -0
  70. 4dpocket-0.1.3/extension/wxt.config.ts +12 -0
  71. 4dpocket-0.1.3/frontend/.gitignore +24 -0
  72. 4dpocket-0.1.3/frontend/README.md +73 -0
  73. 4dpocket-0.1.3/frontend/eslint.config.js +23 -0
  74. 4dpocket-0.1.3/frontend/index.html +25 -0
  75. 4dpocket-0.1.3/frontend/package.json +51 -0
  76. 4dpocket-0.1.3/frontend/pnpm-lock.yaml +4368 -0
  77. 4dpocket-0.1.3/frontend/public/favicon.svg +1 -0
  78. 4dpocket-0.1.3/frontend/public/icons/icon-192.png +0 -0
  79. 4dpocket-0.1.3/frontend/public/icons/icon-512.png +0 -0
  80. 4dpocket-0.1.3/frontend/public/icons/icon.svg +41 -0
  81. 4dpocket-0.1.3/frontend/public/icons.svg +24 -0
  82. 4dpocket-0.1.3/frontend/public/manifest.json +23 -0
  83. 4dpocket-0.1.3/frontend/public/sw.js +50 -0
  84. 4dpocket-0.1.3/frontend/src/App.tsx +96 -0
  85. 4dpocket-0.1.3/frontend/src/api/client.ts +120 -0
  86. 4dpocket-0.1.3/frontend/src/components/auth/AuthGuard.tsx +30 -0
  87. 4dpocket-0.1.3/frontend/src/components/bookmark/BookmarkCard.tsx +241 -0
  88. 4dpocket-0.1.3/frontend/src/components/bookmark/BookmarkForm.tsx +353 -0
  89. 4dpocket-0.1.3/frontend/src/components/bookmark/NoteCard.tsx +108 -0
  90. 4dpocket-0.1.3/frontend/src/components/common/CommandPalette.tsx +199 -0
  91. 4dpocket-0.1.3/frontend/src/components/common/ErrorBoundary.tsx +60 -0
  92. 4dpocket-0.1.3/frontend/src/components/common/PlatformIcon.tsx +229 -0
  93. 4dpocket-0.1.3/frontend/src/components/content/ContentRenderer.tsx +188 -0
  94. 4dpocket-0.1.3/frontend/src/components/content/TextHighlighter.tsx +264 -0
  95. 4dpocket-0.1.3/frontend/src/components/editor/TiptapEditor.tsx +217 -0
  96. 4dpocket-0.1.3/frontend/src/components/layout/AppShell.tsx +35 -0
  97. 4dpocket-0.1.3/frontend/src/components/layout/BottomNav.tsx +48 -0
  98. 4dpocket-0.1.3/frontend/src/components/layout/Footer.tsx +29 -0
  99. 4dpocket-0.1.3/frontend/src/components/layout/Header.tsx +54 -0
  100. 4dpocket-0.1.3/frontend/src/components/layout/Sidebar.tsx +195 -0
  101. 4dpocket-0.1.3/frontend/src/components/sharing/ShareDialog.tsx +153 -0
  102. 4dpocket-0.1.3/frontend/src/hooks/use-admin.ts +33 -0
  103. 4dpocket-0.1.3/frontend/src/hooks/use-auth.ts +68 -0
  104. 4dpocket-0.1.3/frontend/src/hooks/use-collections.ts +89 -0
  105. 4dpocket-0.1.3/frontend/src/hooks/use-highlights.ts +20 -0
  106. 4dpocket-0.1.3/frontend/src/hooks/use-item-links.ts +53 -0
  107. 4dpocket-0.1.3/frontend/src/hooks/use-items.ts +99 -0
  108. 4dpocket-0.1.3/frontend/src/hooks/use-keyboard.ts +36 -0
  109. 4dpocket-0.1.3/frontend/src/hooks/use-notes.ts +133 -0
  110. 4dpocket-0.1.3/frontend/src/hooks/use-reading-list.ts +67 -0
  111. 4dpocket-0.1.3/frontend/src/hooks/use-rss.ts +99 -0
  112. 4dpocket-0.1.3/frontend/src/hooks/use-sharing.ts +35 -0
  113. 4dpocket-0.1.3/frontend/src/hooks/use-tags.ts +37 -0
  114. 4dpocket-0.1.3/frontend/src/lib/query-client.ts +11 -0
  115. 4dpocket-0.1.3/frontend/src/lib/utils.ts +28 -0
  116. 4dpocket-0.1.3/frontend/src/main.tsx +27 -0
  117. 4dpocket-0.1.3/frontend/src/pages/AddItem.tsx +97 -0
  118. 4dpocket-0.1.3/frontend/src/pages/Admin.tsx +527 -0
  119. 4dpocket-0.1.3/frontend/src/pages/CollectionDetail.tsx +191 -0
  120. 4dpocket-0.1.3/frontend/src/pages/Collections.tsx +153 -0
  121. 4dpocket-0.1.3/frontend/src/pages/Dashboard.tsx +180 -0
  122. 4dpocket-0.1.3/frontend/src/pages/Feed.tsx +539 -0
  123. 4dpocket-0.1.3/frontend/src/pages/Highlights.tsx +110 -0
  124. 4dpocket-0.1.3/frontend/src/pages/ItemDetail.tsx +1138 -0
  125. 4dpocket-0.1.3/frontend/src/pages/KnowledgeBase.tsx +320 -0
  126. 4dpocket-0.1.3/frontend/src/pages/Login.tsx +146 -0
  127. 4dpocket-0.1.3/frontend/src/pages/NoteDetail.tsx +339 -0
  128. 4dpocket-0.1.3/frontend/src/pages/Notes.tsx +396 -0
  129. 4dpocket-0.1.3/frontend/src/pages/PublicShare.tsx +117 -0
  130. 4dpocket-0.1.3/frontend/src/pages/ReadingList.tsx +144 -0
  131. 4dpocket-0.1.3/frontend/src/pages/Register.tsx +194 -0
  132. 4dpocket-0.1.3/frontend/src/pages/Rules.tsx +151 -0
  133. 4dpocket-0.1.3/frontend/src/pages/Search.tsx +379 -0
  134. 4dpocket-0.1.3/frontend/src/pages/Settings.tsx +409 -0
  135. 4dpocket-0.1.3/frontend/src/pages/SharedWithMe.tsx +140 -0
  136. 4dpocket-0.1.3/frontend/src/pages/TagDetail.tsx +147 -0
  137. 4dpocket-0.1.3/frontend/src/pages/Tags.tsx +185 -0
  138. 4dpocket-0.1.3/frontend/src/pages/Timeline.tsx +104 -0
  139. 4dpocket-0.1.3/frontend/src/stores/ui-store.ts +56 -0
  140. 4dpocket-0.1.3/frontend/src/styles/globals.css +171 -0
  141. 4dpocket-0.1.3/frontend/tsconfig.app.json +32 -0
  142. 4dpocket-0.1.3/frontend/tsconfig.json +7 -0
  143. 4dpocket-0.1.3/frontend/tsconfig.node.json +26 -0
  144. 4dpocket-0.1.3/frontend/vite.config.ts +22 -0
  145. 4dpocket-0.1.3/pyproject.toml +67 -0
  146. 4dpocket-0.1.3/src/fourdpocket/__init__.py +8 -0
  147. 4dpocket-0.1.3/src/fourdpocket/ai/__init__.py +0 -0
  148. 4dpocket-0.1.3/src/fourdpocket/ai/base.py +39 -0
  149. 4dpocket-0.1.3/src/fourdpocket/ai/connector.py +136 -0
  150. 4dpocket-0.1.3/src/fourdpocket/ai/factory.py +105 -0
  151. 4dpocket-0.1.3/src/fourdpocket/ai/hierarchy.py +102 -0
  152. 4dpocket-0.1.3/src/fourdpocket/ai/local_embeddings.py +48 -0
  153. 4dpocket-0.1.3/src/fourdpocket/ai/nvidia_embeddings.py +56 -0
  154. 4dpocket-0.1.3/src/fourdpocket/ai/openai_compatible.py +190 -0
  155. 4dpocket-0.1.3/src/fourdpocket/ai/sanitizer.py +78 -0
  156. 4dpocket-0.1.3/src/fourdpocket/ai/summarizer.py +94 -0
  157. 4dpocket-0.1.3/src/fourdpocket/ai/tagger.py +255 -0
  158. 4dpocket-0.1.3/src/fourdpocket/ai/title_generator.py +32 -0
  159. 4dpocket-0.1.3/src/fourdpocket/api/__init__.py +0 -0
  160. 4dpocket-0.1.3/src/fourdpocket/api/admin.py +327 -0
  161. 4dpocket-0.1.3/src/fourdpocket/api/ai.py +317 -0
  162. 4dpocket-0.1.3/src/fourdpocket/api/auth.py +212 -0
  163. 4dpocket-0.1.3/src/fourdpocket/api/auth_utils.py +54 -0
  164. 4dpocket-0.1.3/src/fourdpocket/api/collections.py +494 -0
  165. 4dpocket-0.1.3/src/fourdpocket/api/comments.py +112 -0
  166. 4dpocket-0.1.3/src/fourdpocket/api/deps.py +120 -0
  167. 4dpocket-0.1.3/src/fourdpocket/api/feeds.py +73 -0
  168. 4dpocket-0.1.3/src/fourdpocket/api/highlights.py +148 -0
  169. 4dpocket-0.1.3/src/fourdpocket/api/import_export.py +219 -0
  170. 4dpocket-0.1.3/src/fourdpocket/api/item_links.py +114 -0
  171. 4dpocket-0.1.3/src/fourdpocket/api/items.py +973 -0
  172. 4dpocket-0.1.3/src/fourdpocket/api/middleware.py +70 -0
  173. 4dpocket-0.1.3/src/fourdpocket/api/notes.py +404 -0
  174. 4dpocket-0.1.3/src/fourdpocket/api/rate_limit.py +143 -0
  175. 4dpocket-0.1.3/src/fourdpocket/api/router.py +51 -0
  176. 4dpocket-0.1.3/src/fourdpocket/api/rss.py +253 -0
  177. 4dpocket-0.1.3/src/fourdpocket/api/rules.py +112 -0
  178. 4dpocket-0.1.3/src/fourdpocket/api/saved_filters.py +123 -0
  179. 4dpocket-0.1.3/src/fourdpocket/api/search.py +262 -0
  180. 4dpocket-0.1.3/src/fourdpocket/api/settings.py +45 -0
  181. 4dpocket-0.1.3/src/fourdpocket/api/sharing.py +388 -0
  182. 4dpocket-0.1.3/src/fourdpocket/api/stats.py +91 -0
  183. 4dpocket-0.1.3/src/fourdpocket/api/tags.py +235 -0
  184. 4dpocket-0.1.3/src/fourdpocket/config.py +143 -0
  185. 4dpocket-0.1.3/src/fourdpocket/db/__init__.py +0 -0
  186. 4dpocket-0.1.3/src/fourdpocket/db/migrations/env.py +45 -0
  187. 4dpocket-0.1.3/src/fourdpocket/db/migrations/script.py.mako +25 -0
  188. 4dpocket-0.1.3/src/fourdpocket/db/migrations/versions/375487e8618a_initial_schema.py +30 -0
  189. 4dpocket-0.1.3/src/fourdpocket/db/session.py +95 -0
  190. 4dpocket-0.1.3/src/fourdpocket/main.py +114 -0
  191. 4dpocket-0.1.3/src/fourdpocket/models/__init__.py +52 -0
  192. 4dpocket-0.1.3/src/fourdpocket/models/base.py +52 -0
  193. 4dpocket-0.1.3/src/fourdpocket/models/collection.py +78 -0
  194. 4dpocket-0.1.3/src/fourdpocket/models/collection_note.py +25 -0
  195. 4dpocket-0.1.3/src/fourdpocket/models/comment.py +26 -0
  196. 4dpocket-0.1.3/src/fourdpocket/models/embedding.py +21 -0
  197. 4dpocket-0.1.3/src/fourdpocket/models/feed.py +26 -0
  198. 4dpocket-0.1.3/src/fourdpocket/models/feed_entry.py +43 -0
  199. 4dpocket-0.1.3/src/fourdpocket/models/highlight.py +30 -0
  200. 4dpocket-0.1.3/src/fourdpocket/models/instance_settings.py +20 -0
  201. 4dpocket-0.1.3/src/fourdpocket/models/item.py +123 -0
  202. 4dpocket-0.1.3/src/fourdpocket/models/item_link.py +58 -0
  203. 4dpocket-0.1.3/src/fourdpocket/models/note.py +74 -0
  204. 4dpocket-0.1.3/src/fourdpocket/models/note_tag.py +13 -0
  205. 4dpocket-0.1.3/src/fourdpocket/models/rate_limit.py +21 -0
  206. 4dpocket-0.1.3/src/fourdpocket/models/rss_feed.py +40 -0
  207. 4dpocket-0.1.3/src/fourdpocket/models/rule.py +28 -0
  208. 4dpocket-0.1.3/src/fourdpocket/models/saved_filter.py +27 -0
  209. 4dpocket-0.1.3/src/fourdpocket/models/share.py +60 -0
  210. 4dpocket-0.1.3/src/fourdpocket/models/tag.py +74 -0
  211. 4dpocket-0.1.3/src/fourdpocket/models/user.py +95 -0
  212. 4dpocket-0.1.3/src/fourdpocket/processors/__init__.py +19 -0
  213. 4dpocket-0.1.3/src/fourdpocket/processors/base.py +170 -0
  214. 4dpocket-0.1.3/src/fourdpocket/processors/generic_url.py +109 -0
  215. 4dpocket-0.1.3/src/fourdpocket/processors/github.py +254 -0
  216. 4dpocket-0.1.3/src/fourdpocket/processors/hackernews.py +108 -0
  217. 4dpocket-0.1.3/src/fourdpocket/processors/image.py +111 -0
  218. 4dpocket-0.1.3/src/fourdpocket/processors/instagram.py +165 -0
  219. 4dpocket-0.1.3/src/fourdpocket/processors/linkedin.py +80 -0
  220. 4dpocket-0.1.3/src/fourdpocket/processors/mastodon.py +123 -0
  221. 4dpocket-0.1.3/src/fourdpocket/processors/medium.py +229 -0
  222. 4dpocket-0.1.3/src/fourdpocket/processors/pdf.py +104 -0
  223. 4dpocket-0.1.3/src/fourdpocket/processors/pipeline.py +125 -0
  224. 4dpocket-0.1.3/src/fourdpocket/processors/reddit.py +144 -0
  225. 4dpocket-0.1.3/src/fourdpocket/processors/registry.py +49 -0
  226. 4dpocket-0.1.3/src/fourdpocket/processors/spotify.py +82 -0
  227. 4dpocket-0.1.3/src/fourdpocket/processors/stackoverflow.py +125 -0
  228. 4dpocket-0.1.3/src/fourdpocket/processors/substack.py +91 -0
  229. 4dpocket-0.1.3/src/fourdpocket/processors/threads.py +73 -0
  230. 4dpocket-0.1.3/src/fourdpocket/processors/tiktok.py +95 -0
  231. 4dpocket-0.1.3/src/fourdpocket/processors/twitter.py +116 -0
  232. 4dpocket-0.1.3/src/fourdpocket/processors/youtube.py +183 -0
  233. 4dpocket-0.1.3/src/fourdpocket/search/__init__.py +0 -0
  234. 4dpocket-0.1.3/src/fourdpocket/search/filters.py +67 -0
  235. 4dpocket-0.1.3/src/fourdpocket/search/hybrid.py +102 -0
  236. 4dpocket-0.1.3/src/fourdpocket/search/indexer.py +79 -0
  237. 4dpocket-0.1.3/src/fourdpocket/search/meilisearch_backend.py +112 -0
  238. 4dpocket-0.1.3/src/fourdpocket/search/semantic.py +135 -0
  239. 4dpocket-0.1.3/src/fourdpocket/search/sqlite_fts.py +496 -0
  240. 4dpocket-0.1.3/src/fourdpocket/sharing/__init__.py +0 -0
  241. 4dpocket-0.1.3/src/fourdpocket/sharing/feed_manager.py +86 -0
  242. 4dpocket-0.1.3/src/fourdpocket/sharing/permissions.py +102 -0
  243. 4dpocket-0.1.3/src/fourdpocket/sharing/share_manager.py +107 -0
  244. 4dpocket-0.1.3/src/fourdpocket/storage/__init__.py +0 -0
  245. 4dpocket-0.1.3/src/fourdpocket/storage/local.py +66 -0
  246. 4dpocket-0.1.3/src/fourdpocket/utils/__init__.py +0 -0
  247. 4dpocket-0.1.3/src/fourdpocket/utils/ssrf.py +44 -0
  248. 4dpocket-0.1.3/src/fourdpocket/workers/__init__.py +17 -0
  249. 4dpocket-0.1.3/src/fourdpocket/workers/ai_enrichment.py +144 -0
  250. 4dpocket-0.1.3/src/fourdpocket/workers/archiver.py +101 -0
  251. 4dpocket-0.1.3/src/fourdpocket/workers/fetcher.py +135 -0
  252. 4dpocket-0.1.3/src/fourdpocket/workers/media_downloader.py +248 -0
  253. 4dpocket-0.1.3/src/fourdpocket/workers/rss_worker.py +240 -0
  254. 4dpocket-0.1.3/src/fourdpocket/workers/rule_engine.py +145 -0
  255. 4dpocket-0.1.3/src/fourdpocket/workers/scheduler.py +59 -0
  256. 4dpocket-0.1.3/src/fourdpocket/workers/screenshot.py +116 -0
  257. 4dpocket-0.1.3/tests/__init__.py +0 -0
  258. 4dpocket-0.1.3/tests/conftest.py +116 -0
  259. 4dpocket-0.1.3/tests/test_ai/__init__.py +0 -0
  260. 4dpocket-0.1.3/tests/test_api/__init__.py +0 -0
  261. 4dpocket-0.1.3/tests/test_api/test_admin_ai.py +72 -0
  262. 4dpocket-0.1.3/tests/test_api/test_auth.py +149 -0
  263. 4dpocket-0.1.3/tests/test_api/test_collections.py +208 -0
  264. 4dpocket-0.1.3/tests/test_api/test_cors.py +49 -0
  265. 4dpocket-0.1.3/tests/test_api/test_health.py +7 -0
  266. 4dpocket-0.1.3/tests/test_api/test_items.py +257 -0
  267. 4dpocket-0.1.3/tests/test_api/test_notes.py +137 -0
  268. 4dpocket-0.1.3/tests/test_api/test_tags.py +128 -0
  269. 4dpocket-0.1.3/tests/test_config.py +20 -0
  270. 4dpocket-0.1.3/tests/test_processors/__init__.py +0 -0
  271. 4dpocket-0.1.3/tests/test_search/__init__.py +0 -0
  272. 4dpocket-0.1.3/tests/test_workers/__init__.py +0 -0
  273. 4dpocket-0.1.3/uv.lock +3397 -0
@@ -0,0 +1 @@
1
+ ../AGENTS.md
@@ -0,0 +1,65 @@
1
+ <!-- OMC:START -->
2
+ <!-- OMC:VERSION:4.9.3 -->
3
+
4
+ # oh-my-claudecode - Intelligent Multi-Agent Orchestration
5
+
6
+ You are running with oh-my-claudecode (OMC), a multi-agent orchestration layer for Claude Code.
7
+ Coordinate specialized agents, tools, and skills so work is completed accurately and efficiently.
8
+
9
+ <operating_principles>
10
+ - Delegate specialized work to the most appropriate agent.
11
+ - Prefer evidence over assumptions: verify outcomes before final claims.
12
+ - Choose the lightest-weight path that preserves quality.
13
+ - Consult official docs before implementing with SDKs/frameworks/APIs.
14
+ </operating_principles>
15
+
16
+ <delegation_rules>
17
+ Delegate for: multi-file changes, refactors, debugging, reviews, planning, research, verification.
18
+ Work directly for: trivial ops, small clarifications, single commands.
19
+ Route code to `executor` (use `model=opus` for complex work). Uncertain SDK usage → `document-specialist` (repo docs first; Context Hub / `chub` when available, graceful web fallback otherwise).
20
+ </delegation_rules>
21
+
22
+ <model_routing>
23
+ `haiku` (quick lookups), `sonnet` (standard), `opus` (architecture, deep analysis).
24
+ Direct writes OK for: `~/.claude/**`, `.omc/**`, `.claude/**`, `CLAUDE.md`, `AGENTS.md`.
25
+ </model_routing>
26
+
27
+ <skills>
28
+ Invoke via `/oh-my-claudecode:<name>`. Trigger patterns auto-detect keywords.
29
+ Tier-0 workflows include `autopilot`, `ultrawork`, `ralph`, `team`, and `ralplan`.
30
+ Keyword triggers: `"autopilot"→autopilot`, `"ralph"→ralph`, `"ulw"→ultrawork`, `"ccg"→ccg`, `"ralplan"→ralplan`, `"deep interview"→deep-interview`, `"deslop"`/`"anti-slop"`→ai-slop-cleaner, `"deep-analyze"`→analysis mode, `"tdd"`→TDD mode, `"deepsearch"`→codebase search, `"ultrathink"`→deep reasoning, `"cancelomc"`→cancel.
31
+ Team orchestration is explicit via `/team`.
32
+ Detailed agent catalog, tools, team pipeline, commit protocol, and full skills registry live in the native `omc-reference` skill when skills are available, including reference for `explore`, `planner`, `architect`, `executor`, `designer`, and `writer`; this file remains sufficient without skill support.
33
+ </skills>
34
+
35
+ <verification>
36
+ Verify before claiming completion. Size appropriately: small→haiku, standard→sonnet, large/security→opus.
37
+ If verification fails, keep iterating.
38
+ </verification>
39
+
40
+ <execution_protocols>
41
+ Broad requests: explore first, then plan. 2+ independent tasks in parallel. `run_in_background` for builds/tests.
42
+ Keep authoring and review as separate passes: writer pass creates or revises content, reviewer/verifier pass evaluates it later in a separate lane.
43
+ Never self-approve in the same active context; use `code-reviewer` or `verifier` for the approval pass.
44
+ Before concluding: zero pending tasks, tests passing, verifier evidence collected.
45
+ </execution_protocols>
46
+
47
+ <hooks_and_context>
48
+ Hooks inject `<system-reminder>` tags. Key patterns: `hook success: Success` (proceed), `[MAGIC KEYWORD: ...]` (invoke skill), `The boulder never stops` (ralph/ultrawork active).
49
+ Persistence: `<remember>` (7 days), `<remember priority>` (permanent).
50
+ Kill switches: `DISABLE_OMC`, `OMC_SKIP_HOOKS` (comma-separated).
51
+ </hooks_and_context>
52
+
53
+ <cancellation>
54
+ `/oh-my-claudecode:cancel` ends execution modes. Cancel when done+verified or blocked. Don't cancel if work incomplete.
55
+ </cancellation>
56
+
57
+ <worktree_paths>
58
+ State: `.omc/state/`, `.omc/state/sessions/{sessionId}/`, `.omc/notepad.md`, `.omc/project-memory.json`, `.omc/plans/`, `.omc/research/`, `.omc/logs/`
59
+ </worktree_paths>
60
+
61
+ ## Setup
62
+
63
+ Say "setup omc" or run `/oh-my-claudecode:omc-setup`.
64
+
65
+ <!-- OMC:END -->
@@ -0,0 +1,41 @@
1
+ # Rules Templates
2
+
3
+ This directory contains rule templates that you can copy to your project's `.claude/rules/` directory.
4
+
5
+ ## How to Use
6
+
7
+ 1. Create a `.claude/rules/` directory in your project root
8
+ 2. Copy the templates you want to use
9
+ 3. Customize them for your project
10
+ 4. Rules in `.claude/rules/*.md` will be auto-discovered and injected into context
11
+
12
+ ## Available Templates
13
+
14
+ | Template | Purpose |
15
+ |----------|---------|
16
+ | `coding-style.md` | Code style and formatting guidelines |
17
+ | `testing.md` | Testing requirements and coverage targets |
18
+ | `security.md` | Security checklist and best practices |
19
+ | `performance.md` | Performance guidelines and model selection |
20
+ | `git-workflow.md` | Git commit and PR workflow |
21
+ | `karpathy-guidelines.md` | Coding discipline — think before coding, simplicity, surgical changes |
22
+
23
+ ## Auto-Discovery
24
+
25
+ When you place rules in `.claude/rules/`, they are automatically discovered by oh-my-claudecode and injected into the context for all agents working in your project.
26
+
27
+ ## Example
28
+
29
+ ```bash
30
+ # Copy templates to your project
31
+ mkdir -p .claude/rules
32
+ cp templates/rules/security.md .claude/rules/
33
+ cp templates/rules/testing.md .claude/rules/
34
+
35
+ # Customize for your project
36
+ # Edit .claude/rules/security.md to add project-specific checks
37
+ ```
38
+
39
+ ## Customization
40
+
41
+ Each template has `[CUSTOMIZE]` markers where you should add project-specific guidelines.
@@ -0,0 +1,74 @@
1
+ # Coding Style Rules
2
+
3
+ ## Immutability (CRITICAL)
4
+
5
+ ALWAYS create new objects, NEVER mutate:
6
+
7
+ ```javascript
8
+ // WRONG: Mutation
9
+ function updateUser(user, name) {
10
+ user.name = name // MUTATION!
11
+ return user
12
+ }
13
+
14
+ // CORRECT: Immutability
15
+ function updateUser(user, name) {
16
+ return { ...user, name }
17
+ }
18
+ ```
19
+
20
+ ## File Organization
21
+
22
+ MANY SMALL FILES > FEW LARGE FILES:
23
+ - High cohesion, low coupling
24
+ - 200-400 lines typical, 800 max
25
+ - Extract utilities from large components
26
+ - Organize by feature/domain, not by type
27
+
28
+ ## Error Handling
29
+
30
+ ALWAYS handle errors comprehensively:
31
+
32
+ ```typescript
33
+ try {
34
+ const result = await riskyOperation()
35
+ return result
36
+ } catch (error) {
37
+ console.error('Operation failed:', error)
38
+ throw new Error('User-friendly error message')
39
+ }
40
+ ```
41
+
42
+ ## Input Validation
43
+
44
+ ALWAYS validate user input:
45
+
46
+ ```typescript
47
+ import { z } from 'zod'
48
+
49
+ const schema = z.object({
50
+ email: z.string().email(),
51
+ age: z.number().int().min(0).max(150)
52
+ })
53
+
54
+ const validated = schema.parse(input)
55
+ ```
56
+
57
+ ## Code Quality Checklist
58
+
59
+ Before marking work complete:
60
+ - [ ] Code is readable and well-named
61
+ - [ ] Functions are small (<50 lines)
62
+ - [ ] Files are focused (<800 lines)
63
+ - [ ] No deep nesting (>4 levels)
64
+ - [ ] Proper error handling
65
+ - [ ] No console.log statements
66
+ - [ ] No hardcoded values
67
+ - [ ] Immutable patterns used
68
+
69
+ ## [CUSTOMIZE] Project-Specific Style
70
+
71
+ Add your project-specific coding style rules here:
72
+ - Naming conventions
73
+ - File structure requirements
74
+ - Framework-specific patterns
@@ -0,0 +1,41 @@
1
+ # Git Workflow Rules
2
+
3
+ ## Commit Message Format
4
+
5
+ ```
6
+ <type>: <description>
7
+
8
+ <optional body>
9
+ ```
10
+
11
+ Types: feat, fix, refactor, docs, test, chore, perf, ci
12
+
13
+ ## Pull Request Workflow
14
+
15
+ When creating PRs:
16
+ 1. Analyze full commit history (not just latest commit)
17
+ 2. Use `git diff [base-branch]...HEAD` to see all changes
18
+ 3. Draft comprehensive PR summary
19
+ 4. Include test plan with TODOs
20
+ 5. Push with `-u` flag if new branch
21
+
22
+ ## Feature Implementation Workflow
23
+
24
+ 1. **Plan First** - Use `planner` agent
25
+ 2. **TDD Approach** - Use `tdd-guide` agent
26
+ 3. **Code Review** - Use `code-reviewer` agent after writing code
27
+ 4. **Commit** - Follow conventional commits format
28
+
29
+ ## Branch Naming
30
+
31
+ - `feature/` - New features
32
+ - `fix/` - Bug fixes
33
+ - `refactor/` - Code refactoring
34
+ - `docs/` - Documentation changes
35
+
36
+ ## [CUSTOMIZE] Project-Specific Git Rules
37
+
38
+ Add your project-specific git workflow here:
39
+ - Branch protection rules
40
+ - Required reviewers
41
+ - CI/CD requirements
@@ -0,0 +1,59 @@
1
+ # Karpathy Coding Guidelines
2
+
3
+ Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations on LLM coding pitfalls. These principles bias toward caution over speed — for trivial tasks, use judgment.
4
+
5
+ ## 1. Think Before Coding
6
+
7
+ **Don't assume. Don't hide confusion. Surface tradeoffs.**
8
+
9
+ Before implementing:
10
+ - State your assumptions explicitly. If uncertain, ask.
11
+ - If multiple interpretations exist, present them — don't pick silently.
12
+ - If a simpler approach exists, say so. Push back when warranted.
13
+ - If something is unclear, stop. Name what's confusing. Ask.
14
+
15
+ ## 2. Simplicity First
16
+
17
+ **Minimum code that solves the problem. Nothing speculative.**
18
+
19
+ - No features beyond what was asked.
20
+ - No abstractions for single-use code.
21
+ - No "flexibility" or "configurability" that wasn't requested.
22
+ - No error handling for impossible scenarios.
23
+ - If you write 200 lines and it could be 50, rewrite it.
24
+
25
+ Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
26
+
27
+ ## 3. Surgical Changes
28
+
29
+ **Touch only what you must. Clean up only your own mess.**
30
+
31
+ When editing existing code:
32
+ - Don't "improve" adjacent code, comments, or formatting.
33
+ - Don't refactor things that aren't broken.
34
+ - Match existing style, even if you'd do it differently.
35
+ - If you notice unrelated dead code, mention it — don't delete it.
36
+
37
+ When your changes create orphans:
38
+ - Remove imports/variables/functions that YOUR changes made unused.
39
+ - Don't remove pre-existing dead code unless asked.
40
+
41
+ The test: Every changed line should trace directly to the user's request.
42
+
43
+ ## 4. Goal-Driven Execution
44
+
45
+ **Define success criteria. Loop until verified.**
46
+
47
+ Transform tasks into verifiable goals:
48
+ - "Add validation" → "Write tests for invalid inputs, then make them pass"
49
+ - "Fix the bug" → "Write a test that reproduces it, then make it pass"
50
+ - "Refactor X" → "Ensure tests pass before and after"
51
+
52
+ For multi-step tasks, state a brief plan:
53
+ ```
54
+ 1. [Step] → verify: [check]
55
+ 2. [Step] → verify: [check]
56
+ 3. [Step] → verify: [check]
57
+ ```
58
+
59
+ Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
@@ -0,0 +1,40 @@
1
+ # Performance Rules
2
+
3
+ ## Model Selection Strategy
4
+
5
+ **Haiku** (90% of Sonnet capability, 3x cost savings):
6
+ - Lightweight agents with frequent invocation
7
+ - Code generation and exploration
8
+ - Worker agents in multi-agent systems
9
+
10
+ **Sonnet** (Best coding model):
11
+ - Main development work
12
+ - Orchestrating multi-agent workflows
13
+ - Complex coding tasks
14
+
15
+ **Opus** (Deepest reasoning):
16
+ - Complex architectural decisions
17
+ - Maximum reasoning requirements
18
+ - Research and analysis tasks
19
+
20
+ ## Context Window Management
21
+
22
+ Avoid last 20% of context window for:
23
+ - Large-scale refactoring
24
+ - Feature implementation spanning multiple files
25
+ - Debugging complex interactions
26
+
27
+ ## Algorithm Efficiency
28
+
29
+ Before implementing:
30
+ - [ ] Consider time complexity
31
+ - [ ] Avoid O(n^2) when O(n log n) possible
32
+ - [ ] Use appropriate data structures
33
+ - [ ] Cache expensive computations
34
+
35
+ ## [CUSTOMIZE] Project-Specific Performance
36
+
37
+ Add your project-specific performance requirements here:
38
+ - Response time targets
39
+ - Bundle size limits
40
+ - Database query limits
@@ -0,0 +1,41 @@
1
+ # Security Rules
2
+
3
+ ## Mandatory Security Checks
4
+
5
+ Before ANY commit:
6
+ - [ ] No hardcoded secrets (API keys, passwords, tokens)
7
+ - [ ] All user inputs validated
8
+ - [ ] SQL injection prevention (parameterized queries)
9
+ - [ ] XSS prevention (sanitized HTML)
10
+ - [ ] CSRF protection enabled
11
+ - [ ] Authentication/authorization verified
12
+ - [ ] Rate limiting on all endpoints
13
+ - [ ] Error messages don't leak sensitive data
14
+
15
+ ## Secret Management
16
+
17
+ ```typescript
18
+ // NEVER: Hardcoded secrets
19
+ const apiKey = "sk-proj-xxxxx"
20
+
21
+ // ALWAYS: Environment variables
22
+ const apiKey = process.env.API_KEY
23
+ if (!apiKey) throw new Error('API_KEY not configured')
24
+ ```
25
+
26
+ ## Security Response Protocol
27
+
28
+ If security issue found:
29
+ 1. STOP immediately
30
+ 2. Use `security-reviewer` agent
31
+ 3. Fix CRITICAL issues before continuing
32
+ 4. Rotate any exposed secrets
33
+ 5. Review entire codebase for similar issues
34
+
35
+ ## [CUSTOMIZE] Project-Specific Security
36
+
37
+ Add your project-specific security requirements here:
38
+ - Authentication method
39
+ - Authorization rules
40
+ - Data encryption requirements
41
+ - Compliance requirements (GDPR, HIPAA, etc.)
@@ -0,0 +1,42 @@
1
+ # Testing Rules
2
+
3
+ ## Minimum Test Coverage: 80%
4
+
5
+ Test Types (ALL required):
6
+ 1. **Unit Tests** - Individual functions, utilities, components
7
+ 2. **Integration Tests** - API endpoints, database operations
8
+ 3. **E2E Tests** - Critical user flows
9
+
10
+ ## Test-Driven Development
11
+
12
+ MANDATORY workflow:
13
+ 1. Write test first (RED)
14
+ 2. Run test - it should FAIL
15
+ 3. Write minimal implementation (GREEN)
16
+ 4. Run test - it should PASS
17
+ 5. Refactor (IMPROVE)
18
+ 6. Verify coverage (80%+)
19
+
20
+ ## Edge Cases to Test
21
+
22
+ Every function must be tested with:
23
+ - [ ] Null/undefined inputs
24
+ - [ ] Empty arrays/strings
25
+ - [ ] Invalid types
26
+ - [ ] Boundary values (min/max)
27
+ - [ ] Error conditions
28
+
29
+ ## Test Quality Checklist
30
+
31
+ - [ ] Tests are independent (no shared state)
32
+ - [ ] Test names describe behavior
33
+ - [ ] Mocks used for external dependencies
34
+ - [ ] Both happy path and error paths tested
35
+ - [ ] No flaky tests
36
+
37
+ ## [CUSTOMIZE] Project-Specific Testing
38
+
39
+ Add your project-specific testing requirements here:
40
+ - Test framework configuration
41
+ - Mock setup patterns
42
+ - E2E test scenarios
@@ -0,0 +1,141 @@
1
+ ---
2
+ name: omc-reference
3
+ description: OMC agent catalog, available tools, team pipeline routing, commit protocol, and skills registry. Auto-loads when delegating to agents, using OMC tools, orchestrating teams, making commits, or invoking skills.
4
+ user-invocable: false
5
+ ---
6
+
7
+ # OMC Reference
8
+
9
+ Use this built-in reference when you need detailed OMC catalog information that does not need to live in every `CLAUDE.md` session.
10
+
11
+ ## Agent Catalog
12
+
13
+ Prefix: `oh-my-claudecode:`. See `agents/*.md` for full prompts.
14
+
15
+ - `explore` (haiku) — fast codebase search and mapping
16
+ - `analyst` (opus) — requirements clarity and hidden constraints
17
+ - `planner` (opus) — sequencing and execution plans
18
+ - `architect` (opus) — system design, boundaries, and long-horizon tradeoffs
19
+ - `debugger` (sonnet) — root-cause analysis and failure diagnosis
20
+ - `executor` (sonnet) — implementation and refactoring
21
+ - `verifier` (sonnet) — completion evidence and validation
22
+ - `tracer` (sonnet) — trace gathering and evidence capture
23
+ - `security-reviewer` (sonnet) — trust boundaries and vulnerabilities
24
+ - `code-reviewer` (opus) — comprehensive code review
25
+ - `test-engineer` (sonnet) — testing strategy and regression coverage
26
+ - `designer` (sonnet) — UX and interaction design
27
+ - `writer` (haiku) — documentation and concise content work
28
+ - `qa-tester` (sonnet) — runtime/manual validation
29
+ - `scientist` (sonnet) — data analysis and statistical reasoning
30
+ - `document-specialist` (sonnet) — SDK/API/framework documentation lookup
31
+ - `git-master` (sonnet) — commit strategy and history hygiene
32
+ - `code-simplifier` (opus) — behavior-preserving simplification
33
+ - `critic` (opus) — plan/design challenge and review
34
+
35
+ ## Model Routing
36
+
37
+ - `haiku` — quick lookups, lightweight inspection, narrow docs work
38
+ - `sonnet` — standard implementation, debugging, and review
39
+ - `opus` — architecture, deep analysis, consensus planning, and high-risk review
40
+
41
+ ## Tools Reference
42
+
43
+ ### External AI / orchestration
44
+ - `/team N:executor "task"`
45
+ - `omc team N:codex|gemini "..."`
46
+ - `omc ask <claude|codex|gemini>`
47
+ - `/ccg`
48
+
49
+ ### OMC state
50
+ - `state_read`, `state_write`, `state_clear`, `state_list_active`, `state_get_status`
51
+
52
+ ### Team runtime
53
+ - `TeamCreate`, `TeamDelete`, `SendMessage`, `TaskCreate`, `TaskList`, `TaskGet`, `TaskUpdate`
54
+
55
+ ### Notepad
56
+ - `notepad_read`, `notepad_write_priority`, `notepad_write_working`, `notepad_write_manual`
57
+
58
+ ### Project memory
59
+ - `project_memory_read`, `project_memory_write`, `project_memory_add_note`, `project_memory_add_directive`
60
+
61
+ ### Code intelligence
62
+ - LSP: `lsp_hover`, `lsp_goto_definition`, `lsp_find_references`, `lsp_diagnostics`, and related helpers
63
+ - AST: `ast_grep_search`, `ast_grep_replace`
64
+ - Utility: `python_repl`
65
+
66
+ ## Skills Registry
67
+
68
+ Invoke built-in workflows via `/oh-my-claudecode:<name>`.
69
+
70
+ ### Workflow skills
71
+ - `autopilot` — full autonomous execution from idea to working code
72
+ - `ralph` — persistence loop until completion with verification
73
+ - `ultrawork` — high-throughput parallel execution
74
+ - `visual-verdict` — structured visual QA verdicts
75
+ - `team` — coordinated team orchestration
76
+ - `ccg` — Codex + Gemini + Claude synthesis lane
77
+ - `ultraqa` — QA cycle: test, verify, fix, repeat
78
+ - `omc-plan` — planning workflow and `/plan`-safe alias
79
+ - `ralplan` — consensus planning workflow
80
+ - `sciomc` — science/research workflow
81
+ - `external-context` — external docs/research workflow
82
+ - `deepinit` — hierarchical AGENTS.md generation
83
+ - `deep-interview` — Socratic ambiguity-gated requirements workflow
84
+ - `ai-slop-cleaner` — regression-safe cleanup workflow
85
+
86
+ ### Utility skills
87
+ - `ask`, `cancel`, `note`, `learner`, `omc-setup`, `mcp-setup`, `hud`, `omc-doctor`, `trace`, `release`, `project-session-manager`, `skill`, `writer-memory`, `configure-notifications`
88
+
89
+ ### Keyword triggers kept compact in CLAUDE.md
90
+ - `"autopilot"→autopilot`
91
+ - `"ralph"→ralph`
92
+ - `"ulw"→ultrawork`
93
+ - `"ccg"→ccg`
94
+ - `"ralplan"→ralplan`
95
+ - `"deep interview"→deep-interview`
96
+ - `"deslop" / "anti-slop"→ai-slop-cleaner`
97
+ - `"deep-analyze"→analysis mode`
98
+ - `"tdd"→TDD mode`
99
+ - `"deepsearch"→codebase search`
100
+ - `"ultrathink"→deep reasoning`
101
+ - `"cancelomc"→cancel`
102
+ - Team orchestration is explicit via `/team`.
103
+
104
+ ## Team Pipeline
105
+
106
+ Stages: `team-plan` → `team-prd` → `team-exec` → `team-verify` → `team-fix` (loop).
107
+
108
+ - Use `team-fix` for bounded remediation loops.
109
+ - `team ralph` links the team pipeline with Ralph-style sequential verification.
110
+ - Prefer team mode when independent parallel lanes justify the coordination overhead.
111
+
112
+ ## Commit Protocol
113
+
114
+ Use git trailers to preserve decision context in every commit message.
115
+
116
+ ### Format
117
+ - Intent line first: why the change was made
118
+ - Optional body with context and rationale
119
+ - Structured trailers when applicable
120
+
121
+ ### Common trailers
122
+ - `Constraint:` active constraint shaping the decision
123
+ - `Rejected:` alternative considered | reason for rejection
124
+ - `Directive:` forward-looking warning or instruction
125
+ - `Confidence:` `high` | `medium` | `low`
126
+ - `Scope-risk:` `narrow` | `moderate` | `broad`
127
+ - `Not-tested:` known verification gap
128
+
129
+ ### Example
130
+ ```text
131
+ feat(docs): reduce always-loaded OMC instruction footprint
132
+
133
+ Move reference-only orchestration content into a native Claude skill so
134
+ session-start guidance stays small while detailed OMC reference remains available.
135
+
136
+ Constraint: Preserve CLAUDE.md marker-based installation flow
137
+ Rejected: Sync all built-in skills in legacy install | broader behavior change than issue requires
138
+ Confidence: high
139
+ Scope-risk: narrow
140
+ Not-tested: End-to-end plugin marketplace install in a fresh Claude profile
141
+ ```
@@ -0,0 +1,51 @@
1
+ # Git
2
+ .git
3
+ .gitignore
4
+
5
+ # Python
6
+ __pycache__
7
+ *.pyc
8
+ *.pyo
9
+ .mypy_cache
10
+ .pytest_cache
11
+ .ruff_cache
12
+ *.egg-info
13
+ dist/
14
+ build/
15
+
16
+ # Frontend (built in Docker)
17
+ frontend/node_modules
18
+ frontend/dist
19
+ frontend/.omc
20
+
21
+ # Dev/IDE
22
+ .venv
23
+ .env
24
+ .env.local
25
+ *.swp
26
+ *.swo
27
+ .vscode
28
+ .idea
29
+ .DS_Store
30
+
31
+ # OMC / Claude
32
+ .omc
33
+ .claude
34
+ .playwright-mcp
35
+ missions
36
+
37
+ # Data
38
+ data/
39
+ *.db
40
+ *.db-wal
41
+ *.db-shm
42
+
43
+ # Tests
44
+ tests/
45
+ htmlcov/
46
+ .coverage
47
+
48
+ # Docs
49
+ *.md
50
+ !pyproject.toml
51
+ LICENSE
@@ -0,0 +1,77 @@
1
+ # 4DPocket Configuration
2
+ # Copy this to .env and fill in your values
3
+ # WARNING: Never commit .env to git - it contains secrets
4
+
5
+ # ─── Database ────────────────────────────────────────────────────
6
+ # SQLite (default, zero-config)
7
+ FDP_DATABASE__URL=sqlite:///./data/4dpocket.db
8
+ # PostgreSQL (production/Docker)
9
+ # FDP_DATABASE__URL=postgresql://4dp:4dp@localhost:5432/4dpocket
10
+
11
+ # ─── Authentication ──────────────────────────────────────────────
12
+ FDP_AUTH__MODE=single # "single" (no login) or "multi" (JWT auth)
13
+ # FDP_AUTH__SECRET_KEY= # auto-generated and persisted if not set
14
+ # FDP_AUTH__TOKEN_EXPIRE_MINUTES=10080 # 7 days
15
+
16
+ # ─── Search ──────────────────────────────────────────────────────
17
+ FDP_SEARCH__BACKEND=sqlite # "sqlite" (FTS5) or "meilisearch"
18
+ # FDP_SEARCH__MEILI_URL=http://localhost:7700
19
+ # FDP_SEARCH__MEILI_MASTER_KEY=masterkey123
20
+
21
+ # ─── AI Chat Provider ───────────────────────────────────────────
22
+ # Supported: "ollama" (local), "groq" (cloud), "nvidia" (cloud), "custom" (any OpenAI-compatible)
23
+ FDP_AI__CHAT_PROVIDER=ollama
24
+
25
+ # Ollama (default - local, free)
26
+ FDP_AI__OLLAMA_URL=http://localhost:11434
27
+ FDP_AI__OLLAMA_MODEL=llama3.2
28
+
29
+ # Groq (fast cloud inference)
30
+ # FDP_AI__CHAT_PROVIDER=groq
31
+ # FDP_AI__GROQ_API_KEY=gsk_...
32
+
33
+ # NVIDIA (powerful cloud models)
34
+ # FDP_AI__CHAT_PROVIDER=nvidia
35
+ # FDP_AI__NVIDIA_API_KEY=nvapi-...
36
+
37
+ # Custom (any OpenAI-compatible or Anthropic-compatible endpoint)
38
+ # FDP_AI__CHAT_PROVIDER=custom
39
+ # FDP_AI__CUSTOM_BASE_URL=https://api.minimax.io/anthropic/v1
40
+ # FDP_AI__CUSTOM_API_KEY=sk-...
41
+ # FDP_AI__CUSTOM_MODEL=MiniMax-M2.7
42
+ # FDP_AI__CUSTOM_API_TYPE=anthropic # "openai" (default) or "anthropic"
43
+ #
44
+ # More examples:
45
+ # Together AI:
46
+ # FDP_AI__CUSTOM_BASE_URL=https://api.together.xyz/v1
47
+ # FDP_AI__CUSTOM_MODEL=meta-llama/Llama-3.3-70B-Instruct-Turbo
48
+ # Fireworks:
49
+ # FDP_AI__CUSTOM_BASE_URL=https://api.fireworks.ai/inference/v1
50
+ # FDP_AI__CUSTOM_MODEL=accounts/fireworks/models/llama-v3p3-70b-instruct
51
+ # OpenRouter:
52
+ # FDP_AI__CUSTOM_BASE_URL=https://openrouter.ai/api/v1
53
+ # FDP_AI__CUSTOM_MODEL=meta-llama/llama-3.3-70b-instruct
54
+
55
+ # ─── Embedding Provider ─────────────────────────────────────────
56
+ FDP_AI__EMBEDDING_PROVIDER=local # "local" (sentence-transformers) or "nvidia"
57
+ FDP_AI__EMBEDDING_MODEL=all-MiniLM-L6-v2
58
+
59
+ # ─── AI Features ─────────────────────────────────────────────────
60
+ FDP_AI__AUTO_TAG=true
61
+ FDP_AI__AUTO_SUMMARIZE=true
62
+ FDP_AI__TAG_CONFIDENCE_THRESHOLD=0.7
63
+ FDP_AI__TAG_SUGGESTION_THRESHOLD=0.4
64
+ FDP_AI__SYNC_ENRICHMENT=true # Run AI enrichment inline if Huey worker is not running
65
+
66
+ # ─── Storage ─────────────────────────────────────────────────────
67
+ FDP_STORAGE__BASE_PATH=./data
68
+ FDP_STORAGE__MAX_ARCHIVE_SIZE_MB=50
69
+
70
+ # ─── Server ──────────────────────────────────────────────────────
71
+ FDP_SERVER__HOST=0.0.0.0
72
+ FDP_SERVER__PORT=4040
73
+ FDP_SERVER__CORS_ORIGINS=["http://localhost:5173","http://localhost:4040"]
74
+ FDP_SERVER__SECURE_COOKIES=false # Set true behind HTTPS in production
75
+
76
+ # ─── Docker Compose ──────────────────────────────────────────────
77
+ MEILI_MASTER_KEY=masterkey123