omk-agent-core 0.98.1 → 0.98.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/harness/agent-harness.d.ts +20 -6
- package/dist/harness/agent-harness.d.ts.map +1 -1
- package/dist/harness/agent-harness.js +300 -307
- package/dist/harness/agent-harness.js.map +1 -1
- package/dist/harness/compaction/operation.d.ts +7 -0
- package/dist/harness/compaction/operation.d.ts.map +1 -1
- package/dist/harness/compaction/operation.js.map +1 -1
- package/dist/harness/harness-session.d.ts +5 -58
- package/dist/harness/harness-session.d.ts.map +1 -1
- package/dist/harness/harness-session.js +15 -18
- package/dist/harness/harness-session.js.map +1 -1
- package/dist/harness/operation-lifecycle-controller.d.ts +68 -0
- package/dist/harness/operation-lifecycle-controller.d.ts.map +1 -0
- package/dist/harness/operation-lifecycle-controller.js +199 -0
- package/dist/harness/operation-lifecycle-controller.js.map +1 -0
- package/dist/harness/operation-lifecycle-reducer.d.ts +19 -0
- package/dist/harness/operation-lifecycle-reducer.d.ts.map +1 -0
- package/dist/harness/operation-lifecycle-reducer.js +201 -0
- package/dist/harness/operation-lifecycle-reducer.js.map +1 -0
- package/dist/harness/operation-lifecycle-types.d.ts +130 -0
- package/dist/harness/operation-lifecycle-types.d.ts.map +1 -0
- package/dist/harness/operation-lifecycle-types.js +34 -0
- package/dist/harness/operation-lifecycle-types.js.map +1 -0
- package/dist/harness/operation-outcome.d.ts +71 -0
- package/dist/harness/operation-outcome.d.ts.map +1 -0
- package/dist/harness/operation-outcome.js +131 -0
- package/dist/harness/operation-outcome.js.map +1 -0
- package/dist/harness/session-write-coordinator.d.ts +76 -0
- package/dist/harness/session-write-coordinator.d.ts.map +1 -0
- package/dist/harness/session-write-coordinator.js +126 -0
- package/dist/harness/session-write-coordinator.js.map +1 -0
- package/dist/harness/subscriber-fanout.d.ts +37 -0
- package/dist/harness/subscriber-fanout.d.ts.map +1 -0
- package/dist/harness/subscriber-fanout.js +73 -0
- package/dist/harness/subscriber-fanout.js.map +1 -0
- package/dist/harness/tree-navigation.d.ts +45 -0
- package/dist/harness/tree-navigation.d.ts.map +1 -0
- package/dist/harness/tree-navigation.js +59 -0
- package/dist/harness/tree-navigation.js.map +1 -0
- package/dist/harness/types.d.ts +34 -3
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../../src/harness/agent-harness.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AssistantMessage,\n\ttype Context,\n\ttype ImageContent,\n\tisContextOverflow,\n\ttype Model,\n\tstreamSimple,\n\ttype UserMessage,\n} from \"omk-ai\";\nimport { runAgentLoop, runAgentLoopContinue } from \"../agent-loop.ts\";\nimport type {\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopConfig,\n\tAgentMessage,\n\tAgentTool,\n\tQueueMode,\n\tStreamFn,\n\tThinkingLevel,\n} from \"../types.ts\";\nimport { collectEntriesForBranchSummary, generateBranchSummary } from \"./compaction/branch-summarization.ts\";\nimport {\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateContextTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"./compaction/compaction.ts\";\nimport type { HarnessCompactionRunOptions } from \"./compaction/operation.ts\";\nimport { HarnessSessionFacade } from \"./harness-session.ts\";\nimport { convertToLlm, createFailureMessage, createUserMessage } from \"./messages.ts\";\nimport { findDuplicateNames } from \"./name-validation.ts\";\nimport { formatPromptTemplateInvocation } from \"./prompt-templates.ts\";\nimport { formatSkillInvocation } from \"./skills.ts\";\nimport { applyStreamOptionsPatch, cloneStreamOptions, mergeHeaders } from \"./stream-options.ts\";\nimport { createSummarizationRetry } from \"./summarization-retry.ts\";\nimport type {\n\tAbortResult,\n\tAgentHarnessEvent,\n\tAgentHarnessEventResultMap,\n\tAgentHarnessOptions,\n\tAgentHarnessOwnEvent,\n\tAgentHarnessPhase,\n\tAgentHarnessResources,\n\tAgentHarnessStreamOptions,\n\tCompactionSettings,\n\tCompactResult,\n\tExecutionEnv,\n\tHarnessSession,\n\tNavigateTreeResult,\n\tPendingSessionWrite,\n\tPromptTemplate,\n\tSession,\n\tSkill,\n} from \"./types.ts\";\nimport { AgentHarnessError, BranchSummaryError, CompactionError, SessionError, toError } from \"./types.ts\";\n\nconst SUBSCRIBER_EVENT_TYPE = \"*\";\n\ntype AgentHarnessHandler = (event: any, signal?: AbortSignal) => Promise<any> | any;\n\nfunction normalizeHarnessError(error: unknown, fallbackCode: AgentHarnessError[\"code\"]): AgentHarnessError {\n\tif (error instanceof AgentHarnessError) return error;\n\tconst cause = toError(error);\n\tif (cause instanceof SessionError) return new AgentHarnessError(\"session\", cause.message, cause);\n\tif (cause instanceof CompactionError) return new AgentHarnessError(\"compaction\", cause.message, cause);\n\tif (cause instanceof BranchSummaryError) return new AgentHarnessError(\"branch_summary\", cause.message, cause);\n\treturn new AgentHarnessError(fallbackCode, cause.message, cause);\n}\n\ninterface AgentHarnessTurnState<\n\tTSkill extends Skill = Skill,\n\tTPromptTemplate extends PromptTemplate = PromptTemplate,\n\tTTool extends AgentTool = AgentTool,\n> {\n\tmessages: AgentMessage[];\n\tresources: AgentHarnessResources<TSkill, TPromptTemplate>;\n\tstreamOptions: AgentHarnessStreamOptions;\n\tsessionId: string;\n\tsystemPrompt: string;\n\tmodel: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\ttools: TTool[];\n\tactiveTools: TTool[];\n}\n\nexport class AgentHarness<\n\tTSkill extends Skill = Skill,\n\tTPromptTemplate extends PromptTemplate = PromptTemplate,\n\tTTool extends AgentTool = AgentTool,\n> {\n\treadonly env: ExecutionEnv;\n\tprivate session: Session;\n\tprivate readonly sessionFacade: HarnessSession;\n\tprivate phase: AgentHarnessPhase = \"idle\";\n\tprivate runAbortController?: AbortController;\n\tprivate runPromise?: Promise<void>;\n\tprivate pendingSessionWrites: PendingSessionWrite[] = [];\n\tprivate model: Model<any>;\n\tprivate thinkingLevel: ThinkingLevel;\n\tprivate systemPrompt: AgentHarnessOptions<TSkill, TPromptTemplate, TTool>[\"systemPrompt\"];\n\tprivate streamOptions: AgentHarnessStreamOptions;\n\tprivate compactionSettings: CompactionSettings;\n\tprivate getApiKeyAndHeaders?: AgentHarnessOptions[\"getApiKeyAndHeaders\"];\n\tprivate resources: AgentHarnessResources<TSkill, TPromptTemplate>;\n\tprivate tools = new Map<string, TTool>();\n\tprivate activeToolNames: string[];\n\tprivate steerQueue: UserMessage[] = [];\n\tprivate steeringQueueMode: QueueMode;\n\tprivate followUpQueue: UserMessage[] = [];\n\tprivate followUpQueueMode: QueueMode;\n\tprivate nextTurnQueue: AgentMessage[] = [];\n\tprivate handlers = new Map<string, Set<AgentHarnessHandler>>();\n\n\tconstructor(options: AgentHarnessOptions<TSkill, TPromptTemplate, TTool>) {\n\t\tthis.env = options.env;\n\t\tthis.session = options.session;\n\t\tthis.sessionFacade = new HarnessSessionFacade(this.session, () => this.phase, this.pendingSessionWrites);\n\t\tthis.resources = options.resources ?? {};\n\t\tthis.streamOptions = cloneStreamOptions(options.streamOptions);\n\t\tthis.compactionSettings = { ...DEFAULT_COMPACTION_SETTINGS, ...options.compaction };\n\t\tthis.systemPrompt = options.systemPrompt;\n\t\tthis.getApiKeyAndHeaders = options.getApiKeyAndHeaders;\n\t\tthis.validateUniqueNames(\n\t\t\t(options.tools ?? []).map((tool) => tool.name),\n\t\t\t\"Duplicate tool name(s)\",\n\t\t);\n\t\tfor (const tool of options.tools ?? []) {\n\t\t\tthis.tools.set(tool.name, tool);\n\t\t}\n\t\tthis.model = options.model;\n\t\tthis.thinkingLevel = options.thinkingLevel ?? \"off\";\n\t\tthis.activeToolNames = options.activeToolNames\n\t\t\t? [...options.activeToolNames]\n\t\t\t: (options.tools ?? []).map((tool) => tool.name);\n\t\tthis.validateUniqueNames(this.activeToolNames, \"Duplicate active tool name(s)\");\n\t\tthis.validateToolNames(this.activeToolNames);\n\t\tthis.steeringQueueMode = options.steeringMode ?? \"one-at-a-time\";\n\t\tthis.followUpQueueMode = options.followUpMode ?? \"one-at-a-time\";\n\t}\n\n\tprivate async emitOwn(event: AgentHarnessOwnEvent<TSkill, TPromptTemplate>, signal?: AbortSignal): Promise<void> {\n\t\tfor (const listener of this.handlers.get(SUBSCRIBER_EVENT_TYPE) ?? []) {\n\t\t\ttry {\n\t\t\t\tawait listener(event, signal);\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async emitAny(event: AgentHarnessEvent<TSkill, TPromptTemplate>, signal?: AbortSignal): Promise<void> {\n\t\tfor (const listener of this.handlers.get(SUBSCRIBER_EVENT_TYPE) ?? []) {\n\t\t\ttry {\n\t\t\t\tawait listener(event, signal);\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async emitHook<TType extends keyof AgentHarnessEventResultMap>(\n\t\tevent: Extract<AgentHarnessOwnEvent, { type: TType }>,\n\t): Promise<AgentHarnessEventResultMap[TType] | undefined> {\n\t\tconst handlers = this.handlers.get(event.type as TType);\n\t\tif (!handlers || handlers.size === 0) return undefined;\n\t\tlet lastResult: AgentHarnessEventResultMap[TType] | undefined;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(event);\n\t\t\t\tif (result !== undefined) {\n\t\t\t\t\tlastResult = result;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t\treturn lastResult;\n\t}\n\n\tprivate async emitBeforeProviderRequest(\n\t\tmodel: Model<any>,\n\t\tsessionId: string,\n\t\tstreamOptions: AgentHarnessStreamOptions,\n\t): Promise<AgentHarnessStreamOptions> {\n\t\tconst handlers = this.handlers.get(\"before_provider_request\");\n\t\tlet current = cloneStreamOptions(streamOptions);\n\t\tif (!handlers || handlers.size === 0) return current;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler({\n\t\t\t\t\ttype: \"before_provider_request\",\n\t\t\t\t\tmodel,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tstreamOptions: cloneStreamOptions(current),\n\t\t\t\t});\n\t\t\t\tif (result?.streamOptions) {\n\t\t\t\t\tcurrent = applyStreamOptionsPatch(current, result.streamOptions);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t\treturn current;\n\t}\n\n\tprivate async emitBeforeProviderPayload(model: Model<any>, payload: unknown): Promise<unknown> {\n\t\tconst handlers = this.handlers.get(\"before_provider_payload\");\n\t\tlet current = payload;\n\t\tif (!handlers || handlers.size === 0) return current;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler({ type: \"before_provider_payload\", model, payload: current });\n\t\t\t\tif (result !== undefined) {\n\t\t\t\t\tcurrent = result.payload;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t\treturn current;\n\t}\n\n\tprivate async emitQueueUpdate(): Promise<void> {\n\t\tawait this.emitOwn({\n\t\t\ttype: \"queue_update\",\n\t\t\tsteer: [...this.steerQueue],\n\t\t\tfollowUp: [...this.followUpQueue],\n\t\t\tnextTurn: [...this.nextTurnQueue],\n\t\t});\n\t}\n\n\tprivate startRunPromise(): { runPromise: Promise<void>; finishRunPromise: () => void } {\n\t\tlet finish = () => {};\n\t\tconst runPromise = new Promise<void>((resolve) => {\n\t\t\tfinish = resolve;\n\t\t});\n\t\tthis.runPromise = runPromise;\n\t\treturn {\n\t\t\trunPromise,\n\t\t\tfinishRunPromise: () => {\n\t\t\t\t// A settled/agent_end listener may have started a new run while this\n\t\t\t\t// one was still unwinding; only clear state still owned by this run.\n\t\t\t\tif (this.runPromise === runPromise) {\n\t\t\t\t\tthis.runPromise = undefined;\n\t\t\t\t}\n\t\t\t\tfinish();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async createTurnState(): Promise<AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>> {\n\t\tconst context = await this.session.buildContext();\n\t\tconst resources = this.getResources();\n\t\tconst sessionMetadata = await this.session.getMetadata();\n\t\tconst tools = [...this.tools.values()];\n\t\tconst activeTools = this.activeToolNames\n\t\t\t.map((name) => this.tools.get(name))\n\t\t\t.filter((tool): tool is TTool => tool !== undefined);\n\t\tlet systemPrompt = \"You are a helpful assistant.\";\n\t\tif (typeof this.systemPrompt === \"string\") {\n\t\t\tsystemPrompt = this.systemPrompt;\n\t\t} else if (this.systemPrompt) {\n\t\t\tsystemPrompt = await this.systemPrompt({\n\t\t\t\tenv: this.env,\n\t\t\t\tsession: this.session,\n\t\t\t\tmodel: this.model,\n\t\t\t\tthinkingLevel: this.thinkingLevel,\n\t\t\t\tactiveTools,\n\t\t\t\tresources,\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tmessages: context.messages,\n\t\t\tresources,\n\t\t\tstreamOptions: cloneStreamOptions(this.streamOptions),\n\t\t\tsessionId: sessionMetadata.id,\n\t\t\tsystemPrompt,\n\t\t\tmodel: this.model,\n\t\t\tthinkingLevel: this.thinkingLevel,\n\t\t\ttools,\n\t\t\tactiveTools,\n\t\t};\n\t}\n\n\tprivate createContext(\n\t\tturnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\tsystemPrompt?: string,\n\t): AgentContext {\n\t\treturn {\n\t\t\tsystemPrompt: systemPrompt ?? turnState.systemPrompt,\n\t\t\tmessages: turnState.messages.slice(),\n\t\t\ttools: turnState.activeTools.slice(),\n\t\t};\n\t}\n\n\tprivate createStreamFn(getTurnState: () => AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>): StreamFn {\n\t\treturn async (model, context, streamOptions) => {\n\t\t\tconst turnState = getTurnState();\n\t\t\tconst requestContext = await this.maybeAutoCompact(model, context, streamOptions?.signal);\n\t\t\tconst auth = await this.getApiKeyAndHeaders?.(model);\n\t\t\tconst snapshotOptions: AgentHarnessStreamOptions = {\n\t\t\t\t...turnState.streamOptions,\n\t\t\t\theaders: mergeHeaders(turnState.streamOptions.headers, auth?.headers),\n\t\t\t};\n\t\t\tconst requestOptions = await this.emitBeforeProviderRequest(model, turnState.sessionId, snapshotOptions);\n\t\t\treturn streamSimple(model, requestContext, {\n\t\t\t\tcacheRetention: requestOptions.cacheRetention,\n\t\t\t\theaders: requestOptions.headers,\n\t\t\t\tmaxRetries: requestOptions.maxRetries,\n\t\t\t\tmaxRetryDelayMs: requestOptions.maxRetryDelayMs,\n\t\t\t\tmetadata: requestOptions.metadata,\n\t\t\t\tonPayload: async (payload) => await this.emitBeforeProviderPayload(model, payload),\n\t\t\t\tonResponse: async (response) => {\n\t\t\t\t\tconst headers = { ...(response.headers as Record<string, string>) };\n\t\t\t\t\tawait this.emitOwn(\n\t\t\t\t\t\t{ type: \"after_provider_response\", status: response.status, headers },\n\t\t\t\t\t\tstreamOptions?.signal,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\treasoning: streamOptions?.reasoning,\n\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t\tsessionId: turnState.sessionId,\n\t\t\t\ttimeoutMs: requestOptions.timeoutMs,\n\t\t\t\ttransport: requestOptions.transport,\n\t\t\t\tapiKey: auth?.apiKey,\n\t\t\t});\n\t\t};\n\t}\n\n\tprivate async drainQueuedMessages(queue: AgentMessage[], mode: QueueMode): Promise<AgentMessage[]> {\n\t\tconst messages = mode === \"all\" ? queue.splice(0) : queue.splice(0, 1);\n\t\tif (messages.length === 0) return messages;\n\t\ttry {\n\t\t\tawait this.emitQueueUpdate();\n\t\t\treturn messages;\n\t\t} catch (error) {\n\t\t\tqueue.unshift(...messages);\n\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t}\n\t}\n\n\tprivate createLoopConfig(\n\t\tgetTurnState: () => AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\tsetTurnState: (turnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>) => void,\n\t): AgentLoopConfig {\n\t\tconst turnState = getTurnState();\n\t\treturn {\n\t\t\tmodel: turnState.model,\n\t\t\treasoning: turnState.thinkingLevel === \"off\" ? undefined : turnState.thinkingLevel,\n\t\t\tconvertToLlm,\n\t\t\ttransformContext: async (messages) => {\n\t\t\t\tconst result = await this.emitHook({ type: \"context\", messages: [...messages] });\n\t\t\t\treturn result?.messages ?? messages;\n\t\t\t},\n\t\t\tbeforeToolCall: async ({ toolCall, args }) => {\n\t\t\t\tconst result = await this.emitHook({\n\t\t\t\t\ttype: \"tool_call\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\tinput: args as Record<string, unknown>,\n\t\t\t\t});\n\t\t\t\treturn result ? { block: result.block, reason: result.reason } : undefined;\n\t\t\t},\n\t\t\tafterToolCall: async ({ toolCall, args, result, isError }) => {\n\t\t\t\tconst patch = await this.emitHook({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\tinput: args as Record<string, unknown>,\n\t\t\t\t\tcontent: result.content,\n\t\t\t\t\tdetails: result.details,\n\t\t\t\t\tisError,\n\t\t\t\t});\n\t\t\t\treturn patch\n\t\t\t\t\t? { content: patch.content, details: patch.details, isError: patch.isError, terminate: patch.terminate }\n\t\t\t\t\t: undefined;\n\t\t\t},\n\t\t\tprepareNextTurn: async () => {\n\t\t\t\tawait this.flushPendingSessionWrites();\n\t\t\t\tconst nextTurnState = await this.createTurnState();\n\t\t\t\tsetTurnState(nextTurnState);\n\t\t\t\treturn {\n\t\t\t\t\tcontext: this.createContext(nextTurnState),\n\t\t\t\t\tmodel: nextTurnState.model,\n\t\t\t\t\tthinkingLevel: nextTurnState.thinkingLevel,\n\t\t\t\t};\n\t\t\t},\n\t\t\tgetSteeringMessages: async () => this.drainQueuedMessages(this.steerQueue, this.steeringQueueMode),\n\t\t\tgetFollowUpMessages: async () => this.drainQueuedMessages(this.followUpQueue, this.followUpQueueMode),\n\t\t};\n\t}\n\n\tprivate validateUniqueNames(names: string[], message: string): void {\n\t\tconst duplicates = findDuplicateNames(names);\n\t\tif (duplicates.length > 0)\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", `${message}: ${duplicates.join(\", \")}`);\n\t}\n\n\tprivate validateToolNames(toolNames: string[], tools: Map<string, TTool> = this.tools): void {\n\t\tthis.validateUniqueNames(toolNames, \"Duplicate active tool name(s)\");\n\t\tconst missing = toolNames.filter((name) => !tools.has(name));\n\t\tif (missing.length > 0) throw new AgentHarnessError(\"invalid_argument\", `Unknown tool(s): ${missing.join(\", \")}`);\n\t}\n\n\tprivate async flushPendingSessionWrites(): Promise<void> {\n\t\twhile (this.pendingSessionWrites.length > 0) {\n\t\t\tconst write = this.pendingSessionWrites[0]!;\n\t\t\tif (write.type === \"message\") {\n\t\t\t\tawait this.session.appendMessage(write.message);\n\t\t\t} else if (write.type === \"model_change\") {\n\t\t\t\tawait this.session.appendModelChange(write.provider, write.modelId);\n\t\t\t} else if (write.type === \"thinking_level_change\") {\n\t\t\t\tawait this.session.appendThinkingLevelChange(write.thinkingLevel);\n\t\t\t} else if (write.type === \"active_tools_change\") {\n\t\t\t\tawait this.session.appendActiveToolsChange(write.activeToolNames);\n\t\t\t} else if (write.type === \"custom\") {\n\t\t\t\tawait this.session.appendCustomEntry(write.customType, write.data);\n\t\t\t} else if (write.type === \"custom_message\") {\n\t\t\t\tawait this.session.appendCustomMessageEntry(write.customType, write.content, write.display, write.details);\n\t\t\t} else if (write.type === \"label\") {\n\t\t\t\tawait this.session.appendLabel(write.targetId, write.label);\n\t\t\t} else if (write.type === \"session_info\") {\n\t\t\t\tawait this.session.appendSessionName(write.name ?? \"\");\n\t\t\t} else if (write.type === \"leaf\") {\n\t\t\t\tawait this.session.getStorage().setLeafId(write.targetId);\n\t\t\t}\n\t\t\tthis.pendingSessionWrites.shift();\n\t\t}\n\t}\n\n\tprivate async handleAgentEvent(event: AgentEvent, signal?: AbortSignal): Promise<void> {\n\t\tif (event.type === \"message_end\") {\n\t\t\tawait this.session.appendMessage(event.message);\n\t\t\tawait this.emitAny(event, signal);\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"turn_end\") {\n\t\t\tlet eventError: unknown;\n\t\t\ttry {\n\t\t\t\tawait this.emitAny(event, signal);\n\t\t\t} catch (error) {\n\t\t\t\teventError = error;\n\t\t\t}\n\t\t\tconst hadPendingMutations = this.pendingSessionWrites.length > 0;\n\t\t\tawait this.flushPendingSessionWrites();\n\t\t\tif (eventError) throw eventError;\n\t\t\tawait this.emitOwn({ type: \"save_point\", hadPendingMutations });\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"agent_end\") {\n\t\t\t// Finish this run's cleanup before flipping to \"idle\": listeners observing\n\t\t\t// agent_end/settled may start the next prompt() immediately, and that run\n\t\t\t// must not inherit state still owned by the run that just completed.\n\t\t\tawait this.flushPendingSessionWrites();\n\t\t\tif (this.runAbortController && this.runAbortController.signal === signal) {\n\t\t\t\tthis.runAbortController = undefined;\n\t\t\t}\n\t\t\tthis.phase = \"idle\";\n\t\t\tawait this.emitAny(event, signal);\n\t\t\tawait this.emitOwn({ type: \"settled\", nextTurnCount: this.nextTurnQueue.length }, signal);\n\t\t\treturn;\n\t\t}\n\t\tawait this.emitAny(event, signal);\n\t}\n\n\tprivate async emitRunFailure(\n\t\tmodel: Model<any>,\n\t\terror: unknown,\n\t\taborted: boolean,\n\t\tsignal: AbortSignal,\n\t\tcompletedMessages: readonly AgentMessage[],\n\t): Promise<AgentMessage[]> {\n\t\tconst failureMessage = createFailureMessage(model, error, aborted);\n\t\tconst messages = [...completedMessages, failureMessage];\n\t\tawait this.handleAgentEvent({ type: \"message_start\", message: failureMessage }, signal);\n\t\tawait this.handleAgentEvent({ type: \"message_end\", message: failureMessage }, signal);\n\t\tawait this.handleAgentEvent({ type: \"turn_end\", message: failureMessage, toolResults: [] }, signal);\n\t\tawait this.handleAgentEvent({ type: \"agent_end\", messages }, signal);\n\t\treturn messages;\n\t}\n\n\tprivate async executeTurn(\n\t\tturnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\ttext: string,\n\t\toptions?: { images?: ImageContent[] },\n\t): Promise<AssistantMessage> {\n\t\tconst runOwner = this.runPromise;\n\t\tlet messages: AgentMessage[] = [createUserMessage(text, options?.images)];\n\t\tif (this.nextTurnQueue.length > 0) {\n\t\t\tconst queuedMessages = this.nextTurnQueue.splice(0);\n\t\t\ttry {\n\t\t\t\tawait this.emitQueueUpdate();\n\t\t\t} catch (error) {\n\t\t\t\tthis.nextTurnQueue.unshift(...queuedMessages);\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t\tmessages = [...queuedMessages, messages[0]!];\n\t\t}\n\t\tconst beforeResult = await this.emitHook({\n\t\t\ttype: \"before_agent_start\",\n\t\t\tprompt: text,\n\t\t\timages: options?.images,\n\t\t\tsystemPrompt: turnState.systemPrompt,\n\t\t\tresources: turnState.resources,\n\t\t});\n\t\tif (beforeResult?.messages) messages = [...messages, ...beforeResult.messages];\n\n\t\tconst result = await this.executeAgentRun(\n\t\t\tturnState,\n\t\t\tthis.createContext(turnState, beforeResult?.systemPrompt),\n\t\t\tmessages,\n\t\t);\n\t\treturn await this.recoverContextOverflow(result, runOwner);\n\t}\n\n\tprivate async executeAgentRun(\n\t\tturnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\tcontext: AgentContext,\n\t\tinitialMessages?: AgentMessage[],\n\t): Promise<AssistantMessage> {\n\t\tlet activeTurnState = turnState;\n\t\tconst abortController = new AbortController();\n\t\tconst getTurnState = () => activeTurnState;\n\t\tconst setTurnState = (nextTurnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>) => {\n\t\t\tactiveTurnState = nextTurnState;\n\t\t};\n\t\tthis.runAbortController = abortController;\n\t\tconst completedMessages: AgentMessage[] = [];\n\t\tconst emit = async (event: AgentEvent): Promise<void> => {\n\t\t\tif (event.type === \"message_end\") completedMessages.push(event.message);\n\t\t\tawait this.handleAgentEvent(event, abortController.signal);\n\t\t};\n\t\tconst runResultPromise = (async () => {\n\t\t\ttry {\n\t\t\t\tconst loopConfig = this.createLoopConfig(getTurnState, setTurnState);\n\t\t\t\tconst streamFn = this.createStreamFn(getTurnState);\n\t\t\t\treturn initialMessages\n\t\t\t\t\t? await runAgentLoop(initialMessages, context, loopConfig, emit, abortController.signal, streamFn)\n\t\t\t\t\t: await runAgentLoopContinue(context, loopConfig, emit, abortController.signal, streamFn);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\treturn await this.emitRunFailure(\n\t\t\t\t\t\tactiveTurnState.model,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tabortController.signal.aborted,\n\t\t\t\t\t\tabortController.signal,\n\t\t\t\t\t\tcompletedMessages,\n\t\t\t\t\t);\n\t\t\t\t} catch (failureError) {\n\t\t\t\t\tconst cause = new AggregateError(\n\t\t\t\t\t\t[toError(error), toError(failureError)],\n\t\t\t\t\t\t\"Agent run failed and failure reporting failed\",\n\t\t\t\t\t);\n\t\t\t\t\tthrow new AgentHarnessError(\"unknown\", cause.message, cause);\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t\ttry {\n\t\t\tconst newMessages = await runResultPromise;\n\t\t\tfor (let i = newMessages.length - 1; i >= 0; i--) {\n\t\t\t\tconst message = newMessages[i]!;\n\t\t\t\tif (message.role === \"assistant\") return message;\n\t\t\t}\n\t\t\tthrow new AgentHarnessError(\"invalid_state\", \"AgentHarness prompt completed without an assistant message\");\n\t\t} finally {\n\t\t\ttry {\n\t\t\t\tawait this.flushPendingSessionWrites();\n\t\t\t} finally {\n\t\t\t\tif (this.runAbortController === abortController) this.runAbortController = undefined;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async recoverContextOverflow(\n\t\tmessage: AssistantMessage,\n\t\trunOwner: Promise<void> | undefined,\n\t): Promise<AssistantMessage> {\n\t\tif (\n\t\t\tthis.runPromise !== runOwner ||\n\t\t\tthis.phase !== \"idle\" ||\n\t\t\t!this.compactionSettings.enabled ||\n\t\t\t!isContextOverflow(message, this.model.contextWindow)\n\t\t) {\n\t\t\treturn message;\n\t\t}\n\t\tif (!this.getApiKeyAndHeaders) return message;\n\t\tconst leafId = await this.session.getLeafId();\n\t\tif (!leafId) return message;\n\t\tconst leaf = await this.session.getEntry(leafId);\n\t\tif (\n\t\t\tleaf?.type !== \"message\" ||\n\t\t\tleaf.message.role !== \"assistant\" ||\n\t\t\tleaf.message.timestamp !== message.timestamp ||\n\t\t\t!isContextOverflow(leaf.message, this.model.contextWindow)\n\t\t) {\n\t\t\treturn message;\n\t\t}\n\n\t\tawait this.session.moveTo(leaf.parentId);\n\t\tthis.phase = \"retry\";\n\t\ttry {\n\t\t\tconst compacted = await this.runCompaction({ automatic: true });\n\t\t\tif (!compacted) {\n\t\t\t\tawait this.session.moveTo(leafId);\n\t\t\t\tthis.phase = \"idle\";\n\t\t\t\treturn message;\n\t\t\t}\n\t\t\tconst turnState = await this.createTurnState();\n\t\t\treturn await this.executeAgentRun(turnState, this.createContext(turnState));\n\t\t} catch (error) {\n\t\t\tawait this.session.moveTo(leafId);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync prompt(text: string, options?: { images?: ImageContent[] }): Promise<AssistantMessage> {\n\t\tif (this.phase !== \"idle\") throw new AgentHarnessError(\"busy\", \"AgentHarness is busy\");\n\t\tthis.phase = \"turn\";\n\t\tconst { runPromise, finishRunPromise } = this.startRunPromise();\n\t\ttry {\n\t\t\tconst turnState = await this.createTurnState();\n\t\t\treturn await this.executeTurn(turnState, text, options);\n\t\t} catch (error) {\n\t\t\t// Only reset the phase if this call still owns the run; a listener may\n\t\t\t// have started the next run while this one was unwinding.\n\t\t\tif (this.runPromise === runPromise) this.phase = \"idle\";\n\t\t\tthrow normalizeHarnessError(error, \"unknown\");\n\t\t} finally {\n\t\t\tfinishRunPromise();\n\t\t}\n\t}\n\n\tasync skill(name: string, additionalInstructions?: string): Promise<AssistantMessage> {\n\t\tif (this.phase !== \"idle\") throw new AgentHarnessError(\"busy\", \"AgentHarness is busy\");\n\t\tthis.phase = \"turn\";\n\t\tconst { runPromise, finishRunPromise } = this.startRunPromise();\n\t\ttry {\n\t\t\tconst turnState = await this.createTurnState();\n\t\t\tconst skill = (turnState.resources.skills ?? []).find((candidate) => candidate.name === name);\n\t\t\tif (!skill) throw new AgentHarnessError(\"invalid_argument\", `Unknown skill: ${name}`);\n\t\t\treturn await this.executeTurn(turnState, formatSkillInvocation(skill, additionalInstructions));\n\t\t} catch (error) {\n\t\t\tif (this.runPromise === runPromise) this.phase = \"idle\";\n\t\t\tthrow normalizeHarnessError(error, \"unknown\");\n\t\t} finally {\n\t\t\tfinishRunPromise();\n\t\t}\n\t}\n\n\tasync promptFromTemplate(name: string, args: string[] = []): Promise<AssistantMessage> {\n\t\tif (this.phase !== \"idle\") throw new AgentHarnessError(\"busy\", \"AgentHarness is busy\");\n\t\tthis.phase = \"turn\";\n\t\tconst { runPromise, finishRunPromise } = this.startRunPromise();\n\t\ttry {\n\t\t\tconst turnState = await this.createTurnState();\n\t\t\tconst template = (turnState.resources.promptTemplates ?? []).find((candidate) => candidate.name === name);\n\t\t\tif (!template) throw new AgentHarnessError(\"invalid_argument\", `Unknown prompt template: ${name}`);\n\t\t\treturn await this.executeTurn(turnState, formatPromptTemplateInvocation(template, args));\n\t\t} catch (error) {\n\t\t\tif (this.runPromise === runPromise) this.phase = \"idle\";\n\t\t\tthrow normalizeHarnessError(error, \"unknown\");\n\t\t} finally {\n\t\t\tfinishRunPromise();\n\t\t}\n\t}\n\n\tasync steer(text: string, options?: { images?: ImageContent[] }): Promise<void> {\n\t\tif (this.phase === \"idle\") throw new AgentHarnessError(\"invalid_state\", \"Cannot steer while idle\");\n\t\tthis.steerQueue.push(createUserMessage(text, options?.images));\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\tasync followUp(text: string, options?: { images?: ImageContent[] }): Promise<void> {\n\t\tif (this.phase === \"idle\") throw new AgentHarnessError(\"invalid_state\", \"Cannot follow up while idle\");\n\t\tthis.followUpQueue.push(createUserMessage(text, options?.images));\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\tasync nextTurn(text: string, options?: { images?: ImageContent[] }): Promise<void> {\n\t\tthis.nextTurnQueue.push(createUserMessage(text, options?.images));\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\tgetSession(): HarnessSession {\n\t\treturn this.sessionFacade;\n\t}\n\n\tasync appendMessage(message: AgentMessage): Promise<void> {\n\t\tawait this.sessionFacade.appendMessage(message);\n\t}\n\n\tprivate async runCompaction(options: HarnessCompactionRunOptions): Promise<CompactResult | undefined> {\n\t\tconst model = this.model;\n\t\tconst auth = await this.getApiKeyAndHeaders?.(model);\n\t\tif (!auth) {\n\t\t\tif (options.automatic) return undefined;\n\t\t\tthrow new AgentHarnessError(\"auth\", \"No auth available for compaction\");\n\t\t}\n\t\tconst branchEntries = await this.session.getBranch();\n\t\tconst preparationResult = prepareCompaction(branchEntries, this.compactionSettings);\n\t\tif (!preparationResult.ok) throw preparationResult.error;\n\t\tconst preparation = preparationResult.value;\n\t\tif (!preparation) {\n\t\t\tif (options.automatic) return undefined;\n\t\t\tthrow new AgentHarnessError(\"compaction\", \"Nothing to compact\");\n\t\t}\n\t\tconst signal = options.signal ?? new AbortController().signal;\n\t\tconst hookResult = await this.emitHook({\n\t\t\ttype: \"session_before_compact\",\n\t\t\tpreparation,\n\t\t\tbranchEntries,\n\t\t\tcustomInstructions: options.customInstructions,\n\t\t\tsignal,\n\t\t});\n\t\tif (hookResult?.cancel) {\n\t\t\tif (options.automatic) return undefined;\n\t\t\tthrow new AgentHarnessError(\"compaction\", \"Compaction cancelled\");\n\t\t}\n\t\tconst provided = hookResult?.compaction;\n\t\tconst compactResult = provided\n\t\t\t? { ok: true as const, value: provided }\n\t\t\t: await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\tmodel,\n\t\t\t\t\tauth.apiKey,\n\t\t\t\t\tauth.headers,\n\t\t\t\t\toptions.customInstructions,\n\t\t\t\t\tsignal,\n\t\t\t\t\tthis.thinkingLevel,\n\t\t\t\t\tcreateSummarizationRetry(\"compaction\", this.streamOptions.summarizationRetry, (event) =>\n\t\t\t\t\t\tthis.emitOwn(event),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\tif (!compactResult.ok) throw compactResult.error;\n\t\tconst result = compactResult.value;\n\t\tconst entryId = await this.session.appendCompaction(\n\t\t\tresult.summary,\n\t\t\tresult.firstKeptEntryId,\n\t\t\tresult.tokensBefore,\n\t\t\tresult.details,\n\t\t\tprovided !== undefined,\n\t\t);\n\t\tconst entry = await this.session.getEntry(entryId);\n\t\tif (entry?.type === \"compaction\") {\n\t\t\tawait this.emitOwn({ type: \"session_compact\", compactionEntry: entry, fromHook: provided !== undefined });\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate async maybeAutoCompact(model: Model<any>, context: Context, signal?: AbortSignal): Promise<Context> {\n\t\tconst projected = estimateContextTokens(context.messages).tokens;\n\t\tif (!shouldCompact(projected, model.contextWindow ?? 0, this.compactionSettings)) return context;\n\t\tconst result = await this.runCompaction({ automatic: true, signal });\n\t\tif (!result) return context;\n\t\tconst persisted = await this.session.buildContext();\n\t\treturn { ...context, messages: convertToLlm(persisted.messages) };\n\t}\n\n\tasync compact(customInstructions?: string): Promise<CompactResult> {\n\t\tif (this.phase !== \"idle\") throw new AgentHarnessError(\"busy\", \"compact() requires idle harness\");\n\t\tthis.phase = \"compaction\";\n\t\ttry {\n\t\t\tconst result = await this.runCompaction({ automatic: false, customInstructions });\n\t\t\tif (!result) throw new AgentHarnessError(\"compaction\", \"Nothing to compact\");\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"compaction\");\n\t\t} finally {\n\t\t\tthis.phase = \"idle\";\n\t\t}\n\t}\n\n\tasync navigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<NavigateTreeResult> {\n\t\tif (this.phase !== \"idle\") throw new AgentHarnessError(\"busy\", \"navigateTree() requires idle harness\");\n\t\tthis.phase = \"branch_summary\";\n\t\ttry {\n\t\t\tconst oldLeafId = await this.session.getLeafId();\n\t\t\tif (oldLeafId === targetId) return { cancelled: false };\n\t\t\tconst targetEntry = await this.session.getEntry(targetId);\n\t\t\tif (!targetEntry) throw new AgentHarnessError(\"invalid_argument\", `Entry ${targetId} not found`);\n\t\t\tconst { entries, commonAncestorId } = await collectEntriesForBranchSummary(this.session, oldLeafId, targetId);\n\t\t\tconst preparation = {\n\t\t\t\ttargetId,\n\t\t\t\toldLeafId,\n\t\t\t\tcommonAncestorId,\n\t\t\t\tentriesToSummarize: entries,\n\t\t\t\tuserWantsSummary: options?.summarize ?? false,\n\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\tlabel: options?.label,\n\t\t\t};\n\t\t\tconst signal = new AbortController().signal;\n\t\t\tconst hookResult = await this.emitHook({ type: \"session_before_tree\", preparation, signal });\n\t\t\tif (hookResult?.cancel) return { cancelled: true };\n\t\t\tlet summaryEntry: NavigateTreeResult[\"summaryEntry\"];\n\t\t\tlet summaryText: string | undefined = hookResult?.summary?.summary;\n\t\t\tlet summaryDetails: unknown = hookResult?.summary?.details;\n\t\t\tif (!summaryText && options?.summarize && entries.length > 0) {\n\t\t\t\tconst model = this.model;\n\t\t\t\tif (!model) throw new AgentHarnessError(\"invalid_state\", \"No model set for branch summary\");\n\t\t\t\tconst auth = await this.getApiKeyAndHeaders?.(model);\n\t\t\t\tif (!auth) throw new AgentHarnessError(\"auth\", \"No auth available for branch summary\");\n\t\t\t\tconst branchSummary = await generateBranchSummary(entries, {\n\t\t\t\t\tmodel,\n\t\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\t\theaders: auth.headers,\n\t\t\t\t\tsignal: new AbortController().signal,\n\t\t\t\t\tcustomInstructions: hookResult?.customInstructions ?? options?.customInstructions,\n\t\t\t\t\treplaceInstructions: hookResult?.replaceInstructions ?? options?.replaceInstructions,\n\t\t\t\t\t...createSummarizationRetry(\"branch_summary\", this.streamOptions.summarizationRetry, (event) =>\n\t\t\t\t\t\tthis.emitOwn(event),\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\tif (!branchSummary.ok) {\n\t\t\t\t\tif (branchSummary.error.code === \"aborted\") return { cancelled: true };\n\t\t\t\t\tthrow new AgentHarnessError(\"branch_summary\", branchSummary.error.message, branchSummary.error);\n\t\t\t\t}\n\t\t\t\tsummaryText = branchSummary.value.summary;\n\t\t\t\tsummaryDetails = {\n\t\t\t\t\treadFiles: branchSummary.value.readFiles,\n\t\t\t\t\tmodifiedFiles: branchSummary.value.modifiedFiles,\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet editorText: string | undefined;\n\t\t\tlet newLeafId: string | null;\n\t\t\tif (targetEntry.type === \"message\" && targetEntry.message.role === \"user\") {\n\t\t\t\tnewLeafId = targetEntry.parentId;\n\t\t\t\tconst content = targetEntry.message.content;\n\t\t\t\teditorText =\n\t\t\t\t\ttypeof content === \"string\"\n\t\t\t\t\t\t? content\n\t\t\t\t\t\t: content\n\t\t\t\t\t\t\t\t.filter((c): c is { readonly type: \"text\"; readonly text: string } => c.type === \"text\")\n\t\t\t\t\t\t\t\t.map((c) => c.text)\n\t\t\t\t\t\t\t\t.join(\"\");\n\t\t\t} else if (targetEntry.type === \"custom_message\") {\n\t\t\t\tnewLeafId = targetEntry.parentId;\n\t\t\t\teditorText =\n\t\t\t\t\ttypeof targetEntry.content === \"string\"\n\t\t\t\t\t\t? targetEntry.content\n\t\t\t\t\t\t: targetEntry.content\n\t\t\t\t\t\t\t\t.filter((c): c is { readonly type: \"text\"; readonly text: string } => c.type === \"text\")\n\t\t\t\t\t\t\t\t.map((c) => c.text)\n\t\t\t\t\t\t\t\t.join(\"\");\n\t\t\t} else {\n\t\t\t\tnewLeafId = targetId;\n\t\t\t}\n\t\t\tconst summaryId = await this.session.moveTo(\n\t\t\t\tnewLeafId,\n\t\t\t\tsummaryText\n\t\t\t\t\t? { summary: summaryText, details: summaryDetails, fromHook: hookResult?.summary !== undefined }\n\t\t\t\t\t: undefined,\n\t\t\t);\n\t\t\tif (summaryId) {\n\t\t\t\tconst entry = await this.session.getEntry(summaryId);\n\t\t\t\tif (entry?.type === \"branch_summary\") summaryEntry = entry;\n\t\t\t}\n\t\t\tawait this.emitOwn({\n\t\t\t\ttype: \"session_tree\",\n\t\t\t\tnewLeafId: await this.session.getLeafId(),\n\t\t\t\toldLeafId,\n\t\t\t\tsummaryEntry,\n\t\t\t\tfromHook: hookResult?.summary !== undefined,\n\t\t\t});\n\t\t\treturn { cancelled: false, editorText, summaryEntry };\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"branch_summary\");\n\t\t} finally {\n\t\t\tthis.phase = \"idle\";\n\t\t}\n\t}\n\n\tgetModel(): Model<any> {\n\t\treturn this.model;\n\t}\n\n\tasync setModel(model: Model<any>): Promise<void> {\n\t\ttry {\n\t\t\tconst previousModel = this.model;\n\t\t\tif (this.phase === \"idle\") {\n\t\t\t\tawait this.session.appendModelChange(model.provider, model.id);\n\t\t\t} else {\n\t\t\t\tthis.pendingSessionWrites.push({ type: \"model_change\", provider: model.provider, modelId: model.id });\n\t\t\t}\n\t\t\tthis.model = model;\n\t\t\tawait this.emitOwn({ type: \"model_update\", model, previousModel, source: \"set\" });\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"session\");\n\t\t}\n\t}\n\n\tgetThinkingLevel(): ThinkingLevel {\n\t\treturn this.thinkingLevel;\n\t}\n\n\tasync setThinkingLevel(level: ThinkingLevel): Promise<void> {\n\t\ttry {\n\t\t\tconst previousLevel = this.thinkingLevel;\n\t\t\tif (this.phase === \"idle\") {\n\t\t\t\tawait this.session.appendThinkingLevelChange(level);\n\t\t\t} else {\n\t\t\t\tthis.pendingSessionWrites.push({ type: \"thinking_level_change\", thinkingLevel: level });\n\t\t\t}\n\t\t\tthis.thinkingLevel = level;\n\t\t\tawait this.emitOwn({ type: \"thinking_level_update\", level, previousLevel });\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"session\");\n\t\t}\n\t}\n\n\tgetTools(): TTool[] {\n\t\treturn [...this.tools.values()];\n\t}\n\n\tasync setTools(tools: TTool[], activeToolNames?: string[]): Promise<void> {\n\t\ttry {\n\t\t\tthis.validateUniqueNames(\n\t\t\t\ttools.map((tool) => tool.name),\n\t\t\t\t\"Duplicate tool name(s)\",\n\t\t\t);\n\t\t\tconst nextTools = new Map(tools.map((tool) => [tool.name, tool]));\n\t\t\tconst nextActiveToolNames = activeToolNames ? [...activeToolNames] : this.activeToolNames;\n\t\t\tthis.validateToolNames(nextActiveToolNames, nextTools);\n\t\t\tconst previousToolNames = [...this.tools.keys()];\n\t\t\tconst previousActiveToolNames = [...this.activeToolNames];\n\t\t\tif (this.phase === \"idle\") {\n\t\t\t\tawait this.session.appendActiveToolsChange(nextActiveToolNames);\n\t\t\t} else {\n\t\t\t\tthis.pendingSessionWrites.push({ type: \"active_tools_change\", activeToolNames: [...nextActiveToolNames] });\n\t\t\t}\n\t\t\tthis.tools = nextTools;\n\t\t\tthis.activeToolNames = [...nextActiveToolNames];\n\t\t\tawait this.emitOwn({\n\t\t\t\ttype: \"tools_update\",\n\t\t\t\ttoolNames: [...this.tools.keys()],\n\t\t\t\tpreviousToolNames,\n\t\t\t\tactiveToolNames: [...this.activeToolNames],\n\t\t\t\tpreviousActiveToolNames,\n\t\t\t\tsource: \"set\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"invalid_argument\");\n\t\t}\n\t}\n\n\tgetActiveTools(): TTool[] {\n\t\treturn this.activeToolNames.map((name) => this.tools.get(name)!);\n\t}\n\n\tasync setActiveTools(toolNames: string[]): Promise<void> {\n\t\ttry {\n\t\t\tthis.validateToolNames(toolNames);\n\t\t\tconst previousToolNames = [...this.tools.keys()];\n\t\t\tconst previousActiveToolNames = [...this.activeToolNames];\n\t\t\tif (this.phase === \"idle\") {\n\t\t\t\tawait this.session.appendActiveToolsChange(toolNames);\n\t\t\t} else {\n\t\t\t\tthis.pendingSessionWrites.push({ type: \"active_tools_change\", activeToolNames: [...toolNames] });\n\t\t\t}\n\t\t\tthis.activeToolNames = [...toolNames];\n\t\t\tawait this.emitOwn({\n\t\t\t\ttype: \"tools_update\",\n\t\t\t\ttoolNames: [...this.tools.keys()],\n\t\t\t\tpreviousToolNames,\n\t\t\t\tactiveToolNames: [...this.activeToolNames],\n\t\t\t\tpreviousActiveToolNames,\n\t\t\t\tsource: \"set\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"invalid_argument\");\n\t\t}\n\t}\n\n\tgetSteeringMode(): QueueMode {\n\t\treturn this.steeringQueueMode;\n\t}\n\n\tasync setSteeringMode(mode: QueueMode): Promise<void> {\n\t\tthis.steeringQueueMode = mode;\n\t}\n\n\tgetFollowUpMode(): QueueMode {\n\t\treturn this.followUpQueueMode;\n\t}\n\n\tasync setFollowUpMode(mode: QueueMode): Promise<void> {\n\t\tthis.followUpQueueMode = mode;\n\t}\n\n\tgetResources(): AgentHarnessResources<TSkill, TPromptTemplate> {\n\t\treturn {\n\t\t\tskills: this.resources.skills?.slice(),\n\t\t\tpromptTemplates: this.resources.promptTemplates?.slice(),\n\t\t};\n\t}\n\n\tasync setResources(resources: AgentHarnessResources<TSkill, TPromptTemplate>): Promise<void> {\n\t\tconst previousResources = this.getResources();\n\t\tthis.resources = {\n\t\t\tskills: resources.skills?.slice(),\n\t\t\tpromptTemplates: resources.promptTemplates?.slice(),\n\t\t};\n\t\tawait this.emitOwn({ type: \"resources_update\", resources: this.getResources(), previousResources });\n\t}\n\n\tgetStreamOptions(): AgentHarnessStreamOptions {\n\t\treturn cloneStreamOptions(this.streamOptions);\n\t}\n\n\tasync setStreamOptions(streamOptions: AgentHarnessStreamOptions): Promise<void> {\n\t\tthis.streamOptions = cloneStreamOptions(streamOptions);\n\t}\n\n\tasync abort(): Promise<AbortResult> {\n\t\tif (this.phase !== \"idle\" && this.phase !== \"turn\")\n\t\t\tthrow new AgentHarnessError(\"invalid_state\", `Cannot abort during ${this.phase}`);\n\t\tconst clearedSteer = this.steerQueue.splice(0);\n\t\tconst clearedFollowUp = this.followUpQueue.splice(0);\n\t\tthis.runAbortController?.abort();\n\t\tconst errors: Error[] = [];\n\t\ttry {\n\t\t\tawait this.emitQueueUpdate();\n\t\t} catch (error) {\n\t\t\terrors.push(toError(error));\n\t\t}\n\t\ttry {\n\t\t\tawait this.waitForIdle();\n\t\t} catch (error) {\n\t\t\terrors.push(toError(error));\n\t\t}\n\t\ttry {\n\t\t\tawait this.emitOwn({ type: \"abort\", clearedSteer, clearedFollowUp });\n\t\t} catch (error) {\n\t\t\terrors.push(toError(error));\n\t\t}\n\t\tif (errors.length > 0) {\n\t\t\tconst cause = errors.length === 1 ? errors[0]! : new AggregateError(errors, \"Abort completed with errors\");\n\t\t\tthrow normalizeHarnessError(cause, \"hook\");\n\t\t}\n\t\treturn { clearedSteer, clearedFollowUp };\n\t}\n\n\tasync waitForIdle(): Promise<void> {\n\t\t// Runs can chain: a settled listener may start the next prompt() before the\n\t\t// previous run's promise resolves, so keep waiting until no run is active.\n\t\twhile (this.runPromise) {\n\t\t\tawait this.runPromise;\n\t\t}\n\t}\n\n\tsubscribe(\n\t\tlistener: (event: AgentHarnessEvent<TSkill, TPromptTemplate>, signal?: AbortSignal) => Promise<void> | void,\n\t): () => void {\n\t\tlet handlers = this.handlers.get(SUBSCRIBER_EVENT_TYPE);\n\t\tif (!handlers) {\n\t\t\thandlers = new Set();\n\t\t\tthis.handlers.set(SUBSCRIBER_EVENT_TYPE, handlers);\n\t\t}\n\t\thandlers.add(listener as AgentHarnessHandler);\n\t\treturn () => handlers!.delete(listener as AgentHarnessHandler);\n\t}\n\n\ton<TType extends keyof AgentHarnessEventResultMap>(\n\t\ttype: TType,\n\t\thandler: (\n\t\t\tevent: Extract<AgentHarnessOwnEvent, { type: TType }>,\n\t\t) => Promise<AgentHarnessEventResultMap[TType]> | AgentHarnessEventResultMap[TType],\n\t): () => void {\n\t\tlet handlers = this.handlers.get(type);\n\t\tif (!handlers) {\n\t\t\thandlers = new Set();\n\t\t\tthis.handlers.set(type, handlers);\n\t\t}\n\t\thandlers.add(handler as AgentHarnessHandler);\n\t\treturn () => handlers!.delete(handler as AgentHarnessHandler);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"agent-harness.js","sourceRoot":"","sources":["../../src/harness/agent-harness.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AssistantMessage,\n\ttype Context,\n\ttype ImageContent,\n\tisContextOverflow,\n\ttype Model,\n\tstreamSimple,\n\ttype UserMessage,\n} from \"omk-ai\";\nimport { runAgentLoop, runAgentLoopContinue } from \"../agent-loop.ts\";\nimport type {\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopConfig,\n\tAgentMessage,\n\tAgentTool,\n\tQueueMode,\n\tStreamFn,\n\tThinkingLevel,\n} from \"../types.ts\";\nimport { collectEntriesForBranchSummary } from \"./compaction/branch-summarization.ts\";\nimport {\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateContextTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"./compaction/compaction.ts\";\nimport type { HarnessCompactionRunOptions } from \"./compaction/operation.ts\";\nimport { HarnessSessionFacade } from \"./harness-session.ts\";\nimport { convertToLlm, createFailureMessage, createUserMessage } from \"./messages.ts\";\nimport { findDuplicateNames } from \"./name-validation.ts\";\nimport {\n\ttype AttemptLease,\n\ttype OperationLease,\n\tOperationLifecycleController,\n} from \"./operation-lifecycle-controller.ts\";\nimport {\n\ttype HarnessAttemptOutcome,\n\ttype HarnessAttemptReason,\n\ttype HarnessOperationKind,\n\ttype HarnessOperationOutcome,\n\tPROMPT_FAMILY_KINDS,\n} from \"./operation-lifecycle-types.ts\";\nimport {\n\tclassifyAssistantOutcome,\n\tclassifyAttemptFailure,\n\tclassifyAttemptOutcome,\n\tclassifyNavigateTreeOutcome,\n\tcombineBoundaryErrors,\n\tnormalizeHarnessError,\n\tresolveOperationFailure,\n\tresolveOperationOutcome,\n} from \"./operation-outcome.ts\";\nimport { formatPromptTemplateInvocation } from \"./prompt-templates.ts\";\nimport { uuidv7 } from \"./session/uuid.ts\";\nimport { type QueuedSessionWrite, SessionWriteCoordinator } from \"./session-write-coordinator.ts\";\nimport { formatSkillInvocation } from \"./skills.ts\";\nimport { applyStreamOptionsPatch, cloneStreamOptions, mergeHeaders } from \"./stream-options.ts\";\nimport { SubscriberFanout } from \"./subscriber-fanout.ts\";\nimport { createSummarizationRetry } from \"./summarization-retry.ts\";\nimport { resolveNavigationTarget, runBranchSummary } from \"./tree-navigation.ts\";\nimport type {\n\tAbortResult,\n\tAgentHarnessEvent,\n\tAgentHarnessEventResultMap,\n\tAgentHarnessOptions,\n\tAgentHarnessOwnEvent,\n\tAgentHarnessPhase,\n\tAgentHarnessResources,\n\tAgentHarnessStreamOptions,\n\tCompactionSettings,\n\tCompactResult,\n\tExecutionEnv,\n\tHarnessSession,\n\tNavigateTreeResult,\n\tPromptTemplate,\n\tSession,\n\tSkill,\n} from \"./types.ts\";\nimport { AgentHarnessError, toError } from \"./types.ts\";\n\ntype AgentHarnessHandler = (event: any, signal?: AbortSignal) => Promise<any> | any;\n\ninterface AgentHarnessTurnState<\n\tTSkill extends Skill = Skill,\n\tTPromptTemplate extends PromptTemplate = PromptTemplate,\n\tTTool extends AgentTool = AgentTool,\n> {\n\tmessages: AgentMessage[];\n\tresources: AgentHarnessResources<TSkill, TPromptTemplate>;\n\tstreamOptions: AgentHarnessStreamOptions;\n\tsessionId: string;\n\tsystemPrompt: string;\n\tmodel: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\ttools: TTool[];\n\tactiveTools: TTool[];\n}\n\nexport class AgentHarness<\n\tTSkill extends Skill = Skill,\n\tTPromptTemplate extends PromptTemplate = PromptTemplate,\n\tTTool extends AgentTool = AgentTool,\n> {\n\treadonly env: ExecutionEnv;\n\tprivate session: Session;\n\tprivate readonly sessionFacade: HarnessSession;\n\tprivate readonly lifecycle: OperationLifecycleController;\n\tprivate readonly sessionWrites: SessionWriteCoordinator<AgentMessage>;\n\tprivate model: Model<any>;\n\tprivate thinkingLevel: ThinkingLevel;\n\tprivate systemPrompt: AgentHarnessOptions<TSkill, TPromptTemplate, TTool>[\"systemPrompt\"];\n\tprivate streamOptions: AgentHarnessStreamOptions;\n\tprivate compactionSettings: CompactionSettings;\n\tprivate getApiKeyAndHeaders?: AgentHarnessOptions[\"getApiKeyAndHeaders\"];\n\tprivate resources: AgentHarnessResources<TSkill, TPromptTemplate>;\n\tprivate tools = new Map<string, TTool>();\n\tprivate activeToolNames: string[];\n\tprivate steerQueue: UserMessage[] = [];\n\tprivate steeringQueueMode: QueueMode;\n\tprivate followUpQueue: UserMessage[] = [];\n\tprivate followUpQueueMode: QueueMode;\n\tprivate nextTurnQueue: AgentMessage[] = [];\n\tprivate handlers = new Map<string, Set<AgentHarnessHandler>>();\n\tprivate readonly subscribers = new SubscriberFanout<AgentHarnessEvent<TSkill, TPromptTemplate>>();\n\n\tconstructor(options: AgentHarnessOptions<TSkill, TPromptTemplate, TTool>) {\n\t\tthis.env = options.env;\n\t\tthis.session = options.session;\n\t\tthis.sessionWrites = new SessionWriteCoordinator(this.session);\n\t\tthis.lifecycle = new OperationLifecycleController({\n\t\t\tcreateOperationId: () => uuidv7(),\n\t\t\tnow: () => Date.now(),\n\t\t});\n\t\tthis.sessionFacade = new HarnessSessionFacade(this.session, () => this.currentPhase(), this.sessionWrites);\n\t\tthis.resources = options.resources ?? {};\n\t\tthis.streamOptions = cloneStreamOptions(options.streamOptions);\n\t\tthis.compactionSettings = { ...DEFAULT_COMPACTION_SETTINGS, ...options.compaction };\n\t\tthis.systemPrompt = options.systemPrompt;\n\t\tthis.getApiKeyAndHeaders = options.getApiKeyAndHeaders;\n\t\tthis.validateUniqueNames(\n\t\t\t(options.tools ?? []).map((tool) => tool.name),\n\t\t\t\"Duplicate tool name(s)\",\n\t\t);\n\t\tfor (const tool of options.tools ?? []) {\n\t\t\tthis.tools.set(tool.name, tool);\n\t\t}\n\t\tthis.model = options.model;\n\t\tthis.thinkingLevel = options.thinkingLevel ?? \"off\";\n\t\tthis.activeToolNames = options.activeToolNames\n\t\t\t? [...options.activeToolNames]\n\t\t\t: (options.tools ?? []).map((tool) => tool.name);\n\t\tthis.validateUniqueNames(this.activeToolNames, \"Duplicate active tool name(s)\");\n\t\tthis.validateToolNames(this.activeToolNames);\n\t\tthis.steeringQueueMode = options.steeringMode ?? \"one-at-a-time\";\n\t\tthis.followUpQueueMode = options.followUpMode ?? \"one-at-a-time\";\n\t}\n\n\tprivate async emitOwn(event: AgentHarnessOwnEvent<TSkill, TPromptTemplate>, signal?: AbortSignal): Promise<void> {\n\t\tawait this.emitAny(event as AgentHarnessEvent<TSkill, TPromptTemplate>, signal);\n\t}\n\n\t/** Subscriber fan-out; the self-wait barrier lives in `SubscriberFanout`. */\n\tprivate async emitAny(event: AgentHarnessEvent<TSkill, TPromptTemplate>, signal?: AbortSignal): Promise<void> {\n\t\tawait this.subscribers.emit(event, this.lifecycle.getCurrentOperation()?.operationId, signal);\n\t}\n\n\t/** Fail closed when an awaited listener tries to wait on its own operation. */\n\tprivate rejectCurrentOperationSelfWait(api: string): void {\n\t\tthis.subscribers.assertNotSelfWait(api, this.lifecycle.getCurrentOperation()?.operationId);\n\t}\n\n\tprivate async emitHook<TType extends keyof AgentHarnessEventResultMap>(\n\t\tevent: Extract<AgentHarnessOwnEvent, { type: TType }>,\n\t): Promise<AgentHarnessEventResultMap[TType] | undefined> {\n\t\tconst handlers = this.handlers.get(event.type as TType);\n\t\tif (!handlers || handlers.size === 0) return undefined;\n\t\tlet lastResult: AgentHarnessEventResultMap[TType] | undefined;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler(event);\n\t\t\t\tif (result !== undefined) {\n\t\t\t\t\tlastResult = result;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t\treturn lastResult;\n\t}\n\n\tprivate async emitBeforeProviderRequest(\n\t\tmodel: Model<any>,\n\t\tsessionId: string,\n\t\tstreamOptions: AgentHarnessStreamOptions,\n\t): Promise<AgentHarnessStreamOptions> {\n\t\tconst handlers = this.handlers.get(\"before_provider_request\");\n\t\tlet current = cloneStreamOptions(streamOptions);\n\t\tif (!handlers || handlers.size === 0) return current;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler({\n\t\t\t\t\ttype: \"before_provider_request\",\n\t\t\t\t\tmodel,\n\t\t\t\t\tsessionId,\n\t\t\t\t\tstreamOptions: cloneStreamOptions(current),\n\t\t\t\t});\n\t\t\t\tif (result?.streamOptions) {\n\t\t\t\t\tcurrent = applyStreamOptionsPatch(current, result.streamOptions);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t\treturn current;\n\t}\n\n\tprivate async emitBeforeProviderPayload(model: Model<any>, payload: unknown): Promise<unknown> {\n\t\tconst handlers = this.handlers.get(\"before_provider_payload\");\n\t\tlet current = payload;\n\t\tif (!handlers || handlers.size === 0) return current;\n\t\tfor (const handler of handlers) {\n\t\t\ttry {\n\t\t\t\tconst result = await handler({ type: \"before_provider_payload\", model, payload: current });\n\t\t\t\tif (result !== undefined) {\n\t\t\t\t\tcurrent = result.payload;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t}\n\t\treturn current;\n\t}\n\n\tprivate async emitQueueUpdate(): Promise<void> {\n\t\tawait this.emitOwn({\n\t\t\ttype: \"queue_update\",\n\t\t\tsteer: [...this.steerQueue],\n\t\t\tfollowUp: [...this.followUpQueue],\n\t\t\tnextTurn: [...this.nextTurnQueue],\n\t\t});\n\t}\n\n\t/**\n\t * Facade write-gate vocabulary mapped from lifecycle state. `settling` maps\n\t * to \"idle\": the queue is drained by the settlement finalizer first, and\n\t * listener writes persist after it through the coordinator tail.\n\t */\n\tprivate currentPhase(): AgentHarnessPhase {\n\t\tconst snapshot = this.lifecycle.getSnapshot();\n\t\tif (snapshot.tag !== \"active\") return \"idle\";\n\t\tswitch (snapshot.operation.kind) {\n\t\t\tcase \"manual_compaction\":\n\t\t\t\treturn \"compaction\";\n\t\t\tcase \"tree_navigation\":\n\t\t\t\treturn \"branch_summary\";\n\t\t\tdefault:\n\t\t\t\treturn \"turn\";\n\t\t}\n\t}\n\n\t/** Config writes persist immediately outside an active operation and queue during one. */\n\tprivate async persistConfigChange(write: QueuedSessionWrite<AgentMessage>): Promise<void> {\n\t\tif (this.lifecycle.getSnapshot().tag !== \"active\") {\n\t\t\tawait this.sessionWrites.persistAfterPending(write);\n\t\t} else {\n\t\t\tthis.sessionWrites.enqueue(write);\n\t\t}\n\t}\n\n\t/**\n\t * Single wrapper for every public operation: begin a lease, run the body,\n\t * then settle exactly once. The final flush and the `settled` event happen\n\t * inside the settling barrier; a finalizer failure never reports success.\n\t */\n\tprivate async runOperation<T>(\n\t\tkind: HarnessOperationKind,\n\t\tfallbackCode: AgentHarnessError[\"code\"],\n\t\tbody: (lease: OperationLease) => Promise<T>,\n\t\tclassifyResult?: (result: T) => HarnessOperationOutcome | undefined,\n\t): Promise<T> {\n\t\tconst lease = this.lifecycle.begin(kind);\n\t\tlet result: T | undefined;\n\t\tlet bodyError: unknown;\n\t\t// Everything after a successful begin() runs inside one capture region. A\n\t\t// throwing `operation_started` listener must not escape before settle(),\n\t\t// or the lifecycle would stay active and wedge the harness at \"busy\".\n\t\ttry {\n\t\t\tawait this.emitOwn({ type: \"operation_started\", operation: lease.operation });\n\t\t\tresult = await body(lease);\n\t\t} catch (error) {\n\t\t\tbodyError = error;\n\t\t}\n\t\t// The final flush precedes classification: a persistence failure after a\n\t\t// provider success must never record or report a completed operation.\n\t\tlet flushError: unknown;\n\t\ttry {\n\t\t\tawait this.sessionWrites.flush();\n\t\t} catch (error) {\n\t\t\tflushError = error;\n\t\t}\n\t\tconst outcome = resolveOperationOutcome({\n\t\t\tsignalAborted: lease.signal.aborted,\n\t\t\tresult,\n\t\t\tbodyError,\n\t\t\tflushError,\n\t\t\tclassifyResult,\n\t\t\tfallbackCode,\n\t\t});\n\t\tlet settleError: unknown;\n\t\ttry {\n\t\t\tawait this.lifecycle.settle(lease, outcome, async () => {\n\t\t\t\tawait this.emitOwn(\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"settled\",\n\t\t\t\t\t\tnextTurnCount: this.nextTurnQueue.length,\n\t\t\t\t\t\toperationId: lease.operation.operationId,\n\t\t\t\t\t\toutcome,\n\t\t\t\t\t\tattemptCount: this.lifecycle.getAttemptSummaries(lease).length,\n\t\t\t\t\t},\n\t\t\t\t\tlease.signal,\n\t\t\t\t);\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tsettleError = error;\n\t\t}\n\t\tconst failure = resolveOperationFailure({ bodyError, flushError, settleError, fallbackCode });\n\t\tif (failure !== undefined) throw failure;\n\t\treturn result as T;\n\t}\n\n\tprivate async createTurnState(): Promise<AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>> {\n\t\tconst context = await this.session.buildContext();\n\t\tconst resources = this.getResources();\n\t\tconst sessionMetadata = await this.session.getMetadata();\n\t\tconst tools = [...this.tools.values()];\n\t\tconst activeTools = this.activeToolNames\n\t\t\t.map((name) => this.tools.get(name))\n\t\t\t.filter((tool): tool is TTool => tool !== undefined);\n\t\tlet systemPrompt = \"You are a helpful assistant.\";\n\t\tif (typeof this.systemPrompt === \"string\") {\n\t\t\tsystemPrompt = this.systemPrompt;\n\t\t} else if (this.systemPrompt) {\n\t\t\tsystemPrompt = await this.systemPrompt({\n\t\t\t\tenv: this.env,\n\t\t\t\tsession: this.session,\n\t\t\t\tmodel: this.model,\n\t\t\t\tthinkingLevel: this.thinkingLevel,\n\t\t\t\tactiveTools,\n\t\t\t\tresources,\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tmessages: context.messages,\n\t\t\tresources,\n\t\t\tstreamOptions: cloneStreamOptions(this.streamOptions),\n\t\t\tsessionId: sessionMetadata.id,\n\t\t\tsystemPrompt,\n\t\t\tmodel: this.model,\n\t\t\tthinkingLevel: this.thinkingLevel,\n\t\t\ttools,\n\t\t\tactiveTools,\n\t\t};\n\t}\n\n\tprivate createContext(\n\t\tturnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\tsystemPrompt?: string,\n\t): AgentContext {\n\t\treturn {\n\t\t\tsystemPrompt: systemPrompt ?? turnState.systemPrompt,\n\t\t\tmessages: turnState.messages.slice(),\n\t\t\ttools: turnState.activeTools.slice(),\n\t\t};\n\t}\n\n\tprivate createStreamFn(getTurnState: () => AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>): StreamFn {\n\t\treturn async (model, context, streamOptions) => {\n\t\t\tconst turnState = getTurnState();\n\t\t\tconst requestContext = await this.maybeAutoCompact(model, context, streamOptions?.signal);\n\t\t\tconst auth = await this.getApiKeyAndHeaders?.(model);\n\t\t\tconst snapshotOptions: AgentHarnessStreamOptions = {\n\t\t\t\t...turnState.streamOptions,\n\t\t\t\theaders: mergeHeaders(turnState.streamOptions.headers, auth?.headers),\n\t\t\t};\n\t\t\tconst requestOptions = await this.emitBeforeProviderRequest(model, turnState.sessionId, snapshotOptions);\n\t\t\treturn streamSimple(model, requestContext, {\n\t\t\t\tcacheRetention: requestOptions.cacheRetention,\n\t\t\t\theaders: requestOptions.headers,\n\t\t\t\tmaxRetries: requestOptions.maxRetries,\n\t\t\t\tmaxRetryDelayMs: requestOptions.maxRetryDelayMs,\n\t\t\t\tmetadata: requestOptions.metadata,\n\t\t\t\tonPayload: async (payload) => await this.emitBeforeProviderPayload(model, payload),\n\t\t\t\tonResponse: async (response) => {\n\t\t\t\t\tconst headers = { ...(response.headers as Record<string, string>) };\n\t\t\t\t\tawait this.emitOwn(\n\t\t\t\t\t\t{ type: \"after_provider_response\", status: response.status, headers },\n\t\t\t\t\t\tstreamOptions?.signal,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\treasoning: streamOptions?.reasoning,\n\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t\tsessionId: turnState.sessionId,\n\t\t\t\ttimeoutMs: requestOptions.timeoutMs,\n\t\t\t\ttransport: requestOptions.transport,\n\t\t\t\tapiKey: auth?.apiKey,\n\t\t\t});\n\t\t};\n\t}\n\n\tprivate async drainQueuedMessages(queue: AgentMessage[], mode: QueueMode): Promise<AgentMessage[]> {\n\t\tconst messages = mode === \"all\" ? queue.splice(0) : queue.splice(0, 1);\n\t\tif (messages.length === 0) return messages;\n\t\ttry {\n\t\t\tawait this.emitQueueUpdate();\n\t\t\treturn messages;\n\t\t} catch (error) {\n\t\t\tqueue.unshift(...messages);\n\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t}\n\t}\n\n\tprivate createLoopConfig(\n\t\tgetTurnState: () => AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\tsetTurnState: (turnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>) => void,\n\t\tlease?: OperationLease,\n\t): AgentLoopConfig {\n\t\tconst turnState = getTurnState();\n\t\treturn {\n\t\t\tmodel: turnState.model,\n\t\t\treasoning: turnState.thinkingLevel === \"off\" ? undefined : turnState.thinkingLevel,\n\t\t\tconvertToLlm,\n\t\t\ttransformContext: async (messages) => {\n\t\t\t\tconst result = await this.emitHook({ type: \"context\", messages: [...messages] });\n\t\t\t\treturn result?.messages ?? messages;\n\t\t\t},\n\t\t\tbeforeToolCall: async ({ toolCall, args }) => {\n\t\t\t\tconst result = await this.emitHook({\n\t\t\t\t\ttype: \"tool_call\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\tinput: args as Record<string, unknown>,\n\t\t\t\t});\n\t\t\t\treturn result ? { block: result.block, reason: result.reason } : undefined;\n\t\t\t},\n\t\t\tafterToolCall: async ({ toolCall, args, result, isError }) => {\n\t\t\t\tconst patch = await this.emitHook({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: toolCall.name,\n\t\t\t\t\tinput: args as Record<string, unknown>,\n\t\t\t\t\tcontent: result.content,\n\t\t\t\t\tdetails: result.details,\n\t\t\t\t\tisError,\n\t\t\t\t});\n\t\t\t\treturn patch\n\t\t\t\t\t? { content: patch.content, details: patch.details, isError: patch.isError, terminate: patch.terminate }\n\t\t\t\t\t: undefined;\n\t\t\t},\n\t\t\tprepareNextTurn: async () => {\n\t\t\t\tawait this.sessionWrites.flush();\n\t\t\t\tif (lease) {\n\t\t\t\t\tconst snapshot = this.lifecycle.getSnapshot();\n\t\t\t\t\tif (snapshot.tag === \"active\" && snapshot.stage === \"save_point\") {\n\t\t\t\t\t\tthis.lifecycle.setStage(lease, \"attempt_running\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst nextTurnState = await this.createTurnState();\n\t\t\t\tsetTurnState(nextTurnState);\n\t\t\t\treturn {\n\t\t\t\t\tcontext: this.createContext(nextTurnState),\n\t\t\t\t\tmodel: nextTurnState.model,\n\t\t\t\t\tthinkingLevel: nextTurnState.thinkingLevel,\n\t\t\t\t};\n\t\t\t},\n\t\t\tgetSteeringMessages: async () => this.drainQueuedMessages(this.steerQueue, this.steeringQueueMode),\n\t\t\tgetFollowUpMessages: async () => this.drainQueuedMessages(this.followUpQueue, this.followUpQueueMode),\n\t\t};\n\t}\n\n\tprivate validateUniqueNames(names: string[], message: string): void {\n\t\tconst duplicates = findDuplicateNames(names);\n\t\tif (duplicates.length > 0)\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", `${message}: ${duplicates.join(\", \")}`);\n\t}\n\n\tprivate validateToolNames(toolNames: string[], tools: Map<string, TTool> = this.tools): void {\n\t\tthis.validateUniqueNames(toolNames, \"Duplicate active tool name(s)\");\n\t\tconst missing = toolNames.filter((name) => !tools.has(name));\n\t\tif (missing.length > 0) throw new AgentHarnessError(\"invalid_argument\", `Unknown tool(s): ${missing.join(\", \")}`);\n\t}\n\n\tprivate async handleAgentEvent(event: AgentEvent, signal?: AbortSignal, lease?: OperationLease): Promise<void> {\n\t\tif (event.type === \"message_end\") {\n\t\t\tawait this.session.appendMessage(event.message);\n\t\t\tawait this.emitAny(event, signal);\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"turn_end\") {\n\t\t\tlet eventError: unknown;\n\t\t\ttry {\n\t\t\t\tawait this.emitAny(event, signal);\n\t\t\t} catch (error) {\n\t\t\t\teventError = error;\n\t\t\t}\n\t\t\t// The flush runs even after a failing listener so accepted writes are\n\t\t\t// not stranded; a failing flush must then report next to that listener\n\t\t\t// error, not in place of it.\n\t\t\tconst hadPendingMutations = this.sessionWrites.hasPending();\n\t\t\tlet flushError: unknown;\n\t\t\ttry {\n\t\t\t\tawait this.sessionWrites.flush();\n\t\t\t} catch (error) {\n\t\t\t\tflushError = error;\n\t\t\t}\n\t\t\tif (lease) {\n\t\t\t\tconst snapshot = this.lifecycle.getSnapshot();\n\t\t\t\tif (snapshot.tag === \"active\" && snapshot.stage === \"attempt_running\") {\n\t\t\t\t\tthis.lifecycle.setStage(lease, \"save_point\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst failure = combineBoundaryErrors(\n\t\t\t\t[eventError, flushError],\n\t\t\t\t\"turn_end listener failed and the save-point flush failed\",\n\t\t\t\t\"hook\",\n\t\t\t);\n\t\t\tif (failure !== undefined) throw failure;\n\t\t\tawait this.emitOwn({ type: \"save_point\", hadPendingMutations });\n\t\t\treturn;\n\t\t}\n\t\tif (event.type === \"agent_end\") {\n\t\t\t// agent_end is an attempt event: flush its accepted writes, but lifecycle\n\t\t\t// settlement and the settled event belong to OperationLease.settle().\n\t\t\tawait this.sessionWrites.flush();\n\t\t\tawait this.emitAny(event, signal);\n\t\t\treturn;\n\t\t}\n\t\tawait this.emitAny(event, signal);\n\t}\n\n\tprivate async emitRunFailure(\n\t\tmodel: Model<any>,\n\t\terror: unknown,\n\t\taborted: boolean,\n\t\tsignal: AbortSignal,\n\t\tcompletedMessages: readonly AgentMessage[],\n\t\tlease?: OperationLease,\n\t): Promise<AgentMessage[]> {\n\t\tconst failureMessage = createFailureMessage(model, error, aborted);\n\t\tconst messages = [...completedMessages, failureMessage];\n\t\tawait this.handleAgentEvent({ type: \"message_start\", message: failureMessage }, signal, lease);\n\t\tawait this.handleAgentEvent({ type: \"message_end\", message: failureMessage }, signal, lease);\n\t\tawait this.handleAgentEvent({ type: \"turn_end\", message: failureMessage, toolResults: [] }, signal, lease);\n\t\tawait this.handleAgentEvent({ type: \"agent_end\", messages }, signal, lease);\n\t\treturn messages;\n\t}\n\n\tprivate async executeTurn(\n\t\tlease: OperationLease,\n\t\tturnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\ttext: string,\n\t\toptions?: { images?: ImageContent[] },\n\t): Promise<AssistantMessage> {\n\t\tlet messages: AgentMessage[] = [createUserMessage(text, options?.images)];\n\t\tif (this.nextTurnQueue.length > 0) {\n\t\t\tconst queuedMessages = this.nextTurnQueue.splice(0);\n\t\t\ttry {\n\t\t\t\tawait this.emitQueueUpdate();\n\t\t\t} catch (error) {\n\t\t\t\tthis.nextTurnQueue.unshift(...queuedMessages);\n\t\t\t\tthrow normalizeHarnessError(error, \"hook\");\n\t\t\t}\n\t\t\tmessages = [...queuedMessages, messages[0]!];\n\t\t}\n\t\tconst beforeResult = await this.emitHook({\n\t\t\ttype: \"before_agent_start\",\n\t\t\tprompt: text,\n\t\t\timages: options?.images,\n\t\t\tsystemPrompt: turnState.systemPrompt,\n\t\t\tresources: turnState.resources,\n\t\t});\n\t\tif (beforeResult?.messages) messages = [...messages, ...beforeResult.messages];\n\n\t\tconst result = await this.executeAgentRun(\n\t\t\tlease,\n\t\t\t\"initial\",\n\t\t\tturnState,\n\t\t\tthis.createContext(turnState, beforeResult?.systemPrompt),\n\t\t\tmessages,\n\t\t);\n\t\treturn await this.recoverContextOverflow(lease, result);\n\t}\n\n\t/**\n\t * Sole attempt boundary: begin, announce, run, classify, close, announce, flush.\n\t *\n\t * Once `beginAttempt()` succeeds the attempt is closed exactly once on every\n\t * path, so `count(attempt_started) == count(attempt_finished)` holds even when\n\t * the `attempt_started` observer throws. `attempt_finished` is emitted only\n\t * after the attempt is already closed, so a throwing observer can fail the\n\t * operation but can never reopen committed attempt state. The closing flush\n\t * is not a `finally`: a `finally` that awaits a throwing flush would replace\n\t * the body error, hiding the provider or listener failure from the audit trail.\n\t */\n\tprivate async runAttempt<T>(\n\t\tlease: OperationLease,\n\t\treason: HarnessAttemptReason,\n\t\tbody: (attempt: AttemptLease) => Promise<T>,\n\t\tclassify: (result: T) => HarnessAttemptOutcome,\n\t): Promise<T> {\n\t\tconst attemptLease = this.lifecycle.beginAttempt(lease, reason);\n\t\tlet result: T | undefined;\n\t\tlet bodyError: unknown;\n\t\ttry {\n\t\t\tawait this.emitOwn({ type: \"attempt_started\", attempt: attemptLease.attempt }, lease.signal);\n\t\t\tresult = await body(attemptLease);\n\t\t} catch (error) {\n\t\t\tbodyError = error;\n\t\t}\n\t\tconst outcome: HarnessAttemptOutcome =\n\t\t\tbodyError === undefined ? classify(result as T) : classifyAttemptFailure(bodyError);\n\t\tthis.lifecycle.finishAttempt(lease, attemptLease, outcome);\n\t\tlet observerError: unknown;\n\t\ttry {\n\t\t\tawait this.emitOwn(\n\t\t\t\t{ type: \"attempt_finished\", summary: this.lifecycle.getAttemptSummary(lease, attemptLease) },\n\t\t\t\tlease.signal,\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tobserverError = error;\n\t\t}\n\t\tlet flushError: unknown;\n\t\ttry {\n\t\t\tawait this.sessionWrites.flush();\n\t\t} catch (error) {\n\t\t\tflushError = error;\n\t\t}\n\t\tconst failure = combineBoundaryErrors(\n\t\t\t[bodyError, observerError, flushError],\n\t\t\t\"Attempt failed and its attempt_finished reporting or closing flush failed\",\n\t\t\t\"unknown\",\n\t\t);\n\t\tif (failure !== undefined) throw failure;\n\t\treturn result as T;\n\t}\n\n\tprivate async executeAgentRun(\n\t\tlease: OperationLease,\n\t\treason: HarnessAttemptReason,\n\t\tturnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>,\n\t\tcontext: AgentContext,\n\t\tinitialMessages?: AgentMessage[],\n\t): Promise<AssistantMessage> {\n\t\tlet activeTurnState = turnState;\n\t\treturn await this.runAttempt(\n\t\t\tlease,\n\t\t\treason,\n\t\t\tasync (attemptLease) => {\n\t\t\t\tconst signal = attemptLease.signal;\n\t\t\t\tconst getTurnState = () => activeTurnState;\n\t\t\t\tconst setTurnState = (nextTurnState: AgentHarnessTurnState<TSkill, TPromptTemplate, TTool>) => {\n\t\t\t\t\tactiveTurnState = nextTurnState;\n\t\t\t\t};\n\t\t\t\tconst completedMessages: AgentMessage[] = [];\n\t\t\t\tconst emit = async (event: AgentEvent): Promise<void> => {\n\t\t\t\t\tif (event.type === \"message_end\") completedMessages.push(event.message);\n\t\t\t\t\tawait this.handleAgentEvent(event, signal, lease);\n\t\t\t\t};\n\t\t\t\tlet newMessages: AgentMessage[];\n\t\t\t\ttry {\n\t\t\t\t\tconst loopConfig = this.createLoopConfig(getTurnState, setTurnState, lease);\n\t\t\t\t\tconst streamFn = this.createStreamFn(getTurnState);\n\t\t\t\t\tnewMessages = initialMessages\n\t\t\t\t\t\t? await runAgentLoop(initialMessages, context, loopConfig, emit, signal, streamFn)\n\t\t\t\t\t\t: await runAgentLoopContinue(context, loopConfig, emit, signal, streamFn);\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnewMessages = await this.emitRunFailure(\n\t\t\t\t\t\t\tactiveTurnState.model,\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\tsignal.aborted,\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\tcompletedMessages,\n\t\t\t\t\t\t\tlease,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (failureError) {\n\t\t\t\t\t\tconst cause = new AggregateError(\n\t\t\t\t\t\t\t[toError(error), toError(failureError)],\n\t\t\t\t\t\t\t\"Agent run failed and failure reporting failed\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthrow new AgentHarnessError(\"unknown\", cause.message, cause);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (let i = newMessages.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst message = newMessages[i]!;\n\t\t\t\t\tif (message.role === \"assistant\") return message;\n\t\t\t\t}\n\t\t\t\tthrow new AgentHarnessError(\"invalid_state\", \"AgentHarness prompt completed without an assistant message\");\n\t\t\t},\n\t\t\t(message) => classifyAttemptOutcome(message, activeTurnState.model.contextWindow),\n\t\t);\n\t}\n\n\t/**\n\t * One-shot overflow recovery inside the originating operation. The lease is\n\t * proof that this operation still owns the harness, so no run-ownership or\n\t * phase re-check is needed; a strict lifecycle makes a newer operation\n\t * starting mid-recovery impossible.\n\t */\n\tprivate async recoverContextOverflow(lease: OperationLease, message: AssistantMessage): Promise<AssistantMessage> {\n\t\tif (!this.compactionSettings.enabled || !isContextOverflow(message, this.model.contextWindow)) {\n\t\t\treturn message;\n\t\t}\n\t\tif (!this.getApiKeyAndHeaders) return message;\n\t\tconst leafId = await this.session.getLeafId();\n\t\tif (!leafId) return message;\n\t\tconst leaf = await this.session.getEntry(leafId);\n\t\tif (\n\t\t\tleaf?.type !== \"message\" ||\n\t\t\tleaf.message.role !== \"assistant\" ||\n\t\t\tleaf.message.timestamp !== message.timestamp ||\n\t\t\t!isContextOverflow(leaf.message, this.model.contextWindow)\n\t\t) {\n\t\t\treturn message;\n\t\t}\n\n\t\tawait this.session.moveTo(leaf.parentId);\n\t\tthis.lifecycle.setStage(lease, \"recovering_overflow\");\n\t\ttry {\n\t\t\tconst compacted = await this.runCompaction({ automatic: true, signal: lease.signal });\n\t\t\tif (!compacted) {\n\t\t\t\tawait this.session.moveTo(leafId);\n\t\t\t\treturn message;\n\t\t\t}\n\t\t\tconst turnState = await this.createTurnState();\n\t\t\treturn await this.executeAgentRun(\n\t\t\t\tlease,\n\t\t\t\t\"context_overflow_recovery\",\n\t\t\t\tturnState,\n\t\t\t\tthis.createContext(turnState),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tawait this.session.moveTo(leafId);\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync prompt(text: string, options?: { images?: ImageContent[] }): Promise<AssistantMessage> {\n\t\treturn this.runOperation(\n\t\t\t\"prompt\",\n\t\t\t\"unknown\",\n\t\t\tasync (lease) => {\n\t\t\t\tconst turnState = await this.createTurnState();\n\t\t\t\treturn await this.executeTurn(lease, turnState, text, options);\n\t\t\t},\n\t\t\tclassifyAssistantOutcome,\n\t\t);\n\t}\n\n\tasync skill(name: string, additionalInstructions?: string): Promise<AssistantMessage> {\n\t\treturn this.runOperation(\n\t\t\t\"skill\",\n\t\t\t\"unknown\",\n\t\t\tasync (lease) => {\n\t\t\t\tconst turnState = await this.createTurnState();\n\t\t\t\tconst skill = (turnState.resources.skills ?? []).find((candidate) => candidate.name === name);\n\t\t\t\tif (!skill) throw new AgentHarnessError(\"invalid_argument\", `Unknown skill: ${name}`);\n\t\t\t\treturn await this.executeTurn(lease, turnState, formatSkillInvocation(skill, additionalInstructions));\n\t\t\t},\n\t\t\tclassifyAssistantOutcome,\n\t\t);\n\t}\n\n\tasync promptFromTemplate(name: string, args: string[] = []): Promise<AssistantMessage> {\n\t\treturn this.runOperation(\n\t\t\t\"prompt_template\",\n\t\t\t\"unknown\",\n\t\t\tasync (lease) => {\n\t\t\t\tconst turnState = await this.createTurnState();\n\t\t\t\tconst template = (turnState.resources.promptTemplates ?? []).find((candidate) => candidate.name === name);\n\t\t\t\tif (!template) throw new AgentHarnessError(\"invalid_argument\", `Unknown prompt template: ${name}`);\n\t\t\t\treturn await this.executeTurn(lease, turnState, formatPromptTemplateInvocation(template, args));\n\t\t\t},\n\t\t\tclassifyAssistantOutcome,\n\t\t);\n\t}\n\n\t/**\n\t * Steering and follow-up input is consumed only by a running agent attempt.\n\t * A structural operation (`compact`, `navigateTree`) runs none, so accepting\n\t * input there would silently inject it into an unrelated later prompt.\n\t */\n\tprivate expectQueueConsumer(action: string): void {\n\t\tconst snapshot = this.lifecycle.getSnapshot();\n\t\tif (snapshot.tag !== \"active\") throw new AgentHarnessError(\"invalid_state\", `Cannot ${action} while idle`);\n\t\tif (!PROMPT_FAMILY_KINDS.includes(snapshot.operation.kind)) {\n\t\t\tthrow new AgentHarnessError(\n\t\t\t\t\"invalid_state\",\n\t\t\t\t`Cannot ${action} during ${snapshot.operation.kind}: no agent attempt can consume it`,\n\t\t\t);\n\t\t}\n\t}\n\n\tasync steer(text: string, options?: { images?: ImageContent[] }): Promise<void> {\n\t\tthis.expectQueueConsumer(\"steer\");\n\t\tthis.steerQueue.push(createUserMessage(text, options?.images));\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\tasync followUp(text: string, options?: { images?: ImageContent[] }): Promise<void> {\n\t\tthis.expectQueueConsumer(\"follow up\");\n\t\tthis.followUpQueue.push(createUserMessage(text, options?.images));\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\tasync nextTurn(text: string, options?: { images?: ImageContent[] }): Promise<void> {\n\t\tthis.nextTurnQueue.push(createUserMessage(text, options?.images));\n\t\tawait this.emitQueueUpdate();\n\t}\n\n\tgetSession(): HarnessSession {\n\t\treturn this.sessionFacade;\n\t}\n\n\tasync appendMessage(message: AgentMessage): Promise<void> {\n\t\tawait this.sessionFacade.appendMessage(message);\n\t}\n\n\tprivate async runCompaction(options: HarnessCompactionRunOptions): Promise<CompactResult | undefined> {\n\t\tconst model = this.model;\n\t\tconst auth = await this.getApiKeyAndHeaders?.(model);\n\t\tif (!auth) {\n\t\t\tif (options.automatic) return undefined;\n\t\t\tthrow new AgentHarnessError(\"auth\", \"No auth available for compaction\");\n\t\t}\n\t\tconst branchEntries = await this.session.getBranch();\n\t\tconst preparationResult = prepareCompaction(branchEntries, this.compactionSettings);\n\t\tif (!preparationResult.ok) throw preparationResult.error;\n\t\tconst preparation = preparationResult.value;\n\t\tif (!preparation) {\n\t\t\tif (options.automatic) return undefined;\n\t\t\tthrow new AgentHarnessError(\"compaction\", \"Nothing to compact\");\n\t\t}\n\t\tconst signal = options.signal ?? new AbortController().signal;\n\t\tconst hookResult = await this.emitHook({\n\t\t\ttype: \"session_before_compact\",\n\t\t\tpreparation,\n\t\t\tbranchEntries,\n\t\t\tcustomInstructions: options.customInstructions,\n\t\t\tsignal,\n\t\t});\n\t\tif (hookResult?.cancel) {\n\t\t\tif (options.automatic) return undefined;\n\t\t\tthrow new AgentHarnessError(\"compaction\", \"Compaction cancelled\");\n\t\t}\n\t\tconst provided = hookResult?.compaction;\n\t\tconst compactResult = provided\n\t\t\t? { ok: true as const, value: provided }\n\t\t\t: await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\tmodel,\n\t\t\t\t\tauth.apiKey,\n\t\t\t\t\tauth.headers,\n\t\t\t\t\toptions.customInstructions,\n\t\t\t\t\tsignal,\n\t\t\t\t\tthis.thinkingLevel,\n\t\t\t\t\tcreateSummarizationRetry(\"compaction\", this.streamOptions.summarizationRetry, (event) =>\n\t\t\t\t\t\tthis.emitOwn(event),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\tif (!compactResult.ok) throw compactResult.error;\n\t\tconst result = compactResult.value;\n\t\toptions.beforeCommit?.();\n\t\tconst entryId = await this.session.appendCompaction(\n\t\t\tresult.summary,\n\t\t\tresult.firstKeptEntryId,\n\t\t\tresult.tokensBefore,\n\t\t\tresult.details,\n\t\t\tprovided !== undefined,\n\t\t);\n\t\tconst entry = await this.session.getEntry(entryId);\n\t\tif (entry?.type === \"compaction\") {\n\t\t\tawait this.emitOwn({ type: \"session_compact\", compactionEntry: entry, fromHook: provided !== undefined });\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate async maybeAutoCompact(model: Model<any>, context: Context, signal?: AbortSignal): Promise<Context> {\n\t\tconst projected = estimateContextTokens(context.messages).tokens;\n\t\tif (!shouldCompact(projected, model.contextWindow ?? 0, this.compactionSettings)) return context;\n\t\tconst result = await this.runCompaction({ automatic: true, signal });\n\t\tif (!result) return context;\n\t\tconst persisted = await this.session.buildContext();\n\t\treturn { ...context, messages: convertToLlm(persisted.messages) };\n\t}\n\n\tasync compact(customInstructions?: string): Promise<CompactResult> {\n\t\treturn this.runOperation(\"manual_compaction\", \"compaction\", async (lease) => {\n\t\t\tthis.lifecycle.setStage(lease, \"structural_running\");\n\t\t\tconst result = await this.runCompaction({\n\t\t\t\tautomatic: false,\n\t\t\t\tcustomInstructions,\n\t\t\t\tbeforeCommit: () => {\n\t\t\t\t\tthis.lifecycle.setStage(lease, \"committing\");\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!result) throw new AgentHarnessError(\"compaction\", \"Nothing to compact\");\n\t\t\treturn result;\n\t\t});\n\t}\n\n\tasync navigateTree(\n\t\ttargetId: string,\n\t\toptions?: { summarize?: boolean; customInstructions?: string; replaceInstructions?: boolean; label?: string },\n\t): Promise<NavigateTreeResult> {\n\t\treturn this.runOperation(\n\t\t\t\"tree_navigation\",\n\t\t\t\"branch_summary\",\n\t\t\tasync (lease) => {\n\t\t\t\tthis.lifecycle.setStage(lease, \"structural_running\");\n\t\t\t\tconst oldLeafId = await this.session.getLeafId();\n\t\t\t\t// No-op navigation mutates nothing, so it completes without ever\n\t\t\t\t// entering the `committing` stage.\n\t\t\t\tif (oldLeafId === targetId) return { cancelled: false };\n\t\t\t\tconst targetEntry = await this.session.getEntry(targetId);\n\t\t\t\tif (!targetEntry) throw new AgentHarnessError(\"invalid_argument\", `Entry ${targetId} not found`);\n\t\t\t\tconst { entries, commonAncestorId } = await collectEntriesForBranchSummary(\n\t\t\t\t\tthis.session,\n\t\t\t\t\toldLeafId,\n\t\t\t\t\ttargetId,\n\t\t\t\t);\n\t\t\t\tconst preparation = {\n\t\t\t\t\ttargetId,\n\t\t\t\t\toldLeafId,\n\t\t\t\t\tcommonAncestorId,\n\t\t\t\t\tentriesToSummarize: entries,\n\t\t\t\t\tuserWantsSummary: options?.summarize ?? false,\n\t\t\t\t\tcustomInstructions: options?.customInstructions,\n\t\t\t\t\treplaceInstructions: options?.replaceInstructions,\n\t\t\t\t\tlabel: options?.label,\n\t\t\t\t};\n\t\t\t\tconst signal = new AbortController().signal;\n\t\t\t\tconst hookResult = await this.emitHook({ type: \"session_before_tree\", preparation, signal });\n\t\t\t\tif (hookResult?.cancel) return { cancelled: true };\n\t\t\t\tlet summaryEntry: NavigateTreeResult[\"summaryEntry\"];\n\t\t\t\tlet summaryText: string | undefined = hookResult?.summary?.summary;\n\t\t\t\tlet summaryDetails: unknown = hookResult?.summary?.details;\n\t\t\t\tif (!summaryText && options?.summarize && entries.length > 0) {\n\t\t\t\t\tconst model = this.model;\n\t\t\t\t\tif (!model) throw new AgentHarnessError(\"invalid_state\", \"No model set for branch summary\");\n\t\t\t\t\tconst auth = await this.getApiKeyAndHeaders?.(model);\n\t\t\t\t\tif (!auth) throw new AgentHarnessError(\"auth\", \"No auth available for branch summary\");\n\t\t\t\t\tconst branchSummary = await runBranchSummary({\n\t\t\t\t\t\tentries,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\t\t\theaders: auth.headers,\n\t\t\t\t\t\tcustomInstructions: hookResult?.customInstructions ?? options?.customInstructions,\n\t\t\t\t\t\treplaceInstructions: hookResult?.replaceInstructions ?? options?.replaceInstructions,\n\t\t\t\t\t\tsummarizationRetry: this.streamOptions.summarizationRetry,\n\t\t\t\t\t\temit: (event) => this.emitOwn(event),\n\t\t\t\t\t});\n\t\t\t\t\tif (branchSummary.cancelled) return { cancelled: true };\n\t\t\t\t\tsummaryText = branchSummary.summary;\n\t\t\t\t\tsummaryDetails = branchSummary.details;\n\t\t\t\t}\n\t\t\t\tconst { newLeafId, editorText } = resolveNavigationTarget(targetEntry, targetId);\n\t\t\t\t// Single declared commit point of a tree navigation.\n\t\t\t\tthis.lifecycle.setStage(lease, \"committing\");\n\t\t\t\tconst summaryId = await this.session.moveTo(\n\t\t\t\t\tnewLeafId,\n\t\t\t\t\tsummaryText\n\t\t\t\t\t\t? { summary: summaryText, details: summaryDetails, fromHook: hookResult?.summary !== undefined }\n\t\t\t\t\t\t: undefined,\n\t\t\t\t);\n\t\t\t\tif (summaryId) {\n\t\t\t\t\tconst entry = await this.session.getEntry(summaryId);\n\t\t\t\t\tif (entry?.type === \"branch_summary\") summaryEntry = entry;\n\t\t\t\t}\n\t\t\t\tawait this.emitOwn({\n\t\t\t\t\ttype: \"session_tree\",\n\t\t\t\t\tnewLeafId: await this.session.getLeafId(),\n\t\t\t\t\toldLeafId,\n\t\t\t\t\tsummaryEntry,\n\t\t\t\t\tfromHook: hookResult?.summary !== undefined,\n\t\t\t\t});\n\t\t\t\treturn { cancelled: false, editorText, summaryEntry };\n\t\t\t},\n\t\t\tclassifyNavigateTreeOutcome,\n\t\t);\n\t}\n\n\tgetModel(): Model<any> {\n\t\treturn this.model;\n\t}\n\n\tasync setModel(model: Model<any>): Promise<void> {\n\t\ttry {\n\t\t\tconst previousModel = this.model;\n\t\t\tconst nextProvider = model.provider;\n\t\t\tconst nextModelId = model.id;\n\t\t\tawait this.persistConfigChange({ type: \"model_change\", provider: nextProvider, modelId: nextModelId });\n\t\t\tthis.model = model;\n\t\t\tawait this.emitOwn({ type: \"model_update\", model, previousModel, source: \"set\" });\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"session\");\n\t\t}\n\t}\n\n\tgetThinkingLevel(): ThinkingLevel {\n\t\treturn this.thinkingLevel;\n\t}\n\n\tasync setThinkingLevel(level: ThinkingLevel): Promise<void> {\n\t\ttry {\n\t\t\tconst previousLevel = this.thinkingLevel;\n\t\t\tawait this.persistConfigChange({ type: \"thinking_level_change\", thinkingLevel: level });\n\t\t\tthis.thinkingLevel = level;\n\t\t\tawait this.emitOwn({ type: \"thinking_level_update\", level, previousLevel });\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"session\");\n\t\t}\n\t}\n\n\tgetTools(): TTool[] {\n\t\treturn [...this.tools.values()];\n\t}\n\n\tasync setTools(tools: TTool[], activeToolNames?: string[]): Promise<void> {\n\t\ttry {\n\t\t\tthis.validateUniqueNames(\n\t\t\t\ttools.map((tool) => tool.name),\n\t\t\t\t\"Duplicate tool name(s)\",\n\t\t\t);\n\t\t\tconst nextTools = new Map(tools.map((tool) => [tool.name, tool]));\n\t\t\tconst nextActiveToolNames = activeToolNames ? [...activeToolNames] : this.activeToolNames;\n\t\t\tthis.validateToolNames(nextActiveToolNames, nextTools);\n\t\t\tconst previousToolNames = [...this.tools.keys()];\n\t\t\tconst previousActiveToolNames = [...this.activeToolNames];\n\t\t\tawait this.persistConfigChange({ type: \"active_tools_change\", activeToolNames: [...nextActiveToolNames] });\n\t\t\tthis.tools = nextTools;\n\t\t\tthis.activeToolNames = [...nextActiveToolNames];\n\t\t\tawait this.emitOwn({\n\t\t\t\ttype: \"tools_update\",\n\t\t\t\ttoolNames: [...this.tools.keys()],\n\t\t\t\tpreviousToolNames,\n\t\t\t\tactiveToolNames: [...this.activeToolNames],\n\t\t\t\tpreviousActiveToolNames,\n\t\t\t\tsource: \"set\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"invalid_argument\");\n\t\t}\n\t}\n\n\tgetActiveTools(): TTool[] {\n\t\treturn this.activeToolNames.map((name) => this.tools.get(name)!);\n\t}\n\n\tasync setActiveTools(toolNames: string[]): Promise<void> {\n\t\ttry {\n\t\t\tconst nextActiveToolNames = [...toolNames];\n\t\t\tthis.validateToolNames(nextActiveToolNames);\n\t\t\tconst previousToolNames = [...this.tools.keys()];\n\t\t\tconst previousActiveToolNames = [...this.activeToolNames];\n\t\t\tawait this.persistConfigChange({ type: \"active_tools_change\", activeToolNames: [...nextActiveToolNames] });\n\t\t\tthis.activeToolNames = [...nextActiveToolNames];\n\t\t\tawait this.emitOwn({\n\t\t\t\ttype: \"tools_update\",\n\t\t\t\ttoolNames: [...this.tools.keys()],\n\t\t\t\tpreviousToolNames,\n\t\t\t\tactiveToolNames: [...this.activeToolNames],\n\t\t\t\tpreviousActiveToolNames,\n\t\t\t\tsource: \"set\",\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tthrow normalizeHarnessError(error, \"invalid_argument\");\n\t\t}\n\t}\n\n\tgetSteeringMode(): QueueMode {\n\t\treturn this.steeringQueueMode;\n\t}\n\n\tasync setSteeringMode(mode: QueueMode): Promise<void> {\n\t\tthis.steeringQueueMode = mode;\n\t}\n\n\tgetFollowUpMode(): QueueMode {\n\t\treturn this.followUpQueueMode;\n\t}\n\n\tasync setFollowUpMode(mode: QueueMode): Promise<void> {\n\t\tthis.followUpQueueMode = mode;\n\t}\n\n\tgetResources(): AgentHarnessResources<TSkill, TPromptTemplate> {\n\t\treturn {\n\t\t\tskills: this.resources.skills?.slice(),\n\t\t\tpromptTemplates: this.resources.promptTemplates?.slice(),\n\t\t};\n\t}\n\n\tasync setResources(resources: AgentHarnessResources<TSkill, TPromptTemplate>): Promise<void> {\n\t\tconst previousResources = this.getResources();\n\t\tthis.resources = {\n\t\t\tskills: resources.skills?.slice(),\n\t\t\tpromptTemplates: resources.promptTemplates?.slice(),\n\t\t};\n\t\tawait this.emitOwn({ type: \"resources_update\", resources: this.getResources(), previousResources });\n\t}\n\n\tgetStreamOptions(): AgentHarnessStreamOptions {\n\t\treturn cloneStreamOptions(this.streamOptions);\n\t}\n\n\tasync setStreamOptions(streamOptions: AgentHarnessStreamOptions): Promise<void> {\n\t\tthis.streamOptions = cloneStreamOptions(streamOptions);\n\t}\n\n\tasync abort(): Promise<AbortResult> {\n\t\t// Aborting awaits the captured operation's settlement, so a listener of that\n\t\t// same operation must never reach the wait below.\n\t\tthis.rejectCurrentOperationSelfWait(\"abort()\");\n\t\tconst snapshot = this.lifecycle.getSnapshot();\n\t\tif (snapshot.tag === \"active\" && snapshot.operation.kind === \"manual_compaction\") {\n\t\t\tthrow new AgentHarnessError(\"invalid_state\", \"Cannot abort during compaction\");\n\t\t}\n\t\tif (snapshot.tag === \"active\" && snapshot.operation.kind === \"tree_navigation\") {\n\t\t\tthrow new AgentHarnessError(\"invalid_state\", \"Cannot abort during branch_summary\");\n\t\t}\n\t\t// Capture the current operation before delivering any signal: an operation\n\t\t// started later by a settlement listener is never this call's target.\n\t\tconst capture = this.lifecycle.requestAbort();\n\t\tconst clearedSteer = this.steerQueue.splice(0);\n\t\tconst clearedFollowUp = this.followUpQueue.splice(0);\n\t\tconst errors: Error[] = [];\n\t\ttry {\n\t\t\tawait this.emitQueueUpdate();\n\t\t} catch (error) {\n\t\t\terrors.push(toError(error));\n\t\t}\n\t\ttry {\n\t\t\tif (capture.target) await capture.target.settled;\n\t\t} catch (error) {\n\t\t\terrors.push(toError(error));\n\t\t}\n\t\ttry {\n\t\t\tawait this.emitOwn({ type: \"abort\", clearedSteer, clearedFollowUp });\n\t\t} catch (error) {\n\t\t\terrors.push(toError(error));\n\t\t}\n\t\tif (errors.length > 0) {\n\t\t\tconst cause = errors.length === 1 ? errors[0]! : new AggregateError(errors, \"Abort completed with errors\");\n\t\t\tthrow normalizeHarnessError(cause, \"hook\");\n\t\t}\n\t\treturn { clearedSteer, clearedFollowUp };\n\t}\n\n\tasync waitForIdle(): Promise<void> {\n\t\tthis.rejectCurrentOperationSelfWait(\"waitForIdle()\");\n\t\t// Delegates to the lifecycle: resolves once no operation is active or settling.\n\t\tawait this.lifecycle.waitForIdle();\n\t}\n\n\tsubscribe(\n\t\tlistener: (event: AgentHarnessEvent<TSkill, TPromptTemplate>, signal?: AbortSignal) => Promise<void> | void,\n\t): () => void {\n\t\treturn this.subscribers.subscribe(listener);\n\t}\n\n\ton<TType extends keyof AgentHarnessEventResultMap>(\n\t\ttype: TType,\n\t\thandler: (\n\t\t\tevent: Extract<AgentHarnessOwnEvent, { type: TType }>,\n\t\t) => Promise<AgentHarnessEventResultMap[TType]> | AgentHarnessEventResultMap[TType],\n\t): () => void {\n\t\tlet handlers = this.handlers.get(type);\n\t\tif (!handlers) {\n\t\t\thandlers = new Set();\n\t\t\tthis.handlers.set(type, handlers);\n\t\t}\n\t\thandlers.add(handler as AgentHarnessHandler);\n\t\treturn () => handlers!.delete(handler as AgentHarnessHandler);\n\t}\n}\n"]}
|
|
@@ -2,5 +2,12 @@ export interface HarnessCompactionRunOptions {
|
|
|
2
2
|
readonly automatic: boolean;
|
|
3
3
|
readonly customInstructions?: string;
|
|
4
4
|
readonly signal?: AbortSignal;
|
|
5
|
+
/**
|
|
6
|
+
* Invoked immediately before the compaction entry is appended, i.e. at the
|
|
7
|
+
* single declared commit point. Manual compaction uses it to enter the
|
|
8
|
+
* `committing` lifecycle stage; automatic compaction runs inside a prompt
|
|
9
|
+
* attempt and leaves it unset.
|
|
10
|
+
*/
|
|
11
|
+
readonly beforeCommit?: () => void;
|
|
5
12
|
}
|
|
6
13
|
//# sourceMappingURL=operation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../src/harness/compaction/operation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../../src/harness/compaction/operation.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,2BAA2B;IAC3C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC","sourcesContent":["export interface HarnessCompactionRunOptions {\n\treadonly automatic: boolean;\n\treadonly customInstructions?: string;\n\treadonly signal?: AbortSignal;\n\t/**\n\t * Invoked immediately before the compaction entry is appended, i.e. at the\n\t * single declared commit point. Manual compaction uses it to enter the\n\t * `committing` lifecycle stage; automatic compaction runs inside a prompt\n\t * attempt and leaves it unset.\n\t */\n\treadonly beforeCommit?: () => void;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../../../src/harness/compaction/operation.ts"],"names":[],"mappings":"","sourcesContent":["export interface HarnessCompactionRunOptions {\n\treadonly automatic: boolean;\n\treadonly customInstructions?: string;\n\treadonly signal?: AbortSignal;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../../../src/harness/compaction/operation.ts"],"names":[],"mappings":"","sourcesContent":["export interface HarnessCompactionRunOptions {\n\treadonly automatic: boolean;\n\treadonly customInstructions?: string;\n\treadonly signal?: AbortSignal;\n\t/**\n\t * Invoked immediately before the compaction entry is appended, i.e. at the\n\t * single declared commit point. Manual compaction uses it to enter the\n\t * `committing` lifecycle stage; automatic compaction runs inside a prompt\n\t * attempt and leaves it unset.\n\t */\n\treadonly beforeCommit?: () => void;\n}\n"]}
|
|
@@ -1,53 +1,6 @@
|
|
|
1
1
|
import type { ImageContent, TextContent } from "omk-ai";
|
|
2
|
-
type
|
|
3
|
-
|
|
4
|
-
readonly message: TMessage;
|
|
5
|
-
} | {
|
|
6
|
-
readonly type: "custom";
|
|
7
|
-
readonly customType: string;
|
|
8
|
-
readonly data?: unknown;
|
|
9
|
-
} | {
|
|
10
|
-
readonly type: "custom_message";
|
|
11
|
-
readonly customType: string;
|
|
12
|
-
readonly content: string | (TextContent | ImageContent)[];
|
|
13
|
-
readonly details?: unknown;
|
|
14
|
-
readonly display: boolean;
|
|
15
|
-
} | {
|
|
16
|
-
readonly type: "label";
|
|
17
|
-
readonly targetId: string;
|
|
18
|
-
readonly label: string | undefined;
|
|
19
|
-
} | {
|
|
20
|
-
readonly type: "session_info";
|
|
21
|
-
readonly name?: string;
|
|
22
|
-
} | {
|
|
23
|
-
readonly type: "leaf";
|
|
24
|
-
readonly targetId: string | null;
|
|
25
|
-
};
|
|
26
|
-
type PendingWrite<TMessage> = FacadeWrite<TMessage> | {
|
|
27
|
-
readonly type: "thinking_level_change";
|
|
28
|
-
readonly thinkingLevel: string;
|
|
29
|
-
} | {
|
|
30
|
-
readonly type: "model_change";
|
|
31
|
-
readonly provider: string;
|
|
32
|
-
readonly modelId: string;
|
|
33
|
-
} | {
|
|
34
|
-
readonly type: "active_tools_change";
|
|
35
|
-
readonly activeToolNames: string[];
|
|
36
|
-
} | {
|
|
37
|
-
readonly type: "compaction";
|
|
38
|
-
readonly summary: string;
|
|
39
|
-
readonly firstKeptEntryId: string;
|
|
40
|
-
readonly tokensBefore: number;
|
|
41
|
-
readonly details?: unknown;
|
|
42
|
-
readonly fromHook?: boolean;
|
|
43
|
-
} | {
|
|
44
|
-
readonly type: "branch_summary";
|
|
45
|
-
readonly fromId: string;
|
|
46
|
-
readonly summary: string;
|
|
47
|
-
readonly details?: unknown;
|
|
48
|
-
readonly fromHook?: boolean;
|
|
49
|
-
};
|
|
50
|
-
interface SessionPort<TMessage, TEntry, TContext, TMetadata> {
|
|
2
|
+
import type { QueuedSessionWrite, SessionWriteCoordinator } from "./session-write-coordinator.ts";
|
|
3
|
+
interface SessionPort<TEntry, TContext, TMetadata> {
|
|
51
4
|
getMetadata(): Promise<TMetadata>;
|
|
52
5
|
getLeafId(): Promise<string | null>;
|
|
53
6
|
getEntry(id: string): Promise<TEntry | undefined>;
|
|
@@ -56,12 +9,6 @@ interface SessionPort<TMessage, TEntry, TContext, TMetadata> {
|
|
|
56
9
|
buildContext(): Promise<TContext>;
|
|
57
10
|
getLabel(id: string): Promise<string | undefined>;
|
|
58
11
|
getSessionName(): Promise<string | undefined>;
|
|
59
|
-
appendMessage(message: TMessage): Promise<string>;
|
|
60
|
-
appendCustomEntry(customType: string, data?: unknown): Promise<string>;
|
|
61
|
-
appendCustomMessageEntry(customType: string, content: string | (TextContent | ImageContent)[], display: boolean, details?: unknown): Promise<string>;
|
|
62
|
-
appendLabel(targetId: string, label: string | undefined): Promise<string>;
|
|
63
|
-
appendSessionName(name: string): Promise<string>;
|
|
64
|
-
moveTo(entryId: string | null): Promise<string | undefined>;
|
|
65
12
|
}
|
|
66
13
|
interface CustomMessageInput<T = unknown> {
|
|
67
14
|
readonly customType: string;
|
|
@@ -80,8 +27,8 @@ interface CustomMessageInput<T = unknown> {
|
|
|
80
27
|
export declare class HarnessSessionFacade<TMessage, TEntry, TContext, TMetadata> {
|
|
81
28
|
private readonly session;
|
|
82
29
|
private readonly getPhase;
|
|
83
|
-
private readonly
|
|
84
|
-
constructor(session: SessionPort<
|
|
30
|
+
private readonly sessionWrites;
|
|
31
|
+
constructor(session: SessionPort<TEntry, TContext, TMetadata>, getPhase: () => string, sessionWrites: SessionWriteCoordinator<TMessage>);
|
|
85
32
|
getMetadata(): Promise<Readonly<TMetadata>>;
|
|
86
33
|
getLeafId(): Promise<string | null>;
|
|
87
34
|
getEntry(id: string): Promise<Readonly<TEntry> | undefined>;
|
|
@@ -90,7 +37,7 @@ export declare class HarnessSessionFacade<TMessage, TEntry, TContext, TMetadata>
|
|
|
90
37
|
buildContext(): Promise<Readonly<TContext>>;
|
|
91
38
|
getLabel(id: string): Promise<string | undefined>;
|
|
92
39
|
getSessionName(): Promise<string | undefined>;
|
|
93
|
-
getPendingWrites(): readonly
|
|
40
|
+
getPendingWrites(): readonly QueuedSessionWrite<TMessage>[];
|
|
94
41
|
appendMessage(message: TMessage): Promise<void>;
|
|
95
42
|
appendCustomEntry(customType: string, data?: unknown): Promise<void>;
|
|
96
43
|
appendCustomMessage<T = unknown>(input: CustomMessageInput<T>): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-session.d.ts","sourceRoot":"","sources":["../../src/harness/harness-session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ImageContent, TextContent } from \"omk-ai\";\nimport { createImmutableSnapshot } from \"../plain-data.ts\";\nimport { AgentHarnessError, toError } from \"./errors.ts\";\n\ntype FacadeWrite<TMessage> =\n\t| { readonly type: \"message\"; readonly message: TMessage }\n\t| { readonly type: \"custom\"; readonly customType: string; readonly data?: unknown }\n\t| {\n\t\t\treadonly type: \"custom_message\";\n\t\t\treadonly customType: string;\n\t\t\treadonly content: string | (TextContent | ImageContent)[];\n\t\t\treadonly details?: unknown;\n\t\t\treadonly display: boolean;\n\t }\n\t| { readonly type: \"label\"; readonly targetId: string; readonly label: string | undefined }\n\t| { readonly type: \"session_info\"; readonly name?: string }\n\t| { readonly type: \"leaf\"; readonly targetId: string | null };\n\ntype PendingWrite<TMessage> =\n\t| FacadeWrite<TMessage>\n\t| { readonly type: \"thinking_level_change\"; readonly thinkingLevel: string }\n\t| { readonly type: \"model_change\"; readonly provider: string; readonly modelId: string }\n\t| { readonly type: \"active_tools_change\"; readonly activeToolNames: string[] }\n\t| {\n\t\t\treadonly type: \"compaction\";\n\t\t\treadonly summary: string;\n\t\t\treadonly firstKeptEntryId: string;\n\t\t\treadonly tokensBefore: number;\n\t\t\treadonly details?: unknown;\n\t\t\treadonly fromHook?: boolean;\n\t }\n\t| {\n\t\t\treadonly type: \"branch_summary\";\n\t\t\treadonly fromId: string;\n\t\t\treadonly summary: string;\n\t\t\treadonly details?: unknown;\n\t\t\treadonly fromHook?: boolean;\n\t };\n\ninterface SessionPort<TMessage, TEntry, TContext, TMetadata> {\n\tgetMetadata(): Promise<TMetadata>;\n\tgetLeafId(): Promise<string | null>;\n\tgetEntry(id: string): Promise<TEntry | undefined>;\n\tgetEntries(): Promise<TEntry[]>;\n\tgetBranch(fromId?: string): Promise<TEntry[]>;\n\tbuildContext(): Promise<TContext>;\n\tgetLabel(id: string): Promise<string | undefined>;\n\tgetSessionName(): Promise<string | undefined>;\n\tappendMessage(message: TMessage): Promise<string>;\n\tappendCustomEntry(customType: string, data?: unknown): Promise<string>;\n\tappendCustomMessageEntry(\n\t\tcustomType: string,\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\tdisplay: boolean,\n\t\tdetails?: unknown,\n\t): Promise<string>;\n\tappendLabel(targetId: string, label: string | undefined): Promise<string>;\n\tappendSessionName(name: string): Promise<string>;\n\tmoveTo(entryId: string | null): Promise<string | undefined>;\n}\n\ninterface CustomMessageInput<T = unknown> {\n\treadonly customType: string;\n\treadonly content: string | readonly (TextContent | ImageContent)[];\n\treadonly display: boolean;\n\treadonly details?: T;\n}\n\n/**\n * Internal implementation of the public `HarnessSession` structural interface.\n *\n * This module intentionally imports no harness/session types. `AgentHarness` and the\n * raw session are in a legacy import-cycle component; importing their types here would\n * pull this new boundary into that component because the cycle ratchet treats static\n * type imports as architectural edges. Generic ports keep the implementation a leaf.\n */\nexport class HarnessSessionFacade<TMessage, TEntry, TContext, TMetadata> {\n\tprivate readonly session: SessionPort<TMessage, TEntry, TContext, TMetadata>;\n\tprivate readonly getPhase: () => string;\n\tprivate readonly pendingWrites: PendingWrite<TMessage>[];\n\n\tconstructor(\n\t\tsession: SessionPort<TMessage, TEntry, TContext, TMetadata>,\n\t\tgetPhase: () => string,\n\t\tpendingWrites: PendingWrite<TMessage>[],\n\t) {\n\t\tthis.session = session;\n\t\tthis.getPhase = getPhase;\n\t\tthis.pendingWrites = pendingWrites;\n\t}\n\n\tasync getMetadata(): Promise<Readonly<TMetadata>> {\n\t\treturn this.read(() => this.session.getMetadata());\n\t}\n\n\tasync getLeafId(): Promise<string | null> {\n\t\treturn this.read(() => this.session.getLeafId());\n\t}\n\n\tasync getEntry(id: string): Promise<Readonly<TEntry> | undefined> {\n\t\treturn this.read(() => this.session.getEntry(id));\n\t}\n\n\tasync getEntries(): Promise<readonly Readonly<TEntry>[]> {\n\t\treturn this.read(() => this.session.getEntries());\n\t}\n\n\tasync getBranch(fromId?: string): Promise<readonly Readonly<TEntry>[]> {\n\t\treturn this.read(() => this.session.getBranch(fromId));\n\t}\n\n\tasync buildContext(): Promise<Readonly<TContext>> {\n\t\treturn this.read(() => this.session.buildContext());\n\t}\n\n\tasync getLabel(id: string): Promise<string | undefined> {\n\t\treturn this.read(() => this.session.getLabel(id));\n\t}\n\n\tasync getSessionName(): Promise<string | undefined> {\n\t\treturn this.read(() => this.session.getSessionName());\n\t}\n\n\tgetPendingWrites(): readonly PendingWrite<TMessage>[] {\n\t\treturn createImmutableSnapshot(this.pendingWrites);\n\t}\n\n\tasync appendMessage(message: TMessage): Promise<void> {\n\t\tconst write = this.snapshot({ type: \"message\", message });\n\t\tawait this.write(write, () => this.session.appendMessage(write.message));\n\t}\n\n\tasync appendCustomEntry(customType: string, data?: unknown): Promise<void> {\n\t\tconst write = this.snapshot({ type: \"custom\", customType, data });\n\t\tawait this.write(write, () => this.session.appendCustomEntry(write.customType, write.data));\n\t}\n\n\tasync appendCustomMessage<T = unknown>(input: CustomMessageInput<T>): Promise<void> {\n\t\tconst write = this.snapshot({\n\t\t\ttype: \"custom_message\",\n\t\t\tcustomType: input.customType,\n\t\t\tcontent: typeof input.content === \"string\" ? input.content : [...input.content],\n\t\t\tdisplay: input.display,\n\t\t\tdetails: input.details,\n\t\t});\n\t\tawait this.write(write, () =>\n\t\t\tthis.session.appendCustomMessageEntry(write.customType, write.content, write.display, write.details),\n\t\t);\n\t}\n\n\tasync appendLabel(targetId: string, label: string | undefined): Promise<void> {\n\t\tif (!(await this.getEntry(targetId))) {\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", `Entry ${targetId} not found`);\n\t\t}\n\t\tconst write = this.snapshot({ type: \"label\", targetId, label });\n\t\tawait this.write(write, () => this.session.appendLabel(write.targetId, write.label));\n\t}\n\n\tasync appendSessionName(name: string): Promise<void> {\n\t\tconst write = this.snapshot({ type: \"session_info\", name: name.trim() });\n\t\tawait this.write(write, () => this.session.appendSessionName(write.name ?? \"\"));\n\t}\n\n\tasync setLeafId(targetId: string | null): Promise<void> {\n\t\tif (targetId !== null && !(await this.getEntry(targetId))) {\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", `Entry ${targetId} not found`);\n\t\t}\n\t\tconst write = this.snapshot({ type: \"leaf\", targetId });\n\t\tawait this.write(write, () => this.session.moveTo(write.targetId));\n\t}\n\n\tprivate async read<T>(operation: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\treturn createImmutableSnapshot(await operation());\n\t\t} catch (error) {\n\t\t\tthrow new AgentHarnessError(\"session\", \"Session read failed\", toError(error));\n\t\t}\n\t}\n\n\tprivate snapshot<TWrite extends FacadeWrite<TMessage>>(write: TWrite): TWrite {\n\t\ttry {\n\t\t\treturn createImmutableSnapshot(write);\n\t\t} catch (error) {\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", \"Session writes must contain plain data\", toError(error));\n\t\t}\n\t}\n\n\tprivate async write(write: FacadeWrite<TMessage>, persist: () => Promise<unknown>): Promise<void> {\n\t\tconst phase = this.getPhase();\n\t\tif (phase === \"turn\") {\n\t\t\tthis.pendingWrites.push(write);\n\t\t\treturn;\n\t\t}\n\t\tif (phase !== \"idle\") {\n\t\t\tthrow new AgentHarnessError(\"invalid_state\", `Cannot write session state during ${phase}`);\n\t\t}\n\t\ttry {\n\t\t\tawait persist();\n\t\t} catch (error) {\n\t\t\tthrow new AgentHarnessError(\"session\", \"Session write failed\", toError(error));\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"harness-session.d.ts","sourceRoot":"","sources":["../../src/harness/harness-session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ImageContent, TextContent } from \"omk-ai\";\nimport { createImmutableSnapshot } from \"../plain-data.ts\";\nimport { AgentHarnessError, toError } from \"./errors.ts\";\nimport type { QueuedSessionWrite, SessionWriteCoordinator } from \"./session-write-coordinator.ts\";\n\ntype FacadeWrite<TMessage> =\n\t| { readonly type: \"message\"; readonly message: TMessage }\n\t| { readonly type: \"custom\"; readonly customType: string; readonly data?: unknown }\n\t| {\n\t\t\treadonly type: \"custom_message\";\n\t\t\treadonly customType: string;\n\t\t\treadonly content: string | (TextContent | ImageContent)[];\n\t\t\treadonly details?: unknown;\n\t\t\treadonly display: boolean;\n\t }\n\t| { readonly type: \"label\"; readonly targetId: string; readonly label: string | undefined }\n\t| { readonly type: \"session_info\"; readonly name?: string }\n\t| { readonly type: \"leaf\"; readonly targetId: string | null };\n\ninterface SessionPort<TEntry, TContext, TMetadata> {\n\tgetMetadata(): Promise<TMetadata>;\n\tgetLeafId(): Promise<string | null>;\n\tgetEntry(id: string): Promise<TEntry | undefined>;\n\tgetEntries(): Promise<TEntry[]>;\n\tgetBranch(fromId?: string): Promise<TEntry[]>;\n\tbuildContext(): Promise<TContext>;\n\tgetLabel(id: string): Promise<string | undefined>;\n\tgetSessionName(): Promise<string | undefined>;\n}\n\ninterface CustomMessageInput<T = unknown> {\n\treadonly customType: string;\n\treadonly content: string | readonly (TextContent | ImageContent)[];\n\treadonly display: boolean;\n\treadonly details?: T;\n}\n\n/**\n * Internal implementation of the public `HarnessSession` structural interface.\n *\n * This module intentionally imports no harness/session types. `AgentHarness` and the\n * raw session are in a legacy import-cycle component; importing their types here would\n * pull this new boundary into that component because the cycle ratchet treats static\n * type imports as architectural edges. Generic ports keep the implementation a leaf.\n */\nexport class HarnessSessionFacade<TMessage, TEntry, TContext, TMetadata> {\n\tprivate readonly session: SessionPort<TEntry, TContext, TMetadata>;\n\tprivate readonly getPhase: () => string;\n\tprivate readonly sessionWrites: SessionWriteCoordinator<TMessage>;\n\n\tconstructor(\n\t\tsession: SessionPort<TEntry, TContext, TMetadata>,\n\t\tgetPhase: () => string,\n\t\tsessionWrites: SessionWriteCoordinator<TMessage>,\n\t) {\n\t\tthis.session = session;\n\t\tthis.getPhase = getPhase;\n\t\tthis.sessionWrites = sessionWrites;\n\t}\n\n\tasync getMetadata(): Promise<Readonly<TMetadata>> {\n\t\treturn this.read(() => this.session.getMetadata());\n\t}\n\n\tasync getLeafId(): Promise<string | null> {\n\t\treturn this.read(() => this.session.getLeafId());\n\t}\n\n\tasync getEntry(id: string): Promise<Readonly<TEntry> | undefined> {\n\t\treturn this.read(() => this.session.getEntry(id));\n\t}\n\n\tasync getEntries(): Promise<readonly Readonly<TEntry>[]> {\n\t\treturn this.read(() => this.session.getEntries());\n\t}\n\n\tasync getBranch(fromId?: string): Promise<readonly Readonly<TEntry>[]> {\n\t\treturn this.read(() => this.session.getBranch(fromId));\n\t}\n\n\tasync buildContext(): Promise<Readonly<TContext>> {\n\t\treturn this.read(() => this.session.buildContext());\n\t}\n\n\tasync getLabel(id: string): Promise<string | undefined> {\n\t\treturn this.read(() => this.session.getLabel(id));\n\t}\n\n\tasync getSessionName(): Promise<string | undefined> {\n\t\treturn this.read(() => this.session.getSessionName());\n\t}\n\n\tgetPendingWrites(): readonly QueuedSessionWrite<TMessage>[] {\n\t\treturn this.sessionWrites.snapshot();\n\t}\n\n\tasync appendMessage(message: TMessage): Promise<void> {\n\t\tawait this.write(this.snapshot({ type: \"message\", message }));\n\t}\n\n\tasync appendCustomEntry(customType: string, data?: unknown): Promise<void> {\n\t\tawait this.write(this.snapshot({ type: \"custom\", customType, data }));\n\t}\n\n\tasync appendCustomMessage<T = unknown>(input: CustomMessageInput<T>): Promise<void> {\n\t\tconst write = this.snapshot({\n\t\t\ttype: \"custom_message\",\n\t\t\tcustomType: input.customType,\n\t\t\tcontent: typeof input.content === \"string\" ? input.content : [...input.content],\n\t\t\tdisplay: input.display,\n\t\t\tdetails: input.details,\n\t\t});\n\t\tawait this.write(write);\n\t}\n\n\tasync appendLabel(targetId: string, label: string | undefined): Promise<void> {\n\t\tif (!(await this.getEntry(targetId))) {\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", `Entry ${targetId} not found`);\n\t\t}\n\t\tawait this.write(this.snapshot({ type: \"label\", targetId, label }));\n\t}\n\n\tasync appendSessionName(name: string): Promise<void> {\n\t\tawait this.write(this.snapshot({ type: \"session_info\", name: name.trim() }));\n\t}\n\n\tasync setLeafId(targetId: string | null): Promise<void> {\n\t\tif (targetId !== null && !(await this.getEntry(targetId))) {\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", `Entry ${targetId} not found`);\n\t\t}\n\t\tawait this.write(this.snapshot({ type: \"leaf\", targetId }));\n\t}\n\n\tprivate async read<T>(operation: () => Promise<T>): Promise<T> {\n\t\ttry {\n\t\t\treturn createImmutableSnapshot(await operation());\n\t\t} catch (error) {\n\t\t\tthrow new AgentHarnessError(\"session\", \"Session read failed\", toError(error));\n\t\t}\n\t}\n\n\tprivate snapshot<TWrite extends FacadeWrite<TMessage>>(write: TWrite): TWrite {\n\t\ttry {\n\t\t\treturn createImmutableSnapshot(write);\n\t\t} catch (error) {\n\t\t\tthrow new AgentHarnessError(\"invalid_argument\", \"Session writes must contain plain data\", toError(error));\n\t\t}\n\t}\n\n\tprivate async write(write: FacadeWrite<TMessage>): Promise<void> {\n\t\tconst phase = this.getPhase();\n\t\tif (phase === \"turn\") {\n\t\t\tthis.sessionWrites.enqueue(write);\n\t\t\treturn;\n\t\t}\n\t\tif (phase !== \"idle\") {\n\t\t\tthrow new AgentHarnessError(\"invalid_state\", `Cannot write session state during ${phase}`);\n\t\t}\n\t\ttry {\n\t\t\tawait this.sessionWrites.persistAfterPending(write);\n\t\t} catch (error) {\n\t\t\tif (error instanceof AgentHarnessError && error.code === \"invalid_state\") throw error;\n\t\t\tthrow new AgentHarnessError(\"session\", \"Session write failed\", toError(error));\n\t\t}\n\t}\n}\n"]}
|