@geminixiang/mikan 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/adapters/discord/context.js +1 -1
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/messages.d.ts +1 -0
- package/dist/adapters/messages.d.ts.map +1 -1
- package/dist/adapters/messages.js +3 -0
- package/dist/adapters/messages.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +132 -147
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +3 -0
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +88 -33
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +1 -3
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/telegram/context.js +1 -1
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/harness/execution-env.d.ts.map +1 -1
- package/dist/harness/execution-env.js +82 -5
- package/dist/harness/execution-env.js.map +1 -1
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +21 -28
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +5 -3
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.js +2 -2
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +2 -0
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +49 -8
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/tools/task.d.ts +4 -0
- package/dist/harness/tools/task.d.ts.map +1 -1
- package/dist/harness/tools/task.js +12 -0
- package/dist/harness/tools/task.js.map +1 -1
- package/dist/harness/types.d.ts +2 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +15 -0
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +1 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +17 -1
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +1 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sessions/session-store.d.ts +4 -0
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +83 -4
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/types.d.ts +1 -0
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/types.d.ts +7 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Context } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type {\n Api,\n AssistantMessage,\n AssistantMessageEventStream,\n ImageContent,\n Message,\n Model,\n Models,\n ProviderRequestOptions,\n TextContent,\n Usage,\n} from \"@earendil-works/pi-ai\";\nimport { createAssistantMessageEventStream } from \"@earendil-works/pi-ai\";\nimport {\n AgentDoc,\n DEFAULT_COMPACTION_POLICY,\n CompactionTask,\n GenerationTask,\n LiveDoc,\n ToolTask,\n defineExtension,\n hook,\n section,\n watchEvents,\n type AgentEvent as DurableEvent,\n type AgentEventStream,\n type ToolExecutionApi,\n type UsageState,\n} from \"@earendil-works/pi-durable\";\nimport type { SessionStore } from \"../sessions/session-store.js\";\nimport type { AttachedSessionHarness, SessionRunStatus } from \"../sessions/types.js\";\nimport type {\n BudgetSettings,\n CompactionSettings,\n HarnessEvent,\n HarnessEventListener,\n HarnessSettings,\n MikanAgentSessionOptions,\n MikanHarnessTool,\n MikanToolInput,\n MikanToolResult,\n SubagentUsage,\n SubagentUsageSink,\n RetrySettings,\n} from \"./types.js\";\n\nimport * as log from \"../log.js\";\nimport { ToolLoopGuard } from \"./loop-guard.js\";\nimport { adaptAgentTool, isHarnessTool } from \"./tools/pi-tools.js\";\nimport { START_TASK_TOOL, TASK_STATUS_TOOL } from \"./tools/task.js\";\nimport { createCodemodeTool, isCodemodeCallable, withScriptCallNote } from \"./tools/codemode.js\";\nimport { renderMcpServersSection } from \"./mcp.js\";\nimport { createToolSearchTool } from \"./tools/tool-search.js\";\nimport { withSecretRedaction } from \"./tools/secret-redaction.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst context: Context = BACKGROUND_CONTEXT;\nconst COMPACTION_REQUEST = Symbol(\"compaction-request\");\n\ninterface RunTally {\n usage: SubagentUsage;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n startedAt: number;\n endedAt?: number;\n}\n\ninterface RunOptions {\n images?: ImageContent[];\n budget?: BudgetSettings;\n tools?: MikanToolInput[];\n allowTaskHandoff?: boolean;\n allowTaskStatus?: boolean;\n}\n\ninterface Deferred {\n promise: Promise<void>;\n resolve: () => void;\n}\n\nfunction deferred(): Deferred {\n let resolve!: () => void;\n const promise = new Promise<void>((done) => {\n resolve = done;\n });\n return { promise, resolve };\n}\n\nexport class MikanAgentSession {\n readonly sessionStore: SessionStore;\n readonly model: Model<Api>;\n private readonly settings: HarnessSettings;\n private readonly listeners = new Set<HarnessEventListener>();\n private systemPrompt: string;\n private attached: AttachedSessionHarness | undefined;\n private runActive = false;\n private runAborted = false;\n private cancellation: Promise<void> | undefined;\n private cancellationError: unknown;\n private deadlineTimer: ReturnType<typeof setTimeout> | undefined;\n private deadlineNotification: Promise<void> | undefined;\n private runBudget: BudgetSettings = {};\n private budgetExceededReason: string | undefined;\n private retryAttempt = 0;\n private runMessages: AgentMessage[] = [];\n private readonly toolArgs = new Map<string, unknown>();\n private loopGuard = new ToolLoopGuard();\n private readonly loopNotices = new Map<string, string>();\n private runStarted = false;\n private runEndSeen = false;\n private observedUsage: Usage = createEmptyUsage();\n private requestRunId: string | undefined;\n private activeRequest: { token: symbol; runId: string } | undefined;\n private runEnded: Deferred = deferred();\n private lastSessionRunStatus: SessionRunStatus | undefined;\n private tally: RunTally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: 0,\n };\n\n constructor(private readonly options: MikanAgentSessionOptions) {\n this.sessionStore = options.sessionStore;\n this.model = options.model;\n this.systemPrompt = options.systemPrompt;\n this.settings = resolveHarnessSettings(options.settings);\n }\n\n get lastRunMessages(): readonly AgentMessage[] {\n return this.runMessages;\n }\n\n get isActiveRun(): boolean {\n return this.runActive;\n }\n\n setSystemPrompt(prompt: string): void {\n if (this.runActive) throw new Error(\"Cannot change the system prompt during a run\");\n this.systemPrompt = prompt;\n }\n\n getLastRunStats(): Readonly<{\n usage: SubagentUsage;\n tokens: number;\n costUsd: number;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n durationMs: number;\n budgetExceededReason?: string;\n status?: SessionRunStatus;\n }> {\n return {\n usage: copyUsage(this.tally.usage),\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n toolCalls: this.tally.toolCalls,\n toolCallCounts: { ...this.tally.toolCallCounts },\n durationMs:\n this.tally.startedAt > 0 ? (this.tally.endedAt ?? Date.now()) - this.tally.startedAt : 0,\n budgetExceededReason: this.budgetExceededReason || undefined,\n status: this.lastSessionRunStatus,\n };\n }\n\n captureExternalUsageSink(): SubagentUsageSink {\n const tally = this.tally;\n return async (usage) => {\n addUsage(tally.usage, usage);\n if (this.tally !== tally || !this.runActive || this.budgetExceededReason) return;\n const reason = this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n };\n }\n\n subscribe(listener: HarnessEventListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n async prompt(text: string, options?: RunOptions): Promise<void> {\n await this.run(text, options);\n }\n\n async steer(text: string): Promise<boolean> {\n if (!this.runActive || this.runAborted || !this.attached) return false;\n await this.attached.conversation.submit(\n { type: \"input\", content: text, whenBusy: \"steer\" },\n context,\n );\n return true;\n }\n\n private async run(text: string, options?: RunOptions): Promise<void> {\n if (this.runActive) throw new Error(\"Agent is already processing a prompt\");\n this.runActive = true;\n this.runAborted = false;\n this.budgetExceededReason = undefined;\n this.cancellation = undefined;\n this.cancellationError = undefined;\n this.retryAttempt = 0;\n this.runMessages = [];\n this.runStarted = false;\n this.runEndSeen = false;\n this.runEnded = deferred();\n this.activeRequest = undefined;\n this.requestRunId = undefined;\n this.loopGuard = new ToolLoopGuard();\n this.loopNotices.clear();\n this.runBudget = { ...this.settings.budget, ...options?.budget };\n this.lastSessionRunStatus = undefined;\n this.tally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: Date.now(),\n };\n let runFailure: { error: unknown } | undefined;\n let stream: AgentEventStream | undefined;\n let status: SessionRunStatus = \"completed\";\n try {\n if (!(await this.checkCallBudget())) return;\n this.armDeadline();\n const auth = await this.options.models.getAuth(this.model);\n if (this.runAborted) return;\n if (!auth)\n throw new Error(\n `No credentials for provider \"${this.model.provider}\". Set the provider API key environment variable.`,\n );\n const attached = await this.attach();\n if (this.runAborted) return;\n const tools = this.toHarnessTools(options?.tools ?? this.options.tools).filter(\n (tool) =>\n (tool.name !== START_TASK_TOOL || options?.allowTaskHandoff === true) &&\n (tool.name !== TASK_STATUS_TOOL || options?.allowTaskStatus === true),\n );\n await this.installRunTools(attached, tools);\n if (!(await this.checkCallBudget())) return;\n await this.sessionStore.recordRun({});\n stream = await watchEvents(attached.harness, attached.conversation.id, context);\n this.observedUsage = sumUsageState(stream.snapshot.usage);\n stream.start((events) => this.handleDurableEvents(events));\n status = await this.drive(attached, text, options?.images);\n } catch (error) {\n runFailure = { error };\n status = \"failed\";\n throw error;\n } finally {\n if (status !== \"failed\" && this.runAborted) status = \"aborted\";\n await this.cleanupRun(runFailure, stream, status);\n }\n }\n\n private async drive(\n { harness, conversation }: AttachedSessionHarness,\n text: string,\n images?: ImageContent[],\n ): Promise<SessionRunStatus> {\n const interrupted = (await harness.snapshot(LiveDoc, conversation.id, context))?.run;\n if (interrupted) {\n log.logWarning(\"Aborting a run interrupted before this process started\");\n await conversation.abort(context);\n }\n const content: string | (TextContent | ImageContent)[] =\n images && images.length > 0 ? [{ type: \"text\", text }, ...images] : text;\n const submission = await conversation.submit(\n { type: \"input\", content, whenBusy: \"reject\" },\n context,\n );\n if (this.runAborted) this.requestCancellation();\n const settled = await submission.wait(context);\n if (this.runStarted) await this.runEnded.promise;\n if (settled.status === \"done\") return \"completed\";\n if (this.runAborted || settled.reason === \"aborted\") return \"aborted\";\n if (settled.reason === \"model_error\") return \"failed\";\n throw new Error(`Pi run failed: ${settled.reason}`);\n }\n\n private async cleanupRun(\n runFailure: { error: unknown } | undefined,\n stream: AgentEventStream | undefined,\n status: SessionRunStatus,\n ): Promise<void> {\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n let cleanupFailure: { error: unknown } | undefined;\n try {\n await this.cancellation;\n await this.deadlineNotification;\n await stream?.stop();\n if (this.attached) {\n await this.sessionStore.recordRun({ endedAt: Date.now(), status });\n }\n if (this.cancellationError) throw this.cancellationError;\n } catch (error) {\n cleanupFailure = { error };\n } finally {\n this.toolArgs.clear();\n this.loopNotices.clear();\n this.cancellation = undefined;\n this.deadlineNotification = undefined;\n this.tally.endedAt = Date.now();\n this.lastSessionRunStatus = status;\n this.runActive = false;\n }\n if (!cleanupFailure) return;\n if (runFailure) {\n throw new AggregateError(\n [runFailure.error, cleanupFailure.error],\n \"Agent run and cancellation cleanup failed\",\n { cause: runFailure.error },\n );\n }\n throw cleanupFailure.error;\n }\n\n abort(reason = \"cancelled\"): void {\n if (!this.runActive) return;\n const firstAbort = !this.runAborted;\n this.runAborted = true;\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n if (firstAbort && this.activeRequest !== undefined) {\n log.logInfo(\n `LLM request aborted ${JSON.stringify({ abort_reason: reason, run_id: this.activeRequest.runId })}`,\n );\n }\n this.requestCancellation();\n }\n\n private requestCancellation(): void {\n if (!this.attached || this.cancellation) return;\n this.cancellation = this.attached.conversation.abort(context).catch((error: unknown) => {\n this.cancellationError = error;\n });\n }\n\n private async attach(): Promise<AttachedSessionHarness> {\n if (this.attached) return this.attached;\n const { retry, compaction } = this.settings;\n this.attached = await this.sessionStore.bindHarness({\n models: this.options.models.models,\n requestModels: this.trackedModels(this.options.models.models),\n env: () => this.options.toolContext?.env,\n settings: { retry, compaction },\n onReport: (error) => log.logWarning(\"Durable harness report\", errorMessage(error)),\n });\n return this.attached;\n }\n\n private trackedModels(models: Models): Models {\n const track = <TOptions extends ProviderRequestOptions>(\n options: TOptions | undefined,\n token: symbol,\n ): TOptions => {\n const onPayload = options?.onPayload;\n const tracked: TOptions = {\n ...options,\n onPayload: async (\n ...args: Parameters<NonNullable<ProviderRequestOptions[\"onPayload\"]>>\n ) => {\n const transformed = await onPayload?.(...args);\n if (this.runActive) {\n this.activeRequest = { token, runId: this.requestRunId ?? \"background\" };\n }\n return transformed;\n },\n } as TOptions;\n return tracked;\n };\n const finish = (token: symbol) => {\n if (this.activeRequest?.token === token) this.activeRequest = undefined;\n };\n const stream = (start: (token: symbol) => AssistantMessageEventStream) => {\n const token = Symbol(\"provider-request\");\n const result = start(token);\n void result.result().then(\n () => finish(token),\n () => finish(token),\n );\n return result;\n };\n return new Proxy(models, {\n get: (target, property) => {\n if (property === \"streamSimple\") {\n return (...[model, request, options]: Parameters<Models[\"streamSimple\"]>) => {\n const over = this.runActive ? this.callOverBudgetReason() : undefined;\n if (over || this.runAborted) return abortedStream(model, over ?? \"Operation aborted\");\n if (this.runActive) this.tally.llmCalls += 1;\n return stream((token) => target.streamSimple(model, request, track(options, token)));\n };\n }\n const value = Reflect.get(target, property, target) as unknown;\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n }\n\n private toHarnessTools(tools: MikanToolInput[]): MikanHarnessTool[] {\n return tools.map((tool) => (isHarnessTool(tool) ? tool : adaptAgentTool(tool)));\n }\n\n private async installRunTools(\n attached: AttachedSessionHarness,\n selected: MikanHarnessTool[],\n ): Promise<void> {\n const tools = [...selected];\n const deferredTools = tools.filter((tool) => tool.exposure === \"deferred\");\n const servers = this.sessionStore.mcpServers();\n const authorized = new Set(deferredTools.map((tool) => tool.name));\n const { harness, conversation, registry, extensionName } = attached;\n const stored = (await harness.snapshot(AgentDoc, conversation.id, context))?.tools;\n const loaded = new Set(\n Array.isArray(stored) ? stored.filter((name) => authorized.has(name)) : [],\n );\n if (tools.length > 0)\n tools.push(\n withSecretRedaction(\n createCodemodeTool({\n tools,\n servers,\n executeNested: (tool, call) => this.executeNestedTool(tool, call),\n }),\n ),\n );\n if (deferredTools.length > 0) {\n tools.push(\n withSecretRedaction(\n createToolSearchTool({\n tools: deferredTools,\n loaded,\n load: async (names) => {\n for (const name of names) if (authorized.has(name)) loaded.add(name);\n },\n }),\n ),\n );\n }\n const hasCodemode = tools.some((tool) => tool.name === \"codemode\");\n const registered = tools.map((tool) =>\n hasCodemode && tool.exposure === undefined && isCodemodeCallable(tool)\n ? withScriptCallNote(tool)\n : tool,\n );\n registry.install(\n defineExtension({\n name: extensionName,\n tools: registered,\n sections: [\n section(\"mikan\", () => this.systemPrompt, { tag: false }),\n section(\"mcp_servers\", () => renderMcpServersSection(servers) || undefined),\n ],\n hooks: [\n hook(GenerationTask, {\n beforeRequest: (_request, api) => this.beforeRequest(String(api.taskId)),\n }),\n hook(CompactionTask, {\n beforeCompact: (_compaction, api) => this.beforeCompact(String(api.taskId)),\n }),\n hook(ToolTask, {\n beforeTool: async (call, api) => this.beforeTool(call, api),\n afterTool: (call, result) => this.afterTool(call.id, result),\n }),\n ],\n }),\n );\n await conversation.configure(\n {\n model: { provider: this.model.provider, modelId: this.model.id },\n thinkingLevel: this.options.thinkingLevel,\n extensions: [registry.snapshot().extension(extensionName)!],\n tools: registered.filter((tool) => tool.exposure === undefined || loaded.has(tool.name)),\n },\n context,\n );\n }\n\n private beforeCompact(taskId: string): { decline: true } | undefined {\n if (!this.runActive) return undefined;\n if (this.runAborted || this.budgetExceededReason || this.callOverBudgetReason()) {\n return { decline: true };\n }\n this.tally.llmCalls += 1;\n this.activeRequest = { token: COMPACTION_REQUEST, runId: taskId };\n return undefined;\n }\n\n private async beforeRequest(runId: string): Promise<undefined> {\n if (!(await this.checkCallBudget())) return undefined;\n this.requestRunId = runId;\n return undefined;\n }\n\n private async beforeTool(\n call: { id: string; name: string; arguments: Record<string, unknown> },\n api: {\n snapshot: ToolExecutionApi[\"snapshot\"];\n conversationId: ToolExecutionApi[\"conversationId\"];\n },\n ): Promise<{ block?: string } | undefined> {\n const round = (await api.snapshot(LiveDoc, api.conversationId, context))?.tools ?? [];\n if (round.length > 1 && round.some((slot) => slot.name === START_TASK_TOOL)) {\n return { block: `Call ${START_TASK_TOOL} alone, without other tools in the same batch.` };\n }\n return this.checkToolLoop(call.id, call.name, call.arguments);\n }\n\n private afterTool<T extends { content?: (TextContent | ImageContent)[] }>(\n callId: string,\n result: T,\n ): T | undefined {\n const notice = this.loopNotices.get(callId);\n if (notice === undefined) return undefined;\n this.loopNotices.delete(callId);\n return { ...result, content: [...(result.content ?? []), { type: \"text\", text: notice }] };\n }\n\n private async executeNestedTool(\n tool: MikanHarnessTool,\n call: Parameters<MikanHarnessTool[\"execute\"]>,\n ): Promise<MikanToolResult> {\n const [args, api, toolContext] = call;\n const id = api.callId;\n if (this.runAborted || toolContext.abortSignal?.aborted) throw new Error(\"Operation aborted\");\n await this.emitToolStart(id, tool.name, args);\n let result: MikanToolResult;\n try {\n const verdict = await this.checkToolLoop(id, tool.name, args as Record<string, unknown>);\n if (verdict?.block) throw new Error(verdict.block);\n toolContext.abortSignal?.throwIfAborted();\n result = await tool.execute(args, api, toolContext);\n result = this.afterTool(id, result) ?? result;\n } catch (error) {\n result = { content: [{ type: \"text\", text: errorMessage(error) }], isError: true };\n } finally {\n this.loopNotices.delete(id);\n }\n await this.emitToolEnd(\n id,\n tool.name,\n { content: result.content ?? [], details: result.details },\n result.isError === true,\n );\n return result;\n }\n\n private async checkToolLoop(\n toolCallId: string,\n toolName: string,\n args: Record<string, unknown>,\n ): Promise<{ block: string } | undefined> {\n const verdict = this.loopGuard.observe(toolName, args);\n switch (verdict.kind) {\n case \"allow\":\n return undefined;\n case \"notice\":\n this.loopNotices.set(toolCallId, verdict.text);\n return undefined;\n case \"block\":\n return { block: verdict.reason };\n case \"stop\":\n await this.exceedBudget(verdict.reason);\n return { block: verdict.reason };\n default:\n return verdict satisfies never;\n }\n }\n\n private async emit(event: HarnessEvent): Promise<void> {\n for (const listener of this.listeners) {\n try {\n await listener(event);\n } catch (error) {\n log.logWarning(\"Harness event listener failed\", errorMessage(error));\n }\n }\n }\n\n private async handleDurableEvents(events: readonly DurableEvent[]): Promise<void> {\n for (const event of events) {\n try {\n await this.handleDurableEvent(event);\n } catch (error) {\n log.logWarning(\"Durable event handling failed\", errorMessage(error));\n }\n }\n if (this.runEndSeen) this.runEnded.resolve();\n }\n\n private async handleDurableEvent(event: DurableEvent): Promise<void> {\n switch (event.type) {\n case \"run_start\":\n this.runStarted = true;\n return;\n case \"run_end\":\n await this.endRetry(this.runAborted ? \"Retry cancelled\" : undefined);\n this.runEndSeen = true;\n return;\n case \"message_start\":\n if (event.message.role === \"system\") return;\n await this.emit({ type: \"message_start\", message: event.message });\n return;\n case \"message_update\":\n for (const change of event.changes) {\n if (change.type === \"text_delta\" && change.delta) {\n await this.emit({ type: \"text_delta\", delta: change.delta });\n }\n }\n return;\n case \"message_end\":\n return this.endMessage(event.entry.model?.[0]);\n case \"tool_execution_start\":\n return this.emitToolStart(event.toolCallId, event.toolName, event.args);\n case \"tool_execution_update\":\n if (event.details === undefined) return;\n await this.emit({\n type: \"tool_execution_update\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n details: event.details,\n });\n return;\n case \"tool_execution_end\": {\n const message = event.entry?.model?.[0];\n const toolResult = message?.role === \"toolResult\" ? message : undefined;\n await this.emitToolEnd(\n event.toolCallId,\n event.toolName,\n { content: toolResult?.content ?? [], details: toolResult?.details },\n toolResult?.isError ?? true,\n );\n return;\n }\n case \"auto_retry_start\":\n this.retryAttempt = event.attempt;\n await this.emit({\n type: \"auto_retry_start\",\n attempt: event.attempt,\n maxAttempts: this.settings.retry.maxRetries,\n delayMs: Math.max(0, event.at - Date.now()),\n errorMessage: event.errorMessage,\n });\n return;\n case \"auto_retry_end\":\n this.retryAttempt = 0;\n await this.emit({\n type: \"auto_retry_end\",\n attempt: event.attempt,\n success: !this.runAborted,\n finalError: this.runAborted ? \"Retry cancelled\" : undefined,\n });\n return;\n case \"compaction_start\":\n await this.emit({ type: \"compaction_start\", reason: event.reason });\n return;\n case \"compaction_end\": {\n if (this.activeRequest?.token === COMPACTION_REQUEST) this.activeRequest = undefined;\n const outcome = await this.compactionOutcome(event.taskId);\n await this.emit({\n type: \"compaction_end\",\n reason: event.reason,\n aborted: outcome?.status === \"aborted\",\n errorMessage: outcome?.status === \"failed\" ? outcome.error.message : undefined,\n });\n return;\n }\n case \"usage_changed\":\n return this.recordUsage(event.usage);\n case \"task_failed\":\n log.logWarning(`Durable task ${event.kind} failed`, event.message);\n return;\n default:\n return;\n }\n }\n\n private async compactionOutcome(\n taskId: Parameters<AttachedSessionHarness[\"harness\"][\"getTask\"]>[0],\n ) {\n const task = await this.attached?.harness.getTask(taskId, context);\n return task?.state.outcome;\n }\n\n private async recordUsage(state: UsageState): Promise<void> {\n const total = sumUsageState(state);\n addUsage(this.tally.usage, subtractUsage(total, this.observedUsage));\n this.observedUsage = total;\n const reason = this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n }\n\n private async endRetry(finalError: string | undefined): Promise<void> {\n if (this.retryAttempt === 0) return;\n await this.emit({\n type: \"auto_retry_end\",\n attempt: this.retryAttempt,\n success: false,\n finalError,\n });\n this.retryAttempt = 0;\n }\n\n private async endMessage(message: Message | undefined): Promise<void> {\n if (!message || message.role === \"system\") return;\n this.runMessages.push(message);\n await this.emit({ type: \"message_end\", message });\n if (message.role !== \"assistant\") return;\n const needsCall =\n message.stopReason === \"error\" || message.content.some((part) => part.type === \"toolCall\");\n const reason = (needsCall && this.callOverBudgetReason()) || this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n }\n\n private async emitToolStart(toolCallId: string, toolName: string, args: unknown): Promise<void> {\n this.toolArgs.set(toolCallId, args);\n this.tally.toolCalls += 1;\n this.tally.toolCallCounts[toolName] = (this.tally.toolCallCounts[toolName] ?? 0) + 1;\n await this.emit({ type: \"tool_execution_start\", toolCallId, toolName, args });\n }\n\n private async emitToolEnd(\n toolCallId: string,\n toolName: string,\n result: Extract<HarnessEvent, { type: \"tool_execution_end\" }>[\"result\"],\n isError: boolean,\n ): Promise<void> {\n this.toolArgs.delete(toolCallId);\n await this.emit({ type: \"tool_execution_end\", toolCallId, toolName, result, isError });\n }\n\n private async exceedBudget(reason: string): Promise<void> {\n if (this.budgetExceededReason) return;\n this.budgetExceededReason = reason;\n this.abort(reason);\n await this.emit({\n type: \"budget_exceeded\",\n reason,\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n durationMs: Date.now() - this.tally.startedAt,\n });\n log.logWarning(\"Run budget exceeded — aborting\", reason);\n }\n\n private async checkCallBudget(): Promise<boolean> {\n if (this.runAborted || this.budgetExceededReason) {\n this.requestCancellation();\n return false;\n }\n const reason = this.callOverBudgetReason() ?? this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n return !this.runAborted && !this.budgetExceededReason;\n }\n\n private callOverBudgetReason(): string | undefined {\n const limit = this.runBudget.maxLlmCalls;\n if (limit !== undefined && this.tally.llmCalls >= limit)\n return `${this.tally.llmCalls} LLM calls >= ${limit} limit`;\n return undefined;\n }\n\n private resourceOverBudgetReason(): string | undefined {\n const { maxTokens, maxCostUsd, maxDurationMs } = this.runBudget;\n if (maxTokens !== undefined && this.tally.usage.totalTokens >= maxTokens)\n return `${this.tally.usage.totalTokens} tokens >= ${maxTokens} limit`;\n if (maxCostUsd !== undefined && this.tally.usage.cost.total >= maxCostUsd)\n return `cost ${this.tally.usage.cost.total.toFixed(2)} USD >= ${maxCostUsd} USD limit`;\n if (maxDurationMs !== undefined && Date.now() - this.tally.startedAt >= maxDurationMs)\n return `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`;\n return undefined;\n }\n\n private armDeadline(): void {\n const maxDurationMs = this.runBudget.maxDurationMs;\n if (maxDurationMs === undefined || !Number.isFinite(maxDurationMs) || this.runAborted) return;\n const remaining = maxDurationMs - (Date.now() - this.tally.startedAt);\n this.deadlineTimer = setTimeout(\n () => {\n if (Date.now() - this.tally.startedAt < maxDurationMs) {\n this.armDeadline();\n return;\n }\n this.deadlineNotification = this.exceedBudget(\n `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`,\n );\n },\n Math.min(Math.max(0, remaining), 2_147_483_647),\n );\n }\n}\n\nfunction abortedAssistant(model: Model<Api>, reason: string): AssistantMessage {\n return {\n role: \"assistant\",\n content: [],\n api: model.api,\n provider: model.provider,\n model: model.id,\n usage: createEmptyUsage(),\n stopReason: \"aborted\",\n errorMessage: reason,\n timestamp: Date.now(),\n };\n}\n\nfunction abortedStream(model: Model<Api>, reason: string): AssistantMessageEventStream {\n const stream = createAssistantMessageEventStream();\n const error = abortedAssistant(model, reason);\n stream.push({ type: \"error\", reason: \"aborted\", error });\n stream.end(error);\n return stream;\n}\n\nconst DEFAULT_RETRY_SETTINGS: RetrySettings = {\n enabled: true,\n maxRetries: 3,\n baseDelayMs: 2000,\n};\n\nconst DEFAULT_BUDGET_SETTINGS: BudgetSettings = {};\n\nexport const DEFAULT_EVENT_BUDGET: BudgetSettings = {\n maxDurationMs: 10 * 60 * 1000,\n maxLlmCalls: 50,\n maxCostUsd: 10,\n};\n\nfunction resolveHarnessSettings(overrides?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n}): HarnessSettings {\n return {\n compaction: { ...DEFAULT_COMPACTION_POLICY, ...overrides?.compaction },\n retry: { ...DEFAULT_RETRY_SETTINGS, ...overrides?.retry },\n budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },\n };\n}\n\nexport function createEmptyUsage(): Usage {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n };\n}\n\nfunction addUsage(total: Usage, usage: Usage): void {\n total.input += usage.input;\n total.output += usage.output;\n total.cacheRead += usage.cacheRead;\n total.cacheWrite += usage.cacheWrite;\n total.totalTokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n total.cost.input += usage.cost.input;\n total.cost.output += usage.cost.output;\n total.cost.cacheRead += usage.cost.cacheRead;\n total.cost.cacheWrite += usage.cost.cacheWrite;\n total.cost.total += usage.cost.total;\n\n if (usage.cacheWrite1h !== undefined) {\n total.cacheWrite1h = (total.cacheWrite1h ?? 0) + usage.cacheWrite1h;\n }\n if (usage.reasoning !== undefined) {\n total.reasoning = (total.reasoning ?? 0) + usage.reasoning;\n }\n}\n\nfunction sumUsageState(state: UsageState): Usage {\n const total = createEmptyUsage();\n for (const usage of [...Object.values(state.models), ...Object.values(state.tools)]) {\n addUsage(total, usage);\n }\n return total;\n}\n\nfunction subtractUsage(total: Usage, base: Usage): Usage {\n return {\n input: total.input - base.input,\n output: total.output - base.output,\n cacheRead: total.cacheRead - base.cacheRead,\n cacheWrite: total.cacheWrite - base.cacheWrite,\n totalTokens: total.totalTokens - base.totalTokens,\n cost: {\n input: total.cost.input - base.cost.input,\n output: total.cost.output - base.cost.output,\n cacheRead: total.cost.cacheRead - base.cost.cacheRead,\n cacheWrite: total.cost.cacheWrite - base.cost.cacheWrite,\n total: total.cost.total - base.cost.total,\n },\n reasoning: total.reasoning === undefined ? undefined : total.reasoning - (base.reasoning ?? 0),\n };\n}\n\nexport function copyUsage(usage: Usage): Usage {\n return { ...usage, cost: { ...usage.cost } };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport type { Context } from \"@earendil-works/chord\";\nimport { BACKGROUND_CONTEXT } from \"@earendil-works/chord/context\";\nimport type {\n Api,\n AssistantMessage,\n AssistantMessageEventStream,\n ImageContent,\n Message,\n Model,\n Models,\n ProviderRequestOptions,\n TextContent,\n Usage,\n} from \"@earendil-works/pi-ai\";\nimport { contentText, createAssistantMessageEventStream } from \"@earendil-works/pi-ai\";\nimport {\n AgentDoc,\n DEFAULT_COMPACTION_POLICY,\n CompactionTask,\n GenerationTask,\n LiveDoc,\n ToolTask,\n defineExtension,\n hook,\n section,\n watchEvents,\n type AgentEvent as DurableEvent,\n type AgentEventStream,\n type MessageChange,\n type ToolExecutionApi,\n type UsageState,\n} from \"@earendil-works/pi-durable\";\nimport type { SessionStore } from \"../sessions/session-store.js\";\nimport type { AttachedSessionHarness, SessionRunStatus } from \"../sessions/types.js\";\nimport type {\n BudgetSettings,\n CompactionSettings,\n HarnessEvent,\n HarnessEventListener,\n HarnessSettings,\n MikanAgentSessionOptions,\n MikanHarnessTool,\n MikanToolInput,\n MikanToolResult,\n SubagentUsage,\n SubagentUsageSink,\n RetrySettings,\n} from \"./types.js\";\n\nimport * as log from \"../log.js\";\nimport { ToolLoopGuard } from \"./loop-guard.js\";\nimport { adaptAgentTool, isHarnessTool } from \"./tools/pi-tools.js\";\nimport { START_TASK_TOOL, TASK_STATUS_TOOL } from \"./tools/task.js\";\nimport { createCodemodeTool, isCodemodeCallable, withScriptCallNote } from \"./tools/codemode.js\";\nimport { renderMcpServersSection } from \"./mcp.js\";\nimport { createToolSearchTool } from \"./tools/tool-search.js\";\nimport { withSecretRedaction } from \"./tools/secret-redaction.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst context: Context = BACKGROUND_CONTEXT;\nconst COMPACTION_REQUEST = Symbol(\"compaction-request\");\n\ninterface RunTally {\n usage: SubagentUsage;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n startedAt: number;\n endedAt?: number;\n}\n\ninterface RunOptions {\n images?: ImageContent[];\n budget?: BudgetSettings;\n tools?: MikanToolInput[];\n allowTaskHandoff?: boolean;\n allowTaskStatus?: boolean;\n}\n\ninterface Deferred {\n promise: Promise<void>;\n resolve: () => void;\n}\n\nfunction deferred(): Deferred {\n let resolve!: () => void;\n const promise = new Promise<void>((done) => {\n resolve = done;\n });\n return { promise, resolve };\n}\n\nexport class MikanAgentSession {\n readonly sessionStore: SessionStore;\n readonly model: Model<Api>;\n private readonly settings: HarnessSettings;\n private readonly listeners = new Set<HarnessEventListener>();\n private systemPrompt: string;\n private attached: AttachedSessionHarness | undefined;\n private runActive = false;\n private runAborted = false;\n private cancellation: Promise<void> | undefined;\n private cancellationError: unknown;\n private deadlineTimer: ReturnType<typeof setTimeout> | undefined;\n private deadlineNotification: Promise<void> | undefined;\n private runBudget: BudgetSettings = {};\n private budgetExceededReason: string | undefined;\n private retryAttempt = 0;\n private runMessages: AgentMessage[] = [];\n private streamingContent: AssistantMessage[\"content\"] = [];\n private readonly toolArgs = new Map<string, unknown>();\n private loopGuard = new ToolLoopGuard();\n private readonly loopNotices = new Map<string, string>();\n private runStarted = false;\n private runEndSeen = false;\n private observedUsage: Usage = createEmptyUsage();\n private requestRunId: string | undefined;\n private activeRequest: { token: symbol; runId: string } | undefined;\n private runEnded: Deferred = deferred();\n private lastSessionRunStatus: SessionRunStatus | undefined;\n private tally: RunTally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: 0,\n };\n\n constructor(private readonly options: MikanAgentSessionOptions) {\n this.sessionStore = options.sessionStore;\n this.model = options.model;\n this.systemPrompt = options.systemPrompt;\n this.settings = resolveHarnessSettings(options.settings);\n }\n\n get lastRunMessages(): readonly AgentMessage[] {\n return this.runMessages;\n }\n\n get isActiveRun(): boolean {\n return this.runActive;\n }\n\n setSystemPrompt(prompt: string): void {\n if (this.runActive) throw new Error(\"Cannot change the system prompt during a run\");\n this.systemPrompt = prompt;\n }\n\n getLastRunStats(): Readonly<{\n usage: SubagentUsage;\n tokens: number;\n costUsd: number;\n llmCalls: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n durationMs: number;\n budgetExceededReason?: string;\n status?: SessionRunStatus;\n }> {\n return {\n usage: copyUsage(this.tally.usage),\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n toolCalls: this.tally.toolCalls,\n toolCallCounts: { ...this.tally.toolCallCounts },\n durationMs:\n this.tally.startedAt > 0 ? (this.tally.endedAt ?? Date.now()) - this.tally.startedAt : 0,\n budgetExceededReason: this.budgetExceededReason || undefined,\n status: this.lastSessionRunStatus,\n };\n }\n\n captureExternalUsageSink(): SubagentUsageSink {\n const tally = this.tally;\n return async (usage) => {\n addUsage(tally.usage, usage);\n if (this.tally !== tally || !this.runActive || this.budgetExceededReason) return;\n const reason = this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n };\n }\n\n subscribe(listener: HarnessEventListener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n async prompt(text: string, options?: RunOptions): Promise<void> {\n await this.run(text, options);\n }\n\n async steer(text: string): Promise<boolean> {\n if (!this.runActive || this.runAborted || !this.attached) return false;\n await this.attached.conversation.submit(\n { type: \"input\", content: text, whenBusy: \"steer\" },\n context,\n );\n return true;\n }\n\n private async run(text: string, options?: RunOptions): Promise<void> {\n if (this.runActive) throw new Error(\"Agent is already processing a prompt\");\n this.runActive = true;\n this.runAborted = false;\n this.budgetExceededReason = undefined;\n this.cancellation = undefined;\n this.cancellationError = undefined;\n this.retryAttempt = 0;\n this.runMessages = [];\n this.runStarted = false;\n this.runEndSeen = false;\n this.runEnded = deferred();\n this.activeRequest = undefined;\n this.requestRunId = undefined;\n this.loopGuard = new ToolLoopGuard();\n this.loopNotices.clear();\n this.runBudget = { ...this.settings.budget, ...options?.budget };\n this.lastSessionRunStatus = undefined;\n this.tally = {\n usage: createEmptyUsage(),\n llmCalls: 0,\n toolCalls: 0,\n toolCallCounts: {},\n startedAt: Date.now(),\n };\n let runFailure: { error: unknown } | undefined;\n let stream: AgentEventStream | undefined;\n let status: SessionRunStatus = \"completed\";\n try {\n if (!(await this.checkCallBudget())) return;\n this.armDeadline();\n const auth = await this.options.models.getAuth(this.model);\n if (this.runAborted) return;\n if (!auth)\n throw new Error(\n `No credentials for provider \"${this.model.provider}\". Set the provider API key environment variable.`,\n );\n const attached = await this.attach();\n if (this.runAborted) return;\n const tools = this.toHarnessTools(options?.tools ?? this.options.tools).filter(\n (tool) =>\n (tool.name !== START_TASK_TOOL || options?.allowTaskHandoff === true) &&\n (tool.name !== TASK_STATUS_TOOL || options?.allowTaskStatus === true),\n );\n await this.installRunTools(attached, tools);\n if (!(await this.checkCallBudget())) return;\n await this.sessionStore.recordRun({ startedAt: Date.now() });\n stream = await watchEvents(attached.harness, attached.conversation.id, context);\n this.observedUsage = sumUsageState(stream.snapshot.usage);\n stream.start((events) => this.handleDurableEvents(events));\n status = await this.drive(attached, text, options?.images);\n } catch (error) {\n runFailure = { error };\n status = \"failed\";\n throw error;\n } finally {\n if (status !== \"failed\" && this.runAborted) status = \"aborted\";\n await this.cleanupRun(runFailure, stream, status);\n }\n }\n\n private async drive(\n { harness, conversation }: AttachedSessionHarness,\n text: string,\n images?: ImageContent[],\n ): Promise<SessionRunStatus> {\n const interrupted = (await harness.snapshot(LiveDoc, conversation.id, context))?.run;\n if (interrupted) {\n log.logWarning(\"Aborting a run interrupted before this process started\");\n await conversation.abort(context);\n }\n const content: string | (TextContent | ImageContent)[] =\n images && images.length > 0 ? [{ type: \"text\", text }, ...images] : text;\n const submission = await conversation.submit(\n { type: \"input\", content, whenBusy: \"reject\" },\n context,\n );\n if (this.runAborted) this.requestCancellation();\n const settled = await submission.wait(context);\n if (this.runStarted) await this.runEnded.promise;\n if (settled.status === \"done\") return \"completed\";\n if (this.runAborted || settled.reason === \"aborted\") return \"aborted\";\n if (settled.reason === \"model_error\") return \"failed\";\n throw new Error(`Pi run failed: ${settled.reason}`);\n }\n\n private async cleanupRun(\n runFailure: { error: unknown } | undefined,\n stream: AgentEventStream | undefined,\n status: SessionRunStatus,\n ): Promise<void> {\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n let cleanupFailure: { error: unknown } | undefined;\n try {\n await this.cancellation;\n await this.deadlineNotification;\n await stream?.stop();\n if (this.attached) {\n await this.sessionStore.recordRun({ endedAt: Date.now(), status });\n }\n if (this.cancellationError) throw this.cancellationError;\n } catch (error) {\n cleanupFailure = { error };\n } finally {\n this.toolArgs.clear();\n this.loopNotices.clear();\n this.cancellation = undefined;\n this.deadlineNotification = undefined;\n this.tally.endedAt = Date.now();\n this.lastSessionRunStatus = status;\n this.runActive = false;\n }\n if (!cleanupFailure) return;\n if (runFailure) {\n throw new AggregateError(\n [runFailure.error, cleanupFailure.error],\n \"Agent run and cancellation cleanup failed\",\n { cause: runFailure.error },\n );\n }\n throw cleanupFailure.error;\n }\n\n abort(reason = \"cancelled\"): void {\n if (!this.runActive) return;\n const firstAbort = !this.runAborted;\n this.runAborted = true;\n clearTimeout(this.deadlineTimer);\n this.deadlineTimer = undefined;\n if (firstAbort && this.activeRequest !== undefined) {\n log.logInfo(\n `LLM request aborted ${JSON.stringify({ abort_reason: reason, run_id: this.activeRequest.runId })}`,\n );\n }\n this.requestCancellation();\n }\n\n private requestCancellation(): void {\n if (!this.attached || this.cancellation) return;\n this.cancellation = this.attached.conversation.abort(context).catch((error: unknown) => {\n this.cancellationError = error;\n });\n }\n\n private async attach(): Promise<AttachedSessionHarness> {\n if (this.attached) return this.attached;\n const { retry, compaction } = this.settings;\n this.attached = await this.sessionStore.bindHarness({\n models: this.options.models.models,\n requestModels: this.trackedModels(this.options.models.models),\n env: () => this.options.toolContext?.env,\n settings: { retry, compaction },\n onReport: (error) => log.logWarning(\"Durable harness report\", errorMessage(error)),\n });\n return this.attached;\n }\n\n private trackedModels(models: Models): Models {\n const track = <TOptions extends ProviderRequestOptions>(\n options: TOptions | undefined,\n token: symbol,\n ): TOptions => {\n const onPayload = options?.onPayload;\n const tracked: TOptions = {\n ...options,\n onPayload: async (\n ...args: Parameters<NonNullable<ProviderRequestOptions[\"onPayload\"]>>\n ) => {\n const transformed = await onPayload?.(...args);\n if (this.runActive) {\n this.activeRequest = { token, runId: this.requestRunId ?? \"background\" };\n }\n return transformed;\n },\n } as TOptions;\n return tracked;\n };\n const finish = (token: symbol) => {\n if (this.activeRequest?.token === token) this.activeRequest = undefined;\n };\n const stream = (start: (token: symbol) => AssistantMessageEventStream) => {\n const token = Symbol(\"provider-request\");\n const result = start(token);\n void result.result().then(\n () => finish(token),\n () => finish(token),\n );\n return result;\n };\n return new Proxy(models, {\n get: (target, property) => {\n if (property === \"streamSimple\") {\n return (...[model, request, options]: Parameters<Models[\"streamSimple\"]>) => {\n const over = this.runActive ? this.callOverBudgetReason() : undefined;\n if (over || this.runAborted) return abortedStream(model, over ?? \"Operation aborted\");\n if (this.runActive) this.tally.llmCalls += 1;\n return stream((token) => target.streamSimple(model, request, track(options, token)));\n };\n }\n const value = Reflect.get(target, property, target) as unknown;\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n }\n\n private toHarnessTools(tools: MikanToolInput[]): MikanHarnessTool[] {\n return tools.map((tool) => (isHarnessTool(tool) ? tool : adaptAgentTool(tool)));\n }\n\n private async installRunTools(\n attached: AttachedSessionHarness,\n selected: MikanHarnessTool[],\n ): Promise<void> {\n const tools = [...selected];\n const deferredTools = tools.filter((tool) => tool.exposure === \"deferred\");\n const servers = this.sessionStore.mcpServers();\n const authorized = new Set(deferredTools.map((tool) => tool.name));\n const { harness, conversation, registry, extensionName } = attached;\n const stored = (await harness.snapshot(AgentDoc, conversation.id, context))?.tools;\n const loaded = new Set(\n Array.isArray(stored) ? stored.filter((name) => authorized.has(name)) : [],\n );\n if (tools.length > 0)\n tools.push(\n withSecretRedaction(\n createCodemodeTool({\n tools,\n servers,\n executeNested: (tool, call) => this.executeNestedTool(tool, call),\n }),\n ),\n );\n if (deferredTools.length > 0) {\n tools.push(\n withSecretRedaction(\n createToolSearchTool({\n tools: deferredTools,\n loaded,\n load: async (names) => {\n for (const name of names) if (authorized.has(name)) loaded.add(name);\n },\n }),\n ),\n );\n }\n const hasCodemode = tools.some((tool) => tool.name === \"codemode\");\n const registered = tools.map((tool) =>\n hasCodemode && tool.exposure === undefined && isCodemodeCallable(tool)\n ? withScriptCallNote(tool)\n : tool,\n );\n registry.install(\n defineExtension({\n name: extensionName,\n tools: registered,\n sections: [\n section(\"mikan\", () => this.systemPrompt, { tag: false }),\n section(\"mcp_servers\", () => renderMcpServersSection(servers) || undefined),\n ],\n hooks: [\n hook(GenerationTask, {\n beforeRequest: (_request, api) => this.beforeRequest(String(api.taskId)),\n }),\n hook(CompactionTask, {\n beforeCompact: (_compaction, api) => this.beforeCompact(String(api.taskId)),\n }),\n hook(ToolTask, {\n beforeTool: async (call, api) => this.beforeTool(call, api),\n afterTool: (call, result) => this.afterTool(call.id, result),\n }),\n ],\n }),\n );\n await conversation.configure(\n {\n model: { provider: this.model.provider, modelId: this.model.id },\n thinkingLevel: this.options.thinkingLevel,\n extensions: [registry.snapshot().extension(extensionName)!],\n tools: registered.filter((tool) => tool.exposure === undefined || loaded.has(tool.name)),\n },\n context,\n );\n }\n\n private beforeCompact(taskId: string): { decline: true } | undefined {\n if (!this.runActive) return undefined;\n if (this.runAborted || this.budgetExceededReason || this.callOverBudgetReason()) {\n return { decline: true };\n }\n this.tally.llmCalls += 1;\n this.activeRequest = { token: COMPACTION_REQUEST, runId: taskId };\n return undefined;\n }\n\n private async beforeRequest(runId: string): Promise<undefined> {\n if (!(await this.checkCallBudget())) return undefined;\n this.requestRunId = runId;\n return undefined;\n }\n\n private async beforeTool(\n call: { id: string; name: string; arguments: Record<string, unknown> },\n api: {\n snapshot: ToolExecutionApi[\"snapshot\"];\n conversationId: ToolExecutionApi[\"conversationId\"];\n },\n ): Promise<{ block?: string } | undefined> {\n const round = (await api.snapshot(LiveDoc, api.conversationId, context))?.tools ?? [];\n if (round.length > 1 && round.some((slot) => slot.name === START_TASK_TOOL)) {\n return { block: `Call ${START_TASK_TOOL} alone, without other tools in the same batch.` };\n }\n return this.checkToolLoop(call.id, call.name, call.arguments);\n }\n\n private afterTool<T extends { content?: (TextContent | ImageContent)[] }>(\n callId: string,\n result: T,\n ): T | undefined {\n const notice = this.loopNotices.get(callId);\n if (notice === undefined) return undefined;\n this.loopNotices.delete(callId);\n return { ...result, content: [...(result.content ?? []), { type: \"text\", text: notice }] };\n }\n\n private async executeNestedTool(\n tool: MikanHarnessTool,\n call: Parameters<MikanHarnessTool[\"execute\"]>,\n ): Promise<MikanToolResult> {\n const [args, api, toolContext] = call;\n const id = api.callId;\n if (this.runAborted || toolContext.abortSignal?.aborted) throw new Error(\"Operation aborted\");\n await this.emitToolStart(id, tool.name, args);\n let result: MikanToolResult;\n try {\n const verdict = await this.checkToolLoop(id, tool.name, args as Record<string, unknown>);\n if (verdict?.block) throw new Error(verdict.block);\n toolContext.abortSignal?.throwIfAborted();\n result = await tool.execute(args, api, toolContext);\n result = this.afterTool(id, result) ?? result;\n } catch (error) {\n result = { content: [{ type: \"text\", text: errorMessage(error) }], isError: true };\n } finally {\n this.loopNotices.delete(id);\n }\n await this.emitToolEnd(\n id,\n tool.name,\n { content: result.content ?? [], details: result.details },\n result.isError === true,\n );\n return result;\n }\n\n private async checkToolLoop(\n toolCallId: string,\n toolName: string,\n args: Record<string, unknown>,\n ): Promise<{ block: string } | undefined> {\n const verdict = this.loopGuard.observe(toolName, args);\n switch (verdict.kind) {\n case \"allow\":\n return undefined;\n case \"notice\":\n this.loopNotices.set(toolCallId, verdict.text);\n return undefined;\n case \"block\":\n return { block: verdict.reason };\n case \"stop\":\n await this.exceedBudget(verdict.reason);\n return { block: verdict.reason };\n default:\n return verdict satisfies never;\n }\n }\n\n private async emit(event: HarnessEvent): Promise<void> {\n for (const listener of this.listeners) {\n try {\n await listener(event);\n } catch (error) {\n log.logWarning(\"Harness event listener failed\", errorMessage(error));\n }\n }\n }\n\n private async handleDurableEvents(events: readonly DurableEvent[]): Promise<void> {\n for (const event of events) {\n try {\n await this.handleDurableEvent(event);\n } catch (error) {\n log.logWarning(\"Durable event handling failed\", errorMessage(error));\n }\n }\n if (this.runEndSeen) this.runEnded.resolve();\n }\n\n private async handleDurableEvent(event: DurableEvent): Promise<void> {\n switch (event.type) {\n case \"run_start\":\n this.runStarted = true;\n return;\n case \"run_end\":\n await this.endRetry(this.runAborted ? \"Retry cancelled\" : undefined);\n this.runEndSeen = true;\n return;\n case \"snapshot\":\n return this.streamContent(event.generation?.message?.content ?? []);\n case \"message_start\":\n if (event.message.role === \"system\") return;\n this.streamingContent = [];\n await this.emit({ type: \"message_start\", message: event.message });\n if (event.message.role === \"assistant\") await this.streamContent(event.message.content);\n return;\n case \"message_update\":\n return this.streamContent(applyMessageChanges(this.streamingContent, event.changes));\n case \"message_end\":\n return this.endMessage(event.entry.model?.[0]);\n case \"tool_execution_start\":\n return this.emitToolStart(event.toolCallId, event.toolName, event.args);\n case \"tool_execution_update\":\n if (event.details === undefined) return;\n await this.emit({\n type: \"tool_execution_update\",\n toolCallId: event.toolCallId,\n toolName: event.toolName,\n details: event.details,\n });\n return;\n case \"tool_execution_end\": {\n const message = event.entry?.model?.[0];\n const toolResult = message?.role === \"toolResult\" ? message : undefined;\n await this.emitToolEnd(\n event.toolCallId,\n event.toolName,\n { content: toolResult?.content ?? [], details: toolResult?.details },\n toolResult?.isError ?? true,\n );\n return;\n }\n case \"auto_retry_start\":\n this.retryAttempt = event.attempt;\n await this.emit({\n type: \"auto_retry_start\",\n attempt: event.attempt,\n maxAttempts: this.settings.retry.maxRetries,\n delayMs: Math.max(0, event.at - Date.now()),\n errorMessage: event.errorMessage,\n });\n return;\n case \"auto_retry_end\":\n this.retryAttempt = 0;\n await this.emit({\n type: \"auto_retry_end\",\n attempt: event.attempt,\n success: !this.runAborted,\n finalError: this.runAborted ? \"Retry cancelled\" : undefined,\n });\n return;\n case \"compaction_start\":\n await this.emit({ type: \"compaction_start\", reason: event.reason });\n return;\n case \"compaction_end\": {\n if (this.activeRequest?.token === COMPACTION_REQUEST) this.activeRequest = undefined;\n const outcome = await this.compactionOutcome(event.taskId);\n await this.emit({\n type: \"compaction_end\",\n reason: event.reason,\n aborted: outcome?.status === \"aborted\",\n errorMessage: outcome?.status === \"failed\" ? outcome.error.message : undefined,\n });\n return;\n }\n case \"usage_changed\":\n return this.recordUsage(event.usage);\n case \"task_failed\":\n log.logWarning(`Durable task ${event.kind} failed`, event.message);\n return;\n default:\n return;\n }\n }\n\n private async streamContent(content: AssistantMessage[\"content\"]): Promise<void> {\n const before = contentText(this.streamingContent);\n this.streamingContent = content;\n const after = contentText(content);\n if (after.length > before.length && after.startsWith(before)) {\n await this.emit({ type: \"text_delta\", delta: after.slice(before.length) });\n }\n }\n\n private async compactionOutcome(\n taskId: Parameters<AttachedSessionHarness[\"harness\"][\"getTask\"]>[0],\n ) {\n const task = await this.attached?.harness.getTask(taskId, context);\n return task?.state.outcome;\n }\n\n private async recordUsage(state: UsageState): Promise<void> {\n const total = sumUsageState(state);\n addUsage(this.tally.usage, subtractUsage(total, this.observedUsage));\n this.observedUsage = total;\n const reason = this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n }\n\n private async endRetry(finalError: string | undefined): Promise<void> {\n if (this.retryAttempt === 0) return;\n await this.emit({\n type: \"auto_retry_end\",\n attempt: this.retryAttempt,\n success: false,\n finalError,\n });\n this.retryAttempt = 0;\n }\n\n private async endMessage(message: Message | undefined): Promise<void> {\n if (!message || message.role === \"system\") return;\n if (message.role === \"assistant\") await this.streamContent(message.content);\n this.runMessages.push(message);\n await this.emit({ type: \"message_end\", message });\n if (message.role !== \"assistant\") return;\n const needsCall =\n message.stopReason === \"error\" || message.content.some((part) => part.type === \"toolCall\");\n const reason = (needsCall && this.callOverBudgetReason()) || this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n }\n\n private async emitToolStart(toolCallId: string, toolName: string, args: unknown): Promise<void> {\n this.toolArgs.set(toolCallId, args);\n this.tally.toolCalls += 1;\n this.tally.toolCallCounts[toolName] = (this.tally.toolCallCounts[toolName] ?? 0) + 1;\n await this.emit({ type: \"tool_execution_start\", toolCallId, toolName, args });\n }\n\n private async emitToolEnd(\n toolCallId: string,\n toolName: string,\n result: Extract<HarnessEvent, { type: \"tool_execution_end\" }>[\"result\"],\n isError: boolean,\n ): Promise<void> {\n this.toolArgs.delete(toolCallId);\n await this.emit({ type: \"tool_execution_end\", toolCallId, toolName, result, isError });\n }\n\n private async exceedBudget(reason: string): Promise<void> {\n if (this.budgetExceededReason) return;\n this.budgetExceededReason = reason;\n this.abort(reason);\n await this.emit({\n type: \"budget_exceeded\",\n reason,\n tokens: this.tally.usage.totalTokens,\n costUsd: this.tally.usage.cost.total,\n llmCalls: this.tally.llmCalls,\n durationMs: Date.now() - this.tally.startedAt,\n });\n log.logWarning(\"Run budget exceeded — aborting\", reason);\n }\n\n private async checkCallBudget(): Promise<boolean> {\n if (this.runAborted || this.budgetExceededReason) {\n this.requestCancellation();\n return false;\n }\n const reason = this.callOverBudgetReason() ?? this.resourceOverBudgetReason();\n if (reason) await this.exceedBudget(reason);\n return !this.runAborted && !this.budgetExceededReason;\n }\n\n private callOverBudgetReason(): string | undefined {\n const limit = this.runBudget.maxLlmCalls;\n if (limit !== undefined && this.tally.llmCalls >= limit)\n return `${this.tally.llmCalls} LLM calls >= ${limit} limit`;\n return undefined;\n }\n\n private resourceOverBudgetReason(): string | undefined {\n const { maxTokens, maxCostUsd, maxDurationMs } = this.runBudget;\n if (maxTokens !== undefined && this.tally.usage.totalTokens >= maxTokens)\n return `${this.tally.usage.totalTokens} tokens >= ${maxTokens} limit`;\n if (maxCostUsd !== undefined && this.tally.usage.cost.total >= maxCostUsd)\n return `cost ${this.tally.usage.cost.total.toFixed(2)} USD >= ${maxCostUsd} USD limit`;\n if (maxDurationMs !== undefined && Date.now() - this.tally.startedAt >= maxDurationMs)\n return `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`;\n return undefined;\n }\n\n private armDeadline(): void {\n const maxDurationMs = this.runBudget.maxDurationMs;\n if (maxDurationMs === undefined || !Number.isFinite(maxDurationMs) || this.runAborted) return;\n const remaining = maxDurationMs - (Date.now() - this.tally.startedAt);\n this.deadlineTimer = setTimeout(\n () => {\n if (Date.now() - this.tally.startedAt < maxDurationMs) {\n this.armDeadline();\n return;\n }\n this.deadlineNotification = this.exceedBudget(\n `${Date.now() - this.tally.startedAt}ms >= ${maxDurationMs}ms limit`,\n );\n },\n Math.min(Math.max(0, remaining), 2_147_483_647),\n );\n }\n}\n\nfunction abortedAssistant(model: Model<Api>, reason: string): AssistantMessage {\n return {\n role: \"assistant\",\n content: [],\n api: model.api,\n provider: model.provider,\n model: model.id,\n usage: createEmptyUsage(),\n stopReason: \"aborted\",\n errorMessage: reason,\n timestamp: Date.now(),\n };\n}\n\nfunction abortedStream(model: Model<Api>, reason: string): AssistantMessageEventStream {\n const stream = createAssistantMessageEventStream();\n const error = abortedAssistant(model, reason);\n stream.push({ type: \"error\", reason: \"aborted\", error });\n stream.end(error);\n return stream;\n}\n\nconst DEFAULT_RETRY_SETTINGS: RetrySettings = {\n enabled: true,\n maxRetries: 3,\n baseDelayMs: 2000,\n};\n\nconst DEFAULT_BUDGET_SETTINGS: BudgetSettings = {};\n\nexport const DEFAULT_EVENT_BUDGET: BudgetSettings = {\n maxDurationMs: 10 * 60 * 1000,\n maxLlmCalls: 50,\n maxCostUsd: 10,\n};\n\nfunction resolveHarnessSettings(overrides?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n}): HarnessSettings {\n return {\n compaction: { ...DEFAULT_COMPACTION_POLICY, ...overrides?.compaction },\n retry: { ...DEFAULT_RETRY_SETTINGS, ...overrides?.retry },\n budget: { ...DEFAULT_BUDGET_SETTINGS, ...overrides?.budget },\n };\n}\n\nexport function createEmptyUsage(): Usage {\n return {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n totalTokens: 0,\n cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n };\n}\n\nfunction addUsage(total: Usage, usage: Usage): void {\n total.input += usage.input;\n total.output += usage.output;\n total.cacheRead += usage.cacheRead;\n total.cacheWrite += usage.cacheWrite;\n total.totalTokens += usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n total.cost.input += usage.cost.input;\n total.cost.output += usage.cost.output;\n total.cost.cacheRead += usage.cost.cacheRead;\n total.cost.cacheWrite += usage.cost.cacheWrite;\n total.cost.total += usage.cost.total;\n\n if (usage.cacheWrite1h !== undefined) {\n total.cacheWrite1h = (total.cacheWrite1h ?? 0) + usage.cacheWrite1h;\n }\n if (usage.reasoning !== undefined) {\n total.reasoning = (total.reasoning ?? 0) + usage.reasoning;\n }\n}\n\nfunction sumUsageState(state: UsageState): Usage {\n const total = createEmptyUsage();\n for (const usage of [...Object.values(state.models), ...Object.values(state.tools)]) {\n addUsage(total, usage);\n }\n return total;\n}\n\nfunction subtractUsage(total: Usage, base: Usage): Usage {\n return {\n input: total.input - base.input,\n output: total.output - base.output,\n cacheRead: total.cacheRead - base.cacheRead,\n cacheWrite: total.cacheWrite - base.cacheWrite,\n totalTokens: total.totalTokens - base.totalTokens,\n cost: {\n input: total.cost.input - base.cost.input,\n output: total.cost.output - base.cost.output,\n cacheRead: total.cost.cacheRead - base.cost.cacheRead,\n cacheWrite: total.cost.cacheWrite - base.cost.cacheWrite,\n total: total.cost.total - base.cost.total,\n },\n reasoning: total.reasoning === undefined ? undefined : total.reasoning - (base.reasoning ?? 0),\n };\n}\n\nexport function copyUsage(usage: Usage): Usage {\n return { ...usage, cost: { ...usage.cost } };\n}\n\nfunction applyMessageChanges(\n content: AssistantMessage[\"content\"],\n changes: readonly MessageChange[],\n): AssistantMessage[\"content\"] {\n const next = [...content];\n for (const change of changes) {\n switch (change.type) {\n case \"message\":\n next.splice(0, next.length, ...change.message.content);\n break;\n case \"text_start\":\n case \"thinking_start\":\n case \"toolcall_start\":\n case \"block\":\n next[change.contentIndex] = change.block;\n break;\n case \"text_delta\": {\n const block = next[change.contentIndex];\n next[change.contentIndex] =\n block?.type === \"text\"\n ? { ...block, text: `${block.text}${change.delta}` }\n : { type: \"text\", text: change.delta };\n break;\n }\n case \"thinking_delta\":\n case \"toolcall_delta\":\n break;\n default:\n change satisfies never;\n }\n }\n return next;\n}\n"]}
|
|
@@ -3,6 +3,10 @@ import { Type } from "typebox";
|
|
|
3
3
|
import type { ConversationResponder } from "../../types.js";
|
|
4
4
|
export declare const START_TASK_TOOL = "start_task";
|
|
5
5
|
export declare const TASK_STATUS_TOOL = "task_status";
|
|
6
|
+
export declare const RESUMED_TASK_PROMPT = "[mikan] The service restarted while you were working on this task, so the step in progress was interrupted. Check what that step already did, rerun it only if it is safe to repeat, and finish the task.";
|
|
7
|
+
export declare function taskRunId(root: string): string;
|
|
8
|
+
export declare function resumedTaskRunId(root: string): string;
|
|
9
|
+
export declare function isTaskRunId(id: string): boolean;
|
|
6
10
|
export declare function createTaskTool(): {
|
|
7
11
|
tool: AgentTool<Type.TObject<{
|
|
8
12
|
message: Type.TString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/harness/tools/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/harness/tools/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAK9C,eAAO,MAAM,mBAAmB,8MAC6K,CAAC;AAE9M,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,wBAAgB,cAAc;;;;;0BAkCJ,qBAAqB,CAAC,WAAW,CAAC;EAI3D;AAkCD,wBAAgB,eAAe;IAI3B,KAAK;;;;;;IACL,SAAS,YAAY,qBAAqB;EAK7C"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import { Type } from "typebox";
|
|
2
2
|
export const START_TASK_TOOL = "start_task";
|
|
3
3
|
export const TASK_STATUS_TOOL = "task_status";
|
|
4
|
+
const TASK_RUN_ID_PREFIX = "task:";
|
|
5
|
+
const RESUMED_TASK_RUN_ID_PREFIX = "resume:";
|
|
6
|
+
export const RESUMED_TASK_PROMPT = "[mikan] The service restarted while you were working on this task, so the step in progress was interrupted. Check what that step already did, rerun it only if it is safe to repeat, and finish the task.";
|
|
7
|
+
export function taskRunId(root) {
|
|
8
|
+
return `${TASK_RUN_ID_PREFIX}${root}`;
|
|
9
|
+
}
|
|
10
|
+
export function resumedTaskRunId(root) {
|
|
11
|
+
return `${RESUMED_TASK_RUN_ID_PREFIX}${root}`;
|
|
12
|
+
}
|
|
13
|
+
export function isTaskRunId(id) {
|
|
14
|
+
return id.startsWith(TASK_RUN_ID_PREFIX) || id.startsWith(RESUMED_TASK_RUN_ID_PREFIX);
|
|
15
|
+
}
|
|
4
16
|
export function createTaskTool() {
|
|
5
17
|
let start;
|
|
6
18
|
const parameters = Type.Object({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/harness/tools/task.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"typebox\";\nimport type { ConversationResponder } from \"../../types.js\";\n\nexport const START_TASK_TOOL = \"start_task\";\nexport const TASK_STATUS_TOOL = \"task_status\";\n\nexport function createTaskTool() {\n let start: ConversationResponder[\"startTask\"];\n const parameters = Type.Object({\n message: Type.String({\n minLength: 1,\n description:\n \"Brief, conversational acknowledgement in the user's language. Sound like a helpful colleague, not a project plan: e.g. 好,我來整理一下,弄好再通知你。 Do not repeat the full request or promise an exact completion time.\",\n }),\n task: Type.String({\n minLength: 1,\n description:\n \"Self-contained task, including context, constraints and attachment paths. The task does not inherit your private tool history.\",\n }),\n });\n const tool: AgentTool<typeof parameters> = {\n name: START_TASK_TOOL,\n label: START_TASK_TOOL,\n parameters,\n description:\n \"Hand off multi-step or time-consuming work to an independent task thread so the user can keep chatting. Call ALONE, before doing that work. Ends this turn on success. Only available in top-level Slack DMs.\",\n execute: async (_id, args, signal) => {\n signal?.throwIfAborted();\n if (!start)\n throw new Error(\"Task handoff is unavailable here; continue in this conversation.\");\n const target = await start(args.message, args.task);\n return {\n content: [{ type: \"text\", text: `Task admitted: ${target}` }],\n details: { target },\n terminate: true,\n };\n },\n };\n return {\n tool,\n setTaskFunction: (fn: ConversationResponder[\"startTask\"]) => {\n start = fn;\n },\n };\n}\n\nfunction createTaskStatusTool() {\n let query: ConversationResponder[\"getTaskStatus\"];\n const parameters = Type.Object({\n sessionKey: Type.Optional(\n Type.String({\n description: `Task session reference from ${START_TASK_TOOL}. Omit to list recent tasks.`,\n }),\n ),\n });\n const tool: AgentTool<typeof parameters> = {\n name: TASK_STATUS_TOOL,\n label: TASK_STATUS_TOOL,\n parameters,\n description:\n \"Read actual background task execution status. ALWAYS use this before answering task progress questions; do not infer progress or ETA from elapsed time or your previous promises. Completed means execution ended, not verified domain success. Read-only; does not steer or restart work.\",\n execute: async (_id, args, signal) => {\n signal?.throwIfAborted();\n if (!query) throw new Error(\"Task status is unavailable in this conversation.\");\n return {\n content: [{ type: \"text\", text: JSON.stringify(await query(args.sessionKey)) }],\n details: undefined,\n };\n },\n };\n return {\n tool,\n setTaskStatusFunction: (fn: ConversationResponder[\"getTaskStatus\"]) => {\n query = fn;\n },\n };\n}\n\nexport function createTaskTools() {\n const handoff = createTaskTool();\n const status = createTaskStatusTool();\n return {\n tools: [handoff.tool, status.tool],\n bindTasks(responder: ConversationResponder) {\n handoff.setTaskFunction(responder.startTask?.bind(responder));\n status.setTaskStatusFunction(responder.getTaskStatus?.bind(responder));\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/harness/tools/task.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentTool } from \"@earendil-works/pi-agent-core\";\nimport { Type } from \"typebox\";\nimport type { ConversationResponder } from \"../../types.js\";\n\nexport const START_TASK_TOOL = \"start_task\";\nexport const TASK_STATUS_TOOL = \"task_status\";\n\nconst TASK_RUN_ID_PREFIX = \"task:\";\nconst RESUMED_TASK_RUN_ID_PREFIX = \"resume:\";\n\nexport const RESUMED_TASK_PROMPT =\n \"[mikan] The service restarted while you were working on this task, so the step in progress was interrupted. Check what that step already did, rerun it only if it is safe to repeat, and finish the task.\";\n\nexport function taskRunId(root: string): string {\n return `${TASK_RUN_ID_PREFIX}${root}`;\n}\n\nexport function resumedTaskRunId(root: string): string {\n return `${RESUMED_TASK_RUN_ID_PREFIX}${root}`;\n}\n\nexport function isTaskRunId(id: string): boolean {\n return id.startsWith(TASK_RUN_ID_PREFIX) || id.startsWith(RESUMED_TASK_RUN_ID_PREFIX);\n}\n\nexport function createTaskTool() {\n let start: ConversationResponder[\"startTask\"];\n const parameters = Type.Object({\n message: Type.String({\n minLength: 1,\n description:\n \"Brief, conversational acknowledgement in the user's language. Sound like a helpful colleague, not a project plan: e.g. 好,我來整理一下,弄好再通知你。 Do not repeat the full request or promise an exact completion time.\",\n }),\n task: Type.String({\n minLength: 1,\n description:\n \"Self-contained task, including context, constraints and attachment paths. The task does not inherit your private tool history.\",\n }),\n });\n const tool: AgentTool<typeof parameters> = {\n name: START_TASK_TOOL,\n label: START_TASK_TOOL,\n parameters,\n description:\n \"Hand off multi-step or time-consuming work to an independent task thread so the user can keep chatting. Call ALONE, before doing that work. Ends this turn on success. Only available in top-level Slack DMs.\",\n execute: async (_id, args, signal) => {\n signal?.throwIfAborted();\n if (!start)\n throw new Error(\"Task handoff is unavailable here; continue in this conversation.\");\n const target = await start(args.message, args.task);\n return {\n content: [{ type: \"text\", text: `Task admitted: ${target}` }],\n details: { target },\n terminate: true,\n };\n },\n };\n return {\n tool,\n setTaskFunction: (fn: ConversationResponder[\"startTask\"]) => {\n start = fn;\n },\n };\n}\n\nfunction createTaskStatusTool() {\n let query: ConversationResponder[\"getTaskStatus\"];\n const parameters = Type.Object({\n sessionKey: Type.Optional(\n Type.String({\n description: `Task session reference from ${START_TASK_TOOL}. Omit to list recent tasks.`,\n }),\n ),\n });\n const tool: AgentTool<typeof parameters> = {\n name: TASK_STATUS_TOOL,\n label: TASK_STATUS_TOOL,\n parameters,\n description:\n \"Read actual background task execution status. ALWAYS use this before answering task progress questions; do not infer progress or ETA from elapsed time or your previous promises. Completed means execution ended, not verified domain success. Read-only; does not steer or restart work.\",\n execute: async (_id, args, signal) => {\n signal?.throwIfAborted();\n if (!query) throw new Error(\"Task status is unavailable in this conversation.\");\n return {\n content: [{ type: \"text\", text: JSON.stringify(await query(args.sessionKey)) }],\n details: undefined,\n };\n },\n };\n return {\n tool,\n setTaskStatusFunction: (fn: ConversationResponder[\"getTaskStatus\"]) => {\n query = fn;\n },\n };\n}\n\nexport function createTaskTools() {\n const handoff = createTaskTool();\n const status = createTaskStatusTool();\n return {\n tools: [handoff.tool, status.tool],\n bindTasks(responder: ConversationResponder) {\n handoff.setTaskFunction(responder.startTask?.bind(responder));\n status.setTaskStatusFunction(responder.getTaskStatus?.bind(responder));\n },\n };\n}\n"]}
|
package/dist/harness/types.d.ts
CHANGED
|
@@ -62,6 +62,8 @@ export interface RunnerSessionState {
|
|
|
62
62
|
subagentProgressShown: boolean;
|
|
63
63
|
suppressResponseDeltas: boolean;
|
|
64
64
|
answerStreamStarted: boolean;
|
|
65
|
+
answerText: string;
|
|
66
|
+
notice: string;
|
|
65
67
|
workAcknowledged: boolean;
|
|
66
68
|
publishRunEvent: RunEventListener | undefined;
|
|
67
69
|
lastSubagentProgressAt: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { OfficeAddress, PlatformTrustModel } from \"../types.js\";\nimport type { MikanAgentSession } from \"./session.js\";\nimport type { Api, ImageContent, Model, RetryPolicy, Usage } from \"@earendil-works/pi-ai\";\nimport type { ConversationResponder, MessagingInfo, SubagentProgressSnapshot } from \"../types.js\";\nimport type { resolveConversationSettings } from \"../settings/index.js\";\nimport type { Executor, RuntimePathContext, SandboxConfig } from \"../sandbox/types.js\";\nimport type { WorkspaceProjection, Office } from \"../office/types.js\";\n\nimport type { AgentMessage, AgentTool, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Context, JsonValue } from \"@earendil-works/chord\";\nimport type {\n CompactionPolicy,\n ToolControl,\n ToolExecutionApi,\n ToolRegistration,\n} from \"@earendil-works/pi-durable\";\nimport type { ExecutionEnv } from \"@earendil-works/pi-durable/env\";\nimport type { JsonValue as ModelJsonValue, TextContent } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"./models.js\";\nimport type { SessionStore } from \"../sessions/session-store.js\";\nimport type { Static, TSchema } from \"typebox\";\n\nexport interface EnsureDefaultOpenConnectorOptions {\n office: Office;\n platformWorkspaceId?: string;\n defaultServer?: McpServerConfig;\n signal?: AbortSignal;\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface ScratchListing {\n folders: string[];\n omitted: number;\n}\n\nexport interface BuildSystemPromptOptions {\n workspacePath: string;\n office: Office;\n memory: string;\n sandboxConfig: SandboxConfig;\n platform: MessagingInfo;\n skills: MikanSkill[];\n projection: WorkspaceProjection;\n skippedSkillLinks?: string[];\n scratch: ScratchListing;\n}\n\nexport interface RunnerSessionState {\n responder: ConversationResponder | null;\n logCtx: {\n conversationId: string;\n userName?: string;\n conversationName?: string;\n sessionId?: string;\n } | null;\n queue: {\n enqueue(fn: () => Promise<void>, errorContext: string): void;\n } | null;\n pendingTools: Map<string, { toolName: string; args: unknown; startTime: number }>;\n completedTools: ToolTiming[];\n toolProgress: Map<string, { label: string; status: \"running\" | \"done\" | \"error\" }>;\n subagentProgress: Map<string, SubagentProgressSnapshot>;\n completedSubagentProgress: SubagentProgressSnapshot[];\n subagentToolCalls: Set<string>;\n subagentProgressShown: boolean;\n suppressResponseDeltas: boolean;\n answerStreamStarted: boolean;\n workAcknowledged: boolean;\n publishRunEvent: RunEventListener | undefined;\n lastSubagentProgressAt: number;\n toolProgressTimer: ReturnType<typeof setTimeout> | undefined;\n llmCallCount: number;\n toolCallCount: number;\n toolErrorCount: number;\n toolInputCharacters: number;\n toolOutputCharacters: number;\n assistantMessageCount: number;\n outputCharacters: number;\n retryCount: number;\n compactionCount: number;\n budgetExceeded: boolean;\n firstTokenLatencyMs?: number;\n responseModel?: string;\n stopReason: string;\n errorMessage: string | undefined;\n reportedLlmError: boolean;\n finalResponseHandledByTool: boolean;\n triggerAttribution?: string;\n}\n\nexport interface UsageReportContext {\n session: MikanAgentSession;\n runState: RunnerSessionState;\n responder: ConversationResponder;\n platform: MessagingInfo;\n model: Model<Api>;\n sessionConversation: string;\n sessionUuid: string;\n waitForQueue: () => Promise<void>;\n}\n\nexport interface RunnerExecutionContext {\n executor: Executor;\n resolveForRun(context: {\n address: OfficeAddress;\n userId: string;\n trustModel?: PlatformTrustModel;\n }): Promise<{\n pathContext: RuntimePathContext;\n projection: WorkspaceProjection;\n }>;\n}\n\nexport interface RunPresentation {\n wait(): Promise<void>;\n dispose(): void;\n}\n\nexport interface RunPresentationContext {\n responder: ConversationResponder;\n sessionConversation: string;\n userName: string | undefined;\n sessionUuid: string;\n triggerAttribution: string | undefined;\n publishRunEvent?: RunEventListener;\n}\n\nexport interface PlatformToolRoles {\n platformTools: ReadonlySet<string>;\n finalResponseTools: ReadonlySet<string>;\n}\n\nexport interface SessionEventHandlerParams {\n session: MikanAgentSession;\n runState: RunnerSessionState;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n platformToolRoles: PlatformToolRoles;\n}\n\nexport interface FinalizeRunResponseOptions {\n triggerSessionLink?: string;\n createOverflowLink?: () => string;\n platform?: string;\n model?: Model<Api>;\n sessionConversation?: string;\n sessionUuid?: string;\n initialTask?: boolean;\n}\n\nexport interface PreparedRunContext {\n sessionConversation: string;\n userMessage: string;\n imageAttachments: ImageContent[];\n triggerAttribution?: string;\n}\n\nexport interface SubagentModelSpec {\n provider: string;\n id: string;\n}\n\nexport interface SubagentProfile {\n name: string;\n description: string;\n systemPrompt: string;\n tools: string[];\n model?: SubagentModelSpec;\n thinkingLevel?: ThinkingLevel;\n maxTurns?: number;\n maxTokens?: number;\n maxCostUsd?: number;\n maxDurationMs?: number;\n}\n\ninterface SubagentRunBudget {\n maxTurns?: number;\n maxTokens?: number;\n maxCostUsd?: number;\n maxDurationMs?: number;\n}\n\nexport type SubagentRunStatus =\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"timeout\"\n | \"budget_exceeded\"\n | \"invalid_output\";\n\ninterface SubagentParentContext {\n mode: \"normalized\";\n recentTurns?: number;\n}\n\nexport type SubagentUsage = Usage;\n\nexport type SubagentUsageSink = (usage: SubagentUsage) => void | Promise<void>;\n\nexport interface SubagentRunRequest<TOutputSchema extends TSchema | undefined = undefined> {\n task: string;\n profile?: string;\n parentContext?: SubagentParentContext;\n systemPrompt?: string;\n input?: unknown;\n model?: SubagentModelSpec;\n tools?: string[];\n thinkingLevel?: ThinkingLevel;\n outputSchema?: TOutputSchema;\n budget?: SubagentRunBudget;\n signal?: AbortSignal;\n}\n\nexport type SubagentRunOutput<TSchemaOrUndefined extends TSchema | undefined> =\n TSchemaOrUndefined extends TSchema ? Static<TSchemaOrUndefined> : string;\n\ninterface SubagentRunMetadata {\n runId: string;\n text?: string;\n model: SubagentModelSpec;\n turns: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n usage: SubagentUsage;\n tokens: number;\n costUsd: number;\n durationMs: number;\n cleanupPending?: boolean;\n}\n\ninterface SubagentRunCompletedResult<TOutput> extends SubagentRunMetadata {\n status: \"completed\";\n output: TOutput;\n error?: never;\n}\n\ninterface SubagentRunIncompleteResult extends SubagentRunMetadata {\n status: Exclude<SubagentRunStatus, \"completed\">;\n output?: never;\n error?: string;\n}\n\nexport type SubagentRunResult<TOutput = string> =\n | SubagentRunCompletedResult<TOutput>\n | SubagentRunIncompleteResult;\n\nexport interface CreateMikanModelsOptions {\n modelsJsonPath: string;\n}\n\nexport interface MikanSkill {\n name: string;\n description: string;\n content: string;\n filePath: string;\n disableModelInvocation?: boolean;\n baseDir: string;\n source: string;\n inline?: boolean;\n directory?: string;\n enabled?: boolean;\n}\n\nexport type SkillScope = \"global\" | \"conversation\";\n\nexport interface SkillPatterns {\n global: readonly string[];\n conversation: readonly string[];\n}\n\nexport interface SkillDiagnostic {\n type: \"warning\";\n message: string;\n path: string;\n code?: \"symlink\";\n}\n\nexport interface LoadSkillsResult {\n skills: MikanSkill[];\n diagnostics: SkillDiagnostic[];\n}\n\nexport type RetrySettings = RetryPolicy;\n\nexport interface BudgetSettings {\n maxTokens?: number;\n maxCostUsd?: number;\n maxDurationMs?: number;\n maxLlmCalls?: number;\n}\n\nexport type CompactionSettings = CompactionPolicy;\n\nexport interface HarnessSettings {\n compaction: CompactionSettings;\n retry: RetrySettings;\n budget: BudgetSettings;\n}\n\nexport type ToolLoopVerdict =\n | { kind: \"allow\" }\n | { kind: \"notice\"; text: string }\n | { kind: \"block\"; reason: string }\n | { kind: \"stop\"; reason: string };\n\nexport interface SubagentProfileDiagnostic {\n type: \"warning\";\n message: string;\n path: string;\n}\n\nexport interface LoadSubagentProfilesResult {\n profiles: Map<string, SubagentProfile>;\n diagnostics: SubagentProfileDiagnostic[];\n}\n\ntype CompactionReason = \"threshold\" | \"overflow\" | \"manual\";\n\nexport type HarnessEvent =\n | { type: \"message_start\"; message: AgentMessage }\n | { type: \"text_delta\"; delta: string }\n | { type: \"message_end\"; message: AgentMessage }\n | { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: unknown }\n | { type: \"tool_execution_update\"; toolCallId: string; toolName: string; details: JsonValue }\n | {\n type: \"tool_execution_end\";\n toolCallId: string;\n toolName: string;\n result: { content: (TextContent | ImageContent)[]; details?: unknown };\n isError: boolean;\n }\n | { type: \"compaction_start\"; reason: CompactionReason }\n | {\n type: \"compaction_end\";\n reason: CompactionReason;\n aborted: boolean;\n errorMessage?: string;\n }\n | {\n type: \"auto_retry_start\";\n attempt: number;\n maxAttempts: number;\n delayMs: number;\n errorMessage: string;\n }\n | { type: \"auto_retry_end\"; success: boolean; attempt: number; finalError?: string }\n | {\n type: \"budget_exceeded\";\n reason: string;\n tokens: number;\n costUsd: number;\n llmCalls: number;\n durationMs: number;\n };\n\nexport type HarnessEventListener = (event: HarnessEvent) => void | Promise<void>;\n\nexport type RunEvent =\n | { type: \"tool_started\"; toolCallId: string; toolName: string; label: string }\n | { type: \"subagent_progress\"; toolCallId: string; snapshot: SubagentProgressSnapshot }\n | {\n type: \"tool_ended\";\n toolCallId: string;\n toolName: string;\n isError: boolean;\n resultText: string;\n }\n | { type: \"assistant_delta\"; delta: string }\n | { type: \"assistant_message\"; thinking: string[]; text: string; callsTools: boolean }\n | { type: \"compaction_started\" }\n | { type: \"retry_started\"; attempt: number; maxAttempts: number }\n | { type: \"budget_exceeded\"; reason: string; llmCalls: number; durationMs: number }\n | { type: \"run_started\"; userName: string; text: string }\n | { type: \"run_ended\" };\n\nexport type RunEventListener = (event: RunEvent) => void;\n\nexport interface RunEventPublisher {\n publish(address: OfficeAddress, sessionKey: string, event: RunEvent): void;\n}\n\nexport interface MikanToolContext {\n env: ExecutionEnv;\n}\n\nexport interface MikanToolResult {\n content?: (TextContent | ImageContent)[];\n details?: JsonValue;\n isError?: boolean;\n structuredContent?: ModelJsonValue;\n usage?: Usage;\n control?: ToolControl;\n}\n\nexport type MikanHarnessTool = Omit<ToolRegistration, \"execute\"> & {\n outputSchema?: TSchema;\n exposure?: McpExposure;\n namespace?: string;\n execute(args: unknown, api: ToolExecutionApi, context: Context): Promise<MikanToolResult>;\n};\n\nexport interface ToolSearchOptions {\n tools: readonly MikanHarnessTool[];\n query: string;\n limit?: number;\n namespace?: string;\n}\n\nexport interface ToolSearchToolOptions {\n tools: readonly MikanHarnessTool[];\n loaded: ReadonlySet<string>;\n load: (names: string[], context: Context) => Promise<void>;\n}\n\nexport interface CodemodeToolOptions {\n tools: readonly MikanHarnessTool[];\n servers?: readonly McpServerSummary[];\n executeNested: (\n tool: MikanHarnessTool,\n args: Parameters<MikanHarnessTool[\"execute\"]>,\n ) => Promise<MikanToolResult>;\n}\n\nexport type MikanToolInput = AgentTool | MikanHarnessTool;\n\nexport interface MikanAgentSessionOptions {\n systemPrompt: string;\n model: Model<Api>;\n thinkingLevel: ThinkingLevel;\n tools: MikanToolInput[];\n toolContext?: MikanToolContext;\n models: MikanModels;\n sessionStore: SessionStore;\n settings?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n };\n}\n\nexport interface McpServerConfig {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n disabled?: boolean;\n exposure?: McpExposure;\n description?: string;\n}\n\nexport type McpExposure = \"codemode\" | \"deferred\";\n\nexport interface McpServerSummary {\n name: string;\n exposure: McpExposure;\n description?: string;\n instructions?: string;\n}\n\ntype McpPresetCredentialTarget = \"env\" | \"header\" | \"url\";\n\ninterface McpPresetCredential {\n key: string;\n label: string;\n description: string;\n target: McpPresetCredentialTarget;\n required: boolean;\n secret: boolean;\n valuePrefix?: string;\n}\n\nexport interface McpPreset {\n id: string;\n name: string;\n description: string;\n category: string;\n serverName: string;\n sourceUrl: string;\n setupUrl: string;\n server: McpServerConfig;\n credentials: McpPresetCredential[];\n}\n\nexport interface McpLoadError {\n server: string;\n error: string;\n}\n\nexport interface McpToolsResult {\n tools: MikanHarnessTool[];\n errors: McpLoadError[];\n servers: McpServerSummary[];\n dispose: () => Promise<void>;\n}\n\nexport interface ToolTiming {\n label: string;\n toolName: string;\n durationMs: number;\n isError: boolean;\n}\n\nexport interface BudgetStopReport {\n reason: string;\n llmCalls: number;\n durationMs: number;\n completed: readonly ToolTiming[];\n running: readonly ToolTiming[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { OfficeAddress, PlatformTrustModel } from \"../types.js\";\nimport type { MikanAgentSession } from \"./session.js\";\nimport type { Api, ImageContent, Model, RetryPolicy, Usage } from \"@earendil-works/pi-ai\";\nimport type { ConversationResponder, MessagingInfo, SubagentProgressSnapshot } from \"../types.js\";\nimport type { resolveConversationSettings } from \"../settings/index.js\";\nimport type { Executor, RuntimePathContext, SandboxConfig } from \"../sandbox/types.js\";\nimport type { WorkspaceProjection, Office } from \"../office/types.js\";\n\nimport type { AgentMessage, AgentTool, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { Context, JsonValue } from \"@earendil-works/chord\";\nimport type {\n CompactionPolicy,\n ToolControl,\n ToolExecutionApi,\n ToolRegistration,\n} from \"@earendil-works/pi-durable\";\nimport type { ExecutionEnv } from \"@earendil-works/pi-durable/env\";\nimport type { JsonValue as ModelJsonValue, TextContent } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"./models.js\";\nimport type { SessionStore } from \"../sessions/session-store.js\";\nimport type { Static, TSchema } from \"typebox\";\n\nexport interface EnsureDefaultOpenConnectorOptions {\n office: Office;\n platformWorkspaceId?: string;\n defaultServer?: McpServerConfig;\n signal?: AbortSignal;\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface ScratchListing {\n folders: string[];\n omitted: number;\n}\n\nexport interface BuildSystemPromptOptions {\n workspacePath: string;\n office: Office;\n memory: string;\n sandboxConfig: SandboxConfig;\n platform: MessagingInfo;\n skills: MikanSkill[];\n projection: WorkspaceProjection;\n skippedSkillLinks?: string[];\n scratch: ScratchListing;\n}\n\nexport interface RunnerSessionState {\n responder: ConversationResponder | null;\n logCtx: {\n conversationId: string;\n userName?: string;\n conversationName?: string;\n sessionId?: string;\n } | null;\n queue: {\n enqueue(fn: () => Promise<void>, errorContext: string): void;\n } | null;\n pendingTools: Map<string, { toolName: string; args: unknown; startTime: number }>;\n completedTools: ToolTiming[];\n toolProgress: Map<string, { label: string; status: \"running\" | \"done\" | \"error\" }>;\n subagentProgress: Map<string, SubagentProgressSnapshot>;\n completedSubagentProgress: SubagentProgressSnapshot[];\n subagentToolCalls: Set<string>;\n subagentProgressShown: boolean;\n suppressResponseDeltas: boolean;\n answerStreamStarted: boolean;\n answerText: string;\n notice: string;\n workAcknowledged: boolean;\n publishRunEvent: RunEventListener | undefined;\n lastSubagentProgressAt: number;\n toolProgressTimer: ReturnType<typeof setTimeout> | undefined;\n llmCallCount: number;\n toolCallCount: number;\n toolErrorCount: number;\n toolInputCharacters: number;\n toolOutputCharacters: number;\n assistantMessageCount: number;\n outputCharacters: number;\n retryCount: number;\n compactionCount: number;\n budgetExceeded: boolean;\n firstTokenLatencyMs?: number;\n responseModel?: string;\n stopReason: string;\n errorMessage: string | undefined;\n reportedLlmError: boolean;\n finalResponseHandledByTool: boolean;\n triggerAttribution?: string;\n}\n\nexport interface UsageReportContext {\n session: MikanAgentSession;\n runState: RunnerSessionState;\n responder: ConversationResponder;\n platform: MessagingInfo;\n model: Model<Api>;\n sessionConversation: string;\n sessionUuid: string;\n waitForQueue: () => Promise<void>;\n}\n\nexport interface RunnerExecutionContext {\n executor: Executor;\n resolveForRun(context: {\n address: OfficeAddress;\n userId: string;\n trustModel?: PlatformTrustModel;\n }): Promise<{\n pathContext: RuntimePathContext;\n projection: WorkspaceProjection;\n }>;\n}\n\nexport interface RunPresentation {\n wait(): Promise<void>;\n dispose(): void;\n}\n\nexport interface RunPresentationContext {\n responder: ConversationResponder;\n sessionConversation: string;\n userName: string | undefined;\n sessionUuid: string;\n triggerAttribution: string | undefined;\n publishRunEvent?: RunEventListener;\n}\n\nexport interface PlatformToolRoles {\n platformTools: ReadonlySet<string>;\n finalResponseTools: ReadonlySet<string>;\n}\n\nexport interface SessionEventHandlerParams {\n session: MikanAgentSession;\n runState: RunnerSessionState;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n platformToolRoles: PlatformToolRoles;\n}\n\nexport interface FinalizeRunResponseOptions {\n triggerSessionLink?: string;\n createOverflowLink?: () => string;\n platform?: string;\n model?: Model<Api>;\n sessionConversation?: string;\n sessionUuid?: string;\n initialTask?: boolean;\n}\n\nexport interface PreparedRunContext {\n sessionConversation: string;\n userMessage: string;\n imageAttachments: ImageContent[];\n triggerAttribution?: string;\n}\n\nexport interface SubagentModelSpec {\n provider: string;\n id: string;\n}\n\nexport interface SubagentProfile {\n name: string;\n description: string;\n systemPrompt: string;\n tools: string[];\n model?: SubagentModelSpec;\n thinkingLevel?: ThinkingLevel;\n maxTurns?: number;\n maxTokens?: number;\n maxCostUsd?: number;\n maxDurationMs?: number;\n}\n\ninterface SubagentRunBudget {\n maxTurns?: number;\n maxTokens?: number;\n maxCostUsd?: number;\n maxDurationMs?: number;\n}\n\nexport type SubagentRunStatus =\n | \"completed\"\n | \"failed\"\n | \"cancelled\"\n | \"timeout\"\n | \"budget_exceeded\"\n | \"invalid_output\";\n\ninterface SubagentParentContext {\n mode: \"normalized\";\n recentTurns?: number;\n}\n\nexport type SubagentUsage = Usage;\n\nexport type SubagentUsageSink = (usage: SubagentUsage) => void | Promise<void>;\n\nexport interface SubagentRunRequest<TOutputSchema extends TSchema | undefined = undefined> {\n task: string;\n profile?: string;\n parentContext?: SubagentParentContext;\n systemPrompt?: string;\n input?: unknown;\n model?: SubagentModelSpec;\n tools?: string[];\n thinkingLevel?: ThinkingLevel;\n outputSchema?: TOutputSchema;\n budget?: SubagentRunBudget;\n signal?: AbortSignal;\n}\n\nexport type SubagentRunOutput<TSchemaOrUndefined extends TSchema | undefined> =\n TSchemaOrUndefined extends TSchema ? Static<TSchemaOrUndefined> : string;\n\ninterface SubagentRunMetadata {\n runId: string;\n text?: string;\n model: SubagentModelSpec;\n turns: number;\n toolCalls: number;\n toolCallCounts: Record<string, number>;\n usage: SubagentUsage;\n tokens: number;\n costUsd: number;\n durationMs: number;\n cleanupPending?: boolean;\n}\n\ninterface SubagentRunCompletedResult<TOutput> extends SubagentRunMetadata {\n status: \"completed\";\n output: TOutput;\n error?: never;\n}\n\ninterface SubagentRunIncompleteResult extends SubagentRunMetadata {\n status: Exclude<SubagentRunStatus, \"completed\">;\n output?: never;\n error?: string;\n}\n\nexport type SubagentRunResult<TOutput = string> =\n | SubagentRunCompletedResult<TOutput>\n | SubagentRunIncompleteResult;\n\nexport interface CreateMikanModelsOptions {\n modelsJsonPath: string;\n}\n\nexport interface MikanSkill {\n name: string;\n description: string;\n content: string;\n filePath: string;\n disableModelInvocation?: boolean;\n baseDir: string;\n source: string;\n inline?: boolean;\n directory?: string;\n enabled?: boolean;\n}\n\nexport type SkillScope = \"global\" | \"conversation\";\n\nexport interface SkillPatterns {\n global: readonly string[];\n conversation: readonly string[];\n}\n\nexport interface SkillDiagnostic {\n type: \"warning\";\n message: string;\n path: string;\n code?: \"symlink\";\n}\n\nexport interface LoadSkillsResult {\n skills: MikanSkill[];\n diagnostics: SkillDiagnostic[];\n}\n\nexport type RetrySettings = RetryPolicy;\n\nexport interface BudgetSettings {\n maxTokens?: number;\n maxCostUsd?: number;\n maxDurationMs?: number;\n maxLlmCalls?: number;\n}\n\nexport type CompactionSettings = CompactionPolicy;\n\nexport interface HarnessSettings {\n compaction: CompactionSettings;\n retry: RetrySettings;\n budget: BudgetSettings;\n}\n\nexport type ToolLoopVerdict =\n | { kind: \"allow\" }\n | { kind: \"notice\"; text: string }\n | { kind: \"block\"; reason: string }\n | { kind: \"stop\"; reason: string };\n\nexport interface SubagentProfileDiagnostic {\n type: \"warning\";\n message: string;\n path: string;\n}\n\nexport interface LoadSubagentProfilesResult {\n profiles: Map<string, SubagentProfile>;\n diagnostics: SubagentProfileDiagnostic[];\n}\n\ntype CompactionReason = \"threshold\" | \"overflow\" | \"manual\";\n\nexport type HarnessEvent =\n | { type: \"message_start\"; message: AgentMessage }\n | { type: \"text_delta\"; delta: string }\n | { type: \"message_end\"; message: AgentMessage }\n | { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: unknown }\n | { type: \"tool_execution_update\"; toolCallId: string; toolName: string; details: JsonValue }\n | {\n type: \"tool_execution_end\";\n toolCallId: string;\n toolName: string;\n result: { content: (TextContent | ImageContent)[]; details?: unknown };\n isError: boolean;\n }\n | { type: \"compaction_start\"; reason: CompactionReason }\n | {\n type: \"compaction_end\";\n reason: CompactionReason;\n aborted: boolean;\n errorMessage?: string;\n }\n | {\n type: \"auto_retry_start\";\n attempt: number;\n maxAttempts: number;\n delayMs: number;\n errorMessage: string;\n }\n | { type: \"auto_retry_end\"; success: boolean; attempt: number; finalError?: string }\n | {\n type: \"budget_exceeded\";\n reason: string;\n tokens: number;\n costUsd: number;\n llmCalls: number;\n durationMs: number;\n };\n\nexport type HarnessEventListener = (event: HarnessEvent) => void | Promise<void>;\n\nexport type RunEvent =\n | { type: \"tool_started\"; toolCallId: string; toolName: string; label: string }\n | { type: \"subagent_progress\"; toolCallId: string; snapshot: SubagentProgressSnapshot }\n | {\n type: \"tool_ended\";\n toolCallId: string;\n toolName: string;\n isError: boolean;\n resultText: string;\n }\n | { type: \"assistant_delta\"; delta: string }\n | { type: \"assistant_message\"; thinking: string[]; text: string; callsTools: boolean }\n | { type: \"compaction_started\" }\n | { type: \"retry_started\"; attempt: number; maxAttempts: number }\n | { type: \"budget_exceeded\"; reason: string; llmCalls: number; durationMs: number }\n | { type: \"run_started\"; userName: string; text: string }\n | { type: \"run_ended\" };\n\nexport type RunEventListener = (event: RunEvent) => void;\n\nexport interface RunEventPublisher {\n publish(address: OfficeAddress, sessionKey: string, event: RunEvent): void;\n}\n\nexport interface MikanToolContext {\n env: ExecutionEnv;\n}\n\nexport interface MikanToolResult {\n content?: (TextContent | ImageContent)[];\n details?: JsonValue;\n isError?: boolean;\n structuredContent?: ModelJsonValue;\n usage?: Usage;\n control?: ToolControl;\n}\n\nexport type MikanHarnessTool = Omit<ToolRegistration, \"execute\"> & {\n outputSchema?: TSchema;\n exposure?: McpExposure;\n namespace?: string;\n execute(args: unknown, api: ToolExecutionApi, context: Context): Promise<MikanToolResult>;\n};\n\nexport interface ToolSearchOptions {\n tools: readonly MikanHarnessTool[];\n query: string;\n limit?: number;\n namespace?: string;\n}\n\nexport interface ToolSearchToolOptions {\n tools: readonly MikanHarnessTool[];\n loaded: ReadonlySet<string>;\n load: (names: string[], context: Context) => Promise<void>;\n}\n\nexport interface CodemodeToolOptions {\n tools: readonly MikanHarnessTool[];\n servers?: readonly McpServerSummary[];\n executeNested: (\n tool: MikanHarnessTool,\n args: Parameters<MikanHarnessTool[\"execute\"]>,\n ) => Promise<MikanToolResult>;\n}\n\nexport type MikanToolInput = AgentTool | MikanHarnessTool;\n\nexport interface MikanAgentSessionOptions {\n systemPrompt: string;\n model: Model<Api>;\n thinkingLevel: ThinkingLevel;\n tools: MikanToolInput[];\n toolContext?: MikanToolContext;\n models: MikanModels;\n sessionStore: SessionStore;\n settings?: {\n compaction?: Partial<CompactionSettings>;\n retry?: Partial<RetrySettings>;\n budget?: Partial<BudgetSettings>;\n };\n}\n\nexport interface McpServerConfig {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n url?: string;\n headers?: Record<string, string>;\n disabled?: boolean;\n exposure?: McpExposure;\n description?: string;\n}\n\nexport type McpExposure = \"codemode\" | \"deferred\";\n\nexport interface McpServerSummary {\n name: string;\n exposure: McpExposure;\n description?: string;\n instructions?: string;\n}\n\ntype McpPresetCredentialTarget = \"env\" | \"header\" | \"url\";\n\ninterface McpPresetCredential {\n key: string;\n label: string;\n description: string;\n target: McpPresetCredentialTarget;\n required: boolean;\n secret: boolean;\n valuePrefix?: string;\n}\n\nexport interface McpPreset {\n id: string;\n name: string;\n description: string;\n category: string;\n serverName: string;\n sourceUrl: string;\n setupUrl: string;\n server: McpServerConfig;\n credentials: McpPresetCredential[];\n}\n\nexport interface McpLoadError {\n server: string;\n error: string;\n}\n\nexport interface McpToolsResult {\n tools: MikanHarnessTool[];\n errors: McpLoadError[];\n servers: McpServerSummary[];\n dispose: () => Promise<void>;\n}\n\nexport interface ToolTiming {\n label: string;\n toolName: string;\n durationMs: number;\n isError: boolean;\n}\n\nexport interface BudgetStopReport {\n reason: string;\n llmCalls: number;\n durationMs: number;\n completed: readonly ToolTiming[];\n running: readonly ToolTiming[];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/conversation-runtime.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAEV,mBAAmB,EACnB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/conversation-runtime.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAEV,mBAAmB,EACnB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AA6CpB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAErB"}
|
|
@@ -11,6 +11,9 @@ import { formatNothingRunning, formatRestarting, formatStopped, formatStopping,
|
|
|
11
11
|
import { disabledVaultManager } from "../vault/index.js";
|
|
12
12
|
import { SessionLifecycle } from "./session-lifecycle.js";
|
|
13
13
|
import { errorMessage } from "../unknown-values.js";
|
|
14
|
+
import { SessionStore } from "../sessions/session-store.js";
|
|
15
|
+
import { stripTriggerSignature } from "../sessions/history-line.js";
|
|
16
|
+
import { isTaskRunId } from "../harness/tools/task.js";
|
|
14
17
|
function portalNotConfiguredTokenStore(portal) {
|
|
15
18
|
return {
|
|
16
19
|
create: () => {
|
|
@@ -167,6 +170,7 @@ class ConversationRuntimeImpl {
|
|
|
167
170
|
await this.waitForParentSession(address, sessionKey);
|
|
168
171
|
const lease = await this.acquireRunLease(options, sessionKey);
|
|
169
172
|
const { state } = lease;
|
|
173
|
+
state.detachOnShutdown = isTaskRunId(event.ts);
|
|
170
174
|
log.logInfo(`[${conversationId}] Starting run: ${event.text.substring(0, 50)}`);
|
|
171
175
|
const runPromise = this.sessions.settle(state, () => this.executeRun(options, sessionKey, state));
|
|
172
176
|
lease.release();
|
|
@@ -234,6 +238,9 @@ class ConversationRuntimeImpl {
|
|
|
234
238
|
if (result?.stopReason === "aborted") {
|
|
235
239
|
await postAbortNotice(state, bot, conversationId, context.platform.name);
|
|
236
240
|
}
|
|
241
|
+
else if (result && state.detachOnShutdown) {
|
|
242
|
+
await this.reportTaskOutcome(event.address, sessionKey, result.finalText ?? "");
|
|
243
|
+
}
|
|
237
244
|
if (result) {
|
|
238
245
|
this.memoryCapture?.capture({
|
|
239
246
|
office: this.options.workspace.office(event.address),
|
|
@@ -247,6 +254,14 @@ class ConversationRuntimeImpl {
|
|
|
247
254
|
recordGauge("agent.sessions.active", this.sessions.settlementCount() - 1);
|
|
248
255
|
}
|
|
249
256
|
}
|
|
257
|
+
async reportTaskOutcome(address, sessionKey, answer) {
|
|
258
|
+
try {
|
|
259
|
+
await SessionStore.reportTaskOutcome(this.options.workspace.office(address), sessionKey, stripTriggerSignature(answer));
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
log.logWarning(`[${sessionKey}] Could not report the task outcome`, errorMessage(error));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
250
265
|
async waitForParentSession(address, sessionKey) {
|
|
251
266
|
const conversationId = address.conversationId;
|
|
252
267
|
const office = this.options.workspace.office(address);
|