hyperpocket 0.4.3__py3-none-any.whl → 0.4.5__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.
@@ -0,0 +1,8 @@
1
+ # Valyu Authentication
2
+
3
+ ## Supported Authentication Types
4
+ - Token
5
+
6
+ ## Additional Resources
7
+
8
+ - [Valyu API Documentation](https://www.valyu.network/)
File without changes
@@ -0,0 +1,14 @@
1
+ from hyperpocket.auth.context import AuthContext
2
+
3
+
4
+ class KrakenAuthContext(AuthContext):
5
+ def to_dict(self) -> dict[str, str]:
6
+ return {
7
+ 'KRAKEN_API_KEY': self.detail["KRAKEN_API_KEY"],
8
+ 'KRAKEN_API_SECRET': self.detail["KRAKEN_API_SECRET"],
9
+ }
10
+
11
+ def to_profiled_dict(self, profile: str) -> dict[str, str]:
12
+ return {
13
+ f"{profile.upper()}_{self._ACCESS_TOKEN_KEY}": self.access_token,
14
+ }
@@ -0,0 +1,17 @@
1
+ from hyperpocket.auth.kraken.context import KrakenAuthContext
2
+ from hyperpocket.auth.kraken.keypair_schema import KrakenKeypairResponse
3
+
4
+
5
+ class KrakenKeypairAuthContext(KrakenAuthContext):
6
+ @classmethod
7
+ def from_kraken_keypair_response(cls, response: KrakenKeypairResponse):
8
+ description = f"Kraken Keypair Context logged in"
9
+ return cls(
10
+ access_token="",
11
+ detail={
12
+ "KRAKEN_API_KEY": response.kraken_api_key,
13
+ "KRAKEN_API_SECRET": response.kraken_api_secret,
14
+ },
15
+ description=description,
16
+ expires_at=None,
17
+ )
@@ -0,0 +1,97 @@
1
+ from typing import Optional
2
+ from urllib.parse import urljoin, urlencode
3
+
4
+ from hyperpocket.auth import AuthProvider
5
+ from hyperpocket.auth.ahrefs.token_schema import AhrefsTokenRequest
6
+ from hyperpocket.auth.context import AuthContext
7
+ from hyperpocket.auth.handler import AuthHandlerInterface
8
+ from hyperpocket.auth.kraken.keypair_context import KrakenKeypairAuthContext
9
+ from hyperpocket.auth.kraken.keypair_schema import KrakenKeypairRequest, KrakenKeypairResponse
10
+ from hyperpocket.config import config
11
+ from hyperpocket.futures import FutureStore
12
+
13
+
14
+ class KrakeyKeypairAuthHandler(AuthHandlerInterface):
15
+ name: str = "kraken-keypair"
16
+ description: str = (
17
+ "This handler is used to authenticate users using the Kraken keypair."
18
+ )
19
+ scoped: bool = False
20
+
21
+ _TOKEN_URL: str = urljoin(
22
+ config().public_base_url + "/",
23
+ f"{config().callback_url_rewrite_prefix}/auth/kraken/keypair",
24
+ )
25
+
26
+ @staticmethod
27
+ def provider() -> AuthProvider:
28
+ return AuthProvider.KRAKEN
29
+
30
+ @staticmethod
31
+ def provider_default() -> bool:
32
+ return True
33
+
34
+ @staticmethod
35
+ def recommended_scopes() -> set[str]:
36
+ return set()
37
+
38
+ def prepare(
39
+ self,
40
+ auth_req: AhrefsTokenRequest,
41
+ thread_id: str,
42
+ profile: str,
43
+ future_uid: str,
44
+ *args,
45
+ **kwargs,
46
+ ) -> str:
47
+ redirect_uri = urljoin(
48
+ config().public_base_url + "/",
49
+ f"{config().callback_url_rewrite_prefix}/auth/kraken/keypair/callback",
50
+ )
51
+ url = self._make_auth_url(
52
+ auth_req=auth_req, redirect_uri=redirect_uri, state=future_uid
53
+ )
54
+ FutureStore.create_future(
55
+ future_uid,
56
+ data={
57
+ "redirect_uri": redirect_uri,
58
+ "thread_id": thread_id,
59
+ "profile": profile,
60
+ },
61
+ )
62
+
63
+ return f"User needs to authenticate using the following URL: {url}"
64
+
65
+ async def authenticate(
66
+ self, auth_req: KrakenKeypairRequest, future_uid: str, *args, **kwargs
67
+ ) -> AuthContext:
68
+ future_data = FutureStore.get_future(future_uid)
69
+ kraken_api_keypair = await future_data.future
70
+
71
+ response = KrakenKeypairResponse(
72
+ kraken_api_key=kraken_api_keypair["kraken_api_key"],
73
+ kraken_api_secret=kraken_api_keypair["kraken_api_secret"],
74
+ )
75
+ context = KrakenKeypairAuthContext.from_kraken_keypair_response(response)
76
+
77
+ return context
78
+
79
+ async def refresh(
80
+ self, auth_req: KrakenKeypairRequest, context: AuthContext, *args, **kwargs
81
+ ) -> AuthContext:
82
+ raise Exception("Kraken keypair doesn't support refresh")
83
+
84
+ def _make_auth_url(
85
+ self, auth_req: KrakenKeypairRequest, redirect_uri: str, state: str
86
+ ):
87
+ params = {
88
+ "redirect_uri": redirect_uri,
89
+ "state": state,
90
+ }
91
+ auth_url = f"{self._TOKEN_URL}?{urlencode(params)}"
92
+ return auth_url
93
+
94
+ def make_request(
95
+ self, auth_scopes: Optional[list[str]] = None, **kwargs
96
+ ) -> KrakenKeypairRequest:
97
+ return KrakenKeypairRequest()
@@ -0,0 +1,10 @@
1
+ from hyperpocket.auth.schema import AuthenticateRequest, AuthenticateResponse
2
+
3
+
4
+ class KrakenKeypairRequest(AuthenticateRequest):
5
+ pass
6
+
7
+
8
+ class KrakenKeypairResponse(AuthenticateResponse):
9
+ kraken_api_key: str
10
+ kraken_api_secret: str
@@ -73,6 +73,8 @@ class AuthProvider(Enum):
73
73
  ZINC = "zinc"
74
74
  SEMANTIC_SCHOLAR = "semantic_scholar"
75
75
  WEAVIATE = "weaviate"
76
+ VALYU = "valyu"
77
+ KRAKEN = "kraken"
76
78
 
77
79
  @classmethod
78
80
  def get_auth_provider(cls, auth_provider_name: str) -> "AuthProvider":
@@ -0,0 +1,8 @@
1
+ # Valyu Authentication
2
+
3
+ ## Supported Authentication Types
4
+ - Token
5
+
6
+ ## Additional Resources
7
+
8
+ - [Valyu API Documentation](https://www.valyu.network/)
File without changes
@@ -0,0 +1,15 @@
1
+ from hyperpocket.auth.context import AuthContext
2
+
3
+
4
+ class ValyuAuthContext(AuthContext):
5
+ _ACCESS_TOKEN_KEY: str = "VALYU_API_KEY"
6
+
7
+ def to_dict(self) -> dict[str, str]:
8
+ return {
9
+ self._ACCESS_TOKEN_KEY: self.access_token,
10
+ }
11
+
12
+ def to_profiled_dict(self, profile: str) -> dict[str, str]:
13
+ return {
14
+ f"{profile.upper()}_{self._ACCESS_TOKEN_KEY}": self.access_token,
15
+ }
@@ -0,0 +1,11 @@
1
+ from hyperpocket.auth.valyu.context import ValyuAuthContext
2
+ from hyperpocket.auth.valyu.token_schema import ValyuTokenResponse
3
+
4
+
5
+ class ValyuTokenAuthContext(ValyuAuthContext):
6
+ @classmethod
7
+ def from_valyu_token_response(cls, response: ValyuTokenResponse):
8
+ description = f"Valyu Token Context logged in"
9
+ return cls(
10
+ access_token=response.access_token, description=description, expires_at=None
11
+ )
@@ -0,0 +1,93 @@
1
+ from typing import Optional
2
+ from urllib.parse import urljoin, urlencode
3
+
4
+ from hyperpocket.auth import AuthProvider
5
+ from hyperpocket.auth.context import AuthContext
6
+ from hyperpocket.auth.handler import AuthHandlerInterface
7
+ from hyperpocket.auth.valyu.token_context import ValyuTokenAuthContext
8
+ from hyperpocket.auth.valyu.token_schema import ValyuTokenRequest, ValyuTokenResponse
9
+ from hyperpocket.config import config
10
+ from hyperpocket.futures import FutureStore
11
+
12
+
13
+ class ValyuTokenAuthHandler(AuthHandlerInterface):
14
+ name: str = "valyu-token"
15
+ description: str = (
16
+ "This handler is used to authenticate users using the Valyu token."
17
+ )
18
+ scoped: bool = False
19
+
20
+ _TOKEN_URL: str = urljoin(
21
+ config().public_base_url + "/",
22
+ f"{config().callback_url_rewrite_prefix}/auth/token",
23
+ )
24
+
25
+ @staticmethod
26
+ def provider() -> AuthProvider:
27
+ return AuthProvider.VALYU
28
+
29
+ @staticmethod
30
+ def provider_default() -> bool:
31
+ return True
32
+
33
+ @staticmethod
34
+ def recommended_scopes() -> set[str]:
35
+ return set()
36
+
37
+ def prepare(
38
+ self,
39
+ auth_req: ValyuTokenRequest,
40
+ thread_id: str,
41
+ profile: str,
42
+ future_uid: str,
43
+ *args,
44
+ **kwargs,
45
+ ) -> str:
46
+ redirect_uri = urljoin(
47
+ config().public_base_url + "/",
48
+ f"{config().callback_url_rewrite_prefix}/auth/valyu/token/callback",
49
+ )
50
+ url = self._make_auth_url(
51
+ auth_req=auth_req, redirect_uri=redirect_uri, state=future_uid
52
+ )
53
+ FutureStore.create_future(
54
+ future_uid,
55
+ data={
56
+ "redirect_uri": redirect_uri,
57
+ "thread_id": thread_id,
58
+ "profile": profile,
59
+ },
60
+ )
61
+
62
+ return f"User needs to authenticate using the following URL: {url}"
63
+
64
+ async def authenticate(
65
+ self, auth_req: ValyuTokenRequest, future_uid: str, *args, **kwargs
66
+ ) -> AuthContext:
67
+ future_data = FutureStore.get_future(future_uid)
68
+ access_token = await future_data.future
69
+
70
+ response = ValyuTokenResponse(access_token=access_token)
71
+ context = ValyuTokenAuthContext.from_valyu_token_response(response)
72
+
73
+ return context
74
+
75
+ async def refresh(
76
+ self, auth_req: ValyuTokenRequest, context: AuthContext, *args, **kwargs
77
+ ) -> AuthContext:
78
+ raise Exception("Valyu token doesn't support refresh")
79
+
80
+ def _make_auth_url(
81
+ self, auth_req: ValyuTokenRequest, redirect_uri: str, state: str
82
+ ):
83
+ params = {
84
+ "redirect_uri": redirect_uri,
85
+ "state": state,
86
+ }
87
+ auth_url = f"{self._TOKEN_URL}?{urlencode(params)}"
88
+ return auth_url
89
+
90
+ def make_request(
91
+ self, auth_scopes: Optional[list[str]] = None, **kwargs
92
+ ) -> ValyuTokenRequest:
93
+ return ValyuTokenRequest()
@@ -0,0 +1,9 @@
1
+ from hyperpocket.auth.schema import AuthenticateRequest, AuthenticateResponse
2
+
3
+
4
+ class ValyuTokenRequest(AuthenticateRequest):
5
+ pass
6
+
7
+
8
+ class ValyuTokenResponse(AuthenticateResponse):
9
+ access_token: str
@@ -30,10 +30,9 @@ class Pocket(object):
30
30
  auth=auth,
31
31
  )
32
32
  except Exception as e:
33
- if hasattr(self, "server"):
34
- self.server.refcnt_down(self._uid)
33
+ self.teardown()
35
34
  pocket_logger.error(f"Failed to initialize pocket server. error : {e}")
36
- self._teardown_server()
35
+ # self._teardown_server()
37
36
  raise e
38
37
 
39
38
  try:
@@ -337,15 +336,19 @@ class Pocket(object):
337
336
 
338
337
  def _teardown_server(self):
339
338
  self.server.teardown()
339
+
340
+ def teardown(self):
341
+ if hasattr(self, 'server'):
342
+ self.server.refcnt_down(self._uid)
340
343
 
341
344
  def __enter__(self):
342
345
  return self
343
346
 
344
347
  def __exit__(self, exc_type, exc_val, exc_tb):
345
- self.server.refcnt_down(self._uid)
348
+ self.teardown()
346
349
 
347
350
  def __del__(self):
348
- self.server.refcnt_down(self._uid)
351
+ self.teardown()
349
352
 
350
353
  def __getstate__(self):
351
354
  state = self.__dict__.copy()
@@ -0,0 +1,58 @@
1
+ from http import HTTPStatus
2
+
3
+ from fastapi import APIRouter, Form
4
+ from starlette.responses import HTMLResponse, RedirectResponse
5
+ from hyperpocket.futures import FutureStore
6
+ from hyperpocket.server.auth.token import add_query_params
7
+
8
+ kraken_auth_router = APIRouter(prefix="/kraken")
9
+
10
+ @kraken_auth_router.get("/keypair", response_class=HTMLResponse)
11
+ async def keypair_form(redirect_uri: str, state: str = ""):
12
+ html = f"""
13
+ <html>
14
+ <body>
15
+ <h2>Enter Token</h2>
16
+ <form action="submit" method="post">
17
+ <input type="hidden" name="redirect_uri" value="{redirect_uri}">
18
+ <input type="hidden" name="state" value="{state}">
19
+
20
+ <label for="kraken_api_key">Kraken API Key:</label>
21
+ <input type="text" id="kraken_api_key" name="kraken_api_key" required>
22
+
23
+ <label for="kraken_api_secret">Kraken API Secret:</label>
24
+ <input type="text" id="kraken_api_secret" name="kraken_api_secret" required>
25
+
26
+ <button type="submit">submit</button>
27
+ </form>
28
+ </body>
29
+ </html>
30
+ """
31
+ return HTMLResponse(content=html)
32
+
33
+ @kraken_auth_router.post("/submit", response_class=RedirectResponse)
34
+ async def submit_keypair(
35
+ kraken_api_key: str = Form(...),
36
+ kraken_api_secret: str = Form(...),
37
+ redirect_uri: str = Form(...),
38
+ state: str = Form(...),
39
+ ):
40
+ new_callback_url = add_query_params(
41
+ redirect_uri, {
42
+ "kraken_api_key": kraken_api_key,
43
+ "kraken_api_secret": kraken_api_secret,
44
+ "state": state,
45
+ }
46
+ )
47
+ return RedirectResponse(url=new_callback_url, status_code=HTTPStatus.SEE_OTHER)
48
+
49
+ @kraken_auth_router.get("/keypair/callback")
50
+ async def kraken_keypair_callback(state: str, kraken_api_key: str, kraken_api_secret: str):
51
+ try:
52
+ FutureStore.resolve_future(state, {
53
+ "kraken_api_key": kraken_api_key,
54
+ "kraken_api_secret": kraken_api_secret,
55
+ })
56
+ except ValueError:
57
+ return HTMLResponse(content="failed")
58
+ return HTMLResponse(content="success")
@@ -0,0 +1,14 @@
1
+ from fastapi import APIRouter
2
+ from starlette.responses import HTMLResponse
3
+ from hyperpocket.futures import FutureStore
4
+
5
+ valyu_auth_router = APIRouter(prefix="/valyu")
6
+
7
+
8
+ @valyu_auth_router.get("/token/callback")
9
+ async def valyu_token_callback(state: str, token: str):
10
+ try:
11
+ FutureStore.resolve_future(state, token)
12
+ except ValueError:
13
+ return HTMLResponse(content="failed")
14
+ return HTMLResponse(content="success")
@@ -1,3 +1,4 @@
1
+ import inspect
1
2
  from typing import Callable, List, Optional
2
3
 
3
4
  from hyperpocket.auth import AuthProvider
@@ -24,6 +25,9 @@ def function_tool(
24
25
  auth_handler=auth_handler,
25
26
  )
26
27
 
28
+ if inspect.iscoroutinefunction(inner_func):
29
+ return FunctionTool.from_func(func=inner_func, afunc=inner_func, auth=auth, tool_vars=tool_vars)
30
+
27
31
  return FunctionTool.from_func(func=inner_func, auth=auth, tool_vars=tool_vars)
28
32
 
29
33
  if func is not None:
@@ -1,4 +1,4 @@
1
- from typing import Type, Union
1
+ from typing import Type, Union, Optional
2
2
 
3
3
  from pydantic import BaseModel, Field, create_model
4
4
 
@@ -42,7 +42,7 @@ def json_schema_to_model(
42
42
  fields[property_name] = (field_type, Field(description=field_description))
43
43
  else:
44
44
  fields[property_name] = (
45
- field_type,
45
+ Optional[field_type],
46
46
  Field(default=field_default, description=field_description),
47
47
  )
48
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperpocket
3
- Version: 0.4.3
3
+ Version: 0.4.5
4
4
  Summary: Building AI agent with hyperpocket tool in a flash
5
5
  Project-URL: Homepage, https://vessl-ai.github.io/hyperpocket
6
6
  Project-URL: Repository, https://github.com/vessl-ai/hyperpocket
@@ -3,14 +3,14 @@ hyperpocket/builtin.py,sha256=SOrVrNjoKadDMksfB1rt6pKreJFzHG2YGBsLGVsg72c,2385
3
3
  hyperpocket/constants.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  hyperpocket/pocket_auth.py,sha256=VzpGpHOOQIiEgrk1sYg5DYa5WYV6gRQmFlm8Kb2C9V0,17611
5
5
  hyperpocket/pocket_core.py,sha256=WkY7Dp7KcJTORAFNuxDbZ5PDgicRANUtKkpZmI5gg6s,10021
6
- hyperpocket/pocket_main.py,sha256=XH0wlT1AafZDItgbYBkoo0dSb0z6Tcvl8AC9puXe8mg,10215
6
+ hyperpocket/pocket_main.py,sha256=_YoxA01tFqnU3MavJndiXn1cKYWZ7z9_v0IihCzlHmo,10228
7
7
  hyperpocket/prompts.py,sha256=N1bCzCLZvGUVhH1Vn_cgeBPsdY3MdIU7ZGqVgexoj5E,472
8
8
  hyperpocket/tool_like.py,sha256=lUk9kUHPUmugqHCLbnWflKtZbCwtgcoYWtqGqUQtV38,187
9
9
  hyperpocket/auth/README.md,sha256=zn4QqnFZCA_4X3x8Wb6lE3OP5otYxpByZaCiUkBvaNs,11562
10
10
  hyperpocket/auth/__init__.py,sha256=pO8M6SAuq0EPqi848_Iy650wqaLekx98e3RRnEAM_r0,607
11
11
  hyperpocket/auth/context.py,sha256=m-j2gDYUKBMsiakLHsu9thhM4dYyFiXP0Wp0S_iC0bU,1303
12
12
  hyperpocket/auth/handler.py,sha256=5cusl9ANEyG3gORVFjqh709txC0alw6eKtxgV6wjf6k,6683
13
- hyperpocket/auth/provider.py,sha256=7oRpa3ImMdQPXp2-VwTF3tZGhPkyIe0cOgQCJcljzgQ,2061
13
+ hyperpocket/auth/provider.py,sha256=qZGenhTsL8vqd9zmUMM52TVlmdNNOTsmLmCPmZshUNg,2103
14
14
  hyperpocket/auth/schema.py,sha256=pl4oRTNj8PdqQg6UVPWf8ei2uYQ4DtOmmD58cVFMYQw,537
15
15
  hyperpocket/auth/activeloop/README.md,sha256=xp8n0itbY9VNt8XEvCAE4Ealvj4uf_f1uSZyWG4Q5FE,172
16
16
  hyperpocket/auth/activeloop/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -240,6 +240,12 @@ hyperpocket/auth/klaviyo/context.py,sha256=JLALnthzihgMZkAQhKpzf8X07iHt0Iz2lEYsD
240
240
  hyperpocket/auth/klaviyo/token_context.py,sha256=OwckVoIbJaNH65WmIgi7C03TCHR0eCInA20RYmNX9Vc,455
241
241
  hyperpocket/auth/klaviyo/token_handler.py,sha256=0IiLFRhMhAm2LAMSGhkOoIoSiBbx0b776YTfB9VlJpw,2938
242
242
  hyperpocket/auth/klaviyo/token_schema.py,sha256=-x9e36JdNkMmgjRkXzzmpDBdeLsA_yA1wS2svhqNqlI,276
243
+ hyperpocket/auth/kraken/README.md,sha256=QeSzmWSS86cXG1CmhAnGWLaVAeAo4ZpMWYwJ8OlCOMg,148
244
+ hyperpocket/auth/kraken/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
+ hyperpocket/auth/kraken/context.py,sha256=LNa6UjosOg880PmBinubg8pHqjQWFqJ5sKBklZrhD38,455
246
+ hyperpocket/auth/kraken/keypair_context.py,sha256=KyyJOlCE2wo3EIFFz5DGmHCPNb0tBOICvma9KrPyJHA,624
247
+ hyperpocket/auth/kraken/keypair_handler.py,sha256=JdYLFV-S9IcCHQuKa2xYLh7oYAmxO29GQrcUvvmik_c,3123
248
+ hyperpocket/auth/kraken/keypair_schema.py,sha256=xpZqmIg743Gf0OOfq9KNOg6Y-q5Yv67xOf9uBL7xq-0,242
243
249
  hyperpocket/auth/lever/README.md,sha256=00OuO_5cJ7RwZ4ZuWzYonSaQwnO4BYYycH3IvbBNgPM,166
244
250
  hyperpocket/auth/lever/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
251
  hyperpocket/auth/lever/context.py,sha256=rNqjJyM4AToXEKT9DDKMdux2xk5vhwy6B6Fg84YCPIg,425
@@ -422,6 +428,12 @@ hyperpocket/auth/trello/context.py,sha256=EFB3Jk4DtngnAkySOJ4BxODFVo9YGPuKYwmlDv
422
428
  hyperpocket/auth/trello/token_context.py,sha256=xrHxG0sBnln13XxdkojFeoMYMO6PWKXXvsb9j5FmgRs,446
423
429
  hyperpocket/auth/trello/token_handler.py,sha256=Gc6RIzljxGfCsCW3c7YtxT0LMaYXxSc1af5z61MT72k,2905
424
430
  hyperpocket/auth/trello/token_schema.py,sha256=1N-SfXzgxFUyWwomMaf44tiuQmpY3sAWkfAYLcgMXxw,274
431
+ hyperpocket/auth/valyu/README.md,sha256=QeSzmWSS86cXG1CmhAnGWLaVAeAo4ZpMWYwJ8OlCOMg,148
432
+ hyperpocket/auth/valyu/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
433
+ hyperpocket/auth/valyu/context.py,sha256=He1n_Yo9CNOoOG_2ESKEJi8F5OphLbMruxK20zgUDHA,427
434
+ hyperpocket/auth/valyu/token_context.py,sha256=0FKxYQUu4Zvu2gywcNdvRIEto4k_Iff9qQt_hE3-gd4,437
435
+ hyperpocket/auth/valyu/token_handler.py,sha256=iDLEkB3dG5Ag8jm7xP7bkLL3wElfU6Xdyxjwr7P7YL8,2864
436
+ hyperpocket/auth/valyu/token_schema.py,sha256=1yaf4fSREnTpvwmzKDrVh1oBxrwPSRnRPbKPOub-iPM,207
425
437
  hyperpocket/auth/wandb/README.md,sha256=Zsohbn6yELf8pfhBddDRm_iqs4NgQBZZhnC00yP5mVE,252
426
438
  hyperpocket/auth/wandb/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
427
439
  hyperpocket/auth/wandb/context.py,sha256=YKtk8yz-LnKHMwLs0CGZ3HUqvvtS6J2eAWQ7B-Z1rZg,425
@@ -527,6 +539,7 @@ hyperpocket/server/auth/heygen.py,sha256=dtHq_CkBkDFsj2QfebpLRuFIByVE9PXX3fe3z8P
527
539
  hyperpocket/server/auth/hubspot.py,sha256=6ApquQXemvjuFattNDALrz3932w20rFEOZaz_71bvBg,722
528
540
  hyperpocket/server/auth/jira.py,sha256=xYzQ7Ve-z90wvChoVF_7rWuez9vcjHXB3FdZEVshSXo,703
529
541
  hyperpocket/server/auth/klaviyo.py,sha256=5EShL4tD5JpeYh7lserpv_PFEC-fyn4QpKNNP8RUVJo,445
542
+ hyperpocket/server/auth/kraken.py,sha256=vhKhEI8NQiaMOBWbw1dROBBOCia91AYXYRozX8TyDds,2146
530
543
  hyperpocket/server/auth/lever.py,sha256=AJjd852iUgfbudd-ILknC7HykgaKBKlMWfEUIWZ81ok,437
531
544
  hyperpocket/server/auth/lever_sandbox.py,sha256=RrhBvEZUAfj26Nj7Ic5MQAauyMmhT9rE__tkMhmAT6Y,469
532
545
  hyperpocket/server/auth/linear.py,sha256=vUW4TEqdOYqAyx9YLJC4-dVldPTDuIPXRvoo-a89ai8,988
@@ -557,6 +570,7 @@ hyperpocket/server/auth/tavily.py,sha256=gLQtoxmtiv0zbsdL0iX-_qaig_LdLrhUO9-KzVs
557
570
  hyperpocket/server/auth/timekit.py,sha256=8pC-DT_gbm6vmd1oZaquD4Z68998BEDb1nYVAIXldu4,445
558
571
  hyperpocket/server/auth/token.py,sha256=Yq5Ym-uEO_3cBpQOsmCBuqtFIdImrNcVUgF5ozs5NHk,1763
559
572
  hyperpocket/server/auth/trello.py,sha256=1T3ez62h8-KMvu2Zj1Tyv2afgqLUbtG2LM4QbISLOGA,441
573
+ hyperpocket/server/auth/valyu.py,sha256=orPvPC_Wt-rqaycFGliv1XGhTE73AxHSzwhFV_cH8Zc,437
560
574
  hyperpocket/server/auth/wandb.py,sha256=jfwg-lQVrr5TgEL7QETnaFucDvi057SJvVZlBe7cOqQ,709
561
575
  hyperpocket/server/auth/weaviate.py,sha256=WnBQu4H9mOGYEq7JcGqUkk3QXRO8FpGa9TLRHMQfpCE,732
562
576
  hyperpocket/server/auth/workiom.py,sha256=0apFB5-3rmcJaQeEl1_XZ_QlsZORdq8kixJBGkTpZ3Y,445
@@ -575,7 +589,7 @@ hyperpocket/tool/dock/__init__.py,sha256=gEFaYTgTIzzaAHW6Bl1CJL8RQlU23NK--bojLqP
575
589
  hyperpocket/tool/dock/dock.py,sha256=Uk3Lggmj_piGFiPVde2ZvRXOKncIYqjPaRQ3LD8DWT0,859
576
590
  hyperpocket/tool/function/README.md,sha256=6Y9a8FlFjEdbrVqF0NoQ1j34VoV8Zt6Pf9-xlLIHkTc,3676
577
591
  hyperpocket/tool/function/__init__.py,sha256=n0IYvfoyoFWv76iwK2kBC-X6468dl5XyYFl1mudYSe4,261
578
- hyperpocket/tool/function/annotation.py,sha256=mHm_TN2X7xmivBZ8_tbnsaGt_GUQZ-l2IPv0PudZKb8,982
592
+ hyperpocket/tool/function/annotation.py,sha256=qVBhjFUXY_MXysPN61FJuX4mgVZHuMJTtn0L5QCY4eg,1159
579
593
  hyperpocket/tool/function/tool.py,sha256=HwsTI__DapAoYxQMuy45ivD4Lxyd7_-MO0GHlqfuI5c,7466
580
594
  hyperpocket/tool/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
581
595
  hyperpocket/util/__init__.py,sha256=7vN8c7dy7nhGhjXtSUGAsc6GIlUnuBMvXSl1yW1M4js,35
@@ -586,8 +600,8 @@ hyperpocket/util/flatten_json_schema.py,sha256=iuNBEmMSKFtPi-uqo6fb3RWN0koHOAihW
586
600
  hyperpocket/util/function_to_model.py,sha256=TXUs-qPbzL8C9-qqpz4Ad4D9MOPP61n_p0iPU6SoBeM,2318
587
601
  hyperpocket/util/generate_slug.py,sha256=gwwf9gfTlqribrvybMQQj7VIHX5FspVoTm5-EYH-X74,150
588
602
  hyperpocket/util/get_objects_from_subpackage.py,sha256=4mR_S8eaJSdU68YfCkiXeIcXxb6q7LjFGsY_IHeNIZw,929
589
- hyperpocket/util/json_schema_to_model.py,sha256=BNTFYzBK-yZr2VkO6lAdZkXdZXfGSabzWa3DM6it4KI,3731
590
- hyperpocket-0.4.3.dist-info/METADATA,sha256=ipsj7-g41HnCurUcYUUFDglQKa2Ux-8ag1uiBLkIoyA,13074
591
- hyperpocket-0.4.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
592
- hyperpocket-0.4.3.dist-info/entry_points.txt,sha256=KpBleaYr0SaENXOa-dFvJ_cvFCHYFEQ4LMl11ShAcBI,61
593
- hyperpocket-0.4.3.dist-info/RECORD,,
603
+ hyperpocket/util/json_schema_to_model.py,sha256=nc5AmnqkrdeFLELu-7_O9sEAaUaD8_KGlvIMDRobt-4,3751
604
+ hyperpocket-0.4.5.dist-info/METADATA,sha256=vFdzt3Dz_z0naddvIBneuu-KAqGYi1lwtnUaYnAKUmk,13074
605
+ hyperpocket-0.4.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
606
+ hyperpocket-0.4.5.dist-info/entry_points.txt,sha256=KpBleaYr0SaENXOa-dFvJ_cvFCHYFEQ4LMl11ShAcBI,61
607
+ hyperpocket-0.4.5.dist-info/RECORD,,