@evalops/maestro 0.10.26 → 0.10.28
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/dist/agent/transport/reusable-tool-results.d.ts +38 -0
- package/dist/agent/transport/reusable-tool-results.d.ts.map +1 -0
- package/dist/agent/transport/reusable-tool-results.js +432 -0
- package/dist/agent/transport/reusable-tool-results.js.map +1 -0
- package/dist/agent/transport.d.ts +1 -1
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +1 -430
- package/dist/agent/transport.js.map +1 -1
- package/dist/audit/logger.d.ts +2 -2
- package/dist/cli/commands/run.d.ts +15 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +35 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli.js +739 -630
- package/dist/node_modules/@evalops/contracts/package.json +1 -1
- package/dist/node_modules/@evalops/tui/package.json +1 -1
- package/dist/platform/agent-registry-client.d.ts +6 -0
- package/dist/platform/agent-registry-client.d.ts.map +1 -1
- package/dist/platform/agent-registry-client.js +6 -0
- package/dist/platform/agent-registry-client.js.map +1 -1
- package/dist/server/agent-runtime-ledger.d.ts +5 -0
- package/dist/server/agent-runtime-ledger.d.ts.map +1 -1
- package/dist/server/agent-runtime-ledger.js +63 -0
- package/dist/server/agent-runtime-ledger.js.map +1 -1
- package/dist/server/headless-runtime/broker.d.ts +81 -0
- package/dist/server/headless-runtime/broker.d.ts.map +1 -0
- package/dist/server/headless-runtime/broker.js +201 -0
- package/dist/server/headless-runtime/broker.js.map +1 -0
- package/dist/server/headless-runtime-service.d.ts +3 -37
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +1 -199
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/session/manager.d.ts +1 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js.map +1 -1
- package/dist/version.json +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Session Manager - Conversation Persistence and Recovery\n *\n * Sessions are stored as JSONL (JSON Lines) files. Each entry is append-only and\n * may include tree metadata (id/parentId) to support branching and navigation.\n *\n * Tree entries form a conversation tree where the \"leaf\" pointer tracks the\n * active branch. The session file is append-only; branching updates the leaf\n * pointer without modifying history.\n */\n\nimport {\n\tappendFileSync,\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\treaddirSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { extname, join, resolve } from \"node:path\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport type {\n\tAgentState,\n\tAppMessage,\n\tImageContent,\n\tTextContent,\n} from \"../agent/types.js\";\nimport { SESSION_CONFIG, getAgentDir } from \"../config/constants.js\";\nimport { getRegisteredModels } from \"../models/registry.js\";\nimport type { RegisteredModel } from \"../models/registry.js\";\nimport { queueSharedMemoryUpdate } from \"../shared-memory/client.js\";\nimport { recordMaestroPromptVariantSelected } from \"../telemetry/maestro-event-bus.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { resolveEnvPath } from \"../utils/path-expansion.js\";\nimport { SessionFileWriter } from \"./file-writer.js\";\nimport {\n\tSessionMetadataCache,\n\ttype SessionModelMetadata,\n} from \"./metadata-cache.js\";\nimport {\n\tmigrateToCurrentVersion,\n\tregisterActiveSessionFile,\n\tscheduleSessionMigration,\n\tunregisterActiveSessionFile,\n} from \"./migration.js\";\nimport { sanitizeSessionScope } from \"./scope.js\";\nimport {\n\tcreateBranchedSessionFromLeaf as createBranchedSessionFromLeafFn,\n\tcreateBranchedSessionFromState as createBranchedSessionFromStateFn,\n} from \"./session-branch.js\";\nimport { SessionCatalog } from \"./session-catalog.js\";\nimport {\n\ttype SessionContextSnapshot,\n\tbuildSessionContextFromEntries,\n\tgenerateEntryId,\n\tsafeReadSessionEntries,\n} from \"./session-context.js\";\nimport { syncSessionMemory } from \"./session-memory.js\";\nimport {\n\tapplyAttachmentExtracts,\n\tsanitizeMessageForSession,\n} from \"./session-sanitize.js\";\nimport {\n\ttype AttachmentExtractedEntry,\n\ttype BranchSummaryEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CompactionEntry,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype LabelEntry,\n\ttype ModelChangeEntry,\n\ttype SessionEntry,\n\ttype SessionHeaderEntry,\n\ttype SessionMessageEntry,\n\ttype SessionMessagesView,\n\ttype SessionMetaEntry,\n\ttype SessionMetadata,\n\ttype SessionSummary,\n\ttype SessionTreeEntry,\n\ttype SessionTreeNode,\n\ttype ThinkingLevelChangeEntry,\n\tgetPersistedSessionPromptContextManifest,\n\tisSessionTreeEntry,\n\ttryParseSessionEntry,\n} from \"./types.js\";\n\nexport interface SessionManagerOptions {\n\t/** Override the base session directory (before per-cwd scoping). */\n\tsessionDir?: string;\n\t/** Optional scope key (e.g., auth subject) for per-user session isolation. */\n\tsessionScope?: string;\n}\n\nconst logger = createLogger(\"session-manager\");\nconst PORTABLE_SESSION_EXPORT_FORMAT = \"maestro-session-export.v1\";\n\ninterface PortableSessionBundle {\n\tformat: string;\n\texportedAt: string;\n\tsessionId?: string;\n\tentries?: SessionEntry[];\n\tsessions?: PortableSessionExportSession[];\n}\n\nexport interface PortableSessionExportSession {\n\tsessionId: string;\n\tparentSessionId?: string;\n\tsessionFile: string;\n\tentries?: SessionEntry[];\n}\n\nexport interface PortableSessionImportResult {\n\tsessionFile: string;\n\tsessionId: string;\n\timportedCount: number;\n}\n\ninterface PortableSessionExportRecord {\n\tsessionId: string;\n\tsessionFile: string;\n\ttimestamp: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n}\n\n// Re-export SessionModelMetadata for backward compatibility\nexport type { SessionModelMetadata } from \"./metadata-cache.js\";\n\nexport type {\n\tAttachmentExtractedEntry,\n\tBranchSummaryEntry,\n\tCompactionEntry,\n\tSessionHeaderEntry,\n\tSessionMessageEntry,\n\tSessionMetaEntry,\n\tSessionMigrationState,\n\tSessionToolInfo,\n\tSessionTreeEntry,\n\tSessionTreeNode,\n} from \"./types.js\";\n\nexport {\n\tgetMigrationState,\n\tregisterActiveSessionFile,\n\tresetMigrationState,\n\trunSessionMigration,\n\tscheduleSessionMigration,\n\tunregisterActiveSessionFile,\n} from \"./migration.js\";\n\nexport function toSessionModelMetadata(\n\tmodel: RegisteredModel,\n): SessionModelMetadata {\n\treturn {\n\t\tprovider: model.provider,\n\t\tmodelId: model.id,\n\t\tproviderName: model.providerName,\n\t\tname: model.name,\n\t\tbaseUrl: model.baseUrl,\n\t\treasoning: model.reasoning,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\tsource: model.source,\n\t};\n}\n\nfunction findRegisteredModel(modelKey: string): RegisteredModel | undefined {\n\tconst [provider, modelId] = modelKey.split(\"/\");\n\tif (!provider || !modelId) {\n\t\treturn undefined;\n\t}\n\treturn getRegisteredModels().find(\n\t\t(entry) => entry.provider === provider && entry.id === modelId,\n\t);\n}\n\n/**\n * Main session management class.\n */\nexport class SessionManager {\n\t/** Unique identifier for this session (UUID v4) */\n\tprivate sessionId!: string;\n\t/** Absolute path to the session JSONL file */\n\tprivate sessionFile!: string;\n\t/** Directory containing all session files for current project */\n\tprivate sessionDir: string;\n\t/** Optional scope for per-user session isolation */\n\tprivate sessionScope?: string;\n\t/** Optional override for base session directory */\n\tprivate sessionDirOverride?: string;\n\t/** Whether session persistence is enabled (disabled by --no-session) */\n\tprivate enabled = true;\n\t/** Whether the session header has been written */\n\tprivate sessionInitialized = false;\n\t/** Buffered file writer for efficient I/O */\n\tprivate writer?: SessionFileWriter;\n\t/** Snapshot of agent state for recovery purposes */\n\tprivate _agentSnapshot?: AgentState;\n\t/** Metadata for the last used model */\n\tprivate lastModelMetadata?: SessionModelMetadata;\n\t/** Cache for current model/thinking level */\n\tprivate metadataCache = new SessionMetadataCache();\n\tprivate readonly catalog: SessionCatalog;\n\n\tprivate fileEntries: SessionEntry[] = [];\n\tprivate byId: Map<string, SessionTreeEntry> = new Map();\n\tprivate labelsById: Map<string, string> = new Map();\n\tprivate leafId: string | null = null;\n\tprivate flushed = false;\n\tprivate _hasAssistantMessage = false;\n\n\t/**\n\t * Creates a new SessionManager.\n\t *\n\t * @param continueSession - If true, loads the most recently modified session\n\t * @param customSessionPath - Optional specific session file to load\n\t * @param options - Optional session directory/scope overrides\n\t */\n\tconstructor(\n\t\tcontinueSession = false,\n\t\tcustomSessionPath?: string,\n\t\toptions: SessionManagerOptions = {},\n\t) {\n\t\tthis.sessionScope = options.sessionScope;\n\t\tthis.sessionDirOverride = options.sessionDir;\n\t\tthis.sessionDir = this.getSessionDirectory();\n\t\tthis.catalog = new SessionCatalog({\n\t\t\tsessionDir: this.sessionDir,\n\t\t\tbeforeRead: () => this.writer?.flushSync(),\n\t\t\tgetCurrentSessionId: () => this.sessionId,\n\t\t});\n\n\t\tif (customSessionPath) {\n\t\t\t// Use custom session file path\n\t\t\tthis.sessionFile = resolve(customSessionPath);\n\t\t\tthis.setSessionFile(this.sessionFile);\n\t\t} else if (continueSession) {\n\t\t\tconst mostRecent = this.findMostRecentlyModifiedSession();\n\t\t\tif (mostRecent) {\n\t\t\t\tthis.sessionFile = mostRecent;\n\t\t\t\tthis.setSessionFile(this.sessionFile);\n\t\t\t} else {\n\t\t\t\tthis.initNewSession();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.initNewSession();\n\t\t}\n\n\t\tthis.initializeWriter();\n\t\tif (this.sessionInitialized) {\n\t\t\tthis.metadataCache.seedFromFile(this.sessionFile);\n\t\t}\n\t}\n\n\t/** Disable session saving (for --no-session mode) */\n\tdisable() {\n\t\tthis.enabled = false;\n\t\t// Unregister session file before disabling\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\t\tthis.writer = undefined;\n\t\tthis.fileEntries = [];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t}\n\n\tprivate initializeWriter(): void {\n\t\tif (!this.enabled) {\n\t\t\tthis.writer = undefined;\n\t\t\treturn;\n\t\t}\n\t\tthis.writer = new SessionFileWriter(this.sessionFile);\n\t}\n\n\tprivate getSessionDirectory(): string {\n\t\tconst cwd = process.cwd();\n\t\tconst safePath = `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n\n\t\tconst baseOverride =\n\t\t\tresolveEnvPath(this.sessionDirOverride) ??\n\t\t\tresolveEnvPath(process.env.MAESTRO_SESSION_DIR);\n\t\tconst baseDir =\n\t\t\tbaseOverride ??\n\t\t\tSESSION_CONFIG.DEFAULT_DIR ??\n\t\t\tjoin(getAgentDir(), \"sessions\");\n\n\t\tconst scope = this.sessionScope\n\t\t\t? sanitizeSessionScope(this.sessionScope)\n\t\t\t: \"\";\n\t\tconst sessionDir = scope\n\t\t\t? join(baseDir, scope, safePath)\n\t\t\t: join(baseDir, safePath);\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\t\treturn sessionDir;\n\t}\n\n\tprivate initNewSession(): void {\n\t\tthis.sessionId = uuidv4();\n\t\tconst timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n\t\tthis.sessionFile = join(\n\t\t\tthis.sessionDir,\n\t\t\t`${timestamp}_${this.sessionId}.jsonl`,\n\t\t);\n\t\t// Register new session file to prevent migration race conditions\n\t\tregisterActiveSessionFile(this.sessionFile);\n\t\tthis.fileEntries = [];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t\tthis.flushed = false;\n\t\tthis._hasAssistantMessage = false;\n\t\tthis.sessionInitialized = false;\n\t\tthis.metadataCache.reset();\n\t}\n\n\tstartFreshSession(): void {\n\t\tif (!this.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\t\tthis.writer = undefined;\n\t\tthis._agentSnapshot = undefined;\n\t\tthis.lastModelMetadata = undefined;\n\t\t// Unregister old session file before creating new one\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\t\tthis.initNewSession();\n\t\tthis.initializeWriter();\n\t}\n\n\t/**\n\t * Reset session state for /clear command - clears pending messages and starts new session\n\t */\n\treset(): void {\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\t\tthis.writer = undefined;\n\n\t\t// Unregister old session file before creating new one\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\n\t\tthis.fileEntries = [];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t\tthis.flushed = false;\n\t\tthis._hasAssistantMessage = false;\n\t\tthis.sessionInitialized = false;\n\t\tthis.metadataCache.reset();\n\t\tthis._agentSnapshot = undefined;\n\t\tthis.lastModelMetadata = undefined;\n\n\t\tthis.initNewSession();\n\t\tthis.initializeWriter();\n\t}\n\n\tprivate findMostRecentlyModifiedSession(): string | null {\n\t\ttry {\n\t\t\tconst files = readdirSync(this.sessionDir)\n\t\t\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t\t\t.map((f) => ({\n\t\t\t\t\tpath: join(this.sessionDir, f),\n\t\t\t\t\tmtime: statSync(join(this.sessionDir, f)).mtime,\n\t\t\t\t}))\n\t\t\t\t.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());\n\n\t\t\treturn files[0]?.path || null;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate rebuildIndex(entries: SessionEntry[]): void {\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t\tthis._hasAssistantMessage = false;\n\n\t\tfor (const entry of entries) {\n\t\t\tif (!isSessionTreeEntry(entry)) continue;\n\t\t\tthis.byId.set(entry.id, entry);\n\t\t\tthis.leafId = entry.id;\n\t\t\tif (entry.type === \"label\") {\n\t\t\t\tif (entry.label) {\n\t\t\t\t\tthis.labelsById.set(entry.targetId, entry.label);\n\t\t\t\t} else {\n\t\t\t\t\tthis.labelsById.delete(entry.targetId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\t\tthis._hasAssistantMessage = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate rewriteSessionFile(): void {\n\t\tif (!this.enabled || !this.sessionFile) return;\n\t\tconst content = `${this.fileEntries.map((e) => JSON.stringify(e)).join(\"\\n\")}\\n`;\n\t\twriteFileSync(this.sessionFile, content);\n\t}\n\n\tprivate persistEntry(entry: SessionEntry): void {\n\t\tif (!this.enabled || !this.writer || !this.sessionFile) return;\n\t\tif (!this.sessionInitialized) return;\n\n\t\tif (!this.flushed) {\n\t\t\tfor (const e of this.fileEntries) {\n\t\t\t\tthis.writer.write(e);\n\t\t\t}\n\t\t\tthis.writer.flushSync();\n\t\t\tthis.flushed = true;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.writer.write(entry);\n\t}\n\n\tprivate appendTreeEntry(entry: SessionTreeEntry): void {\n\t\tthis.fileEntries.push(entry);\n\t\tthis.byId.set(entry.id, entry);\n\t\tthis.leafId = entry.id;\n\t\tif (entry.type === \"label\") {\n\t\t\tif (entry.label) {\n\t\t\t\tthis.labelsById.set(entry.targetId, entry.label);\n\t\t\t} else {\n\t\t\t\tthis.labelsById.delete(entry.targetId);\n\t\t\t}\n\t\t}\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\tthis._hasAssistantMessage = true;\n\t\t}\n\t\tthis.persistEntry(entry);\n\t}\n\n\tprivate createTreeEntryId(): string {\n\t\treturn generateEntryId(this.byId);\n\t}\n\n\tstartSession(state: AgentState, options?: { subject?: string }): void {\n\t\tif (!this.enabled || this.sessionInitialized) return;\n\n\t\tconst modelKeyFromState = `${state.model.provider}/${state.model.id}`;\n\t\tconst latestModelChange = this.getLatestModelChange();\n\t\tconst latestThinkingLevel = this.getLatestThinkingLevel();\n\t\tconst sessionModelKey = latestModelChange?.model ?? modelKeyFromState;\n\t\tconst primaryMetadata =\n\t\t\tlatestModelChange?.modelMetadata ??\n\t\t\t(sessionModelKey === modelKeyFromState\n\t\t\t\t? toSessionModelMetadata(state.model as RegisteredModel)\n\t\t\t\t: undefined);\n\t\tconst fallbackMetadata = this.resolveModelMetadata(sessionModelKey);\n\t\tconst provisionalHeaderIndex = this.fileEntries.findIndex(\n\t\t\t(existing) =>\n\t\t\t\texisting.type === \"session\" &&\n\t\t\t\texisting.id === this.sessionId &&\n\t\t\t\texisting.provisional === true,\n\t\t);\n\t\tconst provisionalHeader =\n\t\t\tprovisionalHeaderIndex >= 0\n\t\t\t\t? (this.fileEntries[provisionalHeaderIndex] as SessionHeaderEntry)\n\t\t\t\t: undefined;\n\t\tconst timestamp = provisionalHeader?.timestamp ?? new Date().toISOString();\n\t\tconst entry: SessionHeaderEntry = {\n\t\t\ttype: \"session\",\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tid: this.sessionId,\n\t\t\ttimestamp,\n\t\t\tcwd: process.cwd(),\n\t\t\tsubject: options?.subject || undefined,\n\t\t\tmodel: sessionModelKey,\n\t\t\tmodelMetadata: primaryMetadata ?? fallbackMetadata,\n\t\t\tthinkingLevel: latestThinkingLevel ?? state.thinkingLevel,\n\t\t\tsystemPrompt: state.systemPrompt,\n\t\t\tpromptMetadata: state.promptMetadata,\n\t\t\tpromptContextManifest: getPersistedSessionPromptContextManifest(state),\n\t\t\tunifiedContextManifest: state.unifiedContextManifest,\n\t\t\ttools: state.tools.map((tool) => ({\n\t\t\t\tname: tool.name,\n\t\t\t\tlabel: tool.label,\n\t\t\t\tdescription: tool.description,\n\t\t\t})),\n\t\t};\n\t\tthis.metadataCache.apply(entry);\n\t\tif (provisionalHeaderIndex >= 0) {\n\t\t\tthis.fileEntries[provisionalHeaderIndex] = entry;\n\t\t} else {\n\t\t\tthis.fileEntries.unshift(entry);\n\t\t}\n\t\tthis.sessionInitialized = true;\n\n\t\tif (provisionalHeaderIndex >= 0) {\n\t\t\tthis.rewriteSessionFile();\n\t\t\tthis.flushed = true;\n\t\t} else {\n\t\t\tthis.persistEntry(entry);\n\t\t}\n\n\t\tqueueSharedMemoryUpdate({\n\t\t\tsessionId: this.sessionId,\n\t\t\tstate: {\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tcwd: process.cwd(),\n\t\t\t\tmodel: sessionModelKey,\n\t\t\t\tupdatedAt: entry.timestamp,\n\t\t\t\tsource: \"maestro\",\n\t\t\t},\n\t\t\tevent: {\n\t\t\t\ttype: \"maestro.session.started\",\n\t\t\t\tpayload: {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tmodel: sessionModelKey,\n\t\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (state.promptMetadata) {\n\t\t\trecordMaestroPromptVariantSelected({\n\t\t\t\tprompt_metadata: state.promptMetadata,\n\t\t\t\tcorrelation: {\n\t\t\t\t\tsession_id: this.sessionId,\n\t\t\t\t},\n\t\t\t\tselected_at: entry.timestamp,\n\t\t\t});\n\t\t}\n\n\t\t// Auto-prune old sessions in the background (non-blocking)\n\t\tif (\n\t\t\tSESSION_CONFIG.MAX_SESSIONS > 0 ||\n\t\t\tSESSION_CONFIG.MAX_SESSION_AGE_DAYS > 0\n\t\t) {\n\t\t\tsetTimeout(() => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = this.pruneSessions();\n\t\t\t\t\tif (result.removed > 0) {\n\t\t\t\t\t\tlogger.debug(\"Auto-pruned sessions\", result);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Session auto-prune failed\",\n\t\t\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\tsaveMessage(message: AppMessage): void {\n\t\tif (!this.enabled) return;\n\t\tconst sanitizedMessage = sanitizeMessageForSession(message);\n\t\tconst entry: SessionMessageEntry = {\n\t\t\ttype: \"message\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tmessage: sanitizedMessage,\n\t\t};\n\n\t\tthis.appendTreeEntry(entry);\n\n\t\tqueueSharedMemoryUpdate({\n\t\t\tsessionId: this.sessionId,\n\t\t\tstate: {\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tupdatedAt: entry.timestamp,\n\t\t\t\tlastMessageId: entry.id,\n\t\t\t\tlastMessageRole: message.role,\n\t\t\t\tsource: \"maestro\",\n\t\t\t},\n\t\t\tevent: {\n\t\t\t\ttype: \"maestro.message.saved\",\n\t\t\t\tpayload: {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tmessageId: entry.id,\n\t\t\t\t\trole: message.role,\n\t\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tsaveThinkingLevelChange(thinkingLevel: string): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: ThinkingLevelChangeEntry = {\n\t\t\ttype: \"thinking_level_change\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tthinkingLevel,\n\t\t};\n\t\tthis.metadataCache.apply(entry);\n\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tsaveModelChange(model: string, metadata?: SessionModelMetadata): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: ModelChangeEntry = {\n\t\t\ttype: \"model_change\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tmodel,\n\t\t\tmodelMetadata: metadata,\n\t\t};\n\t\tthis.metadataCache.apply(entry);\n\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendCustomEntry(customType: string, data?: unknown): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: CustomEntry = {\n\t\t\ttype: \"custom\",\n\t\t\tcustomType,\n\t\t\tdata,\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendCustomMessageEntry<T = unknown>(\n\t\tcustomType: string,\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\tdisplay: boolean,\n\t\tdetails?: T,\n\t): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: CustomMessageEntry<T> = {\n\t\t\ttype: \"custom_message\",\n\t\t\tcustomType,\n\t\t\tcontent,\n\t\t\tdisplay,\n\t\t\tdetails,\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendBranchSummary(\n\t\tsummary: string,\n\t\toptions?: { fromId?: string; details?: unknown; fromHook?: boolean },\n\t): void {\n\t\tif (!this.enabled) return;\n\t\tconst fromId = options?.fromId ?? this.leafId ?? \"root\";\n\t\tconst entry: BranchSummaryEntry = {\n\t\t\ttype: \"branch_summary\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tfromId,\n\t\t\tsummary,\n\t\t\tdetails: options?.details,\n\t\t\tfromHook: options?.fromHook,\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendLabel(targetId: string, label: string | undefined): void {\n\t\tif (!this.byId.has(targetId)) {\n\t\t\tthrow new Error(`Entry ${targetId} not found`);\n\t\t}\n\t\tconst entry: LabelEntry = {\n\t\t\ttype: \"label\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\ttargetId,\n\t\t\tlabel,\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\t/**\n\t * Save a compaction event to the session file.\n\t */\n\tsaveCompaction(\n\t\tsummary: string,\n\t\tfirstKeptEntryIndex: number,\n\t\ttokensBefore: number,\n\t\toptions?: {\n\t\t\tauto?: boolean;\n\t\t\tcustomInstructions?: string;\n\t\t\tfirstKeptEntryId?: string;\n\t\t},\n\t): void {\n\t\tif (!this.enabled) return;\n\t\tconst context = this.buildSessionContext();\n\t\tconst resolvedEntry = options?.firstKeptEntryId\n\t\t\t? this.getEntry(options.firstKeptEntryId)\n\t\t\t: undefined;\n\t\tconst targetEntry =\n\t\t\tresolvedEntry ?? context.messageEntries[firstKeptEntryIndex];\n\t\tconst fallbackEntry = this.getEntries()[0];\n\t\tconst firstKeptEntryId =\n\t\t\ttargetEntry?.id ?? this.leafId ?? fallbackEntry?.id;\n\t\tif (!firstKeptEntryId) {\n\t\t\tlogger.warn(\"Failed to resolve compaction cut point; skipping save\");\n\t\t\treturn;\n\t\t}\n\t\tconst entry: CompactionEntry = {\n\t\t\ttype: \"compaction\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\tauto: options?.auto,\n\t\t\tcustomInstructions: options?.customInstructions,\n\t\t};\n\n\t\tthis.appendTreeEntry(entry);\n\t\tthis.writer?.flushSync();\n\t}\n\n\t/**\n\t * Find the most recent compaction entry in the current session.\n\t */\n\tfindLatestCompaction(): CompactionEntry | null {\n\t\tfor (let i = this.fileEntries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.fileEntries[i]!;\n\t\t\tif (entry.type === \"compaction\") {\n\t\t\t\treturn entry as CompactionEntry;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate getLatestThinkingLevel(): string | undefined {\n\t\tfor (let i = this.fileEntries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.fileEntries[i]!;\n\t\t\tif (entry.type === \"thinking_level_change\") {\n\t\t\t\treturn entry.thinkingLevel;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate getLatestModelChange(): ModelChangeEntry | undefined {\n\t\tfor (let i = this.fileEntries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.fileEntries[i]!;\n\t\t\tif (entry.type === \"model_change\") {\n\t\t\t\treturn entry as ModelChangeEntry;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate resolveModelMetadata(\n\t\tmodelKey: string,\n\t): SessionModelMetadata | undefined {\n\t\tconst registered = findRegisteredModel(modelKey);\n\t\treturn registered ? toSessionModelMetadata(registered) : undefined;\n\t}\n\n\tprivate appendSessionMetaEntry(\n\t\ttargetFile: string,\n\t\tmeta: {\n\t\t\tsummary?: string;\n\t\t\tresumeSummary?: string;\n\t\t\tmemoryExtractionHash?: string;\n\t\t\tfavorite?: boolean;\n\t\t\ttitle?: string;\n\t\t\ttags?: string[];\n\t\t\tarchived?: boolean;\n\t\t\tarchivedAt?: string;\n\t\t\tappServerGoal?: SessionMetaEntry[\"appServerGoal\"];\n\t\t},\n\t): void {\n\t\tif (!existsSync(targetFile)) return;\n\t\tif (\n\t\t\tmeta.summary === undefined &&\n\t\t\tmeta.resumeSummary === undefined &&\n\t\t\tmeta.memoryExtractionHash === undefined &&\n\t\t\tmeta.favorite === undefined &&\n\t\t\tmeta.title === undefined &&\n\t\t\tmeta.tags === undefined &&\n\t\t\tmeta.archived === undefined &&\n\t\t\tmeta.archivedAt === undefined &&\n\t\t\tmeta.appServerGoal === undefined\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst entry: SessionMetaEntry = {\n\t\t\ttype: \"session_meta\",\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t...meta,\n\t\t};\n\t\ttry {\n\t\t\tappendFileSync(targetFile, `${JSON.stringify(entry)}\\n`);\n\t\t\tif (resolve(targetFile) === this.sessionFile) {\n\t\t\t\tthis.fileEntries.push(entry);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to append session metadata\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate appendAttachmentExtractEntry(\n\t\ttargetFile: string,\n\t\tpayload: { attachmentId: string; extractedText: string },\n\t): AttachmentExtractedEntry | null {\n\t\tif (!existsSync(targetFile)) return null;\n\t\tif (!payload.attachmentId || !payload.extractedText) return null;\n\t\tconst entry: AttachmentExtractedEntry = {\n\t\t\ttype: \"attachment_extract\",\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tattachmentId: payload.attachmentId,\n\t\t\textractedText: payload.extractedText,\n\t\t};\n\t\ttry {\n\t\t\tappendFileSync(targetFile, `${JSON.stringify(entry)}\\n`);\n\t\t\treturn entry;\n\t\t} catch (error) {\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to append attachment extraction\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Persist extracted attachment text as an append-only cache entry.\n\t */\n\tsaveAttachmentExtraction(\n\t\tsessionPath: string,\n\t\tattachmentId: string,\n\t\ttext: string,\n\t): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tconst entry = this.appendAttachmentExtractEntry(sessionPath, {\n\t\t\tattachmentId,\n\t\t\textractedText: text,\n\t\t});\n\t\tif (entry && sessionPath === this.sessionFile) {\n\t\t\tthis.fileEntries.push(entry);\n\t\t}\n\t}\n\n\tsaveSessionSummary(summary: string, sessionPath?: string): void {\n\t\tconst trimmed = summary.trim();\n\t\tif (!trimmed) return;\n\t\tconst target = sessionPath ?? this.sessionFile;\n\t\tif (!target || !existsSync(target)) return;\n\t\tthis.appendSessionMetaEntry(target, { summary: trimmed });\n\t\tthis.syncSessionMemoryEntry(target);\n\t\tif (target === this.sessionFile) {\n\t\t\tqueueSharedMemoryUpdate({\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tstate: {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t\tsummary: trimmed,\n\t\t\t\t\tsource: \"maestro\",\n\t\t\t\t},\n\t\t\t\tevent: {\n\t\t\t\t\ttype: \"maestro.session.summary\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\t\tlength: trimmed.length,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tsaveSessionResumeSummary(summary: string, sessionPath?: string): void {\n\t\tconst trimmed = summary.trim();\n\t\tif (!trimmed) return;\n\t\tconst target = sessionPath ?? this.sessionFile;\n\t\tif (!target || !existsSync(target)) return;\n\t\tthis.appendSessionMetaEntry(target, { resumeSummary: trimmed });\n\t\tthis.syncSessionMemoryEntry(target);\n\t}\n\n\tsaveSessionMemoryExtractionHash(hash: string, sessionPath?: string): void {\n\t\tconst trimmed = hash.trim();\n\t\tif (!trimmed) return;\n\t\tconst target = sessionPath ?? this.sessionFile;\n\t\tif (!target || !existsSync(target)) return;\n\t\tthis.appendSessionMetaEntry(target, { memoryExtractionHash: trimmed });\n\t}\n\n\tsetSessionFavorite(sessionPath: string, favorite: boolean): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { favorite });\n\t}\n\n\tsetSessionTitle(sessionPath: string, title: string): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { title });\n\t\tthis.syncSessionMemoryEntry(sessionPath);\n\t}\n\n\tsetSessionTags(sessionPath: string, tags: string[]): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { tags });\n\t\tthis.syncSessionMemoryEntry(sessionPath);\n\t}\n\n\tsetSessionArchived(sessionPath: string, archived: boolean): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, {\n\t\t\tarchived,\n\t\t\tarchivedAt: archived ? new Date().toISOString() : undefined,\n\t\t});\n\t}\n\n\tsetSessionAppServerGoal(\n\t\tsessionPath: string,\n\t\tgoal: NonNullable<SessionMetaEntry[\"appServerGoal\"]> | null,\n\t): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { appServerGoal: goal });\n\t}\n\n\tprivate syncSessionMemoryEntry(sessionPath: string): void {\n\t\ttry {\n\t\t\tsyncSessionMemory(sessionPath);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to sync session memory\", {\n\t\t\t\tsessionPath,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\t}\n\n\tbuildSessionContext(\n\t\tleafId: string | null = this.leafId,\n\t): SessionContextSnapshot {\n\t\treturn buildSessionContextFromEntries(this.fileEntries, {\n\t\t\tleafId,\n\t\t\tbyId: this.byId,\n\t\t\theader: this.getHeader(),\n\t\t});\n\t}\n\n\tloadMessages(): AppMessage[] {\n\t\tconst context = this.buildSessionContext();\n\t\tconst extractedById = new Map<string, string>();\n\t\tfor (const entry of this.fileEntries) {\n\t\t\tif (entry.type === \"attachment_extract\") {\n\t\t\t\tif (entry.attachmentId && entry.extractedText) {\n\t\t\t\t\textractedById.set(entry.attachmentId, entry.extractedText);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (extractedById.size === 0) return context.messages;\n\t\treturn context.messages.map((message) =>\n\t\t\tapplyAttachmentExtracts(message, extractedById),\n\t\t);\n\t}\n\n\tloadThinkingLevel(): string {\n\t\treturn this.buildSessionContext().thinkingLevel;\n\t}\n\n\tloadModel(): string | null {\n\t\treturn this.buildSessionContext().model;\n\t}\n\n\tloadModelMetadata(): SessionModelMetadata | undefined {\n\t\tconst context = this.buildSessionContext();\n\t\treturn context.modelMetadata ?? this.lastModelMetadata;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn this.sessionInitialized;\n\t}\n\n\tcanCreateSession(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tgetSessionId(): string {\n\t\treturn this.sessionId;\n\t}\n\n\tgetSessionFile(): string {\n\t\treturn this.sessionFile;\n\t}\n\n\tgetPortableSessionBundle(): {\n\t\tselectedSessionId: string;\n\t\tsessions: PortableSessionExportSession[];\n\t} {\n\t\tconst records = this.buildPortableSessionRecords();\n\t\tconst byFile = new Map(\n\t\t\trecords.map((record) => [resolve(record.sessionFile), record]),\n\t\t);\n\t\tconst selected = byFile.get(resolve(this.sessionFile));\n\t\tif (!selected) {\n\t\t\treturn {\n\t\t\t\tselectedSessionId: this.sessionId,\n\t\t\t\tsessions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\t\tsessionFile: this.sessionFile,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\n\t\tconst byId = new Map(records.map((record) => [record.sessionId, record]));\n\t\tconst parentToChildren = new Map<string, PortableSessionExportRecord[]>();\n\t\tfor (const record of records) {\n\t\t\tif (!record.parentSessionId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst children = parentToChildren.get(record.parentSessionId) ?? [];\n\t\t\tchildren.push(record);\n\t\t\tparentToChildren.set(record.parentSessionId, children);\n\t\t}\n\t\tfor (const children of parentToChildren.values()) {\n\t\t\tchildren.sort((a, b) => a.timestamp.localeCompare(b.timestamp));\n\t\t}\n\n\t\tlet root = selected;\n\t\tconst visited = new Set<string>();\n\t\twhile (root.parentSessionId && !visited.has(root.sessionId)) {\n\t\t\tvisited.add(root.sessionId);\n\t\t\tconst parent = byId.get(root.parentSessionId);\n\t\t\tif (!parent) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\troot = parent;\n\t\t}\n\n\t\tconst ordered: PortableSessionExportSession[] = [];\n\t\tconst queue: PortableSessionExportRecord[] = [root];\n\t\tconst enqueued = new Set<string>([root.sessionId]);\n\t\twhile (queue.length > 0) {\n\t\t\tconst current = queue.shift();\n\t\t\tif (!current) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tordered.push({\n\t\t\t\tsessionId: current.sessionId,\n\t\t\t\tparentSessionId: current.parentSessionId,\n\t\t\t\tsessionFile: current.sessionFile,\n\t\t\t});\n\t\t\tfor (const child of parentToChildren.get(current.sessionId) ?? []) {\n\t\t\t\tif (enqueued.has(child.sessionId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tenqueued.add(child.sessionId);\n\t\t\t\tqueue.push(child);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tselectedSessionId: selected.sessionId,\n\t\t\tsessions: ordered,\n\t\t};\n\t}\n\n\tgetLeafId(): string | null {\n\t\treturn this.leafId;\n\t}\n\n\tgetLeafEntry(): SessionTreeEntry | undefined {\n\t\treturn this.leafId ? this.byId.get(this.leafId) : undefined;\n\t}\n\n\tgetEntry(id: string): SessionTreeEntry | undefined {\n\t\treturn this.byId.get(id);\n\t}\n\n\tgetLabel(id: string): string | undefined {\n\t\treturn this.labelsById.get(id);\n\t}\n\n\tgetChildren(parentId: string): SessionTreeEntry[] {\n\t\tconst children: SessionTreeEntry[] = [];\n\t\tfor (const entry of this.byId.values()) {\n\t\t\tif (entry.parentId === parentId) {\n\t\t\t\tchildren.push(entry);\n\t\t\t}\n\t\t}\n\t\treturn children;\n\t}\n\n\tgetBranch(fromId?: string | null): SessionTreeEntry[] {\n\t\tconst path: SessionTreeEntry[] = [];\n\t\tconst startId = fromId ?? this.leafId;\n\t\tlet current = startId ? this.byId.get(startId) : undefined;\n\t\twhile (current) {\n\t\t\tpath.unshift(current);\n\t\t\tcurrent = current.parentId ? this.byId.get(current.parentId) : undefined;\n\t\t}\n\t\treturn path;\n\t}\n\n\tgetEntries(): SessionTreeEntry[] {\n\t\treturn this.fileEntries.filter(isSessionTreeEntry);\n\t}\n\n\tgetHeader(): SessionHeaderEntry | null {\n\t\tconst header = this.fileEntries.find((e) => e.type === \"session\");\n\t\treturn header ? (header as SessionHeaderEntry) : null;\n\t}\n\n\tgetTree(): SessionTreeNode[] {\n\t\tconst entries = this.getEntries();\n\t\tconst nodeMap = new Map<string, SessionTreeNode>();\n\t\tconst roots: SessionTreeNode[] = [];\n\n\t\tfor (const entry of entries) {\n\t\t\tconst label = this.labelsById.get(entry.id);\n\t\t\tnodeMap.set(entry.id, { entry, children: [], label });\n\t\t}\n\n\t\tfor (const entry of entries) {\n\t\t\tconst node = nodeMap.get(entry.id);\n\t\t\tif (!node) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.parentId === null || entry.parentId === entry.id) {\n\t\t\t\troots.push(node);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parent = nodeMap.get(entry.parentId);\n\t\t\tif (parent) {\n\t\t\t\tparent.children.push(node);\n\t\t\t} else {\n\t\t\t\troots.push(node);\n\t\t\t}\n\t\t}\n\n\t\tconst stack: SessionTreeNode[] = [...roots];\n\t\twhile (stack.length > 0) {\n\t\t\tconst node = stack.pop();\n\t\t\tif (!node) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnode.children.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\tnew Date(a.entry.timestamp).getTime() -\n\t\t\t\t\tnew Date(b.entry.timestamp).getTime(),\n\t\t\t);\n\t\t\tstack.push(...node.children);\n\t\t}\n\n\t\treturn roots;\n\t}\n\n\tbranch(branchFromId: string): void {\n\t\tif (!this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t}\n\n\tbranchWithSummary(\n\t\tbranchFromId: string | null,\n\t\tsummary: string,\n\t\toptions?: { fromId?: string; details?: unknown; fromHook?: boolean },\n\t): string {\n\t\tif (branchFromId !== null && !this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t\tconst entry: BranchSummaryEntry = {\n\t\t\ttype: \"branch_summary\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: branchFromId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tfromId: options?.fromId ?? branchFromId ?? \"root\",\n\t\t\tsummary,\n\t\t\tdetails: options?.details,\n\t\t\tfromHook: options?.fromHook,\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\tresetLeaf(): void {\n\t\tthis.leafId = null;\n\t}\n\n\tupdateSnapshot(state: AgentState, metadata?: SessionModelMetadata): void {\n\t\tthis._agentSnapshot = state;\n\t\tif (metadata) {\n\t\t\tthis.lastModelMetadata = metadata;\n\t\t}\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.writer?.flush();\n\t}\n\n\t/**\n\t * Load all sessions for the current directory with metadata\n\t */\n\tloadAllSessions(): SessionMetadata[] {\n\t\treturn this.catalog.loadAllSessions();\n\t}\n\n\tgetSessionFileById(sessionId: string): string | null {\n\t\treturn this.catalog.getSessionFileById(sessionId);\n\t}\n\n\tasync loadEntries(sessionId: string): Promise<SessionEntry[] | null> {\n\t\tconst sessionFile = this.getSessionFileById(sessionId);\n\t\tif (!sessionFile) {\n\t\t\treturn null;\n\t\t}\n\t\treturn safeReadSessionEntries(sessionFile);\n\t}\n\n\t/**\n\t * Set the session file to an existing session\n\t */\n\tsetSessionFile(path: string): void {\n\t\t// Unregister old session file before disposing writer\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\n\t\tthis.sessionFile = resolve(path);\n\t\t// Register new session file to prevent migration race conditions\n\t\tregisterActiveSessionFile(this.sessionFile);\n\t\tscheduleSessionMigration();\n\n\t\tif (existsSync(this.sessionFile)) {\n\t\t\tconst entries = safeReadSessionEntries(this.sessionFile);\n\t\t\tconst migrated = migrateToCurrentVersion(entries);\n\t\t\tthis.fileEntries = entries;\n\t\t\tconst header = entries.find((e) => e.type === \"session\") as\n\t\t\t\t| SessionHeaderEntry\n\t\t\t\t| undefined;\n\t\t\tthis.sessionInitialized = Boolean(header && header.provisional !== true);\n\t\t\tthis.rebuildIndex(entries);\n\t\t\tif (migrated) {\n\t\t\t\tthis.rewriteSessionFile();\n\t\t\t}\n\t\t\tthis.sessionId = header?.id ?? uuidv4();\n\t\t\tthis.flushed = true;\n\t\t\tthis.metadataCache.seedFromFile(this.sessionFile);\n\t\t} else {\n\t\t\t// Unregister the non-existent path before initNewSession registers a new one\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t\tthis.initNewSession();\n\t\t}\n\t\tthis.initializeWriter();\n\t}\n\n\t/**\n\t * Check if we should initialize the session based on message history.\n\t * Session is initialized once we have at least 1 user message.\n\t */\n\tshouldInitializeSession(messages: AppMessage[]): boolean {\n\t\tif (this.sessionInitialized) return false;\n\n\t\tconst userMessages = messages.filter((m) => m.role === \"user\");\n\t\treturn userMessages.length >= 1;\n\t}\n\n\t/**\n\t * Create a branched session from a specific message index.\n\t * Returns the new session file path.\n\t * @param state - Current agent state\n\t * @param branchFromIndex - Index of the last message to include in the branch (exclusive)\n\t */\n\tcreateBranchedSession(state: AgentState, branchFromIndex: number): string;\n\t/**\n\t * Create a branched session from a specific tree entry id.\n\t */\n\tcreateBranchedSession(leafId: string): string;\n\tcreateBranchedSession(\n\t\tstateOrLeafId: AgentState | string,\n\t\tbranchFromIndex?: number,\n\t): string {\n\t\tif (typeof stateOrLeafId === \"string\") {\n\t\t\treturn this.createBranchedSessionFromLeaf(stateOrLeafId);\n\t\t}\n\t\tif (typeof branchFromIndex !== \"number\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"branchFromIndex is required when branching from AgentState\",\n\t\t\t);\n\t\t}\n\t\treturn this.createBranchedSessionFromState(stateOrLeafId, branchFromIndex);\n\t}\n\n\tprivate createBranchedSessionFromLeaf(leafId: string): string {\n\t\treturn createBranchedSessionFromLeafFn(leafId, {\n\t\t\tsessionDir: this.sessionDir,\n\t\t\tsessionId: this.sessionId,\n\t\t\tsessionFile: this.sessionFile,\n\t\t\tbranch: this.getBranch(leafId),\n\t\t\tcontext: this.buildSessionContext(leafId),\n\t\t\theader: this.getHeader(),\n\t\t\tlabelsById: this.labelsById,\n\t\t});\n\t}\n\n\tprivate createBranchedSessionFromState(\n\t\tstate: AgentState,\n\t\tbranchFromIndex: number,\n\t): string {\n\t\treturn createBranchedSessionFromStateFn(state, branchFromIndex, {\n\t\t\tsessionDir: this.sessionDir,\n\t\t\tsessionId: this.sessionId,\n\t\t\tsessionFile: this.sessionFile,\n\t\t\tlastModelMetadata: this.lastModelMetadata,\n\t\t});\n\t}\n\n\t/**\n\t * List all sessions in the session directory\n\t */\n\tasync listSessions(options?: {\n\t\tlimit?: number;\n\t\toffset?: number;\n\t}): Promise<SessionSummary[]> {\n\t\treturn this.catalog.listSessions(options);\n\t}\n\n\t/**\n\t * Load a session by ID\n\t */\n\tasync loadSession(\n\t\tsessionId: string,\n\t\toptions: { messagesView?: SessionMessagesView } = {},\n\t): Promise<{\n\t\tid: string;\n\t\tsubject?: string;\n\t\ttitle?: string;\n\t\tsummary?: string;\n\t\tresumeSummary?: string;\n\t\tmessages: AppMessage[];\n\t\tcreatedAt: string;\n\t\tupdatedAt: string;\n\t\tmessageCount: number;\n\t\tfavorite: boolean;\n\t\ttags?: string[];\n\t\tarchived?: boolean;\n\t\tarchivedAt?: string;\n\t\tmessagesView: SessionMessagesView;\n\t} | null> {\n\t\treturn this.catalog.loadSession(sessionId, options);\n\t}\n\n\t/**\n\t * Create a new session\n\t */\n\tasync createSession(options?: { title?: string }): Promise<{\n\t\tid: string;\n\t\ttitle?: string;\n\t\tresumeSummary?: string;\n\t\tmessages: AppMessage[];\n\t\tcreatedAt: string;\n\t\tupdatedAt: string;\n\t\tmessageCount: number;\n\t}> {\n\t\tthis.startFreshSession();\n\t\tconst now = new Date().toISOString();\n\t\tconst header: SessionHeaderEntry = {\n\t\t\ttype: \"session\",\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tid: this.sessionId,\n\t\t\ttimestamp: now,\n\t\t\tcwd: process.cwd(),\n\t\t\tprovisional: true,\n\t\t};\n\t\tthis.fileEntries.unshift(header);\n\n\t\tif (options?.title && this.enabled) {\n\t\t\tconst entry: SessionMetaEntry = {\n\t\t\t\ttype: \"session_meta\",\n\t\t\t\ttimestamp: now,\n\t\t\t\ttitle: options.title,\n\t\t\t};\n\t\t\tthis.fileEntries.push(entry);\n\t\t}\n\t\tthis.rewriteSessionFile();\n\t\tthis.flushed = true;\n\t\tthis.sessionInitialized = false;\n\n\t\treturn {\n\t\t\tid: this.sessionId,\n\t\t\ttitle: options?.title,\n\t\t\tmessages: [],\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now,\n\t\t\tmessageCount: 0,\n\t\t};\n\t}\n\n\timportSessionJsonl(sourcePath: string): PortableSessionImportResult {\n\t\tconst resolvedSource = resolve(sourcePath);\n\t\tif (!existsSync(resolvedSource)) {\n\t\t\tthrow new Error(`Session file not found: ${resolvedSource}`);\n\t\t}\n\n\t\tconst entries = safeReadSessionEntries(resolvedSource);\n\t\treturn this.importPortableEntries(entries);\n\t}\n\n\timportSessionEntries(entries: SessionEntry[]): PortableSessionImportResult {\n\t\treturn this.importPortableEntries([...entries]);\n\t}\n\n\timportPortableSession(sourcePath: string): {\n\t\tsessionFile: string;\n\t\tsessionId: string;\n\t\timportedCount: number;\n\t} {\n\t\tconst resolvedSource = resolve(sourcePath);\n\t\tif (!existsSync(resolvedSource)) {\n\t\t\tthrow new Error(`Session file not found: ${resolvedSource}`);\n\t\t}\n\n\t\tconst extension = extname(resolvedSource).toLowerCase();\n\t\tif (extension === \".json\") {\n\t\t\tconst portableExport = this.readPortableJsonExport(resolvedSource);\n\t\t\tif (portableExport.sessions?.length) {\n\t\t\t\treturn this.importPortableSessionBundle(portableExport);\n\t\t\t}\n\t\t\tif (portableExport.entries) {\n\t\t\t\treturn this.importPortableEntries(portableExport.entries);\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t\"Portable session export is missing both entries and sessions.\",\n\t\t\t);\n\t\t}\n\n\t\tconst entries = safeReadSessionEntries(resolvedSource);\n\t\treturn this.importPortableEntries(entries);\n\t}\n\n\t/**\n\t * Delete a session\n\t */\n\tasync deleteSession(sessionId: string): Promise<void> {\n\t\tthis.catalog.deleteSession(sessionId);\n\t}\n\n\t/**\n\t * Prune old sessions based on configured limits.\n\t * Removes sessions that exceed MAX_SESSIONS count or MAX_SESSION_AGE_DAYS.\n\t * Favorites are never pruned.\n\t * Returns the number of sessions removed.\n\t */\n\tpruneSessions(): { removed: number; errors: number } {\n\t\treturn this.catalog.pruneSessions();\n\t}\n\n\tprivate importPortableEntries(\n\t\tentries: SessionEntry[],\n\t): PortableSessionImportResult {\n\t\tmigrateToCurrentVersion(entries);\n\t\tif (entries.length === 0) {\n\t\t\tthrow new Error(\"Imported session file is empty or unreadable.\");\n\t\t}\n\n\t\tconst headerIndex = entries.findIndex((entry) => entry.type === \"session\");\n\t\tif (headerIndex < 0) {\n\t\t\tthrow new Error(\"Imported session file is missing a session header.\");\n\t\t}\n\n\t\tconst header = entries[headerIndex] as SessionHeaderEntry;\n\t\tlet sessionId = header.id?.trim() || uuidv4();\n\t\tif (this.catalog.getSessionFileById(sessionId)) {\n\t\t\tsessionId = uuidv4();\n\t\t}\n\n\t\tconst timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n\t\tconst targetFile = join(this.sessionDir, `${timestamp}_${sessionId}.jsonl`);\n\t\tconst importedHeader: SessionHeaderEntry = {\n\t\t\t...header,\n\t\t\tid: sessionId,\n\t\t\tsubject: undefined,\n\t\t};\n\t\tconst importedEntries = entries.map((entry, index) =>\n\t\t\tindex === headerIndex ? importedHeader : entry,\n\t\t);\n\n\t\twriteFileSync(\n\t\t\ttargetFile,\n\t\t\t`${importedEntries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`,\n\t\t\t\"utf8\",\n\t\t);\n\n\t\treturn {\n\t\t\tsessionFile: targetFile,\n\t\t\tsessionId,\n\t\t\timportedCount: 1,\n\t\t};\n\t}\n\n\tprivate importPortableSessionBundle(\n\t\tportableExport: PortableSessionBundle,\n\t): PortableSessionImportResult {\n\t\tconst sessions = portableExport.sessions;\n\t\tif (!sessions?.length) {\n\t\t\tthrow new Error(\"Portable session export is missing bundled sessions.\");\n\t\t}\n\n\t\tconst pending = new Map(\n\t\t\tsessions.map((session) => [session.sessionId, session]),\n\t\t);\n\t\tconst importedIds = new Map<string, string>();\n\t\tconst importedFiles = new Map<string, string>();\n\t\tconst ordered: PortableSessionExportSession[] = [];\n\n\t\twhile (pending.size > 0) {\n\t\t\tlet progressed = false;\n\t\t\tfor (const [sessionId, session] of pending) {\n\t\t\t\tif (session.parentSessionId && pending.has(session.parentSessionId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tordered.push(session);\n\t\t\t\tpending.delete(sessionId);\n\t\t\t\tprogressed = true;\n\t\t\t}\n\t\t\tif (!progressed) {\n\t\t\t\tordered.push(...pending.values());\n\t\t\t\tpending.clear();\n\t\t\t}\n\t\t}\n\n\t\tfor (const session of ordered) {\n\t\t\tconst entries = session.entries ? [...session.entries] : [];\n\t\t\tmigrateToCurrentVersion(entries);\n\t\t\tif (entries.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Bundled session ${session.sessionId} is empty or unreadable.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst headerIndex = entries.findIndex(\n\t\t\t\t(entry) => entry.type === \"session\",\n\t\t\t);\n\t\t\tif (headerIndex < 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Bundled session ${session.sessionId} is missing a session header.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst header = entries[headerIndex] as SessionHeaderEntry;\n\t\t\tlet importedSessionId = header.id?.trim() || uuidv4();\n\t\t\tif (this.catalog.getSessionFileById(importedSessionId)) {\n\t\t\t\timportedSessionId = uuidv4();\n\t\t\t}\n\t\t\tconst timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n\t\t\tconst targetFile = join(\n\t\t\t\tthis.sessionDir,\n\t\t\t\t`${timestamp}_${importedSessionId}.jsonl`,\n\t\t\t);\n\t\t\tconst importedParentSessionId = session.parentSessionId\n\t\t\t\t? importedIds.get(session.parentSessionId)\n\t\t\t\t: undefined;\n\t\t\tconst importedHeader: SessionHeaderEntry = {\n\t\t\t\t...header,\n\t\t\t\tid: importedSessionId,\n\t\t\t\tsubject: undefined,\n\t\t\t\tparentSession: importedParentSessionId,\n\t\t\t\tbranchedFrom: session.parentSessionId\n\t\t\t\t\t? importedFiles.get(session.parentSessionId)\n\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t\tconst importedEntries = entries.map((entry, index) =>\n\t\t\t\tindex === headerIndex ? importedHeader : entry,\n\t\t\t);\n\n\t\t\twriteFileSync(\n\t\t\t\ttargetFile,\n\t\t\t\t`${importedEntries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`,\n\t\t\t\t\"utf8\",\n\t\t\t);\n\t\t\timportedIds.set(session.sessionId, importedSessionId);\n\t\t\timportedFiles.set(session.sessionId, targetFile);\n\t\t}\n\n\t\tconst selectedSourceSessionId =\n\t\t\tportableExport.sessionId ?? sessions[0]?.sessionId;\n\t\tconst selectedSessionId =\n\t\t\t(selectedSourceSessionId\n\t\t\t\t? importedIds.get(selectedSourceSessionId)\n\t\t\t\t: undefined) ?? importedIds.get(sessions[0]!.sessionId)!;\n\t\tconst selectedSessionFile =\n\t\t\timportedFiles.get(selectedSourceSessionId ?? sessions[0]!.sessionId) ??\n\t\t\timportedFiles.get(sessions[0]!.sessionId)!;\n\n\t\treturn {\n\t\t\tsessionFile: selectedSessionFile,\n\t\t\tsessionId: selectedSessionId,\n\t\t\timportedCount: ordered.length,\n\t\t};\n\t}\n\n\tprivate readPortableJsonExport(sourcePath: string): PortableSessionBundle {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(readFileSync(sourcePath, \"utf8\"));\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Portable session export is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"Portable session export must be a JSON object.\");\n\t\t}\n\n\t\tconst portableExport = parsed as {\n\t\t\tformat?: unknown;\n\t\t\tsessionId?: unknown;\n\t\t\tentries?: unknown;\n\t\t\tsessions?: unknown;\n\t\t};\n\t\tconst format =\n\t\t\ttypeof portableExport.format === \"string\"\n\t\t\t\t? portableExport.format\n\t\t\t\t: undefined;\n\t\tif (format !== PORTABLE_SESSION_EXPORT_FORMAT) {\n\t\t\tthrow new Error(\n\t\t\t\t`Portable session export format must be ${PORTABLE_SESSION_EXPORT_FORMAT}.`,\n\t\t\t);\n\t\t}\n\n\t\tconst parseEntries = (entries: unknown[], path: string): SessionEntry[] =>\n\t\t\tentries.map((entry, index) => {\n\t\t\t\tconst parsedEntry = tryParseSessionEntry(JSON.stringify(entry));\n\t\t\t\tif (!parsedEntry) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${path} contains an invalid entry at index ${index}.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn parsedEntry;\n\t\t\t});\n\n\t\tconst entries = Array.isArray(portableExport.entries)\n\t\t\t? parseEntries(portableExport.entries, \"Portable session export\")\n\t\t\t: undefined;\n\t\tconst sessions = Array.isArray(portableExport.sessions)\n\t\t\t? portableExport.sessions.map((session, index) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!session ||\n\t\t\t\t\t\ttypeof session !== \"object\" ||\n\t\t\t\t\t\tArray.isArray(session)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Portable session export contains an invalid bundled session at index ${index}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst parsedSession = session as {\n\t\t\t\t\t\tsessionId?: unknown;\n\t\t\t\t\t\tparentSessionId?: unknown;\n\t\t\t\t\t\tentries?: unknown;\n\t\t\t\t\t};\n\t\t\t\t\tif (typeof parsedSession.sessionId !== \"string\") {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Portable session export is missing a sessionId for bundled session ${index}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!Array.isArray(parsedSession.entries)) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Portable session export is missing entries for bundled session ${parsedSession.sessionId}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsessionId: parsedSession.sessionId,\n\t\t\t\t\t\tparentSessionId:\n\t\t\t\t\t\t\ttypeof parsedSession.parentSessionId === \"string\"\n\t\t\t\t\t\t\t\t? parsedSession.parentSessionId\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tsessionFile: join(\n\t\t\t\t\t\t\tthis.sessionDir,\n\t\t\t\t\t\t\t`${parsedSession.sessionId}.jsonl`,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tentries: parseEntries(\n\t\t\t\t\t\t\tparsedSession.entries,\n\t\t\t\t\t\t\t`Bundled session ${parsedSession.sessionId}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t} satisfies PortableSessionExportSession;\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\tif (!entries && !sessions?.length) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Portable session export is missing both entries and bundled sessions.\",\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tformat,\n\t\t\texportedAt:\n\t\t\t\ttypeof (portableExport as { exportedAt?: unknown }).exportedAt ===\n\t\t\t\t\"string\"\n\t\t\t\t\t? (portableExport as { exportedAt: string }).exportedAt\n\t\t\t\t\t: new Date().toISOString(),\n\t\t\tsessionId:\n\t\t\t\ttypeof portableExport.sessionId === \"string\"\n\t\t\t\t\t? portableExport.sessionId\n\t\t\t\t\t: undefined,\n\t\t\tentries,\n\t\t\tsessions,\n\t\t};\n\t}\n\n\tprivate buildPortableSessionRecords(): PortableSessionExportRecord[] {\n\t\tconst records: PortableSessionExportRecord[] = [];\n\t\tconst filePaths = readdirSync(this.sessionDir)\n\t\t\t.filter((fileName) => fileName.endsWith(\".jsonl\"))\n\t\t\t.map((fileName) => resolve(join(this.sessionDir, fileName)));\n\n\t\tfor (const filePath of filePaths) {\n\t\t\tconst entries = safeReadSessionEntries(filePath);\n\t\t\tconst header = entries.find((entry) => entry.type === \"session\") as\n\t\t\t\t| SessionHeaderEntry\n\t\t\t\t| undefined;\n\t\t\tif (!header?.id) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trecords.push({\n\t\t\t\tsessionId: header.id,\n\t\t\t\tsessionFile: filePath,\n\t\t\t\ttimestamp: header.timestamp,\n\t\t\t\tparentSessionId: header.parentSession,\n\t\t\t\tparentSessionFile: header.branchedFrom\n\t\t\t\t\t? resolve(header.branchedFrom)\n\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t}\n\n\t\tconst byPath = new Map(\n\t\t\trecords.map((record) => [resolve(record.sessionFile), record]),\n\t\t);\n\t\tfor (const record of records) {\n\t\t\tif (!record.parentSessionId && record.parentSessionFile) {\n\t\t\t\trecord.parentSessionId = byPath.get(\n\t\t\t\t\tresolve(record.parentSessionFile),\n\t\t\t\t)?.sessionId;\n\t\t\t}\n\t\t}\n\n\t\trecords.sort((a, b) => a.timestamp.localeCompare(b.timestamp));\n\t\treturn records;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/session/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACN,cAAc,EACd,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,aAAa,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAOpC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,kCAAkC,EAAE,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACN,oBAAoB,GAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,2BAA2B,GAC3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACN,6BAA6B,IAAI,+BAA+B,EAChE,8BAA8B,IAAI,gCAAgC,GAClE,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAEN,8BAA8B,EAC9B,eAAe,EACf,sBAAsB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACN,uBAAuB,EACvB,yBAAyB,GACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGN,uBAAuB,EAgBvB,wCAAwC,EACxC,kBAAkB,EAClB,oBAAoB,GACpB,MAAM,YAAY,CAAC;AASpB,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AA+CnE,OAAO,EACN,iBAAiB,EACjB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACxB,2BAA2B,GAC3B,MAAM,gBAAgB,CAAC;AAExB,MAAM,UAAU,sBAAsB,CACrC,KAAsB;IAEtB,OAAO;QACN,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC5C,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAChC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,OAAO,CAC9D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IAgC1B;;;;;;OAMG;IACH,YACC,eAAe,GAAG,KAAK,EACvB,iBAA0B,EAC1B,UAAiC,EAAE;QA/BpC,wEAAwE;QAChE,YAAO,GAAG,IAAI,CAAC;QACvB,kDAAkD;QAC1C,uBAAkB,GAAG,KAAK,CAAC;QAOnC,6CAA6C;QACrC,kBAAa,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAG3C,gBAAW,GAAmB,EAAE,CAAC;QACjC,SAAI,GAAkC,IAAI,GAAG,EAAE,CAAC;QAChD,eAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC5C,WAAM,GAAkB,IAAI,CAAC;QAC7B,YAAO,GAAG,KAAK,CAAC;QAChB,yBAAoB,GAAG,KAAK,CAAC;QAcpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;YAC1C,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS;SACzC,CAAC,CAAC;QAEH,IAAI,iBAAiB,EAAE,CAAC;YACvB,+BAA+B;YAC/B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,EAAE,CAAC;YAC1D,IAAI,UAAU,EAAE,CAAC;gBAChB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,CAAC;QACF,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC;IACF,CAAC;IAED,qDAAqD;IACrD,OAAO;QACN,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,2CAA2C;QAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;IAEO,gBAAgB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;IAEO,mBAAmB;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC;QAE5E,MAAM,YAAY,GACjB,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC;YACvC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,OAAO,GACZ,YAAY;YACZ,cAAc,CAAC,WAAW;YAC1B,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;QAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY;YAC9B,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,CAAC,CAAC,EAAE,CAAC;QACN,MAAM,UAAU,GAAG,KAAK;YACvB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,UAAU,CAAC;IACnB,CAAC;IAEO,cAAc;QACrB,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,IAAI,CACtB,IAAI,CAAC,UAAU,EACf,GAAG,SAAS,IAAI,IAAI,CAAC,SAAS,QAAQ,CACtC,CAAC;QACF,iEAAiE;QACjE,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QACnC,sDAAsD;QACtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,sDAAsD;QACtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;QAEnC,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAEO,+BAA+B;QACtC,IAAI,CAAC;YACJ,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;iBACxC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;iBACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACZ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK;aAC/C,CAAC,CAAC;iBACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAExD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAEO,YAAY,CAAC,OAAuB;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAElC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;gBAAE,SAAS;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACP,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;YAClC,CAAC;QACF,CAAC;IACF,CAAC;IAEO,kBAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC/C,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACjF,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEO,YAAY,CAAC,KAAmB;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC/D,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAErC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,OAAO;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEO,eAAe,CAAC,KAAuB;QAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAEO,iBAAiB;QACxB,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,KAAiB,EAAE,OAA8B;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO;QAErD,MAAM,iBAAiB,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACtE,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,EAAE,KAAK,IAAI,iBAAiB,CAAC;QACtE,MAAM,eAAe,GACpB,iBAAiB,EAAE,aAAa;YAChC,CAAC,eAAe,KAAK,iBAAiB;gBACrC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,KAAwB,CAAC;gBACxD,CAAC,CAAC,SAAS,CAAC,CAAC;QACf,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;QACpE,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CACxD,CAAC,QAAQ,EAAE,EAAE,CACZ,QAAQ,CAAC,IAAI,KAAK,SAAS;YAC3B,QAAQ,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS;YAC9B,QAAQ,CAAC,WAAW,KAAK,IAAI,CAC9B,CAAC;QACF,MAAM,iBAAiB,GACtB,sBAAsB,IAAI,CAAC;YAC1B,CAAC,CAAE,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAwB;YAClE,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,SAAS,GAAG,iBAAiB,EAAE,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3E,MAAM,KAAK,GAAuB;YACjC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,uBAAuB;YAChC,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,SAAS;YACT,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,SAAS;YACtC,KAAK,EAAE,eAAe;YACtB,aAAa,EAAE,eAAe,IAAI,gBAAgB;YAClD,aAAa,EAAE,mBAAmB,IAAI,KAAK,CAAC,aAAa;YACzD,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,qBAAqB,EAAE,wCAAwC,CAAC,KAAK,CAAC;YACtE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;YACpD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;aAC7B,CAAC,CAAC;SACH,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,sBAAsB,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAE/B,IAAI,sBAAsB,IAAI,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,uBAAuB,CAAC;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE;gBACN,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;gBAClB,KAAK,EAAE,eAAe;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,SAAS;aACjB;YACD,KAAK,EAAE;gBACN,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE;oBACR,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,KAAK,EAAE,eAAe;oBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC1B;aACD;SACD,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YAC1B,kCAAkC,CAAC;gBAClC,eAAe,EAAE,KAAK,CAAC,cAAc;gBACrC,WAAW,EAAE;oBACZ,UAAU,EAAE,IAAI,CAAC,SAAS;iBAC1B;gBACD,WAAW,EAAE,KAAK,CAAC,SAAS;aAC5B,CAAC,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,IACC,cAAc,CAAC,YAAY,GAAG,CAAC;YAC/B,cAAc,CAAC,oBAAoB,GAAG,CAAC,EACtC,CAAC;YACF,UAAU,CAAC,GAAG,EAAE;gBACf,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpC,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;wBACxB,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;oBAC9C,CAAC;gBACF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,CAAC,KAAK,CACX,2BAA2B,EAC3B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC1C,CAAC;gBACH,CAAC;YACF,CAAC,EAAE,IAAI,CAAC,CAAC;QACV,CAAC;IACF,CAAC;IAED,WAAW,CAAC,OAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAwB;YAClC,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,gBAAgB;SACzB,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5B,uBAAuB,CAAC;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE;gBACN,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,aAAa,EAAE,KAAK,CAAC,EAAE;gBACvB,eAAe,EAAE,OAAO,CAAC,IAAI;gBAC7B,MAAM,EAAE,SAAS;aACjB;YACD,KAAK,EAAE;gBACN,IAAI,EAAE,uBAAuB;gBAC7B,OAAO,EAAE;oBACR,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,KAAK,CAAC,EAAE;oBACnB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC1B;aACD;SACD,CAAC,CAAC;IACJ,CAAC;IAED,uBAAuB,CAAC,aAAqB;QAC5C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,KAAK,GAA6B;YACvC,IAAI,EAAE,uBAAuB;YAC7B,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,aAAa;SACb,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,QAA+B;QAC7D,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAqB;YAC/B,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,KAAK;YACL,aAAa,EAAE,QAAQ;SACvB,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEhC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,iBAAiB,CAAC,UAAkB,EAAE,IAAc;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,KAAK,GAAgB;YAC1B,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,IAAI;YACJ,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,wBAAwB,CACvB,UAAkB,EAClB,OAAgD,EAChD,OAAgB,EAChB,OAAW;QAEX,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,KAAK,GAA0B;YACpC,IAAI,EAAE,gBAAgB;YACtB,UAAU;YACV,OAAO;YACP,OAAO;YACP,OAAO;YACP,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnC,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,mBAAmB,CAClB,OAAe,EACf,OAAoE;QAEpE,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC;QACxD,MAAM,KAAK,GAAuB;YACjC,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;YACN,OAAO;YACP,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC3B,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,KAAyB;QACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,SAAS,QAAQ,YAAY,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,KAAK,GAAe;YACzB,IAAI,EAAE,OAAO;YACb,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ;YACR,KAAK;SACL,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,cAAc,CACb,OAAe,EACf,mBAA2B,EAC3B,YAAoB,EACpB,OAIC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,OAAO,EAAE,gBAAgB;YAC9C,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,WAAW,GAChB,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GACrB,WAAW,EAAE,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa,EAAE,EAAE,CAAC;QACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAoB;YAC9B,IAAI,EAAE,YAAY;YAClB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO;YACP,gBAAgB;YAChB,YAAY;YACZ,IAAI,EAAE,OAAO,EAAE,IAAI;YACnB,kBAAkB,EAAE,OAAO,EAAE,kBAAkB;SAC/C,CAAC;QAEF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,oBAAoB;QACnB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACjC,OAAO,KAAwB,CAAC;YACjC,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,sBAAsB;QAC7B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC,aAAa,CAAC;YAC5B,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,oBAAoB;QAC3B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,OAAO,KAAyB,CAAC;YAClC,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAEO,oBAAoB,CAC3B,QAAgB;QAEhB,MAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,CAAC;IAEO,sBAAsB,CAC7B,UAAkB,EAClB,IAUC;QAED,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO;QACpC,IACC,IAAI,CAAC,OAAO,KAAK,SAAS;YAC1B,IAAI,CAAC,aAAa,KAAK,SAAS;YAChC,IAAI,CAAC,oBAAoB,KAAK,SAAS;YACvC,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3B,IAAI,CAAC,KAAK,KAAK,SAAS;YACxB,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,QAAQ,KAAK,SAAS;YAC3B,IAAI,CAAC,UAAU,KAAK,SAAS;YAC7B,IAAI,CAAC,aAAa,KAAK,SAAS,EAC/B,CAAC;YACF,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAqB;YAC/B,IAAI,EAAE,cAAc;YACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,IAAI;SACP,CAAC;QACF,IAAI,CAAC;YACJ,cAAc,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CACX,mCAAmC,EACnC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;QACH,CAAC;IACF,CAAC;IAEO,4BAA4B,CACnC,UAAkB,EAClB,OAAwD;QAExD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACjE,MAAM,KAAK,GAA6B;YACvC,IAAI,EAAE,oBAAoB;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;SACpC,CAAC;QACF,IAAI,CAAC;YACJ,cAAc,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO,KAAK,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CACX,wCAAwC,EACxC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,wBAAwB,CACvB,WAAmB,EACnB,YAAoB,EACpB,IAAY;QAEZ,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,WAAW,EAAE;YAC5D,YAAY;YACZ,aAAa,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,KAAK,IAAI,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAED,kBAAkB,CAAC,OAAe,EAAE,WAAoB;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAC3C,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,uBAAuB,CAAC;gBACvB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE;oBACN,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,SAAS;iBACjB;gBACD,KAAK,EAAE;oBACN,IAAI,EAAE,yBAAyB;oBAC/B,OAAO,EAAE;wBACR,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,MAAM,EAAE,OAAO,CAAC,MAAM;qBACtB;iBACD;aACD,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,wBAAwB,CAAC,OAAe,EAAE,WAAoB;QAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAC3C,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,+BAA+B,CAAC,IAAY,EAAE,WAAoB;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC;QAC/C,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAC3C,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,kBAAkB,CAAC,WAAmB,EAAE,QAAiB;QACxD,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrD,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,eAAe,CAAC,WAAmB,EAAE,KAAa;QACjD,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrD,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,WAAmB,EAAE,IAAc;QACjD,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrD,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,kBAAkB,CAAC,WAAmB,EAAE,QAAiB;QACxD,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrD,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE;YACxC,QAAQ;YACR,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;SAC3D,CAAC,CAAC;IACJ,CAAC;IAED,uBAAuB,CACtB,WAAmB,EACnB,IAA2D;QAE3D,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,OAAO;QACrD,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAEO,sBAAsB,CAAC,WAAmB;QACjD,IAAI,CAAC;YACJ,iBAAiB,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAC5C,WAAW;gBACX,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,mBAAmB,CAClB,SAAwB,IAAI,CAAC,MAAM;QAEnC,OAAO,8BAA8B,CAAC,IAAI,CAAC,WAAW,EAAE;YACvD,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;SACxB,CAAC,CAAC;IACJ,CAAC;IAED,YAAY;QACX,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;oBAC/C,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC5D,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,aAAa,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QACtD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACvC,uBAAuB,CAAC,OAAO,EAAE,aAAa,CAAC,CAC/C,CAAC;IACH,CAAC;IAED,iBAAiB;QAChB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,aAAa,CAAC;IACjD,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,CAAC;IACzC,CAAC;IAED,iBAAiB;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC;IACxD,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,gBAAgB;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;IAED,cAAc;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,wBAAwB;QAIvB,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,GAAG,CACrB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAC9D,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO;gBACN,iBAAiB,EAAE,IAAI,CAAC,SAAS;gBACjC,QAAQ,EAAE;oBACT;wBACC,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,WAAW,EAAE,IAAI,CAAC,WAAW;qBAC7B;iBACD;aACD,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAyC,CAAC;QAC1E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC7B,SAAS;YACV,CAAC;YACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACpE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACxD,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,OAAO,IAAI,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM;YACP,CAAC;YACD,IAAI,GAAG,MAAM,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAmC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAkC,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,SAAS;YACV,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,WAAW,EAAE,OAAO,CAAC,WAAW;aAChC,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnE,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnC,SAAS;gBACV,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACF,CAAC;QAED,OAAO;YACN,iBAAiB,EAAE,QAAQ,CAAC,SAAS;YACrC,QAAQ,EAAE,OAAO;SACjB,CAAC;IACH,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,WAAW,CAAC,QAAgB;QAC3B,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QACD,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,MAAsB;QAC/B,MAAM,IAAI,GAAuB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,OAAO,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,UAAU;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACpD,CAAC;IAED,SAAS;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,CAAC,CAAE,MAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;IAED,OAAO;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;QACnD,MAAM,KAAK,GAAsB,EAAE,CAAC;QAEpC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,SAAS;YACV,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjB,SAAS;YACV,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;QAED,MAAM,KAAK,GAAsB,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,SAAS;YACV,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACR,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;gBACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CACtC,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,CAAC,YAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,SAAS,YAAY,YAAY,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAChB,YAA2B,EAC3B,OAAe,EACf,OAAoE;QAEpE,IAAI,YAAY,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,SAAS,YAAY,YAAY,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;QAC3B,MAAM,KAAK,GAAuB;YACjC,IAAI,EAAE,gBAAgB;YACtB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE;YAC5B,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,YAAY,IAAI,MAAM;YACjD,OAAO;YACP,OAAO,EAAE,OAAO,EAAE,OAAO;YACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ;SAC3B,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,SAAS;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,KAAiB,EAAE,QAA+B;QAChE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QACnC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK;QACV,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,eAAe;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QAC1B,sDAAsD;QACtD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QAEvB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,iEAAiE;QACjE,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,wBAAwB,EAAE,CAAC;QAE3B,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAE3C,CAAC;YACb,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3B,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACP,6EAA6E;YAC7E,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,uBAAuB,CAAC,QAAsB;QAC7C,IAAI,IAAI,CAAC,kBAAkB;YAAE,OAAO,KAAK,CAAC;QAE1C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC/D,OAAO,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;IACjC,CAAC;IAaD,qBAAqB,CACpB,aAAkC,EAClC,eAAwB;QAExB,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACd,4DAA4D,CAC5D,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC5E,CAAC;IAEO,6BAA6B,CAAC,MAAc;QACnD,OAAO,+BAA+B,CAAC,MAAM,EAAE;YAC9C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC,CAAC;IACJ,CAAC;IAEO,8BAA8B,CACrC,KAAiB,EACjB,eAAuB;QAEvB,OAAO,gCAAgC,CAAC,KAAK,EAAE,eAAe,EAAE;YAC/D,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SACzC,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAGlB;QACA,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAChB,SAAiB,EACjB,UAAkD,EAAE;QAkBpD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,OAA4B;QAS/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAuB;YAClC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,uBAAuB;YAChC,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,SAAS,EAAE,GAAG;YACd,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,WAAW,EAAE,IAAI;SACjB,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,KAAK,GAAqB;gBAC/B,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,GAAG;gBACd,KAAK,EAAE,OAAO,CAAC,KAAK;aACpB,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAEhC,OAAO;YACN,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,CAAC;SACf,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,UAAkB;QACpC,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,oBAAoB,CAAC,OAAuB;QAC3C,OAAO,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,qBAAqB,CAAC,UAAkB;QAKvC,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,cAAc,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;YACnE,IAAI,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrC,OAAO,IAAI,CAAC,2BAA2B,CAAC,cAAc,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,IAAI,KAAK,CACd,+DAA+D,CAC/D,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,cAAc,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,SAAiB;QACpC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,aAAa;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;IACrC,CAAC;IAEO,qBAAqB,CAC5B,OAAuB;QAEvB,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC3E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAuB,CAAC;QAC1D,IAAI,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,SAAS,GAAG,MAAM,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,IAAI,SAAS,QAAQ,CAAC,CAAC;QAC5E,MAAM,cAAc,GAAuB;YAC1C,GAAG,MAAM;YACT,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,SAAS;SAClB,CAAC;QACF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACpD,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAC9C,CAAC;QAEF,aAAa,CACZ,UAAU,EACV,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EACvE,MAAM,CACN,CAAC;QAEF,OAAO;YACN,WAAW,EAAE,UAAU;YACvB,SAAS;YACT,aAAa,EAAE,CAAC;SAChB,CAAC;IACH,CAAC;IAEO,2BAA2B,CAClC,cAAqC;QAErC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,CACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CACvD,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAChD,MAAM,OAAO,GAAmC,EAAE,CAAC;QAEnD,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC5C,IAAI,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;oBACrE,SAAS;gBACV,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC1B,UAAU,GAAG,IAAI,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,UAAU,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAClC,OAAO,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACF,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACd,mBAAmB,OAAO,CAAC,SAAS,0BAA0B,CAC9D,CAAC;YACH,CAAC;YACD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CACpC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CACnC,CAAC;YACF,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CACd,mBAAmB,OAAO,CAAC,SAAS,+BAA+B,CACnE,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAuB,CAAC;YAC1D,IAAI,iBAAiB,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YACtD,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxD,iBAAiB,GAAG,MAAM,EAAE,CAAC;YAC9B,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CACtB,IAAI,CAAC,UAAU,EACf,GAAG,SAAS,IAAI,iBAAiB,QAAQ,CACzC,CAAC;YACF,MAAM,uBAAuB,GAAG,OAAO,CAAC,eAAe;gBACtD,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC1C,CAAC,CAAC,SAAS,CAAC;YACb,MAAM,cAAc,GAAuB;gBAC1C,GAAG,MAAM;gBACT,EAAE,EAAE,iBAAiB;gBACrB,OAAO,EAAE,SAAS;gBAClB,aAAa,EAAE,uBAAuB;gBACtC,YAAY,EAAE,OAAO,CAAC,eAAe;oBACpC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC;oBAC5C,CAAC,CAAC,SAAS;aACZ,CAAC;YACF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACpD,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAC9C,CAAC;YAEF,aAAa,CACZ,UAAU,EACV,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EACvE,MAAM,CACN,CAAC;YACF,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;YACtD,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,uBAAuB,GAC5B,cAAc,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;QACpD,MAAM,iBAAiB,GACtB,CAAC,uBAAuB;YACvB,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC1C,CAAC,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,CAAE,CAAC;QAC3D,MAAM,mBAAmB,GACxB,aAAa,CAAC,GAAG,CAAC,uBAAuB,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,CAAC;YACpE,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,SAAS,CAAE,CAAC;QAE5C,OAAO;YACN,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,iBAAiB;YAC5B,aAAa,EAAE,OAAO,CAAC,MAAM;SAC7B,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,UAAkB;QAChD,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACd,8CAA8C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtG,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,cAAc,GAAG,MAKtB,CAAC;QACF,MAAM,MAAM,GACX,OAAO,cAAc,CAAC,MAAM,KAAK,QAAQ;YACxC,CAAC,CAAC,cAAc,CAAC,MAAM;YACvB,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,MAAM,KAAK,8BAA8B,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACd,0CAA0C,8BAA8B,GAAG,CAC3E,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,OAAkB,EAAE,IAAY,EAAkB,EAAE,CACzE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5B,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACd,GAAG,IAAI,uCAAuC,KAAK,GAAG,CACtD,CAAC;YACH,CAAC;YACD,OAAO,WAAW,CAAC;QACpB,CAAC,CAAC,CAAC;QAEJ,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;YACpD,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,OAAO,EAAE,yBAAyB,CAAC;YACjE,CAAC,CAAC,SAAS,CAAC;QACb,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;YACtD,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;gBAC/C,IACC,CAAC,OAAO;oBACR,OAAO,OAAO,KAAK,QAAQ;oBAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACrB,CAAC;oBACF,MAAM,IAAI,KAAK,CACd,wEAAwE,KAAK,GAAG,CAChF,CAAC;gBACH,CAAC;gBACD,MAAM,aAAa,GAAG,OAIrB,CAAC;gBACF,IAAI,OAAO,aAAa,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;oBACjD,MAAM,IAAI,KAAK,CACd,sEAAsE,KAAK,GAAG,CAC9E,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3C,MAAM,IAAI,KAAK,CACd,kEAAkE,aAAa,CAAC,SAAS,GAAG,CAC5F,CAAC;gBACH,CAAC;gBACD,OAAO;oBACN,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,eAAe,EACd,OAAO,aAAa,CAAC,eAAe,KAAK,QAAQ;wBAChD,CAAC,CAAC,aAAa,CAAC,eAAe;wBAC/B,CAAC,CAAC,SAAS;oBACb,WAAW,EAAE,IAAI,CAChB,IAAI,CAAC,UAAU,EACf,GAAG,aAAa,CAAC,SAAS,QAAQ,CAClC;oBACD,OAAO,EAAE,YAAY,CACpB,aAAa,CAAC,OAAO,EACrB,mBAAmB,aAAa,CAAC,SAAS,EAAE,CAC5C;iBACsC,CAAC;YAC1C,CAAC,CAAC;YACH,CAAC,CAAC,SAAS,CAAC;QAEb,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACd,uEAAuE,CACvE,CAAC;QACH,CAAC;QAED,OAAO;YACN,MAAM;YACN,UAAU,EACT,OAAQ,cAA2C,CAAC,UAAU;gBAC9D,QAAQ;gBACP,CAAC,CAAE,cAAyC,CAAC,UAAU;gBACvD,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,SAAS,EACR,OAAO,cAAc,CAAC,SAAS,KAAK,QAAQ;gBAC3C,CAAC,CAAC,cAAc,CAAC,SAAS;gBAC1B,CAAC,CAAC,SAAS;YACb,OAAO;YACP,QAAQ;SACR,CAAC;IACH,CAAC;IAEO,2BAA2B;QAClC,MAAM,OAAO,GAAkC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;aAC5C,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACjD,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE9D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAEnD,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC;gBACjB,SAAS;YACV,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,MAAM,CAAC,EAAE;gBACpB,WAAW,EAAE,QAAQ;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,eAAe,EAAE,MAAM,CAAC,aAAa;gBACrC,iBAAiB,EAAE,MAAM,CAAC,YAAY;oBACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC9B,CAAC,CAAC,SAAS;aACZ,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,CACrB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAC9D,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACzD,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,CAClC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CACjC,EAAE,SAAS,CAAC;YACd,CAAC;QACF,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/D,OAAO,OAAO,CAAC;IAChB,CAAC;CACD","sourcesContent":["/**\n * Session Manager - Conversation Persistence and Recovery\n *\n * Sessions are stored as JSONL (JSON Lines) files. Each entry is append-only and\n * may include tree metadata (id/parentId) to support branching and navigation.\n *\n * Tree entries form a conversation tree where the \"leaf\" pointer tracks the\n * active branch. The session file is append-only; branching updates the leaf\n * pointer without modifying history.\n */\n\nimport {\n\tappendFileSync,\n\texistsSync,\n\tmkdirSync,\n\treadFileSync,\n\treaddirSync,\n\tstatSync,\n\twriteFileSync,\n} from \"node:fs\";\nimport { extname, join, resolve } from \"node:path\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport type {\n\tAgentState,\n\tAppMessage,\n\tImageContent,\n\tTextContent,\n} from \"../agent/types.js\";\nimport { SESSION_CONFIG, getAgentDir } from \"../config/constants.js\";\nimport { getRegisteredModels } from \"../models/registry.js\";\nimport type { RegisteredModel } from \"../models/registry.js\";\nimport { queueSharedMemoryUpdate } from \"../shared-memory/client.js\";\nimport { recordMaestroPromptVariantSelected } from \"../telemetry/maestro-event-bus.js\";\nimport { createLogger } from \"../utils/logger.js\";\nimport { resolveEnvPath } from \"../utils/path-expansion.js\";\nimport { SessionFileWriter } from \"./file-writer.js\";\nimport {\n\tSessionMetadataCache,\n\ttype SessionModelMetadata,\n} from \"./metadata-cache.js\";\nimport {\n\tmigrateToCurrentVersion,\n\tregisterActiveSessionFile,\n\tscheduleSessionMigration,\n\tunregisterActiveSessionFile,\n} from \"./migration.js\";\nimport { sanitizeSessionScope } from \"./scope.js\";\nimport {\n\tcreateBranchedSessionFromLeaf as createBranchedSessionFromLeafFn,\n\tcreateBranchedSessionFromState as createBranchedSessionFromStateFn,\n} from \"./session-branch.js\";\nimport { SessionCatalog } from \"./session-catalog.js\";\nimport {\n\ttype SessionContextSnapshot,\n\tbuildSessionContextFromEntries,\n\tgenerateEntryId,\n\tsafeReadSessionEntries,\n} from \"./session-context.js\";\nimport { syncSessionMemory } from \"./session-memory.js\";\nimport {\n\tapplyAttachmentExtracts,\n\tsanitizeMessageForSession,\n} from \"./session-sanitize.js\";\nimport {\n\ttype AttachmentExtractedEntry,\n\ttype BranchSummaryEntry,\n\tCURRENT_SESSION_VERSION,\n\ttype CompactionEntry,\n\ttype CustomEntry,\n\ttype CustomMessageEntry,\n\ttype LabelEntry,\n\ttype ModelChangeEntry,\n\ttype SessionEntry,\n\ttype SessionHeaderEntry,\n\ttype SessionMessageEntry,\n\ttype SessionMessagesView,\n\ttype SessionMetaEntry,\n\ttype SessionMetadata,\n\ttype SessionSummary,\n\ttype SessionTreeEntry,\n\ttype SessionTreeNode,\n\ttype ThinkingLevelChangeEntry,\n\tgetPersistedSessionPromptContextManifest,\n\tisSessionTreeEntry,\n\ttryParseSessionEntry,\n} from \"./types.js\";\n\nexport interface SessionManagerOptions {\n\t/** Override the base session directory (before per-cwd scoping). */\n\tsessionDir?: string;\n\t/** Optional scope key (e.g., auth subject) for per-user session isolation. */\n\tsessionScope?: string;\n}\n\nconst logger = createLogger(\"session-manager\");\nconst PORTABLE_SESSION_EXPORT_FORMAT = \"maestro-session-export.v1\";\n\ninterface PortableSessionBundle {\n\tformat: string;\n\texportedAt: string;\n\tsessionId?: string;\n\tentries?: SessionEntry[];\n\tsessions?: PortableSessionExportSession[];\n}\n\nexport interface PortableSessionExportSession {\n\tsessionId: string;\n\tparentSessionId?: string;\n\tsessionFile: string;\n\tentries?: SessionEntry[];\n}\n\nexport interface PortableSessionImportResult {\n\tsessionFile: string;\n\tsessionId: string;\n\timportedCount: number;\n}\n\ninterface PortableSessionExportRecord {\n\tsessionId: string;\n\tsessionFile: string;\n\ttimestamp: string;\n\tparentSessionId?: string;\n\tparentSessionFile?: string;\n}\n\n// Re-export SessionModelMetadata for backward compatibility\nexport type { SessionModelMetadata } from \"./metadata-cache.js\";\n\nexport type {\n\tAttachmentExtractedEntry,\n\tBranchSummaryEntry,\n\tCompactionEntry,\n\tSessionHeaderEntry,\n\tSessionMessageEntry,\n\tSessionMetaEntry,\n\tSessionMigrationState,\n\tSessionToolInfo,\n\tSessionTreeEntry,\n\tSessionTreeNode,\n} from \"./types.js\";\n\nexport {\n\tgetMigrationState,\n\tregisterActiveSessionFile,\n\tresetMigrationState,\n\trunSessionMigration,\n\tscheduleSessionMigration,\n\tunregisterActiveSessionFile,\n} from \"./migration.js\";\n\nexport function toSessionModelMetadata(\n\tmodel: RegisteredModel,\n): SessionModelMetadata {\n\treturn {\n\t\tprovider: model.provider,\n\t\tmodelId: model.id,\n\t\tproviderName: model.providerName,\n\t\tname: model.name,\n\t\tbaseUrl: model.baseUrl,\n\t\treasoning: model.reasoning,\n\t\tcontextWindow: model.contextWindow,\n\t\tmaxTokens: model.maxTokens,\n\t\tsource: model.source,\n\t};\n}\n\nfunction findRegisteredModel(modelKey: string): RegisteredModel | undefined {\n\tconst [provider, modelId] = modelKey.split(\"/\");\n\tif (!provider || !modelId) {\n\t\treturn undefined;\n\t}\n\treturn getRegisteredModels().find(\n\t\t(entry) => entry.provider === provider && entry.id === modelId,\n\t);\n}\n\n/**\n * Main session management class.\n */\nexport class SessionManager {\n\t/** Unique identifier for this session (UUID v4) */\n\tprivate sessionId!: string;\n\t/** Absolute path to the session JSONL file */\n\tprivate sessionFile!: string;\n\t/** Directory containing all session files for current project */\n\tprivate sessionDir: string;\n\t/** Optional scope for per-user session isolation */\n\tprivate sessionScope?: string;\n\t/** Optional override for base session directory */\n\tprivate sessionDirOverride?: string;\n\t/** Whether session persistence is enabled (disabled by --no-session) */\n\tprivate enabled = true;\n\t/** Whether the session header has been written */\n\tprivate sessionInitialized = false;\n\t/** Buffered file writer for efficient I/O */\n\tprivate writer?: SessionFileWriter;\n\t/** Snapshot of agent state for recovery purposes */\n\tprivate _agentSnapshot?: AgentState;\n\t/** Metadata for the last used model */\n\tprivate lastModelMetadata?: SessionModelMetadata;\n\t/** Cache for current model/thinking level */\n\tprivate metadataCache = new SessionMetadataCache();\n\tprivate readonly catalog: SessionCatalog;\n\n\tprivate fileEntries: SessionEntry[] = [];\n\tprivate byId: Map<string, SessionTreeEntry> = new Map();\n\tprivate labelsById: Map<string, string> = new Map();\n\tprivate leafId: string | null = null;\n\tprivate flushed = false;\n\tprivate _hasAssistantMessage = false;\n\n\t/**\n\t * Creates a new SessionManager.\n\t *\n\t * @param continueSession - If true, loads the most recently modified session\n\t * @param customSessionPath - Optional specific session file to load\n\t * @param options - Optional session directory/scope overrides\n\t */\n\tconstructor(\n\t\tcontinueSession = false,\n\t\tcustomSessionPath?: string,\n\t\toptions: SessionManagerOptions = {},\n\t) {\n\t\tthis.sessionScope = options.sessionScope;\n\t\tthis.sessionDirOverride = options.sessionDir;\n\t\tthis.sessionDir = this.getSessionDirectory();\n\t\tthis.catalog = new SessionCatalog({\n\t\t\tsessionDir: this.sessionDir,\n\t\t\tbeforeRead: () => this.writer?.flushSync(),\n\t\t\tgetCurrentSessionId: () => this.sessionId,\n\t\t});\n\n\t\tif (customSessionPath) {\n\t\t\t// Use custom session file path\n\t\t\tthis.sessionFile = resolve(customSessionPath);\n\t\t\tthis.setSessionFile(this.sessionFile);\n\t\t} else if (continueSession) {\n\t\t\tconst mostRecent = this.findMostRecentlyModifiedSession();\n\t\t\tif (mostRecent) {\n\t\t\t\tthis.sessionFile = mostRecent;\n\t\t\t\tthis.setSessionFile(this.sessionFile);\n\t\t\t} else {\n\t\t\t\tthis.initNewSession();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.initNewSession();\n\t\t}\n\n\t\tthis.initializeWriter();\n\t\tif (this.sessionInitialized) {\n\t\t\tthis.metadataCache.seedFromFile(this.sessionFile);\n\t\t}\n\t}\n\n\t/** Disable session saving (for --no-session mode) */\n\tdisable() {\n\t\tthis.enabled = false;\n\t\t// Unregister session file before disabling\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\t\tthis.writer = undefined;\n\t\tthis.fileEntries = [];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t}\n\n\tprivate initializeWriter(): void {\n\t\tif (!this.enabled) {\n\t\t\tthis.writer = undefined;\n\t\t\treturn;\n\t\t}\n\t\tthis.writer = new SessionFileWriter(this.sessionFile);\n\t}\n\n\tprivate getSessionDirectory(): string {\n\t\tconst cwd = process.cwd();\n\t\tconst safePath = `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n\n\t\tconst baseOverride =\n\t\t\tresolveEnvPath(this.sessionDirOverride) ??\n\t\t\tresolveEnvPath(process.env.MAESTRO_SESSION_DIR);\n\t\tconst baseDir =\n\t\t\tbaseOverride ??\n\t\t\tSESSION_CONFIG.DEFAULT_DIR ??\n\t\t\tjoin(getAgentDir(), \"sessions\");\n\n\t\tconst scope = this.sessionScope\n\t\t\t? sanitizeSessionScope(this.sessionScope)\n\t\t\t: \"\";\n\t\tconst sessionDir = scope\n\t\t\t? join(baseDir, scope, safePath)\n\t\t\t: join(baseDir, safePath);\n\t\tif (!existsSync(sessionDir)) {\n\t\t\tmkdirSync(sessionDir, { recursive: true });\n\t\t}\n\t\treturn sessionDir;\n\t}\n\n\tprivate initNewSession(): void {\n\t\tthis.sessionId = uuidv4();\n\t\tconst timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n\t\tthis.sessionFile = join(\n\t\t\tthis.sessionDir,\n\t\t\t`${timestamp}_${this.sessionId}.jsonl`,\n\t\t);\n\t\t// Register new session file to prevent migration race conditions\n\t\tregisterActiveSessionFile(this.sessionFile);\n\t\tthis.fileEntries = [];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t\tthis.flushed = false;\n\t\tthis._hasAssistantMessage = false;\n\t\tthis.sessionInitialized = false;\n\t\tthis.metadataCache.reset();\n\t}\n\n\tstartFreshSession(): void {\n\t\tif (!this.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\t\tthis.writer = undefined;\n\t\tthis._agentSnapshot = undefined;\n\t\tthis.lastModelMetadata = undefined;\n\t\t// Unregister old session file before creating new one\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\t\tthis.initNewSession();\n\t\tthis.initializeWriter();\n\t}\n\n\t/**\n\t * Reset session state for /clear command - clears pending messages and starts new session\n\t */\n\treset(): void {\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\t\tthis.writer = undefined;\n\n\t\t// Unregister old session file before creating new one\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\n\t\tthis.fileEntries = [];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t\tthis.flushed = false;\n\t\tthis._hasAssistantMessage = false;\n\t\tthis.sessionInitialized = false;\n\t\tthis.metadataCache.reset();\n\t\tthis._agentSnapshot = undefined;\n\t\tthis.lastModelMetadata = undefined;\n\n\t\tthis.initNewSession();\n\t\tthis.initializeWriter();\n\t}\n\n\tprivate findMostRecentlyModifiedSession(): string | null {\n\t\ttry {\n\t\t\tconst files = readdirSync(this.sessionDir)\n\t\t\t\t.filter((f) => f.endsWith(\".jsonl\"))\n\t\t\t\t.map((f) => ({\n\t\t\t\t\tpath: join(this.sessionDir, f),\n\t\t\t\t\tmtime: statSync(join(this.sessionDir, f)).mtime,\n\t\t\t\t}))\n\t\t\t\t.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());\n\n\t\t\treturn files[0]?.path || null;\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate rebuildIndex(entries: SessionEntry[]): void {\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.leafId = null;\n\t\tthis._hasAssistantMessage = false;\n\n\t\tfor (const entry of entries) {\n\t\t\tif (!isSessionTreeEntry(entry)) continue;\n\t\t\tthis.byId.set(entry.id, entry);\n\t\t\tthis.leafId = entry.id;\n\t\t\tif (entry.type === \"label\") {\n\t\t\t\tif (entry.label) {\n\t\t\t\t\tthis.labelsById.set(entry.targetId, entry.label);\n\t\t\t\t} else {\n\t\t\t\t\tthis.labelsById.delete(entry.targetId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\t\tthis._hasAssistantMessage = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate rewriteSessionFile(): void {\n\t\tif (!this.enabled || !this.sessionFile) return;\n\t\tconst content = `${this.fileEntries.map((e) => JSON.stringify(e)).join(\"\\n\")}\\n`;\n\t\twriteFileSync(this.sessionFile, content);\n\t}\n\n\tprivate persistEntry(entry: SessionEntry): void {\n\t\tif (!this.enabled || !this.writer || !this.sessionFile) return;\n\t\tif (!this.sessionInitialized) return;\n\n\t\tif (!this.flushed) {\n\t\t\tfor (const e of this.fileEntries) {\n\t\t\t\tthis.writer.write(e);\n\t\t\t}\n\t\t\tthis.writer.flushSync();\n\t\t\tthis.flushed = true;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.writer.write(entry);\n\t}\n\n\tprivate appendTreeEntry(entry: SessionTreeEntry): void {\n\t\tthis.fileEntries.push(entry);\n\t\tthis.byId.set(entry.id, entry);\n\t\tthis.leafId = entry.id;\n\t\tif (entry.type === \"label\") {\n\t\t\tif (entry.label) {\n\t\t\t\tthis.labelsById.set(entry.targetId, entry.label);\n\t\t\t} else {\n\t\t\t\tthis.labelsById.delete(entry.targetId);\n\t\t\t}\n\t\t}\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\tthis._hasAssistantMessage = true;\n\t\t}\n\t\tthis.persistEntry(entry);\n\t}\n\n\tprivate createTreeEntryId(): string {\n\t\treturn generateEntryId(this.byId);\n\t}\n\n\tstartSession(state: AgentState, options?: { subject?: string }): void {\n\t\tif (!this.enabled || this.sessionInitialized) return;\n\n\t\tconst modelKeyFromState = `${state.model.provider}/${state.model.id}`;\n\t\tconst latestModelChange = this.getLatestModelChange();\n\t\tconst latestThinkingLevel = this.getLatestThinkingLevel();\n\t\tconst sessionModelKey = latestModelChange?.model ?? modelKeyFromState;\n\t\tconst primaryMetadata =\n\t\t\tlatestModelChange?.modelMetadata ??\n\t\t\t(sessionModelKey === modelKeyFromState\n\t\t\t\t? toSessionModelMetadata(state.model as RegisteredModel)\n\t\t\t\t: undefined);\n\t\tconst fallbackMetadata = this.resolveModelMetadata(sessionModelKey);\n\t\tconst provisionalHeaderIndex = this.fileEntries.findIndex(\n\t\t\t(existing) =>\n\t\t\t\texisting.type === \"session\" &&\n\t\t\t\texisting.id === this.sessionId &&\n\t\t\t\texisting.provisional === true,\n\t\t);\n\t\tconst provisionalHeader =\n\t\t\tprovisionalHeaderIndex >= 0\n\t\t\t\t? (this.fileEntries[provisionalHeaderIndex] as SessionHeaderEntry)\n\t\t\t\t: undefined;\n\t\tconst timestamp = provisionalHeader?.timestamp ?? new Date().toISOString();\n\t\tconst entry: SessionHeaderEntry = {\n\t\t\ttype: \"session\",\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tid: this.sessionId,\n\t\t\ttimestamp,\n\t\t\tcwd: process.cwd(),\n\t\t\tsubject: options?.subject || undefined,\n\t\t\tmodel: sessionModelKey,\n\t\t\tmodelMetadata: primaryMetadata ?? fallbackMetadata,\n\t\t\tthinkingLevel: latestThinkingLevel ?? state.thinkingLevel,\n\t\t\tsystemPrompt: state.systemPrompt,\n\t\t\tpromptMetadata: state.promptMetadata,\n\t\t\tpromptContextManifest: getPersistedSessionPromptContextManifest(state),\n\t\t\tunifiedContextManifest: state.unifiedContextManifest,\n\t\t\ttools: state.tools.map((tool) => ({\n\t\t\t\tname: tool.name,\n\t\t\t\tlabel: tool.label,\n\t\t\t\tdescription: tool.description,\n\t\t\t})),\n\t\t};\n\t\tthis.metadataCache.apply(entry);\n\t\tif (provisionalHeaderIndex >= 0) {\n\t\t\tthis.fileEntries[provisionalHeaderIndex] = entry;\n\t\t} else {\n\t\t\tthis.fileEntries.unshift(entry);\n\t\t}\n\t\tthis.sessionInitialized = true;\n\n\t\tif (provisionalHeaderIndex >= 0) {\n\t\t\tthis.rewriteSessionFile();\n\t\t\tthis.flushed = true;\n\t\t} else {\n\t\t\tthis.persistEntry(entry);\n\t\t}\n\n\t\tqueueSharedMemoryUpdate({\n\t\t\tsessionId: this.sessionId,\n\t\t\tstate: {\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tcwd: process.cwd(),\n\t\t\t\tmodel: sessionModelKey,\n\t\t\t\tupdatedAt: entry.timestamp,\n\t\t\t\tsource: \"maestro\",\n\t\t\t},\n\t\t\tevent: {\n\t\t\t\ttype: \"maestro.session.started\",\n\t\t\t\tpayload: {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tmodel: sessionModelKey,\n\t\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\tif (state.promptMetadata) {\n\t\t\trecordMaestroPromptVariantSelected({\n\t\t\t\tprompt_metadata: state.promptMetadata,\n\t\t\t\tcorrelation: {\n\t\t\t\t\tsession_id: this.sessionId,\n\t\t\t\t},\n\t\t\t\tselected_at: entry.timestamp,\n\t\t\t});\n\t\t}\n\n\t\t// Auto-prune old sessions in the background (non-blocking)\n\t\tif (\n\t\t\tSESSION_CONFIG.MAX_SESSIONS > 0 ||\n\t\t\tSESSION_CONFIG.MAX_SESSION_AGE_DAYS > 0\n\t\t) {\n\t\t\tsetTimeout(() => {\n\t\t\t\ttry {\n\t\t\t\t\tconst result = this.pruneSessions();\n\t\t\t\t\tif (result.removed > 0) {\n\t\t\t\t\t\tlogger.debug(\"Auto-pruned sessions\", result);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"Session auto-prune failed\",\n\t\t\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}, 5000);\n\t\t}\n\t}\n\n\tsaveMessage(message: AppMessage): void {\n\t\tif (!this.enabled) return;\n\t\tconst sanitizedMessage = sanitizeMessageForSession(message);\n\t\tconst entry: SessionMessageEntry = {\n\t\t\ttype: \"message\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tmessage: sanitizedMessage,\n\t\t};\n\n\t\tthis.appendTreeEntry(entry);\n\n\t\tqueueSharedMemoryUpdate({\n\t\t\tsessionId: this.sessionId,\n\t\t\tstate: {\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tupdatedAt: entry.timestamp,\n\t\t\t\tlastMessageId: entry.id,\n\t\t\t\tlastMessageRole: message.role,\n\t\t\t\tsource: \"maestro\",\n\t\t\t},\n\t\t\tevent: {\n\t\t\t\ttype: \"maestro.message.saved\",\n\t\t\t\tpayload: {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tmessageId: entry.id,\n\t\t\t\t\trole: message.role,\n\t\t\t\t\ttimestamp: entry.timestamp,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tsaveThinkingLevelChange(thinkingLevel: string): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: ThinkingLevelChangeEntry = {\n\t\t\ttype: \"thinking_level_change\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tthinkingLevel,\n\t\t};\n\t\tthis.metadataCache.apply(entry);\n\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tsaveModelChange(model: string, metadata?: SessionModelMetadata): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: ModelChangeEntry = {\n\t\t\ttype: \"model_change\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tmodel,\n\t\t\tmodelMetadata: metadata,\n\t\t};\n\t\tthis.metadataCache.apply(entry);\n\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendCustomEntry(customType: string, data?: unknown): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: CustomEntry = {\n\t\t\ttype: \"custom\",\n\t\t\tcustomType,\n\t\t\tdata,\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendCustomMessageEntry<T = unknown>(\n\t\tcustomType: string,\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\tdisplay: boolean,\n\t\tdetails?: T,\n\t): void {\n\t\tif (!this.enabled) return;\n\t\tconst entry: CustomMessageEntry<T> = {\n\t\t\ttype: \"custom_message\",\n\t\t\tcustomType,\n\t\t\tcontent,\n\t\t\tdisplay,\n\t\t\tdetails,\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendBranchSummary(\n\t\tsummary: string,\n\t\toptions?: { fromId?: string; details?: unknown; fromHook?: boolean },\n\t): void {\n\t\tif (!this.enabled) return;\n\t\tconst fromId = options?.fromId ?? this.leafId ?? \"root\";\n\t\tconst entry: BranchSummaryEntry = {\n\t\t\ttype: \"branch_summary\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tfromId,\n\t\t\tsummary,\n\t\t\tdetails: options?.details,\n\t\t\tfromHook: options?.fromHook,\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\tappendLabel(targetId: string, label: string | undefined): void {\n\t\tif (!this.byId.has(targetId)) {\n\t\t\tthrow new Error(`Entry ${targetId} not found`);\n\t\t}\n\t\tconst entry: LabelEntry = {\n\t\t\ttype: \"label\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\ttargetId,\n\t\t\tlabel,\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t}\n\n\t/**\n\t * Save a compaction event to the session file.\n\t */\n\tsaveCompaction(\n\t\tsummary: string,\n\t\tfirstKeptEntryIndex: number,\n\t\ttokensBefore: number,\n\t\toptions?: {\n\t\t\tauto?: boolean;\n\t\t\tcustomInstructions?: string;\n\t\t\tfirstKeptEntryId?: string;\n\t\t},\n\t): void {\n\t\tif (!this.enabled) return;\n\t\tconst context = this.buildSessionContext();\n\t\tconst resolvedEntry = options?.firstKeptEntryId\n\t\t\t? this.getEntry(options.firstKeptEntryId)\n\t\t\t: undefined;\n\t\tconst targetEntry =\n\t\t\tresolvedEntry ?? context.messageEntries[firstKeptEntryIndex];\n\t\tconst fallbackEntry = this.getEntries()[0];\n\t\tconst firstKeptEntryId =\n\t\t\ttargetEntry?.id ?? this.leafId ?? fallbackEntry?.id;\n\t\tif (!firstKeptEntryId) {\n\t\t\tlogger.warn(\"Failed to resolve compaction cut point; skipping save\");\n\t\t\treturn;\n\t\t}\n\t\tconst entry: CompactionEntry = {\n\t\t\ttype: \"compaction\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tsummary,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\tauto: options?.auto,\n\t\t\tcustomInstructions: options?.customInstructions,\n\t\t};\n\n\t\tthis.appendTreeEntry(entry);\n\t\tthis.writer?.flushSync();\n\t}\n\n\t/**\n\t * Find the most recent compaction entry in the current session.\n\t */\n\tfindLatestCompaction(): CompactionEntry | null {\n\t\tfor (let i = this.fileEntries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.fileEntries[i]!;\n\t\t\tif (entry.type === \"compaction\") {\n\t\t\t\treturn entry as CompactionEntry;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate getLatestThinkingLevel(): string | undefined {\n\t\tfor (let i = this.fileEntries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.fileEntries[i]!;\n\t\t\tif (entry.type === \"thinking_level_change\") {\n\t\t\t\treturn entry.thinkingLevel;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate getLatestModelChange(): ModelChangeEntry | undefined {\n\t\tfor (let i = this.fileEntries.length - 1; i >= 0; i--) {\n\t\t\tconst entry = this.fileEntries[i]!;\n\t\t\tif (entry.type === \"model_change\") {\n\t\t\t\treturn entry as ModelChangeEntry;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate resolveModelMetadata(\n\t\tmodelKey: string,\n\t): SessionModelMetadata | undefined {\n\t\tconst registered = findRegisteredModel(modelKey);\n\t\treturn registered ? toSessionModelMetadata(registered) : undefined;\n\t}\n\n\tprivate appendSessionMetaEntry(\n\t\ttargetFile: string,\n\t\tmeta: {\n\t\t\tsummary?: string;\n\t\t\tresumeSummary?: string;\n\t\t\tmemoryExtractionHash?: string;\n\t\t\tfavorite?: boolean;\n\t\t\ttitle?: string;\n\t\t\ttags?: string[];\n\t\t\tarchived?: boolean;\n\t\t\tarchivedAt?: string;\n\t\t\tappServerGoal?: SessionMetaEntry[\"appServerGoal\"];\n\t\t},\n\t): void {\n\t\tif (!existsSync(targetFile)) return;\n\t\tif (\n\t\t\tmeta.summary === undefined &&\n\t\t\tmeta.resumeSummary === undefined &&\n\t\t\tmeta.memoryExtractionHash === undefined &&\n\t\t\tmeta.favorite === undefined &&\n\t\t\tmeta.title === undefined &&\n\t\t\tmeta.tags === undefined &&\n\t\t\tmeta.archived === undefined &&\n\t\t\tmeta.archivedAt === undefined &&\n\t\t\tmeta.appServerGoal === undefined\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tconst entry: SessionMetaEntry = {\n\t\t\ttype: \"session_meta\",\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t...meta,\n\t\t};\n\t\ttry {\n\t\t\tappendFileSync(targetFile, `${JSON.stringify(entry)}\\n`);\n\t\t\tif (resolve(targetFile) === this.sessionFile) {\n\t\t\t\tthis.fileEntries.push(entry);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to append session metadata\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate appendAttachmentExtractEntry(\n\t\ttargetFile: string,\n\t\tpayload: { attachmentId: string; extractedText: string },\n\t): AttachmentExtractedEntry | null {\n\t\tif (!existsSync(targetFile)) return null;\n\t\tif (!payload.attachmentId || !payload.extractedText) return null;\n\t\tconst entry: AttachmentExtractedEntry = {\n\t\t\ttype: \"attachment_extract\",\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tattachmentId: payload.attachmentId,\n\t\t\textractedText: payload.extractedText,\n\t\t};\n\t\ttry {\n\t\t\tappendFileSync(targetFile, `${JSON.stringify(entry)}\\n`);\n\t\t\treturn entry;\n\t\t} catch (error) {\n\t\t\tlogger.error(\n\t\t\t\t\"Failed to append attachment extraction\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Persist extracted attachment text as an append-only cache entry.\n\t */\n\tsaveAttachmentExtraction(\n\t\tsessionPath: string,\n\t\tattachmentId: string,\n\t\ttext: string,\n\t): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tconst entry = this.appendAttachmentExtractEntry(sessionPath, {\n\t\t\tattachmentId,\n\t\t\textractedText: text,\n\t\t});\n\t\tif (entry && sessionPath === this.sessionFile) {\n\t\t\tthis.fileEntries.push(entry);\n\t\t}\n\t}\n\n\tsaveSessionSummary(summary: string, sessionPath?: string): void {\n\t\tconst trimmed = summary.trim();\n\t\tif (!trimmed) return;\n\t\tconst target = sessionPath ?? this.sessionFile;\n\t\tif (!target || !existsSync(target)) return;\n\t\tthis.appendSessionMetaEntry(target, { summary: trimmed });\n\t\tthis.syncSessionMemoryEntry(target);\n\t\tif (target === this.sessionFile) {\n\t\t\tqueueSharedMemoryUpdate({\n\t\t\t\tsessionId: this.sessionId,\n\t\t\t\tstate: {\n\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\tupdatedAt: new Date().toISOString(),\n\t\t\t\t\tsummary: trimmed,\n\t\t\t\t\tsource: \"maestro\",\n\t\t\t\t},\n\t\t\t\tevent: {\n\t\t\t\t\ttype: \"maestro.session.summary\",\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\t\tlength: trimmed.length,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tsaveSessionResumeSummary(summary: string, sessionPath?: string): void {\n\t\tconst trimmed = summary.trim();\n\t\tif (!trimmed) return;\n\t\tconst target = sessionPath ?? this.sessionFile;\n\t\tif (!target || !existsSync(target)) return;\n\t\tthis.appendSessionMetaEntry(target, { resumeSummary: trimmed });\n\t\tthis.syncSessionMemoryEntry(target);\n\t}\n\n\tsaveSessionMemoryExtractionHash(hash: string, sessionPath?: string): void {\n\t\tconst trimmed = hash.trim();\n\t\tif (!trimmed) return;\n\t\tconst target = sessionPath ?? this.sessionFile;\n\t\tif (!target || !existsSync(target)) return;\n\t\tthis.appendSessionMetaEntry(target, { memoryExtractionHash: trimmed });\n\t}\n\n\tsetSessionFavorite(sessionPath: string, favorite: boolean): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { favorite });\n\t}\n\n\tsetSessionTitle(sessionPath: string, title: string): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { title });\n\t\tthis.syncSessionMemoryEntry(sessionPath);\n\t}\n\n\tsetSessionTags(sessionPath: string, tags: string[]): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { tags });\n\t\tthis.syncSessionMemoryEntry(sessionPath);\n\t}\n\n\tsetSessionArchived(sessionPath: string, archived: boolean): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, {\n\t\t\tarchived,\n\t\t\tarchivedAt: archived ? new Date().toISOString() : undefined,\n\t\t});\n\t}\n\n\tsetSessionAppServerGoal(\n\t\tsessionPath: string,\n\t\tgoal: NonNullable<SessionMetaEntry[\"appServerGoal\"]> | null,\n\t): void {\n\t\tif (!sessionPath || !existsSync(sessionPath)) return;\n\t\tthis.appendSessionMetaEntry(sessionPath, { appServerGoal: goal });\n\t}\n\n\tprivate syncSessionMemoryEntry(sessionPath: string): void {\n\t\ttry {\n\t\t\tsyncSessionMemory(sessionPath);\n\t\t} catch (error) {\n\t\t\tlogger.warn(\"Failed to sync session memory\", {\n\t\t\t\tsessionPath,\n\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t}\n\t}\n\n\tbuildSessionContext(\n\t\tleafId: string | null = this.leafId,\n\t): SessionContextSnapshot {\n\t\treturn buildSessionContextFromEntries(this.fileEntries, {\n\t\t\tleafId,\n\t\t\tbyId: this.byId,\n\t\t\theader: this.getHeader(),\n\t\t});\n\t}\n\n\tloadMessages(): AppMessage[] {\n\t\tconst context = this.buildSessionContext();\n\t\tconst extractedById = new Map<string, string>();\n\t\tfor (const entry of this.fileEntries) {\n\t\t\tif (entry.type === \"attachment_extract\") {\n\t\t\t\tif (entry.attachmentId && entry.extractedText) {\n\t\t\t\t\textractedById.set(entry.attachmentId, entry.extractedText);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (extractedById.size === 0) return context.messages;\n\t\treturn context.messages.map((message) =>\n\t\t\tapplyAttachmentExtracts(message, extractedById),\n\t\t);\n\t}\n\n\tloadThinkingLevel(): string {\n\t\treturn this.buildSessionContext().thinkingLevel;\n\t}\n\n\tloadModel(): string | null {\n\t\treturn this.buildSessionContext().model;\n\t}\n\n\tloadModelMetadata(): SessionModelMetadata | undefined {\n\t\tconst context = this.buildSessionContext();\n\t\treturn context.modelMetadata ?? this.lastModelMetadata;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn this.sessionInitialized;\n\t}\n\n\tcanCreateSession(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tgetSessionId(): string {\n\t\treturn this.sessionId;\n\t}\n\n\tgetSessionFile(): string {\n\t\treturn this.sessionFile;\n\t}\n\n\tgetPortableSessionBundle(): {\n\t\tselectedSessionId: string;\n\t\tsessions: PortableSessionExportSession[];\n\t} {\n\t\tconst records = this.buildPortableSessionRecords();\n\t\tconst byFile = new Map(\n\t\t\trecords.map((record) => [resolve(record.sessionFile), record]),\n\t\t);\n\t\tconst selected = byFile.get(resolve(this.sessionFile));\n\t\tif (!selected) {\n\t\t\treturn {\n\t\t\t\tselectedSessionId: this.sessionId,\n\t\t\t\tsessions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tsessionId: this.sessionId,\n\t\t\t\t\t\tsessionFile: this.sessionFile,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\n\t\tconst byId = new Map(records.map((record) => [record.sessionId, record]));\n\t\tconst parentToChildren = new Map<string, PortableSessionExportRecord[]>();\n\t\tfor (const record of records) {\n\t\t\tif (!record.parentSessionId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst children = parentToChildren.get(record.parentSessionId) ?? [];\n\t\t\tchildren.push(record);\n\t\t\tparentToChildren.set(record.parentSessionId, children);\n\t\t}\n\t\tfor (const children of parentToChildren.values()) {\n\t\t\tchildren.sort((a, b) => a.timestamp.localeCompare(b.timestamp));\n\t\t}\n\n\t\tlet root = selected;\n\t\tconst visited = new Set<string>();\n\t\twhile (root.parentSessionId && !visited.has(root.sessionId)) {\n\t\t\tvisited.add(root.sessionId);\n\t\t\tconst parent = byId.get(root.parentSessionId);\n\t\t\tif (!parent) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\troot = parent;\n\t\t}\n\n\t\tconst ordered: PortableSessionExportSession[] = [];\n\t\tconst queue: PortableSessionExportRecord[] = [root];\n\t\tconst enqueued = new Set<string>([root.sessionId]);\n\t\twhile (queue.length > 0) {\n\t\t\tconst current = queue.shift();\n\t\t\tif (!current) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tordered.push({\n\t\t\t\tsessionId: current.sessionId,\n\t\t\t\tparentSessionId: current.parentSessionId,\n\t\t\t\tsessionFile: current.sessionFile,\n\t\t\t});\n\t\t\tfor (const child of parentToChildren.get(current.sessionId) ?? []) {\n\t\t\t\tif (enqueued.has(child.sessionId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tenqueued.add(child.sessionId);\n\t\t\t\tqueue.push(child);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tselectedSessionId: selected.sessionId,\n\t\t\tsessions: ordered,\n\t\t};\n\t}\n\n\tgetLeafId(): string | null {\n\t\treturn this.leafId;\n\t}\n\n\tgetLeafEntry(): SessionTreeEntry | undefined {\n\t\treturn this.leafId ? this.byId.get(this.leafId) : undefined;\n\t}\n\n\tgetEntry(id: string): SessionTreeEntry | undefined {\n\t\treturn this.byId.get(id);\n\t}\n\n\tgetLabel(id: string): string | undefined {\n\t\treturn this.labelsById.get(id);\n\t}\n\n\tgetChildren(parentId: string): SessionTreeEntry[] {\n\t\tconst children: SessionTreeEntry[] = [];\n\t\tfor (const entry of this.byId.values()) {\n\t\t\tif (entry.parentId === parentId) {\n\t\t\t\tchildren.push(entry);\n\t\t\t}\n\t\t}\n\t\treturn children;\n\t}\n\n\tgetBranch(fromId?: string | null): SessionTreeEntry[] {\n\t\tconst path: SessionTreeEntry[] = [];\n\t\tconst startId = fromId ?? this.leafId;\n\t\tlet current = startId ? this.byId.get(startId) : undefined;\n\t\twhile (current) {\n\t\t\tpath.unshift(current);\n\t\t\tcurrent = current.parentId ? this.byId.get(current.parentId) : undefined;\n\t\t}\n\t\treturn path;\n\t}\n\n\tgetEntries(): SessionTreeEntry[] {\n\t\treturn this.fileEntries.filter(isSessionTreeEntry);\n\t}\n\n\tgetHeader(): SessionHeaderEntry | null {\n\t\tconst header = this.fileEntries.find((e) => e.type === \"session\");\n\t\treturn header ? (header as SessionHeaderEntry) : null;\n\t}\n\n\tgetTree(): SessionTreeNode[] {\n\t\tconst entries = this.getEntries();\n\t\tconst nodeMap = new Map<string, SessionTreeNode>();\n\t\tconst roots: SessionTreeNode[] = [];\n\n\t\tfor (const entry of entries) {\n\t\t\tconst label = this.labelsById.get(entry.id);\n\t\t\tnodeMap.set(entry.id, { entry, children: [], label });\n\t\t}\n\n\t\tfor (const entry of entries) {\n\t\t\tconst node = nodeMap.get(entry.id);\n\t\t\tif (!node) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.parentId === null || entry.parentId === entry.id) {\n\t\t\t\troots.push(node);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parent = nodeMap.get(entry.parentId);\n\t\t\tif (parent) {\n\t\t\t\tparent.children.push(node);\n\t\t\t} else {\n\t\t\t\troots.push(node);\n\t\t\t}\n\t\t}\n\n\t\tconst stack: SessionTreeNode[] = [...roots];\n\t\twhile (stack.length > 0) {\n\t\t\tconst node = stack.pop();\n\t\t\tif (!node) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnode.children.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\tnew Date(a.entry.timestamp).getTime() -\n\t\t\t\t\tnew Date(b.entry.timestamp).getTime(),\n\t\t\t);\n\t\t\tstack.push(...node.children);\n\t\t}\n\n\t\treturn roots;\n\t}\n\n\tbranch(branchFromId: string): void {\n\t\tif (!this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t}\n\n\tbranchWithSummary(\n\t\tbranchFromId: string | null,\n\t\tsummary: string,\n\t\toptions?: { fromId?: string; details?: unknown; fromHook?: boolean },\n\t): string {\n\t\tif (branchFromId !== null && !this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t\tconst entry: BranchSummaryEntry = {\n\t\t\ttype: \"branch_summary\",\n\t\t\tid: this.createTreeEntryId(),\n\t\t\tparentId: branchFromId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tfromId: options?.fromId ?? branchFromId ?? \"root\",\n\t\t\tsummary,\n\t\t\tdetails: options?.details,\n\t\t\tfromHook: options?.fromHook,\n\t\t};\n\t\tthis.appendTreeEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\tresetLeaf(): void {\n\t\tthis.leafId = null;\n\t}\n\n\tupdateSnapshot(state: AgentState, metadata?: SessionModelMetadata): void {\n\t\tthis._agentSnapshot = state;\n\t\tif (metadata) {\n\t\t\tthis.lastModelMetadata = metadata;\n\t\t}\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tawait this.writer?.flush();\n\t}\n\n\t/**\n\t * Load all sessions for the current directory with metadata\n\t */\n\tloadAllSessions(): SessionMetadata[] {\n\t\treturn this.catalog.loadAllSessions();\n\t}\n\n\tgetSessionFileById(sessionId: string): string | null {\n\t\treturn this.catalog.getSessionFileById(sessionId);\n\t}\n\n\tasync loadEntries(sessionId: string): Promise<SessionEntry[] | null> {\n\t\tconst sessionFile = this.getSessionFileById(sessionId);\n\t\tif (!sessionFile) {\n\t\t\treturn null;\n\t\t}\n\t\treturn safeReadSessionEntries(sessionFile);\n\t}\n\n\t/**\n\t * Set the session file to an existing session\n\t */\n\tsetSessionFile(path: string): void {\n\t\t// Unregister old session file before disposing writer\n\t\tif (this.sessionFile) {\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t}\n\t\tthis.writer?.flushSync();\n\t\tthis.writer?.dispose();\n\n\t\tthis.sessionFile = resolve(path);\n\t\t// Register new session file to prevent migration race conditions\n\t\tregisterActiveSessionFile(this.sessionFile);\n\t\tscheduleSessionMigration();\n\n\t\tif (existsSync(this.sessionFile)) {\n\t\t\tconst entries = safeReadSessionEntries(this.sessionFile);\n\t\t\tconst migrated = migrateToCurrentVersion(entries);\n\t\t\tthis.fileEntries = entries;\n\t\t\tconst header = entries.find((e) => e.type === \"session\") as\n\t\t\t\t| SessionHeaderEntry\n\t\t\t\t| undefined;\n\t\t\tthis.sessionInitialized = Boolean(header && header.provisional !== true);\n\t\t\tthis.rebuildIndex(entries);\n\t\t\tif (migrated) {\n\t\t\t\tthis.rewriteSessionFile();\n\t\t\t}\n\t\t\tthis.sessionId = header?.id ?? uuidv4();\n\t\t\tthis.flushed = true;\n\t\t\tthis.metadataCache.seedFromFile(this.sessionFile);\n\t\t} else {\n\t\t\t// Unregister the non-existent path before initNewSession registers a new one\n\t\t\tunregisterActiveSessionFile(this.sessionFile);\n\t\t\tthis.initNewSession();\n\t\t}\n\t\tthis.initializeWriter();\n\t}\n\n\t/**\n\t * Check if we should initialize the session based on message history.\n\t * Session is initialized once we have at least 1 user message.\n\t */\n\tshouldInitializeSession(messages: AppMessage[]): boolean {\n\t\tif (this.sessionInitialized) return false;\n\n\t\tconst userMessages = messages.filter((m) => m.role === \"user\");\n\t\treturn userMessages.length >= 1;\n\t}\n\n\t/**\n\t * Create a branched session from a specific message index.\n\t * Returns the new session file path.\n\t * @param state - Current agent state\n\t * @param branchFromIndex - Index of the last message to include in the branch (exclusive)\n\t */\n\tcreateBranchedSession(state: AgentState, branchFromIndex: number): string;\n\t/**\n\t * Create a branched session from a specific tree entry id.\n\t */\n\tcreateBranchedSession(leafId: string): string;\n\tcreateBranchedSession(\n\t\tstateOrLeafId: AgentState | string,\n\t\tbranchFromIndex?: number,\n\t): string {\n\t\tif (typeof stateOrLeafId === \"string\") {\n\t\t\treturn this.createBranchedSessionFromLeaf(stateOrLeafId);\n\t\t}\n\t\tif (typeof branchFromIndex !== \"number\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"branchFromIndex is required when branching from AgentState\",\n\t\t\t);\n\t\t}\n\t\treturn this.createBranchedSessionFromState(stateOrLeafId, branchFromIndex);\n\t}\n\n\tprivate createBranchedSessionFromLeaf(leafId: string): string {\n\t\treturn createBranchedSessionFromLeafFn(leafId, {\n\t\t\tsessionDir: this.sessionDir,\n\t\t\tsessionId: this.sessionId,\n\t\t\tsessionFile: this.sessionFile,\n\t\t\tbranch: this.getBranch(leafId),\n\t\t\tcontext: this.buildSessionContext(leafId),\n\t\t\theader: this.getHeader(),\n\t\t\tlabelsById: this.labelsById,\n\t\t});\n\t}\n\n\tprivate createBranchedSessionFromState(\n\t\tstate: AgentState,\n\t\tbranchFromIndex: number,\n\t): string {\n\t\treturn createBranchedSessionFromStateFn(state, branchFromIndex, {\n\t\t\tsessionDir: this.sessionDir,\n\t\t\tsessionId: this.sessionId,\n\t\t\tsessionFile: this.sessionFile,\n\t\t\tlastModelMetadata: this.lastModelMetadata,\n\t\t});\n\t}\n\n\t/**\n\t * List all sessions in the session directory\n\t */\n\tasync listSessions(options?: {\n\t\tlimit?: number;\n\t\toffset?: number;\n\t}): Promise<SessionSummary[]> {\n\t\treturn this.catalog.listSessions(options);\n\t}\n\n\t/**\n\t * Load a session by ID\n\t */\n\tasync loadSession(\n\t\tsessionId: string,\n\t\toptions: { messagesView?: SessionMessagesView } = {},\n\t): Promise<{\n\t\tid: string;\n\t\tsubject?: string;\n\t\ttitle?: string;\n\t\tsummary?: string;\n\t\tresumeSummary?: string;\n\t\tmemoryExtractionHash?: string;\n\t\tmessages: AppMessage[];\n\t\tcreatedAt: string;\n\t\tupdatedAt: string;\n\t\tmessageCount: number;\n\t\tfavorite: boolean;\n\t\ttags?: string[];\n\t\tarchived?: boolean;\n\t\tarchivedAt?: string;\n\t\tmessagesView: SessionMessagesView;\n\t} | null> {\n\t\treturn this.catalog.loadSession(sessionId, options);\n\t}\n\n\t/**\n\t * Create a new session\n\t */\n\tasync createSession(options?: { title?: string }): Promise<{\n\t\tid: string;\n\t\ttitle?: string;\n\t\tresumeSummary?: string;\n\t\tmessages: AppMessage[];\n\t\tcreatedAt: string;\n\t\tupdatedAt: string;\n\t\tmessageCount: number;\n\t}> {\n\t\tthis.startFreshSession();\n\t\tconst now = new Date().toISOString();\n\t\tconst header: SessionHeaderEntry = {\n\t\t\ttype: \"session\",\n\t\t\tversion: CURRENT_SESSION_VERSION,\n\t\t\tid: this.sessionId,\n\t\t\ttimestamp: now,\n\t\t\tcwd: process.cwd(),\n\t\t\tprovisional: true,\n\t\t};\n\t\tthis.fileEntries.unshift(header);\n\n\t\tif (options?.title && this.enabled) {\n\t\t\tconst entry: SessionMetaEntry = {\n\t\t\t\ttype: \"session_meta\",\n\t\t\t\ttimestamp: now,\n\t\t\t\ttitle: options.title,\n\t\t\t};\n\t\t\tthis.fileEntries.push(entry);\n\t\t}\n\t\tthis.rewriteSessionFile();\n\t\tthis.flushed = true;\n\t\tthis.sessionInitialized = false;\n\n\t\treturn {\n\t\t\tid: this.sessionId,\n\t\t\ttitle: options?.title,\n\t\t\tmessages: [],\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now,\n\t\t\tmessageCount: 0,\n\t\t};\n\t}\n\n\timportSessionJsonl(sourcePath: string): PortableSessionImportResult {\n\t\tconst resolvedSource = resolve(sourcePath);\n\t\tif (!existsSync(resolvedSource)) {\n\t\t\tthrow new Error(`Session file not found: ${resolvedSource}`);\n\t\t}\n\n\t\tconst entries = safeReadSessionEntries(resolvedSource);\n\t\treturn this.importPortableEntries(entries);\n\t}\n\n\timportSessionEntries(entries: SessionEntry[]): PortableSessionImportResult {\n\t\treturn this.importPortableEntries([...entries]);\n\t}\n\n\timportPortableSession(sourcePath: string): {\n\t\tsessionFile: string;\n\t\tsessionId: string;\n\t\timportedCount: number;\n\t} {\n\t\tconst resolvedSource = resolve(sourcePath);\n\t\tif (!existsSync(resolvedSource)) {\n\t\t\tthrow new Error(`Session file not found: ${resolvedSource}`);\n\t\t}\n\n\t\tconst extension = extname(resolvedSource).toLowerCase();\n\t\tif (extension === \".json\") {\n\t\t\tconst portableExport = this.readPortableJsonExport(resolvedSource);\n\t\t\tif (portableExport.sessions?.length) {\n\t\t\t\treturn this.importPortableSessionBundle(portableExport);\n\t\t\t}\n\t\t\tif (portableExport.entries) {\n\t\t\t\treturn this.importPortableEntries(portableExport.entries);\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t\"Portable session export is missing both entries and sessions.\",\n\t\t\t);\n\t\t}\n\n\t\tconst entries = safeReadSessionEntries(resolvedSource);\n\t\treturn this.importPortableEntries(entries);\n\t}\n\n\t/**\n\t * Delete a session\n\t */\n\tasync deleteSession(sessionId: string): Promise<void> {\n\t\tthis.catalog.deleteSession(sessionId);\n\t}\n\n\t/**\n\t * Prune old sessions based on configured limits.\n\t * Removes sessions that exceed MAX_SESSIONS count or MAX_SESSION_AGE_DAYS.\n\t * Favorites are never pruned.\n\t * Returns the number of sessions removed.\n\t */\n\tpruneSessions(): { removed: number; errors: number } {\n\t\treturn this.catalog.pruneSessions();\n\t}\n\n\tprivate importPortableEntries(\n\t\tentries: SessionEntry[],\n\t): PortableSessionImportResult {\n\t\tmigrateToCurrentVersion(entries);\n\t\tif (entries.length === 0) {\n\t\t\tthrow new Error(\"Imported session file is empty or unreadable.\");\n\t\t}\n\n\t\tconst headerIndex = entries.findIndex((entry) => entry.type === \"session\");\n\t\tif (headerIndex < 0) {\n\t\t\tthrow new Error(\"Imported session file is missing a session header.\");\n\t\t}\n\n\t\tconst header = entries[headerIndex] as SessionHeaderEntry;\n\t\tlet sessionId = header.id?.trim() || uuidv4();\n\t\tif (this.catalog.getSessionFileById(sessionId)) {\n\t\t\tsessionId = uuidv4();\n\t\t}\n\n\t\tconst timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n\t\tconst targetFile = join(this.sessionDir, `${timestamp}_${sessionId}.jsonl`);\n\t\tconst importedHeader: SessionHeaderEntry = {\n\t\t\t...header,\n\t\t\tid: sessionId,\n\t\t\tsubject: undefined,\n\t\t};\n\t\tconst importedEntries = entries.map((entry, index) =>\n\t\t\tindex === headerIndex ? importedHeader : entry,\n\t\t);\n\n\t\twriteFileSync(\n\t\t\ttargetFile,\n\t\t\t`${importedEntries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`,\n\t\t\t\"utf8\",\n\t\t);\n\n\t\treturn {\n\t\t\tsessionFile: targetFile,\n\t\t\tsessionId,\n\t\t\timportedCount: 1,\n\t\t};\n\t}\n\n\tprivate importPortableSessionBundle(\n\t\tportableExport: PortableSessionBundle,\n\t): PortableSessionImportResult {\n\t\tconst sessions = portableExport.sessions;\n\t\tif (!sessions?.length) {\n\t\t\tthrow new Error(\"Portable session export is missing bundled sessions.\");\n\t\t}\n\n\t\tconst pending = new Map(\n\t\t\tsessions.map((session) => [session.sessionId, session]),\n\t\t);\n\t\tconst importedIds = new Map<string, string>();\n\t\tconst importedFiles = new Map<string, string>();\n\t\tconst ordered: PortableSessionExportSession[] = [];\n\n\t\twhile (pending.size > 0) {\n\t\t\tlet progressed = false;\n\t\t\tfor (const [sessionId, session] of pending) {\n\t\t\t\tif (session.parentSessionId && pending.has(session.parentSessionId)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tordered.push(session);\n\t\t\t\tpending.delete(sessionId);\n\t\t\t\tprogressed = true;\n\t\t\t}\n\t\t\tif (!progressed) {\n\t\t\t\tordered.push(...pending.values());\n\t\t\t\tpending.clear();\n\t\t\t}\n\t\t}\n\n\t\tfor (const session of ordered) {\n\t\t\tconst entries = session.entries ? [...session.entries] : [];\n\t\t\tmigrateToCurrentVersion(entries);\n\t\t\tif (entries.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Bundled session ${session.sessionId} is empty or unreadable.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst headerIndex = entries.findIndex(\n\t\t\t\t(entry) => entry.type === \"session\",\n\t\t\t);\n\t\t\tif (headerIndex < 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Bundled session ${session.sessionId} is missing a session header.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst header = entries[headerIndex] as SessionHeaderEntry;\n\t\t\tlet importedSessionId = header.id?.trim() || uuidv4();\n\t\t\tif (this.catalog.getSessionFileById(importedSessionId)) {\n\t\t\t\timportedSessionId = uuidv4();\n\t\t\t}\n\t\t\tconst timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n\t\t\tconst targetFile = join(\n\t\t\t\tthis.sessionDir,\n\t\t\t\t`${timestamp}_${importedSessionId}.jsonl`,\n\t\t\t);\n\t\t\tconst importedParentSessionId = session.parentSessionId\n\t\t\t\t? importedIds.get(session.parentSessionId)\n\t\t\t\t: undefined;\n\t\t\tconst importedHeader: SessionHeaderEntry = {\n\t\t\t\t...header,\n\t\t\t\tid: importedSessionId,\n\t\t\t\tsubject: undefined,\n\t\t\t\tparentSession: importedParentSessionId,\n\t\t\t\tbranchedFrom: session.parentSessionId\n\t\t\t\t\t? importedFiles.get(session.parentSessionId)\n\t\t\t\t\t: undefined,\n\t\t\t};\n\t\t\tconst importedEntries = entries.map((entry, index) =>\n\t\t\t\tindex === headerIndex ? importedHeader : entry,\n\t\t\t);\n\n\t\t\twriteFileSync(\n\t\t\t\ttargetFile,\n\t\t\t\t`${importedEntries.map((entry) => JSON.stringify(entry)).join(\"\\n\")}\\n`,\n\t\t\t\t\"utf8\",\n\t\t\t);\n\t\t\timportedIds.set(session.sessionId, importedSessionId);\n\t\t\timportedFiles.set(session.sessionId, targetFile);\n\t\t}\n\n\t\tconst selectedSourceSessionId =\n\t\t\tportableExport.sessionId ?? sessions[0]?.sessionId;\n\t\tconst selectedSessionId =\n\t\t\t(selectedSourceSessionId\n\t\t\t\t? importedIds.get(selectedSourceSessionId)\n\t\t\t\t: undefined) ?? importedIds.get(sessions[0]!.sessionId)!;\n\t\tconst selectedSessionFile =\n\t\t\timportedFiles.get(selectedSourceSessionId ?? sessions[0]!.sessionId) ??\n\t\t\timportedFiles.get(sessions[0]!.sessionId)!;\n\n\t\treturn {\n\t\t\tsessionFile: selectedSessionFile,\n\t\t\tsessionId: selectedSessionId,\n\t\t\timportedCount: ordered.length,\n\t\t};\n\t}\n\n\tprivate readPortableJsonExport(sourcePath: string): PortableSessionBundle {\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(readFileSync(sourcePath, \"utf8\"));\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Portable session export is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\n\t\tif (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n\t\t\tthrow new Error(\"Portable session export must be a JSON object.\");\n\t\t}\n\n\t\tconst portableExport = parsed as {\n\t\t\tformat?: unknown;\n\t\t\tsessionId?: unknown;\n\t\t\tentries?: unknown;\n\t\t\tsessions?: unknown;\n\t\t};\n\t\tconst format =\n\t\t\ttypeof portableExport.format === \"string\"\n\t\t\t\t? portableExport.format\n\t\t\t\t: undefined;\n\t\tif (format !== PORTABLE_SESSION_EXPORT_FORMAT) {\n\t\t\tthrow new Error(\n\t\t\t\t`Portable session export format must be ${PORTABLE_SESSION_EXPORT_FORMAT}.`,\n\t\t\t);\n\t\t}\n\n\t\tconst parseEntries = (entries: unknown[], path: string): SessionEntry[] =>\n\t\t\tentries.map((entry, index) => {\n\t\t\t\tconst parsedEntry = tryParseSessionEntry(JSON.stringify(entry));\n\t\t\t\tif (!parsedEntry) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`${path} contains an invalid entry at index ${index}.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn parsedEntry;\n\t\t\t});\n\n\t\tconst entries = Array.isArray(portableExport.entries)\n\t\t\t? parseEntries(portableExport.entries, \"Portable session export\")\n\t\t\t: undefined;\n\t\tconst sessions = Array.isArray(portableExport.sessions)\n\t\t\t? portableExport.sessions.map((session, index) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!session ||\n\t\t\t\t\t\ttypeof session !== \"object\" ||\n\t\t\t\t\t\tArray.isArray(session)\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Portable session export contains an invalid bundled session at index ${index}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst parsedSession = session as {\n\t\t\t\t\t\tsessionId?: unknown;\n\t\t\t\t\t\tparentSessionId?: unknown;\n\t\t\t\t\t\tentries?: unknown;\n\t\t\t\t\t};\n\t\t\t\t\tif (typeof parsedSession.sessionId !== \"string\") {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Portable session export is missing a sessionId for bundled session ${index}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (!Array.isArray(parsedSession.entries)) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Portable session export is missing entries for bundled session ${parsedSession.sessionId}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsessionId: parsedSession.sessionId,\n\t\t\t\t\t\tparentSessionId:\n\t\t\t\t\t\t\ttypeof parsedSession.parentSessionId === \"string\"\n\t\t\t\t\t\t\t\t? parsedSession.parentSessionId\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tsessionFile: join(\n\t\t\t\t\t\t\tthis.sessionDir,\n\t\t\t\t\t\t\t`${parsedSession.sessionId}.jsonl`,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tentries: parseEntries(\n\t\t\t\t\t\t\tparsedSession.entries,\n\t\t\t\t\t\t\t`Bundled session ${parsedSession.sessionId}`,\n\t\t\t\t\t\t),\n\t\t\t\t\t} satisfies PortableSessionExportSession;\n\t\t\t\t})\n\t\t\t: undefined;\n\n\t\tif (!entries && !sessions?.length) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Portable session export is missing both entries and bundled sessions.\",\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tformat,\n\t\t\texportedAt:\n\t\t\t\ttypeof (portableExport as { exportedAt?: unknown }).exportedAt ===\n\t\t\t\t\"string\"\n\t\t\t\t\t? (portableExport as { exportedAt: string }).exportedAt\n\t\t\t\t\t: new Date().toISOString(),\n\t\t\tsessionId:\n\t\t\t\ttypeof portableExport.sessionId === \"string\"\n\t\t\t\t\t? portableExport.sessionId\n\t\t\t\t\t: undefined,\n\t\t\tentries,\n\t\t\tsessions,\n\t\t};\n\t}\n\n\tprivate buildPortableSessionRecords(): PortableSessionExportRecord[] {\n\t\tconst records: PortableSessionExportRecord[] = [];\n\t\tconst filePaths = readdirSync(this.sessionDir)\n\t\t\t.filter((fileName) => fileName.endsWith(\".jsonl\"))\n\t\t\t.map((fileName) => resolve(join(this.sessionDir, fileName)));\n\n\t\tfor (const filePath of filePaths) {\n\t\t\tconst entries = safeReadSessionEntries(filePath);\n\t\t\tconst header = entries.find((entry) => entry.type === \"session\") as\n\t\t\t\t| SessionHeaderEntry\n\t\t\t\t| undefined;\n\t\t\tif (!header?.id) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\trecords.push({\n\t\t\t\tsessionId: header.id,\n\t\t\t\tsessionFile: filePath,\n\t\t\t\ttimestamp: header.timestamp,\n\t\t\t\tparentSessionId: header.parentSession,\n\t\t\t\tparentSessionFile: header.branchedFrom\n\t\t\t\t\t? resolve(header.branchedFrom)\n\t\t\t\t\t: undefined,\n\t\t\t});\n\t\t}\n\n\t\tconst byPath = new Map(\n\t\t\trecords.map((record) => [resolve(record.sessionFile), record]),\n\t\t);\n\t\tfor (const record of records) {\n\t\t\tif (!record.parentSessionId && record.parentSessionFile) {\n\t\t\t\trecord.parentSessionId = byPath.get(\n\t\t\t\t\tresolve(record.parentSessionFile),\n\t\t\t\t)?.sessionId;\n\t\t\t}\n\t\t}\n\n\t\trecords.sort((a, b) => a.timestamp.localeCompare(b.timestamp));\n\t\treturn records;\n\t}\n}\n"]}
|
package/dist/version.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.10.
|
|
3
|
-
"notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.
|
|
2
|
+
"version": "0.10.28",
|
|
3
|
+
"notes": "Maestro by EvalOps - Deterministic coding agent with TUI/CLI and Web UI for AI-assisted development v0.10.28 is now available."
|
|
4
4
|
}
|
package/package.json
CHANGED