@geminixiang/mikan 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/dist/adapters/discord/context.js +1 -1
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/messages.d.ts +2 -0
- package/dist/adapters/messages.d.ts.map +1 -1
- package/dist/adapters/messages.js +6 -0
- package/dist/adapters/messages.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +132 -147
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +3 -0
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +95 -34
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +1 -3
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/telegram/context.js +1 -1
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/types.d.ts +1 -2
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/env-manifest.js +1 -1
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/scheduler.js +1 -1
- package/dist/events/scheduler.js.map +1 -1
- package/dist/harness/execution-env.d.ts.map +1 -1
- package/dist/harness/execution-env.js +82 -5
- package/dist/harness/execution-env.js.map +1 -1
- package/dist/harness/jev.d.ts +12 -11
- package/dist/harness/jev.d.ts.map +1 -1
- package/dist/harness/jev.js +67 -70
- package/dist/harness/jev.js.map +1 -1
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +36 -7
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +22 -47
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +1 -1
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js +12 -15
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +10 -3
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +2 -0
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +49 -8
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/tools/index.d.ts +2 -1
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +2 -2
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +2 -1
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +18 -50
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/harness/tools/jev.d.ts.map +1 -1
- package/dist/harness/tools/jev.js +2 -2
- package/dist/harness/tools/jev.js.map +1 -1
- package/dist/harness/tools/react.js +1 -1
- package/dist/harness/tools/react.js.map +1 -1
- package/dist/harness/tools/task.d.ts +4 -0
- package/dist/harness/tools/task.d.ts.map +1 -1
- package/dist/harness/tools/task.js +12 -0
- package/dist/harness/tools/task.js.map +1 -1
- package/dist/harness/types.d.ts +2 -0
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +15 -0
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts +1 -0
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +17 -1
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +1 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sessions/session-store.d.ts +6 -1
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +103 -4
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/types.d.ts +2 -0
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/index.d.ts +6 -0
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +5 -0
- package/dist/settings/index.js.map +1 -1
- package/dist/types.d.ts +7 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -8
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport \"./observability/instrument.js\";\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { MessagingBot } from \"./types.js\";\nimport { GithubMessagingBot } from \"./adapters/github/bot.js\";\nimport { createGithubToolPack } from \"./adapters/github/tool-pack.js\";\nimport { parseGithubPolicy } from \"./adapters/github/policy.js\";\nimport type { GithubPolicy, PlatformGithubOps } from \"./adapters/github/types.js\";\nimport { TelegramMessagingBot } from \"./adapters/telegram/bot.js\";\nimport { SlackMessagingBot as SlackMessagingBotClass } from \"./adapters/slack/bot.js\";\nimport { createSlackToolPack } from \"./adapters/slack/tool-pack.js\";\nimport type { PlatformSlackOps } from \"./adapters/slack/types.js\";\nimport { SLACK_BLOCKKIT_TOOL } from \"./adapters/slack/tools/blockkit.js\";\nimport { GITHUB_CHECKS_TOOL } from \"./adapters/github/tools/checks.js\";\nimport { GITHUB_ISSUE_TOOL } from \"./adapters/github/tools/issue.js\";\nimport { GITHUB_PR_TOOL } from \"./adapters/github/tools/pr.js\";\nimport { GITHUB_READ_TOOL } from \"./adapters/github/tools/read.js\";\nimport { GITHUB_REVIEW_REPLY_TOOL } from \"./adapters/github/tools/review-reply.js\";\nimport type { PlatformToolPackFactory } from \"./harness/tools/types.js\";\nimport { EventScheduler } from \"./events/scheduler.js\";\nimport * as log from \"./log.js\";\nimport { createProcessShutdownHandler, runShutdownSteps } from \"./cli/process-lifecycle.js\";\nimport { closeWebServer, startWebServer } from \"./adapters/web/server.js\";\nimport { InMemoryAdminTokenStore } from \"./adapters/web/admin/portal.js\";\nimport { InMemoryLinkTokenStore } from \"./adapters/web/login/portal.js\";\nimport { InMemorySessionViewTokenStore } from \"./adapters/web/session-view/portal.js\";\nimport { DockerContainerManager } from \"./sandbox/provisioner.js\";\nimport {\n findUnusedSettings,\n loadGithubSettings,\n loadGlobalSettings,\n MissingGlobalSettingsError,\n} from \"./settings/index.js\";\nimport { assertStateDirOutsideWorkspace } from \"./file-guards.js\";\nimport { resolveLinkBaseUrl, resolveLinkListenHost } from \"./env-manifest.js\";\nimport { configureHttpDispatcher } from \"./harness/http.js\";\nimport { defaultModelsJsonPath } from \"./harness/models.js\";\nimport { RunEventHub } from \"./harness/run-events.js\";\nimport { readEnv } from \"./env-manifest.js\";\nimport { ensureDirExists, readJsonFileIfExists } from \"./file-guards.js\";\nimport { SandboxError } from \"./sandbox/utils.js\";\nimport { validateSandbox } from \"./sandbox/registry.js\";\nimport { helpText, resolveBoot } from \"./cli/boot.js\";\nimport type { BootPlan } from \"./cli/types.js\";\nimport { runOnboardCommand } from \"./cli/onboard.js\";\nimport {\n envReport,\n noPlatformsMessage,\n platformIsActive,\n retiredEnvWarnings,\n} from \"./env-manifest.js\";\nimport { FileVaultManager } from \"./vault/index.js\";\nimport { runMigrateCommand } from \"./cli/migrate.js\";\nimport { runOfficeCommand } from \"./cli/office.js\";\nimport { formatPendingMigrations, pendingMigrations } from \"./migrations/index.js\";\nimport { createOfficeAddress, createWorkspace, listRegisteredOffices } from \"./office/index.js\";\nimport { createConversationRuntime } from \"./runtime/conversation-runtime.js\";\nimport type { McpServerConfig } from \"./harness/types.js\";\nimport { captureError, shutdownObservability } from \"./observability/index.js\";\nimport { MemoryCapture } from \"./memory-capture/index.js\";\nimport { errorMessage, isRecord } from \"./unknown-values.js\";\n\nfunction getVersion(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const possiblePaths = [\n join(moduleDir, \"package.json\"),\n join(dirname(moduleDir), \"package.json\"),\n join(process.cwd(), \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n const pkg = readJsonFileIfExists(\n pkgPath,\n (value): value is { version?: unknown } => isRecord(value),\n () => \"Ignoring package.json while resolving version\",\n );\n if (typeof pkg?.version === \"string\" && pkg.version) return pkg.version;\n }\n return \"unknown\";\n}\n\nconst SLACK_APP_TOKEN = readEnv(\"SLACK_APP_TOKEN\");\nconst SLACK_BOT_TOKEN = readEnv(\"SLACK_BOT_TOKEN\");\nconst TELEGRAM_BOT_TOKEN = readEnv(\"TELEGRAM_BOT_TOKEN\");\nconst DISCORD_BOT_TOKEN = readEnv(\"DISCORD_BOT_TOKEN\");\nconst GITHUB_AGENT_TOKEN = readEnv(\"GITHUB_AGENT_TOKEN\");\nconst GITHUB_WEBHOOK_SECRET = readEnv(\"GITHUB_WEBHOOK_SECRET\");\nconst LINK_BASE_URL = resolveLinkBaseUrl();\nconst LINK_PORT_RAW = readEnv(\"LINK_PORT\");\nconst LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) : LINK_BASE_URL ? 8181 : undefined;\nconst OPENCONNECTOR_ENDPOINT = readEnv(\"OPENCONNECTOR_ENDPOINT\");\nconst openConnector: McpServerConfig | undefined = OPENCONNECTOR_ENDPOINT\n ? { url: OPENCONNECTOR_ENDPOINT }\n : undefined;\n\nconst WORLD_WRITABLE_MODE = 0o002;\nconst SHUTDOWN_DRAIN_TIMEOUT_MS = 5 * 60_000;\n\nfunction ensureSecureStateDir(path: string): void {\n let stat;\n try {\n stat = statSync(path);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === \"ENOENT\") {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n return;\n }\n console.error(`Error: cannot access state directory ${path}: ${(err as Error).message}`);\n process.exit(1);\n }\n\n if (!stat.isDirectory()) {\n console.error(`Error: state directory ${path} exists but is not a directory`);\n process.exit(1);\n }\n\n if (stat.mode & WORLD_WRITABLE_MODE) {\n console.error(\n `Error: state directory ${path} is world-writable (mode ${(stat.mode & 0o777).toString(8)}). ` +\n `Credentials stored there would be exposed to other local users. ` +\n `Fix with: chmod 0700 ${path}`,\n );\n process.exit(1);\n }\n\n const euid = typeof process.geteuid === \"function\" ? process.geteuid() : undefined;\n if (euid !== undefined && stat.uid !== euid) {\n console.error(\n `Error: state directory ${path} is owned by uid ${stat.uid} but mikan is running as uid ${euid}. ` +\n `Run mikan as the directory owner.`,\n );\n process.exit(1);\n }\n}\n\nfunction handleStartupError(error: unknown): never {\n if (error instanceof SandboxError) {\n for (const line of error.formatForCli()) {\n console.error(line);\n }\n process.exit(1);\n }\n if (error instanceof MissingGlobalSettingsError) {\n console.error(`Missing global settings: ${error.settingsPath}`);\n console.error(\"\");\n console.error(\"Run onboarding to create it:\");\n console.error(` mikan onboard`);\n console.error(\"\");\n console.error(\"Then review the generated settings.json and start mikan again.\");\n process.exit(1);\n }\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n process.exit(1);\n }\n console.error(String(error));\n process.exit(1);\n}\n\nlet plan: BootPlan;\ntry {\n plan = resolveBoot();\n} catch (error) {\n handleStartupError(error);\n}\n\nif (plan.mode === \"office\") {\n process.exit(runOfficeCommand(plan.officeArgs ?? []));\n}\n\nif (plan.mode === \"migrate\") {\n process.exit(await runMigrateCommand(plan.migrateArgs ?? []));\n}\n\nconst httpIdleTimeoutMs = configureHttpDispatcher();\n\nif (plan.mode === \"help\") {\n console.log(helpText());\n process.exit(0);\n}\n\nif (plan.mode === \"env\") {\n console.log(envReport());\n process.exit(0);\n}\n\nif (plan.mode === \"version\") {\n console.log(getVersion());\n process.exit(0);\n}\n\nif (plan.mode === \"onboard\") {\n const stateDir = plan.stateDir;\n ensureSecureStateDir(stateDir);\n try {\n process.exit(await runOnboardCommand(stateDir));\n } catch (err) {\n console.error(errorMessage(err));\n process.exit(1);\n }\n}\n\nconst sandbox = plan.sandbox;\nconst stateDir = plan.stateDir;\nconst workingDir = plan.workingDir;\nensureSecureStateDir(stateDir);\nif (!plan.workingDirExplicit) {\n ensureDirExists(workingDir);\n}\ntry {\n assertStateDirOutsideWorkspace(stateDir, workingDir, sandbox.type);\n} catch (error) {\n handleStartupError(error);\n}\n\nconst hasSlack = platformIsActive(\"slack\");\nconst hasTelegram = platformIsActive(\"telegram\");\nconst hasDiscord = platformIsActive(\"discord\");\nconst hasGithub = platformIsActive(\"github\");\n\nif (!hasSlack && !hasTelegram && !hasDiscord && !hasGithub) {\n console.error(noPlatformsMessage());\n process.exit(1);\n}\n\nlet githubPolicy: GithubPolicy | undefined;\ntry {\n githubPolicy = hasGithub ? parseGithubPolicy(loadGithubSettings(stateDir)) : undefined;\n if (hasGithub && !LINK_PORT) {\n throw new Error(\"GitHub receives webhooks on the link server: set LINK_PORT and LINK_URL\");\n }\n} catch (error) {\n handleStartupError(error);\n}\n\nconst pending = pendingMigrations(stateDir);\nif (pending.length > 0) {\n console.error(formatPendingMigrations({ pending, workspaceRoot: workingDir, sandbox }));\n process.exit(1);\n}\n\ntry {\n await validateSandbox(sandbox);\n} catch (error) {\n handleStartupError(error);\n}\n\nconst workspace = createWorkspace({ root: workingDir, stateDir });\n\nconst vaultManager = new FileVaultManager(stateDir);\nif (vaultManager.isEnabled()) {\n console.log(\n sandbox.type === \"container\"\n ? \" Vault system enabled. Container vault active.\"\n : sandbox.type === \"image\"\n ? \" Vault system enabled. Conversation-scoped credential routing active.\"\n : \" Vault system enabled. Host mode will not inject vault env.\",\n );\n}\n\nconst startupConfig = (() => {\n try {\n return loadGlobalSettings(stateDir);\n } catch (error) {\n handleStartupError(error);\n }\n})();\nconst registeredOffices = listRegisteredOffices(stateDir).map((record) =>\n workspace.office(createOfficeAddress(record.platform, record.conversationId)),\n);\nfor (const warning of retiredEnvWarnings()) {\n log.logWarning(\n \"Environment variable that mikan ignores; remove it from ~/.mikan/mikan.env\",\n warning,\n );\n}\nfor (const unused of findUnusedSettings(stateDir, registeredOffices)) {\n log.logWarning(\n `Settings that mikan ignores; remove them from ${unused.path}`,\n unused.keys.join(\", \"),\n );\n}\nconst sandboxSettings = startupConfig.sandbox;\nconst sandboxLimits =\n sandboxSettings?.cpus || sandboxSettings?.memory\n ? { cpus: sandboxSettings?.cpus, memory: sandboxSettings?.memory }\n : undefined;\nconst sandboxBoostLimits =\n sandboxSettings?.boost?.cpus || sandboxSettings?.boost?.memory\n ? { cpus: sandboxSettings?.boost?.cpus, memory: sandboxSettings?.boost?.memory }\n : undefined;\n\nconst provisioner =\n sandbox.type === \"image\"\n ? new DockerContainerManager(sandbox.image, {\n limits: sandboxLimits,\n boostLimits: sandboxBoostLimits,\n })\n : undefined;\nconst resourceController = sandbox.type === \"image\" ? provisioner : undefined;\n\nif (sandbox.type === \"image\") {\n ensureDirExists(workspace.skillsDir);\n ensureDirExists(workspace.agentsDir);\n try {\n writeFileSync(workspace.memoryPath, \"\", { flag: \"wx\" });\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n }\n}\n\nconst linkTokenStore = new InMemoryLinkTokenStore();\nconst sessionViewTokenStore = new InMemorySessionViewTokenStore();\nconst runEvents = new RunEventHub();\nconst adminTokenStore = new InMemoryAdminTokenStore();\nsetInterval(() => linkTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => sessionViewTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => adminTokenStore.purge(), 5 * 60 * 1000).unref();\n\nfunction portalBaseUrl(): string | undefined {\n if (LINK_BASE_URL) return LINK_BASE_URL;\n if (LINK_PORT) return `http://localhost:${LINK_PORT}`;\n return undefined;\n}\nconst MANAGED_SANDBOX_IDLE_TIMEOUT_MS = 10 * 60 * 1000;\n\nif (provisioner) {\n await provisioner.reconcile(workspace.root);\n await provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);\n setInterval(\n () => provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS),\n MANAGED_SANDBOX_IDLE_TIMEOUT_MS,\n ).unref();\n}\n\nconst botsByPlatform: Record<string, MessagingBot> = {};\n\nfunction requireGithubBot(op: string): GithubMessagingBot {\n const bot = botsByPlatform.github as GithubMessagingBot | undefined;\n if (!bot) {\n throw new Error(`${op}: the GitHub platform is not running`);\n }\n return bot;\n}\n\nfunction requireSlackBot(op: string): SlackMessagingBotClass {\n const bot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\n if (!bot) {\n throw new Error(`${op}: the Slack platform is not running`);\n }\n return bot;\n}\n\nfunction buildPlatformToolPackFactories(): PlatformToolPackFactory[] {\n const factories: PlatformToolPackFactory[] = [];\n if (hasSlack) {\n const platformSlackOps: PlatformSlackOps = {\n postBlocks: async (conversationId, { text, blocks, threadTs }) => {\n const bot = requireSlackBot(SLACK_BLOCKKIT_TOOL);\n const ts = threadTs\n ? await bot.postInThreadBlocks(conversationId, threadTs, text, blocks)\n : await bot.postMessageBlocks(conversationId, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, { slackBlocks: blocks });\n return { ts };\n },\n updateBlocks: async (conversationId, { ts, text, blocks, threadTs }) => {\n const bot = requireSlackBot(SLACK_BLOCKKIT_TOOL);\n await bot.updateMessageBlocks(conversationId, ts, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, { slackBlocks: blocks });\n },\n ownsBlockKitMessage: (conversationId, ts, threadTs) =>\n requireSlackBot(SLACK_BLOCKKIT_TOOL).ownsBlockKitMessage(conversationId, ts, threadTs),\n };\n factories.push(() => createSlackToolPack(platformSlackOps));\n }\n if (!githubPolicy) return factories;\n const githubCapabilities = githubPolicy.capabilities;\n const platformGithubOps: PlatformGithubOps = {\n createPullRequest: (conversationId, request) =>\n requireGithubBot(GITHUB_PR_TOOL).ops.createPullRequest(conversationId, request),\n getChecks: (conversationId, branch) =>\n requireGithubBot(GITHUB_CHECKS_TOOL).ops.getChecks(conversationId, branch),\n getJobLog: (conversationId, jobId) =>\n requireGithubBot(GITHUB_CHECKS_TOOL).ops.getJobLog(conversationId, jobId),\n replyToReviewThread: (conversationId, commentId, body) =>\n requireGithubBot(GITHUB_REVIEW_REPLY_TOOL).ops.replyToReviewThread(\n conversationId,\n commentId,\n body,\n ),\n readGithub: (conversationId, request) =>\n requireGithubBot(GITHUB_READ_TOOL).ops.readGithub(conversationId, request),\n manageIssue: (conversationId, request) =>\n requireGithubBot(GITHUB_ISSUE_TOOL).ops.manageIssue(conversationId, request),\n };\n factories.push(() => createGithubToolPack(platformGithubOps, githubCapabilities));\n return factories;\n}\n\nlet eventScheduler: EventScheduler | undefined;\nconst handler = createConversationRuntime({\n workspace,\n eventScheduler: () => eventScheduler,\n sandbox,\n vaultManager,\n provisioner,\n resourceController,\n linkTokenStore,\n sessionViewTokenStore,\n adminTokenStore,\n openConnector,\n runEvents,\n portalBaseUrl: portalBaseUrl(),\n platformToolPackFactories: buildPlatformToolPackFactories(),\n memoryCapture: (models) => new MemoryCapture(models),\n});\n\nconst sandboxDesc =\n sandbox.type === \"host\"\n ? \"host\"\n : sandbox.type === \"container\"\n ? `container:${sandbox.container}`\n : `image:${sandbox.image}`;\nlog.logStartup(workingDir, sandboxDesc);\nlogHarnessStartupSummary();\n\nfunction logHarnessStartupSummary(): void {\n const proxy =\n process.env.HTTPS_PROXY ??\n process.env.https_proxy ??\n process.env.HTTP_PROXY ??\n process.env.http_proxy;\n log.logInfo(\n `HTTP dispatcher: idle timeout ${httpIdleTimeoutMs}ms${proxy ? `, proxy ${proxy}` : \", no proxy\"}`,\n );\n\n const modelsPath = defaultModelsJsonPath(stateDir);\n log.logInfo(\n existsSync(modelsPath)\n ? `Harness models.json: ${modelsPath}`\n : `Harness models.json: none (${modelsPath}) — built-in providers only`,\n );\n}\n\nif (hasSlack) {\n const slackMessagingBotToken = SLACK_BOT_TOKEN;\n const slackAppToken = SLACK_APP_TOKEN;\n if (!slackMessagingBotToken || !slackAppToken) {\n throw new Error(\"Slack startup requires both SLACK_APP_TOKEN and SLACK_BOT_TOKEN\");\n }\n const slackMessagingBot = new SlackMessagingBotClass(handler, {\n appToken: slackAppToken,\n botToken: slackMessagingBotToken,\n workspace,\n });\n botsByPlatform.slack = slackMessagingBot;\n log.logInfo(\"Platform: Slack\");\n}\nif (hasTelegram) {\n const telegramToken = TELEGRAM_BOT_TOKEN;\n if (!telegramToken) {\n throw new Error(\"Telegram startup requires TELEGRAM_BOT_TOKEN\");\n }\n const telegramMessagingBot = new TelegramMessagingBot(handler, {\n token: telegramToken,\n workspace,\n onPollingFailure: (error) => {\n log.logWarning(\n \"Telegram stopped delivering messages; exiting so the process restarts\",\n error.message,\n );\n process.exit(1);\n },\n });\n botsByPlatform.telegram = telegramMessagingBot;\n log.logInfo(\"Platform: Telegram\");\n}\nif (hasDiscord) {\n const discordToken = DISCORD_BOT_TOKEN;\n if (!discordToken) {\n throw new Error(\"Discord startup requires DISCORD_BOT_TOKEN\");\n }\n const { DiscordMessagingBot } = await import(\"./adapters/discord/bot.js\");\n const discordMessagingBot = new DiscordMessagingBot(handler, {\n token: discordToken,\n workspace,\n });\n botsByPlatform.discord = discordMessagingBot;\n log.logInfo(\"Platform: Discord\");\n}\nif (githubPolicy && GITHUB_AGENT_TOKEN) {\n botsByPlatform.github = new GithubMessagingBot(handler, {\n token: GITHUB_AGENT_TOKEN,\n policy: githubPolicy,\n workspace,\n });\n log.logInfo(\"Platform: GitHub\");\n}\n\nconst githubBot = botsByPlatform.github as GithubMessagingBot | undefined;\n\nconst webServer = LINK_PORT\n ? startWebServer({\n port: LINK_PORT,\n host: resolveLinkListenHost(),\n linkTokenStore,\n vaultManager,\n notify: async (platform, conversationId, message) => {\n const bot = botsByPlatform[platform];\n if (bot) await bot.postMessage(conversationId, message);\n },\n sessionViewTokenStore,\n sessionViewInteractive: { handler, botsByPlatform, runEvents },\n adminOptions: {\n adminTokenStore,\n workspace,\n runtime: handler,\n sandbox,\n botsByPlatform,\n eventScheduler: () => eventScheduler,\n },\n githubWebhook:\n GITHUB_WEBHOOK_SECRET && githubBot\n ? {\n secret: GITHUB_WEBHOOK_SECRET,\n onDelivery: (delivery) => void githubBot.receive(delivery),\n }\n : undefined,\n })\n : undefined;\n\nconst WEB_SERVER_CLOSE_GRACE_MS = 5000;\n\nfunction stopWebServer(): Promise<void> {\n if (!webServer) return Promise.resolve();\n return closeWebServer(webServer, WEB_SERVER_CLOSE_GRACE_MS);\n}\n\nasync function stopConversationIntake(): Promise<void> {\n const results = await Promise.allSettled([\n ...Object.values(botsByPlatform).map((bot) => bot.stop()),\n stopWebServer(),\n ]);\n const failures = results.flatMap((result) =>\n result.status === \"rejected\" ? [result.reason] : [],\n );\n if (failures.length > 0) throw new AggregateError(failures, \"Failed to stop conversation intake\");\n}\n\nasync function waitForGracefulDrain(drain: Promise<unknown>): Promise<boolean> {\n let timeout: NodeJS.Timeout | undefined;\n const settled = await Promise.race([\n drain.then(() => true),\n new Promise<false>((resolve) => {\n timeout = setTimeout(() => resolve(false), SHUTDOWN_DRAIN_TIMEOUT_MS);\n }),\n ]);\n if (timeout) clearTimeout(timeout);\n return settled;\n}\n\nasync function drainConversationWork(intakeStop: Promise<void>): Promise<void> {\n const gracefulDrain = Promise.allSettled([intakeStop]);\n if (!(await waitForGracefulDrain(gracefulDrain))) {\n const runtimeResult = await Promise.allSettled([handler.shutdown(0)]);\n const failures: unknown[] = [\n new Error(`Conversation work did not drain within ${SHUTDOWN_DRAIN_TIMEOUT_MS}ms`),\n ...runtimeResult.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : [])),\n ];\n throw new AggregateError(failures, \"Failed to drain conversation work\");\n }\n\n const results = [\n ...(await gracefulDrain),\n ...(await Promise.allSettled([handler.shutdown(SHUTDOWN_DRAIN_TIMEOUT_MS)])),\n ];\n const failures = results.flatMap((result) =>\n result.status === \"rejected\" ? [result.reason] : [],\n );\n if (failures.length > 0) throw new AggregateError(failures, \"Failed to drain conversation work\");\n}\n\neventScheduler = new EventScheduler(workspace, botsByPlatform);\nconst slackMessagingBot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\nif (slackMessagingBot) {\n slackMessagingBot.setEventScheduler(eventScheduler);\n}\neventScheduler.start();\n\nconst shutdown = createProcessShutdownHandler({\n stop: () => {\n const intakeStop = stopConversationIntake();\n return runShutdownSteps([\n {\n name: \"event scheduler\",\n run: async () => {\n eventScheduler?.stop();\n },\n },\n { name: \"conversation work\", run: () => drainConversationWork(intakeStop) },\n ]);\n },\n shutdownObservability: () => shutdownObservability(5000),\n captureError,\n warn: log.logWarning,\n exit: (code) => process.exit(code),\n});\n\nprocess.on(\"SIGINT\", () => void shutdown(\"SIGINT\"));\nprocess.on(\"SIGTERM\", () => void shutdown(\"SIGTERM\"));\n\nawait Promise.all(\n Object.values(botsByPlatform).map((bot) =>\n bot.start().catch((err) => {\n log.logWarning(\"Failed to start bot\", errorMessage(err));\n process.exit(1);\n }),\n ),\n);\n"]}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAEA,OAAO,+BAA+B,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE7D,SAAS,UAAU;IACjB,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG;QACpB,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;KACpC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,oBAAoB,CAC9B,OAAO,EACP,CAAC,KAAK,EAAkC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC1D,GAAG,EAAE,CAAC,+CAA+C,CACtD,CAAC;QACF,IAAI,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACzD,MAAM,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACvD,MAAM,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACzD,MAAM,qBAAqB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC;AAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACjG,MAAM,sBAAsB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AACjE,MAAM,aAAa,GAAgC,sBAAsB;IACvE,CAAC,CAAC,EAAE,GAAG,EAAE,sBAAsB,EAAE;IACjC,CAAC,CAAC,SAAS,CAAC;AAEd,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAClC,MAAM,yBAAyB,GAAG,CAAC,GAAG,MAAM,CAAC;AAE7C,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,wCAAwC,IAAI,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,IAAI,gCAAgC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CACX,0BAA0B,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;YAC5F,kEAAkE;YAClE,wBAAwB,IAAI,EAAE,CACjC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CACX,0BAA0B,IAAI,oBAAoB,IAAI,CAAC,GAAG,gCAAgC,IAAI,IAAI;YAChG,mCAAmC,CACtC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,YAAY,0BAA0B,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAc,CAAC;AACnB,IAAI,CAAC;IACH,IAAI,GAAG,WAAW,EAAE,CAAC;AACvB,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,iBAAiB,GAAG,uBAAuB,EAAE,CAAC;AAEpD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACnC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AAC/B,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC7B,eAAe,CAAC,UAAU,CAAC,CAAC;AAC9B,CAAC;AACD,IAAI,CAAC;IACH,8BAA8B,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACjD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AAE7C,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,YAAsC,CAAC;AAC3C,IAAI,CAAC;IACH,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC;IACH,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAElE,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;IAC7B,OAAO,CAAC,GAAG,CACT,OAAO,CAAC,IAAI,KAAK,WAAW;QAC1B,CAAC,CAAC,iDAAiD;QACnD,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO;YACxB,CAAC,CAAC,wEAAwE;YAC1E,CAAC,CAAC,8DAA8D,CACrE,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE;IAC1B,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AACL,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACvE,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAC9E,CAAC;AACF,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,EAAE,CAAC;IAC3C,GAAG,CAAC,UAAU,CACZ,4EAA4E,EAC5E,OAAO,CACR,CAAC;AACJ,CAAC;AACD,KAAK,MAAM,MAAM,IAAI,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC;IACrE,GAAG,CAAC,UAAU,CACZ,iDAAiD,MAAM,CAAC,IAAI,EAAE,EAC9D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CACvB,CAAC;AACJ,CAAC;AACD,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC;AAC9C,MAAM,aAAa,GACjB,eAAe,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM;IAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE;IAClE,CAAC,CAAC,SAAS,CAAC;AAChB,MAAM,kBAAkB,GACtB,eAAe,EAAE,KAAK,EAAE,IAAI,IAAI,eAAe,EAAE,KAAK,EAAE,MAAM;IAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE;IAChF,CAAC,CAAC,SAAS,CAAC;AAEhB,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,OAAO;IACtB,CAAC,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC,KAAK,EAAE;QACxC,MAAM,EAAE,aAAa;QACrB,WAAW,EAAE,kBAAkB;KAChC,CAAC;IACJ,CAAC,CAAC,SAAS,CAAC;AAChB,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAE9E,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;IAC7B,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACpD,MAAM,qBAAqB,GAAG,IAAI,6BAA6B,EAAE,CAAC;AAClE,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;AACpC,MAAM,eAAe,GAAG,IAAI,uBAAuB,EAAE,CAAC;AACtD,WAAW,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACjE,WAAW,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AACxE,WAAW,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;AAElE,SAAS,aAAa;IACpB,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IACxC,IAAI,SAAS;QAAE,OAAO,oBAAoB,SAAS,EAAE,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC;AACD,MAAM,+BAA+B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,IAAI,WAAW,EAAE,CAAC;IAChB,MAAM,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,WAAW,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IAC5D,WAAW,CACT,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAC3D,+BAA+B,CAChC,CAAC,KAAK,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,cAAc,GAAiC,EAAE,CAAC;AAExD,SAAS,gBAAgB,CAAC,EAAU;IAClC,MAAM,GAAG,GAAG,cAAc,CAAC,MAAwC,CAAC;IACpE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,MAAM,GAAG,GAAG,cAAc,CAAC,KAA2C,CAAC;IACvE,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,8BAA8B;IACrC,MAAM,SAAS,GAA8B,EAAE,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,gBAAgB,GAAqB;YACzC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC/D,MAAM,GAAG,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;gBACjD,MAAM,EAAE,GAAG,QAAQ;oBACjB,CAAC,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC;oBACtE,CAAC,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9D,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;gBAChF,OAAO,EAAE,EAAE,EAAE,CAAC;YAChB,CAAC;YACD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACrE,MAAM,GAAG,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;gBACjD,MAAM,GAAG,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;gBAChE,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,mBAAmB,EAAE,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,CACpD,eAAe,CAAC,mBAAmB,CAAC,CAAC,mBAAmB,CAAC,cAAc,EAAE,EAAE,EAAE,QAAQ,CAAC;SACzF,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,kBAAkB,GAAG,YAAY,CAAC,YAAY,CAAC;IACrD,MAAM,iBAAiB,GAAsB;QAC3C,iBAAiB,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CAC7C,gBAAgB,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC;QACjF,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,CACpC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;QAC5E,SAAS,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,CACnC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,KAAK,CAAC;QAC3E,mBAAmB,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CACvD,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAChE,cAAc,EACd,SAAS,EACT,IAAI,CACL;QACH,UAAU,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CACtC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,OAAO,CAAC;QAC5E,WAAW,EAAE,CAAC,cAAc,EAAE,OAAO,EAAE,EAAE,CACvC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC;KAC/E,CAAC;IACF,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAClF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC5F,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;AAC9C,IAAI,WAAW;IAAE,YAAY,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;AAEvE,IAAI,cAA0C,CAAC;AAC/C,MAAM,OAAO,GAAG,yBAAyB,CAAC;IACxC,SAAS;IACT,MAAM,EAAE,WAAW;IACnB,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc;IACpC,OAAO;IACP,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,qBAAqB;IACrB,eAAe;IACf,aAAa;IACb,SAAS;IACT,aAAa,EAAE,aAAa,EAAE;IAC9B,yBAAyB,EAAE,8BAA8B,EAAE;IAC3D,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,KAAK,MAAM;IACrB,CAAC,CAAC,MAAM;IACR,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;QAC5B,CAAC,CAAC,aAAa,OAAO,CAAC,SAAS,EAAE;QAClC,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC;AACjC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACxC,wBAAwB,EAAE,CAAC;AAE3B,SAAS,wBAAwB;IAC/B,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzB,GAAG,CAAC,OAAO,CACT,iCAAiC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CACnG,CAAC;IAEF,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,OAAO,CACT,UAAU,CAAC,UAAU,CAAC;QACpB,CAAC,CAAC,wBAAwB,UAAU,EAAE;QACtC,CAAC,CAAC,8BAA8B,UAAU,6BAA6B,CAC1E,CAAC;AACJ,CAAC;AAED,IAAI,QAAQ,EAAE,CAAC;IACb,MAAM,sBAAsB,GAAG,eAAe,CAAC;IAC/C,MAAM,aAAa,GAAG,eAAe,CAAC;IACtC,IAAI,CAAC,sBAAsB,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,sBAAsB,CAAC,OAAO,EAAE;QAC5D,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,sBAAsB;QAChC,SAAS;KACV,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,GAAG,iBAAiB,CAAC;IACzC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AACjC,CAAC;AACD,IAAI,WAAW,EAAE,CAAC;IAChB,MAAM,aAAa,GAAG,kBAAkB,CAAC;IACzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,OAAO,EAAE;QAC7D,KAAK,EAAE,aAAa;QACpB,SAAS;QACT,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,GAAG,CAAC,UAAU,CACZ,uEAAuE,EACvE,KAAK,CAAC,OAAO,CACd,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;IACH,cAAc,CAAC,QAAQ,GAAG,oBAAoB,CAAC;IAC/C,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;AACpC,CAAC;AACD,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,YAAY,GAAG,iBAAiB,CAAC;IACvC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1E,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,OAAO,EAAE;QAC3D,KAAK,EAAE,YAAY;QACnB,SAAS;KACV,CAAC,CAAC;IACH,cAAc,CAAC,OAAO,GAAG,mBAAmB,CAAC;IAC7C,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC;AACD,IAAI,YAAY,IAAI,kBAAkB,EAAE,CAAC;IACvC,cAAc,CAAC,MAAM,GAAG,IAAI,kBAAkB,CAAC,OAAO,EAAE;QACtD,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,YAAY;QACpB,SAAS;KACV,CAAC,CAAC;IACH,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAwC,CAAC;AAE1E,MAAM,SAAS,GAAG,SAAS;IACzB,CAAC,CAAC,cAAc,CAAC;QACb,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,qBAAqB,EAAE;QAC7B,cAAc;QACd,YAAY;QACZ,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE;YAClD,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,GAAG;gBAAE,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,qBAAqB;QACrB,sBAAsB,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE;QAC9D,YAAY,EAAE;YACZ,eAAe;YACf,SAAS;YACT,OAAO,EAAE,OAAO;YAChB,OAAO;YACP,cAAc;YACd,cAAc,EAAE,GAAG,EAAE,CAAC,cAAc;SACrC;QACD,aAAa,EACX,qBAAqB,IAAI,SAAS;YAChC,CAAC,CAAC;gBACE,MAAM,EAAE,qBAAqB;gBAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC3D;YACH,CAAC,CAAC,SAAS;KAChB,CAAC;IACJ,CAAC,CAAC,SAAS,CAAC;AAEd,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,SAAS,aAAa;IACpB,IAAI,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IACzC,OAAO,cAAc,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;QACvC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACzD,aAAa,EAAE;KAChB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1C,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CACpD,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAC;AACpG,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,KAAuB;IACzD,IAAI,OAAmC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;QACtB,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,EAAE;YAC7B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACxE,CAAC,CAAC;KACH,CAAC,CAAC;IACH,IAAI,OAAO;QAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,UAAyB;IAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IACvD,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAc;YAC1B,IAAI,KAAK,CAAC,0CAA0C,yBAAyB,IAAI,CAAC;YAClF,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC5F,CAAC;QACF,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAG,CAAC,MAAM,aAAa,CAAC;QACxB,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;KAC7E,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1C,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CACpD,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;AACnG,CAAC;AAED,cAAc,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC/D,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAA2C,CAAC;AACrF,IAAI,iBAAiB,EAAE,CAAC;IACtB,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACtD,CAAC;AACD,cAAc,CAAC,KAAK,EAAE,CAAC;AAEvB,MAAM,QAAQ,GAAG,4BAA4B,CAAC;IAC5C,IAAI,EAAE,GAAG,EAAE;QACT,MAAM,UAAU,GAAG,sBAAsB,EAAE,CAAC;QAC5C,OAAO,gBAAgB,CAAC;YACtB;gBACE,IAAI,EAAE,iBAAiB;gBACvB,GAAG,EAAE,KAAK,IAAI,EAAE;oBACd,cAAc,EAAE,IAAI,EAAE,CAAC;gBACzB,CAAC;aACF;YACD,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,CAAC,EAAE;SAC5E,CAAC,CAAC;IACL,CAAC;IACD,qBAAqB,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;IACxD,YAAY;IACZ,IAAI,EAAE,GAAG,CAAC,UAAU;IACpB,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;CACnC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AAEtD,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACxC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACxB,GAAG,CAAC,UAAU,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACH,CACF,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport \"./observability/instrument.js\";\n\nimport { existsSync, mkdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { MessagingBot } from \"./types.js\";\nimport { GithubMessagingBot } from \"./adapters/github/bot.js\";\nimport { createGithubToolPack } from \"./adapters/github/tool-pack.js\";\nimport { parseGithubPolicy } from \"./adapters/github/policy.js\";\nimport type { GithubPolicy, PlatformGithubOps } from \"./adapters/github/types.js\";\nimport { TelegramMessagingBot } from \"./adapters/telegram/bot.js\";\nimport { SlackMessagingBot as SlackMessagingBotClass } from \"./adapters/slack/bot.js\";\nimport { createSlackToolPack } from \"./adapters/slack/tool-pack.js\";\nimport type { PlatformSlackOps } from \"./adapters/slack/types.js\";\nimport { SLACK_BLOCKKIT_TOOL } from \"./adapters/slack/tools/blockkit.js\";\nimport { GITHUB_CHECKS_TOOL } from \"./adapters/github/tools/checks.js\";\nimport { GITHUB_ISSUE_TOOL } from \"./adapters/github/tools/issue.js\";\nimport { GITHUB_PR_TOOL } from \"./adapters/github/tools/pr.js\";\nimport { GITHUB_READ_TOOL } from \"./adapters/github/tools/read.js\";\nimport { GITHUB_REVIEW_REPLY_TOOL } from \"./adapters/github/tools/review-reply.js\";\nimport type { PlatformToolPackFactory } from \"./harness/tools/types.js\";\nimport { EventScheduler } from \"./events/scheduler.js\";\nimport * as log from \"./log.js\";\nimport { createProcessShutdownHandler, runShutdownSteps } from \"./cli/process-lifecycle.js\";\nimport { closeWebServer, startWebServer } from \"./adapters/web/server.js\";\nimport { InMemoryAdminTokenStore } from \"./adapters/web/admin/portal.js\";\nimport { InMemoryLinkTokenStore } from \"./adapters/web/login/portal.js\";\nimport { InMemorySessionViewTokenStore } from \"./adapters/web/session-view/portal.js\";\nimport { DockerContainerManager } from \"./sandbox/provisioner.js\";\nimport {\n findUnusedSettings,\n loadGithubSettings,\n loadGlobalSettings,\n loadJevSettings,\n MissingGlobalSettingsError,\n} from \"./settings/index.js\";\nimport { assertStateDirOutsideWorkspace } from \"./file-guards.js\";\nimport { resolveLinkBaseUrl, resolveLinkListenHost } from \"./env-manifest.js\";\nimport { configureHttpDispatcher } from \"./harness/http.js\";\nimport { configureJev } from \"./harness/jev.js\";\nimport { defaultModelsJsonPath, MikanModels } from \"./harness/models.js\";\nimport { RunEventHub } from \"./harness/run-events.js\";\nimport { readEnv } from \"./env-manifest.js\";\nimport { ensureDirExists, readJsonFileIfExists } from \"./file-guards.js\";\nimport { SandboxError } from \"./sandbox/utils.js\";\nimport { validateSandbox } from \"./sandbox/registry.js\";\nimport { helpText, resolveBoot } from \"./cli/boot.js\";\nimport type { BootPlan } from \"./cli/types.js\";\nimport { runOnboardCommand } from \"./cli/onboard.js\";\nimport {\n envReport,\n noPlatformsMessage,\n platformIsActive,\n retiredEnvWarnings,\n} from \"./env-manifest.js\";\nimport { FileVaultManager } from \"./vault/index.js\";\nimport { runMigrateCommand } from \"./cli/migrate.js\";\nimport { runOfficeCommand } from \"./cli/office.js\";\nimport { formatPendingMigrations, pendingMigrations } from \"./migrations/index.js\";\nimport { createOfficeAddress, createWorkspace, listRegisteredOffices } from \"./office/index.js\";\nimport { createConversationRuntime } from \"./runtime/conversation-runtime.js\";\nimport type { McpServerConfig } from \"./harness/types.js\";\nimport { captureError, shutdownObservability } from \"./observability/index.js\";\nimport { MemoryCapture } from \"./memory-capture/index.js\";\nimport { errorMessage, isRecord } from \"./unknown-values.js\";\n\nfunction getVersion(): string {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const possiblePaths = [\n join(moduleDir, \"package.json\"),\n join(dirname(moduleDir), \"package.json\"),\n join(process.cwd(), \"package.json\"),\n ];\n\n for (const pkgPath of possiblePaths) {\n const pkg = readJsonFileIfExists(\n pkgPath,\n (value): value is { version?: unknown } => isRecord(value),\n () => \"Ignoring package.json while resolving version\",\n );\n if (typeof pkg?.version === \"string\" && pkg.version) return pkg.version;\n }\n return \"unknown\";\n}\n\nconst SLACK_APP_TOKEN = readEnv(\"SLACK_APP_TOKEN\");\nconst SLACK_BOT_TOKEN = readEnv(\"SLACK_BOT_TOKEN\");\nconst TELEGRAM_BOT_TOKEN = readEnv(\"TELEGRAM_BOT_TOKEN\");\nconst DISCORD_BOT_TOKEN = readEnv(\"DISCORD_BOT_TOKEN\");\nconst GITHUB_AGENT_TOKEN = readEnv(\"GITHUB_AGENT_TOKEN\");\nconst GITHUB_WEBHOOK_SECRET = readEnv(\"GITHUB_WEBHOOK_SECRET\");\nconst LINK_BASE_URL = resolveLinkBaseUrl();\nconst LINK_PORT_RAW = readEnv(\"LINK_PORT\");\nconst LINK_PORT = LINK_PORT_RAW ? parseInt(LINK_PORT_RAW, 10) : LINK_BASE_URL ? 8181 : undefined;\nconst OPENCONNECTOR_ENDPOINT = readEnv(\"OPENCONNECTOR_ENDPOINT\");\nconst openConnector: McpServerConfig | undefined = OPENCONNECTOR_ENDPOINT\n ? { url: OPENCONNECTOR_ENDPOINT }\n : undefined;\n\nconst WORLD_WRITABLE_MODE = 0o002;\nconst SHUTDOWN_DRAIN_TIMEOUT_MS = 5 * 60_000;\n\nfunction ensureSecureStateDir(path: string): void {\n let stat;\n try {\n stat = statSync(path);\n } catch (err) {\n const code = (err as NodeJS.ErrnoException).code;\n if (code === \"ENOENT\") {\n mkdirSync(path, { recursive: true, mode: 0o700 });\n return;\n }\n console.error(`Error: cannot access state directory ${path}: ${(err as Error).message}`);\n process.exit(1);\n }\n\n if (!stat.isDirectory()) {\n console.error(`Error: state directory ${path} exists but is not a directory`);\n process.exit(1);\n }\n\n if (stat.mode & WORLD_WRITABLE_MODE) {\n console.error(\n `Error: state directory ${path} is world-writable (mode ${(stat.mode & 0o777).toString(8)}). ` +\n `Credentials stored there would be exposed to other local users. ` +\n `Fix with: chmod 0700 ${path}`,\n );\n process.exit(1);\n }\n\n const euid = typeof process.geteuid === \"function\" ? process.geteuid() : undefined;\n if (euid !== undefined && stat.uid !== euid) {\n console.error(\n `Error: state directory ${path} is owned by uid ${stat.uid} but mikan is running as uid ${euid}. ` +\n `Run mikan as the directory owner.`,\n );\n process.exit(1);\n }\n}\n\nfunction handleStartupError(error: unknown): never {\n if (error instanceof SandboxError) {\n for (const line of error.formatForCli()) {\n console.error(line);\n }\n process.exit(1);\n }\n if (error instanceof MissingGlobalSettingsError) {\n console.error(`Missing global settings: ${error.settingsPath}`);\n console.error(\"\");\n console.error(\"Run onboarding to create it:\");\n console.error(` mikan onboard`);\n console.error(\"\");\n console.error(\"Then review the generated settings.json and start mikan again.\");\n process.exit(1);\n }\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`);\n process.exit(1);\n }\n console.error(String(error));\n process.exit(1);\n}\n\nlet plan: BootPlan;\ntry {\n plan = resolveBoot();\n} catch (error) {\n handleStartupError(error);\n}\n\nif (plan.mode === \"office\") {\n process.exit(runOfficeCommand(plan.officeArgs ?? []));\n}\n\nif (plan.mode === \"migrate\") {\n process.exit(await runMigrateCommand(plan.migrateArgs ?? []));\n}\n\nconst httpIdleTimeoutMs = configureHttpDispatcher();\n\nif (plan.mode === \"help\") {\n console.log(helpText());\n process.exit(0);\n}\n\nif (plan.mode === \"env\") {\n console.log(envReport());\n process.exit(0);\n}\n\nif (plan.mode === \"version\") {\n console.log(getVersion());\n process.exit(0);\n}\n\nif (plan.mode === \"onboard\") {\n const stateDir = plan.stateDir;\n ensureSecureStateDir(stateDir);\n try {\n process.exit(await runOnboardCommand(stateDir));\n } catch (err) {\n console.error(errorMessage(err));\n process.exit(1);\n }\n}\n\nconst sandbox = plan.sandbox;\nconst stateDir = plan.stateDir;\nconst workingDir = plan.workingDir;\nensureSecureStateDir(stateDir);\nif (!plan.workingDirExplicit) {\n ensureDirExists(workingDir);\n}\ntry {\n assertStateDirOutsideWorkspace(stateDir, workingDir, sandbox.type);\n} catch (error) {\n handleStartupError(error);\n}\n\nconst hasSlack = platformIsActive(\"slack\");\nconst hasTelegram = platformIsActive(\"telegram\");\nconst hasDiscord = platformIsActive(\"discord\");\nconst hasGithub = platformIsActive(\"github\");\n\nif (!hasSlack && !hasTelegram && !hasDiscord && !hasGithub) {\n console.error(noPlatformsMessage());\n process.exit(1);\n}\n\nlet githubPolicy: GithubPolicy | undefined;\ntry {\n githubPolicy = hasGithub ? parseGithubPolicy(loadGithubSettings(stateDir)) : undefined;\n if (hasGithub && !LINK_PORT) {\n throw new Error(\"GitHub receives webhooks on the link server: set LINK_PORT and LINK_URL\");\n }\n} catch (error) {\n handleStartupError(error);\n}\n\nconst pending = pendingMigrations(stateDir);\nif (pending.length > 0) {\n console.error(formatPendingMigrations({ pending, workspaceRoot: workingDir, sandbox }));\n process.exit(1);\n}\n\ntry {\n await validateSandbox(sandbox);\n} catch (error) {\n handleStartupError(error);\n}\n\nconst workspace = createWorkspace({ root: workingDir, stateDir });\n\nconst vaultManager = new FileVaultManager(stateDir);\nif (vaultManager.isEnabled()) {\n console.log(\n sandbox.type === \"container\"\n ? \" Vault system enabled. Container vault active.\"\n : sandbox.type === \"image\"\n ? \" Vault system enabled. Conversation-scoped credential routing active.\"\n : \" Vault system enabled. Host mode will not inject vault env.\",\n );\n}\n\nconst startupConfig = (() => {\n try {\n return loadGlobalSettings(stateDir);\n } catch (error) {\n handleStartupError(error);\n }\n})();\nconst registeredOffices = listRegisteredOffices(stateDir).map((record) =>\n workspace.office(createOfficeAddress(record.platform, record.conversationId)),\n);\nfor (const warning of retiredEnvWarnings()) {\n log.logWarning(\n \"Environment variable that mikan ignores; remove it from ~/.mikan/mikan.env\",\n warning,\n );\n}\nfor (const unused of findUnusedSettings(stateDir, registeredOffices)) {\n log.logWarning(\n `Settings that mikan ignores; remove them from ${unused.path}`,\n unused.keys.join(\", \"),\n );\n}\nconst sandboxSettings = startupConfig.sandbox;\nconst sandboxLimits =\n sandboxSettings?.cpus || sandboxSettings?.memory\n ? { cpus: sandboxSettings?.cpus, memory: sandboxSettings?.memory }\n : undefined;\nconst sandboxBoostLimits =\n sandboxSettings?.boost?.cpus || sandboxSettings?.boost?.memory\n ? { cpus: sandboxSettings?.boost?.cpus, memory: sandboxSettings?.boost?.memory }\n : undefined;\n\nconst provisioner =\n sandbox.type === \"image\"\n ? new DockerContainerManager(sandbox.image, {\n limits: sandboxLimits,\n boostLimits: sandboxBoostLimits,\n })\n : undefined;\nconst resourceController = sandbox.type === \"image\" ? provisioner : undefined;\n\nif (sandbox.type === \"image\") {\n ensureDirExists(workspace.skillsDir);\n ensureDirExists(workspace.agentsDir);\n try {\n writeFileSync(workspace.memoryPath, \"\", { flag: \"wx\" });\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"EEXIST\") throw err;\n }\n}\n\nconst linkTokenStore = new InMemoryLinkTokenStore();\nconst sessionViewTokenStore = new InMemorySessionViewTokenStore();\nconst runEvents = new RunEventHub();\nconst adminTokenStore = new InMemoryAdminTokenStore();\nsetInterval(() => linkTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => sessionViewTokenStore.purge(), 5 * 60 * 1000).unref();\nsetInterval(() => adminTokenStore.purge(), 5 * 60 * 1000).unref();\n\nfunction portalBaseUrl(): string | undefined {\n if (LINK_BASE_URL) return LINK_BASE_URL;\n if (LINK_PORT) return `http://localhost:${LINK_PORT}`;\n return undefined;\n}\nconst MANAGED_SANDBOX_IDLE_TIMEOUT_MS = 10 * 60 * 1000;\n\nif (provisioner) {\n await provisioner.reconcile(workspace.root);\n await provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS);\n setInterval(\n () => provisioner.stopIdle(MANAGED_SANDBOX_IDLE_TIMEOUT_MS),\n MANAGED_SANDBOX_IDLE_TIMEOUT_MS,\n ).unref();\n}\n\nconst botsByPlatform: Record<string, MessagingBot> = {};\n\nfunction requireGithubBot(op: string): GithubMessagingBot {\n const bot = botsByPlatform.github as GithubMessagingBot | undefined;\n if (!bot) {\n throw new Error(`${op}: the GitHub platform is not running`);\n }\n return bot;\n}\n\nfunction requireSlackBot(op: string): SlackMessagingBotClass {\n const bot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\n if (!bot) {\n throw new Error(`${op}: the Slack platform is not running`);\n }\n return bot;\n}\n\nfunction buildPlatformToolPackFactories(): PlatformToolPackFactory[] {\n const factories: PlatformToolPackFactory[] = [];\n if (hasSlack) {\n const platformSlackOps: PlatformSlackOps = {\n postBlocks: async (conversationId, { text, blocks, threadTs }) => {\n const bot = requireSlackBot(SLACK_BLOCKKIT_TOOL);\n const ts = threadTs\n ? await bot.postInThreadBlocks(conversationId, threadTs, text, blocks)\n : await bot.postMessageBlocks(conversationId, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, { slackBlocks: blocks });\n return { ts };\n },\n updateBlocks: async (conversationId, { ts, text, blocks, threadTs }) => {\n const bot = requireSlackBot(SLACK_BLOCKKIT_TOOL);\n await bot.updateMessageBlocks(conversationId, ts, text, blocks);\n bot.logBotResponse(conversationId, text, ts, threadTs, { slackBlocks: blocks });\n },\n ownsBlockKitMessage: (conversationId, ts, threadTs) =>\n requireSlackBot(SLACK_BLOCKKIT_TOOL).ownsBlockKitMessage(conversationId, ts, threadTs),\n };\n factories.push(() => createSlackToolPack(platformSlackOps));\n }\n if (!githubPolicy) return factories;\n const githubCapabilities = githubPolicy.capabilities;\n const platformGithubOps: PlatformGithubOps = {\n createPullRequest: (conversationId, request) =>\n requireGithubBot(GITHUB_PR_TOOL).ops.createPullRequest(conversationId, request),\n getChecks: (conversationId, branch) =>\n requireGithubBot(GITHUB_CHECKS_TOOL).ops.getChecks(conversationId, branch),\n getJobLog: (conversationId, jobId) =>\n requireGithubBot(GITHUB_CHECKS_TOOL).ops.getJobLog(conversationId, jobId),\n replyToReviewThread: (conversationId, commentId, body) =>\n requireGithubBot(GITHUB_REVIEW_REPLY_TOOL).ops.replyToReviewThread(\n conversationId,\n commentId,\n body,\n ),\n readGithub: (conversationId, request) =>\n requireGithubBot(GITHUB_READ_TOOL).ops.readGithub(conversationId, request),\n manageIssue: (conversationId, request) =>\n requireGithubBot(GITHUB_ISSUE_TOOL).ops.manageIssue(conversationId, request),\n };\n factories.push(() => createGithubToolPack(platformGithubOps, githubCapabilities));\n return factories;\n}\n\nconst mikanModels = MikanModels.create({ modelsJsonPath: defaultModelsJsonPath(stateDir) });\nconst jevSettings = loadJevSettings(stateDir);\nif (jevSettings) configureJev({ models: mikanModels, ...jevSettings });\n\nlet eventScheduler: EventScheduler | undefined;\nconst handler = createConversationRuntime({\n workspace,\n models: mikanModels,\n eventScheduler: () => eventScheduler,\n sandbox,\n vaultManager,\n provisioner,\n resourceController,\n linkTokenStore,\n sessionViewTokenStore,\n adminTokenStore,\n openConnector,\n runEvents,\n portalBaseUrl: portalBaseUrl(),\n platformToolPackFactories: buildPlatformToolPackFactories(),\n memoryCapture: (models) => new MemoryCapture(models),\n});\n\nconst sandboxDesc =\n sandbox.type === \"host\"\n ? \"host\"\n : sandbox.type === \"container\"\n ? `container:${sandbox.container}`\n : `image:${sandbox.image}`;\nlog.logStartup(workingDir, sandboxDesc);\nlogHarnessStartupSummary();\n\nfunction logHarnessStartupSummary(): void {\n const proxy =\n process.env.HTTPS_PROXY ??\n process.env.https_proxy ??\n process.env.HTTP_PROXY ??\n process.env.http_proxy;\n log.logInfo(\n `HTTP dispatcher: idle timeout ${httpIdleTimeoutMs}ms${proxy ? `, proxy ${proxy}` : \", no proxy\"}`,\n );\n\n const modelsPath = defaultModelsJsonPath(stateDir);\n log.logInfo(\n existsSync(modelsPath)\n ? `Harness models.json: ${modelsPath}`\n : `Harness models.json: none (${modelsPath}) — built-in providers only`,\n );\n}\n\nif (hasSlack) {\n const slackMessagingBotToken = SLACK_BOT_TOKEN;\n const slackAppToken = SLACK_APP_TOKEN;\n if (!slackMessagingBotToken || !slackAppToken) {\n throw new Error(\"Slack startup requires both SLACK_APP_TOKEN and SLACK_BOT_TOKEN\");\n }\n const slackMessagingBot = new SlackMessagingBotClass(handler, {\n appToken: slackAppToken,\n botToken: slackMessagingBotToken,\n workspace,\n });\n botsByPlatform.slack = slackMessagingBot;\n log.logInfo(\"Platform: Slack\");\n}\nif (hasTelegram) {\n const telegramToken = TELEGRAM_BOT_TOKEN;\n if (!telegramToken) {\n throw new Error(\"Telegram startup requires TELEGRAM_BOT_TOKEN\");\n }\n const telegramMessagingBot = new TelegramMessagingBot(handler, {\n token: telegramToken,\n workspace,\n onPollingFailure: (error) => {\n log.logWarning(\n \"Telegram stopped delivering messages; exiting so the process restarts\",\n error.message,\n );\n process.exit(1);\n },\n });\n botsByPlatform.telegram = telegramMessagingBot;\n log.logInfo(\"Platform: Telegram\");\n}\nif (hasDiscord) {\n const discordToken = DISCORD_BOT_TOKEN;\n if (!discordToken) {\n throw new Error(\"Discord startup requires DISCORD_BOT_TOKEN\");\n }\n const { DiscordMessagingBot } = await import(\"./adapters/discord/bot.js\");\n const discordMessagingBot = new DiscordMessagingBot(handler, {\n token: discordToken,\n workspace,\n });\n botsByPlatform.discord = discordMessagingBot;\n log.logInfo(\"Platform: Discord\");\n}\nif (githubPolicy && GITHUB_AGENT_TOKEN) {\n botsByPlatform.github = new GithubMessagingBot(handler, {\n token: GITHUB_AGENT_TOKEN,\n policy: githubPolicy,\n workspace,\n });\n log.logInfo(\"Platform: GitHub\");\n}\n\nconst githubBot = botsByPlatform.github as GithubMessagingBot | undefined;\n\nconst webServer = LINK_PORT\n ? startWebServer({\n port: LINK_PORT,\n host: resolveLinkListenHost(),\n linkTokenStore,\n vaultManager,\n notify: async (platform, conversationId, message) => {\n const bot = botsByPlatform[platform];\n if (bot) await bot.postMessage(conversationId, message);\n },\n sessionViewTokenStore,\n sessionViewInteractive: { handler, botsByPlatform, runEvents },\n adminOptions: {\n adminTokenStore,\n workspace,\n runtime: handler,\n sandbox,\n botsByPlatform,\n eventScheduler: () => eventScheduler,\n },\n githubWebhook:\n GITHUB_WEBHOOK_SECRET && githubBot\n ? {\n secret: GITHUB_WEBHOOK_SECRET,\n onDelivery: (delivery) => void githubBot.receive(delivery),\n }\n : undefined,\n })\n : undefined;\n\nconst WEB_SERVER_CLOSE_GRACE_MS = 5000;\n\nfunction stopWebServer(): Promise<void> {\n if (!webServer) return Promise.resolve();\n return closeWebServer(webServer, WEB_SERVER_CLOSE_GRACE_MS);\n}\n\nasync function stopConversationIntake(): Promise<void> {\n const results = await Promise.allSettled([\n ...Object.values(botsByPlatform).map((bot) => bot.stop()),\n stopWebServer(),\n ]);\n const failures = results.flatMap((result) =>\n result.status === \"rejected\" ? [result.reason] : [],\n );\n if (failures.length > 0) throw new AggregateError(failures, \"Failed to stop conversation intake\");\n}\n\nasync function waitForGracefulDrain(drain: Promise<unknown>): Promise<boolean> {\n let timeout: NodeJS.Timeout | undefined;\n const settled = await Promise.race([\n drain.then(() => true),\n new Promise<false>((resolve) => {\n timeout = setTimeout(() => resolve(false), SHUTDOWN_DRAIN_TIMEOUT_MS);\n }),\n ]);\n if (timeout) clearTimeout(timeout);\n return settled;\n}\n\nasync function drainConversationWork(intakeStop: Promise<void>): Promise<void> {\n const gracefulDrain = Promise.allSettled([intakeStop]);\n if (!(await waitForGracefulDrain(gracefulDrain))) {\n const runtimeResult = await Promise.allSettled([handler.shutdown(0)]);\n const failures: unknown[] = [\n new Error(`Conversation work did not drain within ${SHUTDOWN_DRAIN_TIMEOUT_MS}ms`),\n ...runtimeResult.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : [])),\n ];\n throw new AggregateError(failures, \"Failed to drain conversation work\");\n }\n\n const results = [\n ...(await gracefulDrain),\n ...(await Promise.allSettled([handler.shutdown(SHUTDOWN_DRAIN_TIMEOUT_MS)])),\n ];\n const failures = results.flatMap((result) =>\n result.status === \"rejected\" ? [result.reason] : [],\n );\n if (failures.length > 0) throw new AggregateError(failures, \"Failed to drain conversation work\");\n}\n\neventScheduler = new EventScheduler(workspace, botsByPlatform);\nconst slackMessagingBot = botsByPlatform.slack as SlackMessagingBotClass | undefined;\nif (slackMessagingBot) {\n slackMessagingBot.setEventScheduler(eventScheduler);\n}\neventScheduler.start();\n\nconst shutdown = createProcessShutdownHandler({\n stop: () => {\n const intakeStop = stopConversationIntake();\n return runShutdownSteps([\n {\n name: \"event scheduler\",\n run: async () => {\n eventScheduler?.stop();\n },\n },\n { name: \"conversation work\", run: () => drainConversationWork(intakeStop) },\n ]);\n },\n shutdownObservability: () => shutdownObservability(5000),\n captureError,\n warn: log.logWarning,\n exit: (code) => process.exit(code),\n});\n\nprocess.on(\"SIGINT\", () => void shutdown(\"SIGINT\"));\nprocess.on(\"SIGTERM\", () => void shutdown(\"SIGTERM\"));\n\nawait Promise.all(\n Object.values(botsByPlatform).map((bot) =>\n bot.start().catch((err) => {\n log.logWarning(\"Failed to start bot\", errorMessage(err));\n process.exit(1);\n }),\n ),\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/conversation-runtime.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAEV,mBAAmB,EACnB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/conversation-runtime.ts"],"names":[],"mappings":"AAmDA,OAAO,KAAK,EAEV,mBAAmB,EACnB,0BAA0B,EAE3B,MAAM,YAAY,CAAC;AA6CpB,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAErB"}
|
|
@@ -11,6 +11,9 @@ import { formatNothingRunning, formatRestarting, formatStopped, formatStopping,
|
|
|
11
11
|
import { disabledVaultManager } from "../vault/index.js";
|
|
12
12
|
import { SessionLifecycle } from "./session-lifecycle.js";
|
|
13
13
|
import { errorMessage } from "../unknown-values.js";
|
|
14
|
+
import { SessionStore } from "../sessions/session-store.js";
|
|
15
|
+
import { stripTriggerSignature } from "../sessions/history-line.js";
|
|
16
|
+
import { isTaskRunId } from "../harness/tools/task.js";
|
|
14
17
|
function portalNotConfiguredTokenStore(portal) {
|
|
15
18
|
return {
|
|
16
19
|
create: () => {
|
|
@@ -167,6 +170,7 @@ class ConversationRuntimeImpl {
|
|
|
167
170
|
await this.waitForParentSession(address, sessionKey);
|
|
168
171
|
const lease = await this.acquireRunLease(options, sessionKey);
|
|
169
172
|
const { state } = lease;
|
|
173
|
+
state.detachOnShutdown = isTaskRunId(event.ts);
|
|
170
174
|
log.logInfo(`[${conversationId}] Starting run: ${event.text.substring(0, 50)}`);
|
|
171
175
|
const runPromise = this.sessions.settle(state, () => this.executeRun(options, sessionKey, state));
|
|
172
176
|
lease.release();
|
|
@@ -234,6 +238,9 @@ class ConversationRuntimeImpl {
|
|
|
234
238
|
if (result?.stopReason === "aborted") {
|
|
235
239
|
await postAbortNotice(state, bot, conversationId, context.platform.name);
|
|
236
240
|
}
|
|
241
|
+
else if (result && state.detachOnShutdown) {
|
|
242
|
+
await this.reportTaskOutcome(event.address, sessionKey, result.finalText ?? "");
|
|
243
|
+
}
|
|
237
244
|
if (result) {
|
|
238
245
|
this.memoryCapture?.capture({
|
|
239
246
|
office: this.options.workspace.office(event.address),
|
|
@@ -247,6 +254,14 @@ class ConversationRuntimeImpl {
|
|
|
247
254
|
recordGauge("agent.sessions.active", this.sessions.settlementCount() - 1);
|
|
248
255
|
}
|
|
249
256
|
}
|
|
257
|
+
async reportTaskOutcome(address, sessionKey, answer) {
|
|
258
|
+
try {
|
|
259
|
+
await SessionStore.reportTaskOutcome(this.options.workspace.office(address), sessionKey, stripTriggerSignature(answer));
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
log.logWarning(`[${sessionKey}] Could not report the task outcome`, errorMessage(error));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
250
265
|
async waitForParentSession(address, sessionKey) {
|
|
251
266
|
const conversationId = address.conversationId;
|
|
252
267
|
const office = this.options.workspace.office(address);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-runtime.js","sourceRoot":"","sources":["../../src/runtime/conversation-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n MessagingBot,\n ConversationContext,\n ConversationMessage,\n ConversationEvent,\n HandleNewCommandOptions,\n OfficeAddress,\n PlatformName,\n RunningSession,\n} from \"../types.js\";\nimport type { Office } from \"../office/types.js\";\nimport { createRunner } from \"../harness/runner.js\";\nimport type { PiAgentWrapper } from \"../types.js\";\nimport type { RunMemoryCapture } from \"../memory-capture/types.js\";\nimport { defaultModelsJsonPath, MikanModels } from \"../harness/models.js\";\nimport { isCommandText } from \"../adapters/commands/manifest.js\";\nimport { defaultCommandHandlers, dispatchCommand } from \"../adapters/commands/registry.js\";\nimport type { CommandHandler, CommandServices } from \"../adapters/commands/types.js\";\nimport { isPrivateConversation } from \"../adapters/commands/utils.js\";\nimport * as log from \"../log.js\";\nimport {\n addLifecycleEvent,\n createRunAttributionAttributes,\n recordCounter,\n recordDistribution,\n recordGauge,\n reportUserFacingError,\n withRunSpan,\n} from \"../observability/index.js\";\nimport {\n ChatHistorySync,\n hasMaterializedChatSession,\n waitForThreadSessionBootstrap,\n} from \"../sessions/chat-history-sync.js\";\nimport {\n assertSessionKeyBelongsToConversation,\n deriveSessionKey,\n threadSuffixOf,\n} from \"../sessions/session-key.js\";\nimport {\n formatNothingRunning,\n formatRestarting,\n formatStopped,\n formatStopping,\n} from \"../adapters/messages.js\";\nimport { disabledVaultManager } from \"../vault/index.js\";\nimport type { ConversationRuntimeState } from \"./types.js\";\nimport { SessionLifecycle } from \"./session-lifecycle.js\";\n\ntype ConversationState = ConversationRuntimeState;\n\nimport type {\n RunSessionOptions,\n ConversationRuntime,\n ConversationRuntimeOptions,\n SessionStateOptions,\n} from \"./types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\n\ntype RunResult = Awaited<ReturnType<PiAgentWrapper[\"run\"]>>;\n\nfunction portalNotConfiguredTokenStore(portal: string): { create: () => never } {\n return {\n create: () => {\n throw new Error(`${portal} portal not configured`);\n },\n };\n}\n\nfunction requestStop(state: ConversationRuntimeState): void {\n state.stopRequested = true;\n state.runner.abort();\n}\n\nasync function postAbortNotice(\n state: ConversationRuntimeState,\n bot: MessagingBot,\n conversationId: string,\n platformName: string,\n): Promise<void> {\n if (state.shutdownAborted) {\n recordCounter(\"agent.run.shutdown_aborted\", 1, { platform: platformName });\n const text = formatRestarting(bot);\n const ts = await bot.postMessage(conversationId, text);\n bot.logBotResponse?.(conversationId, text, ts);\n return;\n }\n if (!state.stopRequested) return;\n if (state.stopNoticeOwned) return;\n const thread = threadSuffixOf(state.sessionKey) ?? undefined;\n const text = formatStopped(bot);\n const ts =\n thread && bot.postInThread\n ? await bot.postInThread(conversationId, thread, text)\n : await bot.postMessage(conversationId, text);\n bot.logBotResponse?.(conversationId, text, ts, thread);\n}\n\nexport function createConversationRuntime(\n options: ConversationRuntimeOptions,\n): ConversationRuntime {\n return new ConversationRuntimeImpl(options);\n}\n\nclass ConversationRuntimeImpl implements ConversationRuntime {\n private readonly sessions = new SessionLifecycle();\n private readonly chatSessionManager = new ChatHistorySync({ isCommandText });\n private readonly commandServices: CommandServices;\n private readonly commandHandlers: readonly CommandHandler[];\n private readonly resolvedModels: MikanModels;\n private readonly memoryCapture: RunMemoryCapture | undefined;\n private isShuttingDown = false;\n\n constructor(private readonly options: ConversationRuntimeOptions) {\n this.resolvedModels =\n options.models ??\n MikanModels.create({ modelsJsonPath: defaultModelsJsonPath(options.workspace.stateDir) });\n this.memoryCapture = options.memoryCapture?.(this.resolvedModels);\n this.commandServices = {\n ...options,\n resourceController: options.resourceController ?? options.provisioner,\n vaultManager: options.vaultManager ?? disabledVaultManager,\n linkTokenStore: options.linkTokenStore ?? portalNotConfiguredTokenStore(\"Login\"),\n sessionViewTokenStore:\n options.sessionViewTokenStore ?? portalNotConfiguredTokenStore(\"Session viewer\"),\n adminTokenStore: options.adminTokenStore ?? portalNotConfiguredTokenStore(\"Admin\"),\n runtime: this,\n };\n this.commandHandlers = options.commandHandlers ?? defaultCommandHandlers(this.resolvedModels);\n }\n\n isRunning(address: OfficeAddress, sessionKey: string): boolean {\n return this.sessions.get(address, sessionKey)?.running === true;\n }\n\n getRunningSessions(): RunningSession[] {\n const sessions: RunningSession[] = [];\n for (const state of this.sessions.runningStates()) {\n if (state.startedAt) {\n const currentStep = state.runner.getCurrentStep();\n sessions.push({\n address: state.address,\n sessionKey: state.sessionKey,\n startedAt: state.startedAt,\n lastActivityAt: state.lastActivityAt,\n currentTool: currentStep?.label || currentStep?.toolName,\n stopping: state.stopRequested ? true : undefined,\n });\n }\n }\n return sessions;\n }\n\n async steer(message: ConversationMessage): Promise<boolean> {\n const state = this.sessions.get(message.address, message.sessionKey);\n if (!state?.running) return false;\n return state.runner.steer ? state.runner.steer(message) : false;\n }\n\n async handleStop(\n address: OfficeAddress,\n sessionKey: string,\n bot: MessagingBot,\n replyThreadTs?: string,\n ): Promise<void> {\n assertSessionKeyBelongsToConversation(sessionKey, address.conversationId);\n const post = async (text: string) => {\n const ts =\n replyThreadTs && bot.postInThread\n ? await bot.postInThread(address.conversationId, replyThreadTs, text)\n : await bot.postMessage(address.conversationId, text);\n bot.logBotResponse?.(address.conversationId, text, ts, replyThreadTs);\n return ts;\n };\n const state = this.sessions.get(address, sessionKey);\n if (!state?.running) {\n await post(formatNothingRunning(bot));\n return;\n }\n const settlement = state.runSettlement;\n state.stopNoticeOwned = true;\n requestStop(state);\n try {\n const ts = await post(formatStopping(bot));\n await settlement;\n const stoppedText = formatStopped(bot);\n await bot.updateMessage(address.conversationId, ts, stoppedText);\n bot.logBotResponse?.(address.conversationId, stoppedText, ts, replyThreadTs);\n } finally {\n state.stopNoticeOwned = false;\n }\n }\n\n forceStop(address: OfficeAddress, sessionKey: string): void {\n const state = this.sessions.get(address, sessionKey);\n if (state?.running) {\n log.logInfo(`[Force Stop] Force stopping session: ${sessionKey}`);\n requestStop(state);\n }\n }\n\n async handleNewCommand({ bot, message }: HandleNewCommandOptions): Promise<void> {\n const { address, sessionKey } = message;\n assertSessionKeyBelongsToConversation(sessionKey, address.conversationId);\n\n const activeState = this.sessions.get(address, sessionKey);\n if (activeState?.runSettlement) {\n if (activeState.running) requestStop(activeState);\n await activeState.runSettlement;\n }\n\n await this.sessions.runConversationMaintenance(address, async () => {\n await this.resetSession(address, sessionKey, bot);\n });\n }\n\n private async resetSession(\n address: OfficeAddress,\n sessionKey: string,\n bot: MessagingBot,\n ): Promise<void> {\n const conversationId = address.conversationId;\n const office = this.options.workspace.office(address);\n await this.sessions.discardAndWait(address, sessionKey);\n await this.chatSessionManager.resetSession({ office, sessionKey });\n\n log.logInfo(`[${conversationId}] Session reset: ${sessionKey}`);\n await bot.postMessage(conversationId, \"Conversation reset. Send a new message to start fresh.\");\n }\n\n async handleEvent(\n event: ConversationEvent,\n bot: MessagingBot,\n context: ConversationContext,\n ): Promise<void> {\n const sessionKey = deriveSessionKey(event);\n await this.sessions.enqueue(event.address, sessionKey, () =>\n this.runSession({ event, bot, context }),\n );\n }\n\n async runSession(options: RunSessionOptions): Promise<void> {\n const { event } = options;\n const conversationId = event.address.conversationId;\n if (this.isShuttingDown) {\n log.logInfo(\n `[${conversationId}] Rejected event during shutdown: ${event.text.substring(0, 50)}`,\n );\n return;\n }\n\n const sessionKey = deriveSessionKey(event);\n if (await this.handledBeforeRun(options, sessionKey)) return;\n\n const address = event.address;\n const releaseConversationWork = await this.sessions.acquireConversationWork(address);\n try {\n await this.waitForParentSession(address, sessionKey);\n\n const lease = await this.acquireRunLease(options, sessionKey);\n const { state } = lease;\n log.logInfo(`[${conversationId}] Starting run: ${event.text.substring(0, 50)}`);\n const runPromise = this.sessions.settle(state, () =>\n this.executeRun(options, sessionKey, state),\n );\n lease.release();\n recordGauge(\"agent.sessions.active\", this.sessions.settlementCount());\n await runPromise;\n } finally {\n releaseConversationWork();\n }\n }\n\n private async handledBeforeRun(options: RunSessionOptions, sessionKey: string): Promise<boolean> {\n const { event } = options;\n if (await this.dispatchSessionCommand(options, sessionKey)) return true;\n\n const activeSettlement = this.sessions.get(event.address, sessionKey)?.runSettlement;\n if (activeSettlement) await activeSettlement;\n return false;\n }\n\n private async acquireRunLease(\n { event, context }: RunSessionOptions,\n sessionKey: string,\n ): Promise<{ state: ConversationState; release: () => void }> {\n let lease: { state: ConversationState; release: () => void } | undefined;\n try {\n lease = await this.acquireState({\n address: event.address,\n sessionKey,\n currentMessageId: event.ts,\n trustModel: context.platform.trustModel ?? \"membership\",\n platformWorkspaceId: context.platform.workspaceId,\n });\n await lease.state.runner.syncChatHistory(event.ts);\n return lease;\n } catch (err) {\n lease?.release();\n reportUserFacingError(err, {\n domain: \"mikan\",\n surface: \"session_setup\",\n operation: \"get_or_create_state\",\n severity: \"error\",\n platform: context.platform.name,\n context: {\n conversationId: event.address.conversationId,\n sessionKey,\n messageId: context.message.id,\n threadTs: context.message.threadTs,\n attachmentCount: context.message.attachments?.length ?? 0,\n },\n });\n throw err;\n }\n }\n\n private async executeRun(\n { event, bot, context }: RunSessionOptions,\n sessionKey: string,\n state: ConversationState,\n ): Promise<void> {\n const conversationId = event.address.conversationId;\n try {\n const result = await this.runWithInstrumentation(\n context,\n { conversationId, sessionKey, startedAt: state.startedAt },\n async () => {\n await context.responder.setTyping(true);\n await context.responder.setWorking(true);\n try {\n return await state.runner.run(context.message, context.responder, context.platform);\n } finally {\n await context.responder.setWorking(false);\n }\n },\n );\n\n if (result?.stopReason === \"aborted\") {\n await postAbortNotice(state, bot, conversationId, context.platform.name);\n }\n if (result) {\n this.memoryCapture?.capture({\n office: this.options.workspace.office(event.address),\n message: context.message,\n stopReason: result.stopReason,\n reply: result.finalText ?? \"\",\n });\n }\n } finally {\n recordGauge(\"agent.sessions.active\", this.sessions.settlementCount() - 1);\n }\n }\n\n private async waitForParentSession(address: OfficeAddress, sessionKey: string): Promise<void> {\n const conversationId = address.conversationId;\n const office = this.options.workspace.office(address);\n const waited = await waitForThreadSessionBootstrap({\n parentSessionKey: conversationId,\n sessionKey,\n hasThreadSession: () => hasMaterializedChatSession({ office, sessionKey }),\n isParentRunning: () => this.sessions.get(address, conversationId)?.running === true,\n });\n if (waited) {\n log.logInfo(\n `[${conversationId}] Delayed thread bootstrap until parent session sealed: ${sessionKey}`,\n );\n }\n }\n\n private async dispatchSessionCommand(\n { event, bot, context }: RunSessionOptions,\n sessionKey: string,\n ): Promise<boolean> {\n return dispatchCommand(this.commandHandlers, {\n bot,\n responder: context.responder,\n platform: context.platform.name as PlatformName,\n address: event.address,\n platformUserId: event.user,\n platformUserName: context.message.userName,\n conversationId: event.address.conversationId,\n vaultConversationId: event.vaultConversationId,\n sessionKey,\n commandText: event.text,\n privateConversation: isPrivateConversation(event),\n services: this.commandServices,\n });\n }\n\n private async runWithInstrumentation(\n context: ConversationContext,\n meta: {\n conversationId: string;\n sessionKey: string;\n startedAt: number;\n },\n body: () => Promise<RunResult>,\n ): Promise<RunResult | undefined> {\n const { conversationId, sessionKey, startedAt } = meta;\n const { message, platform } = context;\n\n const attribution = createRunAttributionAttributes({\n conversationId,\n sessionKey,\n messageId: message.id,\n platform: platform.name,\n conversationKind: message.conversationKind,\n userId: message.userId,\n threadTs: message.threadTs,\n });\n\n recordCounter(\"agent.run.started\", 1, attribution);\n\n return withRunSpan(\n {\n conversationId,\n sessionKey,\n messageId: message.id,\n platform: platform.name,\n conversationKind: message.conversationKind,\n userId: message.userId,\n threadTs: message.threadTs,\n },\n async () => {\n addLifecycleEvent(\"agent.run.started\", {\n channel_id: attribution.channel_id,\n platform: platform.name,\n conversation_kind: message.conversationKind,\n has_attachments: (message.attachments?.length ?? 0) > 0,\n });\n\n try {\n const result = await body();\n const durationMs = Date.now() - startedAt;\n const completionAttrs = {\n ...attribution,\n stop_reason: result.stopReason,\n };\n recordDistribution(\"agent.run.duration\", durationMs, {\n unit: \"millisecond\",\n attributes: completionAttrs,\n });\n recordCounter(\"agent.run.completed\", 1, completionAttrs);\n addLifecycleEvent(\"agent.run.completed\", {\n channel_id: attribution.channel_id,\n platform: platform.name,\n stop_reason: result.stopReason,\n duration_ms: durationMs,\n });\n return result;\n } catch (err) {\n reportUserFacingError(err, {\n domain: \"mikan\",\n surface: \"agent_run\",\n operation: \"run\",\n severity: \"error\",\n platform: platform.name,\n context: {\n conversationId,\n sessionKey,\n messageId: message.id,\n threadTs: message.threadTs,\n attachmentCount: message.attachments?.length ?? 0,\n },\n });\n recordCounter(\"agent.run.errors\", 1, attribution);\n log.logWarning(`[${conversationId}] Run error`, errorMessage(err));\n await context.responder\n .replaceResponse(\"Could not complete the request. Please reply to retry or revise it.\")\n .catch(() => {});\n return undefined;\n }\n },\n );\n }\n\n refreshConversation(address: OfficeAddress): boolean {\n const cleared = this.sessions.invalidateConversation(address);\n if (cleared) log.logInfo(`[${address.conversationId}] Cleared cached session runners`);\n return cleared;\n }\n\n refreshAllConversations(): { busy: OfficeAddress[] } {\n const offices = this.sessions.offices();\n const result = this.sessions.invalidateAll();\n const busyKeys = new Set(\n result.busy.map((address) => `${address.platform}:${address.conversationId}`),\n );\n for (const address of offices) {\n if (busyKeys.has(`${address.platform}:${address.conversationId}`)) continue;\n log.logInfo(\n `[${address.conversationId}] Global settings changed; cleared cached session runners`,\n );\n }\n return result;\n }\n\n private async createCurrentRunner(\n options: SessionStateOptions,\n sessionScope: Awaited<ReturnType<ChatHistorySync[\"resolveSessionScope\"]>>,\n signal: AbortSignal,\n ): Promise<PiAgentWrapper> {\n const runnerFactory = this.options.runnerFactory ?? createRunner;\n return runnerFactory({\n sandboxConfig: this.options.sandbox,\n sessionKey: options.sessionKey,\n office: this.options.workspace.office(options.address),\n trustModel: options.trustModel,\n platformWorkspaceId: options.platformWorkspaceId,\n openConnector: this.options.openConnector,\n eventScheduler: this.options.eventScheduler?.(),\n sessionScope,\n chatHistory: this.chatSessionManager,\n signal,\n vaultManager: this.options.vaultManager,\n provisioner: this.options.provisioner,\n resourceController: this.options.resourceController,\n sessionView: this.options.sessionViewTokenStore\n ? {\n tokenStore: this.options.sessionViewTokenStore,\n portalBaseUrl: this.options.portalBaseUrl,\n }\n : undefined,\n platformToolPackFactories: this.options.platformToolPackFactories,\n models: this.resolvedModels,\n runEvents: this.options.runEvents,\n });\n }\n\n private acquireState(options: SessionStateOptions & { currentMessageId?: string }) {\n const { address, sessionKey } = options;\n const office = this.options.workspace.office(address);\n return this.sessions.acquire(address, sessionKey, (signal) =>\n this.materializeState(options, office, signal),\n );\n }\n\n private async materializeState(\n options: SessionStateOptions & { currentMessageId?: string },\n office: Office,\n signal: AbortSignal,\n ): Promise<ConversationState> {\n signal.throwIfAborted();\n const { address, sessionKey, currentMessageId } = options;\n const sessionScope = await this.chatSessionManager.resolveSessionScope({\n office,\n sessionKey,\n currentMessageId,\n });\n signal.throwIfAborted();\n return {\n address,\n sessionKey,\n running: false,\n runner: await this.createCurrentRunner(options, sessionScope, signal),\n stopRequested: false,\n lastAccessedAt: Date.now(),\n startedAt: 0,\n };\n }\n\n async shutdown(timeoutMs = 30_000): Promise<void> {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n log.logInfo(\"Shutting down gracefully...\");\n await this.sessions.shutdown(timeoutMs);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"conversation-runtime.js","sourceRoot":"","sources":["../../src/runtime/conversation-runtime.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAE3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,WAAW,GACZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,qCAAqC,EACrC,gBAAgB,EAChB,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAU1D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,SAAS,6BAA6B,CAAC,MAAc;IACnD,OAAO;QACL,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,wBAAwB,CAAC,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAA+B;IAClD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,KAA+B,EAC/B,GAAiB,EACjB,cAAsB,EACtB,YAAoB;IAEpB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,aAAa,CAAC,4BAA4B,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACvD,GAAG,CAAC,cAAc,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO;IACjC,IAAI,KAAK,CAAC,eAAe;QAAE,OAAO;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;IAC7D,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,EAAE,GACN,MAAM,IAAI,GAAG,CAAC,YAAY;QACxB,CAAC,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC;QACtD,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;IAClD,GAAG,CAAC,cAAc,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAmC;IAEnC,OAAO,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,uBAAuB;IAS3B,YAA6B,OAAmC;QAAnC,YAAO,GAAP,OAAO,CAA4B;QAR/C,aAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAClC,uBAAkB,GAAG,IAAI,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAKrE,mBAAc,GAAG,KAAK,CAAC;QAG7B,IAAI,CAAC,cAAc;YACjB,OAAO,CAAC,MAAM;gBACd,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG;YACrB,GAAG,OAAO;YACV,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW;YACrE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,oBAAoB;YAC1D,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,6BAA6B,CAAC,OAAO,CAAC;YAChF,qBAAqB,EACnB,OAAO,CAAC,qBAAqB,IAAI,6BAA6B,CAAC,gBAAgB,CAAC;YAClF,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,6BAA6B,CAAC,OAAO,CAAC;YAClF,OAAO,EAAE,IAAI;SACd,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChG,CAAC;IAED,SAAS,CAAC,OAAsB,EAAE,UAAkB;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAClE,CAAC;IAED,kBAAkB;QAChB,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBAClD,QAAQ,CAAC,IAAI,CAAC;oBACZ,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;oBACpC,WAAW,EAAE,WAAW,EAAE,KAAK,IAAI,WAAW,EAAE,QAAQ;oBACxD,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;iBACjD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAA4B;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,KAAK,EAAE,OAAO;YAAE,OAAO,KAAK,CAAC;QAClC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAsB,EACtB,UAAkB,EAClB,GAAiB,EACjB,aAAsB;QAEtB,qCAAqC,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;YAClC,MAAM,EAAE,GACN,aAAa,IAAI,GAAG,CAAC,YAAY;gBAC/B,CAAC,CAAC,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,EAAE,aAAa,EAAE,IAAI,CAAC;gBACrE,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC1D,GAAG,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;YACtE,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC;QACvC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,UAAU,CAAC;YACjB,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YACvC,MAAM,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;YACjE,GAAG,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;QAC/E,CAAC;gBAAS,CAAC;YACT,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAsB,EAAE,UAAkB;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,OAAO,EAAE,CAAC;YACnB,GAAG,CAAC,OAAO,CAAC,wCAAwC,UAAU,EAAE,CAAC,CAAC;YAClE,WAAW,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAE,GAAG,EAAE,OAAO,EAA2B;QAC9D,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACxC,qCAAqC,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QAE1E,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,WAAW,EAAE,aAAa,EAAE,CAAC;YAC/B,IAAI,WAAW,CAAC,OAAO;gBAAE,WAAW,CAAC,WAAW,CAAC,CAAC;YAClD,MAAM,WAAW,CAAC,aAAa,CAAC;QAClC,CAAC;QAED,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,OAAsB,EACtB,UAAkB,EAClB,GAAiB;QAEjB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAEnE,GAAG,CAAC,OAAO,CAAC,IAAI,cAAc,oBAAoB,UAAU,EAAE,CAAC,CAAC;QAChE,MAAM,GAAG,CAAC,WAAW,CAAC,cAAc,EAAE,wDAAwD,CAAC,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,WAAW,CACf,KAAwB,EACxB,GAAiB,EACjB,OAA4B;QAE5B,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAC1D,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CACzC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAA0B;QACzC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1B,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QACpD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,CACT,IAAI,cAAc,qCAAqC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACrF,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC;YAAE,OAAO;QAE7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACrF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAErD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC9D,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;YACxB,KAAK,CAAC,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,GAAG,CAAC,OAAO,CAAC,IAAI,cAAc,mBAAmB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAChF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAClD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAC5C,CAAC;YACF,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,WAAW,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;YACtE,MAAM,UAAU,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,uBAAuB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,OAA0B,EAAE,UAAkB;QAC3E,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1B,IAAI,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAExE,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC;QACrF,IAAI,gBAAgB;YAAE,MAAM,gBAAgB,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,EAAE,KAAK,EAAE,OAAO,EAAqB,EACrC,UAAkB;QAElB,IAAI,KAAoE,CAAC;QACzE,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;gBAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,UAAU;gBACV,gBAAgB,EAAE,KAAK,CAAC,EAAE;gBAC1B,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,IAAI,YAAY;gBACvD,mBAAmB,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;aAClD,CAAC,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,EAAE,OAAO,EAAE,CAAC;YACjB,qBAAqB,CAAC,GAAG,EAAE;gBACzB,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,eAAe;gBACxB,SAAS,EAAE,qBAAqB;gBAChC,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAC/B,OAAO,EAAE;oBACP,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;oBAC5C,UAAU;oBACV,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;oBAC7B,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;oBAClC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;iBAC1D;aACF,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CACtB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAqB,EAC1C,UAAkB,EAClB,KAAwB;QAExB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC9C,OAAO,EACP,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAC1D,KAAK,IAAI,EAAE;gBACT,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC;oBACH,OAAO,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACtF,CAAC;wBAAS,CAAC;oBACT,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CACF,CAAC;YAEF,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;gBACrC,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3E,CAAC;iBAAM,IAAI,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC;oBAC1B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;oBACpD,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,OAAsB,EACtB,UAAkB,EAClB,MAAc;QAEd,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,iBAAiB,CAClC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,EACtC,UAAU,EACV,qBAAqB,CAAC,MAAM,CAAC,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,UAAU,CAAC,IAAI,UAAU,qCAAqC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,OAAsB,EAAE,UAAkB;QAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC;YACjD,gBAAgB,EAAE,cAAc;YAChC,UAAU;YACV,gBAAgB,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;YAC1E,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,OAAO,KAAK,IAAI;SACpF,CAAC,CAAC;QACH,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CAAC,OAAO,CACT,IAAI,cAAc,2DAA2D,UAAU,EAAE,CAC1F,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAqB,EAC1C,UAAkB;QAElB,OAAO,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE;YAC3C,GAAG;YACH,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAoB;YAC/C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,cAAc,EAAE,KAAK,CAAC,IAAI;YAC1B,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ;YAC1C,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;YAC5C,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,UAAU;YACV,WAAW,EAAE,KAAK,CAAC,IAAI;YACvB,mBAAmB,EAAE,qBAAqB,CAAC,KAAK,CAAC;YACjD,QAAQ,EAAE,IAAI,CAAC,eAAe;SAC/B,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,OAA4B,EAC5B,IAIC,EACD,IAA8B;QAE9B,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACvD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAEtC,MAAM,WAAW,GAAG,8BAA8B,CAAC;YACjD,cAAc;YACd,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,aAAa,CAAC,mBAAmB,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;QAEnD,OAAO,WAAW,CAChB;YACE,cAAc;YACd,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,EACD,KAAK,IAAI,EAAE;YACT,iBAAiB,CAAC,mBAAmB,EAAE;gBACrC,UAAU,EAAE,WAAW,CAAC,UAAU;gBAClC,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,iBAAiB,EAAE,OAAO,CAAC,gBAAgB;gBAC3C,eAAe,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;gBAC1C,MAAM,eAAe,GAAG;oBACtB,GAAG,WAAW;oBACd,WAAW,EAAE,MAAM,CAAC,UAAU;iBAC/B,CAAC;gBACF,kBAAkB,CAAC,oBAAoB,EAAE,UAAU,EAAE;oBACnD,IAAI,EAAE,aAAa;oBACnB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC;gBACH,aAAa,CAAC,qBAAqB,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;gBACzD,iBAAiB,CAAC,qBAAqB,EAAE;oBACvC,UAAU,EAAE,WAAW,CAAC,UAAU;oBAClC,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,WAAW,EAAE,MAAM,CAAC,UAAU;oBAC9B,WAAW,EAAE,UAAU;iBACxB,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,qBAAqB,CAAC,GAAG,EAAE;oBACzB,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,WAAW;oBACpB,SAAS,EAAE,KAAK;oBAChB,QAAQ,EAAE,OAAO;oBACjB,QAAQ,EAAE,QAAQ,CAAC,IAAI;oBACvB,OAAO,EAAE;wBACP,cAAc;wBACd,UAAU;wBACV,SAAS,EAAE,OAAO,CAAC,EAAE;wBACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,eAAe,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;qBAClD;iBACF,CAAC,CAAC;gBACH,aAAa,CAAC,kBAAkB,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;gBAClD,GAAG,CAAC,UAAU,CAAC,IAAI,cAAc,aAAa,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnE,MAAM,OAAO,CAAC,SAAS;qBACpB,eAAe,CAAC,qEAAqE,CAAC;qBACtF,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACnB,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAsB;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,OAAO;YAAE,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,cAAc,kCAAkC,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,uBAAuB;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAC9E,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAAE,SAAS;YAC5E,GAAG,CAAC,OAAO,CACT,IAAI,OAAO,CAAC,cAAc,2DAA2D,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,OAA4B,EAC5B,YAAyE,EACzE,MAAmB;QAEnB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,YAAY,CAAC;QACjE,OAAO,aAAa,CAAC;YACnB,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YACnC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YACtD,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;YAChD,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE;YAC/C,YAAY;YACZ,WAAW,EAAE,IAAI,CAAC,kBAAkB;YACpC,MAAM;YACN,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB;YACnD,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB;gBAC7C,CAAC,CAAC;oBACE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB;oBAC9C,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;iBAC1C;gBACH,CAAC,CAAC,SAAS;YACb,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB;YACjE,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;SAClC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,OAA4D;QAC/E,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAC3D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAC/C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,OAA4D,EAC5D,MAAc,EACd,MAAmB;QAEnB,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;QAC1D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;YACrE,MAAM;YACN,UAAU;YACV,gBAAgB;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO;YACL,OAAO;YACP,UAAU;YACV,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC;YACrE,aAAa,EAAE,KAAK;YACpB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;YAC1B,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,MAAM;QAC/B,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;CACF","sourcesContent":["import type {\n MessagingBot,\n ConversationContext,\n ConversationMessage,\n ConversationEvent,\n HandleNewCommandOptions,\n OfficeAddress,\n PlatformName,\n RunningSession,\n} from \"../types.js\";\nimport type { Office } from \"../office/types.js\";\nimport { createRunner } from \"../harness/runner.js\";\nimport type { PiAgentWrapper } from \"../types.js\";\nimport type { RunMemoryCapture } from \"../memory-capture/types.js\";\nimport { defaultModelsJsonPath, MikanModels } from \"../harness/models.js\";\nimport { isCommandText } from \"../adapters/commands/manifest.js\";\nimport { defaultCommandHandlers, dispatchCommand } from \"../adapters/commands/registry.js\";\nimport type { CommandHandler, CommandServices } from \"../adapters/commands/types.js\";\nimport { isPrivateConversation } from \"../adapters/commands/utils.js\";\nimport * as log from \"../log.js\";\nimport {\n addLifecycleEvent,\n createRunAttributionAttributes,\n recordCounter,\n recordDistribution,\n recordGauge,\n reportUserFacingError,\n withRunSpan,\n} from \"../observability/index.js\";\nimport {\n ChatHistorySync,\n hasMaterializedChatSession,\n waitForThreadSessionBootstrap,\n} from \"../sessions/chat-history-sync.js\";\nimport {\n assertSessionKeyBelongsToConversation,\n deriveSessionKey,\n threadSuffixOf,\n} from \"../sessions/session-key.js\";\nimport {\n formatNothingRunning,\n formatRestarting,\n formatStopped,\n formatStopping,\n} from \"../adapters/messages.js\";\nimport { disabledVaultManager } from \"../vault/index.js\";\nimport type { ConversationRuntimeState } from \"./types.js\";\nimport { SessionLifecycle } from \"./session-lifecycle.js\";\n\ntype ConversationState = ConversationRuntimeState;\n\nimport type {\n RunSessionOptions,\n ConversationRuntime,\n ConversationRuntimeOptions,\n SessionStateOptions,\n} from \"./types.js\";\nimport { errorMessage } from \"../unknown-values.js\";\nimport { SessionStore } from \"../sessions/session-store.js\";\nimport { stripTriggerSignature } from \"../sessions/history-line.js\";\nimport { isTaskRunId } from \"../harness/tools/task.js\";\n\ntype RunResult = Awaited<ReturnType<PiAgentWrapper[\"run\"]>>;\n\nfunction portalNotConfiguredTokenStore(portal: string): { create: () => never } {\n return {\n create: () => {\n throw new Error(`${portal} portal not configured`);\n },\n };\n}\n\nfunction requestStop(state: ConversationRuntimeState): void {\n state.stopRequested = true;\n state.runner.abort();\n}\n\nasync function postAbortNotice(\n state: ConversationRuntimeState,\n bot: MessagingBot,\n conversationId: string,\n platformName: string,\n): Promise<void> {\n if (state.shutdownAborted) {\n recordCounter(\"agent.run.shutdown_aborted\", 1, { platform: platformName });\n const text = formatRestarting(bot);\n const ts = await bot.postMessage(conversationId, text);\n bot.logBotResponse?.(conversationId, text, ts);\n return;\n }\n if (!state.stopRequested) return;\n if (state.stopNoticeOwned) return;\n const thread = threadSuffixOf(state.sessionKey) ?? undefined;\n const text = formatStopped(bot);\n const ts =\n thread && bot.postInThread\n ? await bot.postInThread(conversationId, thread, text)\n : await bot.postMessage(conversationId, text);\n bot.logBotResponse?.(conversationId, text, ts, thread);\n}\n\nexport function createConversationRuntime(\n options: ConversationRuntimeOptions,\n): ConversationRuntime {\n return new ConversationRuntimeImpl(options);\n}\n\nclass ConversationRuntimeImpl implements ConversationRuntime {\n private readonly sessions = new SessionLifecycle();\n private readonly chatSessionManager = new ChatHistorySync({ isCommandText });\n private readonly commandServices: CommandServices;\n private readonly commandHandlers: readonly CommandHandler[];\n private readonly resolvedModels: MikanModels;\n private readonly memoryCapture: RunMemoryCapture | undefined;\n private isShuttingDown = false;\n\n constructor(private readonly options: ConversationRuntimeOptions) {\n this.resolvedModels =\n options.models ??\n MikanModels.create({ modelsJsonPath: defaultModelsJsonPath(options.workspace.stateDir) });\n this.memoryCapture = options.memoryCapture?.(this.resolvedModels);\n this.commandServices = {\n ...options,\n resourceController: options.resourceController ?? options.provisioner,\n vaultManager: options.vaultManager ?? disabledVaultManager,\n linkTokenStore: options.linkTokenStore ?? portalNotConfiguredTokenStore(\"Login\"),\n sessionViewTokenStore:\n options.sessionViewTokenStore ?? portalNotConfiguredTokenStore(\"Session viewer\"),\n adminTokenStore: options.adminTokenStore ?? portalNotConfiguredTokenStore(\"Admin\"),\n runtime: this,\n };\n this.commandHandlers = options.commandHandlers ?? defaultCommandHandlers(this.resolvedModels);\n }\n\n isRunning(address: OfficeAddress, sessionKey: string): boolean {\n return this.sessions.get(address, sessionKey)?.running === true;\n }\n\n getRunningSessions(): RunningSession[] {\n const sessions: RunningSession[] = [];\n for (const state of this.sessions.runningStates()) {\n if (state.startedAt) {\n const currentStep = state.runner.getCurrentStep();\n sessions.push({\n address: state.address,\n sessionKey: state.sessionKey,\n startedAt: state.startedAt,\n lastActivityAt: state.lastActivityAt,\n currentTool: currentStep?.label || currentStep?.toolName,\n stopping: state.stopRequested ? true : undefined,\n });\n }\n }\n return sessions;\n }\n\n async steer(message: ConversationMessage): Promise<boolean> {\n const state = this.sessions.get(message.address, message.sessionKey);\n if (!state?.running) return false;\n return state.runner.steer ? state.runner.steer(message) : false;\n }\n\n async handleStop(\n address: OfficeAddress,\n sessionKey: string,\n bot: MessagingBot,\n replyThreadTs?: string,\n ): Promise<void> {\n assertSessionKeyBelongsToConversation(sessionKey, address.conversationId);\n const post = async (text: string) => {\n const ts =\n replyThreadTs && bot.postInThread\n ? await bot.postInThread(address.conversationId, replyThreadTs, text)\n : await bot.postMessage(address.conversationId, text);\n bot.logBotResponse?.(address.conversationId, text, ts, replyThreadTs);\n return ts;\n };\n const state = this.sessions.get(address, sessionKey);\n if (!state?.running) {\n await post(formatNothingRunning(bot));\n return;\n }\n const settlement = state.runSettlement;\n state.stopNoticeOwned = true;\n requestStop(state);\n try {\n const ts = await post(formatStopping(bot));\n await settlement;\n const stoppedText = formatStopped(bot);\n await bot.updateMessage(address.conversationId, ts, stoppedText);\n bot.logBotResponse?.(address.conversationId, stoppedText, ts, replyThreadTs);\n } finally {\n state.stopNoticeOwned = false;\n }\n }\n\n forceStop(address: OfficeAddress, sessionKey: string): void {\n const state = this.sessions.get(address, sessionKey);\n if (state?.running) {\n log.logInfo(`[Force Stop] Force stopping session: ${sessionKey}`);\n requestStop(state);\n }\n }\n\n async handleNewCommand({ bot, message }: HandleNewCommandOptions): Promise<void> {\n const { address, sessionKey } = message;\n assertSessionKeyBelongsToConversation(sessionKey, address.conversationId);\n\n const activeState = this.sessions.get(address, sessionKey);\n if (activeState?.runSettlement) {\n if (activeState.running) requestStop(activeState);\n await activeState.runSettlement;\n }\n\n await this.sessions.runConversationMaintenance(address, async () => {\n await this.resetSession(address, sessionKey, bot);\n });\n }\n\n private async resetSession(\n address: OfficeAddress,\n sessionKey: string,\n bot: MessagingBot,\n ): Promise<void> {\n const conversationId = address.conversationId;\n const office = this.options.workspace.office(address);\n await this.sessions.discardAndWait(address, sessionKey);\n await this.chatSessionManager.resetSession({ office, sessionKey });\n\n log.logInfo(`[${conversationId}] Session reset: ${sessionKey}`);\n await bot.postMessage(conversationId, \"Conversation reset. Send a new message to start fresh.\");\n }\n\n async handleEvent(\n event: ConversationEvent,\n bot: MessagingBot,\n context: ConversationContext,\n ): Promise<void> {\n const sessionKey = deriveSessionKey(event);\n await this.sessions.enqueue(event.address, sessionKey, () =>\n this.runSession({ event, bot, context }),\n );\n }\n\n async runSession(options: RunSessionOptions): Promise<void> {\n const { event } = options;\n const conversationId = event.address.conversationId;\n if (this.isShuttingDown) {\n log.logInfo(\n `[${conversationId}] Rejected event during shutdown: ${event.text.substring(0, 50)}`,\n );\n return;\n }\n\n const sessionKey = deriveSessionKey(event);\n if (await this.handledBeforeRun(options, sessionKey)) return;\n\n const address = event.address;\n const releaseConversationWork = await this.sessions.acquireConversationWork(address);\n try {\n await this.waitForParentSession(address, sessionKey);\n\n const lease = await this.acquireRunLease(options, sessionKey);\n const { state } = lease;\n state.detachOnShutdown = isTaskRunId(event.ts);\n log.logInfo(`[${conversationId}] Starting run: ${event.text.substring(0, 50)}`);\n const runPromise = this.sessions.settle(state, () =>\n this.executeRun(options, sessionKey, state),\n );\n lease.release();\n recordGauge(\"agent.sessions.active\", this.sessions.settlementCount());\n await runPromise;\n } finally {\n releaseConversationWork();\n }\n }\n\n private async handledBeforeRun(options: RunSessionOptions, sessionKey: string): Promise<boolean> {\n const { event } = options;\n if (await this.dispatchSessionCommand(options, sessionKey)) return true;\n\n const activeSettlement = this.sessions.get(event.address, sessionKey)?.runSettlement;\n if (activeSettlement) await activeSettlement;\n return false;\n }\n\n private async acquireRunLease(\n { event, context }: RunSessionOptions,\n sessionKey: string,\n ): Promise<{ state: ConversationState; release: () => void }> {\n let lease: { state: ConversationState; release: () => void } | undefined;\n try {\n lease = await this.acquireState({\n address: event.address,\n sessionKey,\n currentMessageId: event.ts,\n trustModel: context.platform.trustModel ?? \"membership\",\n platformWorkspaceId: context.platform.workspaceId,\n });\n await lease.state.runner.syncChatHistory(event.ts);\n return lease;\n } catch (err) {\n lease?.release();\n reportUserFacingError(err, {\n domain: \"mikan\",\n surface: \"session_setup\",\n operation: \"get_or_create_state\",\n severity: \"error\",\n platform: context.platform.name,\n context: {\n conversationId: event.address.conversationId,\n sessionKey,\n messageId: context.message.id,\n threadTs: context.message.threadTs,\n attachmentCount: context.message.attachments?.length ?? 0,\n },\n });\n throw err;\n }\n }\n\n private async executeRun(\n { event, bot, context }: RunSessionOptions,\n sessionKey: string,\n state: ConversationState,\n ): Promise<void> {\n const conversationId = event.address.conversationId;\n try {\n const result = await this.runWithInstrumentation(\n context,\n { conversationId, sessionKey, startedAt: state.startedAt },\n async () => {\n await context.responder.setTyping(true);\n await context.responder.setWorking(true);\n try {\n return await state.runner.run(context.message, context.responder, context.platform);\n } finally {\n await context.responder.setWorking(false);\n }\n },\n );\n\n if (result?.stopReason === \"aborted\") {\n await postAbortNotice(state, bot, conversationId, context.platform.name);\n } else if (result && state.detachOnShutdown) {\n await this.reportTaskOutcome(event.address, sessionKey, result.finalText ?? \"\");\n }\n if (result) {\n this.memoryCapture?.capture({\n office: this.options.workspace.office(event.address),\n message: context.message,\n stopReason: result.stopReason,\n reply: result.finalText ?? \"\",\n });\n }\n } finally {\n recordGauge(\"agent.sessions.active\", this.sessions.settlementCount() - 1);\n }\n }\n\n private async reportTaskOutcome(\n address: OfficeAddress,\n sessionKey: string,\n answer: string,\n ): Promise<void> {\n try {\n await SessionStore.reportTaskOutcome(\n this.options.workspace.office(address),\n sessionKey,\n stripTriggerSignature(answer),\n );\n } catch (error) {\n log.logWarning(`[${sessionKey}] Could not report the task outcome`, errorMessage(error));\n }\n }\n\n private async waitForParentSession(address: OfficeAddress, sessionKey: string): Promise<void> {\n const conversationId = address.conversationId;\n const office = this.options.workspace.office(address);\n const waited = await waitForThreadSessionBootstrap({\n parentSessionKey: conversationId,\n sessionKey,\n hasThreadSession: () => hasMaterializedChatSession({ office, sessionKey }),\n isParentRunning: () => this.sessions.get(address, conversationId)?.running === true,\n });\n if (waited) {\n log.logInfo(\n `[${conversationId}] Delayed thread bootstrap until parent session sealed: ${sessionKey}`,\n );\n }\n }\n\n private async dispatchSessionCommand(\n { event, bot, context }: RunSessionOptions,\n sessionKey: string,\n ): Promise<boolean> {\n return dispatchCommand(this.commandHandlers, {\n bot,\n responder: context.responder,\n platform: context.platform.name as PlatformName,\n address: event.address,\n platformUserId: event.user,\n platformUserName: context.message.userName,\n conversationId: event.address.conversationId,\n vaultConversationId: event.vaultConversationId,\n sessionKey,\n commandText: event.text,\n privateConversation: isPrivateConversation(event),\n services: this.commandServices,\n });\n }\n\n private async runWithInstrumentation(\n context: ConversationContext,\n meta: {\n conversationId: string;\n sessionKey: string;\n startedAt: number;\n },\n body: () => Promise<RunResult>,\n ): Promise<RunResult | undefined> {\n const { conversationId, sessionKey, startedAt } = meta;\n const { message, platform } = context;\n\n const attribution = createRunAttributionAttributes({\n conversationId,\n sessionKey,\n messageId: message.id,\n platform: platform.name,\n conversationKind: message.conversationKind,\n userId: message.userId,\n threadTs: message.threadTs,\n });\n\n recordCounter(\"agent.run.started\", 1, attribution);\n\n return withRunSpan(\n {\n conversationId,\n sessionKey,\n messageId: message.id,\n platform: platform.name,\n conversationKind: message.conversationKind,\n userId: message.userId,\n threadTs: message.threadTs,\n },\n async () => {\n addLifecycleEvent(\"agent.run.started\", {\n channel_id: attribution.channel_id,\n platform: platform.name,\n conversation_kind: message.conversationKind,\n has_attachments: (message.attachments?.length ?? 0) > 0,\n });\n\n try {\n const result = await body();\n const durationMs = Date.now() - startedAt;\n const completionAttrs = {\n ...attribution,\n stop_reason: result.stopReason,\n };\n recordDistribution(\"agent.run.duration\", durationMs, {\n unit: \"millisecond\",\n attributes: completionAttrs,\n });\n recordCounter(\"agent.run.completed\", 1, completionAttrs);\n addLifecycleEvent(\"agent.run.completed\", {\n channel_id: attribution.channel_id,\n platform: platform.name,\n stop_reason: result.stopReason,\n duration_ms: durationMs,\n });\n return result;\n } catch (err) {\n reportUserFacingError(err, {\n domain: \"mikan\",\n surface: \"agent_run\",\n operation: \"run\",\n severity: \"error\",\n platform: platform.name,\n context: {\n conversationId,\n sessionKey,\n messageId: message.id,\n threadTs: message.threadTs,\n attachmentCount: message.attachments?.length ?? 0,\n },\n });\n recordCounter(\"agent.run.errors\", 1, attribution);\n log.logWarning(`[${conversationId}] Run error`, errorMessage(err));\n await context.responder\n .replaceResponse(\"Could not complete the request. Please reply to retry or revise it.\")\n .catch(() => {});\n return undefined;\n }\n },\n );\n }\n\n refreshConversation(address: OfficeAddress): boolean {\n const cleared = this.sessions.invalidateConversation(address);\n if (cleared) log.logInfo(`[${address.conversationId}] Cleared cached session runners`);\n return cleared;\n }\n\n refreshAllConversations(): { busy: OfficeAddress[] } {\n const offices = this.sessions.offices();\n const result = this.sessions.invalidateAll();\n const busyKeys = new Set(\n result.busy.map((address) => `${address.platform}:${address.conversationId}`),\n );\n for (const address of offices) {\n if (busyKeys.has(`${address.platform}:${address.conversationId}`)) continue;\n log.logInfo(\n `[${address.conversationId}] Global settings changed; cleared cached session runners`,\n );\n }\n return result;\n }\n\n private async createCurrentRunner(\n options: SessionStateOptions,\n sessionScope: Awaited<ReturnType<ChatHistorySync[\"resolveSessionScope\"]>>,\n signal: AbortSignal,\n ): Promise<PiAgentWrapper> {\n const runnerFactory = this.options.runnerFactory ?? createRunner;\n return runnerFactory({\n sandboxConfig: this.options.sandbox,\n sessionKey: options.sessionKey,\n office: this.options.workspace.office(options.address),\n trustModel: options.trustModel,\n platformWorkspaceId: options.platformWorkspaceId,\n openConnector: this.options.openConnector,\n eventScheduler: this.options.eventScheduler?.(),\n sessionScope,\n chatHistory: this.chatSessionManager,\n signal,\n vaultManager: this.options.vaultManager,\n provisioner: this.options.provisioner,\n resourceController: this.options.resourceController,\n sessionView: this.options.sessionViewTokenStore\n ? {\n tokenStore: this.options.sessionViewTokenStore,\n portalBaseUrl: this.options.portalBaseUrl,\n }\n : undefined,\n platformToolPackFactories: this.options.platformToolPackFactories,\n models: this.resolvedModels,\n runEvents: this.options.runEvents,\n });\n }\n\n private acquireState(options: SessionStateOptions & { currentMessageId?: string }) {\n const { address, sessionKey } = options;\n const office = this.options.workspace.office(address);\n return this.sessions.acquire(address, sessionKey, (signal) =>\n this.materializeState(options, office, signal),\n );\n }\n\n private async materializeState(\n options: SessionStateOptions & { currentMessageId?: string },\n office: Office,\n signal: AbortSignal,\n ): Promise<ConversationState> {\n signal.throwIfAborted();\n const { address, sessionKey, currentMessageId } = options;\n const sessionScope = await this.chatSessionManager.resolveSessionScope({\n office,\n sessionKey,\n currentMessageId,\n });\n signal.throwIfAborted();\n return {\n address,\n sessionKey,\n running: false,\n runner: await this.createCurrentRunner(options, sessionScope, signal),\n stopRequested: false,\n lastAccessedAt: Date.now(),\n startedAt: 0,\n };\n }\n\n async shutdown(timeoutMs = 30_000): Promise<void> {\n if (this.isShuttingDown) return;\n this.isShuttingDown = true;\n log.logInfo(\"Shutting down gracefully...\");\n await this.sessions.shutdown(timeoutMs);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../src/runtime/session-lifecycle.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session-lifecycle.d.ts","sourceRoot":"","sources":["../../src/runtime/session-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -285,7 +285,11 @@ export class SessionLifecycle {
|
|
|
285
285
|
await this.closing.get(runtimeSessionId(address, sessionKey));
|
|
286
286
|
}
|
|
287
287
|
async closeAll() {
|
|
288
|
-
const
|
|
288
|
+
const detached = this.detachedSessionIds();
|
|
289
|
+
if (detached.size > 0) {
|
|
290
|
+
log.logInfo(`Leaving ${detached.size} task runs to resume after restart`);
|
|
291
|
+
}
|
|
292
|
+
const states = Array.from(this.states.entries()).flatMap(([id, state]) => detached.has(id) ? [] : [state]);
|
|
289
293
|
this.states.clear();
|
|
290
294
|
for (const state of states) {
|
|
291
295
|
const id = runtimeSessionId(state.address, state.sessionKey);
|
|
@@ -341,6 +345,8 @@ export class SessionLifecycle {
|
|
|
341
345
|
if (this.activeWorkCount() > 0) {
|
|
342
346
|
log.logWarning(`Aborting ${this.activeWorkCount()} runs after shutdown timeout`, `${timeoutMs}ms`);
|
|
343
347
|
for (const state of this.runningStates()) {
|
|
348
|
+
if (state.detachOnShutdown)
|
|
349
|
+
continue;
|
|
344
350
|
state.shutdownAborted = true;
|
|
345
351
|
state.runner.abort();
|
|
346
352
|
}
|
|
@@ -378,7 +384,17 @@ export class SessionLifecycle {
|
|
|
378
384
|
for (const sessionId of this.settlementSessions.values()) {
|
|
379
385
|
sessionIds.add(sessionId);
|
|
380
386
|
}
|
|
387
|
+
for (const sessionId of this.detachedSessionIds())
|
|
388
|
+
sessionIds.delete(sessionId);
|
|
381
389
|
return sessionIds.size;
|
|
382
390
|
}
|
|
391
|
+
detachedSessionIds() {
|
|
392
|
+
const ids = new Set();
|
|
393
|
+
for (const [id, state] of this.states) {
|
|
394
|
+
if (state.running && state.detachOnShutdown)
|
|
395
|
+
ids.add(id);
|
|
396
|
+
}
|
|
397
|
+
return ids;
|
|
398
|
+
}
|
|
383
399
|
}
|
|
384
400
|
//# sourceMappingURL=session-lifecycle.js.map
|