synapse-orch-ai 1.8.4 → 1.8.5
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.
- package/backend/core/orchestration/engine.py +12 -6
- package/backend/core/orchestration/runner.py +70 -0
- package/backend/core/react_engine.py +59 -26
- package/backend/core/routes/api_v1.py +17 -6
- package/backend/core/routes/chat.py +3 -0
- package/backend/core/routes/orchestrations.py +15 -66
- package/frontend-build/.next/BUILD_ID +1 -1
- package/frontend-build/.next/build-manifest.json +3 -3
- package/frontend-build/.next/prerender-manifest.json +3 -3
- package/frontend-build/.next/server/app/_global-error.html +1 -1
- package/frontend-build/.next/server/app/_global-error.rsc +1 -1
- package/frontend-build/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.html +1 -1
- package/frontend-build/.next/server/app/_not-found.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/frontend-build/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/frontend-build/.next/server/app/index.html +1 -1
- package/frontend-build/.next/server/app/index.rsc +1 -1
- package/frontend-build/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/frontend-build/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/frontend-build/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/frontend-build/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/frontend-build/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/frontend-build/.next/server/app/login.html +1 -1
- package/frontend-build/.next/server/app/login.rsc +1 -1
- package/frontend-build/.next/server/app/login.segments/_full.segment.rsc +1 -1
- package/frontend-build/.next/server/app/login.segments/_head.segment.rsc +1 -1
- package/frontend-build/.next/server/app/login.segments/_index.segment.rsc +1 -1
- package/frontend-build/.next/server/app/login.segments/_tree.segment.rsc +1 -1
- package/frontend-build/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
- package/frontend-build/.next/server/app/login.segments/login.segment.rsc +1 -1
- package/frontend-build/.next/server/middleware-build-manifest.js +3 -3
- package/frontend-build/.next/server/pages/404.html +1 -1
- package/frontend-build/.next/server/pages/500.html +1 -1
- package/frontend-build/.next/server/server-reference-manifest.js +1 -1
- package/frontend-build/.next/server/server-reference-manifest.json +1 -1
- package/package.json +1 -1
- /package/frontend-build/.next/static/{WjvzoOqaNaXuc-wYMNArI → ZnXvTR9Wo4Qc1Vgx3ou4L}/_buildManifest.js +0 -0
- /package/frontend-build/.next/static/{WjvzoOqaNaXuc-wYMNArI → ZnXvTR9Wo4Qc1Vgx3ou4L}/_clientMiddlewareManifest.js +0 -0
- /package/frontend-build/.next/static/{WjvzoOqaNaXuc-wYMNArI → ZnXvTR9Wo4Qc1Vgx3ou4L}/_ssgManifest.js +0 -0
|
@@ -182,12 +182,18 @@ class OrchestrationEngine:
|
|
|
182
182
|
# This properly interrupts a stuck session.call_tool() inside
|
|
183
183
|
# the executor when the step deadline is reached.
|
|
184
184
|
#
|
|
185
|
-
# IMPORTANT:
|
|
186
|
-
#
|
|
187
|
-
#
|
|
188
|
-
#
|
|
189
|
-
#
|
|
190
|
-
#
|
|
185
|
+
# IMPORTANT: this scope stays open across the yields below, so
|
|
186
|
+
# this generator must be advanced — and closed — from a single
|
|
187
|
+
# task, or anyio raises "cancel scope in a different task".
|
|
188
|
+
# core.orchestration.runner is what guarantees that; every
|
|
189
|
+
# entry point runs us through it (issue #356). Do not drive
|
|
190
|
+
# the engine directly from a task-per-pull consumer.
|
|
191
|
+
#
|
|
192
|
+
# human_input_required is still yielded outside the scope: the
|
|
193
|
+
# generator is abandoned at that point, and Python's GC
|
|
194
|
+
# finalizer runs aclose() on abandoned async generators in a
|
|
195
|
+
# NEW asyncio Task. We break out of the scope cleanly (in the
|
|
196
|
+
# current task) and yield the event below.
|
|
191
197
|
human_input_event: dict | None = None
|
|
192
198
|
try:
|
|
193
199
|
with anyio.fail_after(step_timeout):
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""Single-task runner for orchestration engine streams.
|
|
2
|
+
|
|
3
|
+
The engine holds anyio cancel scopes across `yield`s (the per-step timeout at
|
|
4
|
+
`engine._execute_loop`). anyio binds a cancel scope to the task that entered
|
|
5
|
+
it, so the engine's generator must be advanced -- and closed -- from ONE task,
|
|
6
|
+
whatever the HTTP layer does with the events. A consumer that pulls each event
|
|
7
|
+
in a fresh task raises "Attempted to exit cancel scope in a different task"
|
|
8
|
+
(issue #356).
|
|
9
|
+
|
|
10
|
+
Every orchestration entry point goes through here, so the launch path can no
|
|
11
|
+
longer change how the engine is driven.
|
|
12
|
+
"""
|
|
13
|
+
import asyncio
|
|
14
|
+
from typing import AsyncGenerator
|
|
15
|
+
|
|
16
|
+
# Live in-process runs, keyed by run_id. The cancel endpoint cancels the task
|
|
17
|
+
# to interrupt an in-progress await; the run-status endpoint consults it to
|
|
18
|
+
# report a run that is still inside its first step (no checkpoint yet).
|
|
19
|
+
_active_tasks: dict[str, asyncio.Task] = {}
|
|
20
|
+
|
|
21
|
+
# Queue marker meaning "the engine generator is exhausted".
|
|
22
|
+
SENTINEL = object()
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def spawn_engine_run(agen, run_id: str) -> tuple[asyncio.Task, asyncio.Queue]:
|
|
26
|
+
"""Advance `agen` in one dedicated task, returning (task, queue).
|
|
27
|
+
|
|
28
|
+
The task is detached: it runs to completion even if nobody drains the
|
|
29
|
+
queue, so a client disconnect never kills a run. Only the cancel endpoint
|
|
30
|
+
stops it.
|
|
31
|
+
"""
|
|
32
|
+
queue: asyncio.Queue = asyncio.Queue()
|
|
33
|
+
|
|
34
|
+
async def _pump():
|
|
35
|
+
try:
|
|
36
|
+
async for event in agen:
|
|
37
|
+
await queue.put(event)
|
|
38
|
+
# Yield so the SSE consumer can dequeue and flush this event
|
|
39
|
+
# to the HTTP response before the next one is enqueued.
|
|
40
|
+
await asyncio.sleep(0)
|
|
41
|
+
except asyncio.CancelledError:
|
|
42
|
+
await queue.put({"type": "orchestration_error", "error": "Cancelled"})
|
|
43
|
+
except FileNotFoundError:
|
|
44
|
+
await queue.put({"type": "orchestration_error", "error": "Run not found"})
|
|
45
|
+
except Exception as e:
|
|
46
|
+
await queue.put({"type": "orchestration_error", "error": str(e)})
|
|
47
|
+
finally:
|
|
48
|
+
_active_tasks.pop(run_id, None)
|
|
49
|
+
print(f"DEBUG SSE QUEUE: sentinel sent for '{run_id}', stream closing", flush=True)
|
|
50
|
+
await queue.put(SENTINEL)
|
|
51
|
+
|
|
52
|
+
task = asyncio.create_task(_pump())
|
|
53
|
+
_active_tasks[run_id] = task
|
|
54
|
+
return task, queue
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
async def stream_engine_events(agen, run_id: str) -> AsyncGenerator[dict, None]:
|
|
58
|
+
"""Yield the engine's event dicts while a dedicated task advances it.
|
|
59
|
+
|
|
60
|
+
Deliberately does NOT cancel that task on close: the run is detached, so
|
|
61
|
+
abandoning this generator (client disconnect, GC finalization) must leave
|
|
62
|
+
it running -- the run still checkpoints and stays cancellable and
|
|
63
|
+
resumable.
|
|
64
|
+
"""
|
|
65
|
+
_task, queue = spawn_engine_run(agen, run_id)
|
|
66
|
+
while True:
|
|
67
|
+
event = await queue.get()
|
|
68
|
+
if event is SENTINEL:
|
|
69
|
+
return
|
|
70
|
+
yield event
|
|
@@ -4,6 +4,7 @@ Yields structured event dicts that callers can handle differently
|
|
|
4
4
|
(collect for sync response, or stream as SSE).
|
|
5
5
|
"""
|
|
6
6
|
import asyncio
|
|
7
|
+
import contextlib
|
|
7
8
|
import json
|
|
8
9
|
import sys
|
|
9
10
|
import time
|
|
@@ -47,50 +48,74 @@ MAX_TURNS = 30
|
|
|
47
48
|
# Heartbeats are yielded as the raw SSE string, so endpoints can pass them
|
|
48
49
|
# straight through; real events remain dicts (`isinstance(item, str)`
|
|
49
50
|
# distinguishes them).
|
|
51
|
+
#
|
|
52
|
+
# The source is advanced by a single dedicated pump task rather than a fresh
|
|
53
|
+
# task per pull. anyio binds a cancel scope to the task that entered it, so a
|
|
54
|
+
# source holding a scope across a yield (the orchestration engine's per-step
|
|
55
|
+
# timeout) must be advanced — and closed — from one task. See issue #356.
|
|
50
56
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
51
57
|
SSE_HEARTBEAT = ": ping\n\n"
|
|
52
58
|
|
|
53
59
|
|
|
60
|
+
class _StreamEnd:
|
|
61
|
+
"""Sentinel handing the source's terminal state back to the consumer."""
|
|
62
|
+
__slots__ = ("error",)
|
|
63
|
+
|
|
64
|
+
def __init__(self, error):
|
|
65
|
+
self.error = error
|
|
66
|
+
|
|
67
|
+
|
|
54
68
|
async def iter_with_heartbeat(agen, interval: float = 10.0):
|
|
55
69
|
"""Yield items from `agen`, injecting `SSE_HEARTBEAT` whenever no item
|
|
56
70
|
arrives within `interval` seconds.
|
|
57
71
|
|
|
58
72
|
The underlying generator is never cancelled on a heartbeat timeout — only
|
|
59
73
|
when the consumer stops early (e.g. a client disconnect closes this
|
|
60
|
-
generator), in which case the
|
|
61
|
-
closed in the finally block.
|
|
74
|
+
generator), in which case the pump is cancelled and closes the source.
|
|
62
75
|
"""
|
|
63
|
-
|
|
64
|
-
|
|
76
|
+
queue: asyncio.Queue = asyncio.Queue(maxsize=1) # maxsize=1 keeps backpressure
|
|
77
|
+
|
|
78
|
+
async def _pump():
|
|
79
|
+
# Advances `agen` in THIS single task, so a cancel scope the source
|
|
80
|
+
# holds across a yield is never exited from another task — and
|
|
81
|
+
# aclose() below runs in that scope's host task too.
|
|
82
|
+
try:
|
|
83
|
+
async for item in agen:
|
|
84
|
+
await queue.put(item)
|
|
85
|
+
await queue.put(_StreamEnd(None))
|
|
86
|
+
except asyncio.CancelledError:
|
|
87
|
+
raise
|
|
88
|
+
except BaseException as exc:
|
|
89
|
+
with contextlib.suppress(BaseException):
|
|
90
|
+
await queue.put(_StreamEnd(exc))
|
|
91
|
+
finally:
|
|
92
|
+
aclose = getattr(agen, "aclose", None)
|
|
93
|
+
if aclose is not None:
|
|
94
|
+
with contextlib.suppress(BaseException):
|
|
95
|
+
await aclose()
|
|
96
|
+
|
|
97
|
+
pump = asyncio.ensure_future(_pump())
|
|
65
98
|
try:
|
|
66
99
|
while True:
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
100
|
+
try:
|
|
101
|
+
item = await asyncio.wait_for(queue.get(), timeout=interval)
|
|
102
|
+
except asyncio.TimeoutError:
|
|
103
|
+
if pump.done():
|
|
104
|
+
# Source ended without a sentinel — it was cancelled.
|
|
105
|
+
return
|
|
71
106
|
# No event within the interval — keep the stream warm.
|
|
72
107
|
yield SSE_HEARTBEAT
|
|
73
108
|
continue
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
item = task.result()
|
|
78
|
-
except StopAsyncIteration:
|
|
109
|
+
if isinstance(item, _StreamEnd):
|
|
110
|
+
if item.error is not None:
|
|
111
|
+
raise item.error
|
|
79
112
|
return
|
|
80
113
|
yield item
|
|
81
114
|
finally:
|
|
82
|
-
if
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
except BaseException:
|
|
87
|
-
pass
|
|
88
|
-
aclose = getattr(agen, "aclose", None)
|
|
89
|
-
if aclose is not None:
|
|
90
|
-
try:
|
|
91
|
-
await aclose()
|
|
92
|
-
except BaseException:
|
|
93
|
-
pass
|
|
115
|
+
if not pump.done():
|
|
116
|
+
pump.cancel()
|
|
117
|
+
with contextlib.suppress(BaseException):
|
|
118
|
+
await pump
|
|
94
119
|
|
|
95
120
|
|
|
96
121
|
async def drain_queue_with_heartbeat(queue, sentinel, interval: float = 10.0):
|
|
@@ -1591,6 +1616,7 @@ async def run_react_loop(request, server_module):
|
|
|
1591
1616
|
from core.routes.orchestrations import load_orchestrations
|
|
1592
1617
|
from core.models_orchestration import Orchestration
|
|
1593
1618
|
from core.orchestration.engine import OrchestrationEngine
|
|
1619
|
+
from core.orchestration.runner import stream_engine_events
|
|
1594
1620
|
|
|
1595
1621
|
orchs = load_orchestrations()
|
|
1596
1622
|
orch_data = next((o for o in orchs if o["id"] == orch_id), None)
|
|
@@ -1598,7 +1624,14 @@ async def run_react_loop(request, server_module):
|
|
|
1598
1624
|
orch = Orchestration.model_validate(orch_data)
|
|
1599
1625
|
engine = OrchestrationEngine(orch, server_module)
|
|
1600
1626
|
run_id = f"run_{orch_id}_{int(time.time() * 1000)}"
|
|
1601
|
-
|
|
1627
|
+
# Route through the shared runner, exactly as the editor's
|
|
1628
|
+
# run endpoint does: the engine holds anyio cancel scopes
|
|
1629
|
+
# across yields, so it must be advanced from a single task
|
|
1630
|
+
# no matter how the SSE layer consumes us (issue #356).
|
|
1631
|
+
# It also registers the run for cancel/reconnect.
|
|
1632
|
+
async for event in stream_engine_events(
|
|
1633
|
+
engine.run(user_message, run_id, session_id=session_id), run_id
|
|
1634
|
+
):
|
|
1602
1635
|
yield event
|
|
1603
1636
|
return
|
|
1604
1637
|
else:
|
|
@@ -113,8 +113,9 @@ async def v1_chat(body: V1ChatRequest, key_record: dict = Depends(require_api_ke
|
|
|
113
113
|
etype = event.get("type", "")
|
|
114
114
|
if etype == "final":
|
|
115
115
|
final_event = event
|
|
116
|
-
elif etype
|
|
117
|
-
|
|
116
|
+
elif etype in ("error", "orchestration_error"):
|
|
117
|
+
# orchestration_error is what an orchestrator agent fails with.
|
|
118
|
+
error_msg = event.get("message") or event.get("error") or "Unknown error"
|
|
118
119
|
except Exception as exc:
|
|
119
120
|
log.exception("[v1/chat] Unhandled error for session=%s", chat_request.session_id)
|
|
120
121
|
raise HTTPException(status_code=500, detail="An internal error occurred. Check server logs for details.")
|
|
@@ -204,8 +205,10 @@ async def v1_chat_stream(body: V1ChatRequest, key_record: dict = Depends(require
|
|
|
204
205
|
})
|
|
205
206
|
yield _format_sse_event({"type": "done"})
|
|
206
207
|
|
|
207
|
-
elif etype
|
|
208
|
-
|
|
208
|
+
elif etype in ("error", "orchestration_error"):
|
|
209
|
+
# orchestration_error is what an orchestrator agent fails with.
|
|
210
|
+
log.error("[v1/chat/stream] Agent error session=%s: %s", chat_request.session_id,
|
|
211
|
+
event.get("message") or event.get("error"))
|
|
209
212
|
yield _format_sse_event({"type": "error", "message": "The agent encountered an error processing your request."})
|
|
210
213
|
|
|
211
214
|
await asyncio.sleep(0)
|
|
@@ -314,8 +317,11 @@ async def v1_orchestration_run_stream(
|
|
|
314
317
|
|
|
315
318
|
async def event_stream():
|
|
316
319
|
from core.react_engine import iter_with_heartbeat
|
|
320
|
+
from core.orchestration.runner import stream_engine_events
|
|
317
321
|
try:
|
|
318
|
-
async for event in iter_with_heartbeat(
|
|
322
|
+
async for event in iter_with_heartbeat(
|
|
323
|
+
stream_engine_events(engine.run(body.message, run_id), run_id)
|
|
324
|
+
):
|
|
319
325
|
# Heartbeat comments are yielded as raw SSE strings — pass through.
|
|
320
326
|
if isinstance(event, str):
|
|
321
327
|
yield event
|
|
@@ -436,8 +442,13 @@ async def v1_orchestration_resume_stream(
|
|
|
436
442
|
|
|
437
443
|
async def event_stream():
|
|
438
444
|
from core.react_engine import iter_with_heartbeat
|
|
445
|
+
from core.orchestration.runner import stream_engine_events
|
|
439
446
|
try:
|
|
440
|
-
async for event in iter_with_heartbeat(
|
|
447
|
+
async for event in iter_with_heartbeat(
|
|
448
|
+
stream_engine_events(
|
|
449
|
+
OrchestrationEngine.resume(run_id, human_response, _server), run_id
|
|
450
|
+
)
|
|
451
|
+
):
|
|
441
452
|
# Heartbeat comments are yielded as raw SSE strings — pass through.
|
|
442
453
|
if isinstance(event, str):
|
|
443
454
|
yield event
|
|
@@ -39,6 +39,9 @@ async def chat(request: ChatRequest):
|
|
|
39
39
|
final_event = event
|
|
40
40
|
elif event["type"] == "error":
|
|
41
41
|
return ChatResponse(response=event["message"], intent="chat", data=None, tool_name=None)
|
|
42
|
+
elif event["type"] == "orchestration_error":
|
|
43
|
+
# An orchestrator agent failed — same outcome, different event shape.
|
|
44
|
+
return ChatResponse(response=event["error"], intent="chat", data=None, tool_name=None)
|
|
42
45
|
|
|
43
46
|
if not final_event:
|
|
44
47
|
return ChatResponse(response="I completed the requested actions.", intent="chat", data=None, tool_name=None)
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Orchestration management endpoints: CRUD, run, human-input, cancel.
|
|
3
3
|
"""
|
|
4
|
-
import asyncio
|
|
5
4
|
import os
|
|
6
5
|
import json
|
|
7
6
|
import time
|
|
@@ -13,14 +12,14 @@ from core.models_orchestration import Orchestration
|
|
|
13
12
|
from core.config import DATA_DIR
|
|
14
13
|
from core.json_store import JsonStore
|
|
15
14
|
from core.react_engine import drain_queue_with_heartbeat
|
|
15
|
+
# Registry of active run tasks (for mid-step cancellation), owned by the runner
|
|
16
|
+
# so non-route callers can register runs too.
|
|
17
|
+
from core.orchestration.runner import SENTINEL, _active_tasks, spawn_engine_run
|
|
16
18
|
|
|
17
19
|
router = APIRouter()
|
|
18
20
|
|
|
19
21
|
_orch_store = JsonStore(os.path.join(DATA_DIR, "orchestrations.json"), cache_ttl=2.0)
|
|
20
22
|
|
|
21
|
-
# In-memory registry of active run tasks (for mid-step cancellation)
|
|
22
|
-
_active_tasks: dict[str, asyncio.Task] = {}
|
|
23
|
-
|
|
24
23
|
|
|
25
24
|
def load_orchestrations() -> list[dict]:
|
|
26
25
|
return _orch_store.load()
|
|
@@ -153,36 +152,14 @@ async def run_orchestration(orch_id: str, request: Request):
|
|
|
153
152
|
from core.orchestration.engine import OrchestrationEngine
|
|
154
153
|
engine = OrchestrationEngine(orch, server_module)
|
|
155
154
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
async def _run_engine():
|
|
160
|
-
try:
|
|
161
|
-
async for event in engine.run(user_input, run_id):
|
|
162
|
-
etype = event.get("type", "")
|
|
163
|
-
if etype not in ("chunk", "thinking", "token_usage"):
|
|
164
|
-
print(f"DEBUG SSE QUEUE: → {etype} step={event.get('orch_step_id', '')}", flush=True)
|
|
165
|
-
await queue.put(event)
|
|
166
|
-
# Yield so event_stream() can dequeue and flush this event
|
|
167
|
-
# to the HTTP response before the next event is enqueued.
|
|
168
|
-
await asyncio.sleep(0)
|
|
169
|
-
except asyncio.CancelledError:
|
|
170
|
-
await queue.put({"type": "orchestration_error", "error": "Cancelled"})
|
|
171
|
-
except Exception as e:
|
|
172
|
-
await queue.put({"type": "orchestration_error", "error": str(e)})
|
|
173
|
-
finally:
|
|
174
|
-
_active_tasks.pop(run_id, None)
|
|
175
|
-
print(f"DEBUG SSE QUEUE: sentinel sent, stream closing", flush=True)
|
|
176
|
-
await queue.put(_SENTINEL)
|
|
177
|
-
|
|
178
|
-
# Engine runs independently of SSE consumer; store task for cancellation
|
|
179
|
-
task = asyncio.create_task(_run_engine())
|
|
180
|
-
_active_tasks[run_id] = task
|
|
155
|
+
# Engine runs in its own task, independently of the SSE consumer, and is
|
|
156
|
+
# registered for cancellation.
|
|
157
|
+
_task, queue = spawn_engine_run(engine.run(user_input, run_id), run_id)
|
|
181
158
|
|
|
182
159
|
async def event_stream():
|
|
183
160
|
# Heartbeats keep the stream warm during long LLM/compaction steps so a
|
|
184
161
|
# busy-but-alive run is not mistaken for a dropped connection.
|
|
185
|
-
async for chunk in drain_queue_with_heartbeat(queue,
|
|
162
|
+
async for chunk in drain_queue_with_heartbeat(queue, SENTINEL):
|
|
186
163
|
yield chunk
|
|
187
164
|
yield "data: {\"type\": \"done\"}\n\n"
|
|
188
165
|
|
|
@@ -222,29 +199,14 @@ async def resume_failed_run(run_id: str, request: Request):
|
|
|
222
199
|
|
|
223
200
|
from core.orchestration.engine import OrchestrationEngine
|
|
224
201
|
|
|
225
|
-
queue
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
async def _run_engine():
|
|
229
|
-
try:
|
|
230
|
-
async for event in OrchestrationEngine.resume_failed(run_id, server_module):
|
|
231
|
-
await queue.put(event)
|
|
232
|
-
await asyncio.sleep(0)
|
|
233
|
-
except FileNotFoundError:
|
|
234
|
-
await queue.put({"type": "orchestration_error", "error": "Run not found"})
|
|
235
|
-
except Exception as e:
|
|
236
|
-
await queue.put({"type": "orchestration_error", "error": str(e)})
|
|
237
|
-
finally:
|
|
238
|
-
_active_tasks.pop(run_id, None)
|
|
239
|
-
await queue.put(_SENTINEL)
|
|
240
|
-
|
|
241
|
-
task = asyncio.create_task(_run_engine())
|
|
242
|
-
_active_tasks[run_id] = task
|
|
202
|
+
_task, queue = spawn_engine_run(
|
|
203
|
+
OrchestrationEngine.resume_failed(run_id, server_module), run_id
|
|
204
|
+
)
|
|
243
205
|
|
|
244
206
|
async def event_stream():
|
|
245
207
|
# Heartbeats keep the stream warm during long LLM/compaction steps so a
|
|
246
208
|
# busy-but-alive run is not mistaken for a dropped connection.
|
|
247
|
-
async for chunk in drain_queue_with_heartbeat(queue,
|
|
209
|
+
async for chunk in drain_queue_with_heartbeat(queue, SENTINEL):
|
|
248
210
|
yield chunk
|
|
249
211
|
yield "data: {\"type\": \"done\"}\n\n"
|
|
250
212
|
|
|
@@ -341,27 +303,14 @@ async def submit_human_input(run_id: str, request: Request):
|
|
|
341
303
|
# --- V1 in-process path (unchanged) ---
|
|
342
304
|
from core.orchestration.engine import OrchestrationEngine
|
|
343
305
|
|
|
344
|
-
queue
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
async def _run_engine():
|
|
348
|
-
try:
|
|
349
|
-
async for event in OrchestrationEngine.resume(run_id, human_response, server_module):
|
|
350
|
-
await queue.put(event)
|
|
351
|
-
await asyncio.sleep(0)
|
|
352
|
-
except FileNotFoundError:
|
|
353
|
-
await queue.put({"type": "orchestration_error", "error": "Run not found"})
|
|
354
|
-
except Exception as e:
|
|
355
|
-
await queue.put({"type": "orchestration_error", "error": str(e)})
|
|
356
|
-
finally:
|
|
357
|
-
await queue.put(_SENTINEL)
|
|
358
|
-
|
|
359
|
-
asyncio.create_task(_run_engine())
|
|
306
|
+
_task, queue = spawn_engine_run(
|
|
307
|
+
OrchestrationEngine.resume(run_id, human_response, server_module), run_id
|
|
308
|
+
)
|
|
360
309
|
|
|
361
310
|
async def event_stream():
|
|
362
311
|
# Heartbeats keep the stream warm during long LLM/compaction steps so a
|
|
363
312
|
# busy-but-alive run is not mistaken for a dropped connection.
|
|
364
|
-
async for chunk in drain_queue_with_heartbeat(queue,
|
|
313
|
+
async for chunk in drain_queue_with_heartbeat(queue, SENTINEL):
|
|
365
314
|
yield chunk
|
|
366
315
|
yield "data: {\"type\": \"done\"}\n\n"
|
|
367
316
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
ZnXvTR9Wo4Qc1Vgx3ou4L
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/ZnXvTR9Wo4Qc1Vgx3ou4L/_buildManifest.js",
|
|
11
|
+
"static/ZnXvTR9Wo4Qc1Vgx3ou4L/_ssgManifest.js",
|
|
12
|
+
"static/ZnXvTR9Wo4Qc1Vgx3ou4L/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0qmh881w772ef.js",
|
|
@@ -131,8 +131,8 @@
|
|
|
131
131
|
"dynamicRoutes": {},
|
|
132
132
|
"notFoundRoutes": [],
|
|
133
133
|
"preview": {
|
|
134
|
-
"previewModeId": "
|
|
135
|
-
"previewModeSigningKey": "
|
|
136
|
-
"previewModeEncryptionKey": "
|
|
134
|
+
"previewModeId": "5e52ec84fea3070b589dc14e6fe972e4",
|
|
135
|
+
"previewModeSigningKey": "6ec214fafb7348cd91559964c61e345a08a526800e4817b9731c402cf737edc6",
|
|
136
|
+
"previewModeEncryptionKey": "9221f0ed8ae3da80f3d5e8a17ab822c445b6cd1524dc5f297a98926ac7f1fc43"
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0qmh881w772ef.js"/><script src="/_next/static/chunks/02i7dfk78~t~2.js" async=""></script><script src="/_next/static/chunks/0c7h~x4_chf35.js" async=""></script><script src="/_next/static/chunks/00xhsd~k-wxkl.js" async=""></script><script src="/_next/static/chunks/turbopack-09lztqg9--eu..js" async=""></script><script src="/_next/static/chunks/01xlw8hd842-c.js" async=""></script><script src="/_next/static/chunks/0m92kh92cfh_..js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0qmh881w772ef.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/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$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\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0qmh881w772ef.js"/><script src="/_next/static/chunks/02i7dfk78~t~2.js" async=""></script><script src="/_next/static/chunks/0c7h~x4_chf35.js" async=""></script><script src="/_next/static/chunks/00xhsd~k-wxkl.js" async=""></script><script src="/_next/static/chunks/turbopack-09lztqg9--eu..js" async=""></script><script src="/_next/static/chunks/01xlw8hd842-c.js" async=""></script><script src="/_next/static/chunks/0m92kh92cfh_..js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0qmh881w772ef.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/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"default\"]\n3:I[37457,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"default\"]\n4:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"ViewportBoundary\"]\na:I[97367,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/_next/static/chunks/01xlw8hd842-c.js\",\"/_next/static/chunks/0m92kh92cfh_..js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$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\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"ZnXvTR9Wo4Qc1Vgx3ou4L\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"6:null\nb:[]\n"])</script></body></html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[97367,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"ViewportBoundary"]
|
|
7
7
|
a:I[97367,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"MetadataBoundary"]
|
|
8
8
|
c:I[68027,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ZnXvTR9Wo4Qc1Vgx3ou4L"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[97367,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"OutletBoundary"]
|
|
3
3
|
3:"$Sreact.suspense"
|
|
4
|
-
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
4
|
+
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ZnXvTR9Wo4Qc1Vgx3ou4L"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[97367,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"ViewportBoundary"]
|
|
7
7
|
a:I[97367,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"MetadataBoundary"]
|
|
8
8
|
c:I[68027,["/_next/static/chunks/01xlw8hd842-c.js","/_next/static/chunks/0m92kh92cfh_..js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$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":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ZnXvTR9Wo4Qc1Vgx3ou4L"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|