khoj 1.39.1.dev22__py3-none-any.whl → 1.40.0__py3-none-any.whl

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 (42) hide show
  1. khoj/configure.py +5 -2
  2. khoj/database/adapters/__init__.py +19 -6
  3. khoj/database/admin.py +7 -1
  4. khoj/database/migrations/0088_ratelimitrecord.py +28 -0
  5. khoj/database/models/__init__.py +18 -0
  6. khoj/interface/compiled/404/index.html +2 -2
  7. khoj/interface/compiled/_next/static/chunks/2327-9d37761c0bdbc3ff.js +1 -0
  8. khoj/interface/compiled/_next/static/chunks/app/agents/layout-e00fb81dca656a10.js +1 -0
  9. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js +1 -0
  10. khoj/interface/compiled/_next/static/chunks/{webpack-05ff3cbe22520b30.js → webpack-639e8a9d35bd5e13.js} +1 -1
  11. khoj/interface/compiled/agents/index.html +2 -2
  12. khoj/interface/compiled/agents/index.txt +2 -2
  13. khoj/interface/compiled/automations/index.html +2 -2
  14. khoj/interface/compiled/automations/index.txt +3 -3
  15. khoj/interface/compiled/chat/index.html +2 -2
  16. khoj/interface/compiled/chat/index.txt +2 -2
  17. khoj/interface/compiled/index.html +2 -2
  18. khoj/interface/compiled/index.txt +2 -2
  19. khoj/interface/compiled/search/index.html +2 -2
  20. khoj/interface/compiled/search/index.txt +2 -2
  21. khoj/interface/compiled/settings/index.html +2 -2
  22. khoj/interface/compiled/settings/index.txt +4 -4
  23. khoj/interface/compiled/share/chat/index.html +2 -2
  24. khoj/interface/compiled/share/chat/index.txt +2 -2
  25. khoj/routers/auth.py +31 -21
  26. khoj/routers/helpers.py +53 -26
  27. {khoj-1.39.1.dev22.dist-info → khoj-1.40.0.dist-info}/METADATA +3 -3
  28. {khoj-1.39.1.dev22.dist-info → khoj-1.40.0.dist-info}/RECORD +39 -38
  29. khoj/interface/compiled/_next/static/chunks/2327-9b55980a1895caa4.js +0 -1
  30. khoj/interface/compiled/_next/static/chunks/app/agents/layout-e49165209d2e406c.js +0 -1
  31. khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-6fb51c5c80f8ec67.js +0 -1
  32. /khoj/interface/compiled/_next/static/{Us0x7gn_4orBfXapRKFB9 → NEVsMVoqJcSsahS-eMoUQ}/_buildManifest.js +0 -0
  33. /khoj/interface/compiled/_next/static/{Us0x7gn_4orBfXapRKFB9 → NEVsMVoqJcSsahS-eMoUQ}/_ssgManifest.js +0 -0
  34. /khoj/interface/compiled/_next/static/chunks/{1915-1943ee8a628b893c.js → 1915-ab4353eaca76f690.js} +0 -0
  35. /khoj/interface/compiled/_next/static/chunks/{2117-5a41630a2bd2eae8.js → 2117-1c18aa2098982bf9.js} +0 -0
  36. /khoj/interface/compiled/_next/static/chunks/{4363-e6ac2203564d1a3b.js → 4363-4efaf12abe696251.js} +0 -0
  37. /khoj/interface/compiled/_next/static/chunks/{4447-e038b251d626c340.js → 4447-5d44807c40355b1a.js} +0 -0
  38. /khoj/interface/compiled/_next/static/chunks/{8667-8136f74e9a086fca.js → 8667-adbe6017a66cef10.js} +0 -0
  39. /khoj/interface/compiled/_next/static/chunks/{9259-640fdd77408475df.js → 9259-d8bcd9da9e80c81e.js} +0 -0
  40. {khoj-1.39.1.dev22.dist-info → khoj-1.40.0.dist-info}/WHEEL +0 -0
  41. {khoj-1.39.1.dev22.dist-info → khoj-1.40.0.dist-info}/entry_points.txt +0 -0
  42. {khoj-1.39.1.dev22.dist-info → khoj-1.40.0.dist-info}/licenses/LICENSE +0 -0
khoj/routers/helpers.py CHANGED
@@ -33,8 +33,9 @@ import requests
33
33
  from apscheduler.job import Job
34
34
  from apscheduler.triggers.cron import CronTrigger
35
35
  from asgiref.sync import sync_to_async
36
+ from django.utils import timezone as django_timezone
36
37
  from fastapi import Depends, Header, HTTPException, Request, UploadFile
37
- from pydantic import BaseModel, Field
38
+ from pydantic import BaseModel, EmailStr, Field
38
39
  from starlette.authentication import has_required_scope
39
40
  from starlette.requests import URL
40
41
 
@@ -46,10 +47,10 @@ from khoj.database.adapters import (
46
47
  ConversationAdapters,
47
48
  EntryAdapters,
48
49
  FileObjectAdapters,
50
+ aget_user_by_email,
49
51
  ais_user_subscribed,
50
52
  create_khoj_token,
51
53
  get_khoj_tokens,
52
- get_user_by_email,
53
54
  get_user_name,
54
55
  get_user_notion_config,
55
56
  get_user_subscription_state,
@@ -64,6 +65,7 @@ from khoj.database.models import (
64
65
  KhojUser,
65
66
  NotionConfig,
66
67
  ProcessLock,
68
+ RateLimitRecord,
67
69
  Subscription,
68
70
  TextToImageModelConfig,
69
71
  UserRequests,
@@ -112,6 +114,7 @@ from khoj.utils.helpers import (
112
114
  LRU,
113
115
  ConversationCommand,
114
116
  get_file_type,
117
+ in_debug_mode,
115
118
  is_none_or_empty,
116
119
  is_valid_url,
117
120
  log_telemetry,
@@ -1613,47 +1616,71 @@ class FeedbackData(BaseModel):
1613
1616
  sentiment: str
1614
1617
 
1615
1618
 
1616
- class EmailVerificationApiRateLimiter:
1619
+ class MagicLinkForm(BaseModel):
1620
+ email: EmailStr
1621
+
1622
+
1623
+ class EmailAttemptRateLimiter:
1624
+ """Rate limiter for email attempts BEFORE get/create user with valid email address."""
1625
+
1617
1626
  def __init__(self, requests: int, window: int, slug: str):
1618
1627
  self.requests = requests
1619
- self.window = window
1628
+ self.window = window # Window in seconds
1620
1629
  self.slug = slug
1621
1630
 
1622
- def __call__(self, request: Request):
1623
- # Rate limiting disabled if billing is disabled
1624
- if state.billing_enabled is False:
1631
+ async def __call__(self, form: MagicLinkForm):
1632
+ # Disable login rate limiting in debug mode
1633
+ if in_debug_mode():
1625
1634
  return
1626
1635
 
1627
- # Extract the email query parameter
1628
- email = request.query_params.get("email")
1636
+ # Calculate the time window cutoff
1637
+ cutoff = django_timezone.now() - timedelta(seconds=self.window)
1629
1638
 
1630
- if email:
1631
- logger.info(f"Email query parameter: {email}")
1632
-
1633
- user: KhojUser = get_user_by_email(email)
1639
+ # Count recent attempts for this email and slug
1640
+ count = await RateLimitRecord.objects.filter(
1641
+ identifier=form.email, slug=self.slug, created_at__gte=cutoff
1642
+ ).acount()
1634
1643
 
1635
- if not user:
1644
+ if count >= self.requests:
1645
+ logger.warning(f"Email attempt rate limit exceeded for {form.email} (slug: {self.slug})")
1636
1646
  raise HTTPException(
1637
- status_code=404,
1638
- detail="User not found.",
1647
+ status_code=429, detail="Too many requests for your email address. Please wait before trying again."
1639
1648
  )
1640
1649
 
1650
+ # Record the current attempt
1651
+ await RateLimitRecord.objects.acreate(identifier=form.email, slug=self.slug)
1652
+
1653
+
1654
+ class EmailVerificationApiRateLimiter:
1655
+ """Rate limiter for actions AFTER user with valid email address is known to exist"""
1656
+
1657
+ def __init__(self, requests: int, window: int, slug: str):
1658
+ self.requests = requests
1659
+ self.window = window # Window in seconds
1660
+ self.slug = slug
1661
+
1662
+ async def __call__(self, email: str = None):
1663
+ # Disable login rate limiting in debug mode
1664
+ if in_debug_mode():
1665
+ return
1666
+
1667
+ user: KhojUser = await aget_user_by_email(email)
1668
+ if not user:
1669
+ raise HTTPException(status_code=404, detail="User not found.")
1670
+
1641
1671
  # Remove requests outside of the time window
1642
- cutoff = datetime.now(tz=timezone.utc) - timedelta(seconds=self.window)
1643
- count_requests = UserRequests.objects.filter(user=user, created_at__gte=cutoff, slug=self.slug).count()
1672
+ cutoff = django_timezone.now() - timedelta(seconds=self.window)
1673
+ count_requests = await UserRequests.objects.filter(user=user, created_at__gte=cutoff, slug=self.slug).acount()
1644
1674
 
1645
1675
  # Check if the user has exceeded the rate limit
1646
1676
  if count_requests >= self.requests:
1647
- logger.info(
1677
+ logger.warning(
1648
1678
  f"Rate limit: {count_requests}/{self.requests} requests not allowed in {self.window} seconds for email: {email}."
1649
1679
  )
1650
- raise HTTPException(
1651
- status_code=429,
1652
- detail="Ran out of login attempts",
1653
- )
1680
+ raise HTTPException(status_code=429, detail="Ran out of login attempts. Please wait before trying again.")
1654
1681
 
1655
1682
  # Add the current request to the db
1656
- UserRequests.objects.create(user=user, slug=self.slug)
1683
+ await UserRequests.objects.acreate(user=user, slug=self.slug)
1657
1684
 
1658
1685
 
1659
1686
  class ApiUserRateLimiter:
@@ -1677,7 +1704,7 @@ class ApiUserRateLimiter:
1677
1704
  subscribed = has_required_scope(request, ["premium"])
1678
1705
 
1679
1706
  # Remove requests outside of the time window
1680
- cutoff = datetime.now(tz=timezone.utc) - timedelta(seconds=self.window)
1707
+ cutoff = django_timezone.now() - timedelta(seconds=self.window)
1681
1708
  count_requests = UserRequests.objects.filter(user=user, created_at__gte=cutoff, slug=self.slug).count()
1682
1709
 
1683
1710
  # Check if the user has exceeded the rate limit
@@ -1779,7 +1806,7 @@ class ConversationCommandRateLimiter:
1779
1806
  subscribed = has_required_scope(request, ["premium"])
1780
1807
 
1781
1808
  # Remove requests outside of the 24-hr time window
1782
- cutoff = datetime.now(tz=timezone.utc) - timedelta(seconds=60 * 60 * 24)
1809
+ cutoff = django_timezone.now() - timedelta(seconds=60 * 60 * 24)
1783
1810
  command_slug = f"{self.slug}_{conversation_command.value}"
1784
1811
  count_requests = await UserRequests.objects.filter(
1785
1812
  user=user, created_at__gte=cutoff, slug=command_slug
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: khoj
3
- Version: 1.39.1.dev22
3
+ Version: 1.40.0
4
4
  Summary: Your Second Brain
5
5
  Project-URL: Homepage, https://khoj.dev
6
6
  Project-URL: Documentation, https://docs.khoj.dev
@@ -30,10 +30,10 @@ Requires-Dist: beautifulsoup4~=4.12.3
30
30
  Requires-Dist: cron-descriptor==1.4.3
31
31
  Requires-Dist: dateparser>=1.1.1
32
32
  Requires-Dist: defusedxml==0.7.1
33
- Requires-Dist: django-apscheduler==0.6.2
33
+ Requires-Dist: django-apscheduler==0.7.0
34
34
  Requires-Dist: django-phonenumber-field==7.3.0
35
35
  Requires-Dist: django-unfold==0.42.0
36
- Requires-Dist: django==5.0.13
36
+ Requires-Dist: django==5.1.8
37
37
  Requires-Dist: docx2txt==0.8
38
38
  Requires-Dist: e2b-code-interpreter~=1.0.0
39
39
  Requires-Dist: einops==0.8.0
@@ -1,5 +1,5 @@
1
1
  khoj/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- khoj/configure.py,sha256=HD3Ih4PCzzM63wT3Z_wKr-aDm8LSZEp6flxT30sUpVI,18696
2
+ khoj/configure.py,sha256=tOue0mllL8MkUA-LC6_9BE2HpyVDi1LM9RhuTdNd-jw,18870
3
3
  khoj/main.py,sha256=UScenj61cw-FK8mrf6G2P6jE63SztDsQzWwNjFRfBkg,8523
4
4
  khoj/manage.py,sha256=njo6uLxGaMamTPesHjFEOIBJbpIUrz39e1V59zKj544,664
5
5
  khoj/app/README.md,sha256=PSQjKCdpU2hgszLVF8yEhV7TWhbEEb-1aYLTRuuAsKI,2832
@@ -8,10 +8,10 @@ khoj/app/asgi.py,sha256=soh3C1xazlgHt_bDgKzrfzo2TKXbNYJsckcXNEgTip8,388
8
8
  khoj/app/settings.py,sha256=lGejjlloB_LqYSsOg210MGZ4ebkXMu4dMQlpMPExPvs,9124
9
9
  khoj/app/urls.py,sha256=7ECnusoAPAfbO_H_b5FUzYGvnb4LLdWaRDyKNvYuBvg,869
10
10
  khoj/database/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- khoj/database/admin.py,sha256=mpfBHaeRzzGRZwaKcvwlBW8v8Z90RMq0SmxJQXsHmW4,12907
11
+ khoj/database/admin.py,sha256=yX_g1CUpEijnufIgTdefUfiakmd3MB3GSYwKfZo-Cms,13206
12
12
  khoj/database/apps.py,sha256=pM4tkX5Odw4YW_hLLKK8Nd5kqGddf1en0oMCea44RZw,153
13
13
  khoj/database/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
14
- khoj/database/adapters/__init__.py,sha256=Kd_qMG-0XnV_kbyF36gKNlL43Z4E5DGKJu4vhqxY6Iw,76212
14
+ khoj/database/adapters/__init__.py,sha256=5cLWwMwqqV1fWT4I0DFk4gqXs_vQQHsZdGWcgiOd4WI,76848
15
15
  khoj/database/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  khoj/database/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  khoj/database/management/commands/change_default_model.py,sha256=6QXJttG58gpU7vZApQEeEPVNAuhjU2xa6_BwJsfz320,4877
@@ -119,33 +119,34 @@ khoj/database/migrations/0084_alter_agent_input_tools.py,sha256=rXFC7fXSjV8n_x7H
119
119
  khoj/database/migrations/0085_alter_agent_output_modes.py,sha256=qgW7jbPhJkU37iZ-yzgI46-fker3zLeoBTuijS5_gro,687
120
120
  khoj/database/migrations/0086_alter_texttoimagemodelconfig_model_type.py,sha256=OGbA88CObHsSTXS78_3igKqE9dtCkZ2Hb5W4qBabYwk,709
121
121
  khoj/database/migrations/0087_alter_aimodelapi_api_key.py,sha256=CqZ3iqt3CwiCwkD7oAEhdYYgM8Diyz2WW0hEJeaHGjg,415
122
+ khoj/database/migrations/0088_ratelimitrecord.py,sha256=CxlkfbA8eTO57pv0AvJYfGRp5eOe81iMJgpRoTFGVls,1018
122
123
  khoj/database/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
123
- khoj/database/models/__init__.py,sha256=_8fkNloN9c03tCd2g8hiJhqkm-Zvoi7aGYXU9V64Ii0,29520
124
+ khoj/database/models/__init__.py,sha256=-T36qBeGlZGgx5u7OANQaaqbEGqrZtSQoXA7uBDdI0g,30115
124
125
  khoj/interface/compiled/agents.svg,sha256=yFCRwIM-Qawa0C5ggAo3ekb-Q1ElmotBOKIGhtfIQqM,1722
125
126
  khoj/interface/compiled/automation.svg,sha256=o7L2XYwJWRSMvl8h6TBv6Pt28RTRVMHqF04EPY0AFj0,1467
126
127
  khoj/interface/compiled/chat.svg,sha256=l2JoYRRgk201adTTdvJ-buKUrc0WGfsudix5xEvtM3A,2424
127
128
  khoj/interface/compiled/close.svg,sha256=hQ2iFLkNzHk0_iyTrSbwnWAeXYlgA-c2Eof2Iqh76n4,417
128
129
  khoj/interface/compiled/copy-button-success.svg,sha256=byqWAYD3Pn9IOXRjOKudJ-TJbP2UESbQGvtLWazNGjY,829
129
130
  khoj/interface/compiled/copy-button.svg,sha256=05bKM2eRxksfBlAPT7yMaoNJEk85bZCxQg67EVrPeHo,669
130
- khoj/interface/compiled/index.html,sha256=rXUk_e3-o2tQis6SupdZJXIlIpJZ-KfGADGV_yxc4rI,53043
131
- khoj/interface/compiled/index.txt,sha256=EgTLVvEzBmD8LKTLDX8PVJa10MZFCVaCHXpTrHWrDOA,7616
131
+ khoj/interface/compiled/index.html,sha256=i2cwh-ttXwzNw80aDUrmdrS-AlM95M_CaxykFlf-dL8,53043
132
+ khoj/interface/compiled/index.txt,sha256=O5xZ9JCLpt5NT-1aqL_xshxBuXfa2Rx6oujA24A6C4U,7616
132
133
  khoj/interface/compiled/khoj.webmanifest,sha256=9wOK2BMS6xH5NKd2eaUgTLg9WepIxB2K2U33KU89LD8,2543
133
134
  khoj/interface/compiled/logo.svg,sha256=_QCKVYM4WT2Qhcf7aVFImjq_s5CwjynGXYAOgI7yf8w,8059
134
135
  khoj/interface/compiled/send.svg,sha256=VdavOWkVddcwcGcld6pdfmwfz7S91M-9O28cfeiKJkM,635
135
136
  khoj/interface/compiled/share.svg,sha256=91lwo75PvMDrgocuZQab6EQ62CxRbubh9Bhw7CWMKbg,1221
136
137
  khoj/interface/compiled/thumbs-down.svg,sha256=JGNl-DwoRmH2XFMPWwFFklmoYtKxaQbkLE3nuYKe8ZY,1019
137
138
  khoj/interface/compiled/thumbs-up.svg,sha256=yS1wxTRtiztkN-6nZciLoYQUB_KTYNPV8xFRwH2TQFw,1036
138
- khoj/interface/compiled/404/index.html,sha256=OBvW6Emi7h_uQEXpYjj-wgTaf_UECceId7QN76qAfAU,17097
139
- khoj/interface/compiled/_next/static/Us0x7gn_4orBfXapRKFB9/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
140
- khoj/interface/compiled/_next/static/Us0x7gn_4orBfXapRKFB9/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
139
+ khoj/interface/compiled/404/index.html,sha256=sh70NXIE7raT1E27CsTNUBX006XRo6M_UeVsQiCC9Ks,17097
140
+ khoj/interface/compiled/_next/static/NEVsMVoqJcSsahS-eMoUQ/_buildManifest.js,sha256=f2_nYnw25hHWQJ-39Lf5OH1u6kgdbOInyfplqgjvAV4,224
141
+ khoj/interface/compiled/_next/static/NEVsMVoqJcSsahS-eMoUQ/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
141
142
  khoj/interface/compiled/_next/static/chunks/1243.ea2826fb35adb15a.js,sha256=Y6ceAwyTH4HSGDvBRoBB-RVXRCzGGr8NSPcspYF5OM8,182
142
143
  khoj/interface/compiled/_next/static/chunks/133.392ae90c3b2a67f2.js,sha256=IK-mb9ZlF6uJUdU8AuXsppc99tFL8svJvZtKNZGNtcY,411
143
144
  khoj/interface/compiled/_next/static/chunks/1592.b069bdb7aaddd2eb.js,sha256=VUaP2gjX3W9tA9pOH_VIPG_2BIg7Wk1AICrfU5iHgrk,71096
144
- khoj/interface/compiled/_next/static/chunks/1915-1943ee8a628b893c.js,sha256=qArqL3leavWRcZkX4ZuWgemtKnmV6c-_yrNtMu_8SeY,11277
145
+ khoj/interface/compiled/_next/static/chunks/1915-ab4353eaca76f690.js,sha256=qArqL3leavWRcZkX4ZuWgemtKnmV6c-_yrNtMu_8SeY,11277
145
146
  khoj/interface/compiled/_next/static/chunks/2069.f060659791c0c484.js,sha256=C_oat_BkZcLOHsyJlNN_5I55fB7ee1zkkZ9FT5zOzn4,186
146
- khoj/interface/compiled/_next/static/chunks/2117-5a41630a2bd2eae8.js,sha256=3KtUs1Aeno0OfsXZ2ymJ0d5HXwO2_Osq2uGIIGiDagI,123994
147
+ khoj/interface/compiled/_next/static/chunks/2117-1c18aa2098982bf9.js,sha256=3KtUs1Aeno0OfsXZ2ymJ0d5HXwO2_Osq2uGIIGiDagI,123994
147
148
  khoj/interface/compiled/_next/static/chunks/2170.45431769330fa5b7.js,sha256=C7Puu9x18DhdR5Sh8XXvTzPdP_HTK6WhsJDNW-NoB7o,24019
148
- khoj/interface/compiled/_next/static/chunks/2327-9b55980a1895caa4.js,sha256=-R-FebkBABl7B6zSzvcIg3ITwcKh7We21IjBM6tQC5c,127193
149
+ khoj/interface/compiled/_next/static/chunks/2327-9d37761c0bdbc3ff.js,sha256=9r7Or2QaUePi6LIOeNfW9PPdlQ3ZN-pn-O4kvtcosSI,127222
149
150
  khoj/interface/compiled/_next/static/chunks/3237.c4754f02f1a388cb.js,sha256=Z5iOEX0mPj-5tuoU4Bq_IjpAlyc4MURKlBoaExsULTk,177
150
151
  khoj/interface/compiled/_next/static/chunks/3305.1fc7297ba154ee95.js,sha256=mfrpv-asuYmBmbqIh1p3UnPMAxg2pKlxE3Rzmth8O6s,37266
151
152
  khoj/interface/compiled/_next/static/chunks/3332.6313db5217bb1b67.js,sha256=4lNF9JhPQdTX2xDojGOvvanM0Y0VScwM3kmF4p0RHFg,3776
@@ -154,9 +155,9 @@ khoj/interface/compiled/_next/static/chunks/3460.39c2b9b6a3898384.js,sha256=gehY
154
155
  khoj/interface/compiled/_next/static/chunks/4299.2aaa569416cfc208.js,sha256=3HJ8OvB9BDJW0-qCBd1eUmChoBAxaCX6R81ftWZ1CHw,21659
155
156
  khoj/interface/compiled/_next/static/chunks/4327.238d15c09a039b8b.js,sha256=mZa4Oyltc9JrokqnalRTjzcvWgX4S3i3REXiHzRYH1o,296536
156
157
  khoj/interface/compiled/_next/static/chunks/4357-d86d3401f6f6f802.js,sha256=KDM1m01Fz-vcAMfxQfYPO6SEZJVK7z4241JOCEvou6Y,45442
157
- khoj/interface/compiled/_next/static/chunks/4363-e6ac2203564d1a3b.js,sha256=YFO-i3X2LrX9c4MgYY1kPsoRBaqVUkmfAKI62Rz2BVI,468054
158
+ khoj/interface/compiled/_next/static/chunks/4363-4efaf12abe696251.js,sha256=YFO-i3X2LrX9c4MgYY1kPsoRBaqVUkmfAKI62Rz2BVI,468054
158
159
  khoj/interface/compiled/_next/static/chunks/4415.e0c0da5eedae4dd7.js,sha256=DEf8HPEstDFvBflOU0j0ilYHlVJilGcGsLgUx524FZQ,25544
159
- khoj/interface/compiled/_next/static/chunks/4447-e038b251d626c340.js,sha256=Uw8IrcKmVR3wba-FB9maP9i9l_kAYg59r8PN1T_ipQE,19621
160
+ khoj/interface/compiled/_next/static/chunks/4447-5d44807c40355b1a.js,sha256=Uw8IrcKmVR3wba-FB9maP9i9l_kAYg59r8PN1T_ipQE,19621
160
161
  khoj/interface/compiled/_next/static/chunks/4609-33aa487dff03a9fd.js,sha256=1M6QAfVZa2g2Q4jXRdSI1wjrZ4G9yKjINJt8qyTKm1A,24698
161
162
  khoj/interface/compiled/_next/static/chunks/4610.a1e7f40a759ed2aa.js,sha256=b5JDRPyQv2MsibYoK2TDT76LMAoDTRzFM-fa81mJxow,14102
162
163
  khoj/interface/compiled/_next/static/chunks/4650.41f041da0ad365ad.js,sha256=EZeckNrMc3ZUX_LexPgaeusEq-dGBNEPm7nc5nvb4OM,33902
@@ -185,12 +186,12 @@ khoj/interface/compiled/_next/static/chunks/7953.f6fc335a23efb959.js,sha256=8XIn
185
186
  khoj/interface/compiled/_next/static/chunks/8254.3145a4fbdcfdca46.js,sha256=sur8InabGfvh1HqNQhwBssc1tCPae_WKQ-efoYU1Q8A,412
186
187
  khoj/interface/compiled/_next/static/chunks/8400.c95e4e79bcd79a56.js,sha256=3SlFozKtF4DYQYPT3hB5M7VEm3e_W71kC19JgADz-3k,19864
187
188
  khoj/interface/compiled/_next/static/chunks/8515-f305779d95dd5780.js,sha256=QyTarawMADcAup6ipG9JMVnvkbkoYh0Ury2EWkflZ3o,1619194
188
- khoj/interface/compiled/_next/static/chunks/8667-8136f74e9a086fca.js,sha256=kyiAVJTylsiOPFTb63uZn_pMlk4pYhDYt_N7xL76PTM,7214
189
+ khoj/interface/compiled/_next/static/chunks/8667-adbe6017a66cef10.js,sha256=kyiAVJTylsiOPFTb63uZn_pMlk4pYhDYt_N7xL76PTM,7214
189
190
  khoj/interface/compiled/_next/static/chunks/8673.be44c4d9e4f1d084.js,sha256=jiE4xU-TbkVC4R60SIgxwdo31T9mbdVBVuhP4H60i94,18629
190
191
  khoj/interface/compiled/_next/static/chunks/8698.a088118fef40d302.js,sha256=mrK-3ZahVSF7sZij3l-PyXKxp-ccXU9orykXDc7YzsM,180
191
192
  khoj/interface/compiled/_next/static/chunks/9022.33974a513a281fd2.js,sha256=6NmDzRbI0NyTisUT04sq9M0czUqvlwZoV4E7Onp-55Q,57192
192
193
  khoj/interface/compiled/_next/static/chunks/90542734.9e6e44b1b45b30fe.js,sha256=5Ivye3p3HC-Ekf-bIPdnvmg_JtYLkCqyRPWtciOmuuo,413716
193
- khoj/interface/compiled/_next/static/chunks/9259-640fdd77408475df.js,sha256=lZJF9qq4_MeSRsHeNPNcxkqh2vhBfag5iAxg6krHA9g,34848
194
+ khoj/interface/compiled/_next/static/chunks/9259-d8bcd9da9e80c81e.js,sha256=lZJF9qq4_MeSRsHeNPNcxkqh2vhBfag5iAxg6krHA9g,34848
194
195
  khoj/interface/compiled/_next/static/chunks/9334-b22127fe2d39bc60.js,sha256=_TPWqSCbf86Ig1vIEDRLXzloZujDoxpoEWhRPUf6b5U,29065
195
196
  khoj/interface/compiled/_next/static/chunks/9433.b1b5f5d050c43e3c.js,sha256=kMVC0Gg95UqjfQXpGvi-WUSg_kYp0SN7CTPTHxHxDBk,144858
196
197
  khoj/interface/compiled/_next/static/chunks/94ca1967.1b3402358e0e1255.js,sha256=WJXEIy24FD6PNQePg-uahendJMNc03GgnVveitFeshI,1174524
@@ -203,11 +204,11 @@ khoj/interface/compiled/_next/static/chunks/framework-8e0e0f4a6b83a956.js,sha256
203
204
  khoj/interface/compiled/_next/static/chunks/main-876327ac335776ab.js,sha256=JkQUmA9vh1B4VVGF5dbZ8Kun0AnIVUbZr5IBK90T4Zs,111290
204
205
  khoj/interface/compiled/_next/static/chunks/main-app-de1f09df97a3cfc7.js,sha256=bqnztujKItXfFBzQlaBmDZyfJpQt_M93CXOuchJfpD0,471
205
206
  khoj/interface/compiled/_next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
206
- khoj/interface/compiled/_next/static/chunks/webpack-05ff3cbe22520b30.js,sha256=G13n8kfgqUZyqGZBhiu3i81vy7R1KeZZUj9DINP1_Bs,4891
207
+ khoj/interface/compiled/_next/static/chunks/webpack-639e8a9d35bd5e13.js,sha256=QSmy64I4VwSeyHlSrBW5sfepv-kKV3QbWXP_rW1NC2Y,4891
207
208
  khoj/interface/compiled/_next/static/chunks/app/layout-bd8210ff1de491d7.js,sha256=8gTcL8-sV5oa7vJRTxlgOpZvhNrsKomsu75DpVpqfE0,3983
208
209
  khoj/interface/compiled/_next/static/chunks/app/page-e3a5a84f5f89440d.js,sha256=ODjjug1NwixStALsW2Wu6RarPq_KBMnIOoKqKJ8Kapk,31218
209
210
  khoj/interface/compiled/_next/static/chunks/app/_not-found/page-0ec97c4970898f2d.js,sha256=zElhiTkdu2JqrEvJ8Lrxh4HCyfLmPllBHHWOuDtrVlw,1755
210
- khoj/interface/compiled/_next/static/chunks/app/agents/layout-e49165209d2e406c.js,sha256=WFG6nsdtjnYHsKazIx5-xBXemVzEKXfW_U6Q9dnc7CU,180
211
+ khoj/interface/compiled/_next/static/chunks/app/agents/layout-e00fb81dca656a10.js,sha256=Prg_1BSPDnJDTXEx-Ai9RtlK0nesPWDFIVFFCMuVUiw,180
211
212
  khoj/interface/compiled/_next/static/chunks/app/agents/page-1e3508dcc5a87ad5.js,sha256=kvQaR_nbiCgH5koDFYD4fkceNsScyMVdwvVufMH0Ax8,18314
212
213
  khoj/interface/compiled/_next/static/chunks/app/automations/layout-7f5c33a70e46b3af.js,sha256=s2wHeQ-ai9rKyU9EjOGY1Yo51L4ZEkjLtML85BqN3Zc,5143
213
214
  khoj/interface/compiled/_next/static/chunks/app/automations/page-574bebeae9cdf2a2.js,sha256=CKuBpLxbzqBbCgJ2zbiuDf8Z1UGwEOA3hgnuZEjvpgA,34831
@@ -217,7 +218,7 @@ khoj/interface/compiled/_next/static/chunks/app/search/layout-c02531d586972d7d.j
217
218
  khoj/interface/compiled/_next/static/chunks/app/search/page-f9d7b32f09aea4ab.js,sha256=fD2_a9jptevkZ7Jda0FUp5kTINLef8NXqojbD3cCmJY,32714
218
219
  khoj/interface/compiled/_next/static/chunks/app/settings/layout-8a22f370d3eaeed3.js,sha256=dIfmM5C_Al-Zh_uqaJmniSxjXbu3LqPzrEw4SQ7vs0I,6132
219
220
  khoj/interface/compiled/_next/static/chunks/app/settings/page-f136cfe5f4c1886f.js,sha256=ugJkFSz37yDlALXpV_i_-YLAgnGiz8wqn2hJ_38KJ_c,27173
220
- khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-6fb51c5c80f8ec67.js,sha256=MRWVUV6hiulN_DJo7uyZvW0HaMGGqoq6fdGK_jt4kJE,180
221
+ khoj/interface/compiled/_next/static/chunks/app/share/chat/layout-e8e5db7830bf3f47.js,sha256=rcoit2AQboqPwZMTVlVhz1AbyHRJOs-xNMTdYonejCU,180
221
222
  khoj/interface/compiled/_next/static/chunks/app/share/chat/page-53ca42dc98e3fdf0.js,sha256=jpxu_SEQWxeLOPVvCZJ4vtrMlBEdEYvdGzn5Lhhk9SI,5563
222
223
  khoj/interface/compiled/_next/static/chunks/pages/_app-3c9ca398d360b709.js,sha256=UqtikLsCsOWtDUJOW6Tuk9P-bV1V3MhYd3ghrQuEmfs,286
223
224
  khoj/interface/compiled/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js,sha256=w_It3VzKT8O1M3CrJ_hZHsaU7M7dq3EAaVG8KvJ-fhU,253
@@ -306,8 +307,8 @@ khoj/interface/compiled/_next/static/media/flags.3afdda2f.webp,sha256=M2AW_HLpBn
306
307
  khoj/interface/compiled/_next/static/media/flags@2x.5fbe9fc1.webp,sha256=BBeRPBZkxY3-aKkMnYv5TSkxmbeMbyUH4VRIPfrWg1E,137406
307
308
  khoj/interface/compiled/_next/static/media/globe.98e105ca.webp,sha256=g3ofb8-W9GM75zIhlvQhaS8I2py9TtrovOKR3_7Jf04,514
308
309
  khoj/interface/compiled/_next/static/media/globe@2x.974df6f8.webp,sha256=I_N7Yke3IOoS-0CC6XD8o0IUWG8PdPbrHmf6lpgWlZY,1380
309
- khoj/interface/compiled/agents/index.html,sha256=XdCV-1SCX6J17Rshfta6xGpXlcjP4CLaf12tuc8Dl5s,16224
310
- khoj/interface/compiled/agents/index.txt,sha256=aNyvArXuM7mOzd9uPNzqkDeYOPtCdlIEAlK_FXLrGHk,7220
310
+ khoj/interface/compiled/agents/index.html,sha256=WkzPiIC_8BBunAIwwBusyEQK63SJqjvjz9qFKItr7KI,16224
311
+ khoj/interface/compiled/agents/index.txt,sha256=HScdlEarWcPg8375PDE4z2jPoY8AvvQbx4FI2zyIRGg,7220
311
312
  khoj/interface/compiled/assets/icons/khoj_lantern.ico,sha256=eggu-B_v3z1R53EjOFhIqqPnICBGdoaw1xnc0NrzHck,174144
312
313
  khoj/interface/compiled/assets/icons/khoj_lantern.svg,sha256=I_8XP5X84gEOoCRhCRKOQn_GKZrz3SUBXct7WxHvY7c,8767
313
314
  khoj/interface/compiled/assets/icons/khoj_lantern_1200x1200.png,sha256=xDx0bbD-WMflgg8zck9oPIIuTIvywtuED2k7CjSQS4w,66194
@@ -322,16 +323,16 @@ khoj/interface/compiled/assets/samples/desktop-remember-plan-sample.png,sha256=i
322
323
  khoj/interface/compiled/assets/samples/phone-browse-draw-sample.png,sha256=Dd4fPwtFl6BWqnHjeb1mCK_ND0hhHsWtx8sNE7EiMuE,406179
323
324
  khoj/interface/compiled/assets/samples/phone-plain-chat-sample.png,sha256=DEDaNRCkfEWUeh3kYZWIQDTVK1a6KKnYdwj5ZWisN_Q,82985
324
325
  khoj/interface/compiled/assets/samples/phone-remember-plan-sample.png,sha256=Ma3blirRmq3X4oYSsDbbT7MDn29rymDrjwmUfA9BMuM,236285
325
- khoj/interface/compiled/automations/index.html,sha256=hqXPqK7Jnnf4PAqRxJJhQ3y660w3TrMA0Zb_vHF2Pug,54094
326
- khoj/interface/compiled/automations/index.txt,sha256=L5B7eipjnY4vRZ4M8QCSqOj5Fb2-KKBn4evqNOa2ygs,7449
327
- khoj/interface/compiled/chat/index.html,sha256=crr8Ammx01DJJYCBsKdSWyku4pfkbqDrgptZqjlbUCs,53222
328
- khoj/interface/compiled/chat/index.txt,sha256=g7r8oRps706C0BfxDZ9qUZ2siSCgm-qKgetk8zTakpI,7858
329
- khoj/interface/compiled/search/index.html,sha256=jPVr56d8U7nwEseDYTksuYognP3wJLJy6P1L71RUAPU,55304
330
- khoj/interface/compiled/search/index.txt,sha256=lKFwzqEVaWShDPmu059jjul6gbuneKgB9b-ZilsdzAk,6567
331
- khoj/interface/compiled/settings/index.html,sha256=Gnr4NydiRtcCVAmxOebG1kOWAoL1CaYJxDz2-KrhbSw,52743
332
- khoj/interface/compiled/settings/index.txt,sha256=utee_ziYqdrDNZ6qyoZAhLqr0j1F8Ygaq-M5kL7faNc,7703
333
- khoj/interface/compiled/share/chat/index.html,sha256=cUfIYOMshh4d2G7BroLYrm4hAAkvpMsLq9sLDhj16vs,53802
334
- khoj/interface/compiled/share/chat/index.txt,sha256=ViXJVSjSzzCHHLkbkpQGtgyRm6Vd5hF9zTyHzVVJFk4,8320
326
+ khoj/interface/compiled/automations/index.html,sha256=zGHKJNwGOMzADWbT3PJjIMAB6c1HIrEakUgt5DYsCEg,54094
327
+ khoj/interface/compiled/automations/index.txt,sha256=HORra1EgOhnEaguRjYsCCSoyjT893V3rHxGe74jlkFU,7449
328
+ khoj/interface/compiled/chat/index.html,sha256=qYl1_pf9dFD4xSQfn44iHqry680-5yS1PEsrAQpnjdk,53222
329
+ khoj/interface/compiled/chat/index.txt,sha256=_EGSqeM8U42Iq_-uksIATT5qPgmYazF6FMbGPEbhSbs,7858
330
+ khoj/interface/compiled/search/index.html,sha256=voZ2r34NX9KOf5NuZumoGxOlg1xXLy6pq6HdoDPLAcs,55304
331
+ khoj/interface/compiled/search/index.txt,sha256=PKuHkx-23Q8VEuBbxqa96u86D9mCtVV3EupPtWPkung,6567
332
+ khoj/interface/compiled/settings/index.html,sha256=gKaSj_Kcudvaq8UjEIV0FQIYUAKpr_gYuObR3qQSfSw,52743
333
+ khoj/interface/compiled/settings/index.txt,sha256=FSNpY7-4AhE7rQtXQ-0JHbMy4vsm3Uxkb_yg6t72lyY,7703
334
+ khoj/interface/compiled/share/chat/index.html,sha256=9U27vX3oLWDt1OZvdfUnYyrBrjMlcYCPvklF5ICfD9c,53802
335
+ khoj/interface/compiled/share/chat/index.txt,sha256=Mtrj2iVWX4KTM3zcnLqWgBMz3P1AtGcAhE28jJQsaDY,8320
335
336
  khoj/interface/email/feedback.html,sha256=xksuPFamx4hGWyTTxZKRgX_eiYQQEuv-eK9Xmkt-nwU,1216
336
337
  khoj/interface/email/magic_link.html,sha256=372ESbTPKM9acekuZcOIKOw6kBl-KikFg_L9MOHqJkg,2094
337
338
  khoj/interface/email/task.html,sha256=tY7a0gzVeQ2lSQNu7WyXR_s7VYeWTrxWEj1iHVuoVE4,2813
@@ -413,9 +414,9 @@ khoj/routers/api_content.py,sha256=uLO3eir36rERkhhKU1HOdEv8KTi_z_edT9cHMCZP1W8,2
413
414
  khoj/routers/api_model.py,sha256=eDYKasFuqwa9msJwgHZ5TEx5sVX91Sc9joefSryNWY4,3718
414
415
  khoj/routers/api_phone.py,sha256=p9yfc4WeMHDC0hg3aQk60a2VBy8rZPdEnz9wdJ7DzkU,2208
415
416
  khoj/routers/api_subscription.py,sha256=qnbKwA6N1TWK8Aiu1FFLka_JhbPOuwqT262NSHGZDiQ,5569
416
- khoj/routers/auth.py,sha256=W6iKUDdZ4rUwl-LAjiunTjvKJtEupVRIOSKXBseMXMY,10659
417
+ khoj/routers/auth.py,sha256=jk2lqAS_650lQsoaOFTlZd9W_LL8HbN5zhHTZza_lqs,11258
417
418
  khoj/routers/email.py,sha256=wvr6_fpk0RuKcTPC6suI8JDZPLYzJ9hAhz_G41yZytc,3923
418
- khoj/routers/helpers.py,sha256=DYxoCxYbjAy1sPBPDfWmrWI8atSBAbMTzT2jCZPaY-k,97731
419
+ khoj/routers/helpers.py,sha256=_heciF7GfV3raZhjk57JWgfg6Z22RddFPlViGx3--mg,98946
419
420
  khoj/routers/notion.py,sha256=g53xyYFmjr2JnuIrTW2vytbfkiK_UkoRTxqnnLSmD5o,2802
420
421
  khoj/routers/research.py,sha256=aylYNWYcQfWMGs-KfkA79a_K3rFrUcdxRN4BCNWTfQo,18727
421
422
  khoj/routers/storage.py,sha256=lao0DvsF49QleZvOdjKM98RU2cGfCJDBb7WeoI7Rr3I,2172
@@ -440,8 +441,8 @@ khoj/utils/models.py,sha256=Q5tcC9-z25sCiub048fLnvZ6_IIO1bcPNxt5payekk0,2009
440
441
  khoj/utils/rawconfig.py,sha256=wfZTk-Aifb-_q9Yh-NPfh9LlLTioYG-yBqrasgvo4pc,5045
441
442
  khoj/utils/state.py,sha256=axjZhnby8L3bY-N1VVoWgBH1RpFGK6U3_ZeNo1Kt7hs,1679
442
443
  khoj/utils/yaml.py,sha256=qy1Tkc61rDMesBw_Cyx2vOR6H-Hngcsm5kYfjwQBwkE,1543
443
- khoj-1.39.1.dev22.dist-info/METADATA,sha256=kTPl-oDyJjrkHwjxtHFc_t31UmPlQuep0lGc2nZbmic,7839
444
- khoj-1.39.1.dev22.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
445
- khoj-1.39.1.dev22.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
446
- khoj-1.39.1.dev22.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
447
- khoj-1.39.1.dev22.dist-info/RECORD,,
444
+ khoj-1.40.0.dist-info/METADATA,sha256=-3lou9XkbclRf4LrZePcUJrkf4zGVM6ZEVJFHsuoACs,7832
445
+ khoj-1.40.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
446
+ khoj-1.40.0.dist-info/entry_points.txt,sha256=KBIcez5N_jCgq_ER4Uxf-e1lxTBMTE_BBjMwwfeZyAg,39
447
+ khoj-1.40.0.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
448
+ khoj-1.40.0.dist-info/RECORD,,