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.
- infra_mvp/base_client.py +29 -0
- infra_mvp/base_server.py +68 -0
- infra_mvp/monitoring/__init__.py +15 -0
- infra_mvp/monitoring/metrics.py +185 -0
- infra_mvp/stream/README.md +56 -0
- infra_mvp/stream/__init__.py +14 -0
- infra_mvp/stream/__main__.py +101 -0
- infra_mvp/stream/agents/demos/financial/chart_additions_plan.md +170 -0
- infra_mvp/stream/agents/demos/financial/portfolio_assistant_stream.json +1571 -0
- infra_mvp/stream/agents/reference/blocks/action.json +170 -0
- infra_mvp/stream/agents/reference/blocks/button.json +66 -0
- infra_mvp/stream/agents/reference/blocks/date.json +65 -0
- infra_mvp/stream/agents/reference/blocks/input_prompt.json +94 -0
- infra_mvp/stream/agents/reference/blocks/layout.json +288 -0
- infra_mvp/stream/agents/reference/blocks/markdown.json +344 -0
- infra_mvp/stream/agents/reference/blocks/slider.json +67 -0
- infra_mvp/stream/agents/reference/blocks/spinner.json +110 -0
- infra_mvp/stream/agents/reference/blocks/table.json +56 -0
- infra_mvp/stream/agents/reference/chat_dynamics/branching_test_stream.json +145 -0
- infra_mvp/stream/app.py +49 -0
- infra_mvp/stream/container.py +112 -0
- infra_mvp/stream/schemas/__init__.py +16 -0
- infra_mvp/stream/schemas/agent.py +24 -0
- infra_mvp/stream/schemas/interaction.py +28 -0
- infra_mvp/stream/schemas/session.py +30 -0
- infra_mvp/stream/server.py +321 -0
- infra_mvp/stream/services/__init__.py +12 -0
- infra_mvp/stream/services/agent_service.py +40 -0
- infra_mvp/stream/services/event_converter.py +83 -0
- infra_mvp/stream/services/session_service.py +247 -0
- yera/__init__.py +50 -1
- yera/agents/__init__.py +2 -0
- yera/agents/context.py +41 -0
- yera/agents/dataclasses.py +69 -0
- yera/agents/decorator.py +207 -0
- yera/agents/discovery.py +124 -0
- yera/agents/typing/__init__.py +0 -0
- yera/agents/typing/coerce.py +408 -0
- yera/agents/typing/utils.py +19 -0
- yera/agents/typing/validate.py +206 -0
- yera/cli.py +377 -0
- yera/config/__init__.py +1 -0
- yera/config/config_utils.py +164 -0
- yera/config/function_config.py +55 -0
- yera/config/logging.py +18 -0
- yera/config/tool_config.py +8 -0
- yera/config2/__init__.py +8 -0
- yera/config2/dataclasses.py +534 -0
- yera/config2/keyring.py +270 -0
- yera/config2/paths.py +28 -0
- yera/config2/read.py +113 -0
- yera/config2/setup.py +109 -0
- yera/config2/setup_handlers/__init__.py +1 -0
- yera/config2/setup_handlers/anthropic.py +126 -0
- yera/config2/setup_handlers/azure.py +236 -0
- yera/config2/setup_handlers/base.py +125 -0
- yera/config2/setup_handlers/llama_cpp.py +205 -0
- yera/config2/setup_handlers/ollama.py +157 -0
- yera/config2/setup_handlers/openai.py +137 -0
- yera/config2/write.py +87 -0
- yera/dsl/__init__.py +0 -0
- yera/dsl/functions.py +94 -0
- yera/dsl/struct.py +20 -0
- yera/dsl/workspace.py +79 -0
- yera/events/__init__.py +57 -0
- yera/events/blocks/__init__.py +68 -0
- yera/events/blocks/action.py +57 -0
- yera/events/blocks/bar_chart.py +92 -0
- yera/events/blocks/base/__init__.py +20 -0
- yera/events/blocks/base/base.py +166 -0
- yera/events/blocks/base/chart.py +288 -0
- yera/events/blocks/base/layout.py +111 -0
- yera/events/blocks/buttons.py +37 -0
- yera/events/blocks/columns.py +26 -0
- yera/events/blocks/container.py +24 -0
- yera/events/blocks/date_picker.py +50 -0
- yera/events/blocks/exit.py +39 -0
- yera/events/blocks/form.py +24 -0
- yera/events/blocks/input_echo.py +22 -0
- yera/events/blocks/input_request.py +31 -0
- yera/events/blocks/line_chart.py +97 -0
- yera/events/blocks/markdown.py +67 -0
- yera/events/blocks/slider.py +54 -0
- yera/events/blocks/spinner.py +55 -0
- yera/events/blocks/system_prompt.py +22 -0
- yera/events/blocks/table.py +291 -0
- yera/events/models/__init__.py +39 -0
- yera/events/models/block_data.py +112 -0
- yera/events/models/in_event.py +7 -0
- yera/events/models/out_event.py +75 -0
- yera/events/runtime.py +187 -0
- yera/events/stream.py +91 -0
- yera/models/__init__.py +0 -0
- yera/models/data_classes.py +20 -0
- yera/models/llm_atlas_proxy.py +44 -0
- yera/models/llm_context.py +99 -0
- yera/models/llm_interfaces/__init__.py +0 -0
- yera/models/llm_interfaces/anthropic.py +153 -0
- yera/models/llm_interfaces/aws_bedrock.py +14 -0
- yera/models/llm_interfaces/azure_openai.py +143 -0
- yera/models/llm_interfaces/base.py +26 -0
- yera/models/llm_interfaces/interface_registry.py +74 -0
- yera/models/llm_interfaces/llama_cpp.py +136 -0
- yera/models/llm_interfaces/mock.py +29 -0
- yera/models/llm_interfaces/ollama_interface.py +118 -0
- yera/models/llm_interfaces/open_ai.py +150 -0
- yera/models/llm_workspace.py +19 -0
- yera/models/model_atlas.py +139 -0
- yera/models/model_definition.py +38 -0
- yera/models/model_factory.py +33 -0
- yera/opaque/__init__.py +9 -0
- yera/opaque/base.py +20 -0
- yera/opaque/decorator.py +8 -0
- yera/opaque/markdown.py +57 -0
- yera/opaque/opaque_function.py +25 -0
- yera/tools/__init__.py +29 -0
- yera/tools/atlas_tool.py +20 -0
- yera/tools/base.py +24 -0
- yera/tools/decorated_tool.py +18 -0
- yera/tools/decorator.py +35 -0
- yera/tools/tool_atlas.py +51 -0
- yera/tools/tool_utils.py +361 -0
- yera/ui/dist/404.html +1 -0
- yera/ui/dist/__next.__PAGE__.txt +10 -0
- yera/ui/dist/__next._full.txt +23 -0
- yera/ui/dist/__next._head.txt +6 -0
- yera/ui/dist/__next._index.txt +5 -0
- yera/ui/dist/__next._tree.txt +7 -0
- yera/ui/dist/_next/static/T8WGYqDMoHDKKoHj0O3HK/_buildManifest.js +11 -0
- yera/ui/dist/_next/static/T8WGYqDMoHDKKoHj0O3HK/_clientMiddlewareManifest.json +1 -0
- yera/ui/dist/_next/static/T8WGYqDMoHDKKoHj0O3HK/_ssgManifest.js +1 -0
- yera/ui/dist/_next/static/chunks/4c4688e1ff21ad98.js +1 -0
- yera/ui/dist/_next/static/chunks/652cd53c27924d50.js +4 -0
- yera/ui/dist/_next/static/chunks/786d2107b51e8499.css +1 -0
- yera/ui/dist/_next/static/chunks/7de9141b1af425c3.js +1 -0
- yera/ui/dist/_next/static/chunks/87ef65064d3524c1.js +2 -0
- yera/ui/dist/_next/static/chunks/a6dad97d9634a72d.js +1 -0
- yera/ui/dist/_next/static/chunks/a6dad97d9634a72d.js.map +1 -0
- yera/ui/dist/_next/static/chunks/c4c79d5d0b280aeb.js +1 -0
- yera/ui/dist/_next/static/chunks/dc2d2a247505d66f.css +5 -0
- yera/ui/dist/_next/static/chunks/f773f714b55ec620.js +37 -0
- yera/ui/dist/_next/static/chunks/turbopack-98b3031e1b1dbc33.js +4 -0
- yera/ui/dist/_next/static/media/14e23f9b59180572-s.9c448f3c.woff2 +0 -0
- yera/ui/dist/_next/static/media/2a65768255d6b625-s.p.d19752fb.woff2 +0 -0
- yera/ui/dist/_next/static/media/2b2eb4836d2dad95-s.f36de3af.woff2 +0 -0
- yera/ui/dist/_next/static/media/31183d9fd602dc89-s.c4ff9b73.woff2 +0 -0
- yera/ui/dist/_next/static/media/3fcb63a1ac6a562e-s.2f77a576.woff2 +0 -0
- yera/ui/dist/_next/static/media/45ec8de98929b0f6-s.81056204.woff2 +0 -0
- yera/ui/dist/_next/static/media/4fa387ec64143e14-s.c1fdd6c2.woff2 +0 -0
- yera/ui/dist/_next/static/media/65c558afe41e89d6-s.e2c8389a.woff2 +0 -0
- yera/ui/dist/_next/static/media/67add6cc0f54b8cf-s.8ce53448.woff2 +0 -0
- yera/ui/dist/_next/static/media/7178b3e590c64307-s.b97b3418.woff2 +0 -0
- yera/ui/dist/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2 +0 -0
- yera/ui/dist/_next/static/media/8a480f0b521d4e75-s.8e0177b5.woff2 +0 -0
- yera/ui/dist/_next/static/media/a8ff2d5d0ccb0d12-s.fc5b72a7.woff2 +0 -0
- yera/ui/dist/_next/static/media/aae5f0be330e13db-s.p.853e26d6.woff2 +0 -0
- yera/ui/dist/_next/static/media/b11a6ccf4a3edec7-s.2113d282.woff2 +0 -0
- yera/ui/dist/_next/static/media/b49b0d9b851e4899-s.4f3fa681.woff2 +0 -0
- yera/ui/dist/_next/static/media/bbc41e54d2fcbd21-s.799d8ef8.woff2 +0 -0
- yera/ui/dist/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2 +0 -0
- yera/ui/dist/_next/static/media/favicon.0b3bf435.ico +0 -0
- yera/ui/dist/_not-found/__next._full.txt +14 -0
- yera/ui/dist/_not-found/__next._head.txt +6 -0
- yera/ui/dist/_not-found/__next._index.txt +5 -0
- yera/ui/dist/_not-found/__next._not-found.__PAGE__.txt +5 -0
- yera/ui/dist/_not-found/__next._not-found.txt +4 -0
- yera/ui/dist/_not-found/__next._tree.txt +2 -0
- yera/ui/dist/_not-found.html +1 -0
- yera/ui/dist/_not-found.txt +14 -0
- yera/ui/dist/agent-icon.svg +3 -0
- yera/ui/dist/favicon.ico +0 -0
- yera/ui/dist/file.svg +1 -0
- yera/ui/dist/globe.svg +1 -0
- yera/ui/dist/index.html +1 -0
- yera/ui/dist/index.txt +23 -0
- yera/ui/dist/logo/full_logo.png +0 -0
- yera/ui/dist/logo/rune_logo.png +0 -0
- yera/ui/dist/logo/rune_logo_borderless.png +0 -0
- yera/ui/dist/logo/text_logo.png +0 -0
- yera/ui/dist/next.svg +1 -0
- yera/ui/dist/send.png +0 -0
- yera/ui/dist/send_single.png +0 -0
- yera/ui/dist/vercel.svg +1 -0
- yera/ui/dist/window.svg +1 -0
- yera/utils/__init__.py +1 -0
- yera/utils/path_utils.py +38 -0
- yera-0.2.1.dist-info/METADATA +65 -0
- yera-0.2.1.dist-info/RECORD +190 -0
- {yera-0.1.1.dist-info → yera-0.2.1.dist-info}/WHEEL +1 -1
- yera-0.2.1.dist-info/entry_points.txt +2 -0
- yera-0.1.1.dist-info/METADATA +0 -11
- yera-0.1.1.dist-info/RECORD +0 -4
yera/tools/tool_utils.py
ADDED
|
@@ -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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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 @@
|
|
|
1
|
+
[]
|
|
@@ -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)}]);
|