@geminixiang/mikan 1.0.0-beta.48 → 1.0.0-beta.49

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 (56) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/adapters/discord/context.d.ts.map +1 -1
  3. package/dist/adapters/discord/context.js +2 -6
  4. package/dist/adapters/discord/context.js.map +1 -1
  5. package/dist/adapters/telegram/context.d.ts.map +1 -1
  6. package/dist/adapters/telegram/context.js +2 -4
  7. package/dist/adapters/telegram/context.js.map +1 -1
  8. package/dist/agent/presenter.d.ts +3 -10
  9. package/dist/agent/presenter.d.ts.map +1 -1
  10. package/dist/agent/presenter.js +35 -32
  11. package/dist/agent/presenter.js.map +1 -1
  12. package/dist/agent/runner.d.ts.map +1 -1
  13. package/dist/agent/runner.js +16 -22
  14. package/dist/agent/runner.js.map +1 -1
  15. package/dist/agent/types.d.ts +4 -6
  16. package/dist/agent/types.d.ts.map +1 -1
  17. package/dist/agent/types.js.map +1 -1
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +4 -2
  20. package/dist/config.js.map +1 -1
  21. package/dist/env-manifest.js +2 -2
  22. package/dist/env-manifest.js.map +1 -1
  23. package/dist/harness/models.d.ts.map +1 -1
  24. package/dist/harness/models.js +1 -4
  25. package/dist/harness/models.js.map +1 -1
  26. package/dist/harness/session-store.d.ts.map +1 -1
  27. package/dist/harness/session-store.js +2 -5
  28. package/dist/harness/session-store.js.map +1 -1
  29. package/dist/harness/subagent-runner.d.ts.map +1 -1
  30. package/dist/harness/subagent-runner.js +1 -8
  31. package/dist/harness/subagent-runner.js.map +1 -1
  32. package/dist/harness/types.d.ts +2 -6
  33. package/dist/harness/types.d.ts.map +1 -1
  34. package/dist/harness/types.js.map +1 -1
  35. package/dist/main.js +5 -0
  36. package/dist/main.js.map +1 -1
  37. package/dist/mcp/catalog.d.ts.map +1 -1
  38. package/dist/mcp/catalog.js +0 -88
  39. package/dist/mcp/catalog.js.map +1 -1
  40. package/dist/mcp/open-connector.d.ts +1 -1
  41. package/dist/mcp/open-connector.d.ts.map +1 -1
  42. package/dist/mcp/open-connector.js +23 -22
  43. package/dist/mcp/open-connector.js.map +1 -1
  44. package/dist/runtime/conversation-runtime.js +1 -0
  45. package/dist/runtime/conversation-runtime.js.map +1 -1
  46. package/dist/runtime/session-lifecycle.d.ts +0 -1
  47. package/dist/runtime/session-lifecycle.d.ts.map +1 -1
  48. package/dist/runtime/session-lifecycle.js +1 -4
  49. package/dist/runtime/session-lifecycle.js.map +1 -1
  50. package/dist/runtime/types.d.ts +3 -0
  51. package/dist/runtime/types.d.ts.map +1 -1
  52. package/dist/runtime/types.js.map +1 -1
  53. package/dist/types.d.ts +5 -1
  54. package/dist/types.d.ts.map +1 -1
  55. package/dist/types.js.map +1 -1
  56. package/package.json +1 -1
@@ -17,7 +17,7 @@ import { createMikanTools } from "../tools/index.js";
17
17
  import { createConfiguredAgentSession, loadMikanSkills } from "./catalog.js";
18
18
  import { createRunnerExecutionContext, normalizeAttachRuntimePath, withStagedRuntimeFile, } from "./execution.js";
19
19
  import { buildPromptPayload, buildSystemPrompt, buildTurnInstructions, getMemory, resolveTriggerAttribution, } from "./prompt.js";
20
- import { attachSessionEventHandlers, createRunQueue, createRunState, finalizeRunResponse, formatAgentActorName, isEventTriggerAttribution, reportUsageSummary, resetRunState, sendAgentEvent, } from "./presenter.js";
20
+ import { attachSessionEventHandlers, activateRunPresentation, createRunState, finalizeRunResponse, formatAgentActorName, isEventTriggerAttribution, reportUsageSummary, sendAgentEvent, } from "./presenter.js";
21
21
  function buildThreadSessionName(message) {
22
22
  const text = message?.text?.trim();
23
23
  if (!text)
@@ -28,7 +28,7 @@ function buildThreadSessionName(message) {
28
28
  async function resolveRunnerMcpServers(options) {
29
29
  if (options.trustModel === "open-trigger")
30
30
  return {};
31
- return provisionOfficeOpenConnectorToken(options.office, options.platformWorkspaceId, options.servers, options.signal);
31
+ return provisionOfficeOpenConnectorToken(options.office, options.platformWorkspaceId, options.servers, options.openConnector, options.signal);
32
32
  }
33
33
  async function preparePromptContext(params) {
34
34
  const { message, platform, office, executor, resolveForRun, session } = params;
@@ -92,20 +92,11 @@ function bindRunCapabilities(params, pathContext) {
92
92
  });
93
93
  }
94
94
  async function prepareRunContext(params) {
95
- const { message, responder, platform, office, sessionUuid, runState, executor } = params;
95
+ const { message, platform, office, executor } = params;
96
96
  const sessionConversation = conversationIdOf(message.sessionKey);
97
97
  await mkdir(join(office.dir, "scratch"), { recursive: true });
98
98
  const { pathContext, memory, systemPrompt, triggerAttribution } = await preparePromptContext(params);
99
99
  bindRunCapabilities(params, pathContext);
100
- resetRunState(runState, {
101
- responder,
102
- sessionConversation,
103
- userName: message.userName,
104
- sessionUuid,
105
- triggerAttribution,
106
- });
107
- const runQueue = createRunQueue(responder, runState);
108
- runState.queue = runQueue.queue;
109
100
  log.logInfo(`Context sizes - system: ${systemPrompt.length} chars, memory: ${memory.length} chars`);
110
101
  log.logInfo(`Channels: ${platform.channels.length}, Users: ${platform.users.length}`);
111
102
  const { userMessage, imageAttachments } = await buildPromptPayload(message, pathContext.runtimeWorkspaceRoot, pathContext, (runtimePath) => executor.readFileBase64(runtimePath));
@@ -113,7 +104,6 @@ async function prepareRunContext(params) {
113
104
  const finalUserMessage = turnInstructions ? `${turnInstructions}\n\n${userMessage}` : userMessage;
114
105
  return {
115
106
  sessionConversation,
116
- runQueue,
117
107
  userMessage: finalUserMessage,
118
108
  imageAttachments,
119
109
  triggerAttribution,
@@ -194,7 +184,7 @@ async function createRunnerAgentSession(params) {
194
184
  }
195
185
  }
196
186
  async function runPreparedTurn(params) {
197
- const { prepared, message, responder, platform, runState, session, model, agentConfig, sessionUuid, conversationId, contextFile, sessionView, } = params;
187
+ const { prepared, presentation, message, responder, platform, runState, session, model, agentConfig, sessionUuid, conversationId, contextFile, sessionView, } = params;
198
188
  if (runState.logCtx) {
199
189
  log.logAgentRunStart(runState.logCtx, model.provider, model.id, model.name);
200
190
  }
@@ -222,7 +212,7 @@ async function runPreparedTurn(params) {
222
212
  ...(prepared.imageAttachments.length > 0 ? { images: prepared.imageAttachments } : {}),
223
213
  ...(isEventRun ? { budget: DEFAULT_EVENT_BUDGET } : {}),
224
214
  });
225
- await prepared.runQueue.wait();
215
+ await presentation.wait();
226
216
  const sessionViewTokenStore = sessionView?.tokenStore;
227
217
  const sessionViewPortalBaseUrl = sessionView?.portalBaseUrl;
228
218
  let sessionViewLink;
@@ -243,7 +233,6 @@ async function runPreparedTurn(params) {
243
233
  }
244
234
  : undefined;
245
235
  await finalizeRunResponse(responder, session, runState, {
246
- triggerAttribution: prepared.triggerAttribution,
247
236
  triggerSessionLink: isEventTriggerAttribution(prepared.triggerAttribution)
248
237
  ? createSessionViewLink?.()
249
238
  : undefined,
@@ -262,7 +251,7 @@ async function runPreparedTurn(params) {
262
251
  agentConfig,
263
252
  sessionConversation: prepared.sessionConversation,
264
253
  sessionUuid,
265
- waitForQueue: () => prepared.runQueue.wait(),
254
+ waitForQueue: presentation.wait,
266
255
  });
267
256
  return { stopReason: runState.stopReason, errorMessage: runState.errorMessage };
268
257
  }
@@ -283,8 +272,6 @@ function createRunnerInterface(params) {
283
272
  responder,
284
273
  platform,
285
274
  office,
286
- sessionUuid,
287
- runState,
288
275
  executor,
289
276
  resolveForRun,
290
277
  session,
@@ -295,9 +282,17 @@ function createRunnerInterface(params) {
295
282
  setReactFunction: toolBindings.setReactFunction,
296
283
  bindPlatformToolPacks: toolBindings.bindPlatformToolPacks,
297
284
  });
285
+ const presentation = activateRunPresentation(runState, {
286
+ responder,
287
+ sessionConversation: prepared.sessionConversation,
288
+ userName: message.userName,
289
+ sessionUuid,
290
+ triggerAttribution: prepared.triggerAttribution,
291
+ });
298
292
  try {
299
293
  return await runPreparedTurn({
300
294
  prepared,
295
+ presentation,
301
296
  message,
302
297
  responder,
303
298
  platform,
@@ -312,9 +307,7 @@ function createRunnerInterface(params) {
312
307
  });
313
308
  }
314
309
  finally {
315
- runState.responder = null;
316
- runState.logCtx = null;
317
- runState.queue = null;
310
+ presentation.dispose();
318
311
  }
319
312
  },
320
313
  abort() {
@@ -402,6 +395,7 @@ export async function createRunner(options) {
402
395
  trustModel,
403
396
  platformWorkspaceId: options.platformWorkspaceId,
404
397
  servers: resolvedAgentConfig.mcpServers,
398
+ openConnector: options.openConnector,
405
399
  signal: options.signal,
406
400
  });
407
401
  options.signal?.throwIfAborted();
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CreateRunnerOptions, OfficeAddress, PiAgentWrapper } from \"../types.js\";\nimport type { Office } from \"../office/index.js\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { MikanAgentSession } from \"../harness/index.js\";\nimport { DEFAULT_EVENT_BUDGET, MikanModels } from \"../harness/index.js\";\nimport { createHash } from \"node:crypto\";\nimport { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type {\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingInfo,\n PlatformName,\n} from \"../adapter.js\";\nimport { resolveConversationSettings } from \"../config.js\";\nimport { resolveConversationPackages } from \"../packages/index.js\";\nimport { resolveWorkspaceProjection } from \"../workspace-projection/index.js\";\nimport * as log from \"../log.js\";\nimport { formatMcpServerInstructions, loadMcpTools } from \"../mcp/loader.js\";\nimport { provisionOfficeOpenConnectorToken } from \"../mcp/open-connector.js\";\nimport {\n assertSandboxSupportsWorkspacePolicy,\n getUnresolvedSandboxPathContext,\n type Executor,\n type RuntimePathContext,\n} from \"../sandbox/index.js\";\nimport { addLifecycleBreadcrumb, updateActiveSpanAttribution } from \"../observability/sentry.js\";\nimport { ChatHistorySync } from \"../sessions/chat-history-sync.js\";\nimport { conversationIdOf, isThreadSessionKey } from \"../sessions/session-key.js\";\nimport {\n extractSessionUuid,\n openManagedSession,\n type ThreadRootMessage,\n} from \"../sessions/store.js\";\nimport { createMikanTools } from \"../tools/index.js\";\nimport type { PlatformToolRunContext } from \"../tools/types.js\";\nimport { createConfiguredAgentSession, loadMikanSkills } from \"./catalog.js\";\nimport {\n createRunnerExecutionContext,\n normalizeAttachRuntimePath,\n withStagedRuntimeFile,\n} from \"./execution.js\";\nimport {\n buildPromptPayload,\n buildSystemPrompt,\n buildTurnInstructions,\n getMemory,\n resolveTriggerAttribution,\n} from \"./prompt.js\";\nimport {\n attachSessionEventHandlers,\n createRunQueue,\n createRunState,\n finalizeRunResponse,\n formatAgentActorName,\n isEventTriggerAttribution,\n reportUsageSummary,\n resetRunState,\n sendAgentEvent,\n} from \"./presenter.js\";\n\nimport type { PreparedRunContext, RunnerExecutionContext, RunnerSessionState } from \"./types.js\";\n\nfunction buildThreadSessionName(message: ThreadRootMessage | null): string | undefined {\n const text = message?.text?.trim();\n if (!text) return undefined;\n const userLabel = message?.userName || message?.user || \"unknown\";\n return `[${userLabel}]: ${text}`;\n}\n\nasync function resolveRunnerMcpServers(options: {\n office: Office;\n trustModel: CreateRunnerOptions[\"trustModel\"];\n platformWorkspaceId?: string;\n servers: ReturnType<typeof resolveConversationSettings>[\"mcpServers\"];\n signal?: AbortSignal;\n}): Promise<Awaited<ReturnType<typeof provisionOfficeOpenConnectorToken>>> {\n if (options.trustModel === \"open-trigger\") return {};\n return provisionOfficeOpenConnectorToken(\n options.office,\n options.platformWorkspaceId,\n options.servers,\n options.signal,\n );\n}\n\ntype PrepareRunParams = {\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n office: Office;\n sessionUuid: string;\n runState: RunnerSessionState;\n executor: Executor;\n resolveForRun: RunnerExecutionContext[\"resolveForRun\"];\n session: MikanAgentSession;\n setEventContext: (context: {\n platform: string;\n conversationId: string;\n conversationKind: ConversationKind;\n userId: string;\n }) => void;\n setSandboxContext: (context: { address: OfficeAddress; userId: string }) => void;\n setUploadFunction: (fn: (filePath: string, title?: string) => Promise<void>) => void;\n setImageUploadFunction: (fn: (hostPath: string, title?: string) => Promise<void>) => void;\n setReactFunction: (fn: ((emoji: string) => Promise<void>) | null) => void;\n bindPlatformToolPacks: (ctx: PlatformToolRunContext) => void;\n};\n\ntype 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, executor, resolveForRun, session } = params;\n const conversationId = office.address.conversationId;\n const decision = await resolveForRun({\n address: message.address,\n userId: message.userId,\n trustModel: platform.trustModel,\n });\n const { pathContext, projection, packages } = decision;\n for (const error of packages.errors) {\n log.logWarning(`Package unavailable: ${error.source}`, error.message);\n }\n\n const reloaded = await session.reloadFromSession();\n if (reloaded > 0) {\n log.logInfo(`[${conversationId}] Reloaded ${reloaded} messages from context`);\n }\n\n const memory = await getMemory(projection);\n const conversationSkillLoad = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n packages,\n );\n const triggerAttribution = resolveTriggerAttribution(message);\n const systemPrompt = buildSystemPrompt({\n workspacePath: pathContext.runtimeWorkspaceRoot,\n office,\n memory,\n sandboxConfig: executor.getSandboxConfig(),\n platform,\n skills: conversationSkillLoad.skills,\n projection,\n skippedSkillLinks: conversationSkillLoad.skippedSkillLinks,\n });\n session.agent.state.systemPrompt = systemPrompt;\n // A stable hash across turns verifies that turn-specific data did not leak\n // into the provider-cacheable system prompt.\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\nfunction bindRunCapabilities(params: PrepareRunParams, pathContext: RuntimePathContext): void {\n const {\n message,\n responder,\n platform,\n office,\n executor,\n setEventContext,\n setSandboxContext,\n setUploadFunction,\n setImageUploadFunction,\n setReactFunction,\n bindPlatformToolPacks,\n } = params;\n setEventContext({\n platform: platform.name,\n conversationId: office.address.conversationId,\n conversationKind: message.conversationKind,\n userId: message.userId,\n });\n setSandboxContext({ address: message.address, userId: message.userId });\n setUploadFunction(async (filePath: string, title?: string) => {\n const runtimePath = normalizeAttachRuntimePath(filePath, pathContext.runtimeWorkspaceRoot);\n await withStagedRuntimeFile(executor, runtimePath, (stagedPath) =>\n responder.uploadFile(stagedPath, title),\n );\n });\n // Generated images already live host-side and must not be staged through a sandbox.\n setImageUploadFunction(async (hostPath: string, title?: string) => {\n await responder.uploadFile(hostPath, title);\n });\n // Unset reaction support when the active responder cannot react.\n setReactFunction(responder.react ? async (emoji: string) => responder.react!(emoji) : null);\n bindPlatformToolPacks({\n conversationId: office.address.conversationId,\n platformName: platform.name,\n threadTs: message.threadTs,\n });\n}\n\nasync function prepareRunContext(params: PrepareRunParams): Promise<PreparedRunContext> {\n const { message, responder, platform, office, sessionUuid, runState, executor } = 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 bindRunCapabilities(params, pathContext);\n\n resetRunState(runState, {\n responder,\n sessionConversation,\n userName: message.userName,\n sessionUuid,\n triggerAttribution,\n });\n const runQueue = createRunQueue(responder, runState);\n runState.queue = runQueue.queue;\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 (runtimePath) => executor.readFileBase64(runtimePath),\n );\n const turnInstructions = buildTurnInstructions(\n message.id.startsWith(\"event:\"),\n triggerAttribution,\n platform.name,\n );\n const finalUserMessage = turnInstructions ? `${turnInstructions}\\n\\n${userMessage}` : userMessage;\n return {\n sessionConversation,\n runQueue,\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 = await getMemory(projection);\n const { skills, skippedSkillLinks } = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n resolveConversationPackages({ 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 });\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 contextFile: string;\n runtimeWorkspaceRoot: string;\n sessionKey: string;\n threadRootMessage: ThreadRootMessage | null;\n}) {\n const { contextFile, runtimeWorkspaceRoot, sessionKey, threadRootMessage } = params;\n const sessionManager = await openManagedSession(contextFile, runtimeWorkspaceRoot);\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 sessionManager: Awaited<ReturnType<typeof openManagedSession>>;\n modelRegistry: MikanModels;\n conversationId: string;\n signal?: AbortSignal;\n}) {\n const {\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools,\n sessionManager,\n modelRegistry,\n signal,\n } = params;\n const mcpResult = await loadMcpTools(agentConfig.mcpServers ?? {}, signal);\n for (const mcpError of mcpResult.errors) {\n log.logWarning(\n `[${params.conversationId}] MCP server unavailable: ${mcpError.server}`,\n mcpError.error,\n );\n }\n if (mcpResult.tools.length > 0) {\n log.logInfo(`[${params.conversationId}] Loaded ${mcpResult.tools.length} MCP tool(s)`);\n }\n try {\n signal?.throwIfAborted();\n const mcpInstructions = formatMcpServerInstructions(mcpResult.instructions);\n const session = await createConfiguredAgentSession({\n workspaceDir,\n systemPrompt: mcpInstructions ? `${systemPrompt}\\n\\n${mcpInstructions}` : systemPrompt,\n model,\n thinkingLevel: agentConfig.thinkingLevel,\n tools: [...tools, ...mcpResult.tools],\n sessionStore: sessionManager,\n models: modelRegistry,\n });\n return { mcpResult, session };\n } catch (error) {\n await rollbackRunnerResource(\"dispose MCP resources\", mcpResult.dispose);\n throw error;\n }\n}\n\ntype PreparedTurnParams = {\n prepared: PreparedRunContext;\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 contextFile: string;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n};\n\nasync function runPreparedTurn(params: PreparedTurnParams): Promise<{\n stopReason: string;\n errorMessage?: string;\n}> {\n const {\n prepared,\n message,\n responder,\n platform,\n runState,\n session,\n model,\n agentConfig,\n sessionUuid,\n conversationId,\n contextFile,\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: agentConfig.model,\n channel_id: prepared.sessionConversation,\n session_id: sessionUuid,\n });\n addLifecycleBreadcrumb(\"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 sendAgentEvent({\n sessionId: sessionUuid,\n actorName: formatAgentActorName(message.userName, prepared.sessionConversation),\n event: { kind: \"sessionStart\" },\n });\n\n const isEventRun = message.id.startsWith(\"event:\");\n await session.prompt(prepared.userMessage, {\n ...(prepared.imageAttachments.length > 0 ? { images: prepared.imageAttachments } : {}),\n ...(isEventRun ? { budget: DEFAULT_EVENT_BUDGET } : {}),\n });\n await prepared.runQueue.wait();\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 sessionFile: contextFile,\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 triggerAttribution: prepared.triggerAttribution,\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 agentConfig,\n sessionConversation: prepared.sessionConversation,\n sessionUuid,\n waitForQueue: () => prepared.runQueue.wait(),\n });\n return { stopReason: runState.stopReason, errorMessage: runState.errorMessage };\n}\n\ntype MikanToolBindings = ReturnType<typeof createMikanTools>;\n\ntype RunnerInterfaceParams = {\n conversationId: string;\n conversationDir: string;\n sessionKey: string;\n office: Office;\n sessionUuid: string;\n contextFile: string;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n runState: RunnerSessionState;\n executor: Executor;\n resolveForRun: RunnerExecutionContext[\"resolveForRun\"];\n session: MikanAgentSession;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n sessionManager: Awaited<ReturnType<typeof openManagedSession>>;\n chatSessionManager: ChatHistorySync;\n mcpResult: Awaited<ReturnType<typeof loadMcpTools>>;\n toolBindings: MikanToolBindings;\n};\n\nfunction createRunnerInterface(params: RunnerInterfaceParams): PiAgentWrapper {\n const {\n conversationId,\n conversationDir,\n sessionKey,\n office,\n sessionUuid,\n contextFile,\n sessionView,\n runState,\n executor,\n resolveForRun,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager,\n mcpResult,\n toolBindings,\n } = params;\n return {\n async syncChatHistory(currentMessageId?: string): Promise<void> {\n await chatSessionManager.syncSessionManager({\n conversationDir,\n sessionKey,\n sessionManager,\n currentMessageId,\n });\n },\n\n async run(message, responder, platform) {\n const prepared = await prepareRunContext({\n message,\n responder,\n platform,\n office,\n sessionUuid,\n runState,\n executor,\n resolveForRun,\n session,\n setEventContext: toolBindings.setEventContext,\n setSandboxContext: toolBindings.setSandboxContext,\n setUploadFunction: toolBindings.setUploadFunction,\n setImageUploadFunction: toolBindings.setImageUploadFunction,\n setReactFunction: toolBindings.setReactFunction,\n bindPlatformToolPacks: toolBindings.bindPlatformToolPacks,\n });\n try {\n return await runPreparedTurn({\n prepared,\n message,\n responder,\n platform,\n runState,\n session,\n model,\n agentConfig,\n sessionUuid,\n conversationId,\n contextFile,\n sessionView,\n });\n } finally {\n runState.responder = null;\n runState.logCtx = null;\n runState.queue = null;\n }\n },\n\n abort(): void {\n session.abort();\n },\n\n async dispose(): Promise<void> {\n try {\n await mcpResult.dispose();\n } finally {\n await sessionManager.close();\n }\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 conversationDir: string;\n workspaceDir: string;\n executor: Executor;\n resolveForRun: RunnerExecutionContext[\"resolveForRun\"];\n model: Model<Api>;\n modelRegistry: MikanModels;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n systemPrompt: string;\n sessionManager: Awaited<ReturnType<typeof openManagedSession>>;\n toolBindings: MikanToolBindings;\n}): Promise<PiAgentWrapper> {\n const {\n options,\n conversationId,\n conversationDir,\n workspaceDir,\n executor,\n resolveForRun,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n } = params;\n const { sessionKey, office, sessionScope, sessionView } = options;\n const { contextFile } = sessionScope;\n let acquiredMcpResult: Awaited<ReturnType<typeof loadMcpTools>> | undefined;\n try {\n const sessionUuid = extractSessionUuid(contextFile);\n const chatSessionManager = new ChatHistorySync();\n const { mcpResult, session } = await createRunnerAgentSession({\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools: toolBindings.tools,\n sessionManager,\n modelRegistry,\n conversationId,\n signal: options.signal,\n });\n acquiredMcpResult = mcpResult;\n options.signal?.throwIfAborted();\n\n const runState = createRunState();\n attachSessionEventHandlers({ session, runState, model, agentConfig });\n\n return createRunnerInterface({\n conversationId,\n conversationDir,\n sessionKey,\n office,\n sessionUuid,\n contextFile,\n sessionView,\n runState,\n executor,\n resolveForRun,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager,\n mcpResult,\n toolBindings,\n });\n } catch (error) {\n if (acquiredMcpResult) {\n await rollbackRunnerResource(\"dispose MCP resources\", acquiredMcpResult.dispose);\n }\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 conversationDir = office.dir;\n const workspaceDir = office.workspace.root;\n const resolvedAgentConfig = resolveConversationSettings(office);\n const mcpServers = await resolveRunnerMcpServers({\n office,\n trustModel,\n platformWorkspaceId: options.platformWorkspaceId,\n servers: resolvedAgentConfig.mcpServers,\n signal: options.signal,\n });\n options.signal?.throwIfAborted();\n const agentConfig = { ...resolvedAgentConfig, mcpServers };\n\n const projection = resolveWorkspaceProjection(office);\n // Bootstrap validation fails runner creation early. resolveForRun repeats\n // the check against the actor-specific decision before any provider call.\n assertSandboxSupportsWorkspacePolicy(\n sandboxConfig,\n projection.doorPolicy,\n projection.promptSources.globalMemoryReadOnly === true,\n );\n const { executor, resolveForRun } = createRunnerExecutionContext(\n sandboxConfig,\n vaultManager,\n provisioner,\n office.workspace,\n );\n const pathContext = getUnresolvedSandboxPathContext(sandboxConfig, workspaceDir);\n\n const modelRegistry = options.models ?? MikanModels.create();\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 // Create tools (per-runner, with per-runner upload function setter)\n const toolBindings = createMikanTools(\n executor,\n workspaceDir,\n { sandbox: sandboxConfig, resourceController: resourceController ?? provisioner },\n platformToolPackFactories ?? [],\n {\n model,\n getApiKey: () => modelRegistry.getApiKeyForProvider(model.provider),\n // The conversation's own office dir: mounted into the sandbox, unlike\n // the workspace base — generated images must land somewhere the agent\n // (and a future run) can still reach.\n outputDir: conversationDir,\n },\n );\n\n const systemPrompt = await buildInitialSystemPrompt({\n office,\n pathContext,\n projection,\n sandboxConfig,\n });\n options.signal?.throwIfAborted();\n const { contextFile, threadRootMessage } = sessionScope;\n const sessionManager = await openRunnerSessionManager({\n contextFile,\n runtimeWorkspaceRoot: pathContext.runtimeWorkspaceRoot,\n sessionKey,\n threadRootMessage,\n });\n return finishRunnerCreation({\n options,\n conversationId,\n conversationDir,\n workspaceDir,\n executor,\n resolveForRun,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n });\n}\n"]}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CreateRunnerOptions, OfficeAddress, PiAgentWrapper } from \"../types.js\";\nimport type { Office } from \"../office/index.js\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { MikanAgentSession } from \"../harness/index.js\";\nimport { DEFAULT_EVENT_BUDGET, MikanModels } from \"../harness/index.js\";\nimport { createHash } from \"node:crypto\";\nimport { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type {\n ConversationKind,\n ConversationMessage,\n ConversationResponder,\n MessagingInfo,\n PlatformName,\n} from \"../adapter.js\";\nimport { resolveConversationSettings } from \"../config.js\";\nimport { resolveConversationPackages } from \"../packages/index.js\";\nimport { resolveWorkspaceProjection } from \"../workspace-projection/index.js\";\nimport * as log from \"../log.js\";\nimport { formatMcpServerInstructions, loadMcpTools } from \"../mcp/loader.js\";\nimport { provisionOfficeOpenConnectorToken } from \"../mcp/open-connector.js\";\nimport {\n assertSandboxSupportsWorkspacePolicy,\n getUnresolvedSandboxPathContext,\n type Executor,\n type RuntimePathContext,\n} from \"../sandbox/index.js\";\nimport { addLifecycleBreadcrumb, updateActiveSpanAttribution } from \"../observability/sentry.js\";\nimport { ChatHistorySync } from \"../sessions/chat-history-sync.js\";\nimport { conversationIdOf, isThreadSessionKey } from \"../sessions/session-key.js\";\nimport {\n extractSessionUuid,\n openManagedSession,\n type ThreadRootMessage,\n} from \"../sessions/store.js\";\nimport { createMikanTools } from \"../tools/index.js\";\nimport type { PlatformToolRunContext } from \"../tools/types.js\";\nimport { createConfiguredAgentSession, loadMikanSkills } from \"./catalog.js\";\nimport {\n createRunnerExecutionContext,\n normalizeAttachRuntimePath,\n withStagedRuntimeFile,\n} from \"./execution.js\";\nimport {\n buildPromptPayload,\n buildSystemPrompt,\n buildTurnInstructions,\n getMemory,\n resolveTriggerAttribution,\n} from \"./prompt.js\";\nimport {\n attachSessionEventHandlers,\n activateRunPresentation,\n createRunState,\n finalizeRunResponse,\n formatAgentActorName,\n isEventTriggerAttribution,\n reportUsageSummary,\n sendAgentEvent,\n} from \"./presenter.js\";\n\nimport type {\n PreparedRunContext,\n RunPresentation,\n RunnerExecutionContext,\n RunnerSessionState,\n} from \"./types.js\";\n\nfunction buildThreadSessionName(message: ThreadRootMessage | null): string | undefined {\n const text = message?.text?.trim();\n if (!text) return undefined;\n const userLabel = message?.userName || message?.user || \"unknown\";\n return `[${userLabel}]: ${text}`;\n}\n\nasync function resolveRunnerMcpServers(options: {\n office: Office;\n trustModel: CreateRunnerOptions[\"trustModel\"];\n platformWorkspaceId?: string;\n servers: ReturnType<typeof resolveConversationSettings>[\"mcpServers\"];\n openConnector?: CreateRunnerOptions[\"openConnector\"];\n signal?: AbortSignal;\n}): Promise<Awaited<ReturnType<typeof provisionOfficeOpenConnectorToken>>> {\n if (options.trustModel === \"open-trigger\") return {};\n return provisionOfficeOpenConnectorToken(\n options.office,\n options.platformWorkspaceId,\n options.servers,\n options.openConnector,\n options.signal,\n );\n}\n\ntype PrepareRunParams = {\n message: ConversationMessage;\n responder: ConversationResponder;\n platform: MessagingInfo;\n office: Office;\n executor: Executor;\n resolveForRun: RunnerExecutionContext[\"resolveForRun\"];\n session: MikanAgentSession;\n setEventContext: (context: {\n platform: string;\n conversationId: string;\n conversationKind: ConversationKind;\n userId: string;\n }) => void;\n setSandboxContext: (context: { address: OfficeAddress; userId: string }) => void;\n setUploadFunction: (fn: (filePath: string, title?: string) => Promise<void>) => void;\n setImageUploadFunction: (fn: (hostPath: string, title?: string) => Promise<void>) => void;\n setReactFunction: (fn: ((emoji: string) => Promise<void>) | null) => void;\n bindPlatformToolPacks: (ctx: PlatformToolRunContext) => void;\n};\n\ntype 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, executor, resolveForRun, session } = params;\n const conversationId = office.address.conversationId;\n const decision = await resolveForRun({\n address: message.address,\n userId: message.userId,\n trustModel: platform.trustModel,\n });\n const { pathContext, projection, packages } = decision;\n for (const error of packages.errors) {\n log.logWarning(`Package unavailable: ${error.source}`, error.message);\n }\n\n const reloaded = await session.reloadFromSession();\n if (reloaded > 0) {\n log.logInfo(`[${conversationId}] Reloaded ${reloaded} messages from context`);\n }\n\n const memory = await getMemory(projection);\n const conversationSkillLoad = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n packages,\n );\n const triggerAttribution = resolveTriggerAttribution(message);\n const systemPrompt = buildSystemPrompt({\n workspacePath: pathContext.runtimeWorkspaceRoot,\n office,\n memory,\n sandboxConfig: executor.getSandboxConfig(),\n platform,\n skills: conversationSkillLoad.skills,\n projection,\n skippedSkillLinks: conversationSkillLoad.skippedSkillLinks,\n });\n session.agent.state.systemPrompt = systemPrompt;\n // A stable hash across turns verifies that turn-specific data did not leak\n // into the provider-cacheable system prompt.\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\nfunction bindRunCapabilities(params: PrepareRunParams, pathContext: RuntimePathContext): void {\n const {\n message,\n responder,\n platform,\n office,\n executor,\n setEventContext,\n setSandboxContext,\n setUploadFunction,\n setImageUploadFunction,\n setReactFunction,\n bindPlatformToolPacks,\n } = params;\n setEventContext({\n platform: platform.name,\n conversationId: office.address.conversationId,\n conversationKind: message.conversationKind,\n userId: message.userId,\n });\n setSandboxContext({ address: message.address, userId: message.userId });\n setUploadFunction(async (filePath: string, title?: string) => {\n const runtimePath = normalizeAttachRuntimePath(filePath, pathContext.runtimeWorkspaceRoot);\n await withStagedRuntimeFile(executor, runtimePath, (stagedPath) =>\n responder.uploadFile(stagedPath, title),\n );\n });\n // Generated images already live host-side and must not be staged through a sandbox.\n setImageUploadFunction(async (hostPath: string, title?: string) => {\n await responder.uploadFile(hostPath, title);\n });\n // Unset reaction support when the active responder cannot react.\n setReactFunction(responder.react ? async (emoji: string) => responder.react!(emoji) : null);\n bindPlatformToolPacks({\n conversationId: office.address.conversationId,\n platformName: platform.name,\n threadTs: message.threadTs,\n });\n}\n\nasync function prepareRunContext(params: PrepareRunParams): Promise<PreparedRunContext> {\n const { message, platform, office, executor } = 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 bindRunCapabilities(params, pathContext);\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 (runtimePath) => executor.readFileBase64(runtimePath),\n );\n const turnInstructions = buildTurnInstructions(\n message.id.startsWith(\"event:\"),\n triggerAttribution,\n platform.name,\n );\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 = await getMemory(projection);\n const { skills, skippedSkillLinks } = loadMikanSkills(\n office,\n pathContext.runtimeWorkspaceRoot,\n projection,\n resolveConversationPackages({ 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 });\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 contextFile: string;\n runtimeWorkspaceRoot: string;\n sessionKey: string;\n threadRootMessage: ThreadRootMessage | null;\n}) {\n const { contextFile, runtimeWorkspaceRoot, sessionKey, threadRootMessage } = params;\n const sessionManager = await openManagedSession(contextFile, runtimeWorkspaceRoot);\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 sessionManager: Awaited<ReturnType<typeof openManagedSession>>;\n modelRegistry: MikanModels;\n conversationId: string;\n signal?: AbortSignal;\n}) {\n const {\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools,\n sessionManager,\n modelRegistry,\n signal,\n } = params;\n const mcpResult = await loadMcpTools(agentConfig.mcpServers ?? {}, signal);\n for (const mcpError of mcpResult.errors) {\n log.logWarning(\n `[${params.conversationId}] MCP server unavailable: ${mcpError.server}`,\n mcpError.error,\n );\n }\n if (mcpResult.tools.length > 0) {\n log.logInfo(`[${params.conversationId}] Loaded ${mcpResult.tools.length} MCP tool(s)`);\n }\n try {\n signal?.throwIfAborted();\n const mcpInstructions = formatMcpServerInstructions(mcpResult.instructions);\n const session = await createConfiguredAgentSession({\n workspaceDir,\n systemPrompt: mcpInstructions ? `${systemPrompt}\\n\\n${mcpInstructions}` : systemPrompt,\n model,\n thinkingLevel: agentConfig.thinkingLevel,\n tools: [...tools, ...mcpResult.tools],\n sessionStore: sessionManager,\n models: modelRegistry,\n });\n return { mcpResult, session };\n } catch (error) {\n await rollbackRunnerResource(\"dispose MCP resources\", mcpResult.dispose);\n throw error;\n }\n}\n\ntype 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 contextFile: string;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n};\n\nasync function runPreparedTurn(params: PreparedTurnParams): Promise<{\n stopReason: string;\n errorMessage?: 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 contextFile,\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: agentConfig.model,\n channel_id: prepared.sessionConversation,\n session_id: sessionUuid,\n });\n addLifecycleBreadcrumb(\"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 sendAgentEvent({\n sessionId: sessionUuid,\n actorName: formatAgentActorName(message.userName, prepared.sessionConversation),\n event: { kind: \"sessionStart\" },\n });\n\n const isEventRun = message.id.startsWith(\"event:\");\n await session.prompt(prepared.userMessage, {\n ...(prepared.imageAttachments.length > 0 ? { images: prepared.imageAttachments } : {}),\n ...(isEventRun ? { budget: DEFAULT_EVENT_BUDGET } : {}),\n });\n await presentation.wait();\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 sessionFile: contextFile,\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 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 agentConfig,\n sessionConversation: prepared.sessionConversation,\n sessionUuid,\n waitForQueue: presentation.wait,\n });\n return { stopReason: runState.stopReason, errorMessage: runState.errorMessage };\n}\n\ntype MikanToolBindings = ReturnType<typeof createMikanTools>;\n\ntype RunnerInterfaceParams = {\n conversationId: string;\n conversationDir: string;\n sessionKey: string;\n office: Office;\n sessionUuid: string;\n contextFile: string;\n sessionView: CreateRunnerOptions[\"sessionView\"];\n runState: RunnerSessionState;\n executor: Executor;\n resolveForRun: RunnerExecutionContext[\"resolveForRun\"];\n session: MikanAgentSession;\n model: Model<Api>;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n sessionManager: Awaited<ReturnType<typeof openManagedSession>>;\n chatSessionManager: ChatHistorySync;\n mcpResult: Awaited<ReturnType<typeof loadMcpTools>>;\n toolBindings: MikanToolBindings;\n};\n\nfunction createRunnerInterface(params: RunnerInterfaceParams): PiAgentWrapper {\n const {\n conversationId,\n conversationDir,\n sessionKey,\n office,\n sessionUuid,\n contextFile,\n sessionView,\n runState,\n executor,\n resolveForRun,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager,\n mcpResult,\n toolBindings,\n } = params;\n return {\n async syncChatHistory(currentMessageId?: string): Promise<void> {\n await chatSessionManager.syncSessionManager({\n conversationDir,\n sessionKey,\n sessionManager,\n currentMessageId,\n });\n },\n\n async run(message, responder, platform) {\n const prepared = await prepareRunContext({\n message,\n responder,\n platform,\n office,\n executor,\n resolveForRun,\n session,\n setEventContext: toolBindings.setEventContext,\n setSandboxContext: toolBindings.setSandboxContext,\n setUploadFunction: toolBindings.setUploadFunction,\n setImageUploadFunction: toolBindings.setImageUploadFunction,\n setReactFunction: toolBindings.setReactFunction,\n bindPlatformToolPacks: toolBindings.bindPlatformToolPacks,\n });\n const presentation = activateRunPresentation(runState, {\n responder,\n sessionConversation: prepared.sessionConversation,\n userName: message.userName,\n sessionUuid,\n triggerAttribution: prepared.triggerAttribution,\n });\n try {\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 contextFile,\n sessionView,\n });\n } finally {\n presentation.dispose();\n }\n },\n\n abort(): void {\n session.abort();\n },\n\n async dispose(): Promise<void> {\n try {\n await mcpResult.dispose();\n } finally {\n await sessionManager.close();\n }\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 conversationDir: string;\n workspaceDir: string;\n executor: Executor;\n resolveForRun: RunnerExecutionContext[\"resolveForRun\"];\n model: Model<Api>;\n modelRegistry: MikanModels;\n agentConfig: ReturnType<typeof resolveConversationSettings>;\n systemPrompt: string;\n sessionManager: Awaited<ReturnType<typeof openManagedSession>>;\n toolBindings: MikanToolBindings;\n}): Promise<PiAgentWrapper> {\n const {\n options,\n conversationId,\n conversationDir,\n workspaceDir,\n executor,\n resolveForRun,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n } = params;\n const { sessionKey, office, sessionScope, sessionView } = options;\n const { contextFile } = sessionScope;\n let acquiredMcpResult: Awaited<ReturnType<typeof loadMcpTools>> | undefined;\n try {\n const sessionUuid = extractSessionUuid(contextFile);\n const chatSessionManager = new ChatHistorySync();\n const { mcpResult, session } = await createRunnerAgentSession({\n workspaceDir,\n systemPrompt,\n model,\n agentConfig,\n tools: toolBindings.tools,\n sessionManager,\n modelRegistry,\n conversationId,\n signal: options.signal,\n });\n acquiredMcpResult = mcpResult;\n options.signal?.throwIfAborted();\n\n const runState = createRunState();\n attachSessionEventHandlers({ session, runState, model, agentConfig });\n\n return createRunnerInterface({\n conversationId,\n conversationDir,\n sessionKey,\n office,\n sessionUuid,\n contextFile,\n sessionView,\n runState,\n executor,\n resolveForRun,\n session,\n model,\n agentConfig,\n sessionManager,\n chatSessionManager,\n mcpResult,\n toolBindings,\n });\n } catch (error) {\n if (acquiredMcpResult) {\n await rollbackRunnerResource(\"dispose MCP resources\", acquiredMcpResult.dispose);\n }\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 conversationDir = office.dir;\n const workspaceDir = office.workspace.root;\n const resolvedAgentConfig = resolveConversationSettings(office);\n const mcpServers = await resolveRunnerMcpServers({\n office,\n trustModel,\n platformWorkspaceId: options.platformWorkspaceId,\n servers: resolvedAgentConfig.mcpServers,\n openConnector: options.openConnector,\n signal: options.signal,\n });\n options.signal?.throwIfAborted();\n const agentConfig = { ...resolvedAgentConfig, mcpServers };\n\n const projection = resolveWorkspaceProjection(office);\n // Bootstrap validation fails runner creation early. resolveForRun repeats\n // the check against the actor-specific decision before any provider call.\n assertSandboxSupportsWorkspacePolicy(\n sandboxConfig,\n projection.doorPolicy,\n projection.promptSources.globalMemoryReadOnly === true,\n );\n const { executor, resolveForRun } = createRunnerExecutionContext(\n sandboxConfig,\n vaultManager,\n provisioner,\n office.workspace,\n );\n const pathContext = getUnresolvedSandboxPathContext(sandboxConfig, workspaceDir);\n\n const modelRegistry = options.models ?? MikanModels.create();\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 // Create tools (per-runner, with per-runner upload function setter)\n const toolBindings = createMikanTools(\n executor,\n workspaceDir,\n { sandbox: sandboxConfig, resourceController: resourceController ?? provisioner },\n platformToolPackFactories ?? [],\n {\n model,\n getApiKey: () => modelRegistry.getApiKeyForProvider(model.provider),\n // The conversation's own office dir: mounted into the sandbox, unlike\n // the workspace base — generated images must land somewhere the agent\n // (and a future run) can still reach.\n outputDir: conversationDir,\n },\n );\n\n const systemPrompt = await buildInitialSystemPrompt({\n office,\n pathContext,\n projection,\n sandboxConfig,\n });\n options.signal?.throwIfAborted();\n const { contextFile, threadRootMessage } = sessionScope;\n const sessionManager = await openRunnerSessionManager({\n contextFile,\n runtimeWorkspaceRoot: pathContext.runtimeWorkspaceRoot,\n sessionKey,\n threadRootMessage,\n });\n return finishRunnerCreation({\n options,\n conversationId,\n conversationDir,\n workspaceDir,\n executor,\n resolveForRun,\n model,\n modelRegistry,\n agentConfig,\n systemPrompt,\n sessionManager,\n toolBindings,\n });\n}\n"]}
@@ -88,14 +88,12 @@ export interface RunnerExecutionContext {
88
88
  packages: ResolvedPackages;
89
89
  }>;
90
90
  }
91
+ export interface RunPresentation {
92
+ wait(): Promise<void>;
93
+ dispose(): void;
94
+ }
91
95
  export interface PreparedRunContext {
92
96
  sessionConversation: string;
93
- runQueue: {
94
- queue: {
95
- enqueue(fn: () => Promise<void>, errorContext: string): void;
96
- };
97
- wait: () => Promise<void>;
98
- };
99
97
  userMessage: string;
100
98
  imageAttachments: ImageContent[];
101
99
  triggerAttribution?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,KAAK,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,UAAU,EAAE,mBAAmB,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACxC,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,KAAK,EAAE;QACL,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9D,GAAG,IAAI,CAAC;IACT,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACnF,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACxD,yBAAyB,EAAE,wBAAwB,EAAE,CAAC;IACtD,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,sBAAsB,EAAE,OAAO,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS,CAAC;IAC7D,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/F,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,0BAA0B,EAAE,OAAO,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,SAAS,EAAE,qBAAqB,CAAC;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAClB,WAAW,EAAE,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,OAAO,EAAE;QACrB,OAAO,EAAE,aAAa,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,kBAAkB,CAAC;KACjC,GAAG,OAAO,CAAC;QACV,WAAW,EAAE,kBAAkB,CAAC;QAChC,UAAU,EAAE,mBAAmB,CAAC;QAChC,QAAQ,EAAE,gBAAgB,CAAC;KAC5B,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE;QACR,KAAK,EAAE;YAAE,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC;QACxE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,MAAM,uBAAuB,CAAC;AAKhF,OAAO,EAA8D,MAAM,qBAAqB,CAAC","sourcesContent":["import type { OfficeAddress } from \"../types.js\";\nimport type { MikanAgentSession, MikanSkill } from \"../harness/index.js\";\nimport { type Api, type ImageContent, type Model } from \"@earendil-works/pi-ai\";\nimport type { ConversationResponder, MessagingInfo, SubagentProgressSnapshot } from \"../adapter.js\";\nimport type { PlatformTrustModel } from \"../types.js\";\nimport type { resolveConversationSettings } from \"../config.js\";\nimport type { ResolvedPackages } from \"../packages/types.js\";\nimport { type Executor, type RuntimePathContext, type SandboxConfig } from \"../sandbox/index.js\";\nimport type { WorkspaceProjection } from \"../workspace-projection/types.js\";\nimport type { Office } from \"../office/index.js\";\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}\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 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 lastSubagentProgressAt: number;\n toolProgressTimer: ReturnType<typeof setTimeout> | undefined;\n totalUsage: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number };\n };\n llmCallCount: number;\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 agentConfig: ReturnType<typeof resolveConversationSettings>;\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 packages: ResolvedPackages;\n }>;\n}\n\nexport interface PreparedRunContext {\n sessionConversation: string;\n runQueue: {\n queue: { enqueue(fn: () => Promise<void>, errorContext: string): void };\n wait: () => Promise<void>;\n };\n userMessage: string;\n imageAttachments: ImageContent[];\n triggerAttribution?: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2C,MAAM,uBAAuB,CAAC;AAKhF,OAAO,EAA8D,MAAM,qBAAqB,CAAC","sourcesContent":["import type { OfficeAddress } from \"../types.js\";\nimport type { MikanAgentSession, MikanSkill } from \"../harness/index.js\";\nimport { type Api, type ImageContent, type Model } from \"@earendil-works/pi-ai\";\nimport type { ConversationResponder, MessagingInfo, SubagentProgressSnapshot } from \"../adapter.js\";\nimport type { PlatformTrustModel } from \"../types.js\";\nimport type { resolveConversationSettings } from \"../config.js\";\nimport type { ResolvedPackages } from \"../packages/types.js\";\nimport { type Executor, type RuntimePathContext, type SandboxConfig } from \"../sandbox/index.js\";\nimport type { WorkspaceProjection } from \"../workspace-projection/types.js\";\nimport type { Office } from \"../office/index.js\";\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}\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 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 lastSubagentProgressAt: number;\n toolProgressTimer: ReturnType<typeof setTimeout> | undefined;\n totalUsage: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number };\n };\n llmCallCount: number;\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 agentConfig: ReturnType<typeof resolveConversationSettings>;\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 packages: ResolvedPackages;\n }>;\n}\n\nexport interface RunPresentation {\n wait(): Promise<void>;\n dispose(): void;\n}\n\nexport interface PreparedRunContext {\n sessionConversation: string;\n userMessage: string;\n imageAttachments: ImageContent[];\n triggerAttribution?: string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,YAAY,EAAE,MAAM;IAAhD,YAA4B,YAAY,EAAE,MAAM,EAG/C;CACF;AAED,YAAY,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAEhB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAsQhD,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6B/D;AAcD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAwBvE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAQzE;AAUD;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAYxF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GACtB,IAAI,CAaN;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAInE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,IAAI,CAWN;AAOD,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAqBzF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAIvD;AAoFD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAEtE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAE5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC/C,CAKA;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAiB9F;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,qBAAqB,GAAG,IAAI,GACnC,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAEnF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAUA,qBAAa,0BAA2B,SAAQ,KAAK;aACvB,YAAY,EAAE,MAAM;IAAhD,YAA4B,YAAY,EAAE,MAAM,EAG/C;CACF;AAED,YAAY,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAEhB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAuQhD,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA6B/D;AAcD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAyBvE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAQzE;AAUD;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAYxF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,eAAe,GACtB,IAAI,CAaN;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAInE;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,IAAI,CAWN;AAOD,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAqBzF;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAIvD;AAoFD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAEtE;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAE5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC/C,CAKA;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAiB9F;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,qBAAqB,GAAG,IAAI,GACnC,IAAI,CAEN;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAEnF"}
package/dist/config.js CHANGED
@@ -95,7 +95,8 @@ const SettingsFileSchema = Type.Object({
95
95
  /**
96
96
  * MCP servers, keyed by name. Merged per key across scopes: a conversation
97
97
  * entry overrides (or, with `disabled: true`, turns off) the same-name
98
- * global entry; other global entries stay available.
98
+ * global entry; other global entries stay available. The reserved
99
+ * `open-connector` name is ignored by runner construction.
99
100
  */
100
101
  mcpServers: Type.Optional(Type.Record(Type.String(), Type.Object({
101
102
  command: Type.Optional(Type.String()),
@@ -290,7 +291,8 @@ export function resolveConversationSettings(office) {
290
291
  const globalConfig = loadRawGlobalSettings();
291
292
  const conversationConfig = normalizeSettingsConfig(loadSettingsFile(conversationSettingsPath(office)) ?? {});
292
293
  // MCP servers merge per key: a conversation redefines or disables individual
293
- // servers without losing the rest of the global set.
294
+ // servers without losing the rest of the global set. Runner construction
295
+ // removes the reserved open-connector entry before loading servers.
294
296
  const mcpServers = { ...globalConfig.mcpServers, ...conversationConfig.mcpServers };
295
297
  // The sandbox group merges at the leaf level (see mergeSandboxSettings):
296
298
  // a conversation that only sets sandbox.memory keeps the global sandbox.cpus.