@jetcrab/pi-desk 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/package.json +1 -1
  2. package/src/server/l4_foundation/model-settings/l4-model-settings-store.ts +3 -5
  3. package/src/server/l4_foundation/pi/l4-pi-session-catalog.ts +22 -63
  4. package/src/server/l4_foundation/pi/l4-pi-session-discovery.ts +139 -0
  5. package/src/server/l4_foundation/pi/l4-pi-session-history-catalog.ts +36 -7
  6. package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
  7. package/temp/build/pi-desk/release/.next/build-manifest.json +2 -2
  8. package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
  9. package/temp/build/pi-desk/release/.next/required-server-files.js +2 -2
  10. package/temp/build/pi-desk/release/.next/required-server-files.json +2 -2
  11. package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  12. package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
  13. package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
  14. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  15. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  16. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  17. package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
  19. package/temp/build/pi-desk/release/.next/server/app/api/model-catalog/list/route.js +1 -1
  20. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/get/route.js +1 -1
  21. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/replace/route.js +1 -1
  22. package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/get/route.js +1 -1
  23. package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/replace/route.js +1 -1
  24. package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
  25. package/temp/build/pi-desk/release/.next/server/app/page.js +1 -1
  26. package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
  27. package/temp/build/pi-desk/release/.next/server/chunks/25406.js +6 -6
  28. package/temp/build/pi-desk/release/.next/server/chunks/3108.js +3 -3
  29. package/temp/build/pi-desk/release/.next/server/chunks/78262.js +3 -3
  30. package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
  31. package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
  32. package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
  33. package/temp/build/pi-desk/release/.next/static/chunks/app/{page-a659ca2be4d0f904.js → page-39b146293b6eb488.js} +1 -1
  34. package/temp/build/pi-desk/release/.next/trace-build +1 -1
  35. /package/temp/build/pi-desk/release/.next/static/{nyIG3F2lwWYn5hTFPNrHZ → STVrBHA3z9KPtvBE4WcE2}/_buildManifest.js +0 -0
  36. /package/temp/build/pi-desk/release/.next/static/{nyIG3F2lwWYn5hTFPNrHZ → STVrBHA3z9KPtvBE4WcE2}/_ssgManifest.js +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetcrab/pi-desk",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,10 +17,10 @@ import {
17
17
  getAgentDir,
18
18
  ModelRuntime,
19
19
  resolveModelScopeWithDiagnostics,
20
- SessionManager,
21
20
  SettingsManager
22
21
  } from '@earendil-works/pi-coding-agent'
23
22
  import { getSupportedThinkingLevels, type Api, type Model } from '@earendil-works/pi-ai'
23
+ import { listL4PiDirectorySummaries } from '@server/l4_foundation/pi/l4-pi-session-catalog'
24
24
  import type {
25
25
  L4AccountModelSelection,
26
26
  L4ModelAccount,
@@ -604,10 +604,8 @@ async function assertRemovalReferences(current: JsonRecord, candidate: JsonRecor
604
604
  }
605
605
  }
606
606
  // 仅在移除模型时检查已知项目,不扫描文件系统寻找任意项目配置。
607
- const projects = new Set(
608
- (await SessionManager.listAll()).map((session) => session.cwd).filter(Boolean)
609
- )
610
- for (const cwd of projects) {
607
+ const projects = await listL4PiDirectorySummaries(true)
608
+ for (const { cwd } of projects) {
611
609
  const settings = readJsonRecord(join(cwd, CONFIG_DIR_NAME, 'settings.json'))
612
610
  if (
613
611
  typeof settings.defaultProvider === 'string' &&
@@ -5,7 +5,6 @@ import { getL4PiDeskDataDir } from './l4-pi-desk-data-dir'
5
5
  import { randomUUID } from 'node:crypto'
6
6
  import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from 'node:fs'
7
7
  import { dirname, join, resolve } from 'node:path'
8
- import { SessionManager } from '@earendil-works/pi-coding-agent'
9
8
  import { z } from 'zod'
10
9
  import { getL4PiDirectoryKey, listL4IgnoredPiDirectoryCwds } from './l4-pi-directory-ignore-store'
11
10
  import {
@@ -18,11 +17,13 @@ import {
18
17
  type L4PiSessionUserMessagePage
19
18
  } from './l4-pi-session-history-catalog'
20
19
 
21
- export interface L4PiDirectorySummary {
22
- cwd: string
23
- sessionCount: number
24
- updatedAt: number
25
- }
20
+ import {
21
+ discoverL4PiDirectories,
22
+ findL4PiSessionFile,
23
+ type L4PiDirectorySummary
24
+ } from './l4-pi-session-discovery'
25
+
26
+ export type { L4PiDirectorySummary } from './l4-pi-session-discovery'
26
27
 
27
28
  const DIRECTORY_SUMMARY_CACHE_FILE_NAME = 'pi-directories.json'
28
29
  const L4PiDirectorySummarySchema = z
@@ -37,7 +38,6 @@ const L4PiDirectorySummaryCacheSchema = z
37
38
  .strict()
38
39
 
39
40
  interface L4PiSessionCatalogState {
40
- activePathLookups: Map<string, Promise<ReadonlyMap<string, string>>>
41
41
  directorySummaryCache: Promise<L4PiDirectorySummary[]> | null
42
42
  directorySummaryValue: L4PiDirectorySummary[] | null
43
43
  directorySummaryNeedsRefresh: boolean
@@ -83,7 +83,6 @@ function sessionCatalogState(): L4PiSessionCatalogState {
83
83
  if (!globalThis.__piDeskPiSessionCatalogState) {
84
84
  const persisted = readPersistedDirectorySummary()
85
85
  globalThis.__piDeskPiSessionCatalogState = {
86
- activePathLookups: new Map(),
87
86
  directorySummaryCache: null,
88
87
  directorySummaryValue: persisted,
89
88
  directorySummaryNeedsRefresh: persisted !== null
@@ -96,63 +95,23 @@ function normalizeCwd(cwd: string): string {
96
95
  return resolve(cwd)
97
96
  }
98
97
 
99
- async function loadSessionPaths(cwd: string): Promise<ReadonlyMap<string, string>> {
100
- const sessions = await SessionManager.list(cwd)
101
- return new Map(sessions.map((session) => [session.id, session.path]))
102
- }
103
-
104
- function getSessionPathLookup(cwd: string): Promise<ReadonlyMap<string, string>> {
105
- const normalizedCwd = normalizeCwd(cwd)
106
- const state = sessionCatalogState()
107
- const active = state.activePathLookups.get(normalizedCwd)
108
- if (active) return active
109
-
110
- const lookup = loadSessionPaths(normalizedCwd)
111
- state.activePathLookups.set(normalizedCwd, lookup)
112
- const clear = () => {
113
- if (state.activePathLookups.get(normalizedCwd) === lookup) {
114
- state.activePathLookups.delete(normalizedCwd)
115
- }
116
- }
117
- void lookup.then(clear, clear)
118
- return lookup
119
- }
120
-
121
98
  export async function resolveL4PiSessionPath(
122
99
  cwd: string,
123
100
  sessionId: string
124
101
  ): Promise<string | null> {
125
- const cached = resolveCachedL4PiSessionHistoryPath(cwd, sessionId)
126
- if (cached !== undefined) return cached
127
- return (await getSessionPathLookup(cwd)).get(sessionId) ?? null
128
- }
129
-
130
- async function loadAllL4PiDirectories(): Promise<L4PiDirectorySummary[]> {
131
- const sessions = await SessionManager.listAll()
132
- const directories = new Map<string, L4PiDirectorySummary>()
133
-
134
- for (const session of sessions) {
135
- if (!session.cwd) continue
136
- const cwd = normalizeCwd(session.cwd)
137
- const updatedAt = session.modified.getTime()
138
- const current = directories.get(cwd)
139
- if (!current) {
140
- directories.set(cwd, { cwd, sessionCount: 1, updatedAt })
141
- continue
142
- }
143
-
144
- current.sessionCount += 1
145
- if (updatedAt > current.updatedAt) current.updatedAt = updatedAt
146
- }
147
-
148
- return Array.from(directories.values()).sort((left, right) => right.updatedAt - left.updatedAt)
102
+ return findL4PiSessionFile(
103
+ normalizeCwd(cwd),
104
+ sessionId,
105
+ resolveCachedL4PiSessionHistoryPath(cwd, sessionId)
106
+ )
149
107
  }
150
108
 
151
109
  function refreshDirectorySummary(): Promise<L4PiDirectorySummary[]> {
152
110
  const state = sessionCatalogState()
153
111
  if (state.directorySummaryCache) return state.directorySummaryCache
154
112
 
155
- const cache = loadAllL4PiDirectories()
113
+ const startedAt = performance.now()
114
+ const cache = discoverL4PiDirectories()
156
115
  state.directorySummaryCache = cache
157
116
  void cache
158
117
  .then(
@@ -160,13 +119,14 @@ function refreshDirectorySummary(): Promise<L4PiDirectorySummary[]> {
160
119
  state.directorySummaryValue = directories
161
120
  state.directorySummaryNeedsRefresh = false
162
121
  persistDirectorySummary(directories)
163
- console.info('[Pi Desk][PiSessionCatalog] 已更新 Pi 完整目录缓存', {
164
- directoryCount: directories.length
122
+ console.info('[Pi Desk][PiSessionCatalog] 已更新 Pi 目录元数据缓存', {
123
+ directoryCount: directories.length,
124
+ durationMs: Math.round(performance.now() - startedAt)
165
125
  })
166
126
  },
167
127
  (error) => {
168
128
  state.directorySummaryNeedsRefresh = true
169
- console.warn('[Pi Desk][PiSessionCatalog] 更新 Pi 完整目录缓存失败', {
129
+ console.warn('[Pi Desk][PiSessionCatalog] 更新 Pi 目录元数据缓存失败', {
170
130
  errorName: error instanceof Error ? error.name : 'UnknownError'
171
131
  })
172
132
  }
@@ -178,7 +138,7 @@ function refreshDirectorySummary(): Promise<L4PiDirectorySummary[]> {
178
138
  }
179
139
 
180
140
  /** 已有持久缓存时先返回旧目录,后台重建最新摘要;显式刷新才等待扫描完成。 */
181
- function listAllL4PiDirectories(forceRefresh = false): Promise<L4PiDirectorySummary[]> {
141
+ export function listL4PiDirectorySummaries(forceRefresh = false): Promise<L4PiDirectorySummary[]> {
182
142
  const state = sessionCatalogState()
183
143
  if (!forceRefresh && state.directorySummaryValue) {
184
144
  if (state.directorySummaryNeedsRefresh) void refreshDirectorySummary()
@@ -192,7 +152,7 @@ function ignoredDirectoryKeys(): Set<string> {
192
152
  }
193
153
 
194
154
  export async function listL4PiDirectories(forceRefresh = false): Promise<L4PiDirectorySummary[]> {
195
- const directories = await listAllL4PiDirectories(forceRefresh)
155
+ const directories = await listL4PiDirectorySummaries(forceRefresh)
196
156
  const ignored = ignoredDirectoryKeys()
197
157
  return directories.filter((directory) => !ignored.has(getL4PiDirectoryKey(directory.cwd)))
198
158
  }
@@ -200,14 +160,14 @@ export async function listL4PiDirectories(forceRefresh = false): Promise<L4PiDir
200
160
  export async function listL4IgnoredPiDirectories(
201
161
  forceRefresh = false
202
162
  ): Promise<L4PiDirectorySummary[]> {
203
- const directories = await listAllL4PiDirectories(forceRefresh)
163
+ const directories = await listL4PiDirectorySummaries(forceRefresh)
204
164
  const ignored = ignoredDirectoryKeys()
205
165
  return directories.filter((directory) => ignored.has(getL4PiDirectoryKey(directory.cwd)))
206
166
  }
207
167
 
208
168
  export function invalidateL4PiDirectoryCache(cwd?: string): void {
209
169
  const state = sessionCatalogState()
210
- state.directorySummaryNeedsRefresh = true
170
+ if (!cwd) state.directorySummaryNeedsRefresh = true
211
171
  if (cwd && state.directorySummaryValue) {
212
172
  const normalizedCwd = normalizeCwd(cwd)
213
173
  const current = state.directorySummaryValue.find(
@@ -224,7 +184,6 @@ export function invalidateL4PiDirectoryCache(cwd?: string): void {
224
184
  }
225
185
  persistDirectorySummary(state.directorySummaryValue)
226
186
  }
227
- if (state.directorySummaryValue) void refreshDirectorySummary()
228
187
  invalidateSessionHistoryCache(cwd)
229
188
  }
230
189
 
@@ -0,0 +1,139 @@
1
+ import 'server-only'
2
+
3
+ import { open, readdir, stat } from 'node:fs/promises'
4
+ import { dirname, join, resolve } from 'node:path'
5
+ import { getAgentDir, SessionManager } from '@earendil-works/pi-coding-agent'
6
+
7
+ export interface L4PiDirectorySummary {
8
+ cwd: string
9
+ sessionCount: number
10
+ updatedAt: number
11
+ }
12
+
13
+ interface SessionHeader {
14
+ id: string
15
+ cwd: string
16
+ }
17
+
18
+ // 与 Pi 的发现边界一致;损坏或异常大的文件头不能导致读取整个会话正文。
19
+ const MAX_HEADER_BYTES = 1024 * 1024
20
+
21
+ async function readSessionHeader(path: string): Promise<SessionHeader | null> {
22
+ let handle
23
+ try {
24
+ handle = await open(path, 'r')
25
+ const chunks: Buffer[] = []
26
+ const buffer = Buffer.allocUnsafe(4096)
27
+ let scanned = 0
28
+ while (scanned < MAX_HEADER_BYTES) {
29
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, null)
30
+ scanned += bytesRead
31
+ let start = 0
32
+ for (let index = 0; index <= bytesRead; index += 1) {
33
+ if (index === bytesRead && bytesRead > 0) break
34
+ if (index < bytesRead && buffer[index] !== 10) continue
35
+ chunks.push(Buffer.from(buffer.subarray(start, index)))
36
+ const line = Buffer.concat(chunks).toString('utf8').trim()
37
+ chunks.length = 0
38
+ start = index + 1
39
+ if (!line) continue
40
+ let value: unknown
41
+ try {
42
+ value = JSON.parse(line)
43
+ } catch {
44
+ continue
45
+ }
46
+ if (!value || typeof value !== 'object') return null
47
+ const header = value as Record<string, unknown>
48
+ return header.type === 'session' && typeof header.id === 'string'
49
+ ? { id: header.id, cwd: typeof header.cwd === 'string' ? header.cwd : '' }
50
+ : null
51
+ }
52
+ if (bytesRead === 0) return null
53
+ chunks.push(Buffer.from(buffer.subarray(start, bytesRead)))
54
+ }
55
+ console.warn('[Pi Desk][PiSessionDiscovery] 会话文件头超过读取上限', { path })
56
+ } catch (error) {
57
+ if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {
58
+ console.warn('[Pi Desk][PiSessionDiscovery] 无法读取会话文件头', {
59
+ path,
60
+ message: error instanceof Error ? error.message : String(error)
61
+ })
62
+ }
63
+ } finally {
64
+ await handle?.close()
65
+ }
66
+ return null
67
+ }
68
+
69
+ export async function findL4PiSessionFile(
70
+ cwd: string,
71
+ sessionId: string,
72
+ cachedPath?: string
73
+ ): Promise<string | null> {
74
+ const matches = async (path: string): Promise<boolean> => {
75
+ const header = await readSessionHeader(path)
76
+ return header?.id === sessionId && header.cwd !== '' && resolve(header.cwd) === cwd
77
+ }
78
+ const directory = SessionManager.create(cwd).getSessionDir()
79
+ if (
80
+ cachedPath &&
81
+ dirname(resolve(cachedPath)) === resolve(directory) &&
82
+ (await matches(cachedPath))
83
+ )
84
+ return cachedPath
85
+
86
+ const names = await readdir(directory)
87
+ for (const name of names) {
88
+ if (name !== `${sessionId}.jsonl` && !name.endsWith(`_${sessionId}.jsonl`)) continue
89
+ const path = join(directory, name)
90
+ if (await matches(path)) return path
91
+ }
92
+ // 兼容被重命名的会话;SDK 的定向发现只读取有界文件头,不构建全文列表。
93
+ const path = SessionManager.findById(cwd, sessionId, directory)
94
+ return path && (await matches(path)) ? path : null
95
+ }
96
+
97
+ export async function discoverL4PiDirectories(): Promise<L4PiDirectorySummary[]> {
98
+ const root = join(getAgentDir(), 'sessions')
99
+ let entries
100
+ try {
101
+ entries = await readdir(root, { withFileTypes: true })
102
+ } catch (error) {
103
+ if ((error as NodeJS.ErrnoException).code === 'ENOENT') return []
104
+ throw error
105
+ }
106
+ const pending = entries.filter((entry) => entry.isDirectory() || entry.isSymbolicLink())
107
+ const summaries = new Map<string, L4PiDirectorySummary>()
108
+ let nextIndex = 0
109
+ async function discover(): Promise<void> {
110
+ while (nextIndex < pending.length) {
111
+ const directory = join(root, pending[nextIndex++]!.name)
112
+ let names
113
+ try {
114
+ names = await readdir(directory)
115
+ } catch (error) {
116
+ console.warn('[Pi Desk][PiSessionDiscovery] 无法读取会话目录', {
117
+ directory,
118
+ message: error instanceof Error ? error.message : String(error)
119
+ })
120
+ continue
121
+ }
122
+ for (const name of names) {
123
+ if (!name.endsWith('.jsonl')) continue
124
+ const path = join(directory, name)
125
+ const header = await readSessionHeader(path)
126
+ if (!header?.cwd) continue
127
+ const metadata = await stat(path).catch(() => null)
128
+ if (!metadata?.isFile()) continue
129
+ const cwd = resolve(header.cwd)
130
+ const current = summaries.get(cwd) ?? { cwd, sessionCount: 0, updatedAt: 0 }
131
+ current.sessionCount += 1
132
+ current.updatedAt = Math.max(current.updatedAt, metadata.mtime.getTime())
133
+ summaries.set(cwd, current)
134
+ }
135
+ }
136
+ }
137
+ await Promise.all(Array.from({ length: Math.min(10, pending.length) }, () => discover()))
138
+ return [...summaries.values()].sort((left, right) => right.updatedAt - left.updatedAt)
139
+ }
@@ -25,6 +25,7 @@ import {
25
25
  type FileEntry
26
26
  } from '@earendil-works/pi-coding-agent'
27
27
  import { z } from 'zod'
28
+ import { findL4PiSessionFile } from './l4-pi-session-discovery'
28
29
 
29
30
  const SCAN_CONCURRENCY = 10
30
31
  const MATCH_PREVIEW_MAX_LENGTH = 120
@@ -649,13 +650,12 @@ function sameFileDescriptor(
649
650
 
650
651
  async function refreshCatalog(
651
652
  cwd: string,
652
- previous: L4PiSessionHistoryCatalog | undefined,
653
- forceRefresh: boolean
653
+ previous: L4PiSessionHistoryCatalog | undefined
654
654
  ): Promise<L4PiSessionHistoryCatalogRefresh> {
655
655
  const descriptors = await listSessionFiles(cwd)
656
656
  const entries = await mapWithConcurrency(descriptors, SCAN_CONCURRENCY, async (descriptor) => {
657
657
  const cached = previous?.files.get(descriptor.path)
658
- if (!forceRefresh && cached && sameFileDescriptor(cached.descriptor, descriptor)) {
658
+ if (cached && sameFileDescriptor(cached.descriptor, descriptor)) {
659
659
  return { entry: { descriptor, record: cached.record }, changed: false }
660
660
  }
661
661
 
@@ -690,7 +690,6 @@ async function refreshCatalog(
690
690
  lastAccessedAt: now
691
691
  },
692
692
  changed:
693
- forceRefresh ||
694
693
  previous === undefined ||
695
694
  previous.files.size !== files.size ||
696
695
  entries.some((entry) => entry.changed)
@@ -785,7 +784,7 @@ async function getCatalog(
785
784
  }
786
785
 
787
786
  const load = (async (): Promise<L4PiSessionHistoryCatalog> => {
788
- const refresh = await refreshCatalog(cwd, catalog, forceRefresh)
787
+ const refresh = await refreshCatalog(cwd, catalog)
789
788
  const refreshed = refresh.catalog
790
789
  if (currentEpoch(cwd) === epoch) storeCatalog(refreshed, refresh.changed)
791
790
  console.info('[Pi Desk][PiSessionHistoryCatalog] 已更新历史会话内存投影', {
@@ -912,14 +911,44 @@ export async function listL4PiSessionHistory(
912
911
  })
913
912
  }
914
913
 
914
+ async function getSessionRecord(
915
+ cwdInput: string,
916
+ sessionId: string
917
+ ): Promise<L4PiSessionHistoryRecord | null> {
918
+ const cwd = resolve(cwdInput)
919
+ pruneCatalogs(Date.now())
920
+ const catalog = historyCatalogState().catalogs.get(cwd) ?? readPersistedHistoryCatalog(cwd)
921
+ const previous = catalog?.sessions.find((session) => session.sessionId === sessionId)
922
+ const path = await findL4PiSessionFile(cwd, sessionId, previous?.path)
923
+ if (!path) return null
924
+ const metadata = await stat(path).catch(() => null)
925
+ if (!metadata?.isFile()) return null
926
+ const descriptor = { path, size: metadata.size, modifiedAt: metadata.mtime.getTime() }
927
+ const cached = catalog?.files.get(path)
928
+ if (catalog && cached && sameFileDescriptor(cached.descriptor, descriptor)) {
929
+ catalog.lastAccessedAt = Date.now()
930
+ storeCatalog(catalog, false)
931
+ return cached.record
932
+ }
933
+ const record = await scanSessionFile(descriptor, cwd)
934
+ const next = catalog ?? toHistoryCatalog({ cwd, files: [] })
935
+ next.files.set(path, { descriptor, record })
936
+ next.sessions = sessionRecords(next.files)
937
+ next.textBytes = sessionTextBytes(next.sessions)
938
+ // 单文件刷新不代表整个目录已校验;后续列表查询仍需补齐目录索引。
939
+ next.dirty = true
940
+ next.lastAccessedAt = Date.now()
941
+ storeCatalog(next, false)
942
+ return record
943
+ }
944
+
915
945
  export async function listL4PiSessionUserMessages(input: {
916
946
  cwd: string
917
947
  sessionId: string
918
948
  query: string
919
949
  page: { index: number; size: number }
920
950
  }): Promise<L4PiSessionUserMessagePage | null> {
921
- const catalog = await getCatalog(input.cwd)
922
- const session = catalog.sessions.find((item) => item.sessionId === input.sessionId)
951
+ const session = await getSessionRecord(input.cwd, input.sessionId)
923
952
  if (!session) return null
924
953
 
925
954
  const normalizedQuery = normalizeSearch(input.query)
@@ -1 +1 @@
1
- nyIG3F2lwWYn5hTFPNrHZ
1
+ STVrBHA3z9KPtvBE4WcE2
@@ -4,8 +4,8 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/nyIG3F2lwWYn5hTFPNrHZ/_buildManifest.js",
8
- "static/nyIG3F2lwWYn5hTFPNrHZ/_ssgManifest.js"
7
+ "static/STVrBHA3z9KPtvBE4WcE2/_buildManifest.js",
8
+ "static/STVrBHA3z9KPtvBE4WcE2/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
11
  "static/chunks/webpack-45424d28099bbefa.js",
@@ -65,8 +65,8 @@
65
65
  "dynamicRoutes": {},
66
66
  "notFoundRoutes": [],
67
67
  "preview": {
68
- "previewModeId": "80ed2215b1563c99ca72d4d6c0ff9add",
69
- "previewModeSigningKey": "f51ac1fd4c2229de84ee9ab942abef8c6b111243ee78d3d5bf7d688f86eced7d",
70
- "previewModeEncryptionKey": "09c3fa89b21d3dcbb8449f59835710e797087fad4f00f93772dd66ec4bab2a2c"
68
+ "previewModeId": "28d5ec34d1c58a194c2a5c3ab2687d42",
69
+ "previewModeSigningKey": "c4e9211b6c474888cdf564c8f21297761ed881583370fa18bd6834beee426bbf",
70
+ "previewModeEncryptionKey": "54cffb337785431aff8bb1b3ca040e8a4804ac1d2812b9ed11da1278f1aa24ea"
71
71
  }
72
72
  }
@@ -2,8 +2,8 @@ self.__SERVER_FILES_MANIFEST={
2
2
  "version": 1,
3
3
  "config": {
4
4
  "env": {
5
- "PI_DESK_APP_VERSION": "1.1.0",
6
- "PI_DESK_VERSION_UPDATED_AT": "2026-10-09T21:13:39+08:00"
5
+ "PI_DESK_APP_VERSION": "1.1.1",
6
+ "PI_DESK_VERSION_UPDATED_AT": "2026-10-09T23:49:04+08:00"
7
7
  },
8
8
  "webpack": null,
9
9
  "typescript": {
@@ -2,8 +2,8 @@
2
2
  "version": 1,
3
3
  "config": {
4
4
  "env": {
5
- "PI_DESK_APP_VERSION": "1.1.0",
6
- "PI_DESK_VERSION_UPDATED_AT": "2026-10-09T21:13:39+08:00"
5
+ "PI_DESK_APP_VERSION": "1.1.1",
6
+ "PI_DESK_VERSION_UPDATED_AT": "2026-10-09T23:49:04+08:00"
7
7
  },
8
8
  "webpack": null,
9
9
  "typescript": {
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"2450":{"*":{"id":"88327","name":"*","chunks":[],"async":false}},"14405":{"*":{"id":"27297","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"41051","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"1480","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"49453","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"79460","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"97016","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"12104","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"4527","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"7005","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"21147","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"43305","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"88476","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"58044","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx":{"id":66999,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","24345","static/chunks/app/not-found-2aab8b33ebbf3257.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-providers.tsx":{"id":64282,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l4_foundation/styles/l4-globals.css":{"id":84178,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx":{"id":84845,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","18039","static/chunks/app/error-0296a3b20cd1bf00.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx":{"id":71713,"name":"*","chunks":["34219","static/chunks/app/global-error-6f5fc4928fd1966c.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-home-page.tsx":{"id":2450,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","46270","static/chunks/46270-3e42514685626190.js","57208","static/chunks/57208-d6d38167dabb91e4.js","7089","static/chunks/7089-600a8f5593b7846c.js","27491","static/chunks/27491-8b2d3e345b9142ea.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","58974","static/chunks/app/page-a659ca2be4d0f904.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l2_biz/auth/l2-login.tsx":{"id":21358,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/pi-desk/pi-desk/src/":[],"/home/runner/work/pi-desk/pi-desk/src/app/not-found":[],"/home/runner/work/pi-desk/pi-desk/src/app/layout":[{"inlined":false,"path":"static/css/56486914a8ba0a1b.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/error":[],"/home/runner/work/pi-desk/pi-desk/src/app/global-error":[],"/home/runner/work/pi-desk/pi-desk/src/app/page":[{"inlined":false,"path":"static/css/f6a76a493aae9ae3.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/_global-error/page":[]},"rscModuleMapping":{"2450":{"*":{"id":"11568","name":"*","chunks":[],"async":false}},"14405":{"*":{"id":"52047","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"69079","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"7770","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"39159","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"52442","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"47594","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"64669","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"88893","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"17179","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"70961","name":"*","chunks":[],"async":false}},"84178":{"*":{"id":"12707","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"56951","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"270","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"29190","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"2450":{"*":{"id":"88327","name":"*","chunks":[],"async":false}},"14405":{"*":{"id":"27297","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"41051","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"1480","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"49453","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"79460","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"97016","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"12104","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"4527","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"7005","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"21147","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"43305","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"88476","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"58044","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx":{"id":66999,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","24345","static/chunks/app/not-found-2aab8b33ebbf3257.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-providers.tsx":{"id":64282,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l4_foundation/styles/l4-globals.css":{"id":84178,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","57208","static/chunks/57208-d6d38167dabb91e4.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","52354","static/chunks/52354-6461358c522130be.js","7177","static/chunks/app/layout-7c5409cced9c2501.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx":{"id":84845,"name":"*","chunks":["78923","static/chunks/78923-539a8b5f7af3c54a.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","18039","static/chunks/app/error-0296a3b20cd1bf00.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx":{"id":71713,"name":"*","chunks":["34219","static/chunks/app/global-error-6f5fc4928fd1966c.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-home-page.tsx":{"id":2450,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","78923","static/chunks/78923-539a8b5f7af3c54a.js","96995","static/chunks/96995-ae32167974365050.js","46270","static/chunks/46270-3e42514685626190.js","57208","static/chunks/57208-d6d38167dabb91e4.js","7089","static/chunks/7089-600a8f5593b7846c.js","27491","static/chunks/27491-8b2d3e345b9142ea.js","74220","static/chunks/74220-795a2e7185bd66cb.js","74132","static/chunks/74132-0884df6a6f11861a.js","58974","static/chunks/app/page-39b146293b6eb488.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l2_biz/auth/l2-login.tsx":{"id":21358,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/pi-desk/pi-desk/src/":[],"/home/runner/work/pi-desk/pi-desk/src/app/not-found":[],"/home/runner/work/pi-desk/pi-desk/src/app/layout":[{"inlined":false,"path":"static/css/56486914a8ba0a1b.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/error":[],"/home/runner/work/pi-desk/pi-desk/src/app/global-error":[],"/home/runner/work/pi-desk/pi-desk/src/app/page":[{"inlined":false,"path":"static/css/f6a76a493aae9ae3.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/_global-error/page":[]},"rscModuleMapping":{"2450":{"*":{"id":"11568","name":"*","chunks":[],"async":false}},"14405":{"*":{"id":"52047","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"69079","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"7770","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"39159","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"52442","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"47594","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"64669","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"88893","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"17179","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"70961","name":"*","chunks":[],"async":false}},"84178":{"*":{"id":"12707","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"56951","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"270","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"29190","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
@@ -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/webpack-45424d28099bbefa.js"/><script src="/_next/static/chunks/e388c842-1ca92f1ea0dfe8ee.js" async=""></script><script src="/_next/static/chunks/64444-3e955f910569274d.js" async=""></script><script src="/_next/static/chunks/main-app-6230945a5a062fce.js" async=""></script><script src="/_next/static/chunks/78923-539a8b5f7af3c54a.js" async=""></script><script src="/_next/static/chunks/81881-f11dbe7dc0d04ed9.js" async=""></script><script src="/_next/static/chunks/app/error-0296a3b20cd1bf00.js" async=""></script><script src="/_next/static/chunks/app/not-found-2aab8b33ebbf3257.js" async=""></script><script src="/_next/static/chunks/app/global-error-6f5fc4928fd1966c.js" async=""></script><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/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;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/webpack-45424d28099bbefa.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[90184,[],\"\"]\n3:I[84845,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"18039\",\"static/chunks/app/error-0296a3b20cd1bf00.js\"],\"default\"]\n4:I[44478,[],\"\"]\n5:I[66999,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"24345\",\"static/chunks/app/not-found-2aab8b33ebbf3257.js\"],\"L1ErrorPage\"]\n6:I[14405,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[14405,[],\"ViewportBoundary\"]\nc:I[14405,[],\"MetadataBoundary\"]\ne:I[71713,[\"34219\",\"static/chunks/app/global-error-6f5fc4928fd1966c.js\"],\"default\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":null,\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{\"notFound\":true}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",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,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,\"$9\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"nyIG3F2lwWYn5hTFPNrHZ\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[]\n"])</script></body></html>
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/webpack-45424d28099bbefa.js"/><script src="/_next/static/chunks/e388c842-1ca92f1ea0dfe8ee.js" async=""></script><script src="/_next/static/chunks/64444-3e955f910569274d.js" async=""></script><script src="/_next/static/chunks/main-app-6230945a5a062fce.js" async=""></script><script src="/_next/static/chunks/78923-539a8b5f7af3c54a.js" async=""></script><script src="/_next/static/chunks/81881-f11dbe7dc0d04ed9.js" async=""></script><script src="/_next/static/chunks/app/error-0296a3b20cd1bf00.js" async=""></script><script src="/_next/static/chunks/app/not-found-2aab8b33ebbf3257.js" async=""></script><script src="/_next/static/chunks/app/global-error-6f5fc4928fd1966c.js" async=""></script><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/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;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/webpack-45424d28099bbefa.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[90184,[],\"\"]\n3:I[84845,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"18039\",\"static/chunks/app/error-0296a3b20cd1bf00.js\"],\"default\"]\n4:I[44478,[],\"\"]\n5:I[66999,[\"78923\",\"static/chunks/78923-539a8b5f7af3c54a.js\",\"81881\",\"static/chunks/81881-f11dbe7dc0d04ed9.js\",\"24345\",\"static/chunks/app/not-found-2aab8b33ebbf3257.js\"],\"L1ErrorPage\"]\n6:I[14405,[],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[14405,[],\"ViewportBoundary\"]\nc:I[14405,[],\"MetadataBoundary\"]\ne:I[71713,[\"34219\",\"static/chunks/app/global-error-6f5fc4928fd1966c.js\"],\"default\"]\n9:X\n0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"_global-error\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$3\",\"errorStyles\":[],\"errorScripts\":null,\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L5\",null,{\"notFound\":true}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",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,[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$9\"]},null,false,\"$9\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],null]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"STVrBHA3z9KPtvBE4WcE2\"}\n9:C\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n8:null\nd:[]\n"])</script></body></html>