@geminixiang/mikan 1.4.0-beta.0 → 1.5.0-beta.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +43 -3
  2. package/dist/adapters/commands/desktop.d.ts +5 -0
  3. package/dist/adapters/commands/desktop.d.ts.map +1 -0
  4. package/dist/adapters/commands/desktop.js +58 -0
  5. package/dist/adapters/commands/desktop.js.map +1 -0
  6. package/dist/adapters/commands/manifest.d.ts.map +1 -1
  7. package/dist/adapters/commands/manifest.js +8 -0
  8. package/dist/adapters/commands/manifest.js.map +1 -1
  9. package/dist/adapters/commands/registry.d.ts.map +1 -1
  10. package/dist/adapters/commands/registry.js +2 -0
  11. package/dist/adapters/commands/registry.js.map +1 -1
  12. package/dist/adapters/commands/types.d.ts +3 -1
  13. package/dist/adapters/commands/types.d.ts.map +1 -1
  14. package/dist/adapters/commands/types.js.map +1 -1
  15. package/dist/adapters/slack/app-config.d.ts +27 -0
  16. package/dist/adapters/slack/app-config.d.ts.map +1 -0
  17. package/dist/adapters/slack/app-config.js +241 -0
  18. package/dist/adapters/slack/app-config.js.map +1 -0
  19. package/dist/adapters/slack/types.d.ts +46 -1
  20. package/dist/adapters/slack/types.d.ts.map +1 -1
  21. package/dist/adapters/slack/types.js.map +1 -1
  22. package/dist/adapters/web/desktop/index.d.ts +16 -0
  23. package/dist/adapters/web/desktop/index.d.ts.map +1 -0
  24. package/dist/adapters/web/desktop/index.js +163 -0
  25. package/dist/adapters/web/desktop/index.js.map +1 -0
  26. package/dist/adapters/web/desktop/page.d.ts +2 -0
  27. package/dist/adapters/web/desktop/page.d.ts.map +1 -0
  28. package/dist/adapters/web/desktop/page.js +83 -0
  29. package/dist/adapters/web/desktop/page.js.map +1 -0
  30. package/dist/adapters/web/desktop/types.d.ts +8 -0
  31. package/dist/adapters/web/desktop/types.d.ts.map +1 -0
  32. package/dist/adapters/web/desktop/types.js +2 -0
  33. package/dist/adapters/web/desktop/types.js.map +1 -0
  34. package/dist/adapters/web/server.d.ts +2 -0
  35. package/dist/adapters/web/server.d.ts.map +1 -1
  36. package/dist/adapters/web/server.js +19 -0
  37. package/dist/adapters/web/server.js.map +1 -1
  38. package/dist/cli/boot.d.ts.map +1 -1
  39. package/dist/cli/boot.js +4 -1
  40. package/dist/cli/boot.js.map +1 -1
  41. package/dist/cli/onboard.d.ts +3 -0
  42. package/dist/cli/onboard.d.ts.map +1 -1
  43. package/dist/cli/onboard.js +79 -3
  44. package/dist/cli/onboard.js.map +1 -1
  45. package/dist/cli/slack.d.ts +9 -0
  46. package/dist/cli/slack.d.ts.map +1 -0
  47. package/dist/cli/slack.js +96 -0
  48. package/dist/cli/slack.js.map +1 -0
  49. package/dist/cli/types.d.ts +2 -1
  50. package/dist/cli/types.d.ts.map +1 -1
  51. package/dist/cli/types.js.map +1 -1
  52. package/dist/harness/desktop.d.ts +16 -0
  53. package/dist/harness/desktop.d.ts.map +1 -0
  54. package/dist/harness/desktop.js +6 -0
  55. package/dist/harness/desktop.js.map +1 -0
  56. package/dist/harness/execution-resolver.d.ts +1 -0
  57. package/dist/harness/execution-resolver.d.ts.map +1 -1
  58. package/dist/harness/execution-resolver.js +5 -0
  59. package/dist/harness/execution-resolver.js.map +1 -1
  60. package/dist/harness/presenter.d.ts.map +1 -1
  61. package/dist/harness/presenter.js +6 -1
  62. package/dist/harness/presenter.js.map +1 -1
  63. package/dist/harness/runner.d.ts.map +1 -1
  64. package/dist/harness/runner.js +22 -1
  65. package/dist/harness/runner.js.map +1 -1
  66. package/dist/harness/session.d.ts +1 -1
  67. package/dist/harness/session.d.ts.map +1 -1
  68. package/dist/harness/session.js +30 -9
  69. package/dist/harness/session.js.map +1 -1
  70. package/dist/harness/tools/codemode.d.ts.map +1 -1
  71. package/dist/harness/tools/codemode.js +2 -2
  72. package/dist/harness/tools/codemode.js.map +1 -1
  73. package/dist/harness/tools/index.d.ts +2 -2
  74. package/dist/harness/tools/index.d.ts.map +1 -1
  75. package/dist/harness/tools/index.js +10 -2
  76. package/dist/harness/tools/index.js.map +1 -1
  77. package/dist/harness/tools/jev-browser.d.ts +12 -1
  78. package/dist/harness/tools/jev-browser.d.ts.map +1 -1
  79. package/dist/harness/tools/jev-browser.js +189 -30
  80. package/dist/harness/tools/jev-browser.js.map +1 -1
  81. package/dist/harness/tools/pi-tools.d.ts.map +1 -1
  82. package/dist/harness/tools/pi-tools.js +2 -1
  83. package/dist/harness/tools/pi-tools.js.map +1 -1
  84. package/dist/harness/tools/types.d.ts +4 -0
  85. package/dist/harness/tools/types.d.ts.map +1 -1
  86. package/dist/harness/tools/types.js.map +1 -1
  87. package/dist/harness/types.d.ts +2 -1
  88. package/dist/harness/types.d.ts.map +1 -1
  89. package/dist/harness/types.js.map +1 -1
  90. package/dist/main.js +29 -0
  91. package/dist/main.js.map +1 -1
  92. package/dist/runtime/conversation-runtime.js +7 -0
  93. package/dist/runtime/conversation-runtime.js.map +1 -1
  94. package/dist/sandbox/desktop.d.ts +30 -0
  95. package/dist/sandbox/desktop.d.ts.map +1 -0
  96. package/dist/sandbox/desktop.js +112 -0
  97. package/dist/sandbox/desktop.js.map +1 -0
  98. package/dist/sandbox/provisioner.d.ts +6 -2
  99. package/dist/sandbox/provisioner.d.ts.map +1 -1
  100. package/dist/sandbox/provisioner.js +41 -6
  101. package/dist/sandbox/provisioner.js.map +1 -1
  102. package/dist/sandbox/types.d.ts +19 -0
  103. package/dist/sandbox/types.d.ts.map +1 -1
  104. package/dist/sandbox/types.js.map +1 -1
  105. package/dist/types.d.ts +17 -1
  106. package/dist/types.d.ts.map +1 -1
  107. package/dist/types.js.map +1 -1
  108. package/package.json +9 -8
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/harness/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Office, Workspace } from \"../office/types.js\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { contentText, type Api, type Model } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"./models.js\";\nimport { SessionStore } from \"../sessions/session-store.js\";\nimport {\n CONTROL_INPUT_CUSTOM_TYPE,\n RUN_CAUSE_CUSTOM_TYPE,\n type ThreadRootMessage,\n} from \"../sessions/types.js\";\nimport { MikanAgentSession, DEFAULT_EVENT_BUDGET } from \"./session.js\";\nimport { runSubagent, DEFAULT_GLOBAL_SUBAGENT_SLOTS, SubagentSlotPool } from \"./subagent.js\";\nimport { loadSubagentProfiles } from \"./subagent-profiles.js\";\nimport { createMikanTools } from \"./tools/index.js\";\nimport { readRuntimeFile } from \"./tools/attach.js\";\nimport { createSubagentTool } from \"./tools/subagent.js\";\nimport { createHistoryTool } from \"./tools/history.js\";\nimport { adaptAgentTool } from \"./tools/pi-tools.js\";\nimport { withSecretRedaction } from \"./tools/secret-redaction.js\";\nimport { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type {\n ConversationMessage,\n ConversationResponder,\n MessagingInfo,\n PlatformName,\n} from \"../types.js\";\nimport { ActorExecutionResolver } from \"./execution-resolver.js\";\nimport type { DockerContainerManager } from \"../sandbox/provisioner.js\";\nimport {\n warnUnenforcedPrivateOffice,\n createSandboxEnv,\n getSandboxPathContext,\n} from \"../sandbox/registry.js\";\nimport type { RuntimePathContext, SandboxConfig } from \"../sandbox/types.js\";\nimport type { ExecutionEnv } from \"@earendil-works/pi-durable/env\";\nimport type { VaultManager } from \"../vault/types.js\";\nimport { resolveWorkspaceProjection } from \"../office/projection.js\";\nimport type {\n RunnerExecutionContext,\n PlatformToolRoles,\n PreparedRunContext,\n RunPresentation,\n RunEventListener,\n RunnerSessionState,\n MikanToolContext,\n} from \"./types.js\";\nimport type { CreateRunnerOptions, PiAgentWrapper } from \"../types.js\";\nimport { createHash } from \"node:crypto\";\nimport { loadSkillPatterns, resolveConversationSettings } from \"../settings/index.js\";\nimport { ensureDefaultOpenConnector } from \"./open-connector.js\";\nimport { OfficeEventStore } from \"../events/index.js\";\nimport { addLifecycleEvent, updateActiveSpanAttribution } from \"../observability/index.js\";\nimport type { ChatHistorySync } from \"../sessions/chat-history-sync.js\";\nimport { conversationIdOf, isThreadSessionKey } from \"../sessions/session-key.js\";\nimport type { PlatformToolPack } from \"./tools/types.js\";\nimport { isTaskRunId, START_TASK_TOOL, TASK_STATUS_TOOL } from \"./tools/task.js\";\nimport { loadMikanSkills } from \"./skills.js\";\nimport {\n buildPromptPayload,\n buildSystemPrompt,\n buildTurnInstructions,\n listScratchFolders,\n getMemory,\n resolveTriggerAttribution,\n} from \"./prompt.js\";\nimport {\n attachSessionEventHandlers,\n activateRunPresentation,\n createRunState,\n finalizeRunResponse,\n getFinalAssistantText,\n isEventTriggerAttribution,\n reportUsageSummary,\n} from \"./presenter.js\";\n\nimport * as log from \"../log.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst globalSubagentSlots = new SubagentSlotPool(DEFAULT_GLOBAL_SUBAGENT_SLOTS);\n\nasync function createConfiguredAgentSession(params: {\n workspaceDir: string;\n systemPrompt: string;\n model: Model<Api>;\n thinkingLevel: ThinkingLevel;\n tools: Awaited<ReturnType<typeof createMikanTools>>[\"tools\"];\n toolContext: MikanToolContext;\n sessionStore: SessionStore;\n models: MikanModels;\n}): Promise<MikanAgentSession> {\n const {\n workspaceDir,\n systemPrompt,\n model,\n thinkingLevel,\n tools,\n toolContext,\n sessionStore,\n models,\n } = params;\n const loadedProfiles = loadSubagentProfiles(workspaceDir);\n for (const diagnostic of loadedProfiles.diagnostics) {\n log.logWarning(`Subagent profile ignored: ${diagnostic.path}`, diagnostic.message);\n }\n\n const availableToolNames = new Set(tools.map((tool) => tool.name));\n const runnableProfiles = new Map(\n [...loadedProfiles.profiles].filter(([, profile]) =>\n profile.tools.every((tool) => availableToolNames.has(tool)),\n ),\n );\n let session: MikanAgentSession | undefined;\n const subagentTool = createSubagentTool(\n async (request, hooks) =>\n runSubagent({\n request,\n onActivity: hooks?.onActivity,\n defaultModel: model,\n thinkingLevel,\n models,\n availableTools: tools.filter(\n (tool) => ![START_TASK_TOOL, TASK_STATUS_TOOL].includes(tool.name),\n ),\n profiles: runnableProfiles,\n slots: globalSubagentSlots,\n toolContext,\n parentEntries: await session!.sessionStore.getContextEntries(),\n onUsage: session!.captureExternalUsageSink(),\n }),\n runnableProfiles,\n );\n\n session = new MikanAgentSession({\n systemPrompt,\n model,\n thinkingLevel,\n tools: [...tools, adaptAgentTool(subagentTool)],\n toolContext,\n models,\n sessionStore,\n });\n return session;\n}\n\nfunction createRunnerExecutionContext(\n sandboxConfig: SandboxConfig,\n vaultManager: VaultManager | undefined,\n provisioner: DockerContainerManager | undefined,\n workspace: Workspace,\n): RunnerExecutionContext {\n const resolver =\n vaultManager && sandboxConfig.type !== \"host\"\n ? new ActorExecutionResolver(sandboxConfig, vaultManager, provisioner, workspace)\n : undefined;\n if (!resolver) {\n const pathContext = getSandboxPathContext(sandboxConfig, workspace.root);\n const env = createSandboxEnv(sandboxConfig, { cwd: pathContext.runtimeWorkspaceRoot });\n return {\n env: () => env,\n sandboxConfig: () => sandboxConfig,\n async resolveForRun(context) {\n return {\n pathContext,\n projection: resolveWorkspaceProjection(workspace.office(context.address)),\n };\n },\n };\n }\n\n let resolved: { env: ExecutionEnv; sandboxConfig: SandboxConfig } | undefined;\n return {\n env: () => resolved?.env,\n sandboxConfig: () => resolved?.sandboxConfig ?? sandboxConfig,\n async resolveForRun(context) {\n const decision = await resolver.resolve(context);\n resolved = decision;\n return { pathContext: decision.pathContext, projection: decision.projection };\n },\n };\n}\n\nconst THREAD_SESSION_NAME_MAX_CHARS = 80;\n\nfunction buildThreadSessionName(message: ThreadRootMessage | null): string | undefined {\n const firstLine = message?.text\n ?.split(\"\\n\")\n .map((line) => line.trim())\n .find(Boolean);\n if (!firstLine) return undefined;\n const chars = Array.from(firstLine);\n const title =\n chars.length > THREAD_SESSION_NAME_MAX_CHARS\n ? `${chars.slice(0, THREAD_SESSION_NAME_MAX_CHARS).join(\"\")}…`\n : firstLine;\n const userLabel = message?.userName || message?.user || \"unknown\";\n return `[${userLabel}]: ${title}`;\n}\n\nasync function ensureDefaultMcpServers(options: {\n office: Office;\n trustModel: CreateRunnerOptions[\"trustModel\"];\n platformWorkspaceId?: string;\n openConnector?: CreateRunnerOptions[\"openConnector\"];\n signal?: AbortSignal;\n}): Promise<void> {\n if (options.trustModel === \"open-trigger\") return;\n try {\n await ensureDefaultOpenConnector({\n office: options.office,\n platformWorkspaceId: options.platformWorkspaceId,\n defaultServer: options.openConnector,\n signal: options.signal,\n });\n } catch (error) {\n options.signal?.throwIfAborted();\n log.logWarning(\n `[${options.office.address.conversationId}] OpenConnector default provisioning failed`,\n errorMessage(error),\n );\n }\n}\n\ninterface PrepareRunParams {\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n office: Office;\n execution: RunnerExecutionContext;\n session: MikanAgentSession;\n bindTools: ReturnType<typeof createMikanTools>[\"bindRun\"];\n}\n\ninterface RunPromptContext {\n pathContext: RuntimePathContext;\n memory: string;\n systemPrompt: string;\n triggerAttribution: string | undefined;\n}\n\nasync function preparePromptContext(params: PrepareRunParams): Promise<RunPromptContext> {\n const { message, platform, office, execution, session } = params;\n const conversationId = office.address.conversationId;\n const decision = await execution.resolveForRun({\n address: message.address,\n userId: message.userId,\n trustModel: platform.trustModel,\n });\n const { pathContext, projection } = decision;\n const memory = getMemory(projection);\n const conversationSkillLoad = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n loadSkillPatterns(office),\n );\n const triggerAttribution = resolveTriggerAttribution(message);\n const systemPrompt = buildSystemPrompt({\n workspacePath: pathContext.runtimeWorkspaceRoot,\n office,\n memory,\n sandboxConfig: execution.sandboxConfig(),\n platform,\n skills: conversationSkillLoad.skills,\n projection,\n skippedSkillLinks: conversationSkillLoad.skippedSkillLinks,\n scratch: listScratchFolders(office),\n });\n session.setSystemPrompt(systemPrompt);\n const promptHash = createHash(\"sha256\").update(systemPrompt).digest(\"hex\").slice(0, 8);\n log.logInfo(\n `[${conversationId}] System prompt (base): ${systemPrompt.length} chars, sha ${promptHash}`,\n );\n return { pathContext, memory, systemPrompt, triggerAttribution };\n}\n\nasync function prepareRunContext(params: PrepareRunParams): Promise<PreparedRunContext> {\n const { message, platform, office, execution } = params;\n const sessionConversation = conversationIdOf(message.sessionKey);\n await mkdir(join(office.dir, \"scratch\"), { recursive: true });\n const { pathContext, memory, systemPrompt, triggerAttribution } =\n await preparePromptContext(params);\n params.bindTools({\n message,\n responder: params.responder,\n platformName: platform.name,\n runtimeWorkspaceRoot: pathContext.runtimeWorkspaceRoot,\n });\n\n log.logInfo(\n `Context sizes - system: ${systemPrompt.length} chars, memory: ${memory.length} chars`,\n );\n log.logInfo(`Channels: ${platform.channels.length}, Users: ${platform.users.length}`);\n\n const { userMessage, imageAttachments } = await buildPromptPayload(\n message,\n pathContext.runtimeWorkspaceRoot,\n pathContext,\n async (runtimePath) =>\n Buffer.from(await readRuntimeFile(execution.env(), runtimePath)).toString(\"base64\"),\n );\n const turnInstructions = buildTurnInstructions(message.id.match(/^event:([^:]+)/)?.[1]);\n const finalUserMessage = turnInstructions ? `${turnInstructions}\\n\\n${userMessage}` : userMessage;\n return {\n sessionConversation,\n userMessage: finalUserMessage,\n imageAttachments,\n triggerAttribution,\n };\n}\n\nasync function buildInitialSystemPrompt(params: {\n office: Office;\n pathContext: RuntimePathContext;\n projection: ReturnType<typeof resolveWorkspaceProjection>;\n sandboxConfig: CreateRunnerOptions[\"sandboxConfig\"];\n}): Promise<string> {\n const { office, pathContext, projection, sandboxConfig } = params;\n const memory = getMemory(projection);\n const { skills, skippedSkillLinks } = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n loadSkillPatterns(office),\n );\n return buildSystemPrompt({\n workspacePath: pathContext.runtimeWorkspaceRoot,\n office,\n memory,\n sandboxConfig,\n platform: {\n name: \"chat\",\n formattingGuide: \"\",\n channels: [],\n users: [],\n trustModel: \"membership\",\n },\n skills,\n projection,\n skippedSkillLinks,\n scratch: listScratchFolders(office),\n });\n}\n\nasync function rollbackRunnerResource(label: string, cleanup: () => Promise<void>): Promise<void> {\n try {\n await cleanup();\n } catch (error) {\n log.logWarning(`Runner rollback failed to ${label}`, String(error));\n }\n}\n\nasync function openRunnerSessionManager(params: {\n office: Office;\n sessionKey: string;\n threadRootMessage: ThreadRootMessage | null;\n}) {\n const { office, sessionKey, threadRootMessage } = params;\n const sessionManager = await SessionStore.open(office, sessionKey);\n try {\n const threadSessionName = buildThreadSessionName(threadRootMessage);\n if (\n isThreadSessionKey(sessionKey) &&\n threadSessionName &&\n (await sessionManager.getSessionName()) !== threadSessionName\n ) {\n await sessionManager.setSessionName(threadSessionName);\n }\n return sessionManager;\n } catch (error) {\n await rollbackRunnerResource(\"close the session writer\", () => sessionManager.close());\n throw error;\n }\n}\n\nasync function createRunnerAgentSession(params: {\n workspaceDir: string;\n systemPrompt: string;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n tools: ReturnType<typeof createMikanTools>[\"tools\"];\n toolContext: MikanToolContext;\n sessionManager: SessionStore;\n modelRegistry: MikanModels;\n conversationId: string;\n signal?: AbortSignal;\n}) {\n const {\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools,\n toolContext,\n sessionManager,\n modelRegistry,\n signal,\n } = params;\n const mcpTools = await sessionManager.connectMcp(agentConfig.mcpServers ?? {}, signal);\n return createConfiguredAgentSession({\n workspaceDir,\n systemPrompt,\n model,\n thinkingLevel: agentConfig.thinkingLevel,\n tools: [...tools, ...mcpTools.map(withSecretRedaction)],\n toolContext,\n sessionStore: sessionManager,\n models: modelRegistry,\n });\n}\n\ninterface PreparedTurnParams {\n prepared: PreparedRunContext;\n presentation: RunPresentation;\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n runState: RunnerSessionState;\n session: MikanAgentSession;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n sessionUuid: string;\n conversationId: string;\n office: Office;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n}\n\nasync function runPreparedTurn(params: PreparedTurnParams): Promise<{\n stopReason: string;\n errorMessage?: string;\n finalText: string;\n}> {\n const {\n prepared,\n presentation,\n message,\n responder,\n platform,\n runState,\n session,\n model,\n agentConfig,\n sessionUuid,\n conversationId,\n office,\n sessionView,\n } = params;\n if (runState.logCtx) {\n log.logAgentRunStart(runState.logCtx, model.provider, model.id, model.name);\n }\n\n updateActiveSpanAttribution({\n provider: model.provider,\n model: model.id,\n channel_id: prepared.sessionConversation,\n session_id: sessionUuid,\n \"mikan.input.message_count\": 1,\n \"mikan.input.characters\": prepared.userMessage.length,\n \"mikan.input.attachment_count\": message.attachments?.length ?? 0,\n \"mikan.input.image_count\": prepared.imageAttachments.length,\n \"mikan.input.has_text\": prepared.userMessage.length > 0,\n });\n addLifecycleEvent(\"agent.prompt.sent\", {\n provider: model.provider,\n model: agentConfig.model,\n channel_id: prepared.sessionConversation,\n session_id: sessionUuid,\n attachment_count: message.attachments?.length ?? 0,\n image_attachment_count: prepared.imageAttachments.length,\n });\n\n const isEventRun = message.id.startsWith(\"event:\");\n await session.sessionStore.appendCustomEntry(RUN_CAUSE_CUSTOM_TYPE, { messageId: message.id });\n await session.prompt(prepared.userMessage, {\n allowTaskHandoff: responder.startTask !== undefined,\n allowTaskStatus: responder.getTaskStatus !== undefined && !isTaskRunId(message.id),\n images: prepared.imageAttachments.length > 0 ? prepared.imageAttachments : undefined,\n budget: isEventRun ? DEFAULT_EVENT_BUDGET : undefined,\n });\n await presentation.wait();\n if (session.getLastRunStats().status === \"aborted\") runState.stopReason = \"aborted\";\n\n const sessionViewTokenStore = sessionView?.tokenStore;\n const sessionViewPortalBaseUrl = sessionView?.portalBaseUrl;\n let sessionViewLink: string | undefined;\n const createSessionViewLink =\n sessionViewTokenStore && sessionViewPortalBaseUrl\n ? () => {\n if (!sessionViewLink) {\n const token = sessionViewTokenStore.create({\n platform: platform.name as PlatformName,\n platformUserId: message.userId,\n conversationId,\n sessionKey: message.sessionKey,\n office,\n platformUserName: message.userName,\n });\n sessionViewLink = `${sessionViewPortalBaseUrl}/session?token=${token.token}`;\n }\n return sessionViewLink;\n }\n : undefined;\n\n await finalizeRunResponse(responder, session, runState, {\n initialTask: message.id.startsWith(\"task:\"),\n triggerSessionLink: isEventTriggerAttribution(prepared.triggerAttribution)\n ? createSessionViewLink?.()\n : undefined,\n createOverflowLink: createSessionViewLink,\n platform: platform.name,\n model,\n sessionConversation: prepared.sessionConversation,\n sessionUuid,\n });\n await reportUsageSummary({\n session,\n runState,\n responder,\n platform,\n model,\n sessionConversation: prepared.sessionConversation,\n sessionUuid,\n waitForQueue: presentation.wait,\n });\n return {\n stopReason: runState.stopReason,\n errorMessage: runState.errorMessage,\n finalText: getFinalAssistantText(session),\n };\n}\n\ntype MikanToolBindings = ReturnType<typeof createMikanTools>;\n\ninterface RunnerInterfaceParams {\n conversationId: string;\n sessionKey: string;\n office: Office;\n sessionUuid: string;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n runEvents: CreateRunnerOptions[\"runEvents\"];\n runState: RunnerSessionState;\n execution: RunnerExecutionContext;\n session: MikanAgentSession;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n sessionManager: SessionStore;\n chatSessionManager: ChatHistorySync;\n toolBindings: MikanToolBindings;\n}\n\nasync function steerRun(\n session: MikanAgentSession,\n activeMessage: ConversationMessage | undefined,\n message: ConversationMessage,\n): Promise<boolean> {\n if (!activeMessage) return false;\n await session.sessionStore.appendCustomEntry(CONTROL_INPUT_CUSTOM_TYPE, {\n messageId: message.id,\n });\n if (!session.isActiveRun)\n throw new Error(\"Task is preparing or settling. Please retry this update shortly.\");\n if (message.userId !== activeMessage.userId)\n throw new Error(\"Only the task's current actor can guide this run.\");\n if (message.attachments?.length)\n throw new Error(\"Stop the task before continuing with new attachments.\");\n if (!(await session.steer(`[${message.userName ?? message.userId}]: ${message.text}`))) {\n throw new Error(\"Task settled while receiving this update. Please send it again to continue.\");\n }\n return true;\n}\n\nasync function publishRunLifecycle<T>(\n publish: RunEventListener | undefined,\n message: ConversationMessage,\n run: () => Promise<T>,\n): Promise<T> {\n publish?.({\n type: \"run_started\",\n userName: message.userName ?? message.userId,\n text: message.text,\n });\n try {\n return await run();\n } finally {\n publish?.({ type: \"run_ended\" });\n }\n}\n\nfunction prepareRunnerTurn(\n params: RunnerInterfaceParams,\n message: ConversationMessage,\n responder: ConversationResponder,\n platform: MessagingInfo,\n): ReturnType<typeof prepareRunContext> {\n const { office, execution, session, toolBindings } = params;\n return prepareRunContext({\n message,\n responder,\n platform,\n office,\n execution,\n session,\n bindTools: toolBindings.bindRun,\n });\n}\n\nfunction createRunnerInterface(params: RunnerInterfaceParams): PiAgentWrapper {\n const {\n conversationId,\n sessionKey,\n office,\n sessionUuid,\n sessionView,\n runEvents,\n runState,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager,\n } = params;\n const publishRunEvent: RunEventListener | undefined = runEvents\n ? (event) => runEvents.publish(office.address, sessionKey, event)\n : undefined;\n let activeMessage: ConversationMessage | undefined;\n let stopped = false;\n return {\n steer: (message) => steerRun(session, activeMessage, message),\n compact: (instructions) => session.compact(instructions),\n async syncChatHistory(currentMessageId?: string): Promise<void> {\n await chatSessionManager.syncSessionManager({\n office,\n sessionKey,\n sessionManager,\n currentMessageId,\n });\n },\n\n async run(message, responder, platform) {\n activeMessage = message;\n stopped = false;\n let presentation: RunPresentation | undefined;\n return publishRunLifecycle(publishRunEvent, message, async () => {\n try {\n const prepared = await prepareRunnerTurn(params, message, responder, platform);\n if (stopped) return { stopReason: \"aborted\" };\n presentation = activateRunPresentation(runState, {\n responder,\n sessionConversation: prepared.sessionConversation,\n userName: message.userName,\n sessionUuid,\n triggerAttribution: prepared.triggerAttribution,\n publishRunEvent,\n });\n return await runPreparedTurn({\n prepared,\n presentation,\n message,\n responder,\n platform,\n runState,\n session,\n model,\n agentConfig,\n sessionUuid,\n conversationId,\n office,\n sessionView,\n });\n } finally {\n activeMessage = undefined;\n presentation?.dispose();\n }\n });\n },\n\n abort(): void {\n stopped = true;\n session.abort();\n },\n\n async dispose(): Promise<void> {\n await sessionManager.close();\n },\n\n getCurrentStep(): { toolName?: string; label?: string } | undefined {\n const first = runState.pendingTools.values().next().value;\n if (!first) return undefined;\n return {\n toolName: first.toolName,\n label: (first.args as { label?: string })?.label,\n };\n },\n };\n}\n\nasync function finishRunnerCreation(params: {\n options: CreateRunnerOptions;\n conversationId: string;\n workspaceDir: string;\n execution: RunnerExecutionContext;\n model: Model<Api>;\n modelRegistry: MikanModels;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n systemPrompt: string;\n sessionManager: SessionStore;\n toolBindings: MikanToolBindings;\n platformToolRoles: PlatformToolRoles;\n toolContext: MikanToolContext;\n}): Promise<PiAgentWrapper> {\n const {\n options,\n conversationId,\n workspaceDir,\n execution,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n platformToolRoles,\n toolContext,\n } = params;\n const { sessionKey, office, sessionView, chatHistory, runEvents } = options;\n try {\n const sessionUuid = sessionManager.getSessionId();\n const session = await createRunnerAgentSession({\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools: [\n ...toolBindings.tools,\n withSecretRedaction(adaptAgentTool(createHistoryTool({ office, sessionKey }))),\n ],\n toolContext,\n sessionManager,\n modelRegistry,\n conversationId,\n signal: options.signal,\n });\n options.signal?.throwIfAborted();\n\n const runState = createRunState();\n attachSessionEventHandlers({ session, runState, model, agentConfig, platformToolRoles });\n\n return createRunnerInterface({\n conversationId,\n sessionKey,\n office,\n sessionUuid,\n sessionView,\n runEvents,\n runState,\n execution,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager: chatHistory,\n toolBindings,\n });\n } catch (error) {\n await rollbackRunnerResource(\"close the session writer\", () => sessionManager.close());\n throw error;\n }\n}\n\nexport async function createRunner(options: CreateRunnerOptions): Promise<PiAgentWrapper> {\n options.signal?.throwIfAborted();\n const {\n sandboxConfig,\n sessionKey,\n office,\n trustModel,\n sessionScope,\n vaultManager,\n provisioner,\n resourceController,\n platformToolPackFactories,\n } = options;\n const conversationId = office.address.conversationId;\n const workspaceDir = office.workspace.root;\n await ensureDefaultMcpServers({\n office,\n trustModel,\n platformWorkspaceId: options.platformWorkspaceId,\n openConnector: options.openConnector,\n signal: options.signal,\n });\n options.signal?.throwIfAborted();\n const resolvedAgentConfig = resolveConversationSettings(office);\n const agentConfig = {\n ...resolvedAgentConfig,\n mcpServers: trustModel === \"open-trigger\" ? {} : (resolvedAgentConfig.mcpServers ?? {}),\n };\n\n const projection = resolveWorkspaceProjection(office);\n warnUnenforcedPrivateOffice(sandboxConfig, projection.visibility, office.key);\n const execution = createRunnerExecutionContext(\n sandboxConfig,\n vaultManager,\n provisioner,\n office.workspace,\n );\n const pathContext = getSandboxPathContext(sandboxConfig, workspaceDir);\n const toolContext: MikanToolContext = { env: execution.env };\n\n const modelRegistry = options.models;\n if (modelRegistry.getError()) {\n log.logWarning(\"models.json load error\", modelRegistry.getError()!);\n }\n const model = modelRegistry.resolve(agentConfig.provider, agentConfig.model);\n\n const platformToolPacks = (platformToolPackFactories ?? []).map((createPack) => createPack());\n const toolBindings = createMikanTools(\n execution.env,\n new OfficeEventStore(office, options.eventScheduler),\n { sandbox: sandboxConfig, resourceController: resourceController ?? provisioner },\n platformToolPacks,\n {\n model,\n getApiKey: () => modelRegistry.getApiKeyForProvider(model.provider),\n outputDir: office.dir,\n },\n async (systemPrompt, user, signal) => {\n const reply = await modelRegistry.models.completeSimple(\n model,\n { systemPrompt, messages: [{ role: \"user\", content: user, timestamp: Date.now() }] },\n { signal },\n );\n if (reply.stopReason === \"error\" || reply.stopReason === \"aborted\") {\n throw new Error(reply.errorMessage ?? `Text generation ${reply.stopReason}`);\n }\n return contentText(reply.content);\n },\n );\n\n const systemPrompt = await buildInitialSystemPrompt({\n office,\n pathContext,\n projection,\n sandboxConfig,\n });\n options.signal?.throwIfAborted();\n const { threadRootMessage } = sessionScope;\n const sessionManager = await openRunnerSessionManager({\n office,\n sessionKey,\n threadRootMessage,\n });\n return finishRunnerCreation({\n options,\n conversationId,\n workspaceDir,\n execution,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n platformToolRoles: collectPlatformToolRoles(platformToolPacks),\n toolContext,\n });\n}\n\nfunction collectPlatformToolRoles(packs: readonly PlatformToolPack[]): PlatformToolRoles {\n return {\n platformTools: new Set(packs.flatMap((pack) => pack.tools.map((tool) => tool.name))),\n finalResponseTools: new Set(packs.flatMap((pack) => pack.finalResponseTools ?? [])),\n };\n}\n"]}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/harness/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Office, Workspace } from \"../office/types.js\";\nimport type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { contentText, type Api, type Model } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"./models.js\";\nimport { SessionStore } from \"../sessions/session-store.js\";\nimport {\n CONTROL_INPUT_CUSTOM_TYPE,\n RUN_CAUSE_CUSTOM_TYPE,\n type ThreadRootMessage,\n} from \"../sessions/types.js\";\nimport { MikanAgentSession, DEFAULT_EVENT_BUDGET } from \"./session.js\";\nimport { runSubagent, DEFAULT_GLOBAL_SUBAGENT_SLOTS, SubagentSlotPool } from \"./subagent.js\";\nimport { loadSubagentProfiles } from \"./subagent-profiles.js\";\nimport { createMikanTools } from \"./tools/index.js\";\nimport { readRuntimeFile } from \"./tools/attach.js\";\nimport { createSubagentTool } from \"./tools/subagent.js\";\nimport { createHistoryTool } from \"./tools/history.js\";\nimport { adaptAgentTool } from \"./tools/pi-tools.js\";\nimport { withSecretRedaction } from \"./tools/secret-redaction.js\";\nimport { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type {\n ConversationMessage,\n ConversationResponder,\n MessagingInfo,\n PlatformName,\n} from \"../types.js\";\nimport { ActorExecutionResolver } from \"./execution-resolver.js\";\nimport type { DockerContainerManager } from \"../sandbox/provisioner.js\";\nimport {\n warnUnenforcedPrivateOffice,\n createSandboxEnv,\n getSandboxPathContext,\n} from \"../sandbox/registry.js\";\nimport type { RuntimePathContext, SandboxConfig } from \"../sandbox/types.js\";\nimport type { ExecutionEnv } from \"@earendil-works/pi-durable/env\";\nimport type { VaultManager } from \"../vault/types.js\";\nimport { resolveWorkspaceProjection } from \"../office/projection.js\";\nimport type {\n RunnerExecutionContext,\n PlatformToolRoles,\n PreparedRunContext,\n RunPresentation,\n RunEventListener,\n RunnerSessionState,\n MikanToolContext,\n} from \"./types.js\";\nimport type { CreateRunnerOptions, PiAgentWrapper } from \"../types.js\";\nimport { createHash } from \"node:crypto\";\nimport { loadSkillPatterns, resolveConversationSettings } from \"../settings/index.js\";\nimport { ensureDefaultOpenConnector } from \"./open-connector.js\";\nimport { OfficeEventStore } from \"../events/index.js\";\nimport { addLifecycleEvent, updateActiveSpanAttribution } from \"../observability/index.js\";\nimport type { ChatHistorySync } from \"../sessions/chat-history-sync.js\";\nimport { conversationIdOf, isThreadSessionKey } from \"../sessions/session-key.js\";\nimport type { DesktopAccess, PlatformToolPack } from \"./tools/types.js\";\nimport { isTaskRunId, START_TASK_TOOL, TASK_STATUS_TOOL } from \"./tools/task.js\";\nimport { loadMikanSkills } from \"./skills.js\";\nimport {\n buildPromptPayload,\n buildSystemPrompt,\n buildTurnInstructions,\n listScratchFolders,\n getMemory,\n resolveTriggerAttribution,\n} from \"./prompt.js\";\nimport {\n attachSessionEventHandlers,\n activateRunPresentation,\n createRunState,\n finalizeRunResponse,\n getFinalAssistantText,\n isEventTriggerAttribution,\n reportUsageSummary,\n} from \"./presenter.js\";\n\nimport * as log from \"../log.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\nconst globalSubagentSlots = new SubagentSlotPool(DEFAULT_GLOBAL_SUBAGENT_SLOTS);\n\nasync function createConfiguredAgentSession(params: {\n workspaceDir: string;\n systemPrompt: string;\n model: Model<Api>;\n thinkingLevel: ThinkingLevel;\n tools: Awaited<ReturnType<typeof createMikanTools>>[\"tools\"];\n toolContext: MikanToolContext;\n sessionStore: SessionStore;\n models: MikanModels;\n}): Promise<MikanAgentSession> {\n const {\n workspaceDir,\n systemPrompt,\n model,\n thinkingLevel,\n tools,\n toolContext,\n sessionStore,\n models,\n } = params;\n const loadedProfiles = loadSubagentProfiles(workspaceDir);\n for (const diagnostic of loadedProfiles.diagnostics) {\n log.logWarning(`Subagent profile ignored: ${diagnostic.path}`, diagnostic.message);\n }\n\n const availableToolNames = new Set(tools.map((tool) => tool.name));\n const runnableProfiles = new Map(\n [...loadedProfiles.profiles].filter(([, profile]) =>\n profile.tools.every((tool) => availableToolNames.has(tool)),\n ),\n );\n let session: MikanAgentSession | undefined;\n const subagentTool = createSubagentTool(\n async (request, hooks) =>\n runSubagent({\n request,\n onActivity: hooks?.onActivity,\n defaultModel: model,\n thinkingLevel,\n models,\n availableTools: tools.filter(\n (tool) => ![START_TASK_TOOL, TASK_STATUS_TOOL].includes(tool.name),\n ),\n profiles: runnableProfiles,\n slots: globalSubagentSlots,\n toolContext,\n parentEntries: await session!.sessionStore.getContextEntries(),\n onUsage: session!.captureExternalUsageSink(),\n }),\n runnableProfiles,\n );\n\n session = new MikanAgentSession({\n systemPrompt,\n model,\n thinkingLevel,\n tools: [...tools, adaptAgentTool(subagentTool)],\n toolContext,\n models,\n sessionStore,\n });\n return session;\n}\n\nfunction desktopAccess(\n options: Pick<CreateRunnerOptions, \"desktop\" | \"sandboxConfig\" | \"office\" | \"trustModel\">,\n): DesktopAccess | undefined {\n const desktop = options.desktop;\n if (!desktop?.portalBaseUrl || options.sandboxConfig.type !== \"oci\") return undefined;\n const { tokenStore, portalBaseUrl, open } = desktop;\n return {\n link: (platformUserId) => {\n const { token } = tokenStore.create({\n platform: options.office.address.platform,\n platformUserId,\n office: options.office,\n });\n return `${portalBaseUrl}/desktop?token=${token}`;\n },\n open: async (platformUserId) =>\n (await open({\n address: options.office.address,\n userId: platformUserId,\n trustModel: options.trustModel,\n })) === \"ready\",\n };\n}\n\nfunction createRunnerExecutionContext(\n sandboxConfig: SandboxConfig,\n vaultManager: VaultManager | undefined,\n provisioner: DockerContainerManager | undefined,\n workspace: Workspace,\n): RunnerExecutionContext {\n const resolver =\n vaultManager && sandboxConfig.type !== \"host\"\n ? new ActorExecutionResolver(sandboxConfig, vaultManager, provisioner, workspace)\n : undefined;\n if (!resolver) {\n const pathContext = getSandboxPathContext(sandboxConfig, workspace.root);\n const env = createSandboxEnv(sandboxConfig, { cwd: pathContext.runtimeWorkspaceRoot });\n return {\n env: () => env,\n sandboxConfig: () => sandboxConfig,\n async resolveForRun(context) {\n return {\n pathContext,\n projection: resolveWorkspaceProjection(workspace.office(context.address)),\n };\n },\n };\n }\n\n let resolved: { env: ExecutionEnv; sandboxConfig: SandboxConfig } | undefined;\n return {\n env: () => resolved?.env,\n sandboxConfig: () => resolved?.sandboxConfig ?? sandboxConfig,\n async resolveForRun(context) {\n const decision = await resolver.resolve(context);\n resolved = decision;\n return { pathContext: decision.pathContext, projection: decision.projection };\n },\n };\n}\n\nconst THREAD_SESSION_NAME_MAX_CHARS = 80;\n\nfunction buildThreadSessionName(message: ThreadRootMessage | null): string | undefined {\n const firstLine = message?.text\n ?.split(\"\\n\")\n .map((line) => line.trim())\n .find(Boolean);\n if (!firstLine) return undefined;\n const chars = Array.from(firstLine);\n const title =\n chars.length > THREAD_SESSION_NAME_MAX_CHARS\n ? `${chars.slice(0, THREAD_SESSION_NAME_MAX_CHARS).join(\"\")}…`\n : firstLine;\n const userLabel = message?.userName || message?.user || \"unknown\";\n return `[${userLabel}]: ${title}`;\n}\n\nasync function ensureDefaultMcpServers(options: {\n office: Office;\n trustModel: CreateRunnerOptions[\"trustModel\"];\n platformWorkspaceId?: string;\n openConnector?: CreateRunnerOptions[\"openConnector\"];\n signal?: AbortSignal;\n}): Promise<void> {\n if (options.trustModel === \"open-trigger\") return;\n try {\n await ensureDefaultOpenConnector({\n office: options.office,\n platformWorkspaceId: options.platformWorkspaceId,\n defaultServer: options.openConnector,\n signal: options.signal,\n });\n } catch (error) {\n options.signal?.throwIfAborted();\n log.logWarning(\n `[${options.office.address.conversationId}] OpenConnector default provisioning failed`,\n errorMessage(error),\n );\n }\n}\n\ninterface PrepareRunParams {\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n office: Office;\n execution: RunnerExecutionContext;\n session: MikanAgentSession;\n bindTools: ReturnType<typeof createMikanTools>[\"bindRun\"];\n}\n\ninterface RunPromptContext {\n pathContext: RuntimePathContext;\n memory: string;\n systemPrompt: string;\n triggerAttribution: string | undefined;\n}\n\nasync function preparePromptContext(params: PrepareRunParams): Promise<RunPromptContext> {\n const { message, platform, office, execution, session } = params;\n const conversationId = office.address.conversationId;\n const decision = await execution.resolveForRun({\n address: message.address,\n userId: message.userId,\n trustModel: platform.trustModel,\n });\n const { pathContext, projection } = decision;\n const memory = getMemory(projection);\n const conversationSkillLoad = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n loadSkillPatterns(office),\n );\n const triggerAttribution = resolveTriggerAttribution(message);\n const systemPrompt = buildSystemPrompt({\n workspacePath: pathContext.runtimeWorkspaceRoot,\n office,\n memory,\n sandboxConfig: execution.sandboxConfig(),\n platform,\n skills: conversationSkillLoad.skills,\n projection,\n skippedSkillLinks: conversationSkillLoad.skippedSkillLinks,\n scratch: listScratchFolders(office),\n });\n session.setSystemPrompt(systemPrompt);\n const promptHash = createHash(\"sha256\").update(systemPrompt).digest(\"hex\").slice(0, 8);\n log.logInfo(\n `[${conversationId}] System prompt (base): ${systemPrompt.length} chars, sha ${promptHash}`,\n );\n return { pathContext, memory, systemPrompt, triggerAttribution };\n}\n\nasync function prepareRunContext(params: PrepareRunParams): Promise<PreparedRunContext> {\n const { message, platform, office, execution } = params;\n const sessionConversation = conversationIdOf(message.sessionKey);\n await mkdir(join(office.dir, \"scratch\"), { recursive: true });\n const { pathContext, memory, systemPrompt, triggerAttribution } =\n await preparePromptContext(params);\n params.bindTools({\n message,\n responder: params.responder,\n platformName: platform.name,\n runtimeWorkspaceRoot: pathContext.runtimeWorkspaceRoot,\n });\n\n log.logInfo(\n `Context sizes - system: ${systemPrompt.length} chars, memory: ${memory.length} chars`,\n );\n log.logInfo(`Channels: ${platform.channels.length}, Users: ${platform.users.length}`);\n\n const { userMessage, imageAttachments } = await buildPromptPayload(\n message,\n pathContext.runtimeWorkspaceRoot,\n pathContext,\n async (runtimePath) =>\n Buffer.from(await readRuntimeFile(execution.env(), runtimePath)).toString(\"base64\"),\n );\n const turnInstructions = buildTurnInstructions(message.id.match(/^event:([^:]+)/)?.[1]);\n const finalUserMessage = turnInstructions ? `${turnInstructions}\\n\\n${userMessage}` : userMessage;\n return {\n sessionConversation,\n userMessage: finalUserMessage,\n imageAttachments,\n triggerAttribution,\n };\n}\n\nasync function buildInitialSystemPrompt(params: {\n office: Office;\n pathContext: RuntimePathContext;\n projection: ReturnType<typeof resolveWorkspaceProjection>;\n sandboxConfig: CreateRunnerOptions[\"sandboxConfig\"];\n}): Promise<string> {\n const { office, pathContext, projection, sandboxConfig } = params;\n const memory = getMemory(projection);\n const { skills, skippedSkillLinks } = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n loadSkillPatterns(office),\n );\n return buildSystemPrompt({\n workspacePath: pathContext.runtimeWorkspaceRoot,\n office,\n memory,\n sandboxConfig,\n platform: {\n name: \"chat\",\n formattingGuide: \"\",\n channels: [],\n users: [],\n trustModel: \"membership\",\n },\n skills,\n projection,\n skippedSkillLinks,\n scratch: listScratchFolders(office),\n });\n}\n\nasync function rollbackRunnerResource(label: string, cleanup: () => Promise<void>): Promise<void> {\n try {\n await cleanup();\n } catch (error) {\n log.logWarning(`Runner rollback failed to ${label}`, String(error));\n }\n}\n\nasync function openRunnerSessionManager(params: {\n office: Office;\n sessionKey: string;\n threadRootMessage: ThreadRootMessage | null;\n}) {\n const { office, sessionKey, threadRootMessage } = params;\n const sessionManager = await SessionStore.open(office, sessionKey);\n try {\n const threadSessionName = buildThreadSessionName(threadRootMessage);\n if (\n isThreadSessionKey(sessionKey) &&\n threadSessionName &&\n (await sessionManager.getSessionName()) !== threadSessionName\n ) {\n await sessionManager.setSessionName(threadSessionName);\n }\n return sessionManager;\n } catch (error) {\n await rollbackRunnerResource(\"close the session writer\", () => sessionManager.close());\n throw error;\n }\n}\n\nasync function createRunnerAgentSession(params: {\n workspaceDir: string;\n systemPrompt: string;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n tools: ReturnType<typeof createMikanTools>[\"tools\"];\n toolContext: MikanToolContext;\n sessionManager: SessionStore;\n modelRegistry: MikanModels;\n conversationId: string;\n signal?: AbortSignal;\n}) {\n const {\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools,\n toolContext,\n sessionManager,\n modelRegistry,\n signal,\n } = params;\n const mcpTools = await sessionManager.connectMcp(agentConfig.mcpServers ?? {}, signal);\n return createConfiguredAgentSession({\n workspaceDir,\n systemPrompt,\n model,\n thinkingLevel: agentConfig.thinkingLevel,\n tools: [...tools, ...mcpTools.map(withSecretRedaction)],\n toolContext,\n sessionStore: sessionManager,\n models: modelRegistry,\n });\n}\n\ninterface PreparedTurnParams {\n prepared: PreparedRunContext;\n presentation: RunPresentation;\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n runState: RunnerSessionState;\n session: MikanAgentSession;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n sessionUuid: string;\n conversationId: string;\n office: Office;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n}\n\nasync function runPreparedTurn(params: PreparedTurnParams): Promise<{\n stopReason: string;\n errorMessage?: string;\n finalText: string;\n}> {\n const {\n prepared,\n presentation,\n message,\n responder,\n platform,\n runState,\n session,\n model,\n agentConfig,\n sessionUuid,\n conversationId,\n office,\n sessionView,\n } = params;\n if (runState.logCtx) {\n log.logAgentRunStart(runState.logCtx, model.provider, model.id, model.name);\n }\n\n updateActiveSpanAttribution({\n provider: model.provider,\n model: model.id,\n channel_id: prepared.sessionConversation,\n session_id: sessionUuid,\n \"mikan.input.message_count\": 1,\n \"mikan.input.characters\": prepared.userMessage.length,\n \"mikan.input.attachment_count\": message.attachments?.length ?? 0,\n \"mikan.input.image_count\": prepared.imageAttachments.length,\n \"mikan.input.has_text\": prepared.userMessage.length > 0,\n });\n addLifecycleEvent(\"agent.prompt.sent\", {\n provider: model.provider,\n model: agentConfig.model,\n channel_id: prepared.sessionConversation,\n session_id: sessionUuid,\n attachment_count: message.attachments?.length ?? 0,\n image_attachment_count: prepared.imageAttachments.length,\n });\n\n const isEventRun = message.id.startsWith(\"event:\");\n await session.sessionStore.appendCustomEntry(RUN_CAUSE_CUSTOM_TYPE, { messageId: message.id });\n await session.prompt(prepared.userMessage, {\n allowTaskHandoff: responder.startTask !== undefined,\n allowTaskStatus: responder.getTaskStatus !== undefined && !isTaskRunId(message.id),\n images: prepared.imageAttachments.length > 0 ? prepared.imageAttachments : undefined,\n budget: isEventRun ? DEFAULT_EVENT_BUDGET : undefined,\n });\n await presentation.wait();\n if (session.getLastRunStats().status === \"aborted\") runState.stopReason = \"aborted\";\n\n const sessionViewTokenStore = sessionView?.tokenStore;\n const sessionViewPortalBaseUrl = sessionView?.portalBaseUrl;\n let sessionViewLink: string | undefined;\n const createSessionViewLink =\n sessionViewTokenStore && sessionViewPortalBaseUrl\n ? () => {\n if (!sessionViewLink) {\n const token = sessionViewTokenStore.create({\n platform: platform.name as PlatformName,\n platformUserId: message.userId,\n conversationId,\n sessionKey: message.sessionKey,\n office,\n platformUserName: message.userName,\n });\n sessionViewLink = `${sessionViewPortalBaseUrl}/session?token=${token.token}`;\n }\n return sessionViewLink;\n }\n : undefined;\n\n await finalizeRunResponse(responder, session, runState, {\n initialTask: message.id.startsWith(\"task:\"),\n triggerSessionLink: isEventTriggerAttribution(prepared.triggerAttribution)\n ? createSessionViewLink?.()\n : undefined,\n createOverflowLink: createSessionViewLink,\n platform: platform.name,\n model,\n sessionConversation: prepared.sessionConversation,\n sessionUuid,\n });\n await reportUsageSummary({\n session,\n runState,\n responder,\n platform,\n model,\n sessionConversation: prepared.sessionConversation,\n sessionUuid,\n waitForQueue: presentation.wait,\n });\n return {\n stopReason: runState.stopReason,\n errorMessage: runState.errorMessage,\n finalText: getFinalAssistantText(session),\n };\n}\n\ntype MikanToolBindings = ReturnType<typeof createMikanTools>;\n\ninterface RunnerInterfaceParams {\n conversationId: string;\n sessionKey: string;\n office: Office;\n sessionUuid: string;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n runEvents: CreateRunnerOptions[\"runEvents\"];\n runState: RunnerSessionState;\n execution: RunnerExecutionContext;\n session: MikanAgentSession;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n sessionManager: SessionStore;\n chatSessionManager: ChatHistorySync;\n toolBindings: MikanToolBindings;\n}\n\nasync function steerRun(\n session: MikanAgentSession,\n activeMessage: ConversationMessage | undefined,\n message: ConversationMessage,\n): Promise<boolean> {\n if (!activeMessage) return false;\n await session.sessionStore.appendCustomEntry(CONTROL_INPUT_CUSTOM_TYPE, {\n messageId: message.id,\n });\n if (!session.isActiveRun)\n throw new Error(\"Task is preparing or settling. Please retry this update shortly.\");\n if (message.userId !== activeMessage.userId)\n throw new Error(\"Only the task's current actor can guide this run.\");\n if (message.attachments?.length)\n throw new Error(\"Stop the task before continuing with new attachments.\");\n if (!(await session.steer(`[${message.userName ?? message.userId}]: ${message.text}`))) {\n throw new Error(\"Task settled while receiving this update. Please send it again to continue.\");\n }\n return true;\n}\n\nasync function publishRunLifecycle<T>(\n publish: RunEventListener | undefined,\n message: ConversationMessage,\n run: () => Promise<T>,\n): Promise<T> {\n publish?.({\n type: \"run_started\",\n userName: message.userName ?? message.userId,\n text: message.text,\n });\n try {\n return await run();\n } finally {\n publish?.({ type: \"run_ended\" });\n }\n}\n\nfunction prepareRunnerTurn(\n params: RunnerInterfaceParams,\n message: ConversationMessage,\n responder: ConversationResponder,\n platform: MessagingInfo,\n): ReturnType<typeof prepareRunContext> {\n const { office, execution, session, toolBindings } = params;\n return prepareRunContext({\n message,\n responder,\n platform,\n office,\n execution,\n session,\n bindTools: toolBindings.bindRun,\n });\n}\n\nfunction createRunnerInterface(params: RunnerInterfaceParams): PiAgentWrapper {\n const {\n conversationId,\n sessionKey,\n office,\n sessionUuid,\n sessionView,\n runEvents,\n runState,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager,\n } = params;\n const publishRunEvent: RunEventListener | undefined = runEvents\n ? (event) => runEvents.publish(office.address, sessionKey, event)\n : undefined;\n let activeMessage: ConversationMessage | undefined;\n let stopped = false;\n return {\n steer: (message) => steerRun(session, activeMessage, message),\n compact: (instructions) => session.compact(instructions),\n async syncChatHistory(currentMessageId?: string): Promise<void> {\n await chatSessionManager.syncSessionManager({\n office,\n sessionKey,\n sessionManager,\n currentMessageId,\n });\n },\n\n async run(message, responder, platform) {\n activeMessage = message;\n stopped = false;\n let presentation: RunPresentation | undefined;\n return publishRunLifecycle(publishRunEvent, message, async () => {\n try {\n const prepared = await prepareRunnerTurn(params, message, responder, platform);\n if (stopped) return { stopReason: \"aborted\" };\n presentation = activateRunPresentation(runState, {\n responder,\n sessionConversation: prepared.sessionConversation,\n userName: message.userName,\n sessionUuid,\n triggerAttribution: prepared.triggerAttribution,\n publishRunEvent,\n });\n return await runPreparedTurn({\n prepared,\n presentation,\n message,\n responder,\n platform,\n runState,\n session,\n model,\n agentConfig,\n sessionUuid,\n conversationId,\n office,\n sessionView,\n });\n } finally {\n activeMessage = undefined;\n presentation?.dispose();\n }\n });\n },\n\n abort(): void {\n stopped = true;\n session.abort();\n },\n\n async dispose(): Promise<void> {\n await sessionManager.close();\n },\n\n getCurrentStep(): { toolName?: string; label?: string } | undefined {\n const first = runState.pendingTools.values().next().value;\n if (!first) return undefined;\n return {\n toolName: first.toolName,\n label: (first.args as { label?: string })?.label,\n };\n },\n };\n}\n\nasync function finishRunnerCreation(params: {\n options: CreateRunnerOptions;\n conversationId: string;\n workspaceDir: string;\n execution: RunnerExecutionContext;\n model: Model<Api>;\n modelRegistry: MikanModels;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n systemPrompt: string;\n sessionManager: SessionStore;\n toolBindings: MikanToolBindings;\n platformToolRoles: PlatformToolRoles;\n toolContext: MikanToolContext;\n}): Promise<PiAgentWrapper> {\n const {\n options,\n conversationId,\n workspaceDir,\n execution,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n platformToolRoles,\n toolContext,\n } = params;\n const { sessionKey, office, sessionView, chatHistory, runEvents } = options;\n try {\n const sessionUuid = sessionManager.getSessionId();\n const session = await createRunnerAgentSession({\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools: [\n ...toolBindings.tools,\n withSecretRedaction(adaptAgentTool(createHistoryTool({ office, sessionKey }))),\n ],\n toolContext,\n sessionManager,\n modelRegistry,\n conversationId,\n signal: options.signal,\n });\n options.signal?.throwIfAborted();\n\n const runState = createRunState();\n attachSessionEventHandlers({ session, runState, model, agentConfig, platformToolRoles });\n\n return createRunnerInterface({\n conversationId,\n sessionKey,\n office,\n sessionUuid,\n sessionView,\n runEvents,\n runState,\n execution,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager: chatHistory,\n toolBindings,\n });\n } catch (error) {\n await rollbackRunnerResource(\"close the session writer\", () => sessionManager.close());\n throw error;\n }\n}\n\nexport async function createRunner(options: CreateRunnerOptions): Promise<PiAgentWrapper> {\n options.signal?.throwIfAborted();\n const {\n sandboxConfig,\n sessionKey,\n office,\n trustModel,\n sessionScope,\n vaultManager,\n provisioner,\n resourceController,\n platformToolPackFactories,\n } = options;\n const conversationId = office.address.conversationId;\n const workspaceDir = office.workspace.root;\n await ensureDefaultMcpServers({\n office,\n trustModel,\n platformWorkspaceId: options.platformWorkspaceId,\n openConnector: options.openConnector,\n signal: options.signal,\n });\n options.signal?.throwIfAborted();\n const resolvedAgentConfig = resolveConversationSettings(office);\n const agentConfig = {\n ...resolvedAgentConfig,\n mcpServers: trustModel === \"open-trigger\" ? {} : (resolvedAgentConfig.mcpServers ?? {}),\n };\n\n const projection = resolveWorkspaceProjection(office);\n warnUnenforcedPrivateOffice(sandboxConfig, projection.visibility, office.key);\n const execution = createRunnerExecutionContext(\n sandboxConfig,\n vaultManager,\n provisioner,\n office.workspace,\n );\n const pathContext = getSandboxPathContext(sandboxConfig, workspaceDir);\n const toolContext: MikanToolContext = { env: execution.env };\n\n const modelRegistry = options.models;\n if (modelRegistry.getError()) {\n log.logWarning(\"models.json load error\", modelRegistry.getError()!);\n }\n const model = modelRegistry.resolve(agentConfig.provider, agentConfig.model);\n\n const platformToolPacks = (platformToolPackFactories ?? []).map((createPack) => createPack());\n const toolBindings = createMikanTools(\n execution.env,\n new OfficeEventStore(office, options.eventScheduler),\n { sandbox: sandboxConfig, resourceController: resourceController ?? provisioner },\n platformToolPacks,\n {\n model,\n getApiKey: () => modelRegistry.getApiKeyForProvider(model.provider),\n outputDir: office.dir,\n },\n async (systemPrompt, user, signal) => {\n const reply = await modelRegistry.models.completeSimple(\n model,\n { systemPrompt, messages: [{ role: \"user\", content: user, timestamp: Date.now() }] },\n { signal },\n );\n if (reply.stopReason === \"error\" || reply.stopReason === \"aborted\") {\n throw new Error(reply.errorMessage ?? `Text generation ${reply.stopReason}`);\n }\n return contentText(reply.content);\n },\n desktopAccess(options),\n );\n\n const systemPrompt = await buildInitialSystemPrompt({\n office,\n pathContext,\n projection,\n sandboxConfig,\n });\n options.signal?.throwIfAborted();\n const { threadRootMessage } = sessionScope;\n const sessionManager = await openRunnerSessionManager({\n office,\n sessionKey,\n threadRootMessage,\n });\n return finishRunnerCreation({\n options,\n conversationId,\n workspaceDir,\n execution,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n platformToolRoles: collectPlatformToolRoles(platformToolPacks),\n toolContext,\n });\n}\n\nfunction collectPlatformToolRoles(packs: readonly PlatformToolPack[]): PlatformToolRoles {\n return {\n platformTools: new Set(packs.flatMap((pack) => pack.tools.map((tool) => tool.name))),\n finalResponseTools: new Set(packs.flatMap((pack) => pack.finalResponseTools ?? [])),\n };\n}\n"]}
@@ -74,7 +74,7 @@ export declare class MikanAgentSession {
74
74
  private beforeCompact;
75
75
  private beforeRequest;
76
76
  private beforeTool;
77
- private afterTool;
77
+ private takeLoopNotice;
78
78
  private executeNestedTool;
79
79
  private checkToolLoop;
80
80
  private emit;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/harness/session.ts"],"names":[],"mappings":"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"}
@@ -335,9 +335,9 @@ export class MikanAgentSession {
335
335
  })));
336
336
  }
337
337
  const hasCodemode = tools.some((tool) => tool.name === "codemode");
338
- const registered = tools.map((tool) => hasCodemode && tool.exposure === undefined && isCodemodeCallable(tool)
338
+ const registered = tools.map((tool) => toPiTool(hasCodemode && tool.exposure === undefined && isCodemodeCallable(tool)
339
339
  ? withScriptCallNote(tool)
340
- : tool);
340
+ : tool));
341
341
  registry.install(defineExtension({
342
342
  name: extensionName,
343
343
  tools: registered,
@@ -354,7 +354,12 @@ export class MikanAgentSession {
354
354
  }),
355
355
  hook(ToolTask, {
356
356
  beforeTool: async (call, api) => this.beforeTool(call, api),
357
- afterTool: (call, result) => this.afterTool(call.id, result),
357
+ afterTool: (call, result) => {
358
+ const notice = this.takeLoopNotice(call.id);
359
+ return notice === undefined
360
+ ? undefined
361
+ : { ...result, output: withNotice(result.output, notice) };
362
+ },
358
363
  }),
359
364
  ],
360
365
  }));
@@ -362,7 +367,10 @@ export class MikanAgentSession {
362
367
  model: { provider: this.model.provider, modelId: this.model.id },
363
368
  thinkingLevel: this.options.thinkingLevel,
364
369
  extensions: [registry.snapshot().extension(extensionName)],
365
- tools: registered.filter((tool) => tool.exposure === undefined || loaded.has(tool.name)),
370
+ tools: registered.filter((_, index) => {
371
+ const tool = tools[index];
372
+ return tool.exposure === undefined || loaded.has(tool.name);
373
+ }),
366
374
  }, context);
367
375
  }
368
376
  beforeCompact(taskId) {
@@ -388,12 +396,10 @@ export class MikanAgentSession {
388
396
  }
389
397
  return this.checkToolLoop(call.id, call.name, call.arguments);
390
398
  }
391
- afterTool(callId, result) {
399
+ takeLoopNotice(callId) {
392
400
  const notice = this.loopNotices.get(callId);
393
- if (notice === undefined)
394
- return undefined;
395
401
  this.loopNotices.delete(callId);
396
- return { ...result, content: [...(result.content ?? []), { type: "text", text: notice }] };
402
+ return notice;
397
403
  }
398
404
  async executeNestedTool(tool, call) {
399
405
  const [args, api, toolContext] = call;
@@ -408,7 +414,9 @@ export class MikanAgentSession {
408
414
  throw new Error(verdict.block);
409
415
  toolContext.abortSignal?.throwIfAborted();
410
416
  result = await tool.execute(args, api, toolContext);
411
- result = this.afterTool(id, result) ?? result;
417
+ const notice = this.takeLoopNotice(id);
418
+ if (notice !== undefined)
419
+ result = { ...result, content: withNotice(result.content, notice) };
412
420
  }
413
421
  catch (error) {
414
422
  result = { content: [{ type: "text", text: errorMessage(error) }], isError: true };
@@ -779,4 +787,17 @@ function applyMessageChanges(content, changes) {
779
787
  }
780
788
  return next;
781
789
  }
790
+ function withNotice(content, notice) {
791
+ return [...(content ?? []), { type: "text", text: notice }];
792
+ }
793
+ function toPiTool(tool) {
794
+ const { outputSchema: _outputSchema, execute, ...registration } = tool;
795
+ return {
796
+ ...registration,
797
+ execute: async (args, api, toolContext) => {
798
+ const { content, structuredContent: _structured, ...result } = await execute(args, api, toolContext);
799
+ return { ...result, output: content };
800
+ },
801
+ };
802
+ }
782
803
  //# sourceMappingURL=session.js.map