@jetcrab/pi-desk 1.1.0-dev.1 → 1.1.1-dev
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/package.json +2 -2
- package/src/server/l4_foundation/model-settings/l4-model-settings-store.ts +3 -5
- package/src/server/l4_foundation/pi/l4-pi-session-catalog.ts +22 -63
- package/src/server/l4_foundation/pi/l4-pi-session-discovery.ts +139 -0
- package/src/server/l4_foundation/pi/l4-pi-session-history-catalog.ts +36 -7
- package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
- package/temp/build/pi-desk/release/.next/build-manifest.json +2 -2
- package/temp/build/pi-desk/release/.next/required-server-files.js +2 -2
- package/temp/build/pi-desk/release/.next/required-server-files.json +2 -2
- package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-catalog/list/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/model-settings/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/get/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/replace/route.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/page.js +1 -1
- package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/chunks/25406.js +6 -6
- package/temp/build/pi-desk/release/.next/server/chunks/3108.js +3 -3
- package/temp/build/pi-desk/release/.next/server/chunks/78262.js +3 -3
- package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
- package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
- package/temp/build/pi-desk/release/.next/static/chunks/app/{page-d4483fde1c24ca09.js → page-a85b2f17c68cff60.js} +1 -1
- package/temp/build/pi-desk/release/.next/trace-build +1 -1
- /package/temp/build/pi-desk/release/.next/static/{1lCPwFThMmH5Cmw0l1LcT → AIPx4Oo1zqM8gixtv1I69}/_buildManifest.js +0 -0
- /package/temp/build/pi-desk/release/.next/static/{1lCPwFThMmH5Cmw0l1LcT → AIPx4Oo1zqM8gixtv1I69}/_ssgManifest.js +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jetcrab/pi-desk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.1-dev",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"viewerjs": "^1.11.8",
|
|
69
69
|
"ws": "^8.21.3",
|
|
70
70
|
"zod": "^4.4.3",
|
|
71
|
-
"@jetcrab/pi-desk-sdk": "^1.1.0
|
|
71
|
+
"@jetcrab/pi-desk-sdk": "^1.1.0"
|
|
72
72
|
},
|
|
73
73
|
"devDependencies": {
|
|
74
74
|
"@earendil-works/pi-agent-core": "1.0.1",
|
|
@@ -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 =
|
|
608
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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
|
-
|
|
1
|
+
AIPx4Oo1zqM8gixtv1I69
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/AIPx4Oo1zqM8gixtv1I69/_buildManifest.js",
|
|
8
|
+
"static/AIPx4Oo1zqM8gixtv1I69/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
11
|
"static/chunks/webpack-45424d28099bbefa.js",
|
|
@@ -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.
|
|
6
|
-
"PI_DESK_VERSION_UPDATED_AT": "2026-10-
|
|
5
|
+
"PI_DESK_APP_VERSION": "1.1.1-dev",
|
|
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.
|
|
6
|
-
"PI_DESK_VERSION_UPDATED_AT": "2026-10-
|
|
5
|
+
"PI_DESK_APP_VERSION": "1.1.1-dev",
|
|
6
|
+
"PI_DESK_VERSION_UPDATED_AT": "2026-10-09T23:49:04+08:00"
|
|
7
7
|
},
|
|
8
8
|
"webpack": null,
|
|
9
9
|
"typescript": {
|
package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js
CHANGED
|
@@ -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-d4483fde1c24ca09.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-a85b2f17c68cff60.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,"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/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\":\"
|
|
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,"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/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\":\"AIPx4Oo1zqM8gixtv1I69\"}\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>
|