@cachly-dev/mcp-server 0.10.56 → 0.10.57

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 (329) hide show
  1. package/.github/workflows/eas-build-android.yml +58 -0
  2. package/.github/workflows/eas-update.yml +55 -0
  3. package/.github/workflows/publish.yml +2 -2
  4. package/BENCH.md +91 -0
  5. package/CHANGELOG.md +44 -0
  6. package/README.md +6 -34
  7. package/STRATEGY.md +228 -0
  8. package/apps/travel-chaos-organizer/.env.example +49 -0
  9. package/apps/travel-chaos-organizer/DEPLOY.md +328 -0
  10. package/apps/travel-chaos-organizer/Makefile +57 -0
  11. package/apps/travel-chaos-organizer/README.md +159 -0
  12. package/apps/travel-chaos-organizer/backend/.env.example +10 -0
  13. package/apps/travel-chaos-organizer/backend/Dockerfile +25 -0
  14. package/apps/travel-chaos-organizer/backend/alembic/env.py +56 -0
  15. package/apps/travel-chaos-organizer/backend/alembic/script.py.mako +24 -0
  16. package/apps/travel-chaos-organizer/backend/alembic/versions/.gitkeep +0 -0
  17. package/apps/travel-chaos-organizer/backend/alembic/versions/0001_stripe_customer_id.py +24 -0
  18. package/apps/travel-chaos-organizer/backend/alembic/versions/0002_telegram_chat_id.py +24 -0
  19. package/apps/travel-chaos-organizer/backend/alembic.ini +39 -0
  20. package/apps/travel-chaos-organizer/backend/app/__init__.py +0 -0
  21. package/apps/travel-chaos-organizer/backend/app/auth/__init__.py +0 -0
  22. package/apps/travel-chaos-organizer/backend/app/auth/keycloak.py +81 -0
  23. package/apps/travel-chaos-organizer/backend/app/config.py +66 -0
  24. package/apps/travel-chaos-organizer/backend/app/db/__init__.py +0 -0
  25. package/apps/travel-chaos-organizer/backend/app/db/database.py +20 -0
  26. package/apps/travel-chaos-organizer/backend/app/db/migrations/001_init.sql +71 -0
  27. package/apps/travel-chaos-organizer/backend/app/db/migrations/002_telemetry_freemium.sql +31 -0
  28. package/apps/travel-chaos-organizer/backend/app/db/migrations/003_telegram_chat_id.sql +4 -0
  29. package/apps/travel-chaos-organizer/backend/app/db/migrations/004_stripe_and_email.sql +5 -0
  30. package/apps/travel-chaos-organizer/backend/app/limiter.py +4 -0
  31. package/apps/travel-chaos-organizer/backend/app/logging_config.py +25 -0
  32. package/apps/travel-chaos-organizer/backend/app/main.py +77 -0
  33. package/apps/travel-chaos-organizer/backend/app/models/__init__.py +0 -0
  34. package/apps/travel-chaos-organizer/backend/app/models/schemas.py +142 -0
  35. package/apps/travel-chaos-organizer/backend/app/routers/__init__.py +0 -0
  36. package/apps/travel-chaos-organizer/backend/app/routers/admin.py +237 -0
  37. package/apps/travel-chaos-organizer/backend/app/routers/cache.py +13 -0
  38. package/apps/travel-chaos-organizer/backend/app/routers/events.py +29 -0
  39. package/apps/travel-chaos-organizer/backend/app/routers/export.py +122 -0
  40. package/apps/travel-chaos-organizer/backend/app/routers/inbox.py +122 -0
  41. package/apps/travel-chaos-organizer/backend/app/routers/items.py +130 -0
  42. package/apps/travel-chaos-organizer/backend/app/routers/mail.py +108 -0
  43. package/apps/travel-chaos-organizer/backend/app/routers/parse.py +303 -0
  44. package/apps/travel-chaos-organizer/backend/app/routers/payments.py +179 -0
  45. package/apps/travel-chaos-organizer/backend/app/routers/trips.py +134 -0
  46. package/apps/travel-chaos-organizer/backend/app/routers/users.py +169 -0
  47. package/apps/travel-chaos-organizer/backend/app/routers/waitlist.py +37 -0
  48. package/apps/travel-chaos-organizer/backend/app/services/__init__.py +0 -0
  49. package/apps/travel-chaos-organizer/backend/app/services/cache.py +131 -0
  50. package/apps/travel-chaos-organizer/backend/app/services/drip.py +128 -0
  51. package/apps/travel-chaos-organizer/backend/app/services/email.py +61 -0
  52. package/apps/travel-chaos-organizer/backend/app/services/errors.py +44 -0
  53. package/apps/travel-chaos-organizer/backend/app/services/notifier.py +10 -0
  54. package/apps/travel-chaos-organizer/backend/app/services/ollama.py +101 -0
  55. package/apps/travel-chaos-organizer/backend/app/services/parser.py +22 -0
  56. package/apps/travel-chaos-organizer/backend/app/services/quota.py +85 -0
  57. package/apps/travel-chaos-organizer/backend/app/services/sentry.py +11 -0
  58. package/apps/travel-chaos-organizer/backend/app/services/telemetry.py +35 -0
  59. package/apps/travel-chaos-organizer/backend/pytest.ini +4 -0
  60. package/apps/travel-chaos-organizer/backend/requirements-dev.txt +6 -0
  61. package/apps/travel-chaos-organizer/backend/requirements.txt +25 -0
  62. package/apps/travel-chaos-organizer/backend/tests/__init__.py +0 -0
  63. package/apps/travel-chaos-organizer/backend/tests/conftest.py +223 -0
  64. package/apps/travel-chaos-organizer/backend/tests/test_admin.py +99 -0
  65. package/apps/travel-chaos-organizer/backend/tests/test_cache.py +142 -0
  66. package/apps/travel-chaos-organizer/backend/tests/test_drip.py +32 -0
  67. package/apps/travel-chaos-organizer/backend/tests/test_e2e_chain.py +121 -0
  68. package/apps/travel-chaos-organizer/backend/tests/test_export.py +48 -0
  69. package/apps/travel-chaos-organizer/backend/tests/test_inbox.py +107 -0
  70. package/apps/travel-chaos-organizer/backend/tests/test_items.py +138 -0
  71. package/apps/travel-chaos-organizer/backend/tests/test_mail.py +113 -0
  72. package/apps/travel-chaos-organizer/backend/tests/test_ollama.py +145 -0
  73. package/apps/travel-chaos-organizer/backend/tests/test_parse_url.py +98 -0
  74. package/apps/travel-chaos-organizer/backend/tests/test_parser.py +72 -0
  75. package/apps/travel-chaos-organizer/backend/tests/test_payments.py +163 -0
  76. package/apps/travel-chaos-organizer/backend/tests/test_quota.py +46 -0
  77. package/apps/travel-chaos-organizer/backend/tests/test_search.py +67 -0
  78. package/apps/travel-chaos-organizer/backend/tests/test_trips.py +123 -0
  79. package/apps/travel-chaos-organizer/backend/tests/test_users.py +52 -0
  80. package/apps/travel-chaos-organizer/backups/.gitkeep +0 -0
  81. package/apps/travel-chaos-organizer/caddy/Caddyfile +27 -0
  82. package/apps/travel-chaos-organizer/docker-compose.node1.yml +31 -0
  83. package/apps/travel-chaos-organizer/docker-compose.override.yml +14 -0
  84. package/apps/travel-chaos-organizer/docker-compose.yml +128 -0
  85. package/apps/travel-chaos-organizer/frontend/.env.example +13 -0
  86. package/apps/travel-chaos-organizer/frontend/app/(app)/_layout.tsx +80 -0
  87. package/apps/travel-chaos-organizer/frontend/app/(app)/inbox.tsx +166 -0
  88. package/apps/travel-chaos-organizer/frontend/app/(app)/search.tsx +130 -0
  89. package/apps/travel-chaos-organizer/frontend/app/(app)/settings.tsx +381 -0
  90. package/apps/travel-chaos-organizer/frontend/app/(app)/trips/[id].tsx +346 -0
  91. package/apps/travel-chaos-organizer/frontend/app/(app)/trips.tsx +363 -0
  92. package/apps/travel-chaos-organizer/frontend/app/(app)/upgrade/cancel.tsx +34 -0
  93. package/apps/travel-chaos-organizer/frontend/app/(app)/upgrade/success.tsx +35 -0
  94. package/apps/travel-chaos-organizer/frontend/app/(auth)/login.tsx +91 -0
  95. package/apps/travel-chaos-organizer/frontend/app/_layout.tsx +71 -0
  96. package/apps/travel-chaos-organizer/frontend/app/auth.tsx +29 -0
  97. package/apps/travel-chaos-organizer/frontend/app/index.tsx +16 -0
  98. package/apps/travel-chaos-organizer/frontend/app/onboarding.tsx +119 -0
  99. package/apps/travel-chaos-organizer/frontend/app.config.ts +54 -0
  100. package/apps/travel-chaos-organizer/frontend/assets/adaptive-icon.svg +66 -0
  101. package/apps/travel-chaos-organizer/frontend/assets/icon.svg +79 -0
  102. package/apps/travel-chaos-organizer/frontend/assets/splash.svg +15 -0
  103. package/apps/travel-chaos-organizer/frontend/components/BottomSheet.tsx +102 -0
  104. package/apps/travel-chaos-organizer/frontend/components/ConfettiCannon.tsx +107 -0
  105. package/apps/travel-chaos-organizer/frontend/components/ConfirmDialog.tsx +109 -0
  106. package/apps/travel-chaos-organizer/frontend/components/ErrorBoundary.tsx +45 -0
  107. package/apps/travel-chaos-organizer/frontend/components/FileUploadButton.tsx +19 -0
  108. package/apps/travel-chaos-organizer/frontend/components/ImportSheet.tsx +155 -0
  109. package/apps/travel-chaos-organizer/frontend/components/OfflineBadge.tsx +55 -0
  110. package/apps/travel-chaos-organizer/frontend/components/QRCodeViewer.tsx +80 -0
  111. package/apps/travel-chaos-organizer/frontend/components/ScoreRing.tsx +39 -0
  112. package/apps/travel-chaos-organizer/frontend/components/Screen.tsx +39 -0
  113. package/apps/travel-chaos-organizer/frontend/components/Skeleton.tsx +70 -0
  114. package/apps/travel-chaos-organizer/frontend/components/SwipeableInboxItem.tsx +121 -0
  115. package/apps/travel-chaos-organizer/frontend/components/SwipeableTimelineItem.tsx +70 -0
  116. package/apps/travel-chaos-organizer/frontend/components/TimelineItem.tsx +73 -0
  117. package/apps/travel-chaos-organizer/frontend/components/TimelineItemDetail.tsx +130 -0
  118. package/apps/travel-chaos-organizer/frontend/components/Toast.tsx +60 -0
  119. package/apps/travel-chaos-organizer/frontend/components/ToastContext.tsx +42 -0
  120. package/apps/travel-chaos-organizer/frontend/components/TripCard.tsx +146 -0
  121. package/apps/travel-chaos-organizer/frontend/components/TripQRModal.tsx +70 -0
  122. package/apps/travel-chaos-organizer/frontend/components/UpgradeBanner.tsx +44 -0
  123. package/apps/travel-chaos-organizer/frontend/eas.json +22 -0
  124. package/apps/travel-chaos-organizer/frontend/hooks/useInbox.ts +24 -0
  125. package/apps/travel-chaos-organizer/frontend/hooks/useNetworkSync.ts +60 -0
  126. package/apps/travel-chaos-organizer/frontend/hooks/useTrips.ts +112 -0
  127. package/apps/travel-chaos-organizer/frontend/lib/api.ts +223 -0
  128. package/apps/travel-chaos-organizer/frontend/lib/auth.ts +93 -0
  129. package/apps/travel-chaos-organizer/frontend/lib/db.ts +86 -0
  130. package/apps/travel-chaos-organizer/frontend/lib/fileCache.ts +54 -0
  131. package/apps/travel-chaos-organizer/frontend/lib/haptics.ts +13 -0
  132. package/apps/travel-chaos-organizer/frontend/lib/notifications.ts +112 -0
  133. package/apps/travel-chaos-organizer/frontend/lib/offlineQueue.ts +145 -0
  134. package/apps/travel-chaos-organizer/frontend/lib/quota.tsx +43 -0
  135. package/apps/travel-chaos-organizer/frontend/lib/sentry.ts +28 -0
  136. package/apps/travel-chaos-organizer/frontend/lib/shareIntent.ts +44 -0
  137. package/apps/travel-chaos-organizer/frontend/package-lock.json +13221 -0
  138. package/apps/travel-chaos-organizer/frontend/package.json +44 -0
  139. package/apps/travel-chaos-organizer/frontend/tsconfig.json +23 -0
  140. package/apps/travel-chaos-organizer/keycloak/realm-export.json +59 -0
  141. package/apps/travel-chaos-organizer/landing/index.html +773 -0
  142. package/apps/travel-chaos-organizer/scripts/backup.sh +14 -0
  143. package/apps/travel-chaos-organizer/scripts/configure-env.sh +82 -0
  144. package/apps/travel-chaos-organizer/scripts/deploy.sh +54 -0
  145. package/apps/travel-chaos-organizer/scripts/health-check.sh +36 -0
  146. package/apps/travel-chaos-organizer/scripts/migrate.sh +7 -0
  147. package/apps/travel-chaos-organizer/scripts/server-setup.sh +85 -0
  148. package/apps/travel-chaos-organizer/scripts/smoke-test.sh +29 -0
  149. package/apps/travel-chaos-organizer/scripts/verify-tracking.sh +71 -0
  150. package/apps/travel-chaos-organizer/telegram-bot/.env.example +3 -0
  151. package/apps/travel-chaos-organizer/telegram-bot/Dockerfile +6 -0
  152. package/apps/travel-chaos-organizer/telegram-bot/bot.py +504 -0
  153. package/apps/travel-chaos-organizer/telegram-bot/requirements.txt +3 -0
  154. package/dist/packages/telegram-notify/client.d.ts +19 -0
  155. package/dist/packages/telegram-notify/client.js +75 -0
  156. package/dist/packages/telegram-notify/client.js.map +1 -0
  157. package/dist/src/__tests__/auth.test.js.map +1 -0
  158. package/dist/{__tests__ → src/__tests__}/brain-flow.test.js +141 -0
  159. package/dist/src/__tests__/brain-flow.test.js.map +1 -0
  160. package/dist/src/__tests__/confidence.test.js.map +1 -0
  161. package/dist/src/__tests__/e2e/api-auth.test.js.map +1 -0
  162. package/dist/src/__tests__/e2e/api-health.test.js.map +1 -0
  163. package/dist/src/__tests__/e2e/cli.test.js.map +1 -0
  164. package/dist/src/__tests__/e2e/config.js.map +1 -0
  165. package/dist/src/__tests__/e2e/funnel.test.js.map +1 -0
  166. package/dist/src/__tests__/e2e/mcp-tools.test.js.map +1 -0
  167. package/dist/src/__tests__/e2e/provisioning.test.js.map +1 -0
  168. package/dist/{__tests__ → src/__tests__}/handlers-unit.test.js +0 -2
  169. package/dist/src/__tests__/handlers-unit.test.js.map +1 -0
  170. package/dist/src/__tests__/namespace.test.js.map +1 -0
  171. package/dist/src/__tests__/rerank.test.js +115 -0
  172. package/dist/src/__tests__/rerank.test.js.map +1 -0
  173. package/dist/src/auth.js.map +1 -0
  174. package/dist/src/bench/cachly-bench.d.ts +35 -0
  175. package/dist/src/bench/cachly-bench.js +182 -0
  176. package/dist/src/bench/cachly-bench.js.map +1 -0
  177. package/dist/src/bench/fixtures.d.ts +37 -0
  178. package/dist/src/bench/fixtures.js +225 -0
  179. package/dist/src/bench/fixtures.js.map +1 -0
  180. package/dist/src/ckg.js.map +1 -0
  181. package/dist/src/confidence.js.map +1 -0
  182. package/dist/src/embeddings.js.map +1 -0
  183. package/dist/src/handlers/advanced.js.map +1 -0
  184. package/dist/{handlers → src/handlers}/brain.js +335 -193
  185. package/dist/src/handlers/brain.js.map +1 -0
  186. package/dist/src/handlers/cache.js.map +1 -0
  187. package/dist/{handlers → src/handlers}/context.js +9 -4
  188. package/dist/src/handlers/context.js.map +1 -0
  189. package/dist/{handlers → src/handlers}/fedbrain.d.ts +6 -0
  190. package/dist/{handlers → src/handlers}/fedbrain.js +19 -7
  191. package/dist/src/handlers/fedbrain.js.map +1 -0
  192. package/dist/src/handlers/instances.js.map +1 -0
  193. package/dist/{handlers → src/handlers}/roadmap.js +7 -3
  194. package/dist/src/handlers/roadmap.js.map +1 -0
  195. package/dist/src/handlers/syndicate.js.map +1 -0
  196. package/dist/src/handlers/tco.d.ts +16 -0
  197. package/dist/src/handlers/tco.js +303 -0
  198. package/dist/src/handlers/tco.js.map +1 -0
  199. package/dist/{handlers → src/handlers}/team.js +57 -7
  200. package/dist/src/handlers/team.js.map +1 -0
  201. package/dist/{index.js → src/index.js} +209 -431
  202. package/dist/src/index.js.map +1 -0
  203. package/dist/src/namespace.js.map +1 -0
  204. package/dist/src/notifier.d.ts +5 -0
  205. package/dist/src/notifier.js +6 -0
  206. package/dist/src/notifier.js.map +1 -0
  207. package/dist/src/rerank.d.ts +55 -0
  208. package/dist/src/rerank.js +111 -0
  209. package/dist/src/rerank.js.map +1 -0
  210. package/dist/src/search.js.map +1 -0
  211. package/dist/src/search.test.d.ts +1 -0
  212. package/dist/src/search.test.js.map +1 -0
  213. package/dist/{tools.d.ts → src/tools.d.ts} +226 -0
  214. package/dist/{tools.js → src/tools.js} +196 -0
  215. package/dist/src/tools.js.map +1 -0
  216. package/dist/src/utils.js.map +1 -0
  217. package/package.json +8 -7
  218. package/packages/telegram-notify/SPLIT_PLAN.md +106 -0
  219. package/packages/telegram-notify/client.ts +88 -0
  220. package/packages/telegram-notify/emojis.json +22 -0
  221. package/packages/telegram-notify/pyproject.toml +17 -0
  222. package/packages/telegram-notify/telegram_notify/__init__.py +3 -0
  223. package/packages/telegram-notify/telegram_notify/client.py +87 -0
  224. package/packages/telegram-notify/telegram_notify/emojis.json +22 -0
  225. package/scripts/generate-icons.js +28 -0
  226. package/server.json +3 -3
  227. package/smithery.yaml +27 -16
  228. package/src/__tests__/brain-flow.test.ts +174 -0
  229. package/src/__tests__/handlers-unit.test.ts +1 -2
  230. package/src/__tests__/rerank.test.ts +130 -0
  231. package/src/bench/cachly-bench.ts +217 -0
  232. package/src/bench/fixtures.ts +256 -0
  233. package/src/handlers/brain.ts +345 -197
  234. package/src/handlers/context.ts +9 -4
  235. package/src/handlers/fedbrain.ts +21 -7
  236. package/src/handlers/roadmap.ts +7 -3
  237. package/src/handlers/tco.ts +347 -0
  238. package/src/handlers/team.ts +67 -7
  239. package/src/index.ts +224 -418
  240. package/src/notifier.ts +5 -0
  241. package/src/rerank.ts +148 -0
  242. package/src/tools.ts +210 -0
  243. package/tsconfig.json +2 -3
  244. package/dist/__tests__/auth.test.js.map +0 -1
  245. package/dist/__tests__/brain-flow.test.js.map +0 -1
  246. package/dist/__tests__/brain-predict-failures.test.d.ts +0 -17
  247. package/dist/__tests__/brain-predict-failures.test.js +0 -339
  248. package/dist/__tests__/brain-predict-failures.test.js.map +0 -1
  249. package/dist/__tests__/confidence.test.js.map +0 -1
  250. package/dist/__tests__/e2e/api-auth.test.js.map +0 -1
  251. package/dist/__tests__/e2e/api-health.test.js.map +0 -1
  252. package/dist/__tests__/e2e/cli.test.js.map +0 -1
  253. package/dist/__tests__/e2e/config.js.map +0 -1
  254. package/dist/__tests__/e2e/funnel.test.js.map +0 -1
  255. package/dist/__tests__/e2e/mcp-tools.test.js.map +0 -1
  256. package/dist/__tests__/e2e/provisioning.test.js.map +0 -1
  257. package/dist/__tests__/handlers-unit.test.js.map +0 -1
  258. package/dist/__tests__/namespace.test.js.map +0 -1
  259. package/dist/auth.js.map +0 -1
  260. package/dist/ckg.js.map +0 -1
  261. package/dist/confidence.js.map +0 -1
  262. package/dist/embeddings.js.map +0 -1
  263. package/dist/handlers/advanced.js.map +0 -1
  264. package/dist/handlers/brain.js.map +0 -1
  265. package/dist/handlers/cache.js.map +0 -1
  266. package/dist/handlers/context.js.map +0 -1
  267. package/dist/handlers/fedbrain.js.map +0 -1
  268. package/dist/handlers/instances.js.map +0 -1
  269. package/dist/handlers/roadmap.js.map +0 -1
  270. package/dist/handlers/syndicate.js.map +0 -1
  271. package/dist/handlers/team.js.map +0 -1
  272. package/dist/index.js.map +0 -1
  273. package/dist/namespace.js.map +0 -1
  274. package/dist/search.js.map +0 -1
  275. package/dist/search.test.js.map +0 -1
  276. package/dist/tools.js.map +0 -1
  277. package/dist/utils.js.map +0 -1
  278. package/src/__tests__/brain-predict-failures.test.ts +0 -430
  279. /package/dist/{__tests__ → src/__tests__}/auth.test.d.ts +0 -0
  280. /package/dist/{__tests__ → src/__tests__}/auth.test.js +0 -0
  281. /package/dist/{__tests__ → src/__tests__}/brain-flow.test.d.ts +0 -0
  282. /package/dist/{__tests__ → src/__tests__}/confidence.test.d.ts +0 -0
  283. /package/dist/{__tests__ → src/__tests__}/confidence.test.js +0 -0
  284. /package/dist/{__tests__ → src/__tests__}/e2e/api-auth.test.d.ts +0 -0
  285. /package/dist/{__tests__ → src/__tests__}/e2e/api-auth.test.js +0 -0
  286. /package/dist/{__tests__ → src/__tests__}/e2e/api-health.test.d.ts +0 -0
  287. /package/dist/{__tests__ → src/__tests__}/e2e/api-health.test.js +0 -0
  288. /package/dist/{__tests__ → src/__tests__}/e2e/cli.test.d.ts +0 -0
  289. /package/dist/{__tests__ → src/__tests__}/e2e/cli.test.js +0 -0
  290. /package/dist/{__tests__ → src/__tests__}/e2e/config.d.ts +0 -0
  291. /package/dist/{__tests__ → src/__tests__}/e2e/config.js +0 -0
  292. /package/dist/{__tests__ → src/__tests__}/e2e/funnel.test.d.ts +0 -0
  293. /package/dist/{__tests__ → src/__tests__}/e2e/funnel.test.js +0 -0
  294. /package/dist/{__tests__ → src/__tests__}/e2e/mcp-tools.test.d.ts +0 -0
  295. /package/dist/{__tests__ → src/__tests__}/e2e/mcp-tools.test.js +0 -0
  296. /package/dist/{__tests__ → src/__tests__}/e2e/provisioning.test.d.ts +0 -0
  297. /package/dist/{__tests__ → src/__tests__}/e2e/provisioning.test.js +0 -0
  298. /package/dist/{__tests__ → src/__tests__}/handlers-unit.test.d.ts +0 -0
  299. /package/dist/{__tests__ → src/__tests__}/namespace.test.d.ts +0 -0
  300. /package/dist/{__tests__ → src/__tests__}/namespace.test.js +0 -0
  301. /package/dist/{search.test.d.ts → src/__tests__/rerank.test.d.ts} +0 -0
  302. /package/dist/{auth.d.ts → src/auth.d.ts} +0 -0
  303. /package/dist/{auth.js → src/auth.js} +0 -0
  304. /package/dist/{ckg.d.ts → src/ckg.d.ts} +0 -0
  305. /package/dist/{ckg.js → src/ckg.js} +0 -0
  306. /package/dist/{confidence.d.ts → src/confidence.d.ts} +0 -0
  307. /package/dist/{confidence.js → src/confidence.js} +0 -0
  308. /package/dist/{embeddings.d.ts → src/embeddings.d.ts} +0 -0
  309. /package/dist/{embeddings.js → src/embeddings.js} +0 -0
  310. /package/dist/{handlers → src/handlers}/advanced.d.ts +0 -0
  311. /package/dist/{handlers → src/handlers}/advanced.js +0 -0
  312. /package/dist/{handlers → src/handlers}/brain.d.ts +0 -0
  313. /package/dist/{handlers → src/handlers}/cache.d.ts +0 -0
  314. /package/dist/{handlers → src/handlers}/cache.js +0 -0
  315. /package/dist/{handlers → src/handlers}/context.d.ts +0 -0
  316. /package/dist/{handlers → src/handlers}/instances.d.ts +0 -0
  317. /package/dist/{handlers → src/handlers}/instances.js +0 -0
  318. /package/dist/{handlers → src/handlers}/roadmap.d.ts +0 -0
  319. /package/dist/{handlers → src/handlers}/syndicate.d.ts +0 -0
  320. /package/dist/{handlers → src/handlers}/syndicate.js +0 -0
  321. /package/dist/{handlers → src/handlers}/team.d.ts +0 -0
  322. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  323. /package/dist/{namespace.d.ts → src/namespace.d.ts} +0 -0
  324. /package/dist/{namespace.js → src/namespace.js} +0 -0
  325. /package/dist/{search.d.ts → src/search.d.ts} +0 -0
  326. /package/dist/{search.js → src/search.js} +0 -0
  327. /package/dist/{search.test.js → src/search.test.js} +0 -0
  328. /package/dist/{utils.d.ts → src/utils.d.ts} +0 -0
  329. /package/dist/{utils.js → src/utils.js} +0 -0
@@ -0,0 +1,58 @@
1
+ name: EAS Build — TCO Android Preview
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ message:
7
+ description: 'Build reason'
8
+ default: 'manual build'
9
+
10
+ jobs:
11
+ build:
12
+ name: Build Android preview APK
13
+ runs-on: ubuntu-latest
14
+ defaults:
15
+ run:
16
+ working-directory: apps/travel-chaos-organizer/frontend
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - uses: actions/setup-node@v4
22
+ with:
23
+ node-version: '20'
24
+
25
+ - name: Install dependencies
26
+ run: npm install
27
+
28
+ - name: Convert SVG icons to PNG (EAS Build requires PNG)
29
+ run: |
30
+ sudo apt-get install -y --no-install-recommends librsvg2-bin
31
+ rsvg-convert -w 1024 -h 1024 assets/icon.svg -o assets/icon.png
32
+ rsvg-convert -w 1024 -h 1024 assets/adaptive-icon.svg -o assets/adaptive-icon.png
33
+ rsvg-convert -w 2048 -h 2048 assets/splash.svg -o assets/splash.png
34
+ echo "Icons converted:"
35
+ ls -lh assets/*.png
36
+
37
+ - name: Setup EAS
38
+ uses: expo/expo-github-action@v8
39
+ with:
40
+ eas-version: latest
41
+ token: ${{ secrets.EXPO_TOKEN }}
42
+
43
+ - name: Create .env with production variables
44
+ run: |
45
+ echo "EXPO_PUBLIC_API_URL=${{ secrets.EXPO_PUBLIC_API_URL }}" >> .env
46
+ echo "EXPO_PUBLIC_KEYCLOAK_URL=${{ secrets.EXPO_PUBLIC_KEYCLOAK_URL }}" >> .env
47
+ echo "EXPO_PUBLIC_KEYCLOAK_REALM=${{ secrets.EXPO_PUBLIC_KEYCLOAK_REALM || 'travel-chaos' }}" >> .env
48
+ echo "EXPO_PUBLIC_KEYCLOAK_CLIENT_ID=${{ secrets.EXPO_PUBLIC_KEYCLOAK_CLIENT_ID || 'tco-mobile' }}" >> .env
49
+
50
+ - name: Build Android (preview — internal distribution)
51
+ run: |
52
+ eas build \
53
+ --profile preview \
54
+ --platform android \
55
+ --non-interactive \
56
+ --no-wait
57
+ # --no-wait: EAS build runs in the cloud asynchronously.
58
+ # Download the APK from expo.dev → your project → Builds when done (~10-15 min).
@@ -0,0 +1,55 @@
1
+ name: EAS Update — TCO Production
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'apps/travel-chaos-organizer/frontend/**'
8
+ workflow_dispatch:
9
+ inputs:
10
+ message:
11
+ description: 'Update message'
12
+ default: 'OTA update'
13
+
14
+ jobs:
15
+ update:
16
+ name: Publish EAS Update to production
17
+ runs-on: ubuntu-latest
18
+ defaults:
19
+ run:
20
+ working-directory: apps/travel-chaos-organizer/frontend
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+
24
+ - uses: actions/setup-node@v4
25
+ with:
26
+ node-version: '20'
27
+
28
+ - name: Install dependencies
29
+ run: npm ci
30
+
31
+ - name: TypeScript typecheck
32
+ run: npx tsc --noEmit
33
+
34
+ - name: Create .env with production variables
35
+ run: |
36
+ echo "EXPO_PUBLIC_API_URL=${{ secrets.EXPO_PUBLIC_API_URL }}" >> .env
37
+ echo "EXPO_PUBLIC_KEYCLOAK_URL=${{ secrets.EXPO_PUBLIC_KEYCLOAK_URL }}" >> .env
38
+ echo "EXPO_PUBLIC_KEYCLOAK_REALM=${{ secrets.EXPO_PUBLIC_KEYCLOAK_REALM || 'travel-chaos' }}" >> .env
39
+ echo "EXPO_PUBLIC_KEYCLOAK_CLIENT_ID=${{ secrets.EXPO_PUBLIC_KEYCLOAK_CLIENT_ID || 'tco-mobile' }}" >> .env
40
+
41
+ - name: Publish EAS Update
42
+ env:
43
+ EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
44
+ run: |
45
+ MESSAGE="${{ github.event.inputs.message || github.event.head_commit.message }}"
46
+ MESSAGE="${MESSAGE:0:100}"
47
+ # Publish to both channels so preview and production builds both get the update
48
+ npx eas-cli update \
49
+ --branch production \
50
+ --message "$MESSAGE" \
51
+ --non-interactive
52
+ npx eas-cli update \
53
+ --branch preview \
54
+ --message "$MESSAGE" \
55
+ --non-interactive
@@ -13,9 +13,9 @@ jobs:
13
13
  steps:
14
14
  - uses: actions/checkout@v4
15
15
 
16
- - uses: actions/setup-node@v5
16
+ - uses: actions/setup-node@v4
17
17
  with:
18
- node-version: '24'
18
+ node-version: '20'
19
19
  registry-url: 'https://registry.npmjs.org'
20
20
 
21
21
  - name: Install dependencies
package/BENCH.md ADDED
@@ -0,0 +1,91 @@
1
+ # Cachly-Bench — the recall-quality proof
2
+
3
+ > The STRATEGY.md moat claim is: *Cachly's structured, quality-aware recall beats
4
+ > raw text matching (and a flat-file memory) at surfacing the lesson that actually
5
+ > helps.* A claim without a number is marketing. This is the number.
6
+
7
+ ## Run it
8
+
9
+ ```bash
10
+ npm run bench # pretty report
11
+ npm run bench -- --json # machine-readable
12
+ ```
13
+
14
+ The benchmark is also a CI regression guard: `src/__tests__/rerank.test.ts`
15
+ asserts that quality reranking never regresses the headline metrics and that the
16
+ baseline is already strong (so the corpus isn't rigged).
17
+
18
+ ## What it measures
19
+
20
+ Two rankers are compared over the **same** BM25 candidate set, so the comparison
21
+ isolates *ranking quality*, not retrieval:
22
+
23
+ | Ranker | What it does | Analogy |
24
+ |---|---|---|
25
+ | `baseline` | raw BM25+ keyword score (`src/search.ts`) | a text-only / flat-file memory |
26
+ | `cachly` | BM25+ then quality-aware rerank (`src/rerank.ts`) | structured, trust-aware recall |
27
+
28
+ Quality reranking boosts a lesson by five orthogonal signals:
29
+ 1. **Outcome** (proven success > partial > failed attempt)
30
+ 2. **Confidence** (0..1 → maps to a 0.7..1.3 nudge)
31
+ 3. **Proven-ness** (`recall_count`, log-saturated, caps at +30%)
32
+ 4. **Severity** (critical issue > minor, mild tiebreaker)
33
+ 5. **Governance** (`review_level` × distinct `endorsements` — a senior-reviewed
34
+ lesson outranks an unreviewed one even when the text is nearly identical)
35
+
36
+ All five factors are multiplied and clamped to `[0.5, 2.5]` so a strong text match
37
+ is never fully buried, and a weak one never catapulted on quality alone.
38
+
39
+ ## The corpus is fair (not rigged)
40
+
41
+ The fixture corpus (`src/bench/fixtures.ts`) is deliberately and *fairly*
42
+ adversarial in two dimensions:
43
+
44
+ **Failure-distractor pairs:** for several queries a **symptom-dense failed attempt**
45
+ competes with the **solution-focused proven success**. Failed attempts repeat the
46
+ symptom verbatim ("still stuck, still failing"); the lesson that fixed it is written
47
+ in solution vocabulary. BM25 alone is fooled by the symptom density; quality
48
+ reranking corrects it.
49
+
50
+ **Governance pairs:** two success lessons with near-identical vocabulary, but only
51
+ one has a senior reviewer endorsement. BM25 cannot distinguish them; the governance
52
+ signal breaks the tie in favour of the reviewed, canonical lesson.
53
+
54
+ The baseline still scores well (MRR ~82%, Precision@1 ~69%) — we are not making a
55
+ weak baseline look bad. We are improving an already-good one on the cases that matter.
56
+
57
+ ## Current results
58
+
59
+ ```
60
+ corpus: 17 lessons · queries: 13
61
+
62
+ metric baseline cachly lift
63
+ Precision@1 69.2% → 84.6% +22.2%
64
+ Precision@3 33.3% → 33.3% +0.0%
65
+ Recall@3 96.2% → 96.2% +0.0%
66
+ MRR 82.1% → 91.0% +10.9%
67
+ nDCG@5 85.5% → 92.4% +8.1%
68
+ ```
69
+
70
+ **Headline: Precision@1 +22.2%, MRR +10.9%, nDCG@5 +8.1%.**
71
+
72
+ Interpretation: when the agent asks a question, the *first* result is the proven
73
+ fix 22% more often. On the hardest cases — a symptom-dense failed attempt beating
74
+ the success on raw text, or two near-identical success lessons where only one was
75
+ reviewed — reranking consistently surfaces the lesson that actually solves the problem.
76
+
77
+ ## Honest limitations (read this)
78
+
79
+ - **Small corpus.** 17 lessons, 13 queries. This proves the *mechanism* works for
80
+ each quality signal and guards against regressions. It does **not** yet prove
81
+ real-world magnitude. The next step is a larger, externally-sourced corpus and a
82
+ head-to-head against an actual flat-file memory baseline on real agent traces.
83
+ - **Ranking, not retrieval.** Both rankers see the same BM25 candidates, so this
84
+ measures the quality layer only. CKG-traversal and semantic retrieval are
85
+ evaluated separately via integration tests and are not in these numbers.
86
+ - **Labels are ours.** Gold relevance is author-assigned. A credible public
87
+ benchmark needs third-party labels.
88
+
89
+ The point of this file is not to claim victory. It is to make the moat
90
+ *measurable* and *defended by CI*, so every future change to recall must move this
91
+ number in the right direction — or it doesn't ship.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,50 @@
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.10.57] – 2026-05-29
11
+
12
+ ### Critical: fixed broken npm entry point + version hygiene
13
+
14
+ - **Fixed the package entry point.** When the shared `telegram-notify` package was
15
+ added to the TypeScript build, tsc began emitting to `dist/src/index.js`, but
16
+ `bin`/`main`/`start` still pointed at `dist/index.js`. Versions **0.10.50–0.10.52
17
+ shipped a non-existent entry point** (`npx @cachly-dev/mcp-server` failed). All
18
+ paths now correctly point to `dist/src/index.js`, verified by running the built
19
+ binary.
20
+ - **Version re-sync.** `package.json`, `server.json` (MCP registry manifest, was
21
+ stuck at 0.10.23), `package-lock.json` (was 0.10.49), and `MCP_VERSION` are now
22
+ all `0.10.57`. Bumped ahead of the previously published 0.10.55/0.10.56 so
23
+ `latest` points forward again instead of regressing to 0.10.52.
24
+ - **Accurate tool count (95).** README badge, `server.json`, `package.json`, and CLI
25
+ banners claimed 80/89 tools; corrected to the actual 95.
26
+
27
+ ## [0.10.52] – 2026-05-29
28
+
29
+ - `smart_recall`: CKG traversal as a 3rd retrieval signal — surfaces lessons that
30
+ *fixed* causal-graph-similar problems even when vocabulary differs (🕸️ badge).
31
+ - Cachly-Bench corpus expanded with a governance adversarial pair; headline lift
32
+ rose to **Precision@1 +22.2%, MRR +10.9%**.
33
+
34
+ ## [0.10.51] – 2026-05-29
35
+
36
+ - `team_confirm`: human review (🛡️ senior / ✔️ peer) raises a lesson's recall
37
+ ranking — confirmed knowledge outranks unreviewed auto-learned entries.
38
+
39
+ ## [0.10.50] – 2026-05-29
40
+
41
+ - `smart_recall`: unified keyword + semantic results into one hybrid-ranked list.
42
+ - "Brain saved you here" banner surfaces estimated time saved per proven recall.
43
+
44
+ ## [0.10.49] – 2026-05-29
45
+
46
+ - Persist JWT after device flow (telemetry showed zero authenticated calls after
47
+ restarts). Quality-aware reranking + Cachly-Bench (the moat proof) introduced.
48
+
49
+ > Note: 0.10.39–0.10.48 and 0.10.53–0.10.56 were interim/parallel publishes; see
50
+ > git history for details. 0.10.57 supersedes all of them.
51
+
52
+ ---
53
+
10
54
  ## [0.10.38] – 2026-05-25
11
55
 
12
56
  ### `cachly status` — Brain health at a glance
package/README.md CHANGED
@@ -20,11 +20,7 @@
20
20
  <img src="https://img.shields.io/badge/GDPR-EU%20servers-green" alt="GDPR: EU servers" />
21
21
  </a>
22
22
  &nbsp;
23
- <a href="https://smithery.ai/server/@cachly-dev/cachly-mcp">
24
- <img src="https://smithery.ai/badge/@cachly-dev/cachly-mcp" alt="Smithery" />
25
- </a>
26
- &nbsp;
27
- <img src="https://img.shields.io/badge/80%20MCP%20tools-violet" alt="80 MCP tools" />
23
+ <img src="https://img.shields.io/badge/95%20MCP%20tools-violet" alt="95 MCP tools" />
28
24
  &nbsp;
29
25
  <img src="https://img.shields.io/badge/License-Apache--2.0-yellow" alt="License: Apache-2.0" />
30
26
  &nbsp;
@@ -166,7 +162,7 @@ npx @cachly-dev/mcp-server@latest learn-git # Auto-learn lessons from recent git
166
162
  ```
167
163
 
168
164
  > **Tip — auto-learn on every merged PR:** run `learn-git` in CI via the
169
- > [cachly-brain-setup GitHub Action](https://github.com/marketplace/actions/cachly-brain-setup)
165
+ > [cachly-brain-setup GitHub Action](https://github.com/cachly-dev/cachly/tree/main/sdk/github-action)
170
166
  > with `mode: learn`. Each merged PR teaches your Brain automatically — no manual calls.
171
167
 
172
168
  ---
@@ -391,34 +387,10 @@ On the first tool call your AI will prompt you to sign in — takes 10 seconds.
391
387
 
392
388
  ## 🛠️ Ecosystem
393
389
 
394
- ### 🧠 AI Memory & IDE Integration
395
-
396
- | | Package / Tool | What it does |
397
- |---|---|---|
398
- | 📦 | **[`@cachly-dev/mcp-server`](https://www.npmjs.com/package/@cachly-dev/mcp-server)** | ← you are here — MCP server for Claude Code, Cursor, Copilot & Windsurf |
399
- | 🔌 | **[VS Code Extension](https://marketplace.visualstudio.com/items?itemName=cachly-dev.cachly-brain)** | Brain status bar · CodeLens lesson hints · ambient auto-learning · Memory Crystals 💎 |
400
- | 🔌 | **IntelliJ Plugin** *(coming soon)* | Same persistent AI memory for JetBrains IDEs (IDEA, PyCharm, WebStorm, …) |
401
- | ⚙️ | **[GitHub Action](https://github.com/marketplace/actions/cachly-brain-setup)** | Auto-configure AI Brain for any repo in CI — generates `copilot-instructions.md` & `.mcp.json` |
402
-
403
- ### 💰 LLM Cost Reduction
404
-
405
- | | Package | What it does |
406
- |---|---|---|
407
- | 📦 | **[`@cachly-dev/openclaw`](https://www.npmjs.com/package/@cachly-dev/openclaw)** | Cut OpenAI / Anthropic API costs **60–90%** — semantic cache with BM25+ fuzzy matching, no embeddings required |
408
-
409
- ### 📦 SDK — Managed Cache + AI Memory
410
-
411
- | Language | Package | Install |
412
- |---|---|---|
413
- | Node.js / TS | [`@cachly-dev/sdk`](https://www.npmjs.com/package/@cachly-dev/sdk) | `npm i @cachly-dev/sdk` |
414
- | Python | [`cachly`](https://pypi.org/project/cachly/) | `pip install cachly` |
415
- | Rust | [`cachly`](https://crates.io/crates/cachly) | `cargo add cachly` |
416
- | Go | [`cachly-dev/cachly-go`](https://pkg.go.dev/github.com/cachly-dev/cachly-go) | `go get github.com/cachly-dev/cachly-go` |
417
- | .NET / C# | [`Cachly.Client`](https://cachly.dev/docs/api) | `dotnet add package Cachly.Client` |
418
- | Java | [`dev.cachly:cachly-java`](https://cachly.dev/docs/api) | Maven / Gradle |
419
- | Kotlin | [`dev.cachly:cachly-kotlin`](https://cachly.dev/docs/api) | Maven / Gradle |
420
- | Swift | [`Cachly`](https://cachly.dev/docs/api) | Swift Package Manager |
421
- | PHP | [`cachly-dev/sdk`](https://packagist.org/packages/cachly-dev/sdk) | `composer require cachly-dev/sdk` |
390
+ | Package | What it does |
391
+ |---------|-------------|
392
+ | **[`@cachly-dev/mcp-server`](https://www.npmjs.com/package/@cachly-dev/mcp-server)** | ← you are here |
393
+ | **[`@cachly-dev/openclaw`](https://www.npmjs.com/package/@cachly-dev/openclaw)** | Cut LLM costs 60–90% in JS/TS apps |
422
394
 
423
395
  ---
424
396
 
package/STRATEGY.md ADDED
@@ -0,0 +1,228 @@
1
+ # Cachly vs. Anthropic Memory — Ehrliche Standortbestimmung & 10x/100x-Roadmap
2
+
3
+ > Stand: 29. Mai 2026 · Verfasst als interne, schonungslose Bestandsaufnahme.
4
+ > Ziel: Wo stehen wir wirklich, was ist der Graben den Anthropic uns gräbt, und
5
+ > was braucht es konkret, damit Cachly für die nächsten Jahre 10–100x besser,
6
+ > stabiler, intelligenter und nutzerfreundlicher dasteht.
7
+
8
+ ---
9
+
10
+ ## 0. TL;DR (für die Eiligen)
11
+
12
+ - **Die Lücke, die wir füllen wollten, schließt Anthropic gerade selbst** — aber
13
+ nur für den Solo-Claude-Nutzer. Das Memory Tool, Managed-Agents-Memory,
14
+ Chat-Memory und "Dreaming" decken den **Single-User-, Single-Vendor-Fall**
15
+ zunehmend gut ab.
16
+ - **Unser echter, verteidigbarer Graben liegt woanders**: *team-/org-weites,
17
+ strukturiertes, vendor- und tool-unabhängiges Wissen mit Governance.* Genau das
18
+ kann Anthropic strukturell **nicht** liefern, ohne ihr eigenes Lock-in-Modell zu
19
+ untergraben.
20
+ - **Brutale Wahrheit**: Heute gewinnen wir diesen Graben *nicht* überzeugend.
21
+ Onboarding hat zu viel Reibung, die Recall-Qualität ist nicht nachweisbar besser
22
+ als "Claude liest seine eigenen Files", und wir hatten zuletzt zu viele Bugs für
23
+ ein Produkt, das gegen ein First-Party-Feature antritt.
24
+ - **Der Weg zu 10x/100x** ist kein Feature-Wettrennen mit Anthropic. Es ist:
25
+ (1) **Recall-Qualität messbar überlegen machen**, (2) **Onboarding auf
26
+ Null-Reibung** bringen, (3) **Team-Wissensgraph zum Moat ausbauen**,
27
+ (4) **vendor-/tool-agnostisch** bleiben, (5) **Stabilität auf First-Party-Niveau**.
28
+
29
+ ---
30
+
31
+ ## 1. Was Anthropic heute hat (der ehrliche Blick auf den Gegner)
32
+
33
+ | Feature | Was es ist | Reichweite | Schwäche für uns nutzbar? |
34
+ |---|---|---|---|
35
+ | **Memory Tool** (`memory_20250818`) | Client-seitige Datei-Ops im `/memories`-Verzeichnis, 6 Commands (view/create/str_replace/insert/delete/rename) | Nur Anthropic-API, nur Claude-Modelle | **Ja** — unstrukturiert (flache Files), kein semantisches Retrieval, per-Agent |
36
+ | **Managed Agents Memory** (Public Beta, Apr 2026) | Anthropic-gehostete Files, via API/Console exportierbar | Anthropic-Plattform | **Ja** — kein Team-Sharing-Modell, kein Wissensgraph |
37
+ | **Chat Memory** (März 2026) | Auto-Destillation von Chats ~alle 24h in ein Memory-Profil | Consumer (Free/Pro/Max) | **Ja** — Consumer-only, nicht für Dev-Workflows/CI/Teams |
38
+ | **Dreaming** (Research Preview) | Background-Prozess: Muster aus Sessions extrahieren, Memory kuratieren | Claude-intern | ⚠️ **Gefährlich** — das ist konzeptionell *unser* Crystallize/Belief-Update |
39
+ | **Opus 4.8 Context** | 1M Token default, "infinite conversations" via Summarization, Suche über alte Chats | Claude | ⚠️ Reduziert den *Bedarf* an externem Memory für Solo-User |
40
+
41
+ ### Die unbequeme Erkenntnis
42
+ Anthropics Memory ist **gratis, null Setup, first-party, und wird monatlich besser.**
43
+ Für einen einzelnen Entwickler, der ausschließlich Claude nutzt, ist die Frage
44
+ "Warum Cachly statt dem eingebauten Memory?" heute **nicht trivial zu beantworten.**
45
+
46
+ ---
47
+
48
+ ## 2. Wo Cachly strukturell gewinnen kann (der echte Graben)
49
+
50
+ Diese vier Punkte kann Anthropic nicht ohne Selbst-Sabotage angreifen:
51
+
52
+ ### 2.1 Vendor- & Tool-Unabhängigkeit
53
+ - Anthropic-Memory lebt **in Anthropics Filesystem, gebunden an Claude über die
54
+ Anthropic-API.** Wechselst du zu GPT, Gemini, einem lokalen Modell oder nutzt
55
+ Cursor/Windsurf/Zed parallel — **dein Memory ist weg oder fragmentiert.**
56
+ - Cachly spricht **MCP** → funktioniert mit *jedem* MCP-Client und ist
57
+ modell-agnostisch. **Dein Org-Wissen überlebt jeden Modellwechsel.**
58
+ - *Das ist die Positionierung, die nie veraltet:* "Switzerland für AI-Memory."
59
+
60
+ ### 2.2 Team-/Org-weites Wissen
61
+ - Anthropic-Memory ist **per-User / per-Agent.** Es gibt kein "Kollege A lernt
62
+ etwas, Kollege B profitiert beim nächsten `session_start`."
63
+ - `team_learn` + geteilte Brain-Instanz ist **genau das** — und es ist der
64
+ Use-Case mit dem höchsten ökonomischen Wert (verhindert, dass 10 Entwickler
65
+ denselben Fehler 10x machen).
66
+
67
+ ### 2.3 Strukturiertes, kuratiertes Wissen statt flacher Files
68
+ - Anthropic = Claude liest linear Textdateien.
69
+ - Cachly = strukturierte Lessons (`topic`, `outcome`, `severity`, `tags`,
70
+ `depends_on`), Contradiction-Detection, Causal Knowledge Graph (CKG),
71
+ Belief-Update-Engine (BUE). **ABER:** dieser Vorteil ist heute *behauptet, nicht
72
+ bewiesen.* Siehe §3.
73
+
74
+ ### 2.4 Governance, Compliance, Self-Hosting
75
+ - Self-hosted Valkey, BYOK, Audit-Trails, DSGVO-Löschung, SOC-2-Pfad.
76
+ - Enterprises **dürfen** ihr Wissen oft nicht in Anthropics Managed Memory legen.
77
+ Das ist ein Verkaufsargument, das mit der Zeit *stärker* wird, nicht schwächer.
78
+
79
+ ---
80
+
81
+ ## 3. Wo wir heute ehrlich schwach sind
82
+
83
+ Kein Schönreden:
84
+
85
+ 1. **Recall-Qualität ist nicht gemessen.** Wir behaupten "strukturiert > flache
86
+ Files", haben aber **kein Benchmark**, das zeigt: Cachly-Recall führt zu
87
+ weniger Wiederholungsfehlern / besseren Antworten als das eingebaute Memory.
88
+ *Ohne diesen Beweis ist unser Hauptargument Marketing.*
89
+ 2. **Onboarding-Reibung.** Anthropic: 0 Setup. Cachly: Instanz provisionieren,
90
+ Device-Flow, MCP-Config, JWT-Persistenz, Instance-ID. Jede dieser Stufen ist
91
+ ein Drop-off-Punkt — und mehrere waren zuletzt **kaputt** (JWT nur im RAM,
92
+ Redis NOAUTH, Provisioning-Timeouts).
93
+ 3. **Stabilität.** Wir haben in den letzten Tagen viele kritische Bugs gefunden und
94
+ gefixt (Telemetrie-Zähler bei 0, NOAUTH, PKCE komplett kaputt, doppelte Drip-
95
+ Mails, Admin-Bypass). Ein Produkt, das gegen ein First-Party-Feature antritt,
96
+ **darf solche Bugs nicht haben.** Vertrauen ist hier asymmetrisch.
97
+ 4. **Wertnachweis fehlt dem User.** Der Nutzer sieht nicht, *dass* Cachly ihm
98
+ gerade einen Fehler erspart hat. Anthropics Memory ist unsichtbar-bequem;
99
+ unseres ist sichtbar-umständlich. Das muss sich umkehren.
100
+ 5. **"Dreaming" ist eine direkte Bedrohung** für unser Crystallize/BUE-
101
+ Alleinstellungsmerkmal. Wenn das Modell selbst Muster extrahiert, müssen wir
102
+ beim *Team-übergreifenden* und *strukturierten* Teil uneinholbar sein.
103
+
104
+ ---
105
+
106
+ ## 4. Die 10x/100x-Roadmap (konkret, priorisiert)
107
+
108
+ > Leitsatz: **Wir gewinnen nicht, indem wir Anthropics Memory kopieren. Wir
109
+ > gewinnen, indem wir das werden, was Anthropic strukturell nicht sein darf:
110
+ > der neutrale, team-weite, beweisbar-bessere Wissens-Layer über allen Modellen.**
111
+
112
+ ### Phase 1 — Stabilität & Null-Reibung (die Eintrittskarte) · *0–3 Monate*
113
+ Ohne das ist alles andere wertlos.
114
+
115
+ - **[10x Stabilität]** Vollständige Test-Suite für die Brain-Tools (Recall, Learn,
116
+ Dedup, Contradiction). Heute faktisch ungetestet. Ziel: jede Tool-Antwort hat
117
+ einen Vertragstest.
118
+ - **[10x Onboarding]** "Ein-Befehl-Setup": `npx @cachly-dev/init` → Auto-Provision,
119
+ Device-Flow, MCP-Config-Write, erster `brain_from_git`-Seed, alles in <60s,
120
+ idempotent, mit klarem Fortschritt. Jeder bisherige Drop-off-Punkt eliminiert.
121
+ - **[Reibung]** Graceful Degradation: Wenn Redis/Netz weg ist, darf das Tool
122
+ **nie** den ganzen Agent-Call blockieren. Timeouts + Circuit-Breaker überall.
123
+ - **[Vertrauen]** Self-Healing-Auth: JWT/Instance-ID persistent, automatische
124
+ Re-Provisionierung bei verlorenem State, kein "0 Recalls weil RAM-only" mehr.
125
+
126
+ ### Phase 2 — Beweisbar bessere Recall-Qualität (der Moat-Beweis) · *3–9 Monate*
127
+ Das ist der Punkt, an dem wir *verdienen*, gegen First-Party anzutreten.
128
+
129
+ > **Status (begonnen):** Erste Bausteine sind live — `npm run bench`
130
+ > (siehe [BENCH.md](./BENCH.md)) misst den Recall-Lift und ist CI-verteidigt.
131
+ > Aktuelle Zahl: **Precision@1 +11.1 %, MRR +6.6 %, nDCG@5 +5.0 %** gegenüber
132
+ > reinem BM25. Quality-Reranking (`src/rerank.ts`) ist in `smart_recall` verdrahtet,
133
+ > Contradiction-Resolution wird jetzt persistiert. Nächster Schritt: größerer,
134
+ > extern gelabelter Korpus + Head-to-head gegen ein echtes Flat-File-Memory.
135
+
136
+ - **[✅ erledigt]** **Quality-aware Reranking**: proven success-Lessons ranken über
137
+ text-ähnlichen Fehlversuchen (`src/rerank.ts`, in `smart_recall` aktiv).
138
+ - **[✅ erledigt]** **Cachly-Bench**: reproduzierbarer Benchmark mit IR-Metriken
139
+ (Precision@k, Recall@k, MRR, nDCG), als CI-Regressionswächter. Ohne Zahl keine
140
+ Story — jetzt gibt es eine Zahl, die jede Recall-Änderung verteidigen muss.
141
+ - **[✅ erledigt]** **Contradiction-Resolution persistent**: Widersprüche werden in
142
+ `cachly:contradictions:{topic}` als auditierbarer Verlauf gespeichert (TTL'd).
143
+ - **[✅ erledigt — 100x Intelligenz]** Hybrides Retrieval: BM25-Keyword + semantische
144
+ Embeddings werden in `smart_recall` zu *einer* gerankten Liste fusioniert
145
+ (`0.6×BM25-Qualität + 0.4×Semantik`), mit Match-Typ-Badges (🔍/🎯/🔀). CKG-
146
+ Traversierung als dritte Signalquelle ist der nächste Ausbau.
147
+ - **[✅ erledigt — Wertsichtbarkeit]** "Brain saved you here"-Banner im
148
+ `smart_recall`-Output macht die Zeitersparnis pro proven Lesson inline sichtbar
149
+ (`cachly:stats:time_saved_mins` wird getrackt und jetzt auch angezeigt).
150
+ - **[offen — Beweis]** Größerer, extern gelabelter Korpus + Head-to-head gegen ein
151
+ echtes Flat-File-Memory auf realen Agent-Traces (siehe BENCH.md "Limitations").
152
+
153
+ ### Phase 3 — Team-Wissensgraph als uneinholbarer Moat · *9–18 Monate*
154
+ Hier ist Anthropic strukturell raus.
155
+
156
+ > **Status (begonnen):** Knowledge-Governance ist live — `team_confirm` lässt
157
+ > einen Reviewer eine Lesson bestätigen (🛡️ senior / ✔️ peer). Die Bestätigung
158
+ > fließt direkt in das Recall-Ranking (`src/rerank.ts`, 5. Faktor) ein: bestätigtes,
159
+ > menschlich geprüftes Wissen ranked über unreviewtem Auto-Learning. `team_recall`
160
+ > zeigt Reviewer-Badges und sortiert bestätigte Lessons zuerst. Distinct-Endorser
161
+ > werden in einem Set getrackt (kein Self-Inflation), mit Audit-Log pro Topic.
162
+
163
+ - **[100x Team]** Org-weiter Wissensgraph: Lessons, Personen, Dateien, Services als
164
+ Knoten; Recall berücksichtigt *wer* was gelernt hat und *wo* es relevant ist.
165
+ - **[Virality]** Jeder gelöste Fehler eines Entwicklers wird automatisch zur
166
+ Org-Lesson — mit Attribution. `team_learn` als Default, nicht als Opt-in.
167
+ - **[✅ erledigt — Governance]** "Wissens-Reviews": ein Senior bestätigt eine Lesson
168
+ (`team_confirm`) → höheres Vertrauen im Recall-Ranking. Audit-Trail + distinct
169
+ Endorsements werden persistiert. Offen: Rollen-Modell und Sichtbarkeits-Scopes.
170
+ - **[Enterprise]** Self-Hosted-Tier mit SOC-2/ISO, BYOK by default, Daten bleiben
171
+ im Kunden-VPC. Das ist der Umsatz, den Anthropic-Memory nicht abgreifen kann.
172
+
173
+ ### Phase 4 — Der neutrale Layer über allen Modellen · *18+ Monate*
174
+ - **[100x Reichweite]** First-class-Support für jeden großen MCP-Client und jedes
175
+ Modell. Cachly = "bring your own model, keep your brain."
176
+ - **[Ökosystem]** Öffentliche/teilbare Brains (kuratierte Domänen-Wissensbasen:
177
+ "React-Best-Practices-Brain", "Kubernetes-Incident-Brain"), als Marktplatz.
178
+ - **[Moat-Vertiefung]** Je mehr Org-Wissen akkumuliert, desto höher die
179
+ Wechselkosten *weg* von Cachly — aber **null** Lock-in beim *Modell*. Das ist
180
+ die einzige gesunde Form von Lock-in.
181
+
182
+ ---
183
+
184
+ ## 5. Was wir explizit NICHT tun sollten
185
+
186
+ - **Nicht** versuchen, Anthropics Single-User-Memory zu schlagen. Das verlieren wir.
187
+ Unser Nutzer ist das **Team** und die **Org**, nicht der Solo-Hobbyist.
188
+ - **Nicht** Feature-für-Feature mit "Dreaming" konkurrieren. Stattdessen den
189
+ *strukturierten, geteilten, beweisbar-besseren* Teil besitzen.
190
+ - **Nicht** weiter Features stapeln (wir haben ~89 Tools), solange Recall-Qualität
191
+ und Stabilität nicht bewiesen sind. **Tiefe vor Breite.**
192
+ - **Nicht** vendor-Lock-in beim Modell aufbauen — das ist unser einziger
193
+ glaubwürdiger Vorteil gegenüber First-Party.
194
+
195
+ ---
196
+
197
+ ## 6. Die drei Metriken, die alles entscheiden
198
+
199
+ Wenn wir nur drei Zahlen tracken dürften:
200
+
201
+ 1. **Time-to-first-recall** (Onboarding-Reibung): vom `npx`-Befehl bis zum ersten
202
+ erfolgreichen, wertvollen Recall. Ziel: <2 Minuten.
203
+ 2. **Recall-Lift** (Moat-Beweis): % weniger Wiederholungsfehler / schnellere
204
+ Lösung *mit* Cachly vs. ohne, gemessen über Cachly-Bench. Ziel: messbar >0,
205
+ dann skalieren.
206
+ 3. **Team-Knowledge-Reuse** (Virality/Moat): wie oft wird die Lesson eines
207
+ Entwicklers von *einem anderen* erfolgreich recallt. Das ist der Wert, den nur
208
+ wir liefern.
209
+
210
+ ---
211
+
212
+ ## 7. Fazit (schonungslos)
213
+
214
+ Anthropic hat die **Single-User-Memory-Lücke** weitgehend geschlossen. Hätten wir
215
+ nur darauf gewettet, wären wir in Schwierigkeiten.
216
+
217
+ Aber die **eigentlich wertvolle Lücke** — *team-weites, strukturiertes,
218
+ vendor-neutrales, governance-fähiges Wissen mit beweisbarem Recall-Vorteil* — ist
219
+ **offen, und Anthropic kann sie aus strukturellen Gründen nicht schließen.**
220
+
221
+ Heute besetzen wir diese Lücke **noch nicht überzeugend**: zu viel Reibung, zu
222
+ wenig Beweis, zu viele Bugs. Der Weg zu 10x/100x ist deshalb unspektakulär und
223
+ unerbittlich:
224
+
225
+ > **Erst stabil & reibungslos. Dann beweisbar schlauer. Dann team-weit
226
+ > uneinholbar. Immer modell-neutral.**
227
+
228
+ In dieser Reihenfolge. Nicht andersrum.
@@ -0,0 +1,49 @@
1
+ # Travel Chaos Organizer — Environment Variables
2
+ # Copy to .env and fill in your values
3
+
4
+ # App
5
+ DEBUG=false
6
+ UPLOAD_DIR=/data/uploads
7
+
8
+ # Database (overridden by docker-compose for containerized runs)
9
+ DATABASE_URL=postgresql+asyncpg://tco:tco@localhost:5432/tco
10
+
11
+ # Keycloak
12
+ KEYCLOAK_URL=http://localhost:8080
13
+ KEYCLOAK_REALM=travel-chaos
14
+ KEYCLOAK_CLIENT_ID=tco-backend
15
+
16
+ # Ollama — point to your self-hosted instance
17
+ OLLAMA_URL=http://your-server:11434
18
+ OLLAMA_MODEL=llama3.2-vision
19
+ OLLAMA_TIMEOUT=120
20
+
21
+ # Cachly Redis — caches Ollama parse results to avoid duplicate AI calls.
22
+ # docker-compose sets this automatically (local Redis).
23
+ # In production, replace with your Cachly instance URL:
24
+ # cachly.dev → Instances → Connection String
25
+ # Same document uploaded twice? Instant response from cache, no second AI call.
26
+ CACHLY_REDIS_URL=redis://localhost:6379/0
27
+ # CACHLY_REDIS_URL=redis://:<password>@<host>.cachly.dev:6380/0
28
+
29
+ # Telegram Notifier (optional) — get token from @BotFather
30
+ # TELEGRAM_BOT_TOKEN=...
31
+ # TCO_TELEGRAM_CHAT_ID=... # chat or channel ID for TCO events
32
+
33
+ # Email — Resend (optional, https://resend.com)
34
+ # RESEND_API_KEY=re_...
35
+ # RESEND_FROM=noreply@yourdomain.com
36
+
37
+ # Admin dashboard (change before going live!)
38
+ ADMIN_USER=admin
39
+ ADMIN_PASSWORD=changeme
40
+
41
+ # CORS — comma-separated origins, or * for all
42
+ CORS_ORIGINS=*
43
+
44
+ # Stripe
45
+ # STRIPE_SECRET_KEY=sk_live_...
46
+ # STRIPE_WEBHOOK_SECRET=whsec_...
47
+ # STRIPE_PRO_PRICE_ID=price_...
48
+ STRIPE_SUCCESS_URL=https://YOUR_DOMAIN/upgrade/success
49
+ STRIPE_CANCEL_URL=https://YOUR_DOMAIN/upgrade/cancel