yera 0.1.1__py3-none-any.whl → 0.2.1__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 (192) hide show
  1. infra_mvp/base_client.py +29 -0
  2. infra_mvp/base_server.py +68 -0
  3. infra_mvp/monitoring/__init__.py +15 -0
  4. infra_mvp/monitoring/metrics.py +185 -0
  5. infra_mvp/stream/README.md +56 -0
  6. infra_mvp/stream/__init__.py +14 -0
  7. infra_mvp/stream/__main__.py +101 -0
  8. infra_mvp/stream/agents/demos/financial/chart_additions_plan.md +170 -0
  9. infra_mvp/stream/agents/demos/financial/portfolio_assistant_stream.json +1571 -0
  10. infra_mvp/stream/agents/reference/blocks/action.json +170 -0
  11. infra_mvp/stream/agents/reference/blocks/button.json +66 -0
  12. infra_mvp/stream/agents/reference/blocks/date.json +65 -0
  13. infra_mvp/stream/agents/reference/blocks/input_prompt.json +94 -0
  14. infra_mvp/stream/agents/reference/blocks/layout.json +288 -0
  15. infra_mvp/stream/agents/reference/blocks/markdown.json +344 -0
  16. infra_mvp/stream/agents/reference/blocks/slider.json +67 -0
  17. infra_mvp/stream/agents/reference/blocks/spinner.json +110 -0
  18. infra_mvp/stream/agents/reference/blocks/table.json +56 -0
  19. infra_mvp/stream/agents/reference/chat_dynamics/branching_test_stream.json +145 -0
  20. infra_mvp/stream/app.py +49 -0
  21. infra_mvp/stream/container.py +112 -0
  22. infra_mvp/stream/schemas/__init__.py +16 -0
  23. infra_mvp/stream/schemas/agent.py +24 -0
  24. infra_mvp/stream/schemas/interaction.py +28 -0
  25. infra_mvp/stream/schemas/session.py +30 -0
  26. infra_mvp/stream/server.py +321 -0
  27. infra_mvp/stream/services/__init__.py +12 -0
  28. infra_mvp/stream/services/agent_service.py +40 -0
  29. infra_mvp/stream/services/event_converter.py +83 -0
  30. infra_mvp/stream/services/session_service.py +247 -0
  31. yera/__init__.py +50 -1
  32. yera/agents/__init__.py +2 -0
  33. yera/agents/context.py +41 -0
  34. yera/agents/dataclasses.py +69 -0
  35. yera/agents/decorator.py +207 -0
  36. yera/agents/discovery.py +124 -0
  37. yera/agents/typing/__init__.py +0 -0
  38. yera/agents/typing/coerce.py +408 -0
  39. yera/agents/typing/utils.py +19 -0
  40. yera/agents/typing/validate.py +206 -0
  41. yera/cli.py +377 -0
  42. yera/config/__init__.py +1 -0
  43. yera/config/config_utils.py +164 -0
  44. yera/config/function_config.py +55 -0
  45. yera/config/logging.py +18 -0
  46. yera/config/tool_config.py +8 -0
  47. yera/config2/__init__.py +8 -0
  48. yera/config2/dataclasses.py +534 -0
  49. yera/config2/keyring.py +270 -0
  50. yera/config2/paths.py +28 -0
  51. yera/config2/read.py +113 -0
  52. yera/config2/setup.py +109 -0
  53. yera/config2/setup_handlers/__init__.py +1 -0
  54. yera/config2/setup_handlers/anthropic.py +126 -0
  55. yera/config2/setup_handlers/azure.py +236 -0
  56. yera/config2/setup_handlers/base.py +125 -0
  57. yera/config2/setup_handlers/llama_cpp.py +205 -0
  58. yera/config2/setup_handlers/ollama.py +157 -0
  59. yera/config2/setup_handlers/openai.py +137 -0
  60. yera/config2/write.py +87 -0
  61. yera/dsl/__init__.py +0 -0
  62. yera/dsl/functions.py +94 -0
  63. yera/dsl/struct.py +20 -0
  64. yera/dsl/workspace.py +79 -0
  65. yera/events/__init__.py +57 -0
  66. yera/events/blocks/__init__.py +68 -0
  67. yera/events/blocks/action.py +57 -0
  68. yera/events/blocks/bar_chart.py +92 -0
  69. yera/events/blocks/base/__init__.py +20 -0
  70. yera/events/blocks/base/base.py +166 -0
  71. yera/events/blocks/base/chart.py +288 -0
  72. yera/events/blocks/base/layout.py +111 -0
  73. yera/events/blocks/buttons.py +37 -0
  74. yera/events/blocks/columns.py +26 -0
  75. yera/events/blocks/container.py +24 -0
  76. yera/events/blocks/date_picker.py +50 -0
  77. yera/events/blocks/exit.py +39 -0
  78. yera/events/blocks/form.py +24 -0
  79. yera/events/blocks/input_echo.py +22 -0
  80. yera/events/blocks/input_request.py +31 -0
  81. yera/events/blocks/line_chart.py +97 -0
  82. yera/events/blocks/markdown.py +67 -0
  83. yera/events/blocks/slider.py +54 -0
  84. yera/events/blocks/spinner.py +55 -0
  85. yera/events/blocks/system_prompt.py +22 -0
  86. yera/events/blocks/table.py +291 -0
  87. yera/events/models/__init__.py +39 -0
  88. yera/events/models/block_data.py +112 -0
  89. yera/events/models/in_event.py +7 -0
  90. yera/events/models/out_event.py +75 -0
  91. yera/events/runtime.py +187 -0
  92. yera/events/stream.py +91 -0
  93. yera/models/__init__.py +0 -0
  94. yera/models/data_classes.py +20 -0
  95. yera/models/llm_atlas_proxy.py +44 -0
  96. yera/models/llm_context.py +99 -0
  97. yera/models/llm_interfaces/__init__.py +0 -0
  98. yera/models/llm_interfaces/anthropic.py +153 -0
  99. yera/models/llm_interfaces/aws_bedrock.py +14 -0
  100. yera/models/llm_interfaces/azure_openai.py +143 -0
  101. yera/models/llm_interfaces/base.py +26 -0
  102. yera/models/llm_interfaces/interface_registry.py +74 -0
  103. yera/models/llm_interfaces/llama_cpp.py +136 -0
  104. yera/models/llm_interfaces/mock.py +29 -0
  105. yera/models/llm_interfaces/ollama_interface.py +118 -0
  106. yera/models/llm_interfaces/open_ai.py +150 -0
  107. yera/models/llm_workspace.py +19 -0
  108. yera/models/model_atlas.py +139 -0
  109. yera/models/model_definition.py +38 -0
  110. yera/models/model_factory.py +33 -0
  111. yera/opaque/__init__.py +9 -0
  112. yera/opaque/base.py +20 -0
  113. yera/opaque/decorator.py +8 -0
  114. yera/opaque/markdown.py +57 -0
  115. yera/opaque/opaque_function.py +25 -0
  116. yera/tools/__init__.py +29 -0
  117. yera/tools/atlas_tool.py +20 -0
  118. yera/tools/base.py +24 -0
  119. yera/tools/decorated_tool.py +18 -0
  120. yera/tools/decorator.py +35 -0
  121. yera/tools/tool_atlas.py +51 -0
  122. yera/tools/tool_utils.py +361 -0
  123. yera/ui/dist/404.html +1 -0
  124. yera/ui/dist/__next.__PAGE__.txt +10 -0
  125. yera/ui/dist/__next._full.txt +23 -0
  126. yera/ui/dist/__next._head.txt +6 -0
  127. yera/ui/dist/__next._index.txt +5 -0
  128. yera/ui/dist/__next._tree.txt +7 -0
  129. yera/ui/dist/_next/static/T8WGYqDMoHDKKoHj0O3HK/_buildManifest.js +11 -0
  130. yera/ui/dist/_next/static/T8WGYqDMoHDKKoHj0O3HK/_clientMiddlewareManifest.json +1 -0
  131. yera/ui/dist/_next/static/T8WGYqDMoHDKKoHj0O3HK/_ssgManifest.js +1 -0
  132. yera/ui/dist/_next/static/chunks/4c4688e1ff21ad98.js +1 -0
  133. yera/ui/dist/_next/static/chunks/652cd53c27924d50.js +4 -0
  134. yera/ui/dist/_next/static/chunks/786d2107b51e8499.css +1 -0
  135. yera/ui/dist/_next/static/chunks/7de9141b1af425c3.js +1 -0
  136. yera/ui/dist/_next/static/chunks/87ef65064d3524c1.js +2 -0
  137. yera/ui/dist/_next/static/chunks/a6dad97d9634a72d.js +1 -0
  138. yera/ui/dist/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
  139. yera/ui/dist/_next/static/chunks/c4c79d5d0b280aeb.js +1 -0
  140. yera/ui/dist/_next/static/chunks/dc2d2a247505d66f.css +5 -0
  141. yera/ui/dist/_next/static/chunks/f773f714b55ec620.js +37 -0
  142. yera/ui/dist/_next/static/chunks/turbopack-98b3031e1b1dbc33.js +4 -0
  143. yera/ui/dist/_next/static/media/14e23f9b59180572-s.9c448f3c.woff2 +0 -0
  144. yera/ui/dist/_next/static/media/2a65768255d6b625-s.p.d19752fb.woff2 +0 -0
  145. yera/ui/dist/_next/static/media/2b2eb4836d2dad95-s.f36de3af.woff2 +0 -0
  146. yera/ui/dist/_next/static/media/31183d9fd602dc89-s.c4ff9b73.woff2 +0 -0
  147. yera/ui/dist/_next/static/media/3fcb63a1ac6a562e-s.2f77a576.woff2 +0 -0
  148. yera/ui/dist/_next/static/media/45ec8de98929b0f6-s.81056204.woff2 +0 -0
  149. yera/ui/dist/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
  150. yera/ui/dist/_next/static/media/65c558afe41e89d6-s.e2c8389a.woff2 +0 -0
  151. yera/ui/dist/_next/static/media/67add6cc0f54b8cf-s.8ce53448.woff2 +0 -0
  152. yera/ui/dist/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
  153. yera/ui/dist/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
  154. yera/ui/dist/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
  155. yera/ui/dist/_next/static/media/a8ff2d5d0ccb0d12-s.fc5b72a7.woff2 +0 -0
  156. yera/ui/dist/_next/static/media/aae5f0be330e13db-s.p.853e26d6.woff2 +0 -0
  157. yera/ui/dist/_next/static/media/b11a6ccf4a3edec7-s.2113d282.woff2 +0 -0
  158. yera/ui/dist/_next/static/media/b49b0d9b851e4899-s.4f3fa681.woff2 +0 -0
  159. yera/ui/dist/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
  160. yera/ui/dist/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
  161. yera/ui/dist/_next/static/media/favicon.0b3bf435.ico +0 -0
  162. yera/ui/dist/_not-found/__next._full.txt +14 -0
  163. yera/ui/dist/_not-found/__next._head.txt +6 -0
  164. yera/ui/dist/_not-found/__next._index.txt +5 -0
  165. yera/ui/dist/_not-found/__next._not-found.__PAGE__.txt +5 -0
  166. yera/ui/dist/_not-found/__next._not-found.txt +4 -0
  167. yera/ui/dist/_not-found/__next._tree.txt +2 -0
  168. yera/ui/dist/_not-found.html +1 -0
  169. yera/ui/dist/_not-found.txt +14 -0
  170. yera/ui/dist/agent-icon.svg +3 -0
  171. yera/ui/dist/favicon.ico +0 -0
  172. yera/ui/dist/file.svg +1 -0
  173. yera/ui/dist/globe.svg +1 -0
  174. yera/ui/dist/index.html +1 -0
  175. yera/ui/dist/index.txt +23 -0
  176. yera/ui/dist/logo/full_logo.png +0 -0
  177. yera/ui/dist/logo/rune_logo.png +0 -0
  178. yera/ui/dist/logo/rune_logo_borderless.png +0 -0
  179. yera/ui/dist/logo/text_logo.png +0 -0
  180. yera/ui/dist/next.svg +1 -0
  181. yera/ui/dist/send.png +0 -0
  182. yera/ui/dist/send_single.png +0 -0
  183. yera/ui/dist/vercel.svg +1 -0
  184. yera/ui/dist/window.svg +1 -0
  185. yera/utils/__init__.py +1 -0
  186. yera/utils/path_utils.py +38 -0
  187. yera-0.2.1.dist-info/METADATA +65 -0
  188. yera-0.2.1.dist-info/RECORD +190 -0
  189. {yera-0.1.1.dist-info → yera-0.2.1.dist-info}/WHEEL +1 -1
  190. yera-0.2.1.dist-info/entry_points.txt +2 -0
  191. yera-0.1.1.dist-info/METADATA +0 -11
  192. yera-0.1.1.dist-info/RECORD +0 -4
@@ -0,0 +1,361 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ import os
5
+ import textwrap
6
+ from collections.abc import Callable
7
+ from pathlib import Path
8
+ from typing import Any
9
+
10
+ import tomllib
11
+
12
+ from yera.config.config_utils import extract_function_config
13
+ from yera.config.function_config import FunctionConfig, ParameterInfo, ParameterKind
14
+ from yera.config.tool_config import ToolConfig
15
+
16
+ TOOLS_CFG_FILENAME = "tools_cfg.toml"
17
+
18
+ logger = logging.getLogger(__name__)
19
+
20
+
21
+ def _yera_home() -> Path:
22
+ home = Path(os.getenv("YERA_HOME"))
23
+ if not home.exists():
24
+ home = Path.home() / ".yera"
25
+ home.mkdir(parents=True, exist_ok=True)
26
+ return home
27
+
28
+
29
+ def _tools_cfg_path() -> Path:
30
+ return _yera_home() / TOOLS_CFG_FILENAME
31
+
32
+
33
+ def extract_tool_config(func: Callable, security_rank: int) -> ToolConfig:
34
+ return ToolConfig(
35
+ function_config=extract_function_config(func),
36
+ security_rank=security_rank,
37
+ )
38
+
39
+
40
+ def reconstruct_tool_function(tool_config: ToolConfig) -> Callable:
41
+ """Reconstruct a callable function from a ToolConfig."""
42
+ fn_cfg = tool_config.function_config
43
+ fn_name = fn_cfg.name
44
+
45
+ # Build parameter list from ParameterInfo objects
46
+ params = []
47
+ for param_info in fn_cfg.parameters:
48
+ param_str = _build_parameter_string(param_info)
49
+ params.append(param_str)
50
+
51
+ params_str = ", ".join(params)
52
+ ret_typ = fn_cfg.output_signature
53
+ body = fn_cfg.content
54
+ fn_source = f"def {fn_name}({params_str}) -> {ret_typ}:\n" + textwrap.indent(
55
+ body + "\n", " "
56
+ )
57
+
58
+ namespace: dict[str, Any] = {}
59
+ try:
60
+ exec(fn_source, {}, namespace) # noqa: S102 - local dev execution only, not prod infra
61
+ except Exception as e:
62
+ raise ValueError(f"Failed to reconstruct function '{fn_name}': {e}") from e
63
+ return namespace[fn_name]
64
+
65
+
66
+ def _build_parameter_string(param_info: ParameterInfo) -> str:
67
+ """Build a parameter string from ParameterInfo.
68
+
69
+ Handles all parameter kinds:
70
+ - POSITIONAL_OR_KEYWORD: name: type = default
71
+ - VAR_POSITIONAL: *name: type
72
+ - KEYWORD_ONLY: *, name: type = default
73
+ - VAR_KEYWORD: **name: type
74
+ """
75
+ name = param_info.name
76
+ type_annotation = param_info.type_annotation
77
+ kind = param_info.kind
78
+ default = param_info.default
79
+
80
+ match kind:
81
+ case ParameterKind.VAR_POSITIONAL:
82
+ return f"*{name}: {type_annotation}"
83
+ case ParameterKind.VAR_KEYWORD:
84
+ return f"**{name}: {type_annotation}"
85
+ case ParameterKind.KEYWORD_ONLY:
86
+ if default is not None:
87
+ default_str = _format_default_value(default)
88
+ return f"{name}: {type_annotation} = {default_str}"
89
+ return f"{name}: {type_annotation}"
90
+ case ParameterKind.POSITIONAL_OR_KEYWORD:
91
+ if default is not None:
92
+ default_str = _format_default_value(default)
93
+ return f"{name}: {type_annotation} = {default_str}"
94
+ return f"{name}: {type_annotation}"
95
+
96
+
97
+ def _format_default_value(default_val: Any) -> str:
98
+ """Format a default value for use in function signature.
99
+
100
+ Handles different types of default values with proper escaping.
101
+ """
102
+ match default_val:
103
+ case str():
104
+ # Escape quotes in string defaults
105
+ escaped = default_val.replace('"', '\\"')
106
+ return f'"{escaped}"'
107
+ case None:
108
+ return "None"
109
+ case bool() | int() | float():
110
+ return str(default_val)
111
+ case _:
112
+ return repr(default_val)
113
+
114
+
115
+ def save_tool(
116
+ func: Callable, security_rank: int | None = None, cfg_path: Path | str | None = None
117
+ ) -> None:
118
+ """Save a tool to the tools configuration file."""
119
+ if security_rank is None:
120
+ raise ValueError("security_rank is required")
121
+ tool_cfg = extract_tool_config(func, security_rank=security_rank)
122
+ fn_cfg = tool_cfg.function_config
123
+
124
+ # Determine the TOML section path for atlas addressing
125
+ if fn_cfg.module_path:
126
+ tool_path = f"{fn_cfg.module_path}.{fn_cfg.name}"
127
+ else:
128
+ tool_path = fn_cfg.name
129
+
130
+ if cfg_path is None:
131
+ path = _tools_cfg_path()
132
+ else:
133
+ path = Path(cfg_path)
134
+
135
+ # Load existing tools as flat structure
136
+ existing_tools: dict[str, ToolConfig] = {}
137
+ if path.exists():
138
+ existing_tools = load_tools_config(path)
139
+
140
+ # Upsert: add new tool or update existing one
141
+ existing_tools[tool_path] = tool_cfg
142
+
143
+ # Write all tools back to TOML
144
+ _write_tools_cfg(existing_tools, path)
145
+
146
+
147
+ def load_tools_config(cfg_path: Path | str | None = None) -> dict[str, ToolConfig]:
148
+ """Load tools configuration from TOML format."""
149
+ if cfg_path is None:
150
+ path = _tools_cfg_path()
151
+ else:
152
+ path = Path(cfg_path)
153
+
154
+ if not path.exists():
155
+ return {}
156
+
157
+ with open(path, "rb") as f:
158
+ data = tomllib.load(f)
159
+
160
+ tools_section = data.get("tools", {})
161
+ if not isinstance(tools_section, dict):
162
+ return {}
163
+
164
+ # Flatten the nested structure into dot-notation keys
165
+ flattened = _flatten_dict(tools_section)
166
+
167
+ # Parse each tool configuration
168
+ result: dict[str, ToolConfig] = {}
169
+ for path, tool_data in flattened.items():
170
+ if _is_tool_config(tool_data):
171
+ tool_cfg = _parse_tool_config(tool_data, path)
172
+ if tool_cfg is not None:
173
+ result[path] = tool_cfg
174
+
175
+ return result
176
+
177
+
178
+ def _flatten_dict(nested_dict: dict) -> dict[str, Any]:
179
+ """Flatten a nested dictionary using dot notation for keys.
180
+
181
+ Only flattens the structure, not the tool configuration dictionaries themselves.
182
+ """
183
+ result = {}
184
+ # Iterative stack-based approach avoids recursion depth issues
185
+ stack = [(nested_dict, "")]
186
+
187
+ while stack:
188
+ current_dict, current_key = stack.pop()
189
+
190
+ for key, value in current_dict.items():
191
+ new_key = f"{current_key}.{key}" if current_key else key
192
+
193
+ if isinstance(value, dict):
194
+ # Check if this is a tool config (has security_rank)
195
+ if "security_rank" in value:
196
+ # This is a tool config, keep it as-is
197
+ result[new_key] = value
198
+ else:
199
+ # This is a nested section, add to stack for processing
200
+ stack.append((value, new_key))
201
+ else:
202
+ # This is a leaf value (shouldn't happen in our case)
203
+ result[new_key] = value
204
+
205
+ return result
206
+
207
+
208
+ def _is_tool_config(value: Any) -> bool:
209
+ """Check if a value represents a tool configuration."""
210
+ return isinstance(value, dict) and "security_rank" in value
211
+
212
+
213
+ def _parse_tool_config(tool_data: dict, path: str) -> ToolConfig | None:
214
+ """Parse a single tool configuration from TOML data."""
215
+ try:
216
+ raw_data = tool_data.copy()
217
+ security_rank = raw_data.pop("security_rank")
218
+
219
+ # Parse parameters from TOML inline table array
220
+ parameters_data = raw_data.get("parameters", [])
221
+ raw_data["parameters"] = _parse_parameters_list(parameters_data)
222
+
223
+ function_config = FunctionConfig.model_validate(raw_data)
224
+ return ToolConfig(function_config=function_config, security_rank=security_rank)
225
+
226
+ except (KeyError, ValueError, TypeError) as e:
227
+ logger.warning("Skipping malformed tool '%s': %s", path, e)
228
+ return None
229
+
230
+
231
+ def _parse_parameters_list(parameters_data) -> list:
232
+ """Parse parameters list from native TOML inline table array to ParameterInfo objects."""
233
+ from yera.config.function_config import ParameterInfo, ParameterKind
234
+
235
+ parameters = []
236
+ for param_data in parameters_data:
237
+ # Parse default value - handle "None" string conversion back to None
238
+ default_val = param_data.get("default")
239
+ if default_val is not None:
240
+ default_val = _deserialize_default_from_toml(default_val)
241
+
242
+ param_info = ParameterInfo(
243
+ name=param_data["name"],
244
+ type_annotation=param_data["type_annotation"],
245
+ kind=ParameterKind(param_data["kind"]),
246
+ default=default_val,
247
+ )
248
+ parameters.append(param_info)
249
+
250
+ return parameters
251
+
252
+
253
+ def _deserialize_default_from_toml(value: Any) -> Any:
254
+ """Deserialize a default value from native TOML format.
255
+
256
+ Converts "None" string back to None, handles other types.
257
+ """
258
+ if value == "None":
259
+ return None
260
+
261
+ if not isinstance(value, str):
262
+ return value
263
+ s = value
264
+
265
+ # JSON for complex types
266
+ if s.startswith(("{", "[")):
267
+ try:
268
+ import json
269
+
270
+ return json.loads(s)
271
+ except Exception:
272
+ return s
273
+
274
+ # Booleans
275
+ s_lower = s.lower()
276
+ if s_lower in ("true", "false"):
277
+ return s_lower == "true"
278
+
279
+ # Numbers (int or float)
280
+ try:
281
+ return float(s) if "." in s else int(s)
282
+ except ValueError:
283
+ return s
284
+
285
+
286
+ def _toml_escape(value: str) -> str:
287
+ """Escape a string for use in TOML format.
288
+
289
+ Handles backslashes, newlines, and quotes properly.
290
+ """
291
+ # Escape backslashes first, then quotes, then newlines
292
+ return value.replace("\\", "\\\\").replace('"', '\\"').replace("\n", "\\n")
293
+
294
+
295
+ def _write_tools_cfg(tools: dict[str, ToolConfig], path: Path) -> None:
296
+ """Write tools configuration to TOML format using native TOML inline table arrays.
297
+
298
+ Serializes the new ParameterInfo structure to native TOML format.
299
+ """
300
+ lines: list[str] = ["[tools]"]
301
+
302
+ for section_path, tool_cfg in tools.items():
303
+ lines.append(f"[tools.{section_path}]")
304
+ fn_cfg = tool_cfg.function_config
305
+
306
+ # Basic function properties
307
+ # Use basic strings with escaping for content
308
+ escaped_content = _toml_escape(fn_cfg.content)
309
+ lines.append(f'content = "{escaped_content}"')
310
+ lines.append(f'name = "{_toml_escape(fn_cfg.name)}"')
311
+ lines.append(f'output_signature = "{_toml_escape(fn_cfg.output_signature)}"')
312
+
313
+ # Add module_path if present
314
+ if fn_cfg.module_path:
315
+ lines.append(f'module_path = "{_toml_escape(fn_cfg.module_path)}"')
316
+
317
+ lines.append(f"security_rank = {tool_cfg.security_rank}")
318
+
319
+ # Serialize parameters as inline table array
320
+ if fn_cfg.parameters:
321
+ lines.append("parameters = [")
322
+ param_lines = []
323
+ for param_info in fn_cfg.parameters:
324
+ # Convert None to "None" string for TOML compatibility
325
+ default_str = _serialize_default_for_toml(param_info.default)
326
+ escaped_default = _toml_escape(default_str)
327
+
328
+ param_dict = f'{{name = "{_toml_escape(param_info.name)}", type_annotation = "{_toml_escape(param_info.type_annotation)}", kind = "{param_info.kind.value}", default = "{escaped_default}"}}'
329
+ param_lines.append(param_dict)
330
+
331
+ # Join parameters with commas and add to lines
332
+ lines.append(",\n".join(param_lines))
333
+ lines.append("]")
334
+
335
+ lines.append("")
336
+
337
+ text = "\n".join(lines).rstrip() + "\n"
338
+ path.parent.mkdir(parents=True, exist_ok=True)
339
+ with open(path, "w", encoding="utf-8") as f:
340
+ f.write(text)
341
+
342
+
343
+ def _serialize_default_for_toml(default_val: Any) -> str:
344
+ """Serialize a default value for native TOML format.
345
+
346
+ Converts Python values to TOML-compatible strings.
347
+ None becomes "None" string for TOML compatibility.
348
+ """
349
+ match default_val:
350
+ case None:
351
+ return "None"
352
+ case str():
353
+ return default_val
354
+ case bool() | int() | float():
355
+ return str(default_val)
356
+ case list() | dict():
357
+ import json
358
+
359
+ return json.dumps(default_val)
360
+ case _:
361
+ return repr(default_val)
yera/ui/dist/404.html ADDED
@@ -0,0 +1 @@
1
+ <!DOCTYPE html><!--T8WGYqDMoHDKKoHj0O3HK--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/dc2d2a247505d66f.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/4c4688e1ff21ad98.js"/><script src="/_next/static/chunks/652cd53c27924d50.js" async=""></script><script src="/_next/static/chunks/7de9141b1af425c3.js" async=""></script><script src="/_next/static/chunks/87ef65064d3524c1.js" async=""></script><script src="/_next/static/chunks/turbopack-98b3031e1b1dbc33.js" async=""></script><script src="/_next/static/chunks/c4c79d5d0b280aeb.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>Create Next App</title><meta name="description" content="Generated by create next app"/><link rel="icon" href="/favicon.ico?favicon.0b3bf435.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/a6dad97d9634a72d.js" noModule=""></script></head><body class="playfair_display_81cff969-module__ajI0HG__variable arimo_da2556ab-module__BHeKPW__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/4c4688e1ff21ad98.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n7:I[97367,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"ViewportBoundary\"]\n9:I[97367,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"MetadataBoundary\"]\nb:I[68027,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"default\"]\n:HL[\"/_next/static/chunks/dc2d2a247505d66f.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"T8WGYqDMoHDKKoHj0O3HK\",\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/dc2d2a247505d66f.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"playfair_display_81cff969-module__ajI0HG__variable arimo_da2556ab-module__BHeKPW__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L7\",null,{\"children\":\"$L8\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$La\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$b\",\"$undefined\"],\"S\":true}\n"])</script><script>self.__next_f.push([1,"8:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"c:I[27201,[\"/_next/static/chunks/c4c79d5d0b280aeb.js\"],\"IconMark\"]\n6:null\na:[[\"$\",\"title\",\"0\",{\"children\":\"Create Next App\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Generated by create next app\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Lc\",\"3\",{}]]\n"])</script></body></html>
@@ -0,0 +1,10 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[47257,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"ClientPageRoot"]
3
+ 3:I[31713,["/_next/static/chunks/f773f714b55ec620.js"],"default"]
4
+ 6:I[97367,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"OutletBoundary"]
5
+ 7:"$Sreact.suspense"
6
+ :HL["/_next/static/chunks/786d2107b51e8499.css","style"]
7
+ 0:{"buildId":"T8WGYqDMoHDKKoHj0O3HK","rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/786d2107b51e8499.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/f773f714b55ec620.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"loading":null,"isPartial":false}
8
+ 4:{}
9
+ 5:"$0:rsc:props:children:0:props:serverProvidedParams:params"
10
+ 8:null
@@ -0,0 +1,23 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[39756,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"default"]
3
+ 3:I[37457,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"default"]
4
+ 4:I[47257,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"ClientPageRoot"]
5
+ 5:I[31713,["/_next/static/chunks/f773f714b55ec620.js"],"default"]
6
+ 8:I[97367,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"OutletBoundary"]
7
+ 9:"$Sreact.suspense"
8
+ b:I[97367,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"ViewportBoundary"]
9
+ d:I[97367,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"MetadataBoundary"]
10
+ f:I[68027,[],"default"]
11
+ :HL["/_next/static/chunks/dc2d2a247505d66f.css","style"]
12
+ :HL["/_next/static/media/2a65768255d6b625-s.p.d19752fb.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
13
+ :HL["/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
14
+ :HL["/_next/static/media/aae5f0be330e13db-s.p.853e26d6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
15
+ :HL["/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
16
+ :HL["/_next/static/chunks/786d2107b51e8499.css","style"]
17
+ 0:{"P":null,"b":"T8WGYqDMoHDKKoHj0O3HK","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/dc2d2a247505d66f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"playfair_display_81cff969-module__ajI0HG__variable arimo_da2556ab-module__BHeKPW__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@6","$@7"]}}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/786d2107b51e8499.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/f773f714b55ec620.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,false]},null,false,false],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[]],"S":true}
18
+ 6:{}
19
+ 7:"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params"
20
+ c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
21
+ 10:I[27201,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"IconMark"]
22
+ a:null
23
+ e:[["$","title","0",{"children":"Create Next App"}],["$","meta","1",{"name":"description","content":"Generated by create next app"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0b3bf435.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L10","3",{}]]
@@ -0,0 +1,6 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[97367,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"ViewportBoundary"]
3
+ 3:I[97367,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"MetadataBoundary"]
4
+ 4:"$Sreact.suspense"
5
+ 5:I[27201,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"IconMark"]
6
+ 0:{"buildId":"T8WGYqDMoHDKKoHj0O3HK","rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Create Next App"}],["$","meta","1",{"name":"description","content":"Generated by create next app"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0b3bf435.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"loading":null,"isPartial":false}
@@ -0,0 +1,5 @@
1
+ 1:"$Sreact.fragment"
2
+ 2:I[39756,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"default"]
3
+ 3:I[37457,["/_next/static/chunks/c4c79d5d0b280aeb.js"],"default"]
4
+ :HL["/_next/static/chunks/dc2d2a247505d66f.css","style"]
5
+ 0:{"buildId":"T8WGYqDMoHDKKoHj0O3HK","rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/dc2d2a247505d66f.css","precedence":"next"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"playfair_display_81cff969-module__ajI0HG__variable arimo_da2556ab-module__BHeKPW__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased","children":["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]]}],"loading":null,"isPartial":false}
@@ -0,0 +1,7 @@
1
+ :HL["/_next/static/chunks/dc2d2a247505d66f.css","style"]
2
+ :HL["/_next/static/media/2a65768255d6b625-s.p.d19752fb.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
3
+ :HL["/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
4
+ :HL["/_next/static/media/aae5f0be330e13db-s.p.853e26d6.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
5
+ :HL["/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
6
+ :HL["/_next/static/chunks/786d2107b51e8499.css","style"]
7
+ 0:{"buildId":"T8WGYqDMoHDKKoHj0O3HK","tree":{"name":"","paramType":null,"paramKey":"","hasRuntimePrefetch":false,"slots":{"children":{"name":"__PAGE__","paramType":null,"paramKey":"__PAGE__","hasRuntimePrefetch":false,"slots":null,"isRootLayout":false}},"isRootLayout":true},"staleTime":300}
@@ -0,0 +1,11 @@
1
+ self.__BUILD_MANIFEST = {
2
+ "__rewrites": {
3
+ "afterFiles": [],
4
+ "beforeFiles": [],
5
+ "fallback": []
6
+ },
7
+ "sortedPages": [
8
+ "/_app",
9
+ "/_error"
10
+ ]
11
+ };self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB()
@@ -0,0 +1 @@
1
+ self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()
@@ -0,0 +1 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,35451,(e,t,r)=>{var n={229:function(e){var t,r,n,o=e.exports={};function i(){throw Error("setTimeout has not been defined")}function u(){throw Error("clearTimeout has not been defined")}try{t="function"==typeof setTimeout?setTimeout:i}catch(e){t=i}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(e){r=u}function l(e){if(t===setTimeout)return setTimeout(e,0);if((t===i||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}var s=[],c=!1,a=-1;function f(){c&&n&&(c=!1,n.length?s=n.concat(s):a=-1,s.length&&d())}function d(){if(!c){var e=l(f);c=!0;for(var t=s.length;t;){for(n=s,s=[];++a<t;)n&&n[a].run();a=-1,t=s.length}n=null,c=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function h(){}o.nextTick=function(e){var t=Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];s.push(new p(e,t)),1!==s.length||c||l(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=h,o.addListener=h,o.once=h,o.off=h,o.removeListener=h,o.removeAllListeners=h,o.emit=h,o.prependListener=h,o.prependOnceListener=h,o.listeners=function(e){return[]},o.binding=function(e){throw Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw Error("process.chdir is not supported")},o.umask=function(){return 0}}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={exports:{}},u=!0;try{n[e](r,r.exports,i),u=!1}finally{u&&delete o[e]}return r.exports}i.ab="/ROOT/node_modules/next/dist/compiled/process/",t.exports=i(229)},47167,(e,t,r)=>{"use strict";var n,o;t.exports=(null==(n=e.g.process)?void 0:n.env)&&"object"==typeof(null==(o=e.g.process)?void 0:o.env)?e.g.process:e.r(35451)},45689,(e,t,r)=>{"use strict";var n=Symbol.for("react.transitional.element");function o(e,t,r){var o=null;if(void 0!==r&&(o=""+r),void 0!==t.key&&(o=""+t.key),"key"in t)for(var i in r={},t)"key"!==i&&(r[i]=t[i]);else r=t;return{$$typeof:n,type:e,key:o,ref:void 0!==(t=r.ref)?t:null,props:r}}r.Fragment=Symbol.for("react.fragment"),r.jsx=o,r.jsxs=o},18050,(e,t,r)=>{"use strict";t.exports=e.r(45689)},90317,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={bindSnapshot:function(){return c},createAsyncLocalStorage:function(){return s},createSnapshot:function(){return a}};for(var o in n)Object.defineProperty(r,o,{enumerable:!0,get:n[o]});let i=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class u{disable(){throw i}getStore(){}run(){throw i}exit(){throw i}enterWith(){throw i}static bind(e){return e}}let l="u">typeof globalThis&&globalThis.AsyncLocalStorage;function s(){return l?new l:new u}function c(e){return l?l.bind(e):u.bind(e)}function a(){return l?l.snapshot():function(e,...t){return e(...t)}}},42344,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"workAsyncStorageInstance",{enumerable:!0,get:function(){return n}});let n=(0,e.r(90317).createAsyncLocalStorage)()},63599,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"workAsyncStorage",{enumerable:!0,get:function(){return n.workAsyncStorageInstance}});let n=e.r(42344)},12354,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"HandleISRError",{enumerable:!0,get:function(){return o}});let n="u"<typeof window?e.r(63599).workAsyncStorage:void 0;function o({error:e}){if(n){let t=n.getStore();if(t?.isStaticGeneration)throw e&&console.error(e),e}return null}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},68027,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return l}});let n=e.r(18050),o=e.r(12354),i={fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},u={fontSize:"14px",fontWeight:400,lineHeight:"28px",margin:"0 8px"},l=function({error:e}){let t=e?.digest;return(0,n.jsxs)("html",{id:"__next_error__",children:[(0,n.jsx)("head",{}),(0,n.jsxs)("body",{children:[(0,n.jsx)(o.HandleISRError,{error:e}),(0,n.jsx)("div",{style:i,children:(0,n.jsxs)("div",{children:[(0,n.jsxs)("h2",{style:u,children:["Application error: a ",t?"server":"client","-side exception has occurred while loading ",window.location.hostname," (see the"," ",t?"server logs":"browser console"," for more information)."]}),t?(0,n.jsx)("p",{style:u,children:`Digest: ${t}`}):null]})})]})]})};("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)}]);