@geminixiang/mikan 1.0.0-beta.90 → 1.0.0-beta.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/harness/mcp-result.d.ts.map +1 -1
- package/dist/harness/mcp-result.js +13 -2
- package/dist/harness/mcp-result.js.map +1 -1
- package/dist/harness/mcp.d.ts +2 -2
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +65 -13
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +11 -6
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/tools/codemode.d.ts +2 -0
- package/dist/harness/tools/codemode.d.ts.map +1 -1
- package/dist/harness/tools/codemode.js +87 -24
- package/dist/harness/tools/codemode.js.map +1 -1
- package/dist/harness/tools/pi-tools.d.ts.map +1 -1
- package/dist/harness/tools/pi-tools.js +3 -1
- package/dist/harness/tools/pi-tools.js.map +1 -1
- package/dist/harness/tools/tool-search.d.ts +1 -0
- package/dist/harness/tools/tool-search.d.ts.map +1 -1
- package/dist/harness/tools/tool-search.js +80 -18
- package/dist/harness/tools/tool-search.js.map +1 -1
- package/dist/harness/types.d.ts +12 -6
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/sessions/session-store.d.ts +2 -2
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +3 -4
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +2 -0
- package/dist/settings/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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 ROOT_CONVERSATION_ID,\n ToolResultEntry,\n UserEntry,\n createRegistry,\n defineDoc,\n defineEntry,\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 ImportedSession,\n ImportedSessionEntry,\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, formatMcpServerInstructions } from \"../harness/mcp.js\";\nimport type { McpServerConfig, 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\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 CustomSessionEntry = defineEntry<{\n customType: string;\n data: JsonValue;\n timestamp: number;\n}>(\"mikan.custom\");\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 tagRequest(messages: readonly Message[]): readonly Message[];\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 (UserEntry.is(record) || AssistantEntry.is(record) || ToolResultEntry.is(record)) {\n if (!message) return undefined;\n return { type: \"message\", id, timestamp: messageTimestamp(message), message };\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 requestOwnerKey(request: unknown): object | undefined {\n if (typeof request !== \"object\" || request === null || !(\"messages\" in request)) return undefined;\n const { messages } = request;\n if (!Array.isArray(messages)) return undefined;\n const last: unknown = messages.at(-1);\n return typeof last === \"object\" && last !== null ? last : 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, SessionHarnessBinding>();\n private readonly owners = new WeakMap<object, ConversationId>();\n private readonly writers = new Set<ConversationId>();\n\n private constructor(private readonly path: string | null) {}\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 => [...this.bindings.values()].at(-1);\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 key = requestOwnerKey(args[1]);\n const owner = key ? this.owners.get(key) : undefined;\n const binding = owner === undefined ? undefined : this.bindings.get(owner);\n const target = binding?.requestModels ?? binding?.models ?? fallback();\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)?.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);\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 bind(conversationId: ConversationId, binding: SessionHarnessBinding): void {\n if (this.bindings.has(conversationId)) {\n throw new Error(\"Session already has an attached harness\");\n }\n this.bindings.set(conversationId, binding);\n }\n\n unbind(conversationId: ConversationId): void {\n this.bindings.delete(conversationId);\n }\n\n tag(conversationId: ConversationId, messages: readonly Message[]): readonly Message[] {\n const last = messages.at(-1);\n if (!last) return messages;\n const tagged = { ...last };\n this.owners.set(tagged, conversationId);\n return [...messages.slice(0, -1), tagged];\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 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 appendImportedEntry(\n tx: Tx,\n conversationId: ConversationId,\n entry: ImportedSessionEntry,\n): Promise<void> {\n switch (entry.type) {\n case \"message\": {\n const model = [durableMessage(entry.message)];\n if (entry.message.role === \"user\") 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 appendImportedEntry(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 async open(office: Office, key: string): Promise<SessionStore> {\n const storage = await OfficeStorage.acquire(office.sessionsPath);\n try {\n const session = (await lookupSession(storage, key)) ?? (await createSession(storage, key));\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 appendImportedEntry(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 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 withMcpInstructions(prompt: string): string {\n const instructions = formatMcpServerInstructions(this.mcp?.instructions ?? []);\n return instructions ? `${prompt}\\n\\n${instructions}` : prompt;\n }\n\n async bindHarness(binding: SessionHarnessBinding): Promise<AttachedSessionHarness> {\n return this.mutate(async () => {\n 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 tagRequest: (messages) => this.storage.tag(conversationId, messages),\n };\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":"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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 ROOT_CONVERSATION_ID,\n ToolResultEntry,\n UserEntry,\n createRegistry,\n defineDoc,\n defineEntry,\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 ImportedSession,\n ImportedSessionEntry,\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\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 CustomSessionEntry = defineEntry<{\n customType: string;\n data: JsonValue;\n timestamp: number;\n}>(\"mikan.custom\");\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 tagRequest(messages: readonly Message[]): readonly Message[];\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 (UserEntry.is(record) || AssistantEntry.is(record) || ToolResultEntry.is(record)) {\n if (!message) return undefined;\n return { type: \"message\", id, timestamp: messageTimestamp(message), message };\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 requestOwnerKey(request: unknown): object | undefined {\n if (typeof request !== \"object\" || request === null || !(\"messages\" in request)) return undefined;\n const { messages } = request;\n if (!Array.isArray(messages)) return undefined;\n const last: unknown = messages.at(-1);\n return typeof last === \"object\" && last !== null ? last : 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, SessionHarnessBinding>();\n private readonly owners = new WeakMap<object, ConversationId>();\n private readonly writers = new Set<ConversationId>();\n\n private constructor(private readonly path: string | null) {}\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 => [...this.bindings.values()].at(-1);\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 key = requestOwnerKey(args[1]);\n const owner = key ? this.owners.get(key) : undefined;\n const binding = owner === undefined ? undefined : this.bindings.get(owner);\n const target = binding?.requestModels ?? binding?.models ?? fallback();\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)?.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);\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 bind(conversationId: ConversationId, binding: SessionHarnessBinding): void {\n if (this.bindings.has(conversationId)) {\n throw new Error(\"Session already has an attached harness\");\n }\n this.bindings.set(conversationId, binding);\n }\n\n unbind(conversationId: ConversationId): void {\n this.bindings.delete(conversationId);\n }\n\n tag(conversationId: ConversationId, messages: readonly Message[]): readonly Message[] {\n const last = messages.at(-1);\n if (!last) return messages;\n const tagged = { ...last };\n this.owners.set(tagged, conversationId);\n return [...messages.slice(0, -1), tagged];\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 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 appendImportedEntry(\n tx: Tx,\n conversationId: ConversationId,\n entry: ImportedSessionEntry,\n): Promise<void> {\n switch (entry.type) {\n case \"message\": {\n const model = [durableMessage(entry.message)];\n if (entry.message.role === \"user\") 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 appendImportedEntry(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 async open(office: Office, key: string): Promise<SessionStore> {\n const storage = await OfficeStorage.acquire(office.sessionsPath);\n try {\n const session = (await lookupSession(storage, key)) ?? (await createSession(storage, key));\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 appendImportedEntry(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 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 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 tagRequest: (messages) => this.storage.tag(conversationId, messages),\n };\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAYnE,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,YAAY,EAAE,MAAM;IAAhD,YAA4B,YAAY,EAAE,MAAM,EAG/C;CACF;AAED,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiCjD,eAAO,MAAM,eAAe,EAAuC,aAAa,EAAE,CAAC;AAEnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAYnE,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,YAAY,EAAE,MAAM;IAAhD,YAA4B,YAAY,EAAE,MAAM,EAG/C;CACF;AAED,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiCjD,eAAO,MAAM,eAAe,EAAuC,aAAa,EAAE,CAAC;AAEnF,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE;AAmJD,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAS/D;AAcD,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAStD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAIjF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAU5F;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAavE;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAkBzF;AAyED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAEtE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAE5F;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC/C,CAKA;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAE7E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAa9F"}
|
package/dist/settings/index.js
CHANGED
|
@@ -75,6 +75,8 @@ const SettingsFileSchema = Type.Object({
|
|
|
75
75
|
url: Type.Optional(Type.String()),
|
|
76
76
|
headers: Type.Optional(Type.Record(Type.String(), Type.String())),
|
|
77
77
|
disabled: Type.Optional(Type.Boolean()),
|
|
78
|
+
exposure: Type.Optional(Type.Union([Type.Literal("codemode"), Type.Literal("deferred")])),
|
|
79
|
+
description: Type.Optional(Type.String()),
|
|
78
80
|
}))),
|
|
79
81
|
});
|
|
80
82
|
function loadSettingsFile(settingsPath) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { Type, type Static } from \"typebox\";\nimport { existsSync, lstatSync, rmSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { effectiveStateDir } from \"../cli/arg-grammar.js\";\nimport { readEnv } from \"../env-manifest.js\";\nimport {\n atomicWritePrivateFile,\n ensureDirExists,\n readJsonSchemaFileIfExists,\n} from \"../file-guards.js\";\n\nexport class MissingGlobalSettingsError extends Error {\n constructor(public readonly settingsPath: string) {\n super(`Missing global settings file at ${settingsPath}`);\n this.name = \"MissingGlobalSettingsError\";\n }\n}\n\nimport type { AgentConfig, SandboxSettings } from \"../types.js\";\nimport type { McpServerConfig } from \"../harness/types.js\";\nimport type { OnboardLlmChoice } from \"../types.js\";\nimport type { Office } from \"../office/types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst ONBOARD_SETTINGS: SettingsFileConfig = {\n llm: {\n provider: \"anthropic\",\n model: \"claude-sonnet-4-6\",\n thinkingLevel: \"off\",\n },\n slack: {\n replyMode: \"top-level\",\n },\n sandbox: {\n cpus: \"0.5\",\n memory: \"1g\",\n boost: {\n cpus: \"2\",\n memory: \"4g\",\n },\n defaultSharedVault: \"\",\n },\n};\n\nconst THINKING_LEVEL_KEYS: Record<ThinkingLevel, true> = {\n off: true,\n minimal: true,\n low: true,\n medium: true,\n high: true,\n xhigh: true,\n max: true,\n};\n\nexport const THINKING_LEVELS = Object.keys(THINKING_LEVEL_KEYS) as ThinkingLevel[];\n\nexport function isThinkingLevel(value: unknown): value is ThinkingLevel {\n return typeof value === \"string\" && Object.hasOwn(THINKING_LEVEL_KEYS, value);\n}\n\nconst SettingsFileSchema = Type.Object({\n llm: Type.Optional(\n Type.Object({\n provider: Type.Optional(Type.String()),\n model: Type.Optional(Type.String()),\n thinkingLevel: Type.Optional(Type.Enum(THINKING_LEVELS)),\n }),\n ),\n sentry: Type.Optional(\n Type.Object({\n dsn: Type.Optional(Type.String()),\n }),\n ),\n slack: Type.Optional(\n Type.Object({\n replyMode: Type.Optional(Type.Union([Type.Literal(\"top-level\"), Type.Literal(\"thread\")])),\n }),\n ),\n office: Type.Optional(\n Type.Object({\n visibility: Type.Optional(Type.Literal(\"private\")),\n }),\n ),\n sandbox: Type.Optional(\n Type.Object({\n cpus: Type.Optional(Type.String()),\n memory: Type.Optional(Type.String()),\n boost: Type.Optional(\n Type.Object({\n cpus: Type.Optional(Type.String()),\n memory: Type.Optional(Type.String()),\n }),\n ),\n defaultSharedVault: Type.Optional(Type.String()),\n }),\n ),\n mcpServers: Type.Optional(\n Type.Record(\n Type.String(),\n Type.Object({\n command: Type.Optional(Type.String()),\n args: Type.Optional(Type.Array(Type.String())),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n url: Type.Optional(Type.String()),\n headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n disabled: Type.Optional(Type.Boolean()),\n }),\n ),\n ),\n});\n\ntype SettingsFileConfig = Static<typeof SettingsFileSchema>;\ntype SandboxFileSettings = NonNullable<SettingsFileConfig[\"sandbox\"]>;\n\nfunction loadSettingsFile(settingsPath: string): SettingsFileConfig | undefined {\n return readJsonSchemaFileIfExists(settingsPath, SettingsFileSchema, (detail, kind) =>\n kind === \"shape\"\n ? `Malformed settings file at ${settingsPath}: expected a JSON object at the top level`\n : `Malformed settings file at ${settingsPath}: ${detail}`,\n );\n}\n\nfunction normalizeSettingsConfig(config: SettingsFileConfig): Partial<AgentConfig> {\n return {\n ...(config.llm?.provider !== undefined ? { provider: config.llm.provider } : {}),\n ...(config.llm?.model !== undefined ? { model: config.llm.model } : {}),\n ...(config.llm?.thinkingLevel !== undefined ? { thinkingLevel: config.llm.thinkingLevel } : {}),\n ...(config.sentry?.dsn !== undefined ? { sentryDsn: config.sentry.dsn } : {}),\n ...(config.sandbox !== undefined ? { sandbox: normalizeSandboxSettings(config.sandbox) } : {}),\n ...(config.slack !== undefined ? { slack: config.slack } : {}),\n ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),\n };\n}\n\nfunction normalizeSandboxSettings(sandbox: SandboxFileSettings): SandboxSettings {\n const defaultSharedVault = sandbox.defaultSharedVault?.trim();\n return {\n ...(sandbox.cpus !== undefined ? { cpus: sandbox.cpus } : {}),\n ...(sandbox.memory !== undefined ? { memory: sandbox.memory } : {}),\n ...(sandbox.boost !== undefined ? { boost: sandbox.boost } : {}),\n ...(defaultSharedVault ? { defaultSharedVault } : {}),\n };\n}\n\nfunction mergeSandboxSettings(\n base: SandboxSettings | undefined,\n override: SandboxSettings | undefined,\n): SandboxSettings | undefined {\n if (!base) return override;\n if (!override) return base;\n return {\n ...base,\n ...override,\n boost: base.boost || override.boost ? { ...base.boost, ...override.boost } : undefined,\n };\n}\n\nfunction getSettingsPath(): string {\n return join(effectiveStateDir(), \"settings.json\");\n}\n\nfunction requireGlobalSettings(): SettingsFileConfig {\n const settingsPath = getSettingsPath();\n const config = loadSettingsFile(settingsPath);\n if (!config) {\n throw new MissingGlobalSettingsError(settingsPath);\n }\n return config;\n}\n\nfunction requireString(value: string | undefined, path: string): string {\n if (!value) {\n throw new Error(\n `Missing required global setting: ${path}. Run \\`mikan --onboard\\` to create settings.json.`,\n );\n }\n return value;\n}\n\nfunction toAgentConfig(fromFile: Partial<AgentConfig>): AgentConfig {\n const provider = requireString(fromFile.provider, \"llm.provider\");\n const model = requireString(fromFile.model, \"llm.model\");\n const thinkingLevel = requireString(fromFile.thinkingLevel, \"llm.thinkingLevel\") as ThinkingLevel;\n const sentryDsn = sentryDsnFrom(fromFile.sentryDsn);\n const sandbox = fromFile.sandbox;\n const slack = fromFile.slack;\n const mcpServers = fromFile.mcpServers;\n\n return {\n provider,\n model,\n thinkingLevel,\n sentryDsn,\n sandbox,\n slack,\n mcpServers,\n };\n}\n\nfunction loadRawGlobalSettings(): Partial<AgentConfig> {\n return normalizeSettingsConfig(requireGlobalSettings());\n}\n\nexport function loadGlobalSettings(): AgentConfig {\n return toAgentConfig(loadRawGlobalSettings());\n}\n\nexport function conversationSettingsPath(office: Office): string {\n const hostPath = join(office.stateDir, \"settings.json\");\n if (existsSync(hostPath)) {\n assertSettingsFile(hostPath, \"Conversation settings\");\n return hostPath;\n }\n ensureDirExists(dirname(hostPath));\n atomicWritePrivateFile(hostPath, \"{}\\n\");\n return hostPath;\n}\n\nfunction assertSettingsFile(path: string, label: string): void {\n let stats;\n try {\n stats = lstatSync(path);\n } catch (err) {\n throw new Error(`${label} cannot be inspected: ${path}`, { cause: err });\n }\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new Error(`${label} must be a regular non-symlink file: ${path}`);\n }\n}\n\nexport type SlackAutoReplyMode = \"off\" | \"on\" | \"jev\";\n\nconst AUTO_REPLY_FILE = \"auto-reply\";\nconst AUTO_REPLY_JEV_FILE = \"auto-reply.jev\";\nconst AUTO_REPLY_MARKERS: Record<Exclude<SlackAutoReplyMode, \"off\">, string> = {\n on: AUTO_REPLY_FILE,\n jev: AUTO_REPLY_JEV_FILE,\n};\n\nexport function slackConversationAutoReplyMode(office: Office): SlackAutoReplyMode {\n if (existsSync(join(office.dir, AUTO_REPLY_JEV_FILE))) return \"jev\";\n if (existsSync(join(office.dir, AUTO_REPLY_FILE))) return \"on\";\n return \"off\";\n}\n\nexport function setSlackConversationAutoReply(office: Office, mode: SlackAutoReplyMode): void {\n ensureDirExists(office.dir);\n for (const [markerMode, fileName] of Object.entries(AUTO_REPLY_MARKERS)) {\n const path = join(office.dir, fileName);\n if (markerMode === mode) {\n if (!existsSync(path)) atomicWritePrivateFile(path, \"\");\n } else if (existsSync(path)) {\n rmSync(path);\n }\n }\n}\n\nexport function resolveConversationSettings(office: Office): AgentConfig {\n const globalConfig = loadRawGlobalSettings();\n const conversationConfig = normalizeSettingsConfig(\n loadSettingsFile(conversationSettingsPath(office)) ?? {},\n );\n const mcpServers = { ...globalConfig.mcpServers, ...conversationConfig.mcpServers };\n const sandbox = mergeSandboxSettings(globalConfig.sandbox, conversationConfig.sandbox);\n return toAgentConfig({\n ...globalConfig,\n ...conversationConfig,\n sandbox,\n ...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),\n });\n}\n\nfunction sentryDsnFrom(fromFile: string | undefined): string | undefined {\n return fromFile || readEnv(\"SENTRY_DSN\");\n}\n\nexport function resolveSentryDsn(): string | undefined {\n const fromFile = normalizeSettingsConfig(loadSettingsFile(getSettingsPath()) ?? {});\n return sentryDsnFrom(fromFile.sentryDsn);\n}\n\nexport function createGlobalSettingsFile(stateDir: string, llm?: OnboardLlmChoice): string {\n const settingsPath = join(stateDir, \"settings.json\");\n if (existsSync(settingsPath)) {\n throw new Error(`Global settings already exists at ${settingsPath}`);\n }\n ensureDirExists(stateDir);\n const settings: SettingsFileConfig = llm\n ? {\n ...ONBOARD_SETTINGS,\n llm: {\n ...ONBOARD_SETTINGS.llm,\n provider: llm.provider,\n model: llm.model,\n },\n }\n : ONBOARD_SETTINGS;\n atomicWritePrivateFile(settingsPath, JSON.stringify(settings, null, 2));\n return settingsPath;\n}\n\nfunction hasDefinedValue(values: Record<string, unknown> | undefined): boolean {\n return values !== undefined && Object.values(values).some((value) => value !== undefined);\n}\n\nfunction compactSettingsConfig(config: SettingsFileConfig): SettingsFileConfig {\n return {\n llm: hasDefinedValue(config.llm) ? config.llm : undefined,\n sentry: hasDefinedValue(config.sentry) ? config.sentry : undefined,\n sandbox: hasDefinedValue(config.sandbox) ? config.sandbox : undefined,\n slack: hasDefinedValue(config.slack) ? config.slack : undefined,\n office: hasDefinedValue(config.office) ? config.office : undefined,\n mcpServers: config.mcpServers,\n };\n}\n\nfunction patchSettingsConfig(\n existing: SettingsFileConfig,\n config: Partial<AgentConfig>,\n): SettingsFileConfig {\n const patched: SettingsFileConfig = {\n ...existing,\n llm: {\n ...existing.llm,\n ...(config.provider !== undefined ? { provider: config.provider } : {}),\n ...(config.model !== undefined ? { model: config.model } : {}),\n ...(config.thinkingLevel !== undefined ? { thinkingLevel: config.thinkingLevel } : {}),\n },\n sentry: {\n ...existing.sentry,\n ...(config.sentryDsn !== undefined ? { dsn: config.sentryDsn } : {}),\n },\n sandbox: mergeSandboxSettings(existing.sandbox, config.sandbox) ?? {},\n slack: {\n ...existing.slack,\n ...config.slack,\n },\n office: existing.office,\n ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),\n };\n return compactSettingsConfig(patched);\n}\n\nfunction loadSettingsFileForUpdate(\n settingsPath: string,\n defaultSettings: SettingsFileConfig,\n): SettingsFileConfig {\n if (!existsSync(settingsPath)) return defaultSettings;\n try {\n return loadSettingsFile(settingsPath) ?? {};\n } catch (err) {\n const detail = errorMessage(err);\n const message = detail.startsWith(\"Malformed settings file\")\n ? detail.replace(\"Malformed settings file\", \"Refusing to overwrite malformed settings file\")\n : detail;\n throw new Error(message, { cause: err });\n }\n}\n\nfunction updateSettingsFile(\n settingsPath: string,\n patch: Partial<AgentConfig>,\n defaultSettings: SettingsFileConfig,\n): void {\n const existing = loadSettingsFileForUpdate(settingsPath, defaultSettings);\n ensureDirExists(dirname(settingsPath));\n atomicWritePrivateFile(\n settingsPath,\n JSON.stringify(patchSettingsConfig(existing, patch), null, 2),\n );\n}\n\nexport function updateGlobalSettings(patch: Partial<AgentConfig>): void {\n updateSettingsFile(getSettingsPath(), patch, ONBOARD_SETTINGS);\n}\n\nexport function updateConversationSettings(office: Office, patch: Partial<AgentConfig>): void {\n updateSettingsFile(conversationSettingsPath(office), patch, {});\n}\n\nexport function loadScopeMcpServers(office: Office): {\n global: Record<string, McpServerConfig>;\n conversation: Record<string, McpServerConfig>;\n} {\n return {\n global: loadRawGlobalSettings().mcpServers ?? {},\n conversation: loadSettingsFile(conversationSettingsPath(office))?.mcpServers ?? {},\n };\n}\n\nexport function loadOfficeVisibilityOverride(office: Office): \"private\" | null {\n return loadSettingsFile(conversationSettingsPath(office))?.office?.visibility ?? null;\n}\n\nexport function setOfficeVisibilityOverride(office: Office, visibility: \"private\" | null): void {\n const settingsPath = conversationSettingsPath(office);\n const existing = loadSettingsFileForUpdate(settingsPath, {});\n const { office: _previous, ...rest } = existing;\n ensureDirExists(dirname(settingsPath));\n atomicWritePrivateFile(\n settingsPath,\n JSON.stringify(\n compactSettingsConfig({ ...rest, office: visibility ? { visibility } : undefined }),\n null,\n 2,\n ),\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/settings/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { Type, type Static } from \"typebox\";\nimport { existsSync, lstatSync, rmSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { effectiveStateDir } from \"../cli/arg-grammar.js\";\nimport { readEnv } from \"../env-manifest.js\";\nimport {\n atomicWritePrivateFile,\n ensureDirExists,\n readJsonSchemaFileIfExists,\n} from \"../file-guards.js\";\n\nexport class MissingGlobalSettingsError extends Error {\n constructor(public readonly settingsPath: string) {\n super(`Missing global settings file at ${settingsPath}`);\n this.name = \"MissingGlobalSettingsError\";\n }\n}\n\nimport type { AgentConfig, SandboxSettings } from \"../types.js\";\nimport type { McpServerConfig } from \"../harness/types.js\";\nimport type { OnboardLlmChoice } from \"../types.js\";\nimport type { Office } from \"../office/types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst ONBOARD_SETTINGS: SettingsFileConfig = {\n llm: {\n provider: \"anthropic\",\n model: \"claude-sonnet-4-6\",\n thinkingLevel: \"off\",\n },\n slack: {\n replyMode: \"top-level\",\n },\n sandbox: {\n cpus: \"0.5\",\n memory: \"1g\",\n boost: {\n cpus: \"2\",\n memory: \"4g\",\n },\n defaultSharedVault: \"\",\n },\n};\n\nconst THINKING_LEVEL_KEYS: Record<ThinkingLevel, true> = {\n off: true,\n minimal: true,\n low: true,\n medium: true,\n high: true,\n xhigh: true,\n max: true,\n};\n\nexport const THINKING_LEVELS = Object.keys(THINKING_LEVEL_KEYS) as ThinkingLevel[];\n\nexport function isThinkingLevel(value: unknown): value is ThinkingLevel {\n return typeof value === \"string\" && Object.hasOwn(THINKING_LEVEL_KEYS, value);\n}\n\nconst SettingsFileSchema = Type.Object({\n llm: Type.Optional(\n Type.Object({\n provider: Type.Optional(Type.String()),\n model: Type.Optional(Type.String()),\n thinkingLevel: Type.Optional(Type.Enum(THINKING_LEVELS)),\n }),\n ),\n sentry: Type.Optional(\n Type.Object({\n dsn: Type.Optional(Type.String()),\n }),\n ),\n slack: Type.Optional(\n Type.Object({\n replyMode: Type.Optional(Type.Union([Type.Literal(\"top-level\"), Type.Literal(\"thread\")])),\n }),\n ),\n office: Type.Optional(\n Type.Object({\n visibility: Type.Optional(Type.Literal(\"private\")),\n }),\n ),\n sandbox: Type.Optional(\n Type.Object({\n cpus: Type.Optional(Type.String()),\n memory: Type.Optional(Type.String()),\n boost: Type.Optional(\n Type.Object({\n cpus: Type.Optional(Type.String()),\n memory: Type.Optional(Type.String()),\n }),\n ),\n defaultSharedVault: Type.Optional(Type.String()),\n }),\n ),\n mcpServers: Type.Optional(\n Type.Record(\n Type.String(),\n Type.Object({\n command: Type.Optional(Type.String()),\n args: Type.Optional(Type.Array(Type.String())),\n env: Type.Optional(Type.Record(Type.String(), Type.String())),\n url: Type.Optional(Type.String()),\n headers: Type.Optional(Type.Record(Type.String(), Type.String())),\n disabled: Type.Optional(Type.Boolean()),\n exposure: Type.Optional(Type.Union([Type.Literal(\"codemode\"), Type.Literal(\"deferred\")])),\n description: Type.Optional(Type.String()),\n }),\n ),\n ),\n});\n\ntype SettingsFileConfig = Static<typeof SettingsFileSchema>;\ntype SandboxFileSettings = NonNullable<SettingsFileConfig[\"sandbox\"]>;\n\nfunction loadSettingsFile(settingsPath: string): SettingsFileConfig | undefined {\n return readJsonSchemaFileIfExists(settingsPath, SettingsFileSchema, (detail, kind) =>\n kind === \"shape\"\n ? `Malformed settings file at ${settingsPath}: expected a JSON object at the top level`\n : `Malformed settings file at ${settingsPath}: ${detail}`,\n );\n}\n\nfunction normalizeSettingsConfig(config: SettingsFileConfig): Partial<AgentConfig> {\n return {\n ...(config.llm?.provider !== undefined ? { provider: config.llm.provider } : {}),\n ...(config.llm?.model !== undefined ? { model: config.llm.model } : {}),\n ...(config.llm?.thinkingLevel !== undefined ? { thinkingLevel: config.llm.thinkingLevel } : {}),\n ...(config.sentry?.dsn !== undefined ? { sentryDsn: config.sentry.dsn } : {}),\n ...(config.sandbox !== undefined ? { sandbox: normalizeSandboxSettings(config.sandbox) } : {}),\n ...(config.slack !== undefined ? { slack: config.slack } : {}),\n ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),\n };\n}\n\nfunction normalizeSandboxSettings(sandbox: SandboxFileSettings): SandboxSettings {\n const defaultSharedVault = sandbox.defaultSharedVault?.trim();\n return {\n ...(sandbox.cpus !== undefined ? { cpus: sandbox.cpus } : {}),\n ...(sandbox.memory !== undefined ? { memory: sandbox.memory } : {}),\n ...(sandbox.boost !== undefined ? { boost: sandbox.boost } : {}),\n ...(defaultSharedVault ? { defaultSharedVault } : {}),\n };\n}\n\nfunction mergeSandboxSettings(\n base: SandboxSettings | undefined,\n override: SandboxSettings | undefined,\n): SandboxSettings | undefined {\n if (!base) return override;\n if (!override) return base;\n return {\n ...base,\n ...override,\n boost: base.boost || override.boost ? { ...base.boost, ...override.boost } : undefined,\n };\n}\n\nfunction getSettingsPath(): string {\n return join(effectiveStateDir(), \"settings.json\");\n}\n\nfunction requireGlobalSettings(): SettingsFileConfig {\n const settingsPath = getSettingsPath();\n const config = loadSettingsFile(settingsPath);\n if (!config) {\n throw new MissingGlobalSettingsError(settingsPath);\n }\n return config;\n}\n\nfunction requireString(value: string | undefined, path: string): string {\n if (!value) {\n throw new Error(\n `Missing required global setting: ${path}. Run \\`mikan --onboard\\` to create settings.json.`,\n );\n }\n return value;\n}\n\nfunction toAgentConfig(fromFile: Partial<AgentConfig>): AgentConfig {\n const provider = requireString(fromFile.provider, \"llm.provider\");\n const model = requireString(fromFile.model, \"llm.model\");\n const thinkingLevel = requireString(fromFile.thinkingLevel, \"llm.thinkingLevel\") as ThinkingLevel;\n const sentryDsn = sentryDsnFrom(fromFile.sentryDsn);\n const sandbox = fromFile.sandbox;\n const slack = fromFile.slack;\n const mcpServers = fromFile.mcpServers;\n\n return {\n provider,\n model,\n thinkingLevel,\n sentryDsn,\n sandbox,\n slack,\n mcpServers,\n };\n}\n\nfunction loadRawGlobalSettings(): Partial<AgentConfig> {\n return normalizeSettingsConfig(requireGlobalSettings());\n}\n\nexport function loadGlobalSettings(): AgentConfig {\n return toAgentConfig(loadRawGlobalSettings());\n}\n\nexport function conversationSettingsPath(office: Office): string {\n const hostPath = join(office.stateDir, \"settings.json\");\n if (existsSync(hostPath)) {\n assertSettingsFile(hostPath, \"Conversation settings\");\n return hostPath;\n }\n ensureDirExists(dirname(hostPath));\n atomicWritePrivateFile(hostPath, \"{}\\n\");\n return hostPath;\n}\n\nfunction assertSettingsFile(path: string, label: string): void {\n let stats;\n try {\n stats = lstatSync(path);\n } catch (err) {\n throw new Error(`${label} cannot be inspected: ${path}`, { cause: err });\n }\n if (stats.isSymbolicLink() || !stats.isFile()) {\n throw new Error(`${label} must be a regular non-symlink file: ${path}`);\n }\n}\n\nexport type SlackAutoReplyMode = \"off\" | \"on\" | \"jev\";\n\nconst AUTO_REPLY_FILE = \"auto-reply\";\nconst AUTO_REPLY_JEV_FILE = \"auto-reply.jev\";\nconst AUTO_REPLY_MARKERS: Record<Exclude<SlackAutoReplyMode, \"off\">, string> = {\n on: AUTO_REPLY_FILE,\n jev: AUTO_REPLY_JEV_FILE,\n};\n\nexport function slackConversationAutoReplyMode(office: Office): SlackAutoReplyMode {\n if (existsSync(join(office.dir, AUTO_REPLY_JEV_FILE))) return \"jev\";\n if (existsSync(join(office.dir, AUTO_REPLY_FILE))) return \"on\";\n return \"off\";\n}\n\nexport function setSlackConversationAutoReply(office: Office, mode: SlackAutoReplyMode): void {\n ensureDirExists(office.dir);\n for (const [markerMode, fileName] of Object.entries(AUTO_REPLY_MARKERS)) {\n const path = join(office.dir, fileName);\n if (markerMode === mode) {\n if (!existsSync(path)) atomicWritePrivateFile(path, \"\");\n } else if (existsSync(path)) {\n rmSync(path);\n }\n }\n}\n\nexport function resolveConversationSettings(office: Office): AgentConfig {\n const globalConfig = loadRawGlobalSettings();\n const conversationConfig = normalizeSettingsConfig(\n loadSettingsFile(conversationSettingsPath(office)) ?? {},\n );\n const mcpServers = { ...globalConfig.mcpServers, ...conversationConfig.mcpServers };\n const sandbox = mergeSandboxSettings(globalConfig.sandbox, conversationConfig.sandbox);\n return toAgentConfig({\n ...globalConfig,\n ...conversationConfig,\n sandbox,\n ...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),\n });\n}\n\nfunction sentryDsnFrom(fromFile: string | undefined): string | undefined {\n return fromFile || readEnv(\"SENTRY_DSN\");\n}\n\nexport function resolveSentryDsn(): string | undefined {\n const fromFile = normalizeSettingsConfig(loadSettingsFile(getSettingsPath()) ?? {});\n return sentryDsnFrom(fromFile.sentryDsn);\n}\n\nexport function createGlobalSettingsFile(stateDir: string, llm?: OnboardLlmChoice): string {\n const settingsPath = join(stateDir, \"settings.json\");\n if (existsSync(settingsPath)) {\n throw new Error(`Global settings already exists at ${settingsPath}`);\n }\n ensureDirExists(stateDir);\n const settings: SettingsFileConfig = llm\n ? {\n ...ONBOARD_SETTINGS,\n llm: {\n ...ONBOARD_SETTINGS.llm,\n provider: llm.provider,\n model: llm.model,\n },\n }\n : ONBOARD_SETTINGS;\n atomicWritePrivateFile(settingsPath, JSON.stringify(settings, null, 2));\n return settingsPath;\n}\n\nfunction hasDefinedValue(values: Record<string, unknown> | undefined): boolean {\n return values !== undefined && Object.values(values).some((value) => value !== undefined);\n}\n\nfunction compactSettingsConfig(config: SettingsFileConfig): SettingsFileConfig {\n return {\n llm: hasDefinedValue(config.llm) ? config.llm : undefined,\n sentry: hasDefinedValue(config.sentry) ? config.sentry : undefined,\n sandbox: hasDefinedValue(config.sandbox) ? config.sandbox : undefined,\n slack: hasDefinedValue(config.slack) ? config.slack : undefined,\n office: hasDefinedValue(config.office) ? config.office : undefined,\n mcpServers: config.mcpServers,\n };\n}\n\nfunction patchSettingsConfig(\n existing: SettingsFileConfig,\n config: Partial<AgentConfig>,\n): SettingsFileConfig {\n const patched: SettingsFileConfig = {\n ...existing,\n llm: {\n ...existing.llm,\n ...(config.provider !== undefined ? { provider: config.provider } : {}),\n ...(config.model !== undefined ? { model: config.model } : {}),\n ...(config.thinkingLevel !== undefined ? { thinkingLevel: config.thinkingLevel } : {}),\n },\n sentry: {\n ...existing.sentry,\n ...(config.sentryDsn !== undefined ? { dsn: config.sentryDsn } : {}),\n },\n sandbox: mergeSandboxSettings(existing.sandbox, config.sandbox) ?? {},\n slack: {\n ...existing.slack,\n ...config.slack,\n },\n office: existing.office,\n ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),\n };\n return compactSettingsConfig(patched);\n}\n\nfunction loadSettingsFileForUpdate(\n settingsPath: string,\n defaultSettings: SettingsFileConfig,\n): SettingsFileConfig {\n if (!existsSync(settingsPath)) return defaultSettings;\n try {\n return loadSettingsFile(settingsPath) ?? {};\n } catch (err) {\n const detail = errorMessage(err);\n const message = detail.startsWith(\"Malformed settings file\")\n ? detail.replace(\"Malformed settings file\", \"Refusing to overwrite malformed settings file\")\n : detail;\n throw new Error(message, { cause: err });\n }\n}\n\nfunction updateSettingsFile(\n settingsPath: string,\n patch: Partial<AgentConfig>,\n defaultSettings: SettingsFileConfig,\n): void {\n const existing = loadSettingsFileForUpdate(settingsPath, defaultSettings);\n ensureDirExists(dirname(settingsPath));\n atomicWritePrivateFile(\n settingsPath,\n JSON.stringify(patchSettingsConfig(existing, patch), null, 2),\n );\n}\n\nexport function updateGlobalSettings(patch: Partial<AgentConfig>): void {\n updateSettingsFile(getSettingsPath(), patch, ONBOARD_SETTINGS);\n}\n\nexport function updateConversationSettings(office: Office, patch: Partial<AgentConfig>): void {\n updateSettingsFile(conversationSettingsPath(office), patch, {});\n}\n\nexport function loadScopeMcpServers(office: Office): {\n global: Record<string, McpServerConfig>;\n conversation: Record<string, McpServerConfig>;\n} {\n return {\n global: loadRawGlobalSettings().mcpServers ?? {},\n conversation: loadSettingsFile(conversationSettingsPath(office))?.mcpServers ?? {},\n };\n}\n\nexport function loadOfficeVisibilityOverride(office: Office): \"private\" | null {\n return loadSettingsFile(conversationSettingsPath(office))?.office?.visibility ?? null;\n}\n\nexport function setOfficeVisibilityOverride(office: Office, visibility: \"private\" | null): void {\n const settingsPath = conversationSettingsPath(office);\n const existing = loadSettingsFileForUpdate(settingsPath, {});\n const { office: _previous, ...rest } = existing;\n ensureDirExists(dirname(settingsPath));\n atomicWritePrivateFile(\n settingsPath,\n JSON.stringify(\n compactSettingsConfig({ ...rest, office: visibility ? { visibility } : undefined }),\n null,\n 2,\n ),\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geminixiang/mikan",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.92",
|
|
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",
|