@geminixiang/mikan 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/adapters/messages.d.ts +1 -0
  3. package/dist/adapters/messages.d.ts.map +1 -1
  4. package/dist/adapters/messages.js +3 -0
  5. package/dist/adapters/messages.js.map +1 -1
  6. package/dist/adapters/slack/bot.d.ts.map +1 -1
  7. package/dist/adapters/slack/bot.js +8 -2
  8. package/dist/adapters/slack/bot.js.map +1 -1
  9. package/dist/env-manifest.js +1 -1
  10. package/dist/env-manifest.js.map +1 -1
  11. package/dist/events/scheduler.js +1 -1
  12. package/dist/events/scheduler.js.map +1 -1
  13. package/dist/harness/jev.d.ts +6 -10
  14. package/dist/harness/jev.d.ts.map +1 -1
  15. package/dist/harness/jev.js +74 -66
  16. package/dist/harness/jev.js.map +1 -1
  17. package/dist/harness/models.d.ts.map +1 -1
  18. package/dist/harness/models.js +16 -1
  19. package/dist/harness/models.js.map +1 -1
  20. package/dist/harness/presenter.d.ts.map +1 -1
  21. package/dist/harness/presenter.js +1 -19
  22. package/dist/harness/presenter.js.map +1 -1
  23. package/dist/harness/prompt.d.ts +1 -1
  24. package/dist/harness/prompt.d.ts.map +1 -1
  25. package/dist/harness/prompt.js +7 -12
  26. package/dist/harness/prompt.js.map +1 -1
  27. package/dist/harness/runner.js +1 -1
  28. package/dist/harness/runner.js.map +1 -1
  29. package/dist/harness/tools/jev.js +2 -2
  30. package/dist/harness/tools/jev.js.map +1 -1
  31. package/dist/harness/tools/react.js +1 -1
  32. package/dist/harness/tools/react.js.map +1 -1
  33. package/dist/main.js +5 -1
  34. package/dist/main.js.map +1 -1
  35. package/dist/sessions/session-store.d.ts +2 -1
  36. package/dist/sessions/session-store.d.ts.map +1 -1
  37. package/dist/sessions/session-store.js +20 -0
  38. package/dist/sessions/session-store.js.map +1 -1
  39. package/dist/sessions/types.d.ts +1 -0
  40. package/dist/sessions/types.d.ts.map +1 -1
  41. package/dist/sessions/types.js.map +1 -1
  42. package/package.json +1 -2
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/sessions/session-store.ts"],"names":[],"mappings":"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","sourcesContent":["import { chmodSync, existsSync, mkdirSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport { dirname } from \"node:path\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { JsonValue } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type { Message, Models } from \"@earendil-works/pi-ai\";\nimport { calculateContextTokens } from \"@earendil-works/pi-ai/utils/estimate\";\nimport {\n AssistantEntry,\n CompactionEntry,\n Harness,\n LiveDoc,\n MemoryStorage,\n ProviderDoc,\n ROOT_CONVERSATION_ID,\n ToolResultEntry,\n UserEntry,\n createRegistry,\n defineDoc,\n defineEntry,\n defineExtension,\n defineTask,\n type Conversation,\n type ConversationId,\n type EntryId,\n type EntryRecord,\n type HarnessOptions,\n type HarnessSettings,\n type Registry,\n type Storage,\n type Tx,\n} from \"@earendil-works/pi-durable\";\nimport { openNodeSqliteStorage } from \"@earendil-works/pi-durable/storage/sqlite/node\";\nimport type { Office } from \"../office/types.js\";\nimport type {\n AttachedSessionHarness,\n ChatHistoryMessageIdentity,\n ImportedSession,\n ImportedSessionEntry,\n SessionHarnessBinding,\n SessionContext,\n SessionEntry,\n SessionHeader,\n SessionInspection,\n SessionListing,\n SessionRunRecord,\n SessionRunStatus,\n} from \"./types.js\";\nimport { RUN_CAUSE_CUSTOM_TYPE } from \"./types.js\";\nimport { loadMcpTools } from \"../harness/mcp.js\";\nimport type { McpServerConfig, McpServerSummary, McpToolsResult } from \"../harness/types.js\";\nimport * as log from \"../log.js\";\nimport { compactionSummaryOf, wrapCompactionSummary } from \"./compaction-summary.js\";\nimport { isThreadSessionKey } from \"./session-key.js\";\nimport { errorMessage, isRecord } from \"../unknown-values.js\";\n\nconst context = BACKGROUND_CONTEXT;\nconst ENTRY_PAGE_SIZE = 500;\n\nconst TaskAnchor = defineTask<null, { phase: \"done\" }, null>({\n name: \"mikan.task-anchor\",\n version: 1,\n initial: () => ({ phase: \"done\" }),\n phases: {\n done: (_task, runtime, taskContext) =>\n runtime.commit(\n () => ({ status: \"terminal\", outcome: { status: \"completed\", result: null } }),\n taskContext,\n ),\n },\n abort: (_task, runtime, taskContext) =>\n runtime.commit(() => ({ status: \"terminal\", outcome: { status: \"aborted\" } }), taskContext),\n});\n\nconst TaskAnchors = defineExtension({ name: \"mikan.task-anchors\", tasks: [TaskAnchor] });\n\ntype SessionDocState = Partial<{\n name: string;\n run: Partial<SessionRunRecord>;\n}>;\n\nconst SessionDoc = defineDoc<SessionDocState>({\n kind: \"mikan.session\",\n version: 1,\n scope: \"conversation\",\n history: \"latest\",\n fork: \"initial\",\n initial: () => ({}),\n});\n\ntype SessionIndexRecord = Required<{\n conversationId: number;\n id: string;\n createdAt: number;\n}>;\n\ntype SessionIndexState = Required<{ sessions: Record<string, SessionIndexRecord> }>;\n\nconst SessionIndexDoc = defineDoc<SessionIndexState>({\n kind: \"mikan.sessions\",\n version: 1,\n scope: \"session\",\n initial: () => ({ sessions: {} }),\n});\n\nconst ChatHistoryEntry = defineEntry<Readonly<ChatHistoryMessageIdentity>>(\"mikan.chat_history\");\n\nconst CustomSessionEntry = defineEntry<{\n customType: string;\n data: JsonValue;\n timestamp: number;\n}>(\"mikan.custom\");\n\ninterface BoundSessionHarness {\n binding: SessionHarnessBinding;\n providerSessionId: string;\n}\n\nfunction toJson(input: unknown): JsonValue {\n if (input === undefined) return null;\n const copy: JsonValue = JSON.parse(JSON.stringify(input));\n return copy;\n}\n\nfunction durableMessage(message: Message): Message {\n const copy: Message = JSON.parse(JSON.stringify(message));\n return copy;\n}\n\nfunction messageTimestamp(message: Message | undefined): number {\n return message && \"timestamp\" in message && typeof message.timestamp === \"number\"\n ? message.timestamp\n : 0;\n}\n\nfunction contentText(message: Message | undefined): string {\n if (!message || !(\"content\" in message)) return \"\";\n if (typeof message.content === \"string\") return message.content;\n return message.content\n .map((part) => (part.type === \"text\" ? part.text : \"\"))\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction toSessionEntry(record: EntryRecord, sessionId: string): SessionEntry | undefined {\n const id = `${sessionId}:${record.id}`;\n const message = record.model?.[0];\n if (\n UserEntry.is(record) ||\n ChatHistoryEntry.is(record) ||\n AssistantEntry.is(record) ||\n ToolResultEntry.is(record)\n ) {\n if (!message) return undefined;\n return {\n type: \"message\",\n id,\n timestamp: messageTimestamp(message),\n message,\n history: ChatHistoryEntry.is(record) ? record.data : undefined,\n };\n }\n if (CompactionEntry.is(record)) {\n return {\n type: \"compaction\",\n id,\n timestamp: messageTimestamp(message),\n summary: (message && compactionSummaryOf(message)) ?? contentText(message),\n };\n }\n if (CustomSessionEntry.is(record)) {\n return {\n type: \"custom\",\n id,\n timestamp: record.data.timestamp,\n customType: record.data.customType,\n data: record.data.data ?? undefined,\n };\n }\n return undefined;\n}\n\nfunction toSessionEntries(records: readonly EntryRecord[], sessionId: string): SessionEntry[] {\n return records.flatMap((record) => toSessionEntry(record, sessionId) ?? []);\n}\n\nasync function readRecords(conversation: Conversation): Promise<EntryRecord[]> {\n const records: EntryRecord[] = [];\n let cursor: Parameters<Conversation[\"entries\"]>[2];\n do {\n const page = await conversation.entries({}, ENTRY_PAGE_SIZE, cursor, context);\n records.push(...page.items);\n cursor = page.next;\n } while (cursor !== undefined);\n return records.toReversed();\n}\n\nasync function readContext(conversation: Conversation): Promise<SessionContext> {\n const view = await conversation.context(context);\n const messages: AgentMessage[] = view.messages\n .filter((message) => message.role !== \"system\")\n .map(durableMessage);\n return { messages };\n}\n\nfunction bindModels(models: Models, property: PropertyKey): unknown {\n const value = Reflect.get(models, property, models) as unknown;\n return typeof value === \"function\" ? value.bind(models) : value;\n}\n\nfunction requestSessionId(options: unknown): string | undefined {\n return isRecord(options) && typeof options.sessionId === \"string\" ? options.sessionId : undefined;\n}\n\nfunction protectStorageFiles(path: string): void {\n for (const file of [path, `${path}-wal`, `${path}-shm`]) {\n if (existsSync(file)) chmodSync(file, 0o600);\n }\n}\n\nconst REQUEST_METHODS = new Set<PropertyKey>([\"streamSimple\", \"completeSimple\"]);\n\nclass OfficeStorage {\n private static readonly pool = new Map<string, Promise<OfficeStorage>>();\n readonly registry: Registry = createRegistry();\n private opened: Harness | undefined;\n private refs = 0;\n private readonly bindings = new Map<ConversationId, BoundSessionHarness>();\n private readonly writers = new Set<ConversationId>();\n\n private constructor(private readonly path: string | null) {\n this.registry.install(TaskAnchors);\n }\n\n get harness(): Harness {\n if (!this.opened) throw new Error(\"Office session storage is not open\");\n return this.opened;\n }\n\n static async acquire(path: string): Promise<OfficeStorage> {\n let pending = OfficeStorage.pool.get(path);\n if (!pending) {\n pending = OfficeStorage.openShared(path);\n OfficeStorage.pool.set(path, pending);\n pending.catch(() => OfficeStorage.pool.delete(path));\n }\n const storage = await pending;\n storage.refs += 1;\n return storage;\n }\n\n static async inMemory(): Promise<OfficeStorage> {\n const storage = await OfficeStorage.open(null, new MemoryStorage());\n storage.refs = 1;\n return storage;\n }\n\n private static async openShared(path: string): Promise<OfficeStorage> {\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const storage = await OfficeStorage.open(path, await openNodeSqliteStorage(path));\n protectStorageFiles(path);\n await storage.abortUnfinishedWork();\n return storage;\n }\n\n private static async open(path: string | null, backend: Storage): Promise<OfficeStorage> {\n const storage = new OfficeStorage(path);\n storage.opened = await Harness.open(backend, storage.harnessOptions(), context);\n return storage;\n }\n\n private harnessOptions(): HarnessOptions {\n const latest = (): SessionHarnessBinding | undefined =>\n [...this.bindings.values()].at(-1)?.binding;\n const fallback = (): Models => {\n const models = latest()?.models;\n if (!models) throw new Error(\"Session has no model binding; start a run to use the model\");\n return models;\n };\n const models = new Proxy({} as Models, {\n get: (_target, property) => {\n if (!REQUEST_METHODS.has(property)) return bindModels(fallback(), property);\n return (...args: unknown[]) => {\n const sessionId = requestSessionId(args[2]);\n const binding = [...this.bindings.values()].find(\n (bound) => bound.providerSessionId === sessionId,\n )?.binding;\n if (!binding) throw new Error(\"Provider request has no active session binding\");\n const target = binding.requestModels ?? binding.models;\n const method = Reflect.get(target, property, target) as (...input: unknown[]) => unknown;\n return method.apply(target, args);\n };\n },\n });\n const settings = (): HarnessSettings | undefined => latest()?.settings;\n return {\n models,\n registry: this.registry,\n settings: {\n extensions: [],\n get stream() {\n return settings()?.stream;\n },\n get retry() {\n return settings()?.retry;\n },\n get compaction() {\n return settings()?.compaction;\n },\n get toolExecution() {\n return settings()?.toolExecution;\n },\n get steeringMode() {\n return settings()?.steeringMode;\n },\n get followUpMode() {\n return settings()?.followUpMode;\n },\n },\n env: (target, envContext) =>\n this.bindings.get(target.conversationId)?.binding.env?.(target, envContext),\n onReport: (error) => {\n const report = latest()?.onReport;\n if (report) report(error);\n else log.logWarning(\"Durable harness report\", errorMessage(error));\n },\n };\n }\n\n private async abortUnfinishedWork(): Promise<void> {\n const { tasks } = await this.harness.inspect(context);\n const unowned = tasks.filter((task) => !task.record.owner && !task.record.background);\n if (unowned.length === 0) return;\n log.logWarning(\n `Aborting ${unowned.length} durable tasks left unfinished by a previous process`,\n );\n for (const task of unowned) await this.harness.abortTask(task.record.id, context);\n }\n\n async index(): Promise<Readonly<Record<string, SessionIndexRecord>>> {\n return (await this.harness.snapshot(SessionIndexDoc, context))?.sessions ?? {};\n }\n\n claimWriter(conversationId: ConversationId, key: string): void {\n if (this.writers.has(conversationId)) {\n throw new Error(`Session already has an active writer: ${key}`);\n }\n this.writers.add(conversationId);\n }\n\n releaseWriter(conversationId: ConversationId): void {\n this.writers.delete(conversationId);\n }\n\n async bind(conversationId: ConversationId, binding: SessionHarnessBinding): Promise<void> {\n if (this.bindings.has(conversationId)) {\n throw new Error(\"Session already has an attached harness\");\n }\n const providerSessionId =\n (await this.harness.snapshot(ProviderDoc, conversationId, context))?.sessionId ??\n (await this.harness.commit(\n async (tx) => (await tx.doc(ProviderDoc, conversationId)).sessionId,\n context,\n ));\n this.bindings.set(conversationId, { binding, providerSessionId });\n }\n\n unbind(conversationId: ConversationId): void {\n this.bindings.delete(conversationId);\n }\n\n async release(): Promise<void> {\n this.refs -= 1;\n if (this.refs > 0) return;\n if (this.path !== null) OfficeStorage.pool.delete(this.path);\n await this.harness.close(context);\n }\n}\n\nfunction writeSessionIndex(tx: Tx, key: string, record: SessionIndexRecord): Promise<void> {\n return tx.doc(SessionIndexDoc).then((doc) => {\n doc.sessions[key] = record;\n });\n}\n\nasync function lookupSession(\n storage: OfficeStorage,\n key: string,\n): Promise<{ conversation: Conversation; record: SessionIndexRecord } | undefined> {\n const record = (await storage.index())[key];\n if (!record) return undefined;\n const conversation = await storage.harness.conversation(\n record.conversationId as ConversationId,\n context,\n );\n return conversation ? { conversation, record } : undefined;\n}\n\nasync function createSession(\n storage: OfficeStorage,\n key: string,\n): Promise<{ conversation: Conversation; record: SessionIndexRecord }> {\n let record: SessionIndexRecord | undefined;\n const init = async (tx: Tx, conversationId: ConversationId) => {\n record = { conversationId, id: randomUUID(), createdAt: Date.now() };\n await writeSessionIndex(tx, key, record);\n };\n const conversation = isThreadSessionKey(key)\n ? await storage.harness.createConversation({ ownership: { kind: \"ownerless\" }, init }, context)\n : await storage.harness.root(context, { init });\n if (!record) {\n record = { conversationId: conversation.id, id: randomUUID(), createdAt: Date.now() };\n const created = record;\n await conversation.commit((tx) => writeSessionIndex(tx, key, created), context);\n }\n return { conversation, record };\n}\n\nasync function createTaskSession(\n storage: OfficeStorage,\n key: string,\n requesterKey: string,\n): Promise<{ conversation: Conversation; record: SessionIndexRecord }> {\n const requester = await lookupSession(storage, requesterKey);\n if (!requester) throw new Error(`Task requester session not found: ${requesterKey}`);\n const record = await requester.conversation.commit(async (tx) => {\n const anchor = await tx.createTask(TaskAnchor, null, {\n ownership: { kind: \"conversation\" },\n background: true,\n });\n const child = await tx.createConversation({ ownership: { kind: \"task\", taskId: anchor } });\n const created = { conversationId: child.id, id: randomUUID(), createdAt: Date.now() };\n await writeSessionIndex(tx, key, created);\n return created;\n }, context);\n const conversation = await storage.harness.conversation(\n record.conversationId as ConversationId,\n context,\n );\n if (!conversation) throw new Error(`Task session was not created: ${key}`);\n return { conversation, record };\n}\n\nasync function parentSessionId(\n storage: OfficeStorage,\n conversationId: ConversationId,\n): Promise<string | undefined> {\n const parent = await storage.harness.commit(\n async (tx) => (await tx.conversation(conversationId))?.parent,\n context,\n );\n if (!parent) return undefined;\n const records = Object.values(await storage.index());\n return records.find((record) => record.conversationId === parent.conversationId)?.id;\n}\n\nfunction isRunCause(record: EntryRecord, messageId?: string): boolean {\n if (!CustomSessionEntry.is(record) || record.data.customType !== RUN_CAUSE_CUSTOM_TYPE) {\n return false;\n }\n const { data } = record.data;\n return messageId === undefined || (isRecord(data) && data.messageId === messageId);\n}\n\nfunction runEnd(records: readonly EntryRecord[], messageId: string): EntryId | undefined {\n const start = records.findLastIndex((record) => isRunCause(record, messageId));\n if (start < 0) return undefined;\n const next = records.findIndex((record, index) => index > start && isRunCause(record));\n const run = records.slice(start, next < 0 ? undefined : next);\n return (run.findLast((record) => AssistantEntry.is(record)) ?? run.at(-1))?.id;\n}\n\nconst EARLIER_SESSION_PREFIX = \"earlier:\";\n\nexport function earlierSessionKey(sessionId: string): string {\n return `${EARLIER_SESSION_PREFIX}${sessionId}`;\n}\n\nexport function isEarlierSessionKey(key: string): boolean {\n return key.startsWith(EARLIER_SESSION_PREFIX);\n}\n\nasync function appendSessionEntry(\n tx: Tx,\n conversationId: ConversationId,\n entry: ImportedSessionEntry,\n): Promise<void> {\n switch (entry.type) {\n case \"message\": {\n if (entry.history !== undefined && entry.message.role !== \"user\") {\n throw new Error(\"Chat history must enter as an attributed user message\");\n }\n const model = [durableMessage(entry.message)];\n if (entry.history !== undefined) {\n await tx.appendEntry(ChatHistoryEntry, conversationId, { model, data: entry.history });\n } else if (entry.message.role === \"user\") {\n await tx.appendEntry(UserEntry, conversationId, { model });\n } else if (entry.message.role === \"assistant\") {\n await tx.appendEntry(AssistantEntry, conversationId, { model });\n } else {\n await tx.appendEntry(ToolResultEntry, conversationId, {\n model,\n data: { diagnostics: [] },\n });\n }\n return;\n }\n case \"compaction\":\n await tx.appendEntry(CompactionEntry, conversationId, {\n model: [\n {\n role: \"user\",\n content: [{ type: \"text\", text: wrapCompactionSummary(entry.summary) }],\n timestamp: entry.timestamp,\n },\n ],\n data: { reason: \"manual\" },\n head: \"self\",\n });\n return;\n case \"custom\":\n await tx.appendEntry(CustomSessionEntry, conversationId, {\n data: {\n customType: entry.customType,\n data: toJson(entry.data),\n timestamp: entry.timestamp,\n },\n });\n return;\n default:\n entry satisfies never;\n }\n}\n\nexport async function importOfficeSessions(\n path: string,\n sessions: readonly ImportedSession[],\n): Promise<void> {\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const harness = await Harness.open(\n await openNodeSqliteStorage(path),\n { models: {} as Models, registry: createRegistry(), settings: { extensions: [] } },\n context,\n );\n try {\n for (const session of sessions) {\n const init = async (tx: Tx, conversationId: ConversationId) => {\n for (const entry of session.entries) await appendSessionEntry(tx, conversationId, entry);\n if (session.name) (await tx.doc(SessionDoc, conversationId)).name = session.name;\n await writeSessionIndex(tx, session.key, {\n conversationId,\n id: session.id,\n createdAt: session.createdAt,\n });\n };\n if (session.root) await harness.root(context, { init });\n else await harness.createConversation({ ownership: { kind: \"ownerless\" }, init }, context);\n }\n } finally {\n await harness.close(context);\n }\n protectStorageFiles(path);\n}\n\nexport async function readImportedContexts(path: string): Promise<Map<string, AgentMessage[]>> {\n const harness = await Harness.open(\n await openNodeSqliteStorage(path),\n { models: {} as Models, registry: createRegistry(), settings: { extensions: [] } },\n context,\n );\n try {\n const index = (await harness.snapshot(SessionIndexDoc, context))?.sessions ?? {};\n const contexts = new Map<string, AgentMessage[]>();\n for (const [key, record] of Object.entries(index)) {\n const conversation = await harness.conversation(\n record.conversationId as ConversationId,\n context,\n );\n if (conversation) contexts.set(key, (await readContext(conversation)).messages);\n }\n return contexts;\n } finally {\n await harness.close(context);\n }\n}\n\nclass CachedSessionInspection implements SessionInspection {\n constructor(\n private readonly header: SessionHeader,\n private readonly entries: SessionEntry[],\n private readonly name: string | undefined,\n private readonly sessionContext: SessionContext,\n ) {}\n\n getHeader(): SessionHeader {\n return structuredClone(this.header);\n }\n\n async getEntries(): Promise<SessionEntry[]> {\n return structuredClone(this.entries);\n }\n\n async getSessionName(): Promise<string | undefined> {\n return this.name;\n }\n\n async buildSessionContext(): Promise<SessionContext> {\n return structuredClone(this.sessionContext);\n }\n}\n\nasync function withOfficeStorage<T>(\n office: Office,\n read: (storage: OfficeStorage) => Promise<T>,\n): Promise<T> {\n const storage = await OfficeStorage.acquire(office.sessionsPath);\n try {\n return await read(storage);\n } finally {\n await storage.release();\n }\n}\n\nexport class SessionStore implements SessionInspection {\n private mcp: McpToolsResult | undefined;\n private mutationTail: Promise<void> = Promise.resolve();\n private closePromise: Promise<void> | undefined;\n private closed = false;\n private bound = false;\n\n private constructor(\n private readonly storage: OfficeStorage,\n private readonly conversation: Conversation,\n private readonly header: SessionHeader,\n ) {}\n\n static open(office: Office, key: string): Promise<SessionStore> {\n return SessionStore.openOrCreate(office, key, (storage) => createSession(storage, key));\n }\n\n static openTask(office: Office, key: string, requesterKey: string): Promise<SessionStore> {\n return SessionStore.openOrCreate(office, key, (storage) =>\n createTaskSession(storage, key, requesterKey),\n );\n }\n\n private static async openOrCreate(\n office: Office,\n key: string,\n create: (\n storage: OfficeStorage,\n ) => Promise<{ conversation: Conversation; record: SessionIndexRecord }>,\n ): Promise<SessionStore> {\n const storage = await OfficeStorage.acquire(office.sessionsPath);\n try {\n const session = (await lookupSession(storage, key)) ?? (await create(storage));\n storage.claimWriter(session.conversation.id, key);\n return new SessionStore(storage, session.conversation, {\n id: session.record.id,\n createdAt: session.record.createdAt,\n parentSessionId: await parentSessionId(storage, session.conversation.id),\n });\n } catch (error) {\n await storage.release();\n throw error;\n }\n }\n\n static async forkRun(\n office: Office,\n key: string,\n cause: { sessionKey: string; messageId: string },\n entries: readonly ImportedSessionEntry[],\n ): Promise<boolean> {\n return withOfficeStorage(office, async (storage) => {\n if ((await storage.index())[key]) return false;\n const parent = await lookupSession(storage, cause.sessionKey);\n if (!parent) return false;\n const at = runEnd(await readRecords(parent.conversation), cause.messageId);\n if (at === undefined) return false;\n await parent.conversation.fork(\n at,\n {\n ownership: { kind: \"ownerless\" },\n init: async (tx, conversationId) => {\n for (const entry of entries) await appendSessionEntry(tx, conversationId, entry);\n await writeSessionIndex(tx, key, {\n conversationId,\n id: randomUUID(),\n createdAt: Date.now(),\n });\n },\n },\n context,\n );\n return true;\n });\n }\n\n static async inMemory(): Promise<SessionStore> {\n const storage = await OfficeStorage.inMemory();\n const conversation = await storage.harness.root(context);\n return new SessionStore(storage, conversation, { id: randomUUID(), createdAt: Date.now() });\n }\n\n static async exists(office: Office, key: string): Promise<boolean> {\n if (!existsSync(office.sessionsPath)) return false;\n return withOfficeStorage(office, async (storage) => (await storage.index())[key] !== undefined);\n }\n\n static async list(office: Office): Promise<SessionListing[]> {\n if (!existsSync(office.sessionsPath)) return [];\n return withOfficeStorage(office, async (storage) => {\n const index = await storage.index();\n const byConversation = new Map(\n Object.values(index).map((record) => [record.conversationId, record.id]),\n );\n return Promise.all(\n Object.entries(index).map(async ([key, record]) => {\n const parent = await storage.harness.commit(\n async (tx) => (await tx.conversation(record.conversationId as ConversationId))?.parent,\n context,\n );\n const parentId = parent ? byConversation.get(parent.conversationId) : undefined;\n return {\n key,\n id: record.id,\n createdAt: record.createdAt,\n root: record.conversationId === ROOT_CONVERSATION_ID,\n parentSessionId: parentId,\n forkEntryId: parent && parentId ? `${parentId}:${parent.at}` : undefined,\n };\n }),\n );\n });\n }\n\n static async inspect(office: Office, key: string): Promise<SessionInspection | undefined> {\n if (!existsSync(office.sessionsPath)) return undefined;\n return withOfficeStorage(office, async (storage) => {\n const session = await lookupSession(storage, key);\n if (!session) return undefined;\n const { conversation, record } = session;\n const name = (await storage.harness.snapshot(SessionDoc, conversation.id, context))?.name;\n return new CachedSessionInspection(\n {\n id: record.id,\n createdAt: record.createdAt,\n parentSessionId: await parentSessionId(storage, conversation.id),\n },\n toSessionEntries(await readRecords(conversation), record.id),\n name,\n await readContext(conversation),\n );\n });\n }\n\n static async reportTaskOutcome(office: Office, key: string, answer: string): Promise<void> {\n await withOfficeStorage(office, async (storage) => {\n const task = await lookupSession(storage, key);\n if (!task) return;\n const view = await task.conversation.viewState(context);\n const owner = view.value.conversation.owner;\n view.dispose();\n if (!owner) return;\n const requester = await storage.harness.conversation(owner.conversationId, context);\n if (!requester) return;\n const message: Message = {\n role: \"user\",\n content: `[background task ${key} finished] ${answer}`,\n timestamp: Date.now(),\n };\n await requester.submit(\n {\n type: \"write\",\n requestId: `task-report:${task.conversation.id}:${randomUUID()}`,\n entry: { kind: UserEntry.kind, model: [durableMessage(message)] },\n },\n context,\n );\n });\n }\n\n static async interruptedSince(\n office: Office,\n keys: readonly string[],\n sinceMs: number,\n ): Promise<string[]> {\n if (keys.length === 0 || !existsSync(office.sessionsPath)) return [];\n return withOfficeStorage(office, async (storage) => {\n const interrupted: string[] = [];\n for (const key of keys) {\n const session = await lookupSession(storage, key);\n if (!session) continue;\n const run = (await storage.harness.snapshot(SessionDoc, session.conversation.id, context))\n ?.run;\n if (run?.startedAt !== undefined && run.startedAt >= sinceMs && run.endedAt === undefined) {\n interrupted.push(key);\n }\n }\n return interrupted;\n });\n }\n\n static async inspectExecution(\n office: Office,\n key: string,\n ): Promise<{\n open: boolean;\n started: boolean;\n result?: { status: SessionRunStatus; endedAt: number };\n }> {\n if (!existsSync(office.sessionsPath)) return { open: false, started: false };\n return withOfficeStorage(office, async (storage) => {\n const session = await lookupSession(storage, key);\n if (!session) return { open: false, started: false };\n const id = session.conversation.id;\n const live = await storage.harness.snapshot(LiveDoc, id, context);\n const run = (await storage.harness.snapshot(SessionDoc, id, context))?.run;\n const open = live?.run !== undefined;\n return {\n open,\n started: open || run !== undefined,\n result:\n run?.endedAt !== undefined && run.status !== undefined\n ? { status: run.status, endedAt: run.endedAt }\n : undefined,\n };\n });\n }\n\n getHeader(): SessionHeader {\n this.assertOpen();\n return structuredClone(this.header);\n }\n\n getSessionId(): string {\n this.assertOpen();\n return this.header.id;\n }\n\n async getEntries(): Promise<SessionEntry[]> {\n this.assertOpen();\n return toSessionEntries(await readRecords(this.conversation), this.header.id);\n }\n\n async getContextEntries(): Promise<SessionEntry[]> {\n this.assertOpen();\n const view = await this.conversation.context(context);\n return toSessionEntries(view.entries, this.header.id);\n }\n\n async getContextTokens(): Promise<number | undefined> {\n this.assertOpen();\n const view = await this.conversation.context(context);\n const after = view.head?.id ?? Number.NEGATIVE_INFINITY;\n for (const record of view.entries.toReversed()) {\n const message = record.model?.[0];\n if (record.id <= after || !AssistantEntry.is(record) || message?.role !== \"assistant\")\n continue;\n if (message.stopReason === \"aborted\" || message.stopReason === \"error\") continue;\n return calculateContextTokens(message.usage);\n }\n return undefined;\n }\n\n async getSessionName(): Promise<string | undefined> {\n this.assertOpen();\n return (await this.storage.harness.snapshot(SessionDoc, this.conversation.id, context))?.name;\n }\n\n async buildSessionContext(): Promise<SessionContext> {\n this.assertOpen();\n return readContext(this.conversation);\n }\n\n async connectMcp(servers: Record<string, McpServerConfig>, signal?: AbortSignal) {\n return this.mutate(async () => {\n if (this.mcp) throw new Error(\"SessionStore already has MCP connections\");\n this.mcp = await loadMcpTools(servers, signal);\n for (const error of this.mcp.errors) {\n log.logWarning(`MCP server unavailable: ${error.server}`, error.error);\n }\n signal?.throwIfAborted();\n return this.mcp.tools;\n });\n }\n\n mcpServers(): readonly McpServerSummary[] {\n return this.mcp?.servers ?? [];\n }\n\n async bindHarness(binding: SessionHarnessBinding): Promise<AttachedSessionHarness> {\n return this.mutate(async () => {\n await this.storage.bind(this.conversation.id, binding);\n this.bound = true;\n const conversationId = this.conversation.id;\n return {\n harness: this.storage.harness,\n conversation: this.conversation,\n registry: this.storage.registry,\n extensionName: `mikan.${conversationId}`,\n };\n });\n }\n\n async appendEntries(entries: readonly ImportedSessionEntry[]): Promise<void> {\n await this.mutate(() =>\n this.conversation.commit(async (tx) => {\n for (const entry of entries) await appendSessionEntry(tx, this.conversation.id, entry);\n }, context),\n );\n }\n\n async appendMessage(message: AgentMessage): Promise<string> {\n return this.mutate(async () => {\n const conversation = this.conversation;\n const model = [durableMessage(message)];\n const entry = await conversation.commit((tx): Promise<EntryRecord> => {\n switch (message.role) {\n case \"user\":\n return tx.appendEntry(UserEntry, conversation.id, { model });\n case \"assistant\":\n return tx.appendEntry(AssistantEntry, conversation.id, { model });\n case \"toolResult\":\n return tx.appendEntry(ToolResultEntry, conversation.id, {\n model,\n data: { diagnostics: [] },\n });\n default:\n throw new Error(\"Only user, assistant, and tool result messages enter a session\");\n }\n }, context);\n return `${this.header.id}:${entry.id}`;\n });\n }\n\n async appendCustomEntry(\n customType: string,\n data?: unknown,\n timestamp = Date.now(),\n ): Promise<string> {\n return this.mutate(async () => {\n const conversation = this.conversation;\n const entry = await conversation.commit(\n (tx) =>\n tx.appendEntry(CustomSessionEntry, conversation.id, {\n data: { customType, data: toJson(data), timestamp },\n }),\n context,\n );\n return `${this.header.id}:${entry.id}`;\n });\n }\n\n async appendCompactionSummary(summary: string, timestamp: number): Promise<string> {\n const text = wrapCompactionSummary(summary);\n return this.mutate(async () => {\n const conversation = this.conversation;\n const entry = await conversation.commit(\n (tx) =>\n tx.appendEntry(CompactionEntry, conversation.id, {\n model: [{ role: \"user\", content: [{ type: \"text\", text }], timestamp }],\n data: { reason: \"manual\" },\n head: \"self\",\n }),\n context,\n );\n return `${this.header.id}:${entry.id}`;\n });\n }\n\n async reset(): Promise<void> {\n await this.mutate(() => this.conversation.reset(undefined, context));\n }\n\n async setSessionName(name: string): Promise<void> {\n await this.updateSessionDoc((doc) => {\n doc.name = name.trim() || undefined;\n });\n }\n\n async recordRun(run: SessionRunRecord): Promise<void> {\n await this.updateSessionDoc((doc) => {\n doc.run = { ...run };\n });\n }\n\n async close(): Promise<void> {\n if (this.closePromise) return this.closePromise;\n this.closed = true;\n const conversationId = this.conversation.id;\n this.closePromise = this.mutationTail.then(async () => {\n try {\n await this.mcp?.dispose();\n } finally {\n if (this.bound) {\n this.storage.registry.uninstall({ name: `mikan.${conversationId}` });\n this.storage.unbind(conversationId);\n }\n this.storage.releaseWriter(conversationId);\n await this.storage.release();\n }\n });\n return this.closePromise;\n }\n\n private async updateSessionDoc(change: (doc: SessionDocState) => void): Promise<void> {\n await this.mutate(async () => {\n const conversation = this.conversation;\n await conversation.commit(async (tx) => {\n change(await tx.doc(SessionDoc, conversation.id));\n }, context);\n });\n }\n\n private assertOpen(): void {\n if (this.closed) throw new Error(\"SessionStore is closed\");\n }\n\n private mutate<T>(operation: () => Promise<T>): Promise<T> {\n this.assertOpen();\n const result = this.mutationTail.then(operation);\n this.mutationTail = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/sessions/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EACL,cAAc,EACd,eAAe,EACf,OAAO,EACP,OAAO,EACP,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,eAAe,EACf,UAAU,GAUX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAiBvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,OAAO,GAAG,kBAAkB,CAAC;AACnC,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,UAAU,GAAG,UAAU,CAAgC;IAC3D,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAClC,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CACpC,OAAO,CAAC,MAAM,CACZ,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAC9E,WAAW,CACZ;KACJ;IACD,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CACrC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,WAAW,CAAC;CAC9F,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAQzF,MAAM,UAAU,GAAG,SAAS,CAAkB;IAC5C,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;CACpB,CAAC,CAAC;AAUH,MAAM,eAAe,GAAG,SAAS,CAAoB;IACnD,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,WAAW,CAAuC,oBAAoB,CAAC,CAAC;AAEjG,MAAM,kBAAkB,GAAG,WAAW,CAInC,cAAc,CAAC,CAAC;AAOnB,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,IAAI,GAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,OAAgB;IACtC,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA4B;IACpD,OAAO,OAAO,IAAI,WAAW,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;QAC/E,CAAC,CAAC,OAAO,CAAC,SAAS;QACnB,CAAC,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,WAAW,CAAC,OAA4B;IAC/C,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAChE,OAAO,OAAO,CAAC,OAAO;SACnB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACtD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB,EAAE,SAAiB;IAC5D,MAAM,EAAE,GAAG,GAAG,SAAS,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,IACE,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC;QAC3B,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,EAC1B,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,SAAS;YACf,EAAE;YACF,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC;YACpC,OAAO;YACP,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,EAAE;YACF,SAAS,EAAE,gBAAgB,CAAC,OAAO,CAAC;YACpC,OAAO,EAAE,CAAC,OAAO,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC;SAC3E,CAAC;IACJ,CAAC;IACD,IAAI,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,EAAE;YACF,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;YAChC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS;SACpC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAA+B,EAAE,SAAiB;IAC1E,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,YAA0B;IACnD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,IAAI,MAA8C,CAAC;IACnD,GAAG,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC,QAAQ,MAAM,KAAK,SAAS,EAAE;IAC/B,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,YAA0B;IACnD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAmB,IAAI,CAAC,QAAQ;SAC3C,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC9C,GAAG,CAAC,cAAc,CAAC,CAAC;IACvB,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,QAAqB;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAY,CAAC;IAC/D,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClE,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAgB;IACxC,OAAO,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAc,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEjF,MAAM,aAAa;aACO,SAAI,GAAG,IAAI,GAAG,EAAkC,AAA5C,CAA6C;IAOzE,YAAqC,IAAmB;QAAnB,SAAI,GAAJ,IAAI,CAAe;QAN/C,aAAQ,GAAa,cAAc,EAAE,CAAC;QAEvC,SAAI,GAAG,CAAC,CAAC;QACA,aAAQ,GAAG,IAAI,GAAG,EAAuC,CAAC;QAC1D,YAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAGnD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAY;QAC/B,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;QAC9B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QAClB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,aAAa,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACjB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAY;QAC1C,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QAClF,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAmB,EAAE,OAAgB;QAC7D,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QAChF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,GAAsC,EAAE,CACrD,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;QAC9C,MAAM,QAAQ,GAAG,GAAW,EAAE;YAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC;YAChC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC3F,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAY,EAAE;YACrC,GAAG,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,OAAO,UAAU,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC5E,OAAO,CAAC,GAAG,IAAe,EAAE,EAAE;oBAC5B,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAC9C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS,CACjD,EAAE,OAAO,CAAC;oBACX,IAAI,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBAChF,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;oBACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAqC,CAAC;oBACzF,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACpC,CAAC,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,GAAgC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC;QACvE,OAAO;YACL,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE;gBACR,UAAU,EAAE,EAAE;gBACd,IAAI,MAAM;oBACR,OAAO,QAAQ,EAAE,EAAE,MAAM,CAAC;gBAC5B,CAAC;gBACD,IAAI,KAAK;oBACP,OAAO,QAAQ,EAAE,EAAE,KAAK,CAAC;gBAC3B,CAAC;gBACD,IAAI,UAAU;oBACZ,OAAO,QAAQ,EAAE,EAAE,UAAU,CAAC;gBAChC,CAAC;gBACD,IAAI,aAAa;oBACf,OAAO,QAAQ,EAAE,EAAE,aAAa,CAAC;gBACnC,CAAC;gBACD,IAAI,YAAY;oBACd,OAAO,QAAQ,EAAE,EAAE,YAAY,CAAC;gBAClC,CAAC;gBACD,IAAI,YAAY;oBACd,OAAO,QAAQ,EAAE,EAAE,YAAY,CAAC;gBAClC,CAAC;aACF;YACD,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;YAC7E,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,CAAC;gBAClC,IAAI,MAAM;oBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;oBACrB,GAAG,CAAC,UAAU,CAAC,wBAAwB,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACrE,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,GAAG,CAAC,UAAU,CACZ,YAAY,OAAO,CAAC,MAAM,sDAAsD,CACjF,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,OAAO;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;IACjF,CAAC;IAED,WAAW,CAAC,cAA8B,EAAE,GAAW;QACrD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IAED,aAAa,CAAC,cAA8B;QAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAA8B,EAAE,OAA8B;QACvE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,iBAAiB,GACrB,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS;YAC9E,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,EACnE,OAAO,CACR,CAAC,CAAC;QACL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,cAA8B;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;YAAE,OAAO;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,EAAM,EAAE,GAAW,EAAE,MAA0B;IACxE,OAAO,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAsB,EACtB,GAAW;IAEX,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CACrD,MAAM,CAAC,cAAgC,EACvC,OAAO,CACR,CAAC;IACF,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAsB,EACtB,GAAW;IAEX,IAAI,MAAsC,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,EAAE,EAAM,EAAE,cAA8B,EAAE,EAAE;QAC5D,MAAM,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACrE,MAAM,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,CAAC;QAC1C,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC;QAC/F,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,EAAE,cAAc,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACtF,MAAM,OAAO,GAAG,MAAM,CAAC;QACvB,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,OAAsB,EACtB,GAAW,EACX,YAAoB;IAEpB,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,YAAY,EAAE,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC9D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE;YACnD,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;YACnC,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACtF,MAAM,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,OAAO,CAAC,CAAC;IACZ,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CACrD,MAAM,CAAC,cAAgC,EACvC,OAAO,CACR,CAAC;IACF,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;IAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,OAAsB,EACtB,cAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CACzC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAC7D,OAAO,CACR,CAAC;IACF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB,EAAE,SAAkB;IACzD,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,qBAAqB,EAAE,CAAC;QACvF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,OAAO,SAAS,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,MAAM,CAAC,OAA+B,EAAE,SAAiB;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/E,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjF,CAAC;AAED,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAE1C,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,GAAG,sBAAsB,GAAG,SAAS,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,EAAM,EACN,cAA8B,EAC9B,KAA2B;IAE3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,SAAS,EAAE,CAAC;YACf,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,EAAE,CAAC,WAAW,CAAC,gBAAgB,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzF,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACzC,MAAM,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7D,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC9C,MAAM,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE;oBACpD,KAAK;oBACL,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QACD,KAAK,YAAY;YACf,MAAM,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE;gBACpD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;wBACvE,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC3B;iBACF;gBACD,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1B,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YACH,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,EAAE,CAAC,WAAW,CAAC,kBAAkB,EAAE,cAAc,EAAE;gBACvD,IAAI,EAAE;oBACJ,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;oBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;iBAC3B;aACF,CAAC,CAAC;YACH,OAAO;QACT;YACE,KAAqB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,QAAoC;IAEpC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,MAAM,qBAAqB,CAAC,IAAI,CAAC,EACjC,EAAE,MAAM,EAAE,EAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAClF,OAAO,CACR,CAAC;IACF,IAAI,CAAC;QACH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,EAAE,EAAM,EAAE,cAA8B,EAAE,EAAE;gBAC5D,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO;oBAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;gBACzF,IAAI,OAAO,CAAC,IAAI;oBAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;gBACjF,MAAM,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE;oBACvC,cAAc;oBACd,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B,CAAC,CAAC;YACL,CAAC,CAAC;YACF,IAAI,OAAO,CAAC,IAAI;gBAAE,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;;gBACnD,MAAM,OAAO,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,mBAAmB,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY;IACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAChC,MAAM,qBAAqB,CAAC,IAAI,CAAC,EACjC,EAAE,MAAM,EAAE,EAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAClF,OAAO,CACR,CAAC;IACF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;QACnD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,YAAY,CAC7C,MAAM,CAAC,cAAgC,EACvC,OAAO,CACR,CAAC;YACF,IAAI,YAAY;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,uBAAuB;IAC3B,YACmB,MAAqB,EACrB,OAAuB,EACvB,IAAwB,EACxB,cAA8B;sBAH9B,MAAM;uBACN,OAAO;oBACP,IAAI;8BACJ,cAAc;IAC9B,CAAC;IAEJ,SAAS;QACP,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,OAAO,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAc,EACd,IAA4C;IAE5C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,OAAO,YAAY;IAOvB,YACmB,OAAsB,EACtB,YAA0B,EAC1B,MAAqB;QAFrB,YAAO,GAAP,OAAO,CAAe;QACtB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,WAAM,GAAN,MAAM,CAAe;QARhC,iBAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;QAEhD,WAAM,GAAG,KAAK,CAAC;QACf,UAAK,GAAG,KAAK,CAAC;IAMnB,CAAC;IAEJ,MAAM,CAAC,IAAI,CAAC,MAAc,EAAE,GAAW;QACrC,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAc,EAAE,GAAW,EAAE,YAAoB;QAC/D,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CACxD,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAC9C,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,YAAY,CAC/B,MAAc,EACd,GAAW,EACX,MAEwE;QAExE,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/E,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAClD,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,EAAE;gBACrD,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;gBACrB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;gBACnC,eAAe,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;aACzE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,MAAc,EACd,GAAW,EACX,KAAgD,EAChD,OAAwC;QAExC,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjD,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3E,IAAI,EAAE,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACnC,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAC5B,EAAE,EACF;gBACE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;gBAChC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE;oBACjC,KAAK,MAAM,KAAK,IAAI,OAAO;wBAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;oBACjF,MAAM,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE;wBAC/B,cAAc;wBACd,EAAE,EAAE,UAAU,EAAE;wBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB,CAAC,CAAC;gBACL,CAAC;aACF,EACD,OAAO,CACR,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,GAAW;QAC7C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACnD,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAc;QAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAC;QAChD,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CACzE,CAAC;YACF,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;gBAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CACzC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,cAAgC,CAAC,CAAC,EAAE,MAAM,EACtF,OAAO,CACR,CAAC;gBACF,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChF,OAAO;oBACL,GAAG;oBACH,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,IAAI,EAAE,MAAM,CAAC,cAAc,KAAK,oBAAoB;oBACpD,eAAe,EAAE,QAAQ;oBACzB,WAAW,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;iBACzE,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,GAAW;QAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,SAAS,CAAC;QACvD,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC;YAC/B,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;YACzC,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;YAC1F,OAAO,IAAI,uBAAuB,CAChC;gBACE,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,eAAe,EAAE,MAAM,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC;aACjE,EACD,gBAAgB,CAAC,MAAM,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAC5D,IAAI,EACJ,MAAM,WAAW,CAAC,YAAY,CAAC,CAChC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,GAAW,EAAE,MAAc;QACxE,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/C,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;YAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;YACpF,IAAI,CAAC,SAAS;gBAAE,OAAO;YACvB,MAAM,OAAO,GAAY;gBACvB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,oBAAoB,GAAG,cAAc,MAAM,EAAE;gBACtD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YACF,MAAM,SAAS,CAAC,MAAM,CACpB;gBACE,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,eAAe,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,UAAU,EAAE,EAAE;gBAChE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE;aAClE,EACD,OAAO,CACR,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,GAAW,EAAE,GAAW;QAC/D,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO;gBAAE,OAAO,WAAW,CAAC;YACjC,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBAC9C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBACjC,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;oBAClB,GAAG,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;oBAC1B,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBACD,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;gBACjE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;gBACxB,OAAO,WAAW,CAAC;YACrB,CAAC,EAAE,OAAO,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,MAAc,EACd,IAAuB,EACvB,OAAe;QAEf,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,CAAC;QACrE,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,OAAO;oBAAE,SAAS;gBACvB,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;oBACxF,EAAE,GAAG,CAAC;gBACR,IAAI,GAAG,EAAE,SAAS,KAAK,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1F,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YACD,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAC3B,MAAc,EACd,GAAW;QAMX,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC7E,OAAO,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACrD,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;YAC3E,MAAM,IAAI,GAAG,IAAI,EAAE,GAAG,KAAK,SAAS,CAAC;YACrC,OAAO;gBACL,IAAI;gBACJ,OAAO,EAAE,IAAI,IAAI,GAAG,KAAK,SAAS;gBAClC,MAAM,EACJ,GAAG,EAAE,OAAO,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;oBACpD,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;oBAC9C,CAAC,CAAC,SAAS;aAChB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,YAAY;QACV,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,gBAAgB,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,MAAM,CAAC,iBAAiB,CAAC;QACxD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,MAAM,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,OAAO,EAAE,IAAI,KAAK,WAAW;gBACnF,SAAS;YACX,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,OAAO;gBAAE,SAAS;YACjF,OAAO,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAwC,EAAE,MAAoB;QAC7E,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBACpC,GAAG,CAAC,UAAU,CAAC,2BAA2B,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,EAAE,cAAc,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA8B;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,aAAa,EAAE,SAAS,cAAc,EAAE;aACzC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAwC;QAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CACrB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACpC,KAAK,MAAM,KAAK,IAAI,OAAO;gBAAE,MAAM,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzF,CAAC,EAAE,OAAO,CAAC,CACZ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAqB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAwB,EAAE;gBACnE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;oBACrB,KAAK,MAAM;wBACT,OAAO,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC/D,KAAK,WAAW;wBACd,OAAO,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBACpE,KAAK,YAAY;wBACf,OAAO,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,EAAE;4BACtD,KAAK;4BACL,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;yBAC1B,CAAC,CAAC;oBACL;wBACE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC,EAAE,OAAO,CAAC,CAAC;YACZ,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,UAAkB,EAClB,IAAc,EACd,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;QAEtB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CACrC,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,WAAW,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE,EAAE;gBAClD,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE;aACpD,CAAC,EACJ,OAAO,CACR,CAAC;YACF,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAAe,EAAE,SAAiB;QAC9D,MAAM,IAAI,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,CACrC,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,WAAW,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,EAAE;gBAC/C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;gBACvE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1B,IAAI,EAAE,MAAM;aACb,CAAC,EACJ,OAAO,CACR,CAAC;YACF,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAqB;QACnC,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;gBAAE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACpD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;YAC5B,CAAC;oBAAS,CAAC;gBACT,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,EAAE,CAAC,CAAC;oBACrE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAsC;QACnE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,MAAM,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBACrC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC,EAAE,OAAO,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC7D,CAAC;IAEO,MAAM,CAAI,SAA2B;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["import { chmodSync, existsSync, mkdirSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport { dirname } from \"node:path\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { JsonValue } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type { Message, Models } from \"@earendil-works/pi-ai\";\nimport { calculateContextTokens } from \"@earendil-works/pi-ai/utils/estimate\";\nimport {\n AssistantEntry,\n CompactionEntry,\n Harness,\n LiveDoc,\n MemoryStorage,\n ProviderDoc,\n ROOT_CONVERSATION_ID,\n ToolResultEntry,\n UserEntry,\n createRegistry,\n defineDoc,\n defineEntry,\n defineExtension,\n defineTask,\n type Conversation,\n type ConversationId,\n type EntryId,\n type EntryRecord,\n type HarnessOptions,\n type HarnessSettings,\n type Registry,\n type Storage,\n type Tx,\n} from \"@earendil-works/pi-durable\";\nimport { openNodeSqliteStorage } from \"@earendil-works/pi-durable/storage/sqlite/node\";\nimport type { Office } from \"../office/types.js\";\nimport type {\n AttachedSessionHarness,\n ChatHistoryMessageIdentity,\n ImportedSession,\n ImportedSessionEntry,\n ResumeClaim,\n SessionHarnessBinding,\n SessionContext,\n SessionEntry,\n SessionHeader,\n SessionInspection,\n SessionListing,\n SessionRunRecord,\n SessionRunStatus,\n} from \"./types.js\";\nimport { RUN_CAUSE_CUSTOM_TYPE } from \"./types.js\";\nimport { loadMcpTools } from \"../harness/mcp.js\";\nimport type { McpServerConfig, McpServerSummary, McpToolsResult } from \"../harness/types.js\";\nimport * as log from \"../log.js\";\nimport { compactionSummaryOf, wrapCompactionSummary } from \"./compaction-summary.js\";\nimport { isThreadSessionKey } from \"./session-key.js\";\nimport { errorMessage, isRecord } from \"../unknown-values.js\";\n\nconst context = BACKGROUND_CONTEXT;\nconst ENTRY_PAGE_SIZE = 500;\n\nconst TaskAnchor = defineTask<null, { phase: \"done\" }, null>({\n name: \"mikan.task-anchor\",\n version: 1,\n initial: () => ({ phase: \"done\" }),\n phases: {\n done: (_task, runtime, taskContext) =>\n runtime.commit(\n () => ({ status: \"terminal\", outcome: { status: \"completed\", result: null } }),\n taskContext,\n ),\n },\n abort: (_task, runtime, taskContext) =>\n runtime.commit(() => ({ status: \"terminal\", outcome: { status: \"aborted\" } }), taskContext),\n});\n\nconst TaskAnchors = defineExtension({ name: \"mikan.task-anchors\", tasks: [TaskAnchor] });\n\ntype SessionDocState = Partial<{\n name: string;\n run: Partial<SessionRunRecord>;\n resumes: number;\n}>;\n\nconst SessionDoc = defineDoc<SessionDocState>({\n kind: \"mikan.session\",\n version: 1,\n scope: \"conversation\",\n history: \"latest\",\n fork: \"initial\",\n initial: () => ({}),\n});\n\ntype SessionIndexRecord = Required<{\n conversationId: number;\n id: string;\n createdAt: number;\n}>;\n\ntype SessionIndexState = Required<{ sessions: Record<string, SessionIndexRecord> }>;\n\nconst SessionIndexDoc = defineDoc<SessionIndexState>({\n kind: \"mikan.sessions\",\n version: 1,\n scope: \"session\",\n initial: () => ({ sessions: {} }),\n});\n\nconst ChatHistoryEntry = defineEntry<Readonly<ChatHistoryMessageIdentity>>(\"mikan.chat_history\");\n\nconst CustomSessionEntry = defineEntry<{\n customType: string;\n data: JsonValue;\n timestamp: number;\n}>(\"mikan.custom\");\n\ninterface BoundSessionHarness {\n binding: SessionHarnessBinding;\n providerSessionId: string;\n}\n\nfunction toJson(input: unknown): JsonValue {\n if (input === undefined) return null;\n const copy: JsonValue = JSON.parse(JSON.stringify(input));\n return copy;\n}\n\nfunction durableMessage(message: Message): Message {\n const copy: Message = JSON.parse(JSON.stringify(message));\n return copy;\n}\n\nfunction messageTimestamp(message: Message | undefined): number {\n return message && \"timestamp\" in message && typeof message.timestamp === \"number\"\n ? message.timestamp\n : 0;\n}\n\nfunction contentText(message: Message | undefined): string {\n if (!message || !(\"content\" in message)) return \"\";\n if (typeof message.content === \"string\") return message.content;\n return message.content\n .map((part) => (part.type === \"text\" ? part.text : \"\"))\n .filter(Boolean)\n .join(\"\\n\");\n}\n\nfunction toSessionEntry(record: EntryRecord, sessionId: string): SessionEntry | undefined {\n const id = `${sessionId}:${record.id}`;\n const message = record.model?.[0];\n if (\n UserEntry.is(record) ||\n ChatHistoryEntry.is(record) ||\n AssistantEntry.is(record) ||\n ToolResultEntry.is(record)\n ) {\n if (!message) return undefined;\n return {\n type: \"message\",\n id,\n timestamp: messageTimestamp(message),\n message,\n history: ChatHistoryEntry.is(record) ? record.data : undefined,\n };\n }\n if (CompactionEntry.is(record)) {\n return {\n type: \"compaction\",\n id,\n timestamp: messageTimestamp(message),\n summary: (message && compactionSummaryOf(message)) ?? contentText(message),\n };\n }\n if (CustomSessionEntry.is(record)) {\n return {\n type: \"custom\",\n id,\n timestamp: record.data.timestamp,\n customType: record.data.customType,\n data: record.data.data ?? undefined,\n };\n }\n return undefined;\n}\n\nfunction toSessionEntries(records: readonly EntryRecord[], sessionId: string): SessionEntry[] {\n return records.flatMap((record) => toSessionEntry(record, sessionId) ?? []);\n}\n\nasync function readRecords(conversation: Conversation): Promise<EntryRecord[]> {\n const records: EntryRecord[] = [];\n let cursor: Parameters<Conversation[\"entries\"]>[2];\n do {\n const page = await conversation.entries({}, ENTRY_PAGE_SIZE, cursor, context);\n records.push(...page.items);\n cursor = page.next;\n } while (cursor !== undefined);\n return records.toReversed();\n}\n\nasync function readContext(conversation: Conversation): Promise<SessionContext> {\n const view = await conversation.context(context);\n const messages: AgentMessage[] = view.messages\n .filter((message) => message.role !== \"system\")\n .map(durableMessage);\n return { messages };\n}\n\nfunction bindModels(models: Models, property: PropertyKey): unknown {\n const value = Reflect.get(models, property, models) as unknown;\n return typeof value === \"function\" ? value.bind(models) : value;\n}\n\nfunction requestSessionId(options: unknown): string | undefined {\n return isRecord(options) && typeof options.sessionId === \"string\" ? options.sessionId : undefined;\n}\n\nfunction protectStorageFiles(path: string): void {\n for (const file of [path, `${path}-wal`, `${path}-shm`]) {\n if (existsSync(file)) chmodSync(file, 0o600);\n }\n}\n\nconst REQUEST_METHODS = new Set<PropertyKey>([\"streamSimple\", \"completeSimple\"]);\n\nclass OfficeStorage {\n private static readonly pool = new Map<string, Promise<OfficeStorage>>();\n readonly registry: Registry = createRegistry();\n private opened: Harness | undefined;\n private refs = 0;\n private readonly bindings = new Map<ConversationId, BoundSessionHarness>();\n private readonly writers = new Set<ConversationId>();\n\n private constructor(private readonly path: string | null) {\n this.registry.install(TaskAnchors);\n }\n\n get harness(): Harness {\n if (!this.opened) throw new Error(\"Office session storage is not open\");\n return this.opened;\n }\n\n static async acquire(path: string): Promise<OfficeStorage> {\n let pending = OfficeStorage.pool.get(path);\n if (!pending) {\n pending = OfficeStorage.openShared(path);\n OfficeStorage.pool.set(path, pending);\n pending.catch(() => OfficeStorage.pool.delete(path));\n }\n const storage = await pending;\n storage.refs += 1;\n return storage;\n }\n\n static async inMemory(): Promise<OfficeStorage> {\n const storage = await OfficeStorage.open(null, new MemoryStorage());\n storage.refs = 1;\n return storage;\n }\n\n private static async openShared(path: string): Promise<OfficeStorage> {\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const storage = await OfficeStorage.open(path, await openNodeSqliteStorage(path));\n protectStorageFiles(path);\n await storage.abortUnfinishedWork();\n return storage;\n }\n\n private static async open(path: string | null, backend: Storage): Promise<OfficeStorage> {\n const storage = new OfficeStorage(path);\n storage.opened = await Harness.open(backend, storage.harnessOptions(), context);\n return storage;\n }\n\n private harnessOptions(): HarnessOptions {\n const latest = (): SessionHarnessBinding | undefined =>\n [...this.bindings.values()].at(-1)?.binding;\n const fallback = (): Models => {\n const models = latest()?.models;\n if (!models) throw new Error(\"Session has no model binding; start a run to use the model\");\n return models;\n };\n const models = new Proxy({} as Models, {\n get: (_target, property) => {\n if (!REQUEST_METHODS.has(property)) return bindModels(fallback(), property);\n return (...args: unknown[]) => {\n const sessionId = requestSessionId(args[2]);\n const binding = [...this.bindings.values()].find(\n (bound) => bound.providerSessionId === sessionId,\n )?.binding;\n if (!binding) throw new Error(\"Provider request has no active session binding\");\n const target = binding.requestModels ?? binding.models;\n const method = Reflect.get(target, property, target) as (...input: unknown[]) => unknown;\n return method.apply(target, args);\n };\n },\n });\n const settings = (): HarnessSettings | undefined => latest()?.settings;\n return {\n models,\n registry: this.registry,\n settings: {\n extensions: [],\n get stream() {\n return settings()?.stream;\n },\n get retry() {\n return settings()?.retry;\n },\n get compaction() {\n return settings()?.compaction;\n },\n get toolExecution() {\n return settings()?.toolExecution;\n },\n get steeringMode() {\n return settings()?.steeringMode;\n },\n get followUpMode() {\n return settings()?.followUpMode;\n },\n },\n env: (target, envContext) =>\n this.bindings.get(target.conversationId)?.binding.env?.(target, envContext),\n onReport: (error) => {\n const report = latest()?.onReport;\n if (report) report(error);\n else log.logWarning(\"Durable harness report\", errorMessage(error));\n },\n };\n }\n\n private async abortUnfinishedWork(): Promise<void> {\n const { tasks } = await this.harness.inspect(context);\n const unowned = tasks.filter((task) => !task.record.owner && !task.record.background);\n if (unowned.length === 0) return;\n log.logWarning(\n `Aborting ${unowned.length} durable tasks left unfinished by a previous process`,\n );\n for (const task of unowned) await this.harness.abortTask(task.record.id, context);\n }\n\n async index(): Promise<Readonly<Record<string, SessionIndexRecord>>> {\n return (await this.harness.snapshot(SessionIndexDoc, context))?.sessions ?? {};\n }\n\n claimWriter(conversationId: ConversationId, key: string): void {\n if (this.writers.has(conversationId)) {\n throw new Error(`Session already has an active writer: ${key}`);\n }\n this.writers.add(conversationId);\n }\n\n releaseWriter(conversationId: ConversationId): void {\n this.writers.delete(conversationId);\n }\n\n async bind(conversationId: ConversationId, binding: SessionHarnessBinding): Promise<void> {\n if (this.bindings.has(conversationId)) {\n throw new Error(\"Session already has an attached harness\");\n }\n const providerSessionId =\n (await this.harness.snapshot(ProviderDoc, conversationId, context))?.sessionId ??\n (await this.harness.commit(\n async (tx) => (await tx.doc(ProviderDoc, conversationId)).sessionId,\n context,\n ));\n this.bindings.set(conversationId, { binding, providerSessionId });\n }\n\n unbind(conversationId: ConversationId): void {\n this.bindings.delete(conversationId);\n }\n\n async release(): Promise<void> {\n this.refs -= 1;\n if (this.refs > 0) return;\n if (this.path !== null) OfficeStorage.pool.delete(this.path);\n await this.harness.close(context);\n }\n}\n\nfunction writeSessionIndex(tx: Tx, key: string, record: SessionIndexRecord): Promise<void> {\n return tx.doc(SessionIndexDoc).then((doc) => {\n doc.sessions[key] = record;\n });\n}\n\nasync function lookupSession(\n storage: OfficeStorage,\n key: string,\n): Promise<{ conversation: Conversation; record: SessionIndexRecord } | undefined> {\n const record = (await storage.index())[key];\n if (!record) return undefined;\n const conversation = await storage.harness.conversation(\n record.conversationId as ConversationId,\n context,\n );\n return conversation ? { conversation, record } : undefined;\n}\n\nasync function createSession(\n storage: OfficeStorage,\n key: string,\n): Promise<{ conversation: Conversation; record: SessionIndexRecord }> {\n let record: SessionIndexRecord | undefined;\n const init = async (tx: Tx, conversationId: ConversationId) => {\n record = { conversationId, id: randomUUID(), createdAt: Date.now() };\n await writeSessionIndex(tx, key, record);\n };\n const conversation = isThreadSessionKey(key)\n ? await storage.harness.createConversation({ ownership: { kind: \"ownerless\" }, init }, context)\n : await storage.harness.root(context, { init });\n if (!record) {\n record = { conversationId: conversation.id, id: randomUUID(), createdAt: Date.now() };\n const created = record;\n await conversation.commit((tx) => writeSessionIndex(tx, key, created), context);\n }\n return { conversation, record };\n}\n\nasync function createTaskSession(\n storage: OfficeStorage,\n key: string,\n requesterKey: string,\n): Promise<{ conversation: Conversation; record: SessionIndexRecord }> {\n const requester = await lookupSession(storage, requesterKey);\n if (!requester) throw new Error(`Task requester session not found: ${requesterKey}`);\n const record = await requester.conversation.commit(async (tx) => {\n const anchor = await tx.createTask(TaskAnchor, null, {\n ownership: { kind: \"conversation\" },\n background: true,\n });\n const child = await tx.createConversation({ ownership: { kind: \"task\", taskId: anchor } });\n const created = { conversationId: child.id, id: randomUUID(), createdAt: Date.now() };\n await writeSessionIndex(tx, key, created);\n return created;\n }, context);\n const conversation = await storage.harness.conversation(\n record.conversationId as ConversationId,\n context,\n );\n if (!conversation) throw new Error(`Task session was not created: ${key}`);\n return { conversation, record };\n}\n\nasync function parentSessionId(\n storage: OfficeStorage,\n conversationId: ConversationId,\n): Promise<string | undefined> {\n const parent = await storage.harness.commit(\n async (tx) => (await tx.conversation(conversationId))?.parent,\n context,\n );\n if (!parent) return undefined;\n const records = Object.values(await storage.index());\n return records.find((record) => record.conversationId === parent.conversationId)?.id;\n}\n\nfunction isRunCause(record: EntryRecord, messageId?: string): boolean {\n if (!CustomSessionEntry.is(record) || record.data.customType !== RUN_CAUSE_CUSTOM_TYPE) {\n return false;\n }\n const { data } = record.data;\n return messageId === undefined || (isRecord(data) && data.messageId === messageId);\n}\n\nfunction runEnd(records: readonly EntryRecord[], messageId: string): EntryId | undefined {\n const start = records.findLastIndex((record) => isRunCause(record, messageId));\n if (start < 0) return undefined;\n const next = records.findIndex((record, index) => index > start && isRunCause(record));\n const run = records.slice(start, next < 0 ? undefined : next);\n return (run.findLast((record) => AssistantEntry.is(record)) ?? run.at(-1))?.id;\n}\n\nconst EARLIER_SESSION_PREFIX = \"earlier:\";\n\nexport function earlierSessionKey(sessionId: string): string {\n return `${EARLIER_SESSION_PREFIX}${sessionId}`;\n}\n\nexport function isEarlierSessionKey(key: string): boolean {\n return key.startsWith(EARLIER_SESSION_PREFIX);\n}\n\nasync function appendSessionEntry(\n tx: Tx,\n conversationId: ConversationId,\n entry: ImportedSessionEntry,\n): Promise<void> {\n switch (entry.type) {\n case \"message\": {\n if (entry.history !== undefined && entry.message.role !== \"user\") {\n throw new Error(\"Chat history must enter as an attributed user message\");\n }\n const model = [durableMessage(entry.message)];\n if (entry.history !== undefined) {\n await tx.appendEntry(ChatHistoryEntry, conversationId, { model, data: entry.history });\n } else if (entry.message.role === \"user\") {\n await tx.appendEntry(UserEntry, conversationId, { model });\n } else if (entry.message.role === \"assistant\") {\n await tx.appendEntry(AssistantEntry, conversationId, { model });\n } else {\n await tx.appendEntry(ToolResultEntry, conversationId, {\n model,\n data: { diagnostics: [] },\n });\n }\n return;\n }\n case \"compaction\":\n await tx.appendEntry(CompactionEntry, conversationId, {\n model: [\n {\n role: \"user\",\n content: [{ type: \"text\", text: wrapCompactionSummary(entry.summary) }],\n timestamp: entry.timestamp,\n },\n ],\n data: { reason: \"manual\" },\n head: \"self\",\n });\n return;\n case \"custom\":\n await tx.appendEntry(CustomSessionEntry, conversationId, {\n data: {\n customType: entry.customType,\n data: toJson(entry.data),\n timestamp: entry.timestamp,\n },\n });\n return;\n default:\n entry satisfies never;\n }\n}\n\nexport async function importOfficeSessions(\n path: string,\n sessions: readonly ImportedSession[],\n): Promise<void> {\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n const harness = await Harness.open(\n await openNodeSqliteStorage(path),\n { models: {} as Models, registry: createRegistry(), settings: { extensions: [] } },\n context,\n );\n try {\n for (const session of sessions) {\n const init = async (tx: Tx, conversationId: ConversationId) => {\n for (const entry of session.entries) await appendSessionEntry(tx, conversationId, entry);\n if (session.name) (await tx.doc(SessionDoc, conversationId)).name = session.name;\n await writeSessionIndex(tx, session.key, {\n conversationId,\n id: session.id,\n createdAt: session.createdAt,\n });\n };\n if (session.root) await harness.root(context, { init });\n else await harness.createConversation({ ownership: { kind: \"ownerless\" }, init }, context);\n }\n } finally {\n await harness.close(context);\n }\n protectStorageFiles(path);\n}\n\nexport async function readImportedContexts(path: string): Promise<Map<string, AgentMessage[]>> {\n const harness = await Harness.open(\n await openNodeSqliteStorage(path),\n { models: {} as Models, registry: createRegistry(), settings: { extensions: [] } },\n context,\n );\n try {\n const index = (await harness.snapshot(SessionIndexDoc, context))?.sessions ?? {};\n const contexts = new Map<string, AgentMessage[]>();\n for (const [key, record] of Object.entries(index)) {\n const conversation = await harness.conversation(\n record.conversationId as ConversationId,\n context,\n );\n if (conversation) contexts.set(key, (await readContext(conversation)).messages);\n }\n return contexts;\n } finally {\n await harness.close(context);\n }\n}\n\nclass CachedSessionInspection implements SessionInspection {\n constructor(\n private readonly header: SessionHeader,\n private readonly entries: SessionEntry[],\n private readonly name: string | undefined,\n private readonly sessionContext: SessionContext,\n ) {}\n\n getHeader(): SessionHeader {\n return structuredClone(this.header);\n }\n\n async getEntries(): Promise<SessionEntry[]> {\n return structuredClone(this.entries);\n }\n\n async getSessionName(): Promise<string | undefined> {\n return this.name;\n }\n\n async buildSessionContext(): Promise<SessionContext> {\n return structuredClone(this.sessionContext);\n }\n}\n\nasync function withOfficeStorage<T>(\n office: Office,\n read: (storage: OfficeStorage) => Promise<T>,\n): Promise<T> {\n const storage = await OfficeStorage.acquire(office.sessionsPath);\n try {\n return await read(storage);\n } finally {\n await storage.release();\n }\n}\n\nexport class SessionStore implements SessionInspection {\n private mcp: McpToolsResult | undefined;\n private mutationTail: Promise<void> = Promise.resolve();\n private closePromise: Promise<void> | undefined;\n private closed = false;\n private bound = false;\n\n private constructor(\n private readonly storage: OfficeStorage,\n private readonly conversation: Conversation,\n private readonly header: SessionHeader,\n ) {}\n\n static open(office: Office, key: string): Promise<SessionStore> {\n return SessionStore.openOrCreate(office, key, (storage) => createSession(storage, key));\n }\n\n static openTask(office: Office, key: string, requesterKey: string): Promise<SessionStore> {\n return SessionStore.openOrCreate(office, key, (storage) =>\n createTaskSession(storage, key, requesterKey),\n );\n }\n\n private static async openOrCreate(\n office: Office,\n key: string,\n create: (\n storage: OfficeStorage,\n ) => Promise<{ conversation: Conversation; record: SessionIndexRecord }>,\n ): Promise<SessionStore> {\n const storage = await OfficeStorage.acquire(office.sessionsPath);\n try {\n const session = (await lookupSession(storage, key)) ?? (await create(storage));\n storage.claimWriter(session.conversation.id, key);\n return new SessionStore(storage, session.conversation, {\n id: session.record.id,\n createdAt: session.record.createdAt,\n parentSessionId: await parentSessionId(storage, session.conversation.id),\n });\n } catch (error) {\n await storage.release();\n throw error;\n }\n }\n\n static async forkRun(\n office: Office,\n key: string,\n cause: { sessionKey: string; messageId: string },\n entries: readonly ImportedSessionEntry[],\n ): Promise<boolean> {\n return withOfficeStorage(office, async (storage) => {\n if ((await storage.index())[key]) return false;\n const parent = await lookupSession(storage, cause.sessionKey);\n if (!parent) return false;\n const at = runEnd(await readRecords(parent.conversation), cause.messageId);\n if (at === undefined) return false;\n await parent.conversation.fork(\n at,\n {\n ownership: { kind: \"ownerless\" },\n init: async (tx, conversationId) => {\n for (const entry of entries) await appendSessionEntry(tx, conversationId, entry);\n await writeSessionIndex(tx, key, {\n conversationId,\n id: randomUUID(),\n createdAt: Date.now(),\n });\n },\n },\n context,\n );\n return true;\n });\n }\n\n static async inMemory(): Promise<SessionStore> {\n const storage = await OfficeStorage.inMemory();\n const conversation = await storage.harness.root(context);\n return new SessionStore(storage, conversation, { id: randomUUID(), createdAt: Date.now() });\n }\n\n static async exists(office: Office, key: string): Promise<boolean> {\n if (!existsSync(office.sessionsPath)) return false;\n return withOfficeStorage(office, async (storage) => (await storage.index())[key] !== undefined);\n }\n\n static async list(office: Office): Promise<SessionListing[]> {\n if (!existsSync(office.sessionsPath)) return [];\n return withOfficeStorage(office, async (storage) => {\n const index = await storage.index();\n const byConversation = new Map(\n Object.values(index).map((record) => [record.conversationId, record.id]),\n );\n return Promise.all(\n Object.entries(index).map(async ([key, record]) => {\n const parent = await storage.harness.commit(\n async (tx) => (await tx.conversation(record.conversationId as ConversationId))?.parent,\n context,\n );\n const parentId = parent ? byConversation.get(parent.conversationId) : undefined;\n return {\n key,\n id: record.id,\n createdAt: record.createdAt,\n root: record.conversationId === ROOT_CONVERSATION_ID,\n parentSessionId: parentId,\n forkEntryId: parent && parentId ? `${parentId}:${parent.at}` : undefined,\n };\n }),\n );\n });\n }\n\n static async inspect(office: Office, key: string): Promise<SessionInspection | undefined> {\n if (!existsSync(office.sessionsPath)) return undefined;\n return withOfficeStorage(office, async (storage) => {\n const session = await lookupSession(storage, key);\n if (!session) return undefined;\n const { conversation, record } = session;\n const name = (await storage.harness.snapshot(SessionDoc, conversation.id, context))?.name;\n return new CachedSessionInspection(\n {\n id: record.id,\n createdAt: record.createdAt,\n parentSessionId: await parentSessionId(storage, conversation.id),\n },\n toSessionEntries(await readRecords(conversation), record.id),\n name,\n await readContext(conversation),\n );\n });\n }\n\n static async reportTaskOutcome(office: Office, key: string, answer: string): Promise<void> {\n await withOfficeStorage(office, async (storage) => {\n const task = await lookupSession(storage, key);\n if (!task) return;\n const view = await task.conversation.viewState(context);\n const owner = view.value.conversation.owner;\n view.dispose();\n if (!owner) return;\n const requester = await storage.harness.conversation(owner.conversationId, context);\n if (!requester) return;\n const message: Message = {\n role: \"user\",\n content: `[background task ${key} finished] ${answer}`,\n timestamp: Date.now(),\n };\n await requester.submit(\n {\n type: \"write\",\n requestId: `task-report:${task.conversation.id}:${randomUUID()}`,\n entry: { kind: UserEntry.kind, model: [durableMessage(message)] },\n },\n context,\n );\n });\n }\n\n static async claimResume(office: Office, key: string, max: number): Promise<ResumeClaim> {\n return withOfficeStorage(office, async (storage) => {\n const session = await lookupSession(storage, key);\n if (!session) return \"exhausted\";\n return session.conversation.commit(async (tx) => {\n const doc = await tx.doc(SessionDoc, session.conversation.id);\n const resumes = doc.resumes ?? 0;\n if (resumes < max) {\n doc.resumes = resumes + 1;\n return \"resume\";\n }\n doc.run = { ...doc.run, endedAt: Date.now(), status: \"aborted\" };\n doc.resumes = undefined;\n return \"exhausted\";\n }, context);\n });\n }\n\n static async interruptedSince(\n office: Office,\n keys: readonly string[],\n sinceMs: number,\n ): Promise<string[]> {\n if (keys.length === 0 || !existsSync(office.sessionsPath)) return [];\n return withOfficeStorage(office, async (storage) => {\n const interrupted: string[] = [];\n for (const key of keys) {\n const session = await lookupSession(storage, key);\n if (!session) continue;\n const run = (await storage.harness.snapshot(SessionDoc, session.conversation.id, context))\n ?.run;\n if (run?.startedAt !== undefined && run.startedAt >= sinceMs && run.endedAt === undefined) {\n interrupted.push(key);\n }\n }\n return interrupted;\n });\n }\n\n static async inspectExecution(\n office: Office,\n key: string,\n ): Promise<{\n open: boolean;\n started: boolean;\n result?: { status: SessionRunStatus; endedAt: number };\n }> {\n if (!existsSync(office.sessionsPath)) return { open: false, started: false };\n return withOfficeStorage(office, async (storage) => {\n const session = await lookupSession(storage, key);\n if (!session) return { open: false, started: false };\n const id = session.conversation.id;\n const live = await storage.harness.snapshot(LiveDoc, id, context);\n const run = (await storage.harness.snapshot(SessionDoc, id, context))?.run;\n const open = live?.run !== undefined;\n return {\n open,\n started: open || run !== undefined,\n result:\n run?.endedAt !== undefined && run.status !== undefined\n ? { status: run.status, endedAt: run.endedAt }\n : undefined,\n };\n });\n }\n\n getHeader(): SessionHeader {\n this.assertOpen();\n return structuredClone(this.header);\n }\n\n getSessionId(): string {\n this.assertOpen();\n return this.header.id;\n }\n\n async getEntries(): Promise<SessionEntry[]> {\n this.assertOpen();\n return toSessionEntries(await readRecords(this.conversation), this.header.id);\n }\n\n async getContextEntries(): Promise<SessionEntry[]> {\n this.assertOpen();\n const view = await this.conversation.context(context);\n return toSessionEntries(view.entries, this.header.id);\n }\n\n async getContextTokens(): Promise<number | undefined> {\n this.assertOpen();\n const view = await this.conversation.context(context);\n const after = view.head?.id ?? Number.NEGATIVE_INFINITY;\n for (const record of view.entries.toReversed()) {\n const message = record.model?.[0];\n if (record.id <= after || !AssistantEntry.is(record) || message?.role !== \"assistant\")\n continue;\n if (message.stopReason === \"aborted\" || message.stopReason === \"error\") continue;\n return calculateContextTokens(message.usage);\n }\n return undefined;\n }\n\n async getSessionName(): Promise<string | undefined> {\n this.assertOpen();\n return (await this.storage.harness.snapshot(SessionDoc, this.conversation.id, context))?.name;\n }\n\n async buildSessionContext(): Promise<SessionContext> {\n this.assertOpen();\n return readContext(this.conversation);\n }\n\n async connectMcp(servers: Record<string, McpServerConfig>, signal?: AbortSignal) {\n return this.mutate(async () => {\n if (this.mcp) throw new Error(\"SessionStore already has MCP connections\");\n this.mcp = await loadMcpTools(servers, signal);\n for (const error of this.mcp.errors) {\n log.logWarning(`MCP server unavailable: ${error.server}`, error.error);\n }\n signal?.throwIfAborted();\n return this.mcp.tools;\n });\n }\n\n mcpServers(): readonly McpServerSummary[] {\n return this.mcp?.servers ?? [];\n }\n\n async bindHarness(binding: SessionHarnessBinding): Promise<AttachedSessionHarness> {\n return this.mutate(async () => {\n await this.storage.bind(this.conversation.id, binding);\n this.bound = true;\n const conversationId = this.conversation.id;\n return {\n harness: this.storage.harness,\n conversation: this.conversation,\n registry: this.storage.registry,\n extensionName: `mikan.${conversationId}`,\n };\n });\n }\n\n async appendEntries(entries: readonly ImportedSessionEntry[]): Promise<void> {\n await this.mutate(() =>\n this.conversation.commit(async (tx) => {\n for (const entry of entries) await appendSessionEntry(tx, this.conversation.id, entry);\n }, context),\n );\n }\n\n async appendMessage(message: AgentMessage): Promise<string> {\n return this.mutate(async () => {\n const conversation = this.conversation;\n const model = [durableMessage(message)];\n const entry = await conversation.commit((tx): Promise<EntryRecord> => {\n switch (message.role) {\n case \"user\":\n return tx.appendEntry(UserEntry, conversation.id, { model });\n case \"assistant\":\n return tx.appendEntry(AssistantEntry, conversation.id, { model });\n case \"toolResult\":\n return tx.appendEntry(ToolResultEntry, conversation.id, {\n model,\n data: { diagnostics: [] },\n });\n default:\n throw new Error(\"Only user, assistant, and tool result messages enter a session\");\n }\n }, context);\n return `${this.header.id}:${entry.id}`;\n });\n }\n\n async appendCustomEntry(\n customType: string,\n data?: unknown,\n timestamp = Date.now(),\n ): Promise<string> {\n return this.mutate(async () => {\n const conversation = this.conversation;\n const entry = await conversation.commit(\n (tx) =>\n tx.appendEntry(CustomSessionEntry, conversation.id, {\n data: { customType, data: toJson(data), timestamp },\n }),\n context,\n );\n return `${this.header.id}:${entry.id}`;\n });\n }\n\n async appendCompactionSummary(summary: string, timestamp: number): Promise<string> {\n const text = wrapCompactionSummary(summary);\n return this.mutate(async () => {\n const conversation = this.conversation;\n const entry = await conversation.commit(\n (tx) =>\n tx.appendEntry(CompactionEntry, conversation.id, {\n model: [{ role: \"user\", content: [{ type: \"text\", text }], timestamp }],\n data: { reason: \"manual\" },\n head: \"self\",\n }),\n context,\n );\n return `${this.header.id}:${entry.id}`;\n });\n }\n\n async reset(): Promise<void> {\n await this.mutate(() => this.conversation.reset(undefined, context));\n }\n\n async setSessionName(name: string): Promise<void> {\n await this.updateSessionDoc((doc) => {\n doc.name = name.trim() || undefined;\n });\n }\n\n async recordRun(run: SessionRunRecord): Promise<void> {\n await this.updateSessionDoc((doc) => {\n doc.run = { ...run };\n if (run.endedAt !== undefined) doc.resumes = undefined;\n });\n }\n\n async close(): Promise<void> {\n if (this.closePromise) return this.closePromise;\n this.closed = true;\n const conversationId = this.conversation.id;\n this.closePromise = this.mutationTail.then(async () => {\n try {\n await this.mcp?.dispose();\n } finally {\n if (this.bound) {\n this.storage.registry.uninstall({ name: `mikan.${conversationId}` });\n this.storage.unbind(conversationId);\n }\n this.storage.releaseWriter(conversationId);\n await this.storage.release();\n }\n });\n return this.closePromise;\n }\n\n private async updateSessionDoc(change: (doc: SessionDocState) => void): Promise<void> {\n await this.mutate(async () => {\n const conversation = this.conversation;\n await conversation.commit(async (tx) => {\n change(await tx.doc(SessionDoc, conversation.id));\n }, context);\n });\n }\n\n private assertOpen(): void {\n if (this.closed) throw new Error(\"SessionStore is closed\");\n }\n\n private mutate<T>(operation: () => Promise<T>): Promise<T> {\n this.assertOpen();\n const result = this.mutationTail.then(operation);\n this.mutationTail = result.then(\n () => undefined,\n () => undefined,\n );\n return result;\n }\n}\n"]}
@@ -53,6 +53,7 @@ export interface SessionCompactionEntry extends SessionEntryBase {
53
53
  }
54
54
  export type SessionEntry = SessionMessageEntry | SessionCustomEntry | SessionCompactionEntry;
55
55
  export type SessionRunStatus = "completed" | "aborted" | "failed";
56
+ export type ResumeClaim = "resume" | "exhausted";
56
57
  export interface SessionRunRecord {
57
58
  startedAt?: number;
58
59
  endedAt?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sessions/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sessions/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sessions/types.ts"],"names":[],"mappings":"AA+EA,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC","sourcesContent":["import type { Office } from \"../office/types.js\";\nimport type { ConversationKind } from \"../types.js\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Message, Models } from \"@earendil-works/pi-ai\";\nimport type {\n Conversation,\n Harness,\n HarnessOptions,\n HarnessSettings,\n Registry,\n} from \"@earendil-works/pi-durable\";\nimport type { JsonValue } from \"@earendil-works/chord\";\nimport type { ConversationLogMessage } from \"../types.js\";\nimport type { SessionStore } from \"./session-store.js\";\n\nexport interface ResolveSessionKeyOptions {\n conversationId: string;\n conversationKind: ConversationKind;\n messageId: string;\n threadTs?: string;\n persistentTopLevel?: boolean;\n scopeDirectThreads?: boolean;\n}\n\nexport interface SessionHarnessBinding {\n models: Models;\n requestModels?: Models;\n env?: HarnessOptions[\"env\"];\n settings?: HarnessSettings;\n onReport?: (error: unknown) => void;\n}\n\nexport interface AttachedSessionHarness {\n harness: Harness;\n conversation: Conversation;\n registry: Registry;\n extensionName: string;\n}\n\nexport interface SessionContext {\n messages: AgentMessage[];\n}\n\ninterface SessionEntryBase {\n id: string;\n timestamp: number;\n}\n\nexport interface ChatHistoryMessageIdentity {\n messageId: string | null;\n}\n\nexport interface SessionMessageEntry extends SessionEntryBase {\n type: \"message\";\n message: AgentMessage;\n history?: ChatHistoryMessageIdentity;\n}\n\ninterface SessionCustomEntry extends SessionEntryBase {\n type: \"custom\";\n customType: string;\n data?: JsonValue;\n}\n\nexport interface SessionCompactionEntry extends SessionEntryBase {\n type: \"compaction\";\n summary: string;\n}\n\nexport type SessionEntry = SessionMessageEntry | SessionCustomEntry | SessionCompactionEntry;\n\nexport type SessionRunStatus = \"completed\" | \"aborted\" | \"failed\";\n\nexport interface SessionRunRecord {\n startedAt?: number;\n endedAt?: number;\n status?: SessionRunStatus;\n}\n\nexport const CONTROL_INPUT_CUSTOM_TYPE = \"mikan.control_input\";\nexport const RUN_CAUSE_CUSTOM_TYPE = \"mikan.run_cause\";\n\nexport interface SessionInspection {\n getHeader(): SessionHeader;\n getEntries(): Promise<SessionEntry[]>;\n getSessionName(): Promise<string | undefined>;\n buildSessionContext(): Promise<SessionContext>;\n}\n\nexport interface SessionHeader {\n id: string;\n createdAt: number;\n parentSessionId?: string;\n}\n\nexport interface ThreadRootMessage {\n text?: string;\n userName?: string;\n user?: string;\n}\n\nexport interface ResolvedSessionScope {\n threadRootMessage: ThreadRootMessage | null;\n}\n\nexport interface SessionListing {\n key: string;\n id: string;\n createdAt: number;\n root: boolean;\n parentSessionId: string | undefined;\n forkEntryId: string | undefined;\n}\n\nexport type ImportedSessionEntry =\n | { type: \"message\"; message: Message; history?: ChatHistoryMessageIdentity }\n | { type: \"compaction\"; summary: string; timestamp: number }\n | { type: \"custom\"; customType: string; data: unknown; timestamp: number };\n\nexport interface ImportedSession {\n key: string;\n id: string;\n createdAt: number;\n root: boolean;\n name: string | undefined;\n entries: ImportedSessionEntry[];\n}\n\nexport interface LogRecord {\n message: ConversationLogMessage;\n index: number;\n}\n\nexport interface ChatHistorySyncOptions {\n isCommandText: (text: string) => boolean;\n recentDays?: number;\n maxTopLevelMessages?: number;\n now?: () => Date;\n}\n\nexport interface ResolveChatSessionScopeOptions {\n office: Office;\n sessionKey: string;\n currentMessageId?: string;\n}\n\nexport interface SyncChatSessionOptions {\n office: Office;\n sessionKey: string;\n sessionManager: SessionStore;\n currentMessageId?: string;\n}\n\nexport interface ResetChatSessionOptions {\n office: Office;\n sessionKey: string;\n}\n\nexport interface RegisterThreadSessionOptions {\n office: Office;\n sessionKey: string;\n}\n\nexport interface HasMaterializedSessionOptions {\n office: Office;\n sessionKey: string;\n}\n\nexport interface ThreadBootstrapWaitOptions {\n parentSessionKey: string;\n sessionKey: string;\n hasThreadSession: () => Promise<boolean>;\n isParentRunning: () => boolean;\n sleep?: (ms: number) => Promise<void>;\n pollMs?: number;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sessions/types.ts"],"names":[],"mappings":"AAiFA,MAAM,CAAC,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC","sourcesContent":["import type { Office } from \"../office/types.js\";\nimport type { ConversationKind } from \"../types.js\";\nimport type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Message, Models } from \"@earendil-works/pi-ai\";\nimport type {\n Conversation,\n Harness,\n HarnessOptions,\n HarnessSettings,\n Registry,\n} from \"@earendil-works/pi-durable\";\nimport type { JsonValue } from \"@earendil-works/chord\";\nimport type { ConversationLogMessage } from \"../types.js\";\nimport type { SessionStore } from \"./session-store.js\";\n\nexport interface ResolveSessionKeyOptions {\n conversationId: string;\n conversationKind: ConversationKind;\n messageId: string;\n threadTs?: string;\n persistentTopLevel?: boolean;\n scopeDirectThreads?: boolean;\n}\n\nexport interface SessionHarnessBinding {\n models: Models;\n requestModels?: Models;\n env?: HarnessOptions[\"env\"];\n settings?: HarnessSettings;\n onReport?: (error: unknown) => void;\n}\n\nexport interface AttachedSessionHarness {\n harness: Harness;\n conversation: Conversation;\n registry: Registry;\n extensionName: string;\n}\n\nexport interface SessionContext {\n messages: AgentMessage[];\n}\n\ninterface SessionEntryBase {\n id: string;\n timestamp: number;\n}\n\nexport interface ChatHistoryMessageIdentity {\n messageId: string | null;\n}\n\nexport interface SessionMessageEntry extends SessionEntryBase {\n type: \"message\";\n message: AgentMessage;\n history?: ChatHistoryMessageIdentity;\n}\n\ninterface SessionCustomEntry extends SessionEntryBase {\n type: \"custom\";\n customType: string;\n data?: JsonValue;\n}\n\nexport interface SessionCompactionEntry extends SessionEntryBase {\n type: \"compaction\";\n summary: string;\n}\n\nexport type SessionEntry = SessionMessageEntry | SessionCustomEntry | SessionCompactionEntry;\n\nexport type SessionRunStatus = \"completed\" | \"aborted\" | \"failed\";\n\nexport type ResumeClaim = \"resume\" | \"exhausted\";\n\nexport interface SessionRunRecord {\n startedAt?: number;\n endedAt?: number;\n status?: SessionRunStatus;\n}\n\nexport const CONTROL_INPUT_CUSTOM_TYPE = \"mikan.control_input\";\nexport const RUN_CAUSE_CUSTOM_TYPE = \"mikan.run_cause\";\n\nexport interface SessionInspection {\n getHeader(): SessionHeader;\n getEntries(): Promise<SessionEntry[]>;\n getSessionName(): Promise<string | undefined>;\n buildSessionContext(): Promise<SessionContext>;\n}\n\nexport interface SessionHeader {\n id: string;\n createdAt: number;\n parentSessionId?: string;\n}\n\nexport interface ThreadRootMessage {\n text?: string;\n userName?: string;\n user?: string;\n}\n\nexport interface ResolvedSessionScope {\n threadRootMessage: ThreadRootMessage | null;\n}\n\nexport interface SessionListing {\n key: string;\n id: string;\n createdAt: number;\n root: boolean;\n parentSessionId: string | undefined;\n forkEntryId: string | undefined;\n}\n\nexport type ImportedSessionEntry =\n | { type: \"message\"; message: Message; history?: ChatHistoryMessageIdentity }\n | { type: \"compaction\"; summary: string; timestamp: number }\n | { type: \"custom\"; customType: string; data: unknown; timestamp: number };\n\nexport interface ImportedSession {\n key: string;\n id: string;\n createdAt: number;\n root: boolean;\n name: string | undefined;\n entries: ImportedSessionEntry[];\n}\n\nexport interface LogRecord {\n message: ConversationLogMessage;\n index: number;\n}\n\nexport interface ChatHistorySyncOptions {\n isCommandText: (text: string) => boolean;\n recentDays?: number;\n maxTopLevelMessages?: number;\n now?: () => Date;\n}\n\nexport interface ResolveChatSessionScopeOptions {\n office: Office;\n sessionKey: string;\n currentMessageId?: string;\n}\n\nexport interface SyncChatSessionOptions {\n office: Office;\n sessionKey: string;\n sessionManager: SessionStore;\n currentMessageId?: string;\n}\n\nexport interface ResetChatSessionOptions {\n office: Office;\n sessionKey: string;\n}\n\nexport interface RegisterThreadSessionOptions {\n office: Office;\n sessionKey: string;\n}\n\nexport interface HasMaterializedSessionOptions {\n office: Office;\n sessionKey: string;\n}\n\nexport interface ThreadBootstrapWaitOptions {\n parentSessionKey: string;\n sessionKey: string;\n hasThreadSession: () => Promise<boolean>;\n isParentRunning: () => boolean;\n sleep?: (ms: number) => Promise<void>;\n pollMs?: number;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geminixiang/mikan",
3
- "version": "1.1.0",
3
+ "version": "1.2.1",
4
4
  "description": "Self-hosted AI coding agent for organizations: every Slack channel and DM gets its own sandboxed workspace, credentials, and memory.",
5
5
  "keywords": [
6
6
  "agent",
@@ -66,7 +66,6 @@
66
66
  "@earendil-works/pi-codemode": "^1.1.0",
67
67
  "@earendil-works/pi-durable": "^1.1.0",
68
68
  "@earendil-works/pi-mcp": "^1.1.0",
69
- "@geminixiang/jev": "^0.3.1",
70
69
  "@opentelemetry/api": "^1.9.1",
71
70
  "@opentelemetry/exporter-metrics-otlp-proto": "^0.221.0",
72
71
  "@opentelemetry/exporter-trace-otlp-proto": "^0.221.0",