hyperpocket 0.0.3__py3-none-any.whl → 0.1.8__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. hyperpocket/auth/README.md +3 -3
  2. hyperpocket/auth/__init__.py +0 -8
  3. hyperpocket/auth/gumloop/context.py +13 -0
  4. hyperpocket/auth/gumloop/token_context.py +15 -0
  5. hyperpocket/auth/gumloop/token_handler.py +66 -0
  6. hyperpocket/auth/gumloop/token_schema.py +8 -0
  7. hyperpocket/auth/linear/token_context.py +1 -1
  8. hyperpocket/auth/notion/README.md +28 -0
  9. hyperpocket/auth/notion/context.py +15 -0
  10. hyperpocket/auth/notion/token_context.py +14 -0
  11. hyperpocket/auth/notion/token_handler.py +65 -0
  12. hyperpocket/auth/notion/token_schema.py +10 -0
  13. hyperpocket/auth/provider.py +8 -5
  14. hyperpocket/auth/reddit/context.py +15 -0
  15. hyperpocket/auth/reddit/oauth2_context.py +32 -0
  16. hyperpocket/auth/reddit/oauth2_handler.py +151 -0
  17. hyperpocket/auth/reddit/oauth2_schema.py +18 -0
  18. hyperpocket/auth/slack/token_context.py +1 -1
  19. hyperpocket/builtin.py +63 -0
  20. hyperpocket/cli/__main__.py +12 -0
  21. hyperpocket/cli/auth.py +83 -0
  22. hyperpocket/cli/codegen/auth/__init__.py +13 -0
  23. hyperpocket/cli/codegen/auth/auth_context_template.py +16 -0
  24. hyperpocket/cli/codegen/auth/auth_token_context_template.py +16 -0
  25. hyperpocket/cli/codegen/auth/auth_token_handler_template.py +69 -0
  26. hyperpocket/cli/codegen/auth/auth_token_schema_template.py +12 -0
  27. hyperpocket/cli/codegen/auth/server_auth_template.py +18 -0
  28. hyperpocket/cli/eject.py +19 -0
  29. hyperpocket/cli/sync.py +5 -5
  30. hyperpocket/config/settings.py +2 -4
  31. hyperpocket/futures/futurestore.py +0 -1
  32. hyperpocket/pocket_auth.py +25 -5
  33. hyperpocket/pocket_core.py +262 -0
  34. hyperpocket/pocket_main.py +124 -173
  35. hyperpocket/prompts.py +6 -8
  36. hyperpocket/repository/__init__.py +2 -2
  37. hyperpocket/repository/lock.py +19 -0
  38. hyperpocket/repository/lockfile.py +19 -13
  39. hyperpocket/repository/repository.py +26 -1
  40. hyperpocket/server/auth/__init__.py +0 -6
  41. hyperpocket/server/auth/gumloop.py +16 -0
  42. hyperpocket/server/auth/notion.py +19 -0
  43. hyperpocket/server/auth/reddit.py +16 -0
  44. hyperpocket/server/server.py +52 -16
  45. hyperpocket/server/tool/dto/script.py +15 -2
  46. hyperpocket/server/tool/wasm.py +20 -8
  47. hyperpocket/session/README.md +2 -2
  48. hyperpocket/session/in_memory.py +18 -5
  49. hyperpocket/session/interface.py +14 -0
  50. hyperpocket/session/redis.py +29 -5
  51. hyperpocket/tool/README.md +16 -12
  52. hyperpocket/tool/__init__.py +4 -3
  53. hyperpocket/tool/function/README.md +39 -10
  54. hyperpocket/tool/function/__init__.py +2 -0
  55. hyperpocket/tool/function/annotation.py +2 -1
  56. hyperpocket/tool/function/tool.py +98 -13
  57. hyperpocket/tool/tests/test_function_tool.py +55 -0
  58. hyperpocket/tool/tests/test_wasm_tool.py +73 -0
  59. hyperpocket/tool/tool.py +65 -2
  60. hyperpocket/tool/wasm/README.md +27 -5
  61. hyperpocket/tool/wasm/script.py +40 -1
  62. hyperpocket/tool/wasm/templates/python.py +32 -14
  63. hyperpocket/tool/wasm/tool.py +21 -18
  64. hyperpocket/tool_like.py +5 -0
  65. hyperpocket/util/__init__.py +1 -1
  66. hyperpocket/util/extract_func_param_desc_from_docstring.py +4 -4
  67. hyperpocket/util/function_to_model.py +5 -2
  68. hyperpocket/util/json_schema_to_model.py +45 -26
  69. {hyperpocket-0.0.3.dist-info → hyperpocket-0.1.8.dist-info}/METADATA +101 -72
  70. hyperpocket-0.1.8.dist-info/RECORD +139 -0
  71. {hyperpocket-0.0.3.dist-info → hyperpocket-0.1.8.dist-info}/WHEEL +1 -1
  72. hyperpocket-0.1.8.dist-info/entry_points.txt +2 -0
  73. hyperpocket/auth/README.KR.md +0 -309
  74. hyperpocket/auth/slack/tests/test_oauth2_handler.py +0 -32
  75. hyperpocket/auth/slack/tests/test_token_handler.py +0 -23
  76. hyperpocket/auth/tests/test_google_oauth2_handler.py +0 -147
  77. hyperpocket/auth/tests/test_slack_oauth2_handler.py +0 -147
  78. hyperpocket/auth/tests/test_slack_token_handler.py +0 -66
  79. hyperpocket/external/__init__.py +0 -7
  80. hyperpocket/external/github_client.py +0 -19
  81. hyperpocket/session/README.KR.md +0 -62
  82. hyperpocket/session/tests/test_in_memory.py +0 -145
  83. hyperpocket/session/tests/test_redis.py +0 -151
  84. hyperpocket/tests/test_pocket.py +0 -116
  85. hyperpocket/tests/test_pocket_auth.py +0 -982
  86. hyperpocket/tool/README.KR.md +0 -68
  87. hyperpocket/tool/builtins/__init__.py +0 -0
  88. hyperpocket/tool/builtins/example/__init__.py +0 -0
  89. hyperpocket/tool/builtins/example/add_tool.py +0 -18
  90. hyperpocket/tool/function/README.KR.md +0 -159
  91. hyperpocket/tool/wasm/README.KR.md +0 -144
  92. hyperpocket-0.0.3.dist-info/RECORD +0 -130
  93. hyperpocket-0.0.3.dist-info/entry_points.txt +0 -3
  94. /hyperpocket/auth/{slack/tests → gumloop}/__init__.py +0 -0
  95. /hyperpocket/auth/{tests → notion}/__init__.py +0 -0
  96. /hyperpocket/{session/tests → auth/reddit}/__init__.py +0 -0
  97. /hyperpocket/{tests → cli/codegen}/__init__.py +0 -0
@@ -1,11 +1,11 @@
1
+ import os
1
2
  import json
2
3
  import pathlib
3
4
  from typing import Any, Optional
4
5
 
5
6
  import toml
6
-
7
7
  from hyperpocket.auth import AuthProvider
8
- from hyperpocket.config import pocket_logger
8
+ from hyperpocket.config import settings, pocket_logger
9
9
  from hyperpocket.repository import Lock, Lockfile
10
10
  from hyperpocket.repository.lock import GitLock, LocalLock
11
11
  from hyperpocket.tool import Tool, ToolRequest
@@ -18,26 +18,23 @@ class WasmToolRequest(ToolRequest):
18
18
  lock: Lock
19
19
  rel_path: str
20
20
 
21
- def __init__(self, lock: Lock, rel_path: str):
21
+ def __init__(self, lock: Lock, rel_path: str, tool_vars: dict):
22
22
  self.lock = lock
23
23
  self.rel_path = rel_path
24
+ self.overridden_tool_vars = tool_vars
24
25
 
25
26
  def __str__(self):
26
27
  return f"ToolRequest(lock={self.lock}, rel_path={self.rel_path})"
27
28
 
29
+ def from_local(path: str, tool_vars: Optional[dict[str, str]] = None) -> WasmToolRequest:
30
+ if tool_vars is None:
31
+ tool_vars = dict()
32
+ return WasmToolRequest(LocalLock(path), "", tool_vars)
28
33
 
29
- def from_local(path: str) -> WasmToolRequest:
30
- return WasmToolRequest(LocalLock(path), "")
31
-
32
-
33
- def from_git(repository: str, ref: str, rel_path: str) -> WasmToolRequest:
34
- return WasmToolRequest(GitLock(repository_url=repository, git_ref=ref), rel_path)
35
-
36
-
37
- def from_github(owner: str, repo: str, ref: str, rel_path: str) -> WasmToolRequest:
38
- repository = f"https://github.com/{owner}/{repo}"
39
- return from_git(repository, ref, rel_path)
40
-
34
+ def from_git(repository: str, ref: str, rel_path: str, tool_vars: Optional[dict[str, str]] = None) -> WasmToolRequest:
35
+ if not tool_vars:
36
+ tool_vars = dict()
37
+ return WasmToolRequest(GitLock(repository_url=repository, git_ref=ref), rel_path, tool_vars)
41
38
 
42
39
  class WasmTool(Tool):
43
40
  """
@@ -76,6 +73,7 @@ class WasmTool(Tool):
76
73
  pocket_logger.warning(f"{toolpkg_path} failed to load json schema. error : {e}")
77
74
  json_schema = None
78
75
 
76
+ default_tool_vars = dict()
79
77
  try:
80
78
  with config_path.open("r") as f:
81
79
  config = toml.load(f)
@@ -92,6 +90,7 @@ class WasmTool(Tool):
92
90
  else:
93
91
  raise ValueError("`language` field is required in config.toml")
94
92
  auth = cls._get_auth(config)
93
+ default_tool_vars = config.get("tool_vars", {})
95
94
  except Exception as e:
96
95
  raise ValueError(f"Failed to load config.toml: {e}")
97
96
 
@@ -100,6 +99,7 @@ class WasmTool(Tool):
100
99
  readme = f.read()
101
100
  else:
102
101
  readme = None
102
+
103
103
  return cls(
104
104
  name=name,
105
105
  description=description,
@@ -109,6 +109,9 @@ class WasmTool(Tool):
109
109
  readme=readme,
110
110
  pkg_lock=tool_req.lock,
111
111
  rel_path=tool_req.rel_path,
112
+ postprocessings=tool_req.postprocessings,
113
+ default_tool_vars=default_tool_vars,
114
+ overridden_tool_vars=tool_req.overridden_tool_vars,
112
115
  )
113
116
 
114
117
  @classmethod
@@ -124,7 +127,7 @@ class WasmTool(Tool):
124
127
  auth_handler=auth_handler,
125
128
  scopes=scopes,
126
129
  )
127
-
130
+
128
131
  def template_arguments(self) -> dict[str, str]:
129
132
  return {}
130
133
 
@@ -133,7 +136,7 @@ class WasmTool(Tool):
133
136
  str(self.pkg_lock.toolpkg_path() / self.rel_path),
134
137
  self.runtime,
135
138
  body,
136
- envs,
139
+ envs | self.tool_vars,
137
140
  **kwargs,
138
141
  )
139
142
 
@@ -142,6 +145,6 @@ class WasmTool(Tool):
142
145
  str(self.pkg_lock.toolpkg_path() / self.rel_path),
143
146
  self.runtime,
144
147
  body,
145
- envs,
148
+ envs | self.tool_vars,
146
149
  **kwargs,
147
150
  )
@@ -0,0 +1,5 @@
1
+ from typing import Union, Callable
2
+
3
+ from hyperpocket.tool import ToolRequest, Tool
4
+
5
+ ToolLike = Union[Tool, str, Callable, ToolRequest]
@@ -1 +1 @@
1
- __all__ = ['json_schema_to_model', "tool_to_open_ai_spec"]
1
+ __all__ = ['json_schema_to_model']
@@ -41,13 +41,13 @@ def extract_param_docstring_mapping(func) -> dict[str, str]:
41
41
  pocket_logger.debug(f"try to extract docstring of {func.__name__} by plain text style..")
42
42
  param_descriptions = []
43
43
  for line in docstring.split("\n"):
44
- l = line.strip().split(":")
45
- if len(l) < 2:
44
+ split_line = line.strip().split(":")
45
+ if len(split_line) < 2:
46
46
  continue
47
47
 
48
- param_name = l[0]
48
+ param_name = split_line[0]
49
49
  cleaned_param_name = clean_bracket_content(param_name)
50
- description = ":".join(l[1:]).strip()
50
+ description = ":".join(split_line[1:]).strip()
51
51
  if cleaned_param_name in func_params:
52
52
  param_descriptions.append((cleaned_param_name, description))
53
53
 
@@ -1,6 +1,6 @@
1
1
  import inspect
2
2
  from inspect import signature, Parameter
3
- from typing import Any, Dict, Type, Tuple, List
3
+ from typing import Any, Dict, Type, Tuple
4
4
 
5
5
  from pydantic import BaseModel, create_model
6
6
  from pydantic.fields import FieldInfo
@@ -33,7 +33,10 @@ def function_to_model(func: callable) -> Type[BaseModel]:
33
33
  if param.annotation is Parameter.empty:
34
34
  raise Exception(f"Should all arguments be annotated but {param_name} is not annotated")
35
35
 
36
- if param.annotation.__module__ != "builtins" and not issubclass(param.annotation, BaseModel):
36
+ if param.annotation.__module__ == "typing" and param.annotation.__name__ == "Optional":
37
+ fields[param_name] = (
38
+ param.annotation.__args__[0], FieldInfo(default=param.default, description=param_desc_map.get(param_name, "")))
39
+ elif param.annotation.__module__ != "builtins" and not issubclass(param.annotation, BaseModel):
37
40
  raise Exception(
38
41
  f"currently only support builtin types and pydantic BaseModel but {param_name} is not builtin type")
39
42
 
@@ -1,4 +1,4 @@
1
- from typing import Type
1
+ from typing import Type, Union
2
2
 
3
3
  from pydantic import BaseModel, create_model, Field
4
4
 
@@ -12,32 +12,25 @@ def json_schema_to_model(schema: dict, model_name: str = "DynamicModel") -> Type
12
12
  required_fields = schema.get("required", [])
13
13
  for property_name, property_schema in schema.get("properties", {}).items():
14
14
  field_type, field_default, field_description, required = None, None, None, False
15
- if "type" in property_schema:
16
- json_type = property_schema["type"]
17
- if json_type == "integer":
18
- field_type = int
19
- elif json_type == "string":
20
- field_type = str
21
- elif json_type == "object":
22
- if "properties" in property_schema:
23
- # Recursively create nested models
24
- field_type = json_schema_to_model(property_schema, model_name)
25
- else:
26
- field_type = dict
27
15
 
28
- elif json_type == "array":
29
- # Handle arrays; currently assuming array of objects or primitives
30
- item_schema = property_schema.get("items", {})
31
- if item_schema.get("type") == "object":
32
- field_type = list[json_schema_to_model(item_schema, model_name)]
33
- else:
34
- field_type = list
35
- if "default" in property_schema:
36
- field_default = property_schema["default"]
37
- if "description" in property_schema:
38
- field_description = property_schema["description"]
39
- if property_name in required_fields:
40
- required = True
16
+ if "anyOf" in property_schema:
17
+ types = []
18
+ for item in property_schema["anyOf"]:
19
+ sub_type = _convert_to_python_type(item["type"], model_name, property_schema)
20
+ types.append(sub_type)
21
+
22
+ field_type = Union[tuple(types)]
23
+ elif "type" in property_schema:
24
+ field_type = _convert_to_python_type(property_schema["type"], model_name, property_schema)
25
+ else:
26
+ raise RuntimeError("have no type in json schema.")
27
+
28
+ if "default" in property_schema:
29
+ field_default = property_schema["default"]
30
+ if "description" in property_schema:
31
+ field_description = property_schema["description"]
32
+ if property_name in required_fields:
33
+ required = True
41
34
 
42
35
  if required:
43
36
  fields[property_name] = (field_type, Field(description=field_description))
@@ -67,3 +60,29 @@ def json_schema_to_model(schema: dict, model_name: str = "DynamicModel") -> Type
67
60
  model.Config = Config
68
61
 
69
62
  return model
63
+
64
+
65
+ def _convert_to_python_type(json_type, model_name, property_schema):
66
+ field_type = None
67
+ if json_type == "integer":
68
+ field_type = int
69
+ elif json_type == "string":
70
+ field_type = str
71
+ elif json_type == "boolean":
72
+ field_type = bool
73
+ elif json_type == "none":
74
+ field_type = type(None)
75
+ elif json_type == "object":
76
+ if "properties" in property_schema:
77
+ # Recursively create nested models
78
+ field_type = json_schema_to_model(property_schema, model_name)
79
+ else:
80
+ field_type = dict
81
+ elif json_type == "array":
82
+ # Handle arrays; currently assuming array of objects or primitives
83
+ item_schema = property_schema.get("items", {})
84
+ if item_schema.get("type") == "object":
85
+ field_type = list[json_schema_to_model(item_schema, model_name)]
86
+ else:
87
+ field_type = list
88
+ return field_type
@@ -1,31 +1,26 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: hyperpocket
3
- Version: 0.0.3
3
+ Version: 0.1.8
4
4
  Summary: Building AI agent with hyperpocket tool in a flash
5
- Home-page: https://vessl-ai.github.io/hyperpocket
6
- Author: VESSL AI Devs
7
- Author-email: dev@vessl.ai
8
- Requires-Python: >=3.11,<4.0
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.11
11
- Classifier: Programming Language :: Python :: 3.12
12
- Classifier: Programming Language :: Python :: 3.13
13
- Requires-Dist: click (>=8.1.7,<9.0.0)
14
- Requires-Dist: dynaconf (>=3.2.6,<4.0.0)
15
- Requires-Dist: fastapi (>=0.115.5,<0.116.0)
16
- Requires-Dist: gitpython (>=3.1.43,<4.0.0)
17
- Requires-Dist: httpx (==0.27)
18
- Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
19
- Requires-Dist: multiprocess (>=0.70.17,<0.71.0)
20
- Requires-Dist: playwright (>=1.49.0,<2.0.0)
21
- Requires-Dist: pydantic (>=2.10.2,<3.0.0)
22
- Requires-Dist: pygithub (>=2.5.0,<3.0.0)
23
- Requires-Dist: python-multipart (>=0.0.19,<0.0.20)
24
- Requires-Dist: redis (>=5.2.1,<6.0.0)
25
- Requires-Dist: requests (>=2.32.3,<3.0.0)
26
- Requires-Dist: toml (>=0.10.2,<0.11.0)
27
- Requires-Dist: uvicorn (>=0.32.1,<0.33.0)
5
+ Project-URL: Homepage, https://vessl-ai.github.io/hyperpocket
28
6
  Project-URL: Repository, https://github.com/vessl-ai/hyperpocket
7
+ Author-email: VESSL AI Devs <dev@vessl.ai>
8
+ Requires-Python: >=3.10
9
+ Requires-Dist: click>=8.1.7
10
+ Requires-Dist: dynaconf>=3.2.6
11
+ Requires-Dist: fastapi>=0.115.5
12
+ Requires-Dist: gitpython>=3.1.43
13
+ Requires-Dist: httpx==0.27
14
+ Requires-Dist: jinja2>=3.1.4
15
+ Requires-Dist: multiprocess>=0.70.17
16
+ Requires-Dist: playwright>=1.49.0
17
+ Requires-Dist: pydantic>=2.10.2
18
+ Requires-Dist: pygithub>=2.5.0
19
+ Requires-Dist: python-multipart>=0.0.19
20
+ Requires-Dist: redis>=5.2.1
21
+ Requires-Dist: requests>=2.32.3
22
+ Requires-Dist: toml>=0.10.2
23
+ Requires-Dist: uvicorn>=0.32.1
29
24
  Description-Content-Type: text/markdown
30
25
 
31
26
  # Pocket 👛
@@ -59,10 +54,10 @@ with the dependency spaghetti.
59
54
 
60
55
  ## Installation
61
56
 
62
- 1. install pocket
57
+ 1. install hyperpocket
63
58
 
64
59
  ```bash
65
- pip install pocket
60
+ pip install hyperpocket
66
61
  ```
67
62
 
68
63
  2. install playwright
@@ -87,17 +82,15 @@ Or just use LLM API Clients out of the box.
87
82
  ### Using out-of-the-box tools
88
83
 
89
84
  ```python
85
+ from hyperpocket.tool import from_git
90
86
  from langchain_openai import ChatOpenAI
91
87
 
92
- import hyperpocket as pk
93
- import hyperpocket.curated_tools
94
- from pocket_langchain import PocketLangchain
88
+ from hyperpocket_langchain import PocketLangchain
95
89
 
96
90
  pklc = PocketLangchain(
97
91
  tools=[
98
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
99
- *pk.curated_tools.LINEAR,
100
- "https://github.com/my-org/some-awesome-tool",
92
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
93
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
101
94
  ]
102
95
  )
103
96
  tools = pklc.get_tools()
@@ -116,40 +109,38 @@ Pocket provides way to use end user auth easily.
116
109
 
117
110
  - Supported methods
118
111
 
119
- - [x] OAuth
120
- - [x] Token
121
- - [ ] Basic Auth (Username, Password)
112
+ - [x] OAuth
113
+ - [x] Token
114
+ - [ ] Basic Auth (Username, Password)
122
115
 
123
116
  - Supported OAuth Providers
124
- - [x] Google
125
- - [x] GitHub
126
- - [x] Slack
127
- - [x] Linear
128
- - [ ] Facebook
129
- - [ ] X (Previously Twitter)
130
- - [ ] LinkedIn
131
- - [ ] Discord
132
- - [ ] Zoom
133
- - [ ] Microsoft
134
- - [ ] Spotify
135
- - [ ] Twitch
117
+ - [x] Google
118
+ - [x] GitHub
119
+ - [x] Slack
120
+ - [x] Linear
121
+ - [ ] Facebook
122
+ - [ ] X (Previously Twitter)
123
+ - [ ] LinkedIn
124
+ - [ ] Discord
125
+ - [ ] Zoom
126
+ - [ ] Microsoft
127
+ - [ ] Spotify
128
+ - [ ] Twitch
136
129
 
137
130
  You can manage your auths in request-wise level. (e.g. you can use different auths for different requests)
138
131
 
139
132
  ```python
133
+ from hyperpocket.tool import from_git
140
134
  from langchain_openai import ChatOpenAI
141
135
  from langgraph.graph import StateGraph, START, MessagesState
142
136
  from langgraph.prebuilt import tools_condition
143
137
 
144
- import hyperpocket as pk
145
- import hyperpocket.curated_tools
146
- from pocket_langgraph import PocketLanggraph
138
+ from hyperpocket_langgraph import PocketLanggraph
147
139
 
148
140
  pklg = PocketLanggraph(
149
141
  tools=[
150
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
151
- *pk.curated_tools.LINEAR,
152
- "https://github.com/my-org/some-awesome-tool",
142
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
143
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
153
144
  ],
154
145
  )
155
146
  llm = ChatOpenAI()
@@ -175,12 +166,12 @@ graph_builder.compile()
175
166
  ```
176
167
 
177
168
  ```python
169
+ from hyperpocket.config import secret
170
+ from hyperpocket.tool import from_git
178
171
  from llama_index.core.agent import FunctionCallingAgent
179
172
  from llama_index.llms.openai import OpenAI
180
- from pocket_llamaindex import PocketLlamaindex
181
173
 
182
- from hyperpocket.config import secret
183
- from hyperpocket.tool import from_git
174
+ from hyperpocket_llamaindex import PocketLlamaindex
184
175
 
185
176
  llm = OpenAI(api_key=secret["OPENAI_API_KEY"])
186
177
  pocket = PocketLlamaindex(
@@ -273,11 +264,11 @@ client_secret = "" # your github client secret
273
264
 
274
265
  - While creating your github OAuth app, configuring your app's `Authorization callback URL` is different for your
275
266
  development environment and production environment.
276
- - For development environment, you can use `http://localhost:8000/auth/github/callback`
277
- - **Note**: Default port for pocket dev server is `8000`. If you are using a different port, make sure to
278
- replace `8000` with your actual port number.
279
- - For production environment, you can use `https://yourdomain.com/auth/github/callback`
280
- - **Note**: Make sure to replace `yourdomain.com` with your actual domain name that this app will be hosted on.
267
+ - For development environment, you can use `http://localhost:8000/auth/github/callback`
268
+ - **Note**: Default port for pocket dev server is `8000`. If you are using a different port, make sure to
269
+ replace `8000` with your actual port number.
270
+ - For production environment, you can use `https://yourdomain.com/auth/github/callback`
271
+ - **Note**: Make sure to replace `yourdomain.com` with your actual domain name that this app will be hosted on.
281
272
 
282
273
  #### How to integrate SLACK OAuth app
283
274
 
@@ -288,15 +279,53 @@ client_secret = "" # your github client secret
288
279
  - Redirect URLs :
289
280
  `{public_server_protocol}://{public_hostname}:[{public_server_port}]/{callback_url_rewrite_prefix}/auth/slack/oauth2/callback`
290
281
  - Scopes : What you want to request to user.
291
- - Recommended scopes :
292
- - channels:history,
293
- - channels:read,
294
- - chat:write,
295
- - groups:history,
296
- - groups:read,
297
- - im:history,
298
- - mpim:history,
299
- - reactions:read,
300
- - reactions:write,
282
+ - Recommended scopes :
283
+ - channels:history,
284
+ - channels:read,
285
+ - chat:write,
286
+ - groups:history,
287
+ - groups:read,
288
+ - im:history,
289
+ - mpim:history,
290
+ - reactions:read,
291
+ - reactions:write,
301
292
 
302
293
  3. Set your Slack APP Client ID / Client Secret in `$HOME/.pocket/settings.toml`
294
+
295
+ #### How to start adding a new token auth
296
+
297
+ 1. Generate boilerplate codes for token-based auth services ?
298
+
299
+ ```
300
+ # service_name should be lowercase including underscore
301
+ poetry run hyperpocket devtool create-token-auth-template {service_name}
302
+ ```
303
+
304
+ It will generate boilerplate code lines for a new token-based auth service
305
+
306
+ 2. Extend AuthProvider enum to add your new auth provider.
307
+
308
+ ```python
309
+ class AuthProvider(Enum):
310
+ SERVICE = 'service'
311
+ ```
312
+
313
+ 3. Specify auth provider for tools
314
+
315
+ 1) github repo or local
316
+
317
+ ```toml
318
+ [auth]
319
+ auth_provider = "{service_name}"
320
+ auth_handler = "{service_name}-token"
321
+ scopes = []
322
+ ```
323
+
324
+ 2. function_tool
325
+
326
+ ```python
327
+ @function_tool(
328
+ auth_provider=AuthProvider.SERVICE
329
+ )
330
+ def my_function(**kwargs):
331
+ ```
@@ -0,0 +1,139 @@
1
+ hyperpocket/__init__.py,sha256=iaJvrZ0rgHwAndGFVv8m1Iz_DWtWEcphFPL-1D8f9SY,136
2
+ hyperpocket/builtin.py,sha256=FnsASGfieQKvVrFVESjvm73qsxPvCf7iiHGd7HNVpuQ,2371
3
+ hyperpocket/constants.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ hyperpocket/pocket_auth.py,sha256=-d5UvLkjvsSkem5DGrDphowckVCB3NCLt2jOw9k5U9c,16934
5
+ hyperpocket/pocket_core.py,sha256=xyma8ucYVYID2gSnc5h5nF_nNMFFtimE-8la1IW1RZA,10035
6
+ hyperpocket/pocket_main.py,sha256=UPdRS7ydQAmkqyGUj6ANf4lIr_oKXw-_71k37XCsOa4,10148
7
+ hyperpocket/prompts.py,sha256=XAmTTCzCkXWK50zcmWmGA25v9-HKd_4dL5o85uisbGM,472
8
+ hyperpocket/tool_like.py,sha256=ur8oMU5p4DUYBEF5MBP3faQ7CKsOzb0lLOaL6p8JqSw,134
9
+ hyperpocket/auth/README.md,sha256=zn4QqnFZCA_4X3x8Wb6lE3OP5otYxpByZaCiUkBvaNs,11562
10
+ hyperpocket/auth/__init__.py,sha256=YcwSdDbOasFDzz0mYJR3aQi3nYfbqtrCSppDWZHOBGY,588
11
+ hyperpocket/auth/context.py,sha256=r19VtTK5FGcmvCgCOr16oNJ0GMFYmgaMEe2EHKJhtQY,1302
12
+ hyperpocket/auth/handler.py,sha256=9R6uQ7bPwmkZUUyg0Q1iOSwmWEQKnGEe92XiLeaxM0w,6580
13
+ hyperpocket/auth/provider.py,sha256=zBuVvrp6SwGRGcfWy6mqIXabw-bfahGfsxpBi899RHs,503
14
+ hyperpocket/auth/schema.py,sha256=8J6PIXpFIJyuVhkZzz6X_TiKOz7sFGdUW0qmZD8x3MA,529
15
+ hyperpocket/auth/calendly/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ hyperpocket/auth/calendly/context.py,sha256=oUQzLy_w5NPvbXjFPOhLD-ggONVSy9VVpFabvX4ZpsY,408
17
+ hyperpocket/auth/calendly/oauth2_context.py,sha256=SiMeZaoWh3aneZVH_MXsT_cZ8qCSVeL-pWHVbfYUS6g,848
18
+ hyperpocket/auth/calendly/oauth2_handler.py,sha256=ulfhIcj_GCGIIZHVV9v42p2miHVsE3fpKODnrwz4qU0,5296
19
+ hyperpocket/auth/calendly/oauth2_schema.py,sha256=9JFogAWFAB7nzCww7NXDYuunY6S28wQZzPX41TWfMig,373
20
+ hyperpocket/auth/github/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
+ hyperpocket/auth/github/context.py,sha256=Y0QOCNbtQfNDsmgq47s0YGUxTl1QQC-qq4Hm2aZonJ8,404
22
+ hyperpocket/auth/github/oauth2_context.py,sha256=Ge8rkScRpcAWMMzSWTt2gWrDyi0UehTeZepf39Q6BK0,828
23
+ hyperpocket/auth/github/oauth2_handler.py,sha256=4HP0WE9cd3I6v4s9ZXvwNPhFPNk9b6L_MByTOvFvAIc,5059
24
+ hyperpocket/auth/github/oauth2_schema.py,sha256=XfeSF820natq9kwoDKbY2I9TgdjxP-hPkdoGGrKjSuA,371
25
+ hyperpocket/auth/github/token_context.py,sha256=evstL4mZsWHe9Io1RwBc90VfFOnVAbRk8BI1HseYwg8,446
26
+ hyperpocket/auth/github/token_handler.py,sha256=Vz5CqkGk8a6mb4xpw_Lhidwy4cZD7wTrK6iPKIRb15E,2777
27
+ hyperpocket/auth/github/token_schema.py,sha256=8vbJIYWqX_p4GPAtM5xMx5iwo9oZOtZTuSYcnpFGeio,209
28
+ hyperpocket/auth/google/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
+ hyperpocket/auth/google/context.py,sha256=1ziH27dXPsxp4WkdlyKos37lF623IIs4kX8cmat8QrY,426
30
+ hyperpocket/auth/google/oauth2_context.py,sha256=u7TayAfxPUFWuggtlceub22vHIURF0ZV5Do4jUqLWQ0,1023
31
+ hyperpocket/auth/google/oauth2_handler.py,sha256=547NPhFhi7lpmeVgZ99g_O3IizBMKZ9iAd27RrRNhS4,4880
32
+ hyperpocket/auth/google/oauth2_schema.py,sha256=E_hyNrb-Ro2UWs2AjhmFDBHwaTEsHZa0rQBhUcCWWKk,411
33
+ hyperpocket/auth/gumloop/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ hyperpocket/auth/gumloop/context.py,sha256=6y-5cpQCSEig6qnCWHu1Rvp35DJAibFxKREey8IYFFw,402
35
+ hyperpocket/auth/gumloop/token_context.py,sha256=P92g9O8sKjrJs6RyPAnAwYQxPB6yG0EuljSyIhLvT04,468
36
+ hyperpocket/auth/gumloop/token_handler.py,sha256=nqsHlLU_F4EfA1P629INH2RrUGyof2mOAfp9QnLmM14,2633
37
+ hyperpocket/auth/gumloop/token_schema.py,sha256=hTWWxvL70L35CWtXbBzMF4OMpUDFQIKbDKkjJEQWN7g,209
38
+ hyperpocket/auth/linear/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ hyperpocket/auth/linear/context.py,sha256=hkxVDYO2jB3FCqIz_bMyB3n6OO74PpLI4LiW-42NFNQ,429
40
+ hyperpocket/auth/linear/token_context.py,sha256=KJQXBRSRC1GuIfaIWVahfb-DDraiodAUAL1nxM0vKCQ,471
41
+ hyperpocket/auth/linear/token_handler.py,sha256=wLOodmgXHH4AQWz1tJEHtjrglP3tP1uEDeMQOgQHrRA,2683
42
+ hyperpocket/auth/linear/token_schema.py,sha256=oTy-gOZvXEmGVStgFfnNmlbkknNepOTI5KIeTQLRxus,209
43
+ hyperpocket/auth/notion/README.md,sha256=-pDvDU0CPoM_ZN6HobREV4yHDP0dF2T9_vVJ1cQQz3s,565
44
+ hyperpocket/auth/notion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ hyperpocket/auth/notion/context.py,sha256=Qa-4fCXK661__lXHf5TGu-4mOFlqYCxuDa4IVIDkncA,426
46
+ hyperpocket/auth/notion/token_context.py,sha256=9U5EjgEumYVPT8wEbWrmK0Zz7MzglDl3vGFaVevTqwQ,470
47
+ hyperpocket/auth/notion/token_handler.py,sha256=eK0lJxsGhngXAAaKz_v7aK9YKyiFuMQsLndLPjaOPNs,2586
48
+ hyperpocket/auth/notion/token_schema.py,sha256=z0Ddy438aB8bsEY69B99Bg2KDNnBw2a-DVrbQgehiwg,210
49
+ hyperpocket/auth/reddit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ hyperpocket/auth/reddit/context.py,sha256=WlOvIb4u1PvfrbkYbEq5cSRnXxmIEFuHa4LlKjLEtMc,431
51
+ hyperpocket/auth/reddit/oauth2_context.py,sha256=v1u_uy6O52REp2anteTPNgvb_nX-hI6bM7jNngBZXq4,1015
52
+ hyperpocket/auth/reddit/oauth2_handler.py,sha256=0PLn_A9kkKAXeiEoS11sOaD2p-vyeYFho6_kQhumZJg,5220
53
+ hyperpocket/auth/reddit/oauth2_schema.py,sha256=O93px57D9WMyiY0He-1tAImkCNtorsriRldhlobU6xk,468
54
+ hyperpocket/auth/slack/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ hyperpocket/auth/slack/context.py,sha256=f8dMs7QtSSyissOlPGw8rCZXsVUckFnZWjZ_LAmNXpA,429
56
+ hyperpocket/auth/slack/oauth2_context.py,sha256=0FJjJIIcVp1-G4EZu85gJeSXor-zOFI4ua2z0R_sFqI,1374
57
+ hyperpocket/auth/slack/oauth2_handler.py,sha256=8v9gSGkKMPoqEFGFyjCI1qdvklpyeml-5qeoUFo54Xg,5902
58
+ hyperpocket/auth/slack/oauth2_schema.py,sha256=eu2jF2thmaz66AKcnivTvIBLTbeF-a-xQFMkR4RQYX8,1056
59
+ hyperpocket/auth/slack/token_context.py,sha256=isoyUzWlUQ_PliXZ9kKsrbWdOw5oGzrq7MNpnqJ-r5I,461
60
+ hyperpocket/auth/slack/token_handler.py,sha256=yaJtlOqJP436ubY2VluGxLuFpPo0jh8Y8V3PHUai4X8,2557
61
+ hyperpocket/auth/slack/token_schema.py,sha256=mAwOtRO2tW5OtDzbllDJtR_uhLD8ShQAjezkAZnAgd0,207
62
+ hyperpocket/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ hyperpocket/cli/__main__.py,sha256=4f-ks-2Pzo5QfXEx-JwSpz1C43qTJSBBvnERUwsn6rE,416
64
+ hyperpocket/cli/auth.py,sha256=ypxEpa1L3pqrBdABmRdss23uwE-CnMMNDGHGg4UhBYY,4218
65
+ hyperpocket/cli/eject.py,sha256=Te1YhDONk_VCgZ6l2HjLqONJrn04EfPk19sD6D5SOyY,636
66
+ hyperpocket/cli/pull.py,sha256=1Ku0WKLtlZFnEDvU0m10XsVJcysMxDwdEMzTYgNz0xE,548
67
+ hyperpocket/cli/sync.py,sha256=OO5zFrLOMXk7TSAFEew04ZzW4HLoQ1uVb80UKvIJha0,517
68
+ hyperpocket/cli/codegen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ hyperpocket/cli/codegen/auth/__init__.py,sha256=1R2FwRuReAWyeRe1t3-CpR0Mhvb3xWzF8fEkL2mwuB0,545
70
+ hyperpocket/cli/codegen/auth/auth_context_template.py,sha256=FK8ahapEkx-EyGt5WuS4j3kHnS6-8EcXVhZa9KEmjns,569
71
+ hyperpocket/cli/codegen/auth/auth_token_context_template.py,sha256=sOVeGlt7VKNDuQoB3FPC3S2CaU1qZuHuc6F6aXxb0w4,763
72
+ hyperpocket/cli/codegen/auth/auth_token_handler_template.py,sha256=AMb_uZVBKoQlTPofzO_J1FllLqS99eAPA7t_c7RGpTE,3148
73
+ hyperpocket/cli/codegen/auth/auth_token_schema_template.py,sha256=qXpPcTjnhUizVmBlc6VE6IXwe9NSC9fvYxWPipheuXo,427
74
+ hyperpocket/cli/codegen/auth/server_auth_template.py,sha256=28h8s6-C1AqWhghWHDJieuNufdq1UpPvQQ8OIu_NBGw,620
75
+ hyperpocket/config/__init__.py,sha256=deIffu5NBOlSS1X774QuMlf_yb6P2qBQm6tkcf4s8DU,307
76
+ hyperpocket/config/auth.py,sha256=5Zk7OZmElIqIn7LxsT7H4g3bimBxaKpnbL2v9Fs9MlA,797
77
+ hyperpocket/config/git.py,sha256=CGbY7J1LyN4ccZr9CFGAQwwhjC9kvdU0On_nsAsZ1FQ,362
78
+ hyperpocket/config/logger.py,sha256=Wwl-8lllaCNLZruxXU-bcC74Ciy5SmPOX4AJE5BUzWM,2769
79
+ hyperpocket/config/session.py,sha256=CSXENtWx6Gh4DiPh4u9E-4MFYkM8JRjl2hSPV9PVfrE,801
80
+ hyperpocket/config/settings.py,sha256=tKOFZdOk4pFa7RrPBTY7-NE7Bo_bBZS1Eeez03SedAU,2042
81
+ hyperpocket/futures/__init__.py,sha256=_pRnYZLbogkYFInA3jokkxrcEVRt6YNaBmkf_dSk3SM,136
82
+ hyperpocket/futures/futurestore.py,sha256=WIJGX-XUdB4gWFu2Trto8vd3nTiLFOrnVzQhQP9bO_U,1316
83
+ hyperpocket/repository/__init__.py,sha256=P4Ge__W5wqNgNILNzHjx7qgS8KRcbwri-nb4IPVVErs,219
84
+ hyperpocket/repository/lock.py,sha256=nLuiszT3oECJJxVmTDdBARqv4x25DsKuL4253gJEJfI,6075
85
+ hyperpocket/repository/lockfile.py,sha256=1cNkAv5WHU9o8b6arJn9wcosSp3gHMFe11mbAv72Cgs,2187
86
+ hyperpocket/repository/repository.py,sha256=a0HA6eVA88Xq6MYe3SdqBji0U8_RuiaN2v2OYkT8nZY,1349
87
+ hyperpocket/server/__init__.py,sha256=TLqok_mBeV3VRnbZ_spwrwwbsjJ1q9o375AdBk7tKNA,89
88
+ hyperpocket/server/proxy.py,sha256=OhpAWpilM5ioKAsqInKudtvpYk56nMFeZ-dwoGAYIDA,1905
89
+ hyperpocket/server/server.py,sha256=yktdzmh5vZj9y1n8i1vBHuNV5TAXeJBpKovO_RkAax0,7810
90
+ hyperpocket/server/auth/__init__.py,sha256=IMjz9PCzD7qh4QIf2g-gWIdkDeU36jt-9F55vaHvLoM,286
91
+ hyperpocket/server/auth/calendly.py,sha256=mi9_ysn0SffhnEgaoNa2jcHWCcD_yzqkS0rvzpJG2Qg,478
92
+ hyperpocket/server/auth/github.py,sha256=cgUtdCYPhf_e51fEQgiYjyG6yuPfMV5RmltjujuWcBw,759
93
+ hyperpocket/server/auth/google.py,sha256=_C33Bzow7yzjnvf0WUObu8p-dSU5rXqBgSPrENORAmY,470
94
+ hyperpocket/server/auth/gumloop.py,sha256=t_BUQ7RR8_x-ogqXnQ3iNHTVthzJyUTN03iqtRpWUTU,475
95
+ hyperpocket/server/auth/linear.py,sha256=3Ii8jewBCwS2pH3_mSJzBWot1t8IcVghC9K_ohid-H8,448
96
+ hyperpocket/server/auth/notion.py,sha256=CNOLVh2gA2xrVxXgqIAc18dpSTPwM98M-5rFGObBr3k,458
97
+ hyperpocket/server/auth/reddit.py,sha256=UloBQNEdhU1_eXaF8qVSQ5ivq5xtWINsHvBDGwgFSLM,443
98
+ hyperpocket/server/auth/slack.py,sha256=HSfru4_S3B_sEF_keCBLEsNyYeyc92eL5I2a-2TKf64,716
99
+ hyperpocket/server/auth/token.py,sha256=Q38Tt5ly2vLsR0dxjmnJNX2IqS-FkTsm94bO6e2wtYk,1700
100
+ hyperpocket/server/tool/__init__.py,sha256=khNLe3H2W7WXKQlHjXuuvd9R87eHOAZhDsQmjDcbYsg,210
101
+ hyperpocket/server/tool/wasm.py,sha256=N14Sg70cIqTCegmXkrf3HPEwZ_jjKkeiw9G6xJJc-NE,1705
102
+ hyperpocket/server/tool/dto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
+ hyperpocket/server/tool/dto/script.py,sha256=yRBFBz1T4TpssyEqMTEf_E1IdklY0twn1o-FDcXcjDw,847
104
+ hyperpocket/session/README.md,sha256=Wmh-qWJQ-40vU9hP5jNxuM33i0STNfaIjOecba7H-oc,1968
105
+ hyperpocket/session/__init__.py,sha256=-zdfZfXwR336liAYjwcZULIHg_72NxMMcDFz_RQGLGk,260
106
+ hyperpocket/session/in_memory.py,sha256=pD4ZEqsFqLmVOvsDbEcJkUN9nvlJgCXTGapH_PLljYk,3449
107
+ hyperpocket/session/interface.py,sha256=0o5IwXezaR5NKB6F9vfumLnrBSYv7JzY_FAvZB6uuvw,4879
108
+ hyperpocket/session/redis.py,sha256=6SHR2ZJ5E3RS-G_xzeh5ls_cPZ0NarPetlEuaAtqEAk,5467
109
+ hyperpocket/tool/README.md,sha256=vbHvP3fnfihq-H481MiSZEVJNhVoUu0djENb9tiy78c,3026
110
+ hyperpocket/tool/__init__.py,sha256=PlSewsugQ6x4BXszWvmTiW-MfVS87TALvWi4TcIgreY,346
111
+ hyperpocket/tool/tool.py,sha256=uP22MWN50nauFD9xkzc3jjGRO-nhxkYBaO1FVKiWu-Q,6778
112
+ hyperpocket/tool/function/README.md,sha256=6Y9a8FlFjEdbrVqF0NoQ1j34VoV8Zt6Pf9-xlLIHkTc,3676
113
+ hyperpocket/tool/function/__init__.py,sha256=elshxOWjKUCKSsSSkae8GB65bZ4xG1Xa4o2GCT5QbF4,259
114
+ hyperpocket/tool/function/annotation.py,sha256=UaeawAkX3QNAWLYHCQ-V5UNZyfxpOOvbYs3w5Q8bJq4,1018
115
+ hyperpocket/tool/function/tool.py,sha256=E9xND4Kv9nHGDGZEQTnQi9qEUmsnkwvl9J-k2LOJFKI,5953
116
+ hyperpocket/tool/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
+ hyperpocket/tool/tests/test_function_tool.py,sha256=If8M9DKkfh5voJyNU6Wdk-gqC9-ZpPEpinu8C7Mz2Zo,9569
118
+ hyperpocket/tool/tests/test_wasm_tool.py,sha256=bKcx-w__pa1Yr3ZwB8TMODn95xczH-_cRKCSUAPR8iA,2420
119
+ hyperpocket/tool/wasm/README.md,sha256=QeR7mI8RD6OJ2AXdZCpzNLBW0KUVgYQ0IqCc-wVXgFs,3896
120
+ hyperpocket/tool/wasm/__init__.py,sha256=KGOPPyA1CnbW-T9bgSpfIXf9952l_p5HJDhHGBb3b9o,71
121
+ hyperpocket/tool/wasm/browser.py,sha256=X2aw9sZy306dKDR0knqn4fGC6O1fw08M9t_zIkjUeWs,2083
122
+ hyperpocket/tool/wasm/invoker.py,sha256=u8ZfGW871IVBaG4_XbOQHfp7QYLS093QdwVa3HOL-_k,1520
123
+ hyperpocket/tool/wasm/script.py,sha256=b0il5tTF8bcMDcfR_ME8V2TppdnPDjNK2rB1GxeH5Pk,4251
124
+ hyperpocket/tool/wasm/tool.py,sha256=GPTxgXEV9DbBbW848TqzNHvVbwk2oMmI__kUhHsuLNw,5199
125
+ hyperpocket/tool/wasm/templates/__init__.py,sha256=cQ-uNsO418xvv54i8bD0IrqcAKUxMuyZoG3ShP72olw,949
126
+ hyperpocket/tool/wasm/templates/node.py,sha256=8ghVQGS9L3IJGdBB8waLK_ej4FS34dCA_bwPKjm8QSU,2782
127
+ hyperpocket/tool/wasm/templates/python.py,sha256=Gi_tn3QQZjolFpbhVDXHLoj4juRLTEGsq_A-iyvTyUk,2733
128
+ hyperpocket/util/__init__.py,sha256=V36_ztskLaKQxOhW2OhrhxRFn4QCxtX3jGjAT4lqNQE,35
129
+ hyperpocket/util/extract_func_param_desc_from_docstring.py,sha256=3bek0BRwDGdlKBATDAhBrSSqzdVshXKD02zNi6KvxO4,4067
130
+ hyperpocket/util/find_all_leaf_class_in_package.py,sha256=afGLqe5s7irOOPh7DI70v-utDL2a0vhNzHjtgSmDeZU,528
131
+ hyperpocket/util/find_all_subclass_in_package.py,sha256=CfsM5sWHHbFZD6M-jbJRN8Zo3m57R1E7FGg_V__HdFU,964
132
+ hyperpocket/util/flatten_json_schema.py,sha256=PXK6I1S2QDxwSGmUVEl5bbSPrjTa38GBllBQ8uKXJNQ,1587
133
+ hyperpocket/util/function_to_model.py,sha256=zPBrxtvfieJearmvJeMOeIGGLn1ymXNvL9PlMoXZbwA,2061
134
+ hyperpocket/util/get_objects_from_subpackage.py,sha256=Aq87PD_H57c2IjLS28Hf0Wu5vLVyoOtDoBvKzvQ1UPw,929
135
+ hyperpocket/util/json_schema_to_model.py,sha256=fmIdIAkWfh7qLLoUrK4gqBV1JCHGQgjiEA8rwbpqoMg,3406
136
+ hyperpocket-0.1.8.dist-info/METADATA,sha256=azLitNUYizbwI_VGTUmY2KvbQjtt-b6uaCkGeXq61dE,10170
137
+ hyperpocket-0.1.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
138
+ hyperpocket-0.1.8.dist-info/entry_points.txt,sha256=KpBleaYr0SaENXOa-dFvJ_cvFCHYFEQ4LMl11ShAcBI,61
139
+ hyperpocket-0.1.8.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 1.9.1
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ hyperpocket = hyperpocket.cli.__main__:cli