@geminixiang/mikan 1.0.0-beta.78 → 1.0.0-beta.79
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 +24 -0
- package/dist/adapters/commands/admin.js +1 -1
- package/dist/adapters/commands/admin.js.map +1 -1
- package/dist/adapters/commands/login.d.ts.map +1 -1
- package/dist/adapters/commands/login.js +3 -2
- package/dist/adapters/commands/login.js.map +1 -1
- package/dist/adapters/commands/manifest.d.ts +0 -1
- package/dist/adapters/commands/manifest.d.ts.map +1 -1
- package/dist/adapters/commands/manifest.js.map +1 -1
- package/dist/adapters/commands/model.d.ts +0 -1
- package/dist/adapters/commands/model.d.ts.map +1 -1
- package/dist/adapters/commands/model.js +8 -20
- package/dist/adapters/commands/model.js.map +1 -1
- package/dist/adapters/commands/new.js +1 -1
- package/dist/adapters/commands/new.js.map +1 -1
- package/dist/adapters/commands/registry.js +1 -1
- package/dist/adapters/commands/registry.js.map +1 -1
- package/dist/adapters/commands/sandbox.d.ts +0 -1
- package/dist/adapters/commands/sandbox.d.ts.map +1 -1
- package/dist/adapters/commands/sandbox.js +1 -1
- package/dist/adapters/commands/sandbox.js.map +1 -1
- package/dist/adapters/commands/types.d.ts +6 -17
- package/dist/adapters/commands/types.d.ts.map +1 -1
- package/dist/adapters/commands/types.js.map +1 -1
- package/dist/adapters/commands/utils.d.ts +1 -1
- package/dist/adapters/commands/utils.d.ts.map +1 -1
- package/dist/adapters/commands/utils.js.map +1 -1
- package/dist/adapters/discord/bot.d.ts +4 -10
- package/dist/adapters/discord/bot.d.ts.map +1 -1
- package/dist/adapters/discord/bot.js +26 -22
- package/dist/adapters/discord/bot.js.map +1 -1
- package/dist/adapters/discord/components.d.ts +0 -1
- package/dist/adapters/discord/components.d.ts.map +1 -1
- package/dist/adapters/discord/components.js.map +1 -1
- package/dist/adapters/discord/context.d.ts +3 -3
- package/dist/adapters/discord/context.d.ts.map +1 -1
- package/dist/adapters/discord/context.js +1 -1
- package/dist/adapters/discord/context.js.map +1 -1
- package/dist/adapters/discord/types.d.ts +83 -1
- package/dist/adapters/discord/types.d.ts.map +1 -1
- package/dist/adapters/discord/types.js.map +1 -1
- package/dist/adapters/github/bot.d.ts +4 -5
- package/dist/adapters/github/bot.d.ts.map +1 -1
- package/dist/adapters/github/bot.js +10 -10
- package/dist/adapters/github/bot.js.map +1 -1
- package/dist/adapters/github/client.js +1 -1
- package/dist/adapters/github/client.js.map +1 -1
- package/dist/adapters/github/context.d.ts +3 -4
- package/dist/adapters/github/context.d.ts.map +1 -1
- package/dist/adapters/github/context.js +1 -2
- package/dist/adapters/github/context.js.map +1 -1
- package/dist/adapters/github/github-ops.d.ts +5 -6
- package/dist/adapters/github/github-ops.d.ts.map +1 -1
- package/dist/adapters/github/github-ops.js +1 -2
- package/dist/adapters/github/github-ops.js.map +1 -1
- package/dist/adapters/github/ids.d.ts +0 -3
- package/dist/adapters/github/ids.d.ts.map +1 -1
- package/dist/adapters/github/ids.js +0 -19
- package/dist/adapters/github/ids.js.map +1 -1
- package/dist/adapters/github/repo.d.ts +1 -1
- package/dist/adapters/github/repo.js.map +1 -1
- package/dist/adapters/github/tools/checks.d.ts +6 -4
- package/dist/adapters/github/tools/checks.d.ts.map +1 -1
- package/dist/adapters/github/tools/checks.js +4 -3
- package/dist/adapters/github/tools/checks.js.map +1 -1
- package/dist/adapters/github/tools/issue.d.ts +10 -8
- package/dist/adapters/github/tools/issue.d.ts.map +1 -1
- package/dist/adapters/github/tools/issue.js +4 -3
- package/dist/adapters/github/tools/issue.js.map +1 -1
- package/dist/adapters/github/tools/pr.d.ts +8 -6
- package/dist/adapters/github/tools/pr.d.ts.map +1 -1
- package/dist/adapters/github/tools/pr.js +4 -3
- package/dist/adapters/github/tools/pr.js.map +1 -1
- package/dist/adapters/github/tools/read.d.ts +9 -7
- package/dist/adapters/github/tools/read.d.ts.map +1 -1
- package/dist/adapters/github/tools/read.js +4 -3
- package/dist/adapters/github/tools/read.js.map +1 -1
- package/dist/adapters/github/tools/review-reply.d.ts +6 -4
- package/dist/adapters/github/tools/review-reply.d.ts.map +1 -1
- package/dist/adapters/github/tools/review-reply.js +4 -3
- package/dist/adapters/github/tools/review-reply.js.map +1 -1
- package/dist/adapters/github/tools/sync.d.ts +5 -3
- package/dist/adapters/github/tools/sync.d.ts.map +1 -1
- package/dist/adapters/github/tools/sync.js +4 -3
- package/dist/adapters/github/tools/sync.js.map +1 -1
- package/dist/adapters/github/types.d.ts +5 -4
- package/dist/adapters/github/types.d.ts.map +1 -1
- package/dist/adapters/github/types.js.map +1 -1
- package/dist/adapters/github/webhook.d.ts +0 -1
- package/dist/adapters/github/webhook.d.ts.map +1 -1
- package/dist/adapters/github/webhook.js.map +1 -1
- package/dist/adapters/intake.d.ts +1 -1
- package/dist/adapters/intake.d.ts.map +1 -1
- package/dist/adapters/intake.js.map +1 -1
- package/dist/adapters/markdown-tables.d.ts +0 -1
- package/dist/adapters/markdown-tables.d.ts.map +1 -1
- package/dist/adapters/markdown-tables.js.map +1 -1
- package/dist/adapters/messages.d.ts +1 -1
- package/dist/adapters/messages.d.ts.map +1 -1
- package/dist/adapters/messages.js.map +1 -1
- package/dist/adapters/progressive-renderer.d.ts +1 -1
- package/dist/adapters/progressive-renderer.d.ts.map +1 -1
- package/dist/adapters/progressive-renderer.js +8 -6
- package/dist/adapters/progressive-renderer.js.map +1 -1
- package/dist/adapters/shared.d.ts +6 -4
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +39 -25
- package/dist/adapters/shared.js.map +1 -1
- package/dist/adapters/slack/assistant.d.ts +0 -1
- package/dist/adapters/slack/assistant.d.ts.map +1 -1
- package/dist/adapters/slack/assistant.js +2 -1
- package/dist/adapters/slack/assistant.js.map +1 -1
- package/dist/adapters/slack/bot.d.ts +5 -10
- package/dist/adapters/slack/bot.d.ts.map +1 -1
- package/dist/adapters/slack/bot.js +84 -86
- package/dist/adapters/slack/bot.js.map +1 -1
- package/dist/adapters/slack/context.d.ts +3 -5
- package/dist/adapters/slack/context.d.ts.map +1 -1
- package/dist/adapters/slack/context.js +1 -2
- package/dist/adapters/slack/context.js.map +1 -1
- package/dist/adapters/slack/jev-context.d.ts.map +1 -1
- package/dist/adapters/slack/jev-context.js +4 -2
- package/dist/adapters/slack/jev-context.js.map +1 -1
- package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
- package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
- package/dist/adapters/slack/response-lifecycle.js +5 -3
- package/dist/adapters/slack/response-lifecycle.js.map +1 -1
- package/dist/adapters/slack/session.d.ts +1 -1
- package/dist/adapters/slack/session.d.ts.map +1 -1
- package/dist/adapters/slack/session.js.map +1 -1
- package/dist/adapters/slack/task-intent.js +1 -1
- package/dist/adapters/slack/task-intent.js.map +1 -1
- package/dist/adapters/slack/task-status.d.ts.map +1 -1
- package/dist/adapters/slack/task-status.js +2 -1
- package/dist/adapters/slack/task-status.js.map +1 -1
- package/dist/adapters/slack/tool-pack.d.ts +0 -1
- package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
- package/dist/adapters/slack/tool-pack.js +2 -1
- package/dist/adapters/slack/tool-pack.js.map +1 -1
- package/dist/adapters/slack/tools/blockkit.d.ts +9 -7
- package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -1
- package/dist/adapters/slack/tools/blockkit.js +6 -4
- package/dist/adapters/slack/tools/blockkit.js.map +1 -1
- package/dist/adapters/slack/types.d.ts +36 -2
- package/dist/adapters/slack/types.d.ts.map +1 -1
- package/dist/adapters/slack/types.js.map +1 -1
- package/dist/adapters/telegram/bot.d.ts +3 -8
- package/dist/adapters/telegram/bot.d.ts.map +1 -1
- package/dist/adapters/telegram/bot.js +11 -11
- package/dist/adapters/telegram/bot.js.map +1 -1
- package/dist/adapters/telegram/context.d.ts +3 -3
- package/dist/adapters/telegram/context.d.ts.map +1 -1
- package/dist/adapters/telegram/context.js +2 -2
- package/dist/adapters/telegram/context.js.map +1 -1
- package/dist/adapters/telegram/types.d.ts +24 -1
- package/dist/adapters/telegram/types.d.ts.map +1 -1
- package/dist/adapters/telegram/types.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/adapters/web/admin/client-assets.d.ts +1 -1
- package/dist/adapters/web/admin/client-assets.d.ts.map +1 -1
- package/dist/adapters/web/admin/client-assets.js +3 -2
- package/dist/adapters/web/admin/client-assets.js.map +1 -1
- package/dist/adapters/web/admin/portal.d.ts +4 -11
- package/dist/adapters/web/admin/portal.d.ts.map +1 -1
- package/dist/adapters/web/admin/portal.js +27 -30
- package/dist/adapters/web/admin/portal.js.map +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts +1 -1
- package/dist/adapters/web/admin/provider-models.d.ts.map +1 -1
- package/dist/adapters/web/admin/provider-models.js.map +1 -1
- package/dist/adapters/web/admin/types.d.ts +10 -4
- package/dist/adapters/web/admin/types.d.ts.map +1 -1
- package/dist/adapters/web/admin/types.js.map +1 -1
- package/dist/adapters/web/login/oauth.d.ts +0 -1
- package/dist/adapters/web/login/oauth.d.ts.map +1 -1
- package/dist/adapters/web/login/oauth.js +12 -12
- package/dist/adapters/web/login/oauth.js.map +1 -1
- package/dist/adapters/web/login/portal.d.ts +3 -6
- package/dist/adapters/web/login/portal.d.ts.map +1 -1
- package/dist/adapters/web/login/portal.js +5 -4
- package/dist/adapters/web/login/portal.js.map +1 -1
- package/dist/adapters/web/login/types.d.ts +1 -1
- package/dist/adapters/web/login/types.d.ts.map +1 -1
- package/dist/adapters/web/login/types.js.map +1 -1
- package/dist/adapters/web/portal-shell.d.ts +0 -1
- package/dist/adapters/web/portal-shell.d.ts.map +1 -1
- package/dist/adapters/web/portal-shell.js.map +1 -1
- package/dist/adapters/web/server.d.ts +6 -6
- package/dist/adapters/web/server.d.ts.map +1 -1
- package/dist/adapters/web/server.js +3 -2
- package/dist/adapters/web/server.js.map +1 -1
- package/dist/adapters/web/session-view/portal.d.ts +2 -3
- package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
- package/dist/adapters/web/session-view/portal.js +12 -12
- package/dist/adapters/web/session-view/portal.js.map +1 -1
- package/dist/adapters/web/session-view/types.d.ts +1 -11
- package/dist/adapters/web/session-view/types.d.ts.map +1 -1
- package/dist/adapters/web/session-view/types.js.map +1 -1
- package/dist/adapters/web/token-store.d.ts +0 -1
- package/dist/adapters/web/token-store.d.ts.map +1 -1
- package/dist/adapters/web/token-store.js.map +1 -1
- package/dist/cli/boot.d.ts +0 -1
- package/dist/cli/boot.d.ts.map +1 -1
- package/dist/cli/boot.js +4 -4
- package/dist/cli/boot.js.map +1 -1
- package/dist/cli/office.d.ts.map +1 -1
- package/dist/cli/office.js +4 -3
- package/dist/cli/office.js.map +1 -1
- package/dist/cli/onboard.js +1 -1
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/sandbox.d.ts.map +1 -1
- package/dist/cli/sandbox.js +2 -1
- package/dist/cli/sandbox.js.map +1 -1
- package/dist/cli/sessions.d.ts.map +1 -1
- package/dist/cli/sessions.js +2 -1
- package/dist/cli/sessions.js.map +1 -1
- package/dist/env-manifest.d.ts +1 -1
- package/dist/env-manifest.d.ts.map +1 -1
- package/dist/env-manifest.js.map +1 -1
- package/dist/events/index.d.ts +3 -2
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +11 -10
- package/dist/events/index.js.map +1 -1
- package/dist/events/scheduler.d.ts +1 -2
- package/dist/events/scheduler.d.ts.map +1 -1
- package/dist/events/scheduler.js +4 -4
- package/dist/events/scheduler.js.map +1 -1
- package/dist/file-guards.d.ts +8 -6
- package/dist/file-guards.d.ts.map +1 -1
- package/dist/file-guards.js +10 -15
- package/dist/file-guards.js.map +1 -1
- package/dist/harness/execution-env.d.ts +1 -1
- package/dist/harness/execution-env.d.ts.map +1 -1
- package/dist/harness/execution-env.js +7 -6
- package/dist/harness/execution-env.js.map +1 -1
- package/dist/harness/execution-resolver.d.ts +4 -6
- package/dist/harness/execution-resolver.d.ts.map +1 -1
- package/dist/harness/execution-resolver.js +1 -1
- package/dist/harness/execution-resolver.js.map +1 -1
- package/dist/harness/jev.d.ts +1 -1
- package/dist/harness/jev.d.ts.map +1 -1
- package/dist/harness/jev.js +1 -4
- package/dist/harness/jev.js.map +1 -1
- package/dist/harness/mcp-result.d.ts.map +1 -1
- package/dist/harness/mcp-result.js +15 -7
- package/dist/harness/mcp-result.js.map +1 -1
- package/dist/harness/mcp.d.ts +0 -2
- package/dist/harness/mcp.d.ts.map +1 -1
- package/dist/harness/mcp.js +13 -15
- package/dist/harness/mcp.js.map +1 -1
- package/dist/harness/models.d.ts +0 -1
- package/dist/harness/models.d.ts.map +1 -1
- package/dist/harness/models.js +2 -1
- package/dist/harness/models.js.map +1 -1
- package/dist/harness/open-connector.d.ts +2 -3
- package/dist/harness/open-connector.d.ts.map +1 -1
- package/dist/harness/open-connector.js +13 -9
- package/dist/harness/open-connector.js.map +1 -1
- package/dist/harness/presenter.d.ts +4 -25
- package/dist/harness/presenter.d.ts.map +1 -1
- package/dist/harness/presenter.js +26 -20
- package/dist/harness/presenter.js.map +1 -1
- package/dist/harness/prompt.d.ts +1 -2
- package/dist/harness/prompt.d.ts.map +1 -1
- package/dist/harness/prompt.js.map +1 -1
- package/dist/harness/runner.d.ts.map +1 -1
- package/dist/harness/runner.js +34 -17
- package/dist/harness/runner.js.map +1 -1
- package/dist/harness/session.d.ts +0 -7
- package/dist/harness/session.d.ts.map +1 -1
- package/dist/harness/session.js +16 -14
- package/dist/harness/session.js.map +1 -1
- package/dist/harness/skills.d.ts +2 -5
- package/dist/harness/skills.d.ts.map +1 -1
- package/dist/harness/skills.js.map +1 -1
- package/dist/harness/subagent-profiles.d.ts +0 -1
- package/dist/harness/subagent-profiles.d.ts.map +1 -1
- package/dist/harness/subagent-profiles.js +12 -16
- package/dist/harness/subagent-profiles.js.map +1 -1
- package/dist/harness/subagent.d.ts +1 -1
- package/dist/harness/subagent.d.ts.map +1 -1
- package/dist/harness/subagent.js +17 -17
- package/dist/harness/subagent.js.map +1 -1
- package/dist/harness/tool-args.d.ts +2 -0
- package/dist/harness/tool-args.d.ts.map +1 -0
- package/dist/harness/tool-args.js +20 -0
- package/dist/harness/tool-args.js.map +1 -0
- package/dist/harness/tools/attach.d.ts +5 -4
- package/dist/harness/tools/attach.d.ts.map +1 -1
- package/dist/harness/tools/attach.js +1 -1
- package/dist/harness/tools/attach.js.map +1 -1
- package/dist/harness/tools/event.d.ts +12 -11
- package/dist/harness/tools/event.d.ts.map +1 -1
- package/dist/harness/tools/event.js +1 -1
- package/dist/harness/tools/event.js.map +1 -1
- package/dist/harness/tools/generate-image.d.ts +7 -5
- package/dist/harness/tools/generate-image.d.ts.map +1 -1
- package/dist/harness/tools/generate-image.js +7 -5
- package/dist/harness/tools/generate-image.js.map +1 -1
- package/dist/harness/tools/host-fn-tool.d.ts +3 -2
- package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
- package/dist/harness/tools/host-fn-tool.js +5 -2
- package/dist/harness/tools/host-fn-tool.js.map +1 -1
- package/dist/harness/tools/index.d.ts +3 -4
- package/dist/harness/tools/index.d.ts.map +1 -1
- package/dist/harness/tools/index.js +1 -3
- package/dist/harness/tools/index.js.map +1 -1
- package/dist/harness/tools/jev-browser.d.ts +12 -10
- package/dist/harness/tools/jev-browser.d.ts.map +1 -1
- package/dist/harness/tools/jev-browser.js +6 -4
- package/dist/harness/tools/jev-browser.js.map +1 -1
- package/dist/harness/tools/jev.d.ts +9 -7
- package/dist/harness/tools/jev.d.ts.map +1 -1
- package/dist/harness/tools/jev.js +5 -6
- package/dist/harness/tools/jev.js.map +1 -1
- package/dist/harness/tools/pi-tools.d.ts.map +1 -1
- package/dist/harness/tools/pi-tools.js +2 -2
- package/dist/harness/tools/pi-tools.js.map +1 -1
- package/dist/harness/tools/react.d.ts +3 -2
- package/dist/harness/tools/react.d.ts.map +1 -1
- package/dist/harness/tools/react.js +1 -1
- package/dist/harness/tools/react.js.map +1 -1
- package/dist/harness/tools/sandbox.d.ts +7 -6
- package/dist/harness/tools/sandbox.d.ts.map +1 -1
- package/dist/harness/tools/sandbox.js +3 -2
- package/dist/harness/tools/sandbox.js.map +1 -1
- package/dist/harness/tools/subagent.d.ts +26 -26
- package/dist/harness/tools/subagent.d.ts.map +1 -1
- package/dist/harness/tools/subagent.js +25 -29
- package/dist/harness/tools/subagent.js.map +1 -1
- package/dist/harness/tools/task.d.ts +11 -8
- package/dist/harness/tools/task.d.ts.map +1 -1
- package/dist/harness/tools/task.js +8 -6
- package/dist/harness/tools/task.js.map +1 -1
- package/dist/harness/tools/types.d.ts +2 -1
- package/dist/harness/tools/types.d.ts.map +1 -1
- package/dist/harness/tools/types.js.map +1 -1
- package/dist/harness/types.d.ts +37 -4
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/harness/types.js.map +1 -1
- package/dist/index.d.ts +16 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/log.d.ts +0 -1
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +1 -1
- package/dist/log.js.map +1 -1
- package/dist/main.js +27 -17
- package/dist/main.js.map +1 -1
- package/dist/memory-capture/index.d.ts +1 -2
- package/dist/memory-capture/index.d.ts.map +1 -1
- package/dist/memory-capture/index.js +8 -3
- package/dist/memory-capture/index.js.map +1 -1
- package/dist/memory-capture/types.d.ts +1 -1
- package/dist/memory-capture/types.js.map +1 -1
- package/dist/observability/index.d.ts +0 -3
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +11 -16
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/sentry.d.ts +9 -12
- package/dist/observability/sentry.d.ts.map +1 -1
- package/dist/observability/sentry.js +9 -118
- package/dist/observability/sentry.js.map +1 -1
- package/dist/office/index.d.ts +14 -3
- package/dist/office/index.d.ts.map +1 -1
- package/dist/office/index.js +51 -14
- package/dist/office/index.js.map +1 -1
- package/dist/office/projection.d.ts +1 -3
- package/dist/office/projection.d.ts.map +1 -1
- package/dist/office/projection.js +5 -5
- package/dist/office/projection.js.map +1 -1
- package/dist/office/types.d.ts +5 -0
- package/dist/office/types.d.ts.map +1 -1
- package/dist/office/types.js.map +1 -1
- package/dist/runtime/conversation-runtime.d.ts +0 -1
- package/dist/runtime/conversation-runtime.d.ts.map +1 -1
- package/dist/runtime/conversation-runtime.js +10 -6
- package/dist/runtime/conversation-runtime.js.map +1 -1
- package/dist/runtime/session-lifecycle.d.ts.map +1 -1
- package/dist/runtime/session-lifecycle.js +2 -1
- package/dist/runtime/session-lifecycle.js.map +1 -1
- package/dist/runtime/types.d.ts +8 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/sandbox/cloudflare.d.ts.map +1 -1
- package/dist/sandbox/cloudflare.js +3 -2
- package/dist/sandbox/cloudflare.js.map +1 -1
- package/dist/sandbox/container.d.ts.map +1 -1
- package/dist/sandbox/container.js +2 -1
- package/dist/sandbox/container.js.map +1 -1
- package/dist/sandbox/host.js +1 -1
- package/dist/sandbox/host.js.map +1 -1
- package/dist/sandbox/identity.d.ts +0 -1
- package/dist/sandbox/identity.d.ts.map +1 -1
- package/dist/sandbox/identity.js.map +1 -1
- package/dist/sandbox/index.d.ts +4 -14
- package/dist/sandbox/index.d.ts.map +1 -1
- package/dist/sandbox/index.js +4 -93
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/provisioner.d.ts +0 -1
- package/dist/sandbox/provisioner.d.ts.map +1 -1
- package/dist/sandbox/provisioner.js +12 -11
- package/dist/sandbox/provisioner.js.map +1 -1
- package/dist/sandbox/registry.d.ts +12 -0
- package/dist/sandbox/registry.d.ts.map +1 -0
- package/dist/sandbox/registry.js +93 -0
- package/dist/sandbox/registry.js.map +1 -0
- package/dist/sandbox/types.d.ts +3 -0
- package/dist/sandbox/types.d.ts.map +1 -1
- package/dist/sandbox/types.js.map +1 -1
- package/dist/sandbox/utils.d.ts.map +1 -1
- package/dist/sandbox/utils.js +1 -0
- package/dist/sandbox/utils.js.map +1 -1
- package/dist/sessions/chat-history-sync.d.ts +2 -2
- package/dist/sessions/chat-history-sync.d.ts.map +1 -1
- package/dist/sessions/chat-history-sync.js +32 -23
- package/dist/sessions/chat-history-sync.js.map +1 -1
- package/dist/sessions/migrate-common.js +2 -2
- package/dist/sessions/migrate-common.js.map +1 -1
- package/dist/sessions/migrate-pi-084.d.ts +0 -1
- package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
- package/dist/sessions/migrate-pi-084.js +4 -6
- package/dist/sessions/migrate-pi-084.js.map +1 -1
- package/dist/sessions/migrate-v3.d.ts +0 -1
- package/dist/sessions/migrate-v3.d.ts.map +1 -1
- package/dist/sessions/migrate-v3.js +3 -5
- package/dist/sessions/migrate-v3.js.map +1 -1
- package/dist/sessions/session-key.d.ts +0 -1
- package/dist/sessions/session-key.d.ts.map +1 -1
- package/dist/sessions/session-key.js.map +1 -1
- package/dist/sessions/session-store.d.ts.map +1 -1
- package/dist/sessions/session-store.js +12 -19
- package/dist/sessions/session-store.js.map +1 -1
- package/dist/sessions/store.d.ts +0 -1
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js +5 -3
- package/dist/sessions/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 +1 -0
- package/dist/sessions/types.js.map +1 -1
- package/dist/settings/apply.d.ts +1 -2
- package/dist/settings/apply.d.ts.map +1 -1
- package/dist/settings/apply.js.map +1 -1
- package/dist/settings/index.d.ts +37 -34
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +28 -22
- package/dist/settings/index.js.map +1 -1
- package/dist/settings/migrate.d.ts +1 -1
- package/dist/settings/migrate.d.ts.map +1 -1
- package/dist/settings/migrate.js +5 -4
- package/dist/settings/migrate.js.map +1 -1
- package/dist/types.d.ts +17 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -3
- package/dist/types.js.map +1 -1
- package/dist/unknown-values.d.ts +3 -0
- package/dist/unknown-values.d.ts.map +1 -0
- package/dist/unknown-values.js +7 -0
- package/dist/unknown-values.js.map +1 -0
- package/dist/vault/index.d.ts +10 -2
- package/dist/vault/index.d.ts.map +1 -1
- package/dist/vault/index.js +16 -7
- package/dist/vault/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/adapters/index.d.ts +0 -11
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -19
- package/dist/adapters/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAa1B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAkB,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,gBAAgB,EAAwB,MAAM,yBAAyB,CAAC;AACjF,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEhF,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AASpC,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAE1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,4BAA4B,EAC5B,oBAAoB,GAKrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,uBAAuB,GAAG,kBAAkB,CAAC;AAqBnD,SAAS,iBAAiB,CAAC,OAA4B,EAAE,aAAa,GAAG,IAAI;IAC3E,MAAM,OAAO,GAA0C,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACrF,IAAI,aAAa;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACrE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,OAA4B;IAClD,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,aAAa,CAAC;AAC/D,CAAC;AAED,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;AACjE,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,qBAAqB,EAAE,aAAa,CAAC,CAAC,CAAC;AAahF,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAK,GAAG,qBAAqB;IACzE,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAU;IACpC,IAAI,GAAG,YAAY,sBAAsB;QAAE,OAAO,IAAI,CAAC;IACvD,IAAK,GAA0B,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,IAAI,GAAI,GAAqE,CAAC,IAAI,CAAC;IACzF,OAAO,IAAI,EAAE,KAAK,KAAK,cAAc,IAAI,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,EAAoB,EAAc,EAAE,CACzD,SAAS,CAAC,EAAE,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAEvD,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAe;IACvD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IAEtC,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QAClE,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAIjC;IACC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,gBAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IAC7E,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,SAAS,GACb,IAAI,CAAC,MAAM,GAAG,yBAAyB;QACrC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,yBAAyB,GAAG,EAAE,CAAC,GAAG,iBAAiB;QACvE,CAAC,CAAC,IAAI,CAAC;IACX,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC;AAID,MAAM,2BAA4B,SAAQ,KAAK;IAC7C,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;sBAFN,MAAM;IAGjB,CAAC;CACF;AAED,SAAS,kCAAkC,CAAC,KAAc;IACxD,IAAI,CAAC,CAAC,KAAK,YAAY,2BAA2B,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,OAAO,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AAC7E,CAAC;AAED,MAAM,OAAO,iBAAiB;IAuBpB,eAAe,CAAC,SAAiB;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,CAAC;IAEO,gBAAgB,CAAC,OAAsB;QAC7C,OAAO,CACL,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,IAAI,WAAW,CAC5F,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,KAAiB;QACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE;YAC/C,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC;SAChD,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,gBAAgB,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,SAAS,CAAC,aAAa,GAAG,CAAC,GAAG,EAAE,EAAE,CACxC,eAAe,CACb,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,EACnC,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,OAAO;iBACT,kBAAkB,EAAE;iBACpB,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,OAAO,CACpF,EACH,GAAG,CACJ,CAAC;QACN,CAAC;QACD,IACE,KAAK,CAAC,gBAAgB,KAAK,QAAQ;YACnC,KAAK,CAAC,SAAS;YACf,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,EACjD,CAAC;YACD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,SAAS,CAAC,gBAAgB,GAAG,KAAK,IAAI,EAAE;gBAC9C,IAAI,QAAQ;oBAAE,OAAO;gBACrB,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI,qBAAqB,CAAC;gBAClD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAU,EAAE,IAAI,CAAC,CAAC;gBAC1E,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;YAChE,CAAC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,gBAAgB,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YAC5D,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;gBACpD,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACnF,MAAM,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;oBAC5B,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC9B,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,KAAK;oBACX,IAAI,EAAE,OAAO;oBACb,cAAc,EAAE,IAAI;oBACpB,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC/D,IAAI,CAAC;oBACH,qBAAqB,CAAC;wBACpB,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC;wBACpD,UAAU;qBACX,CAAC,CAAC;oBACH,MAAM,KAAK,GAAe;wBACxB,GAAG,KAAK;wBACR,EAAE,EAAE,QAAQ,IAAI,EAAE;wBAClB,SAAS,EAAE,IAAI;wBACf,UAAU;wBACV,IAAI,EAAE,IAAI;qBACX,CAAC;oBACF,IACE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;wBAC5C,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAC5B;gCACE,GAAG,KAAK;gCACR,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oCAC1C,IAAI,EAAE,CAAC,CAAC,QAAQ;oCAChB,SAAS,EAAE,CAAC,CAAC,SAAS;iCACvB,CAAC,CAAC;6BACJ,EACD,IAAI,EACJ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1B,CAAC;wBACJ,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,qBAAqB,CAAC,KAAK,EAAE;gCAC3B,MAAM,EAAE,OAAO;gCACf,OAAO,EAAE,cAAc;gCACvB,SAAS,EAAE,gBAAgB;gCAC3B,QAAQ,EAAE,OAAO;gCACjB,QAAQ,EAAE,OAAO;gCACjB,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;6BACvE,CAAC,CAAC;4BACH,MAAM,IAAI,CAAC,YAAY,CACrB,KAAK,CAAC,OAAO,EACb,IAAI,EACJ,uDAAuD,CACxD,CAAC;4BACF,MAAM,KAAK,CAAC;wBACd,CAAC;oBACH,CAAC,CAAC;wBAEF,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,2BAA2B,CAAC,CAAC;oBACrF,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,OAAO,UAAU,CAAC;YACpB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YACE,OAA8B,EAC9B,MAAoE;QAnIrD,kBAAa,GAAG,IAAI,GAAG,EAAyB,CAAC;QAI1D,cAAS,GAAkB,IAAI,CAAC;QAChC,UAAK,GAAkB,IAAI,CAAC;QAC5B,WAAM,GAAkB,IAAI,CAAC;QAC7B,oBAAe,GAAkB,IAAI,CAAC;QACtC,cAAS,GAAkB,IAAI,CAAC;QAEhC,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;QACrC,aAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC3C,qBAAgB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QACjD,iBAAY,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,YAAO,GAAG,KAAK,CAAC;QAChB,WAAM,GAAG,IAAI,GAAG,EAA+B,CAAC;QAChD,WAAM,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC7C,mBAAc,GAA0B,IAAI,CAAC;QAoHnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC;YACvC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,iBAAiB,EAAE,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE;YACjD,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3B,sBAAsB,EAAE,IAAI;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,SAAyB;QACzC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAiB,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAErE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,IAAI,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAEhC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE1B,KAAK,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5D,GAAG,CAAC,UAAU,CAAC,uBAAuB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,eAAe,CAAC,IAAwB;QAC9C,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,CAAC;IAEO,eAAe,CAAC,IAAY;QAClC,OAAO,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,WAAW,CACf,OAAe,EACf,IAAY,EACZ,QAAiB,EACjB,QAA+B;QAE/B,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG;gBACd,OAAO;gBACP,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,GAAG,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;aACjD,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,EAAY,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,KAAa;QACjE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,UAAU,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAK,GAAqC,EAAE,IAAI,EAAE,KAAK,KAAK,iBAAiB;oBAAE,OAAO;gBACtF,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,OAAe,EACf,IAAY,EACZ,IAAY,EACZ,QAAiB,EACjB,MAAiB;QAEjB,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC;gBACtC,OAAO;gBACP,IAAI;gBACJ,IAAI;gBACJ,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,IAAY,EACZ,IAAY,EACZ,MAAgB,EAChB,QAAiB;QAEjB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,OAAe,EACf,IAAY,EACZ,MAAgB,EAChB,QAAiB;QAEjB,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG;gBACd,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,MAAsB;gBAC9B,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9D,OAAO,MAAM,CAAC,EAAY,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,OAAe,EACf,EAAU,EACV,IAAY,EACZ,MAAgB;QAEhB,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAsB,EAAE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB,EAAE,MAAc,EAAE,IAAY;QACpE,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,cAAsB,EACtB,MAAc,EACd,IAAY,EACZ,OAAuC;QAEvC,IAAI,OAAO,EAAE,KAAK,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,aAAa,CACtB,cAAc,EACd,MAAM,EACN,OAAO,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAChD,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAc;QACzC,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,OAAgC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;QACnC,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,MAAM,GAAG,QAAQ;gBACrB,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;oBACzC,OAAO;oBACP,EAAE,EAAE,QAAQ;oBACZ,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,KAAK;iBACN,CAAC;gBACJ,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;oBACzC,OAAO;oBACP,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,KAAK;iBACN,CAAC,CAAC;YACP,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAOrC,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ;iBACpB,MAAM,CAAC,CAAC,GAAG,EAAsC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC7D,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC;iBACpC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,MAAM,OAAO,GAA2B;oBACtC,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE;oBACpB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,IAAI,IAAI,EAAE,KAAK,KAAK,IAAI;iBAC7E,CAAC;gBACF,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,EAAE;oBAAE,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC;gBAChF,IAAI,GAAG,CAAC,IAAI;oBAAE,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;gBACxC,IAAI,IAAI;oBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC3C,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,CAAC;YACL,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI;SAC3B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,EAAU,EAAE,IAAY;QAC3D,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAClF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,iBAAiB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,iBAAiB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,OAAe,EACf,IAAY,EACZ,QAAiB,EACjB,eAAwB;QAExB,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,IAAI,EAAE;YACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE;gBAC9D,OAAO;gBACP,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC/C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1D,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC,CAAC;YACH,MAAM,QAAQ,GAAI,MAA0B,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC3E,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,EAAU,EAAE,IAAY;QACjE,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,EAAU,EAAE,IAAY;QACvE,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE;gBAChD,OAAO;gBACP,EAAE;gBACF,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,EAAU;QACjD,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,EAAU;QAC7C,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe,EAAE,QAAgB,EAAE,MAAc;QACxE,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,QAAQ;aACpB,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;aACtB,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC;gBAClD,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,QAAQ;gBACnB,MAAM;aACP,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACL,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC;QACf,CAAC;gBAAS,CAAC;YACT,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM;gBAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,4BAA4B,CAChC,OAAe,EACf,QAA4B,EAC5B,OAA0B;QAE1B,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC;gBACzD,UAAU,EAAE,OAAO;gBACnB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,OAAO;aACR,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe,EAAE,QAAgB,EAAE,KAAa;QACtE,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC9C,UAAU,EAAE,OAAO;gBACnB,SAAS,EAAE,QAAQ;gBACnB,KAAK;aACN,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY;QAClB,OAAO;YACL,YAAY,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;YACrF,mBAAmB,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAClD,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;YAC/D,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;YACxF,WAAW,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI;SAC/D,CAAC;IACJ,CAAC;IAEO,4BAA4B,CAAC,EAAE,KAAK,EAAE,GAAG,EAAuC;QACtF,GAAG,EAAE,CAAC;QACN,MAAM,OAAO,GAAG,KAAsD,CAAC;QACvE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAAE,OAAO;QACtC,KAAK,4BAA4B,CAC/B,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,gBAAgB,EACrB,OAAO,CAAC,gBAAgB,CACzB,CAAC;IACJ,CAAC;IAEO,8BAA8B,CAAC,EACrC,KAAK,EACL,GAAG,GAIJ;QACC,GAAG,EAAE,CAAC;QACN,MAAM,OAAO,GAAG,KAKf,CAAC;QACF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;QACxD,IAAI,SAAS,EAAE,CAAC;YACd,yBAAyB,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC/C,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,QAAgB,EAChB,IAAY,EACZ,QAA+B;QAE/B,OAAO,QAAQ;YACb,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,OAAe,EACf,QAAgB,EAChB,IAAY,EACZ,MAAgB;QAEhB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAe,EACf,QAAgB,EAChB,KAAc,EACd,QAAiB;QAEjB,OAAO,UAAU,CAAC,KAAK,IAAI,EAAE;YAC3B,MAAM,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAClC,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,QAAQ;gBACf,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACU,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,OAAe,EAAE,KAAa;QACtC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxF,CAAC;IAED,cAAc,CACZ,OAAe,EACf,IAAY,EACZ,EAAU,EACV,QAAiB,EACjB,WAAsB;QAEtB,oBAAoB,CAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAC5D,IAAI,EACJ,EAAE,EACF,QAAQ,EACR;YACE,QAAQ,EAAE,OAAO;YACjB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAe,EAAE,EAAU,EAAE,QAAiB;QAChE,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QACvF,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE;oBAAE,SAAS;gBAClD,OAAO,CACL,KAAK,CAAC,cAAc,KAAK,IAAI;oBAC7B,KAAK,CAAC,QAAQ,KAAK,OAAO;oBAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;oBAChC,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAC5B,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;QACd,OAAO;YACL,IAAI,EAAE,OAAO;YACb,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpD,UAAU,EAAE,YAAY;YACxB,eAAe,EACb,yQAAyQ;YAC3Q,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;YACH,WAAW,EAAE;gBACX,gBAAgB,EAAE,IAAI;aACvB;SACF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,KAAwB;QACnC,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,UAAU,CACZ,wBAAwB,cAAc,iBAAiB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACrF,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,wBAAwB,cAAc,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC9B,IAAI,QAA4B,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;gBAC7E,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,GAAG,CAAC,UAAU,CACZ,yCAAyC,cAAc,EAAE,EACzD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;oBACF,qBAAqB,CAAC,GAAG,EAAE;wBACzB,MAAM,EAAE,QAAQ;wBAChB,OAAO,EAAE,gBAAgB;wBACzB,SAAS,EAAE,mBAAmB;wBAC9B,QAAQ,EAAE,OAAO;wBACjB,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE;4BACP,cAAc;4BACd,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;4BACxC,OAAO,EAAE,KAAK,CAAC,EAAE;4BACjB,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM;yBAC9B;qBACF,CAAC,CAAC;oBACH,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC;YACpC,IAAI,SAAS,CAAC,gBAAgB,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;gBACzD,qBAAqB,CAAC;oBACpB,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;oBACrD,UAAU,EAAE,WAAW,CAAC,UAAU;iBACnC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,WAAW,GAAG,uBAAuB,CAAC,WAAW,EAAE;gBACvD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;aAC7C,CAAC,CAAC,UAAU,CAAC;YACd,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;gBACrB,MAAM,UAAU,GAAG,uBAAuB,CAAC;oBACzC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,WAAW,CAAC,OAAO;oBAC5B,IAAI,EAAE,WAAW,CAAC,IAA0B;oBAC5C,cAAc;oBACd,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;oBAC9C,OAAO,EAAE,cAAc;oBACvB,EAAE,EAAE,WAAW,CAAC,EAAE;oBAClB,SAAS,EAAE,WAAW,CAAC,SAAS;oBAChC,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,WAAW,EAAE,WAAW,CAAC,WAAW;oBACpC,UAAU,EAAE,WAAW,CAAC,UAAU;iBACnC,CAAe,CAAC;gBACjB,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE;oBACpD,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;oBAC5C,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,OAAO,CAAC;iBACtD,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACvB,MAAM,GAAG,EAAE,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,SAAiB;QAChC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,OAAO;gBAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,cAAsB,EAAE,UAAkB;QAChE,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC;YAAE,OAAO,UAAU,CAAC;QAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;YACrF,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;IAC9F,CAAC;IAEO,YAAY,CAAC,OAAe,EAAE,IAAY;QAChD,OAAO,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAEO,oBAAoB,CAAC,OAAe;QAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO;aAChB,kBAAkB,EAAE;aACpB,IAAI,CACH,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC9B,CAAC,CAAC,OAAO,CAAC,cAAc,KAAK,OAAO;YACpC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAC3F,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,cAAsB,EAAE,UAAkB;QACtE,OAAO,0BAA0B,CAAC;YAChC,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;YACrD,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,SAAiB;QACtC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAChD,IAAI,OAAO,CAAC,kBAAkB;YAAE,OAAO,UAAU,CAAC;QAClD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;YAAE,OAAO,iBAAiB,CAAC;QACzD,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;YAAE,OAAO,gBAAgB,CAAC;QACzD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,oBAAoB;QAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpE,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO;gBAAE,SAAS;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC7C,IAAI,uBAAuB,CAAC,MAAM,CAAC,KAAK,IAAI;oBAAE,SAAS;gBACvD,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,UAAU,CAAC,uCAAuC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,GAAG,CAAC;YAAE,GAAG,CAAC,OAAO,CAAC,6BAA6B,QAAQ,gBAAgB,CAAC,CAAC;IACvF,CAAC;IAEO,yBAAyB,CAAC,OAMjC;QACC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;YAChF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,UAAU,CAAC,qCAAqC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,MAAM,uBAAuB,GAAG,GAAG,EAAE;YACnC,KAAK,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC5C,GAAG,CAAC,UAAU,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,OAAO,oBAAoB,CAAC;YAC1B,SAAS,EAAE,OAAO,CAAC,KAAqC;YACxD,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE;gBACT,SAAS,EAAE,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,SAAS;gBAC1D,aAAa,EAAE,WAAW;aAC3B;YACD,UAAU,EAAE,OAAO;YACnB,YAAY,EAAE,EAAE;YAChB,kBAAkB,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB;YACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YAClE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,EAAE,IAAI;YACT,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAmB,CAAC;YACjE,wBAAwB,EAAE,IAAI;SAC/B,CAAC,CAAC,IAAI,CACL,CAAC,OAAO,EAAE,EAAE;YACV,IAAI,OAAO,KAAK,UAAU;gBAAE,uBAAuB,EAAE,CAAC;QACxD,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,GAAG,CAAC,UAAU,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,uBAAuB,EAAE,CAAC;QAC5B,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,MAAgB;QACzC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,kBAAkB,eAAe,CAAC,MAAM,GAAG;gBACjD,KAAK,EAAE,IAAI;aACZ;SACF,CACF,CAAC;QACF,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC;aACtE,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;YACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,CAAC;YACrE,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC;YAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,YAAY,GAAG,gBAAgB,CAAC;YAChD,IAAI,UAAU,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,MAAM,UAAU,EAAE,CAAC;YACxE,IAAI,OAAO,CAAC,WAAW;gBAAE,UAAU,IAAI,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;YACnE,IAAI,OAAO;gBAAE,UAAU,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,OAAO,UAAU,EAAE;qBACzE;iBACF;aACF,CAAC,CAAC;YACH,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;wBAC7B;4BACE,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;4BAC7D,SAAS,EAAE,cAAc,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;4BAChE,KAAK,EAAE,OAAO,CAAC,UAAU;4BACzB,KAAK,EAAE,QAAQ;yBAChB;qBACF;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,MAAgB,EAAE,WAA+B;QAC3E,MAAM,cAAc,GAClB,WAAW,IAAI,IAAI,CAAC,cAAc;YAChC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAC/E,CAAC,CAAC,EAAE,CAAC;QACT,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,mBAAmB,cAAc,CAAC,MAAM,GAAG;gBACjD,KAAK,EAAE,IAAI;aACZ;SACF,CACF,CAAC;QACF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;aAC7D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,OAAO,GACX,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;YACtE,MAAM,YAAY,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;YACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO;gBAC3B,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE;oBAC9C,KAAK,EAAE,OAAO;oBACd,GAAG,EAAE,SAAS;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,SAAS;iBAClB,CAAC;gBACJ,CAAC,CAAC,GAAG,CAAC;YACR,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,QAAQ,QAAQ,YAAY,YAAY,OAAO,EAAE;iBACtF;aACF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,WAA+B;QACnD,MAAM,MAAM,GAAa;YACvB;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,YAAY,+CAA+C;iBACtE;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,2DAA2D;oBACtE,QAAQ,EAAE,YAAY;iBACvB;aACF;SACF,CAAC;QACF,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB;YACE,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,2DAA2D,EAAE;aACtF;SACF,CACF,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAsB,EAAE,CAAC;IAC1D,CAAC;IAEO,qBAAqB,CAAC,KAA0B;QACtD,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;QACzE,MAAM,OAAO,GAAG,yBAAyB,CAAC;YACxC,QAAQ,EAAE,OAAO;YACjB,cAAc;YACd,EAAE,EAAE,EAAE;YACN,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,cAAc;YAChD,gBAAgB,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YAClE,MAAM;YACN,QAAQ;YACR,IAAI;YACJ,WAAW,EAAE,EAAE;SAChB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,KAAK,EAAE,YAAoB,EAAE,MAAiB,EAAE,EAAE;YAChE,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,aAAa,CACtB,OAAO,CAAC,kBAAkB,EAC1B,MAAM,EACN,YAAY,EACZ,OAAO,CAAC,QAAQ,EAChB,MAAM,CACP,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,MAAM;gBACtB,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC;gBACpE,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC;QAEF,MAAM,SAAS,GAA0B;YACvC,OAAO;YACP,eAAe,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;YACxD,iBAAiB,EAAE,KAAK,EACtB,YAAoB,EACpB,eAA+C,EAC/C,EAAE;gBACF,IAAI,eAAe,EAAE,KAAK,KAAK,OAAO,EAAE,CAAC;oBACvC,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACrE,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,CAAC,eAAe,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACzF,CAAC;YACD,iBAAiB,EAAE,KAAK,EAAE,MAAsB,EAAE,EAAE;gBAClD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvD,MAAM,OAAO,CACX,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,CAC3F,CAAC;YACJ,CAAC;YACD,SAAS,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YACzB,UAAU,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YAC1B,UAAU,EAAE,KAAK,EAAE,QAAgB,EAAE,KAAc,EAAE,EAAE;gBACrD,MAAM,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;YACD,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SAC/B,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO;YACP,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;SAClC,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAC5B,OAOC,EACD,OAAO,GAAkF,EAAE;QAE3F,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;QAC1C,MAAM,eAAe,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC;QAC9E,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5F,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;YAC/B,CAAC,CAAC,sBAAsB,CAAC,cAAc,EAAE,QAAQ,CAAC;YAClD,CAAC,CAAC,cAAc,CAAC;QAEnB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;YAC7B,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE;YAC7B,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO,CAAC,OAAO;YACrB,QAAQ;YACR,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,KAAK;YACrB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,uBAAuB,CAAC;YACpC,QAAQ,EAAE,OAAO;YACjB,cAAc;YACd,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACvD,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO,CAAC,OAAO;YACrB,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,EAAE;YACf,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC;YACzC,cAAc;YACd,MAAM,EAAE,OAAO,CAAC,OAAO;YACvB,QAAQ;YACR,IAAI,EAAE,WAAW;YACjB,EAAE,EAAE,OAAO;YACX,GAAG,CAAC,eAAe;gBACjB,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE;gBAC1B,CAAC,CAAC,EAAE,kBAAkB,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;SAClE,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAAsB,EACtB,OAOC;QAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE;YAC9D,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,cAAc;gBACtB,CAAC,CAAC;oBACE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;wBACtC,CAAC,CAAE,IAAc;wBACjB,CAAC,CAAE,iBAA2B;iBACjC;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAY,EAAE,EAAE;YAClD,GAAG,CAAC,UAAU,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE;YAC7C,GAAG,CAAC,UAAU,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,GAAY,EAAE,EAAE;YACnE,GAAG,CAAC,UAAU,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YAC9C,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YAC1C,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE;YACjD,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE;YAClD,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,0BAA0B,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3D,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kCAAkC,EAAE,CAAC,OAAO,EAAE,EAAE;YACnE,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;YACtD,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;YAChD,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YAC9C,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CACxB,IAAI,CAAC,iBAAiB,CAAC,OAA0D,CAAC,CACnF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,EAC7B,KAAK,EACL,GAAG,GAIJ;QACC,MAAM,CAAC,GAAG,KAOT,CAAC;QAEF,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,EAAE,CAAC;YACN,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QAElE,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,uBAAuB,CAAC;YACzC,QAAQ,EAAE,OAAO;YACjB,cAAc,EAAE,CAAC,CAAC,OAAO;YACzB,IAAI,EAAE,SAAkB;YACxB,gBAAgB,EAAE,QAAQ;YAC1B,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,WAAW,IAAI,oDAAoD;YACzE,UAAU;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAe,CAAC;QAEjB,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,GAAG,CAAC,OAAO,CACT,IAAI,CAAC,CAAC,OAAO,uDAAuD,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACvG,CAAC;YACF,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpC,GAAG,CAAC,UAAU,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,GAAG,EAAE,CAAC;YACN,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC5C,KAAK,EAAE,UAAU;YACjB,kBAAkB;YAClB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC;YACrD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,GAAG,EAAE,CAAC;QACN,MAAM,MAAM,CAAC;IACf,CAAC;IAEO,iBAAiB,CACvB,KAA2B,EAC3B,GAAe;QAEf,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,YAAY,GAChB,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,EAAE,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC;QACvF,MAAM,iBAAiB,GACrB,KAAK,CAAC,OAAO,KAAK,aAAa,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7E,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,gBAAgB,IAAI,eAAe,EAAE,CAAC;gBACxC,KAAK,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC5D,GAAG,CAAC,UAAU,CAAC,iCAAiC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;YACL,CAAC;YACD,GAAG,EAAE,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,sBAAsB,GAC1B,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC;QAC9E,IAAI,sBAAsB;YAAE,OAAO,IAAI,CAAC;QACxC,GAAG,EAAE,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAAiB,EACjB,kBAAyC;QAEzC,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACtF,KAAK,CAAC,WAAW,GAAG,MAAM,kBAAkB,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5B,KAAK,CAAC,SAAS;YACb,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;YACzD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,aAAc,CAClD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAC/C,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAe,KAAK,CAAC,WAAW,EAAE,MAAM;gBAClD,CAAC,CAAC,KAAK,CAAC,SAAS;oBACf,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,SAAS;gBACb,CAAC,CAAC,MAAM,kBAAkB,CACtB,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;oBAC/D,OAAO,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,QAAQ;oBAC5C,KAAK;oBACL,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ;oBACpF,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,EACF,KAAK,CAAC,IAAI,EACV,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CACnE,CAAC;YACN,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvF,MAAM,IAAI,GACR,SAAS,CAAC,MAAM,GAAG,CAAC;oBAClB,CAAC,CAAC,iCAAiC;oBACnC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAClC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC9D,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS;oBAC5B,CAAC,CAAC,OAAO,CAAC,OAAO;oBACjB,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;wBACnB,CAAC,CAAC;4BACE,GAAG,OAAO,CAAC,OAAO;4BAClB,UAAU,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,UAAU;4BACjC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,QAAQ;yBAC9B;wBACH,CAAC,CAAC,SAAS,CAAC;gBAChB,IAAI,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,GAAG,+BAA+B,CAAC;oBAC7C,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC9D,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;YACtF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAiB;QAClD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QAE9E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE;gBAC5E,OAAO,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI,EAAE,QAAQ;gBAC5C,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,QAAQ;gBACpF,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAClC,KAAK,EACL,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,0BAA0B,EAAE,EAAE,EAC5E,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAC/B,CAAC;YACF,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC;YACzD,GAAG,CAAC,OAAO,CACT,IAAI,KAAK,CAAC,OAAO,iCAAiC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,WAAW,GAAG,GAAG,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAC5I,CAAC;YACF,OAAO,WAAW,GAAG,GAAG,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;gBACzC,GAAG,CAAC,UAAU,CACZ,wFAAwF,EACxF,MAAM,CAAC,GAAG,CAAC,CACZ,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;YACD,qBAAqB,CAAC,GAAG,EAAE;gBACzB,MAAM,EAAE,eAAe;gBACvB,OAAO,EAAE,sBAAsB;gBAC/B,SAAS,EAAE,UAAU;gBACrB,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE;aAC1D,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,EAC/B,KAAK,EACL,GAAG,GAIJ;QACC,MAAM,CAAC,GAAG,KAA6B,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC;YAAE,OAAO;QAE5C,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,gBAAgB,GAAqB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QACtE,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAEvE,IAAI,CAAC,IAAI,IAAI,qBAAqB,EAAE,CAAC;YACnC,GAAG,EAAE,CAAC;YACN,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAErF,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,KAAK,oBAAoB,CACvB,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,gBAAgB,EACrB,CAAC,CAAC,OAAO,EACT,CAAC,CAAC,SAAS,EACX,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,uBAAuB,CAAC;YACzC,QAAQ,EAAE,OAAO;YACjB,cAAc,EAAE,CAAC,CAAC,OAAO;YACzB,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAuB;YACrD,gBAAgB;YAChB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,UAAU;YACV,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAe,CAAC;QAEjB,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAE3D,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,GAAG,CAAC,OAAO,CACT,IAAI,CAAC,CAAC,OAAO,yCAAyC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CACzF,CAAC;YACF,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpC,GAAG,CAAC,UAAU,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,GAAG,EAAE,CAAC;YACN,OAAO;QACT,CAAC;QAED,MAAM,gBAAgB,GACpB,UAAU,CAAC,UAAU,IAAI,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1E,UAAU,CAAC,UAAU,GAAG,gBAAgB,CAAC;QACzC,MAAM,WAAW,GACf,IAAI;YACJ,CAAC,CAAC,CAAC,SAAS;gBACV,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;gBAC3C,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrF,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,EAAE,CAAC;YACN,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,CAAC;gBAAE,OAAO;QAC3E,CAAC;QACD,MAAM,aAAa,GAAG,IAAI;YACxB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,8BAA8B,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,MAAM,SAAS,GACb,aAAa,KAAK,IAAI;YACpB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,aAAa,KAAK,KAAK;gBACvB,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;gBAC7C,CAAC,CAAC,KAAK,CAAC;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC;YAC5C,KAAK,EAAE,UAAU;YACjB,kBAAkB;YAClB,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC;YAC3D,SAAS,EAAE,IAAI,IAAI,SAAS;YAC5B,kBAAkB,EAAE,IAAI;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW;YAAE,GAAG,EAAE,CAAC;QACxB,MAAM,MAAM,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,EAC/B,IAAI,EACJ,GAAG,GAIJ;QACC,MAAM,OAAO,GAAG,IAOf,CAAC;QAEF,MAAM,GAAG,EAAE,CAAC;QAEZ,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC7E,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC;QACvF,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,OAAO;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE;gBAC7C,OAAO;gBACP,IAAI;gBACJ,UAAU;gBACV,OAAO;gBACP,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,UAAU,CAAC,2BAA2B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAuC;QAC7E,MAAM,CAAC,GAAG,KAAgF,CAAC;QAC3F,GAAG,EAAE,CAAC;QAEN,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,KAAK,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,OAAO;QAE7B,IAAI,CAAC,SAAS,CAAC,KAAK;aACjB,OAAO,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;SACpC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,GAAG,CAAC,UAAU,CAAC,iCAAiC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,EAC9B,IAAI,EACJ,GAAG,GAIJ;QACC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,GAAG,EAAE,CAAC;YACN,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACjD,GAAG,EAAE,CAAC;YACN,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,GAAG,EAAE,CAAC;QACN,MAAM,UAAU,GACd,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE7E,GAAG,CAAC,OAAO,CAAC,qBAAqB,MAAM,6BAA6B,UAAU,EAAE,CAAC,CAAC;QAElF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;QAE5E,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC;QAEpF,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;iBAChC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CACpB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC3B,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;aACtC,CAAC,CACH;iBACA,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACb,GAAG,CAAC,UAAU,CAAC,iCAAiC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,IAA0B,EAAE,MAAwB;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;YAAE,OAAO;QAElC,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;QAC9C,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAC5D,CAAC,CAAC,MAAM,CAAC,gBAAgB;YACzB,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;QACrC,MAAM,UAAU,GAAG,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE/D,MAAM,YAAY,GAAG,cAAc,EAAE,IAAI,EAAE,IAAI,IAAI,cAAc,EAAE,KAAK,CAAC;QACzE,MAAM,aAAa,GAAG,eAAe,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,SAAS,GAAG,aAAa,EAAE,MAAM;YACrC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,CAAC,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,kBAAkB,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAElC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;YACxB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,EAAE;YACF,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI;YAChD,IAAI;YACJ,WAAW,EAAE,EAAE;YACf,cAAc,EAAE,KAAK;YACrB,QAAQ,EAAE,OAAO;YACjB,gBAAgB,EAAE;gBAChB,IAAI,EAAE,eAAe;gBACrB,QAAQ,EAAE,MAAM,CAAC,SAAS;gBAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ;gBACxB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,cAAc,EAAE,cAAc;oBAC5B,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;oBAClE,CAAC,CAAC,SAAS;gBACb,eAAe,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACjD,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CAAC;gBACH,SAAS,EAAE,SAAS,CAAC,UAAU;aAChC;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,uBAAuB,CAAC;YACpC,QAAQ,EAAE,OAAO;YACjB,cAAc,EAAE,SAAS;YACzB,IAAI,EAAE,cAAc;YACpB,gBAAgB,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACjE,EAAE;YACF,IAAI,EAAE,MAAM;YACZ,IAAI;YACJ,WAAW,EAAE,EAAE;YACf,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,UAAU;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;YAC5E,MAAM,UAAU,GAAe;gBAC7B,GAAG,uBAAuB,CAAC;oBACzB,QAAQ,EAAE,OAAO;oBACjB,cAAc,EAAE,SAAS;oBACzB,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAuB;oBACpF,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,EAAE;oBACF,SAAS,EAAE,QAAQ;oBACnB,IAAI,EAAE,MAAM;oBACZ,IAAI;oBACJ,WAAW,EAAE,EAAE;oBACf,UAAU;iBACX,CAAC;gBACF,OAAO,EAAE,SAAS;gBAClB,WAAW,EAAE,EAAE;aAChB,CAAC;YACF,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,SAAiB,EACjB,KAAoF,EACpF,SAAiB;QAEjB,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,WAAW,CAAC;YAC1D,IAAI,CAAC,GAAG;gBAAE,SAAS;YACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;gBACrD,QAAQ,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC;aACtE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAC9E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;YACrC,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,KAAK,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,GAAW,EAAE,QAAgB;QAC3D,MAAM,SAAS,CACb,KAAK,IAAI,EAAE;YACT,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,QAAQ,EAAE,EAAE;aACtD,CAAC,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,2BAA2B,CACnC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,EACjD,QAAQ,CAAC,MAAM,CAChB,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACjD,CAAC,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,kCAAkC,EAAE,CACxF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,KAAiB;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,WAAW,GAAiB,EAAE,CAAC;QACnC,IAAI,eAAwB,CAAC;QAC7B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACpF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,eAAe,GAAG,GAAG,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;YAC5B,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YACzD,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,IAAI,EAAE,QAAQ;YACxB,WAAW,EAAE,IAAI,EAAE,WAAW;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW;YACX,cAAc,EAAE,KAAK;SACtB,CAAC,CAAC;QACH,IAAI,eAAe;YAAE,MAAM,eAAe,CAAC;QAC3C,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAAC,KAa5C;QACC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;YAC7B,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;YACrE,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GACX,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;QAC5F,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;YAC5B,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YACzD,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,QAAQ,EAAE,KAAK,CAAC,SAAS;YACzB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,cAAc;YAC3D,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,OAAO;YACpB,IAAI,EAAE,wBAAwB,CAAC,KAAK,CAAC;YACrC,WAAW;YACX,cAAc,EAAE,IAAI;YACpB,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,MAAM;YAChD,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO,UAAU,CAAC;QAE5C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzC,IAAI,KAAK,CAAC,EAAE;oBAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,UAAU,CACZ,mCAAmC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EACrD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,qBAAqB,CAAC,OAA4B;QACxD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QACjD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YAC9D,OAAO,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,IAAI;YACd,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1C,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAClC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,YAAqB;QACpE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,YAAgC,CAAC;QACrC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,IAAI,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;gBAAE,YAAY,GAAG,EAAE,CAAC;QACpF,CAAC;QAED,MAAM,WAAW,GAA0B,EAAE,CAAC;QAE9C,IAAI,MAA0B,CAAC;QAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,MAAM,QAAQ,GAAG,CAAC,CAAC;QAEnB,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC;gBACxD,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,YAAY;gBACpB,MAAM,EAAE,YAAY;gBACpB,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,IAAI;gBACX,MAAM;aACP,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,WAAW,CAAC,IAAI,CAAC,GAAI,MAAM,CAAC,QAAkC,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;YAC/C,SAAS,EAAE,CAAC;QACd,CAAC,QAAQ,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE;QAEzC,MAAM,gBAAgB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClD,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;YACpD,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC;YACnD,MAAM,6BAA6B,GAAG,CAAC,cAAc,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;YAC7E,IAAI,6BAA6B,EAAE,CAAC;gBAClC,MAAM,IAAI,CAAC,8BAA8B,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,EAAG,EAAE,CAAC,CAAC;gBACvF,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAK,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK;gBAC3B,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAG,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAC;YAEP,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;gBACxB,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAG,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBACxD,EAAE,EAAE,GAAG,CAAC,EAAG;gBACX,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAK;gBACxC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ;gBACrD,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW;gBAC3D,IAAI;gBACJ,WAAW;gBACX,cAAc,EAAE,cAAc;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,gBAAgB,CAAC,MAAM,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,YAAqB;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,kBAAkB,GAAkC,EAAE,CAAC;QAC7D,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;YACnE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,kBAAkB,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,kBAAkB,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gBAClE,IAAI,KAAK,GAAG,CAAC;oBAAE,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAC3D,aAAa,IAAI,KAAK,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,UAAU,CAAC,uBAAuB,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;YAED,IAAI,SAAS,KAAK,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAC1C,GAAG,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,MAA0B,CAAC;QAC/B,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,MAAM,CAAC,OAQV,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;gBAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO;oBAAE,SAAS;gBAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACnB,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,QAAQ,EAAE,CAAC,CAAC,IAAI;oBAChB,WAAW,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI;oBAClC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;iBAClB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACjD,CAAC,QAAQ,MAAM,EAAE;IACnB,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,MAA0B,CAAC;QAC/B,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;gBACrD,KAAK,EAAE,gCAAgC;gBACvC,gBAAgB,EAAE,IAAI;gBACtB,KAAK,EAAE,GAAG;gBACV,MAAM;aACP,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,QASX,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS;oBAAE,SAAS;gBAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACtB,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,GAAG,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACjD,CAAC,QAAQ,MAAM,EAAE;QAEjB,MAAM,GAAG,SAAS,CAAC;QACnB,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;gBACrD,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,GAAG;gBACV,MAAM;aACP,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,QAA6D,CAAC;YACjF,KAAK,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,EAAE,CAAC,EAAE;oBAAE,SAAS;gBACrB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACjD,CAAC,QAAQ,MAAM,EAAE;IACnB,CAAC;CACF","sourcesContent":["import { SocketModeClient } from \"@slack/socket-mode\";\nimport type { KnownBlock } from \"@slack/types\";\nimport { WebAPIRateLimitedError, WebClient } from \"@slack/web-api\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { basename, join } from \"node:path\";\nimport {\n createConversationEvent,\n createConversationMessage,\n type MessagingBot,\n type ConversationContext,\n type ConversationEvent,\n type MessagingEventHandler,\n type ConversationResponder,\n type ChatToolResult,\n type ConversationKind,\n type MessagingInfo,\n type OfficeAddress,\n type PlatformHistoryMessage,\n type PlatformHistoryOptions,\n type PlatformUserInfo,\n} from \"../index.js\";\nimport { createOfficeAddress, listRegisteredOffices, type Workspace } from \"../../office/index.js\";\nimport { COMMAND_MANIFEST, type SlackSlashRoute } from \"../commands/manifest.js\";\nimport {\n slackConversationAutoReplyMode,\n resolveConversationSettings,\n} from \"../../settings/index.js\";\nimport { evaluateWithJev, JevNotConfiguredError } from \"../../harness/index.js\";\nimport type { EventScheduler } from \"../../events/scheduler.js\";\nimport * as log from \"../../log.js\";\nimport type { Attachment } from \"../../types.js\";\nimport type {\n SlackBlockAction,\n SlackBlockActionBody,\n SlackChannel,\n SlackEvent,\n SlackUser,\n} from \"./types.js\";\nimport { isRecord, readTextFileIfExists } from \"../../file-guards.js\";\nimport { PRODUCT_NAME, formatForceStopped } from \"../messages.js\";\nimport {\n appendBotResponseLog,\n appendChannelLog,\n MessagingEventQueue,\n MessagingIntakeTracker,\n saveIncomingAttachments,\n withRetry,\n} from \"../shared.js\";\nimport { matchMagicWord, processMessageIntake } from \"../intake.js\";\nimport {\n readPlatformChannelKind,\n recordPlatformChannelKind,\n type PlatformChannelKind,\n} from \"../../office/projection.js\";\nimport {\n AssistantThreadRegistry,\n handleAgentContextChanged,\n handleAgentDmOpened,\n handleAssistantThreadStarted,\n titleAssistantThread,\n type AgentContext,\n type AssistantSurfaceOps,\n type AssistantThreadPayload,\n type SuggestedPrompt,\n} from \"./assistant.js\";\nimport { createSlackAdapters } from \"./context.js\";\nimport {\n hasMaterializedChatSession,\n registerThreadSession,\n} from \"../../sessions/chat-history-sync.js\";\nimport type { SlackPersonaIdentity } from \"./persona.js\";\nimport { conversationIdOf } from \"../../sessions/session-key.js\";\nimport {\n isSlackThreadSessionKey,\n planSlackAdapterSession,\n planSlackEventAnchorRun,\n resolveSlackSessionKey,\n} from \"./session.js\";\nimport { reportUserFacingError } from \"../../observability/index.js\";\nimport { recordSlackUpdate } from \"./update-diagnostics.js\";\nimport { renderSlackBlocks, resolveSlackMentions } from \"./blocks.js\";\nimport {\n querySlackTasks,\n formatTaskStatus,\n readTaskRoots,\n isTaskStatusQuestion,\n} from \"./task-status.js\";\nimport { buildAutoReplyState, JEV_ADDRESSED_INSTRUCTIONS } from \"./auto-reply-context.js\";\nimport { buildTaskIntentState, classifyTaskIntent, type TaskIntent } from \"./task-intent.js\";\nimport { StreamStartLimiter } from \"./stream-limits.js\";\n\nconst SLACK_EVENT_ANCHOR_TEXT = \"Working on it...\";\n\ntype SlackIncomingMessage = {\n text?: string;\n channel: string;\n user?: string;\n ts: string;\n thread_ts?: string;\n channel_type?: string;\n subtype?: string;\n bot_id?: string;\n app_id?: string;\n username?: string;\n bot_profile?: { id?: string; app_id?: string; name?: string; real_name?: string };\n blocks?: unknown[];\n attachments?: unknown[];\n files?: Array<{ name: string; url_private_download?: string; url_private?: string }>;\n};\n\ntype SlackHistoryMessage = Omit<SlackIncomingMessage, \"channel\" | \"ts\"> & { ts?: string };\n\nfunction hasMessageContent(message: SlackHistoryMessage, includeBlocks = true): boolean {\n const content: Array<string | unknown[] | undefined> = [message.text, message.files];\n if (includeBlocks) content.push(message.blocks, message.attachments);\n return content.some((part) => !!part?.length);\n}\n\nfunction hasBotIdentity(message: SlackHistoryMessage): boolean {\n return !!message.bot_id || message.subtype === \"bot_message\";\n}\n\nconst USER_MESSAGE_SUBTYPES = new Set([undefined, \"file_share\"]);\nconst BOT_MESSAGE_SUBTYPES = new Set([...USER_MESSAGE_SUBTYPES, \"bot_message\"]);\n\ntype CommandAdapterInput = {\n conversationId: string;\n userId: string;\n userName: string | undefined;\n text: string;\n ts: string;\n ephemeralChannelId?: string;\n threadTs?: string;\n sessionKey?: string;\n};\n\nconst MAX_STREAM_TEXT_CHARS = 12_000;\n\nexport function chunkStreamText(text: string, limit = MAX_STREAM_TEXT_CHARS): string[] {\n if (text.length <= limit) return [text];\n const chunks: string[] = [];\n for (let index = 0; index < text.length; index += limit) {\n chunks.push(text.slice(index, index + limit));\n }\n return chunks;\n}\n\nfunction slackIsRateLimited(err: Error): boolean {\n if (err instanceof WebAPIRateLimitedError) return true;\n if ((err as { code?: unknown }).code === \"rate_limited\") return true;\n const data = (err as { data?: { error?: string; response?: { status?: number } } }).data;\n return data?.error === \"rate_limited\" || data?.response?.status === 429;\n}\n\nconst slackRetry = <T>(fn: () => Promise<T>): Promise<T> =>\n withRetry(fn, { isRateLimited: slackIsRateLimited });\n\nfunction collectSlackText(value: unknown, parts: string[]): void {\n if (value === null || value === undefined) return;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (trimmed) parts.push(trimmed);\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) collectSlackText(item, parts);\n return;\n }\n if (typeof value !== \"object\") return;\n\n const obj = value as Record<string, unknown>;\n for (const key of [\"text\", \"fallback\", \"title\", \"value\"] as const) {\n collectSlackText(obj[key], parts);\n }\n collectSlackText(obj.fields, parts);\n collectSlackText(obj.elements, parts);\n collectSlackText(obj.blocks, parts);\n}\n\nfunction buildSlackAppMessageText(event: {\n text?: string;\n blocks?: unknown[];\n attachments?: unknown[];\n}): string {\n const parts: string[] = [];\n collectSlackText(event.text, parts);\n collectSlackText(event.blocks, parts);\n collectSlackText(event.attachments, parts);\n const deduped = parts.filter((part, index) => parts.indexOf(part) === index);\n return deduped.join(\"\\n\");\n}\n\nconst MRKDWN_CONTEXT_TEXT_LIMIT = 3000;\n\nexport function buildMrkdwnContextBlock(text: string): object {\n const blockText =\n text.length > MRKDWN_CONTEXT_TEXT_LIMIT\n ? text.substring(0, MRKDWN_CONTEXT_TEXT_LIMIT - 20) + \"\\n_(truncated)_\"\n : text;\n return { type: \"context\", elements: [{ type: \"mrkdwn\", text: blockText }] };\n}\n\nexport type { SlackChannel, SlackEvent, SlackUser } from \"./types.js\";\n\nclass AttachmentDownloadHttpError extends Error {\n constructor(\n message: string,\n readonly status: number,\n ) {\n super(message);\n }\n}\n\nfunction isRetryableAttachmentDownloadError(error: unknown): boolean {\n if (!(error instanceof AttachmentDownloadHttpError)) return true;\n return error.status === 408 || error.status === 429 || error.status >= 500;\n}\n\nexport class SlackMessagingBot implements MessagingBot {\n private socketClient: SocketModeClient;\n private webClient: WebClient;\n private readonly statusClient: WebClient;\n private readonly statusUpdates = new Map<string, Promise<void>>();\n private handler: MessagingEventHandler;\n private workspace: Workspace;\n private botToken: string;\n private botUserId: string | null = null;\n private botId: string | null = null;\n private teamId: string | null = null;\n private ownMentionRegex: RegExp | null = null;\n private startupTs: string | null = null;\n\n private users = new Map<string, SlackUser>();\n private channels = new Map<string, SlackChannel>();\n private assistantThreads = new AssistantThreadRegistry();\n private streamStarts = new StreamStartLimiter();\n private stopped = false;\n private queues = new Map<string, MessagingEventQueue>();\n private intake = new MessagingIntakeTracker(\"Slack\");\n private eventScheduler: EventScheduler | null = null;\n\n private conversationDir(channelId: string): string {\n return this.workspace.office(createOfficeAddress(\"slack\", channelId)).dir;\n }\n\n private resolveReplyMode(address: OfficeAddress): \"top-level\" | \"thread\" {\n return (\n resolveConversationSettings(this.workspace.office(address)).slack?.replyMode ?? \"top-level\"\n );\n }\n\n private createContext(event: SlackEvent): ConversationContext {\n const context = createSlackAdapters(event, this, {\n replyMode: this.resolveReplyMode(event.address),\n });\n if (event.conversationKind === \"direct\") {\n context.responder.getTaskStatus = (key) =>\n querySlackTasks(\n this.conversationDir(event.channel),\n event.channel,\n this.handler\n .getRunningSessions()\n .filter(\n (s) => s.address.platform === \"slack\" && s.address.conversationId === event.channel,\n ),\n key,\n );\n }\n if (\n event.conversationKind === \"direct\" &&\n event.thread_ts &&\n this.isTaskThread(event.channel, event.thread_ts)\n ) {\n let notified = false;\n context.responder.notifyCompletion = async () => {\n if (notified) return;\n const text = `<@${event.user}> 這一輪處理已結束,請查看上方結果。`;\n const ts = await this.postInThread(event.channel, event.thread_ts!, text);\n notified = true;\n this.logBotResponse(event.channel, text, ts, event.thread_ts);\n };\n }\n if (event.conversationKind === \"direct\" && !event.thread_ts) {\n context.responder.startTask = async (message, task) => {\n if (this.stopped) throw new Error(\"Slack is shutting down; task was not started.\");\n await context.responder.deleteResponse();\n const root = await this.postMessage(event.channel, message);\n this.logToFile(event.channel, {\n date: new Date().toISOString(),\n ts: root,\n user: \"bot\",\n text: message,\n isMessagingBot: true,\n taskRoot: true,\n });\n const sessionKey = resolveSlackSessionKey(event.channel, root);\n try {\n registerThreadSession({\n conversationDir: this.conversationDir(event.channel),\n sessionKey,\n });\n const child: SlackEvent = {\n ...event,\n ts: `task:${root}`,\n thread_ts: root,\n sessionKey,\n text: task,\n };\n if (\n !this.getQueue(sessionKey).enqueue(async () => {\n try {\n await this.handler.handleEvent(\n {\n ...child,\n attachments: child.attachments?.map((a) => ({\n name: a.original,\n localPath: a.localPath,\n })),\n },\n this,\n this.createContext(child),\n );\n } catch (error) {\n reportUserFacingError(error, {\n domain: \"mikan\",\n surface: \"task_handoff\",\n operation: \"start_task_run\",\n severity: \"error\",\n platform: \"slack\",\n context: { conversationId: event.channel, sessionKey, threadTs: root },\n });\n await this.postInThread(\n event.channel,\n root,\n \"Task could not start. Please reply here to try again.\",\n );\n throw error;\n }\n })\n )\n throw new Error(\"Task queue is closed.\");\n } catch (error) {\n await this.updateMessage(event.channel, root, `${message}\\n\\nTask could not start.`);\n throw error;\n }\n return sessionKey;\n };\n }\n return context;\n }\n\n constructor(\n handler: MessagingEventHandler,\n config: { appToken: string; botToken: string; workspace: Workspace },\n ) {\n this.handler = handler;\n this.workspace = config.workspace;\n this.botToken = config.botToken;\n this.socketClient = new SocketModeClient({\n appToken: config.appToken,\n clientPingTimeout: 12_000,\n });\n this.webClient = new WebClient(config.botToken);\n this.statusClient = new WebClient(config.botToken, {\n timeout: 3000,\n retryConfig: { retries: 0 },\n rejectRateLimitedCalls: true,\n });\n }\n\n setEventScheduler(scheduler: EventScheduler): void {\n this.eventScheduler = scheduler;\n }\n\n async start(): Promise<void> {\n this.stopped = false;\n const auth = await this.webClient.auth.test();\n this.botUserId = auth.user_id as string;\n this.botId = typeof auth.bot_id === \"string\" ? auth.bot_id : null;\n this.teamId = typeof auth.team_id === \"string\" ? auth.team_id : null;\n\n await Promise.all([this.fetchUsers(), this.fetchChannels()]);\n if (this.stopped) return;\n log.logInfo(`Loaded ${this.channels.size} channels, ${this.users.size} users`);\n this.backfillChannelKinds();\n\n this.startupTs = (Date.now() / 1000).toFixed(6);\n\n this.setupEventHandlers();\n await this.socketClient.start();\n\n log.logConnected(\"Slack\");\n\n void this.backfillAllChannels(this.startupTs).catch((error) => {\n log.logWarning(\"Slack backfill failed\", String(error));\n });\n }\n\n async stop(): Promise<void> {\n this.stopped = true;\n try {\n await this.socketClient.disconnect();\n } finally {\n await this.intake.close();\n await Promise.all([...this.queues.values()].map((queue) => queue.close()));\n }\n }\n\n getUser(userId: string): SlackUser | undefined {\n return this.users.get(userId);\n }\n\n getChannel(channelId: string): SlackChannel | undefined {\n return this.channels.get(channelId);\n }\n\n getAllUsers(): SlackUser[] {\n return Array.from(this.users.values());\n }\n\n getAllChannels(): SlackChannel[] {\n return Array.from(this.channels.values());\n }\n\n private stripOwnMention(text: string | undefined): string {\n const source = text ?? \"\";\n if (!this.botUserId) return source.trim();\n if (!this.ownMentionRegex || !this.ownMentionRegex.source.includes(this.botUserId)) {\n this.ownMentionRegex = new RegExp(`<@${this.botUserId}>`, \"gi\");\n }\n return source.replace(this.ownMentionRegex, \"\").trim();\n }\n\n private resolveMentions(text: string): string {\n return resolveSlackMentions(text, this.users.values());\n }\n\n async postMessage(\n channel: string,\n text: string,\n threadTs?: string,\n identity?: SlackPersonaIdentity,\n ): Promise<string> {\n return slackRetry(async () => {\n const payload = {\n channel,\n ...(threadTs !== undefined ? { thread_ts: threadTs } : {}),\n ...(identity ? { username: identity.username, icon_emoji: identity.iconEmoji } : {}),\n ...renderSlackBlocks(this.resolveMentions(text)),\n };\n const result = await this.webClient.chat.postMessage(payload);\n return result.ts as string;\n });\n }\n\n async addReaction(channel: string, messageTs: string, emoji: string): Promise<void> {\n const name = emoji.replace(/^:|:$/g, \"\");\n await slackRetry(async () => {\n try {\n await this.webClient.reactions.add({ channel, timestamp: messageTs, name });\n } catch (err) {\n if ((err as { data?: { error?: string } })?.data?.error === \"already_reacted\") return;\n throw err;\n }\n });\n }\n\n async postEphemeral(\n channel: string,\n user: string,\n text: string,\n threadTs?: string,\n blocks?: object[],\n ): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.chat.postEphemeral({\n channel,\n user,\n text,\n ...(blocks !== undefined ? { blocks: blocks as KnownBlock[] } : {}),\n ...(threadTs ? { thread_ts: threadTs } : {}),\n });\n });\n }\n\n async postEphemeralBlocks(\n channel: string,\n user: string,\n text: string,\n blocks: object[],\n threadTs?: string,\n ): Promise<void> {\n return this.postEphemeral(channel, user, text, threadTs, blocks);\n }\n\n async postMessageBlocks(\n channel: string,\n text: string,\n blocks: object[],\n threadTs?: string,\n ): Promise<string> {\n return slackRetry(async () => {\n const payload = {\n channel,\n text,\n blocks: blocks as KnownBlock[],\n ...(threadTs !== undefined ? { thread_ts: threadTs } : {}),\n };\n const result = await this.webClient.chat.postMessage(payload);\n return result.ts as string;\n });\n }\n\n async updateMessageBlocks(\n channel: string,\n ts: string,\n text: string,\n blocks: object[],\n ): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.chat.update({ channel, ts, text, blocks: blocks as KnownBlock[] });\n });\n }\n\n async postPrivate(conversationId: string, userId: string, text: string): Promise<void> {\n await this.postEphemeral(conversationId, userId, text);\n }\n\n async postPrivateDiagnostic(\n conversationId: string,\n userId: string,\n text: string,\n options?: { style?: \"muted\" | \"error\" },\n ): Promise<void> {\n if (options?.style !== \"muted\") {\n await this.postEphemeral(\n conversationId,\n userId,\n options?.style === \"error\" ? `_${text}_` : text,\n );\n return;\n }\n await this.postEphemeralBlocks(conversationId, userId, text, [buildMrkdwnContextBlock(text)]);\n }\n\n async openDirectConversation(userId: string): Promise<string> {\n return slackRetry(async () => {\n const result = await this.webClient.conversations.open({ users: userId });\n const channelId = result.channel?.id;\n if (!channelId) {\n throw new Error(`Failed to open DM for user ${userId}`);\n }\n return channelId;\n });\n }\n\n async fetchHistory(\n channel: string,\n options?: PlatformHistoryOptions,\n ): Promise<PlatformHistoryMessage[]> {\n const limit = Math.min(Math.max(options?.limit ?? 200, 1), 999);\n const threadTs = options?.threadTs;\n return slackRetry(async () => {\n const result = threadTs\n ? await this.webClient.conversations.replies({\n channel,\n ts: threadTs,\n ...(options?.oldest ? { oldest: options.oldest, inclusive: false } : {}),\n limit,\n })\n : await this.webClient.conversations.history({\n channel,\n ...(options?.oldest ? { oldest: options.oldest, inclusive: false } : {}),\n limit,\n });\n const messages = (result.messages ?? []) as Array<{\n ts?: string;\n thread_ts?: string;\n user?: string;\n bot_id?: string;\n subtype?: string;\n text?: string;\n }>;\n const mapped = messages\n .filter((msg): msg is typeof msg & { ts: string } => !!msg.ts)\n .filter((msg) => msg.ts !== threadTs)\n .map((msg) => {\n const user = msg.user ? this.users.get(msg.user) : undefined;\n const message: PlatformHistoryMessage = {\n ts: msg.ts,\n text: msg.text ?? \"\",\n isBot: !!msg.bot_id || msg.subtype === \"bot_message\" || user?.isBot === true,\n };\n if (msg.thread_ts && msg.thread_ts !== msg.ts) message.threadTs = msg.thread_ts;\n if (msg.user) message.userId = msg.user;\n if (user) message.userName = user.userName;\n return message;\n });\n return threadTs ? mapped : mapped.toReversed();\n });\n }\n\n async listUsers(): Promise<PlatformUserInfo[]> {\n await slackRetry(() => this.fetchUsers());\n return this.getAllUsers().map((user) => ({\n id: user.id,\n userName: user.userName,\n displayName: user.displayName,\n isBot: user.isBot === true,\n }));\n }\n\n async updateMessage(channel: string, ts: string, text: string): Promise<void> {\n return slackRetry(async () => {\n const payload = { channel, ts, ...renderSlackBlocks(this.resolveMentions(text)) };\n try {\n await this.webClient.chat.update(payload);\n } catch (error) {\n recordSlackUpdate(this, { channel, ts }, text, payload, { error });\n throw error;\n }\n recordSlackUpdate(this, { channel, ts }, text, payload, { success: true });\n });\n }\n\n tryReserveStreamStart(): boolean {\n return this.streamStarts.tryReserve();\n }\n\n async startMessageStream(\n channel: string,\n text: string,\n threadTs?: string,\n recipientUserId?: string,\n ): Promise<string> {\n const [head, ...tail] = chunkStreamText(text);\n const ts = await slackRetry(async () => {\n const result = await this.webClient.apiCall(\"chat.startStream\", {\n channel,\n markdown_text: this.resolveMentions(head ?? \"\"),\n ...(threadTs ? { thread_ts: threadTs } : {}),\n ...(this.teamId ? { recipient_team_id: this.teamId } : {}),\n ...(recipientUserId ? { recipient_user_id: recipientUserId } : {}),\n });\n const streamTs = (result as { ts?: string }).ts;\n if (!streamTs) throw new Error(\"Slack chat.startStream did not return ts\");\n return streamTs;\n });\n for (const part of tail) await this.appendStreamChunk(channel, ts, part);\n return ts;\n }\n\n async appendMessageStream(channel: string, ts: string, text: string): Promise<void> {\n for (const part of chunkStreamText(text)) {\n await this.appendStreamChunk(channel, ts, part);\n }\n }\n\n private async appendStreamChunk(channel: string, ts: string, text: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.apiCall(\"chat.appendStream\", {\n channel,\n ts,\n markdown_text: this.resolveMentions(text),\n });\n });\n }\n\n async stopMessageStream(channel: string, ts: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.apiCall(\"chat.stopStream\", { channel, ts });\n });\n }\n\n async deleteMessage(channel: string, ts: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.chat.delete({ channel, ts });\n });\n }\n\n async setAssistantStatus(channel: string, threadTs: string, status: string): Promise<void> {\n const key = `${channel}:${threadTs}`;\n const previous = this.statusUpdates.get(key) ?? Promise.resolve();\n const update = previous\n .catch(() => undefined)\n .then(async () => {\n await this.statusClient.assistant.threads.setStatus({\n channel_id: channel,\n thread_ts: threadTs,\n status,\n });\n });\n this.statusUpdates.set(key, update);\n try {\n await update;\n } finally {\n if (this.statusUpdates.get(key) === update) this.statusUpdates.delete(key);\n }\n }\n\n async setAssistantSuggestedPrompts(\n channel: string,\n threadTs: string | undefined,\n prompts: SuggestedPrompt[],\n ): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.assistant.threads.setSuggestedPrompts({\n channel_id: channel,\n ...(threadTs ? { thread_ts: threadTs } : {}),\n prompts,\n });\n });\n }\n\n async setAssistantTitle(channel: string, threadTs: string, title: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.assistant.threads.setTitle({\n channel_id: channel,\n thread_ts: threadTs,\n title,\n });\n });\n }\n\n private assistantOps(): AssistantSurfaceOps {\n return {\n postInThread: (channel, threadTs, text) => this.postInThread(channel, threadTs, text),\n setSuggestedPrompts: (channel, threadTs, prompts) =>\n this.setAssistantSuggestedPrompts(channel, threadTs, prompts),\n setTitle: (channel, threadTs, title) => this.setAssistantTitle(channel, threadTs, title),\n channelName: (channelId) => this.channels.get(channelId)?.name,\n };\n }\n\n private handleAssistantThreadStarted({ event, ack }: { event: unknown; ack: () => void }): void {\n ack();\n const payload = event as { assistant_thread?: AssistantThreadPayload };\n if (!payload.assistant_thread) return;\n void handleAssistantThreadStarted(\n this.assistantOps(),\n this.assistantThreads,\n payload.assistant_thread,\n );\n }\n\n private handleAgentContextChangedEvent({\n event,\n ack,\n }: {\n event: unknown;\n ack: () => void;\n }): void {\n ack();\n const payload = event as {\n assistant_thread?: AssistantThreadPayload;\n channel_id?: string;\n channel?: string;\n context?: AgentContext;\n };\n if (payload.assistant_thread) {\n handleAgentContextChanged(this.assistantThreads, payload.assistant_thread);\n return;\n }\n const channelId = payload.channel_id ?? payload.channel;\n if (channelId) {\n handleAgentContextChanged(this.assistantThreads, {\n channel_id: channelId,\n context: payload.context,\n });\n }\n }\n\n async postInThread(\n channel: string,\n threadTs: string,\n text: string,\n identity?: SlackPersonaIdentity,\n ): Promise<string> {\n return identity\n ? this.postMessage(channel, text, threadTs, identity)\n : this.postMessage(channel, text, threadTs);\n }\n\n async postInThreadBlocks(\n channel: string,\n threadTs: string,\n text: string,\n blocks: object[],\n ): Promise<string> {\n return this.postMessageBlocks(channel, text, blocks, threadTs);\n }\n\n async uploadFile(\n channel: string,\n filePath: string,\n title?: string,\n threadTs?: string,\n ): Promise<void> {\n return slackRetry(async () => {\n const fileName = title || basename(filePath);\n const fileContent = readFileSync(filePath);\n await this.webClient.files.uploadV2({\n channel_id: channel,\n file: fileContent,\n filename: fileName,\n title: fileName,\n ...(threadTs ? { thread_ts: threadTs } : {}),\n } as Parameters<typeof this.webClient.files.uploadV2>[0]);\n });\n }\n\n logToFile(channel: string, entry: object): void {\n appendChannelLog(this.workspace.office(createOfficeAddress(\"slack\", channel)), entry);\n }\n\n logBotResponse(\n channel: string,\n text: string,\n ts: string,\n threadTs?: string,\n slackBlocks?: object[],\n ): void {\n appendBotResponseLog(\n this.workspace.office(createOfficeAddress(\"slack\", channel)),\n text,\n ts,\n threadTs,\n {\n platform: \"slack\",\n ...(slackBlocks ? { slackBlocks } : {}),\n },\n );\n }\n\n ownsBlockKitMessage(channel: string, ts: string, threadTs?: string): boolean {\n const content = readTextFileIfExists(join(this.conversationDir(channel), \"log.jsonl\"));\n if (content === undefined) return false;\n for (const line of content.trim().split(\"\\n\").toReversed()) {\n try {\n const entry: unknown = JSON.parse(line);\n if (!isRecord(entry) || entry.ts !== ts) continue;\n return (\n entry.isMessagingBot === true &&\n entry.platform === \"slack\" &&\n Array.isArray(entry.slackBlocks) &&\n entry.threadTs === threadTs\n );\n } catch {\n continue;\n }\n }\n return false;\n }\n\n getMessagingInfo(): MessagingInfo {\n return {\n name: \"slack\",\n ...(this.teamId ? { workspaceId: this.teamId } : {}),\n trustModel: \"membership\",\n formattingGuide:\n \"## Slack Formatting\\nWrite standard Markdown/GFM: **bold**, _italic_, ~~strike~~, `code`, fenced code blocks, [links](url), lists, and pipe tables (rendered as native Slack tables).\\nDo NOT use Slack mrkdwn syntax like *single-asterisk bold* or <url|label> links.\",\n channels: this.getAllChannels().map((c) => ({ id: c.id, name: c.name })),\n users: this.getAllUsers().map((u) => ({\n id: u.id,\n userName: u.userName,\n displayName: u.displayName,\n })),\n diagnostics: {\n showUsageSummary: true,\n },\n };\n }\n\n enqueueEvent(event: ConversationEvent): boolean {\n if (this.stopped) return false;\n const conversationId = event.address.conversationId;\n const queue = this.getQueue(conversationId);\n if (queue.size() >= 5) {\n log.logWarning(\n `Event queue full for ${conversationId}, discarding: ${event.text.substring(0, 50)}`,\n );\n return false;\n }\n log.logInfo(`Enqueueing event for ${conversationId}: ${event.text.substring(0, 50)}`);\n return queue.enqueue(async () => {\n let anchorTs: string | undefined;\n if (!event.thread_ts) {\n try {\n anchorTs = await this.postMessage(conversationId, SLACK_EVENT_ANCHOR_TEXT);\n } catch (err) {\n log.logWarning(\n `Failed to post Slack event anchor for ${conversationId}`,\n err instanceof Error ? err.message : String(err),\n );\n reportUserFacingError(err, {\n domain: \"events\",\n surface: \"event_delivery\",\n operation: \"slack_anchor_post\",\n severity: \"error\",\n platform: \"slack\",\n context: {\n conversationId,\n conversationKind: event.conversationKind,\n eventTs: event.ts,\n textLength: event.text.length,\n },\n });\n throw err;\n }\n }\n const eventPlan = planSlackEventAnchorRun(event, anchorTs);\n const eventForRun = eventPlan.event;\n if (eventPlan.initialMessageTs && eventForRun.sessionKey) {\n registerThreadSession({\n conversationDir: this.conversationDir(conversationId),\n sessionKey: eventForRun.sessionKey,\n });\n }\n\n const runQueueKey = planSlackAdapterSession(eventForRun, {\n initialMessageTs: eventPlan.initialMessageTs,\n }).sessionKey;\n const run = async () => {\n const slackEvent = createConversationEvent({\n platform: \"slack\",\n address: eventForRun.address,\n type: eventForRun.type as SlackEvent[\"type\"],\n conversationId,\n conversationKind: eventForRun.conversationKind,\n channel: conversationId,\n ts: eventForRun.ts,\n thread_ts: eventForRun.thread_ts,\n user: eventForRun.user,\n text: eventForRun.text,\n attachments: eventForRun.attachments,\n sessionKey: eventForRun.sessionKey,\n }) as SlackEvent;\n const context = createSlackAdapters(slackEvent, this, {\n initialMessageTs: eventPlan.initialMessageTs,\n replyMode: this.resolveReplyMode(eventForRun.address),\n });\n return this.handler.handleEvent(eventForRun, this, context);\n };\n const runQueue = this.getQueue(runQueueKey);\n if (!runQueue.enqueue(run)) {\n await runQueue.close();\n await run();\n }\n });\n }\n\n private getQueue(channelId: string): MessagingEventQueue {\n let queue = this.queues.get(channelId);\n if (!queue) {\n queue = new MessagingEventQueue(\"Slack\");\n if (this.stopped) void queue.close();\n this.queues.set(channelId, queue);\n }\n return queue;\n }\n\n private resolveQueueKey(conversationId: string, sessionKey: string): string {\n if (!isSlackThreadSessionKey(sessionKey)) return sessionKey;\n if (this.handler.isRunning(createOfficeAddress(\"slack\", conversationId), sessionKey)) {\n return sessionKey;\n }\n return this.hasKnownThreadSession(conversationId, sessionKey) ? sessionKey : conversationId;\n }\n\n private isTaskThread(channel: string, root: string): boolean {\n return readTaskRoots(this.conversationDir(channel)).has(root);\n }\n\n private hasRunningTaskThread(channel: string): boolean {\n const roots = readTaskRoots(this.conversationDir(channel));\n if (!roots.size) return false;\n return this.handler\n .getRunningSessions()\n .some(\n (s) =>\n s.address.platform === \"slack\" &&\n s.address.conversationId === channel &&\n [...roots.keys()].some((root) => resolveSlackSessionKey(channel, root) === s.sessionKey),\n );\n }\n\n private hasKnownThreadSession(conversationId: string, sessionKey: string): boolean {\n return hasMaterializedChatSession({\n conversationDir: this.conversationDir(conversationId),\n sessionKey,\n });\n }\n\n private channelKindFor(channelId: string): PlatformChannelKind | undefined {\n if (channelId.startsWith(\"D\")) return \"im\";\n const channel = this.channels.get(channelId);\n if (!channel) return undefined;\n if (channel.name.startsWith(\"DM:\")) return \"im\";\n if (channel.isExternallyShared) return \"external\";\n if (channel.isPrivate === true) return \"private_channel\";\n if (channel.isPrivate === false) return \"public_channel\";\n return undefined;\n }\n\n private backfillChannelKinds(): void {\n let recorded = 0;\n for (const record of listRegisteredOffices(this.workspace.stateDir)) {\n if (record.platform !== \"slack\") continue;\n const kind = this.channelKindFor(record.conversationId);\n if (!kind) continue;\n try {\n const office = this.workspace.office(record);\n if (readPlatformChannelKind(office) === kind) continue;\n recordPlatformChannelKind(office, kind);\n recorded++;\n } catch (err) {\n log.logWarning(\"Failed to backfill Slack channel kind\", String(err));\n }\n }\n if (recorded > 0) log.logInfo(`Recorded channel kind for ${recorded} Slack offices`);\n }\n\n private processSlackMessageIntake(options: {\n event: SlackEvent;\n attachmentsPromise: Promise<Attachment[]>;\n queueKey: string;\n addressed: boolean;\n magicWordAddressed?: boolean;\n }): Promise<void> {\n const kind = this.channelKindFor(options.event.address.conversationId);\n if (kind) {\n try {\n recordPlatformChannelKind(this.workspace.office(options.event.address), kind);\n } catch (err) {\n log.logWarning(\"Failed to record Slack channel kind\", String(err));\n }\n }\n const absorbAttachmentFailure = () => {\n void options.attachmentsPromise.catch((err) => {\n log.logWarning(\"Failed to log Slack message\", String(err));\n });\n };\n return processMessageIntake({\n eventBase: options.event as unknown as ConversationEvent,\n addressed: options.addressed,\n magicWord: {\n addressed: options.magicWordAddressed ?? options.addressed,\n scopeFallback: \"top-level\",\n },\n busyPolicy: \"queue\",\n logEntryBase: {},\n processAttachments: () => options.attachmentsPromise,\n queueKey: options.queueKey,\n enqueue: (queueKey, work) => this.getQueue(queueKey).enqueue(work),\n handler: this.handler,\n bot: this,\n createContext: (event) => this.createContext(event as SlackEvent),\n deferAttachmentsUntilRun: true,\n }).then(\n (outcome) => {\n if (outcome !== \"enqueued\") absorbAttachmentFailure();\n },\n (err) => {\n log.logWarning(\"Slack message intake failed\", String(err));\n absorbAttachmentFailure();\n },\n );\n }\n\n private appendRunningTasks(blocks: object[]): void {\n const runningSessions = this.handler.getRunningSessions();\n blocks.push(\n { type: \"divider\" },\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: `Running Tasks (${runningSessions.length})`,\n emoji: true,\n },\n },\n );\n if (runningSessions.length === 0) {\n blocks.push({\n type: \"context\",\n elements: [{ type: \"mrkdwn\", text: \"_No tasks running right now._\" }],\n });\n return;\n }\n\n const stuckThresholdMs = 10 * 60 * 1000;\n for (const session of runningSessions) {\n const channelId = conversationIdOf(session.sessionKey);\n const channelName = this.channels.get(channelId)?.name;\n const elapsed = Math.floor((Date.now() - session.startedAt) / 60000);\n const elapsedStr = elapsed < 1 ? \"<1 min\" : `${elapsed} min`;\n const lastActivity = session.lastActivityAt ? Date.now() - session.lastActivityAt : 0;\n const isStuck = lastActivity > stuckThresholdMs;\n let statusLine = `${isStuck ? \"_stuck_\" : \"_running_\"} · ${elapsedStr}`;\n if (session.currentTool) statusLine += ` · ${session.currentTool}`;\n if (isStuck) statusLine += ` · idle ${Math.floor(lastActivity / 60000)}m`;\n blocks.push({\n type: \"context\",\n elements: [\n {\n type: \"mrkdwn\",\n text: `*${channelName ? `#${channelName}` : channelId}* · ${statusLine}`,\n },\n ],\n });\n if (isStuck) {\n blocks.push({\n type: \"context\",\n elements: [\n { type: \"mrkdwn\", text: \" \" },\n {\n type: \"button\",\n text: { type: \"plain_text\", text: \"Force Stop\", emoji: true },\n action_id: `force_stop_${session.sessionKey.replace(/:/g, \"_\")}`,\n value: session.sessionKey,\n style: \"danger\",\n },\n ],\n });\n }\n }\n }\n\n private appendScheduledJobs(blocks: object[], dmChannelId: string | undefined): void {\n const periodicEvents =\n dmChannelId && this.eventScheduler\n ? this.eventScheduler.periodicEvents(createOfficeAddress(\"slack\", dmChannelId))\n : [];\n blocks.push(\n { type: \"divider\" },\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: `Scheduled Jobs (${periodicEvents.length})`,\n emoji: true,\n },\n },\n );\n if (periodicEvents.length === 0) {\n blocks.push({\n type: \"context\",\n elements: [{ type: \"mrkdwn\", text: \"_No scheduled jobs._\" }],\n });\n return;\n }\n\n for (const event of periodicEvents) {\n const channel =\n event.platform === \"slack\" ? this.channels.get(event.conversationId) : undefined;\n const channelId = channel ? `#${channel.name}` : event.conversationId;\n const channelLabel = `${event.platform}:${channelId}`;\n const nextRun = event.nextRun\n ? new Date(event.nextRun).toLocaleString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })\n : \"—\";\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `*${event.text}*\\n└ \\`${event.schedule}\\` · ${channelLabel} · Next: ${nextRun}`,\n },\n });\n }\n }\n\n private buildHomeView(dmChannelId: string | undefined): { type: \"home\"; blocks: KnownBlock[] } {\n const blocks: object[] = [\n {\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `*${PRODUCT_NAME}*\\nStart a new task or check on running work.`,\n },\n accessory: {\n type: \"image\",\n image_url: \"https://media1.tenor.com/m/lfDATg4Bhc0AAAAC/happy-cat.gif\",\n alt_text: PRODUCT_NAME,\n },\n },\n ];\n this.appendRunningTasks(blocks);\n this.appendScheduledJobs(blocks, dmChannelId);\n blocks.push(\n { type: \"divider\" },\n {\n type: \"context\",\n elements: [\n { type: \"mrkdwn\", text: \"💡 @mention in a channel or send a DM to start a new task\" },\n ],\n },\n );\n return { type: \"home\", blocks: blocks as KnownBlock[] };\n }\n\n private createCommandAdapters(input: CommandAdapterInput): ConversationContext {\n const { conversationId, userId, userName, text, ts, ...options } = input;\n const message = createConversationMessage({\n platform: \"slack\",\n conversationId,\n id: ts,\n sessionKey: options.sessionKey ?? conversationId,\n conversationKind: options.ephemeralChannelId ? \"shared\" : \"direct\",\n userId,\n userName,\n text,\n attachments: [],\n });\n\n const respond = async (responseText: string, blocks?: object[]) => {\n if (options.ephemeralChannelId) {\n await this.postEphemeral(\n options.ephemeralChannelId,\n userId,\n responseText,\n options.threadTs,\n blocks,\n );\n return;\n }\n const messageTs = blocks\n ? await this.postMessageBlocks(conversationId, responseText, blocks)\n : await this.postMessage(conversationId, responseText);\n this.logBotResponse(conversationId, responseText, messageTs);\n };\n\n const responder: ConversationResponder = {\n respond,\n replaceResponse: (responseText) => respond(responseText),\n respondDiagnostic: async (\n responseText: string,\n responseOptions?: { style?: \"muted\" | \"error\" },\n ) => {\n if (responseOptions?.style === \"muted\") {\n await respond(responseText, [buildMrkdwnContextBlock(responseText)]);\n return;\n }\n await respond(responseOptions?.style === \"error\" ? `_${responseText}_` : responseText);\n },\n respondToolResult: async (result: ChatToolResult) => {\n const duration = (result.durationMs / 1000).toFixed(1);\n await respond(\n `${result.isError ? \"Error\" : \"Done\"} ${result.toolName} (${duration}s)\\n${result.result}`,\n );\n },\n setTyping: async () => {},\n setWorking: async () => {},\n uploadFile: async (filePath: string, title?: string) => {\n await this.uploadFile(conversationId, filePath, title);\n },\n deleteResponse: async () => {},\n };\n\n return {\n address: message.address,\n message,\n responder,\n platform: this.getMessagingInfo(),\n };\n }\n\n private buildSlashCommandEvent(\n payload: {\n command: string;\n text?: string;\n channel_id: string;\n user_id: string;\n user_name?: string;\n thread_ts?: string;\n },\n options: { type?: ConversationEvent[\"type\"]; includeText?: boolean; thread?: boolean } = {},\n ): { event: ConversationEvent; context: ConversationContext } {\n const conversationId = payload.channel_id;\n const isDirectMessage = conversationId.startsWith(\"D\");\n const createdAt = new Date();\n const eventTs = (createdAt.getTime() / 1000).toFixed(6);\n const userName = payload.user_name ?? this.getUser(payload.user_id)?.userName;\n const commandSuffix = options.includeText ? payload.text?.trim() : undefined;\n const commandText = commandSuffix ? `${payload.command} ${commandSuffix}` : payload.command;\n const threadTs = options.thread ? payload.thread_ts : undefined;\n const sessionKey = options.thread\n ? resolveSlackSessionKey(conversationId, threadTs)\n : conversationId;\n\n this.logToFile(conversationId, {\n date: createdAt.toISOString(),\n ts: eventTs,\n user: payload.user_id,\n userName,\n text: commandText,\n attachments: [],\n isMessagingBot: false,\n ...(threadTs ? { threadTs } : {}),\n });\n\n const event = createConversationEvent({\n platform: \"slack\",\n conversationId,\n type: options.type ?? (isDirectMessage ? \"dm\" : \"mention\"),\n conversationKind: isDirectMessage ? \"direct\" : \"shared\",\n ts: eventTs,\n user: payload.user_id,\n text: commandText,\n attachments: [],\n ...(threadTs ? { thread_ts: threadTs } : {}),\n sessionKey,\n });\n\n const context = this.createCommandAdapters({\n conversationId,\n userId: payload.user_id,\n userName,\n text: commandText,\n ts: eventTs,\n ...(isDirectMessage\n ? { threadTs, sessionKey }\n : { ephemeralChannelId: conversationId, threadTs, sessionKey }),\n });\n\n return { event, context };\n }\n\n private async routeSlashCommand(\n route: SlackSlashRoute,\n payload: {\n command: string;\n text?: string;\n channel_id: string;\n user_id: string;\n user_name?: string;\n thread_ts?: string;\n },\n ): Promise<void> {\n const { event, context } = this.buildSlashCommandEvent(payload, {\n includeText: route.includeText,\n thread: route.thread,\n ...(route.privateCommand\n ? {\n type: payload.channel_id.startsWith(\"D\")\n ? (\"dm\" as const)\n : (\"private_command\" as const),\n }\n : {}),\n });\n await this.handler.handleEvent(event, this, context);\n }\n\n private setupEventHandlers(): void {\n this.socketClient.on(\"disconnect\", (err: unknown) => {\n log.logWarning(\"Slack socket disconnect\", err ? String(err) : \"\");\n });\n this.socketClient.on(\"error\", (err: unknown) => {\n log.logWarning(\"Slack socket error\", err ? String(err) : \"\");\n });\n this.socketClient.on(\"unable_to_socket_mode_start\", (err: unknown) => {\n log.logWarning(\"Slack socket unable_to_start\", err ? String(err) : \"\");\n });\n\n this.socketClient.on(\"app_mention\", (payload) => {\n void this.intake.run(() => this.handleAppMention(payload));\n });\n this.socketClient.on(\"message\", (payload) => {\n void this.intake.run(() => this.handleMessageEvent(payload));\n });\n this.socketClient.on(\"slash_commands\", (payload) => {\n void this.intake.run(() => this.handleSlashCommand(payload));\n });\n this.socketClient.on(\"app_home_opened\", (payload) => {\n void this.intake.run(() => this.handleAppHomeOpened(payload));\n });\n this.socketClient.on(\"assistant_thread_started\", (payload) => {\n void this.intake.run(() => this.handleAssistantThreadStarted(payload));\n });\n this.socketClient.on(\"assistant_thread_context_changed\", (payload) => {\n void this.intake.run(() => this.handleAgentContextChangedEvent(payload));\n });\n this.socketClient.on(\"app_context_changed\", (payload) => {\n void this.intake.run(() => this.handleAgentContextChangedEvent(payload));\n });\n this.socketClient.on(\"block_actions\", (payload) => {\n void this.intake.run(() => this.handleBlockAction(payload));\n });\n this.socketClient.on(\"interactive\", (payload) => {\n void this.intake.run(() =>\n this.handleBlockAction(payload as { body: SlackBlockActionBody; ack: () => void }),\n );\n });\n }\n\n private async handleAppMention({\n event,\n ack,\n }: {\n event: unknown;\n ack: () => void;\n }): Promise<void> {\n const e = event as {\n text: string;\n channel: string;\n user: string;\n ts: string;\n thread_ts?: string;\n files?: Array<{ name: string; url_private_download?: string; url_private?: string }>;\n };\n\n if (e.channel.startsWith(\"D\")) {\n ack();\n return;\n }\n\n const sessionKey = resolveSlackSessionKey(e.channel, e.thread_ts);\n\n const mentionText = this.stripOwnMention(e.text);\n const slackEvent = createConversationEvent({\n platform: \"slack\",\n conversationId: e.channel,\n type: \"mention\" as const,\n conversationKind: \"shared\",\n ts: e.ts,\n thread_ts: e.thread_ts,\n user: e.user,\n text: mentionText || \"Please respond to the recent conversation context.\",\n sessionKey,\n channel: e.channel,\n files: e.files,\n }) as SlackEvent;\n\n const attachmentsPromise = this.logUserMessage(slackEvent);\n\n if (this.startupTs && e.ts < this.startupTs) {\n log.logInfo(\n `[${e.channel}] Logged old message (pre-startup), not triggering: ${slackEvent.text.substring(0, 30)}`,\n );\n void attachmentsPromise.catch((err) => {\n log.logWarning(\"Failed to log Slack message\", String(err));\n });\n ack();\n return;\n }\n\n const intake = this.processSlackMessageIntake({\n event: slackEvent,\n attachmentsPromise,\n queueKey: this.resolveQueueKey(e.channel, sessionKey),\n addressed: true,\n });\n\n ack();\n await intake;\n }\n\n private admitHumanMessage(\n event: SlackIncomingMessage,\n ack: () => void,\n ): event is SlackIncomingMessage & { user: string } {\n const hasSlackContent = hasMessageContent(event);\n const isOwnMessage =\n event.user === this.botUserId || (!!this.botId && event.bot_id === this.botId);\n if (isOwnMessage) {\n ack();\n return false;\n }\n\n const authorIsKnownHuman = !!event.user && this.users.get(event.user)?.isBot === false;\n const isExternalMessage =\n event.subtype === \"bot_message\" || (!!event.bot_id && !authorIsKnownHuman);\n if (isExternalMessage) {\n const supportedSubtype = BOT_MESSAGE_SUBTYPES.has(event.subtype);\n if (supportedSubtype && hasSlackContent) {\n void this.logExternalMessagingBotMessage(event).catch((err) => {\n log.logWarning(\"Failed to log Slack bot message\", String(err));\n });\n }\n ack();\n return false;\n }\n\n const isSupportedUserMessage =\n !!event.user && USER_MESSAGE_SUBTYPES.has(event.subtype) && hasSlackContent;\n if (isSupportedUserMessage) return true;\n ack();\n return false;\n }\n\n private async deliverTaskUpdate(\n event: SlackEvent,\n attachmentsPromise: Promise<Attachment[]>,\n ): Promise<boolean> {\n if (matchMagicWord(event.text) === \"stop\" || event.text.startsWith(\"/\")) return false;\n event.attachments = await attachmentsPromise;\n const context = this.createContext(event);\n const post = (text: string) =>\n event.thread_ts\n ? this.postInThread(event.channel, event.thread_ts, text)\n : this.postMessage(event.channel, text);\n try {\n const tasks = await context.responder.getTaskStatus!(\n event.thread_ts ? event.sessionKey : undefined,\n );\n if (!tasks.length) return false;\n const active = tasks.filter((t) => t.status === \"running\" || t.status === \"stopping\");\n const user = this.users.get(event.user);\n const intent: TaskIntent = event.attachments?.length\n ? event.thread_ts\n ? \"steer\"\n : \"request\"\n : await classifyTaskIntent(\n buildTaskIntentState(this.conversationDir(event.channel), event, {\n speaker: user?.displayName ?? user?.userName,\n tasks,\n resolveName: (id) => this.users.get(id)?.displayName ?? this.users.get(id)?.userName,\n botUserId: this.botUserId,\n }),\n event.text,\n { conversationId: event.channel, inTaskThread: !!event.thread_ts },\n );\n if (intent === \"status\") {\n const selection = event.thread_ts ? tasks : active.length ? active : tasks.slice(0, 1);\n const text =\n selection.length > 1\n ? \"目前有多個任務在處理,請到你想查詢的任務對話串詢問,避免弄錯。\"\n : formatTaskStatus(selection);\n const ts = await post(text);\n this.logBotResponse(event.channel, text, ts, event.thread_ts);\n return true;\n }\n if (intent === \"steer\") {\n const target = event.thread_ts\n ? context.message\n : active.length === 1\n ? {\n ...context.message,\n sessionKey: active[0]!.sessionKey,\n threadTs: active[0]!.threadTs,\n }\n : undefined;\n if (target && (await this.handler.steer?.(target))) {\n const text = \"收到補充,會在下一個處理步驟納入;目前的操作不會立即中斷。\";\n const ts = await post(text);\n this.logBotResponse(event.channel, text, ts, event.thread_ts);\n return true;\n }\n }\n } catch (error) {\n await post(error instanceof Error ? error.message : \"Could not deliver task update.\");\n return true;\n }\n return false;\n }\n\n private async evaluateJevAddressed(event: SlackEvent): Promise<boolean> {\n if (!event.text.trim() || matchMagicWord(event.text) === \"stop\") return false;\n\n try {\n const user = this.users.get(event.user);\n const state = buildAutoReplyState(this.conversationDir(event.channel), event, {\n speaker: user?.displayName ?? user?.userName,\n resolveName: (id) => this.users.get(id)?.displayName ?? this.users.get(id)?.userName,\n botUserId: this.botUserId,\n });\n const result = await evaluateWithJev(\n state,\n { addressed: { type: \"boolean\", instructions: JEV_ADDRESSED_INSTRUCTIONS } },\n { caller: \"slack_auto_reply\" },\n );\n const probability = result.answers.addressed.probability;\n log.logInfo(\n `[${event.channel}] jev auto-reply: probability=${probability.toFixed(2)} addressed=${probability > 0.5} text=\"${event.text.slice(0, 80)}\"`,\n );\n return probability > 0.5;\n } catch (err) {\n if (err instanceof JevNotConfiguredError) {\n log.logWarning(\n \"Slack auto-reply jev mode requires OPENROUTER_API_KEY; treating message as unaddressed\",\n String(err),\n );\n return false;\n }\n reportUserFacingError(err, {\n domain: \"chat_platform\",\n surface: \"slack_auto_reply_jev\",\n operation: \"evaluate\",\n severity: \"warning\",\n context: { conversationId: event.address.conversationId },\n });\n return false;\n }\n }\n\n private async handleMessageEvent({\n event,\n ack,\n }: {\n event: unknown;\n ack: () => void;\n }): Promise<void> {\n const e = event as SlackIncomingMessage;\n if (!this.admitHumanMessage(e, ack)) return;\n\n const isDM = e.channel_type === \"im\" || e.channel.startsWith(\"D\");\n const conversationKind: ConversationKind = isDM ? \"direct\" : \"shared\";\n const isMessagingBotMention = e.text?.includes(`<@${this.botUserId}>`);\n\n if (!isDM && isMessagingBotMention) {\n ack();\n return;\n }\n\n const sessionKey = isDM ? resolveSlackSessionKey(e.channel, e.thread_ts) : undefined;\n\n if (isDM && e.thread_ts && e.text) {\n void titleAssistantThread(\n this.assistantOps(),\n this.assistantThreads,\n e.channel,\n e.thread_ts,\n this.stripOwnMention(e.text),\n );\n }\n\n const slackEvent = createConversationEvent({\n platform: \"slack\",\n conversationId: e.channel,\n type: (isDM ? \"dm\" : \"mention\") as SlackEvent[\"type\"],\n conversationKind,\n ts: e.ts,\n thread_ts: e.thread_ts,\n user: e.user,\n text: this.stripOwnMention(e.text),\n sessionKey,\n channel: e.channel,\n files: e.files,\n }) as SlackEvent;\n\n const attachmentsPromise = this.logUserMessage(slackEvent);\n\n if (this.startupTs && e.ts < this.startupTs) {\n log.logInfo(\n `[${e.channel}] Skipping old message (pre-startup): ${slackEvent.text.substring(0, 30)}`,\n );\n void attachmentsPromise.catch((err) => {\n log.logWarning(\"Failed to log Slack message\", String(err));\n });\n ack();\n return;\n }\n\n const activeSessionKey =\n slackEvent.sessionKey ?? resolveSlackSessionKey(e.channel, e.thread_ts);\n slackEvent.sessionKey = activeSessionKey;\n const taskControl =\n isDM &&\n (e.thread_ts\n ? this.isTaskThread(e.channel, e.thread_ts)\n : this.hasRunningTaskThread(e.channel) || isTaskStatusQuestion(slackEvent.text));\n if (taskControl) {\n ack();\n if (await this.deliverTaskUpdate(slackEvent, attachmentsPromise)) return;\n }\n const autoReplyMode = isDM\n ? \"off\"\n : slackConversationAutoReplyMode(this.workspace.office(slackEvent.address));\n const autoReply =\n autoReplyMode === \"on\"\n ? true\n : autoReplyMode === \"jev\"\n ? await this.evaluateJevAddressed(slackEvent)\n : false;\n const intake = this.processSlackMessageIntake({\n event: slackEvent,\n attachmentsPromise,\n queueKey: this.resolveQueueKey(e.channel, activeSessionKey),\n addressed: isDM || autoReply,\n magicWordAddressed: isDM,\n });\n\n if (!taskControl) ack();\n await intake;\n }\n\n private async handleSlashCommand({\n body,\n ack,\n }: {\n body: unknown;\n ack: () => Promise<void>;\n }): Promise<void> {\n const payload = body as {\n command?: string;\n text?: string;\n channel_id?: string;\n user_id?: string;\n user_name?: string;\n thread_ts?: string;\n };\n\n await ack();\n\n if (!payload.command || !payload.channel_id || !payload.user_id) {\n return;\n }\n\n const { command, text, channel_id, user_id, user_name, thread_ts } = payload;\n const entry = COMMAND_MANIFEST.find((candidate) => candidate.slackCommand === command);\n if (!entry) return;\n\n if (!entry.slackRoute) return;\n try {\n await this.routeSlashCommand(entry.slackRoute, {\n command,\n text,\n channel_id,\n user_id,\n user_name,\n thread_ts,\n });\n } catch (err) {\n log.logWarning(\"Slack slash command error\", err instanceof Error ? err.message : String(err));\n }\n }\n\n private handleAppHomeOpened({ event, ack }: { event: unknown; ack: () => void }): void {\n const e = event as { user: string; tab: string; channel?: string; context?: AgentContext };\n ack();\n\n if (e.tab === \"messages\") {\n if (e.channel) {\n void handleAgentDmOpened(this.assistantOps(), this.assistantThreads, e.channel, e.context);\n }\n return;\n }\n if (e.tab !== \"home\") return;\n\n this.webClient.views\n .publish({\n user_id: e.user,\n view: this.buildHomeView(e.channel),\n })\n .catch((err) => {\n log.logWarning(`Failed to publish App Home view`, String(err));\n });\n }\n\n private async handleBlockAction({\n body,\n ack,\n }: {\n body: SlackBlockActionBody;\n ack: () => void;\n }): Promise<void> {\n const action = body.actions?.[0];\n if (!action) {\n ack();\n return;\n }\n\n if (!action.action_id?.startsWith(\"force_stop_\")) {\n ack();\n this.handleSlackInteraction(body, action);\n return;\n }\n\n ack();\n const sessionKey =\n action.value ?? action.action_id.replace(\"force_stop_\", \"\").replace(/_/g, \":\");\n const userId = body.user?.id;\n const channelId = body.container?.channel_id || conversationIdOf(sessionKey);\n\n log.logInfo(`[Force Stop] User ${userId} requested force stop for ${sessionKey}`);\n\n this.handler.forceStop(createOfficeAddress(\"slack\", channelId), sessionKey);\n\n await this.postMessage(channelId, formatForceStopped(\"slack\", userId ?? \"unknown\"));\n\n if (userId) {\n this.openDirectConversation(userId)\n .then((dmChannelId) =>\n this.webClient.views.publish({\n user_id: userId,\n view: this.buildHomeView(dmChannelId),\n }),\n )\n .catch((err) => {\n log.logWarning(`Failed to refresh App Home view`, String(err));\n });\n }\n }\n\n private handleSlackInteraction(body: SlackBlockActionBody, action: SlackBlockAction): void {\n const container = body.container ?? {};\n const channelId = container.channel_id;\n const userId = body.user?.id;\n if (!channelId || !userId) return;\n\n const selectedOption = action.selected_option;\n const selectedOptions = Array.isArray(action.selected_options)\n ? action.selected_options\n : undefined;\n const threadTs = container.thread_ts;\n const sessionKey = resolveSlackSessionKey(channelId, threadTs);\n\n const selectedText = selectedOption?.text?.text ?? selectedOption?.value;\n const selectedTexts = selectedOptions?.map((option) => option.text?.text ?? option.value);\n const valueText = selectedTexts?.length\n ? selectedTexts.join(\", \")\n : (selectedText ?? action.value ?? action.action_id);\n const text = `[Slack action] ${action.action_id}: ${valueText}`;\n const ts = `action:${Date.now()}`;\n\n this.logToFile(channelId, {\n date: new Date().toISOString(),\n ts,\n ...(threadTs ? { threadTs } : {}),\n user: userId,\n userName: body.user?.username ?? body.user?.name,\n text,\n attachments: [],\n isMessagingBot: false,\n platform: \"slack\",\n slackInteraction: {\n type: \"block_actions\",\n actionId: action.action_id,\n blockId: action.block_id,\n actionType: action.type,\n value: action.value,\n selectedOption: selectedOption\n ? { text: selectedOption.text?.text, value: selectedOption.value }\n : undefined,\n selectedOptions: selectedOptions?.map((option) => ({\n text: option.text?.text,\n value: option.value,\n })),\n messageTs: container.message_ts,\n },\n });\n\n const event = createConversationEvent({\n platform: \"slack\",\n conversationId: channelId,\n type: \"slack_action\",\n conversationKind: channelId.startsWith(\"D\") ? \"direct\" : \"shared\",\n ts,\n user: userId,\n text,\n attachments: [],\n ...(threadTs ? { thread_ts: threadTs } : {}),\n sessionKey,\n });\n\n this.getQueue(this.resolveQueueKey(channelId, sessionKey)).enqueue(async () => {\n const slackEvent: SlackEvent = {\n ...createConversationEvent({\n platform: \"slack\",\n conversationId: channelId,\n type: (event.conversationKind === \"direct\" ? \"dm\" : \"mention\") as SlackEvent[\"type\"],\n conversationKind: event.conversationKind,\n ts,\n thread_ts: threadTs,\n user: userId,\n text,\n attachments: [],\n sessionKey,\n }),\n channel: channelId,\n attachments: [],\n };\n return this.handler.handleEvent(event, this, this.createContext(slackEvent));\n });\n }\n\n private async processAttachments(\n channelId: string,\n files: Array<{ name?: string; url_private_download?: string; url_private?: string }>,\n timestamp: string,\n ): Promise<Attachment[]> {\n const items = [];\n for (const file of files) {\n const url = file.url_private_download || file.url_private;\n if (!url) continue;\n if (!file.name) {\n throw new Error(`Attachment missing name for URL: ${url}`);\n }\n items.push({\n name: file.name,\n timestampMs: Math.floor(parseFloat(timestamp) * 1000),\n download: (destPath: string) => this.downloadSlackFile(url, destPath),\n });\n }\n\n const office = this.workspace.office(createOfficeAddress(\"slack\", channelId));\n const { saved, failed } = await saveIncomingAttachments(office, items);\n const firstFailure = failed[0];\n if (firstFailure) {\n const { name, error } = firstFailure;\n const errorMsg = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to download attachment ${name}: ${errorMsg}`, { cause: error });\n }\n return saved;\n }\n\n private async downloadSlackFile(url: string, destPath: string): Promise<void> {\n await withRetry(\n async () => {\n const response = await fetch(url, {\n headers: { Authorization: `Bearer ${this.botToken}` },\n });\n if (!response.ok) {\n throw new AttachmentDownloadHttpError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n );\n }\n const buffer = await response.arrayBuffer();\n await writeFile(destPath, Buffer.from(buffer));\n },\n { maxAttempts: 3, baseDelayMs: 250, isRateLimited: isRetryableAttachmentDownloadError },\n );\n }\n\n private async logUserMessage(event: SlackEvent): Promise<Attachment[]> {\n const user = this.users.get(event.user);\n let attachments: Attachment[] = [];\n let attachmentError: unknown;\n if (event.files) {\n try {\n attachments = await this.processAttachments(event.channel, event.files, event.ts);\n } catch (err) {\n attachmentError = err;\n }\n }\n this.logToFile(event.channel, {\n date: new Date(parseFloat(event.ts) * 1000).toISOString(),\n ts: event.ts,\n threadTs: event.thread_ts,\n user: event.user,\n userName: user?.userName,\n displayName: user?.displayName,\n text: event.text,\n attachments,\n isMessagingBot: false,\n });\n if (attachmentError) throw attachmentError;\n return attachments;\n }\n\n private async logExternalMessagingBotMessage(event: {\n channel: string;\n ts: string;\n thread_ts?: string;\n text?: string;\n subtype?: string;\n bot_id?: string;\n app_id?: string;\n username?: string;\n bot_profile?: { app_id?: string; name?: string; real_name?: string };\n blocks?: unknown[];\n attachments?: unknown[];\n files?: Array<{ name: string; url_private_download?: string; url_private?: string }>;\n }): Promise<Attachment[]> {\n const attachments = event.files\n ? await this.processAttachments(event.channel, event.files, event.ts)\n : [];\n const botName =\n event.username ?? event.bot_profile?.name ?? event.bot_profile?.real_name ?? event.bot_id;\n this.logToFile(event.channel, {\n date: new Date(parseFloat(event.ts) * 1000).toISOString(),\n ts: event.ts,\n threadTs: event.thread_ts,\n user: event.bot_id ? `bot:${event.bot_id}` : \"external-bot\",\n userName: botName,\n displayName: botName,\n text: buildSlackAppMessageText(event),\n attachments,\n isMessagingBot: true,\n botId: event.bot_id,\n appId: event.app_id ?? event.bot_profile?.app_id,\n subtype: event.subtype,\n });\n return attachments;\n }\n\n private async getExistingTimestamps(channelId: string): Promise<Set<string>> {\n const logPath = join(this.conversationDir(channelId), \"log.jsonl\");\n const timestamps = new Set<string>();\n if (!existsSync(logPath)) return timestamps;\n\n const content = await readFile(logPath, \"utf-8\");\n const lines = content.trim().split(\"\\n\").filter(Boolean);\n for (let i = 0; i < lines.length; i++) {\n try {\n const entry = JSON.parse(lines[i] ?? \"\");\n if (entry.ts) timestamps.add(entry.ts);\n } catch (err) {\n log.logWarning(\n `Skipping malformed log entry at ${logPath}:${i + 1}`,\n err instanceof Error ? err.message : String(err),\n );\n }\n }\n return timestamps;\n }\n\n private isBackfillableMessage(message: SlackHistoryMessage): boolean {\n if (message.user === this.botUserId) return true;\n if (hasBotIdentity(message)) {\n if (this.botId && message.bot_id === this.botId) return false;\n return BOT_MESSAGE_SUBTYPES.has(message.subtype) && hasMessageContent(message);\n }\n return (\n !!message.user &&\n USER_MESSAGE_SUBTYPES.has(message.subtype) &&\n hasMessageContent(message, false)\n );\n }\n\n private async backfillChannel(channelId: string, upperBoundTs?: string): Promise<number> {\n const existingTs = await this.getExistingTimestamps(channelId);\n\n let lastLoggedTs: string | undefined;\n for (const ts of existingTs) {\n if (!lastLoggedTs || parseFloat(ts) > parseFloat(lastLoggedTs)) lastLoggedTs = ts;\n }\n\n const allMessages: SlackHistoryMessage[] = [];\n\n let cursor: string | undefined;\n let pageCount = 0;\n const maxPages = 3;\n\n do {\n const result = await this.webClient.conversations.history({\n channel: channelId,\n oldest: lastLoggedTs,\n latest: upperBoundTs,\n inclusive: false,\n limit: 1000,\n cursor,\n });\n if (result.messages) {\n allMessages.push(...(result.messages as SlackHistoryMessage[]));\n }\n cursor = result.response_metadata?.next_cursor;\n pageCount++;\n } while (cursor && pageCount < maxPages);\n\n const relevantMessages = allMessages.filter((msg) => {\n if (!msg.ts || existingTs.has(msg.ts)) return false;\n return this.isBackfillableMessage(msg);\n });\n\n relevantMessages.reverse();\n\n for (const msg of relevantMessages) {\n const isMikanMessage = msg.user === this.botUserId;\n const isExternalMessagingBotMessage = !isMikanMessage && hasBotIdentity(msg);\n if (isExternalMessagingBotMessage) {\n await this.logExternalMessagingBotMessage({ ...msg, channel: channelId, ts: msg.ts! });\n continue;\n }\n\n const user = this.users.get(msg.user!);\n const text = this.stripOwnMention(msg.text);\n const attachments = msg.files\n ? await this.processAttachments(channelId, msg.files, msg.ts!)\n : [];\n\n this.logToFile(channelId, {\n date: new Date(parseFloat(msg.ts!) * 1000).toISOString(),\n ts: msg.ts!,\n threadTs: msg.thread_ts,\n user: isMikanMessage ? \"bot\" : msg.user!,\n userName: isMikanMessage ? undefined : user?.userName,\n displayName: isMikanMessage ? undefined : user?.displayName,\n text,\n attachments,\n isMessagingBot: isMikanMessage,\n });\n }\n\n return relevantMessages.length;\n }\n\n private async backfillAllChannels(upperBoundTs?: string): Promise<void> {\n const startTime = Date.now();\n\n const channelsToBackfill: Array<[string, SlackChannel]> = [];\n for (const [channelId, channel] of this.channels) {\n const logPath = join(this.conversationDir(channelId), \"log.jsonl\");\n if (existsSync(logPath)) {\n channelsToBackfill.push([channelId, channel]);\n }\n }\n\n log.logBackfillStart(channelsToBackfill.length);\n\n let totalMessages = 0;\n for (const [channelId, channel] of channelsToBackfill) {\n try {\n const count = await this.backfillChannel(channelId, upperBoundTs);\n if (count > 0) log.logBackfillChannel(channel.name, count);\n totalMessages += count;\n } catch (error) {\n log.logWarning(`Failed to backfill #${channel.name}`, String(error));\n }\n\n if (channelId !== channelsToBackfill[channelsToBackfill.length - 1]?.[0]) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n const durationMs = Date.now() - startTime;\n log.logBackfillComplete(totalMessages, durationMs);\n }\n\n private async fetchUsers(): Promise<void> {\n let cursor: string | undefined;\n do {\n const result = await this.webClient.users.list({ limit: 200, cursor });\n const members = result.members as\n | Array<{\n id?: string;\n name?: string;\n real_name?: string;\n deleted?: boolean;\n is_bot?: boolean;\n }>\n | undefined;\n for (const u of members ?? []) {\n if (!u.id || !u.name || u.deleted) continue;\n this.users.set(u.id, {\n id: u.id,\n userName: u.name,\n displayName: u.real_name || u.name,\n isBot: !!u.is_bot,\n });\n }\n cursor = result.response_metadata?.next_cursor;\n } while (cursor);\n }\n\n private async fetchChannels(): Promise<void> {\n let cursor: string | undefined;\n do {\n const result = await this.webClient.conversations.list({\n types: \"public_channel,private_channel\",\n exclude_archived: true,\n limit: 200,\n cursor,\n });\n const channels = result.channels as\n | Array<{\n id?: string;\n name?: string;\n is_member?: boolean;\n is_private?: boolean;\n is_shared?: boolean;\n is_ext_shared?: boolean;\n }>\n | undefined;\n for (const c of channels ?? []) {\n if (!c.id || !c.name || !c.is_member) continue;\n this.channels.set(c.id, {\n id: c.id,\n name: c.name,\n ...(typeof c.is_private === \"boolean\" ? { isPrivate: c.is_private } : {}),\n ...(c.is_shared || c.is_ext_shared ? { isExternallyShared: true } : {}),\n });\n }\n cursor = result.response_metadata?.next_cursor;\n } while (cursor);\n\n cursor = undefined;\n do {\n const result = await this.webClient.conversations.list({\n types: \"im\",\n limit: 200,\n cursor,\n });\n const ims = result.channels as Array<{ id?: string; user?: string }> | undefined;\n for (const im of ims ?? []) {\n if (!im.id) continue;\n const user = im.user ? this.users.get(im.user) : undefined;\n const name = user ? `DM:${user.userName}` : `DM:${im.id}`;\n this.channels.set(im.id, { id: im.id, name });\n }\n cursor = result.response_metadata?.next_cursor;\n } while (cursor);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../../../src/adapters/slack/bot.ts"],"names":[],"mappings":"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","sourcesContent":["import { SocketModeClient } from \"@slack/socket-mode\";\nimport type { KnownBlock } from \"@slack/types\";\nimport { WebAPIRateLimitedError, WebClient } from \"@slack/web-api\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type {\n MessagingBot,\n ConversationContext,\n ConversationEvent,\n MessagingEventHandler,\n ConversationResponder,\n ChatToolResult,\n ConversationKind,\n MessagingInfo,\n OfficeAddress,\n PlatformHistoryMessage,\n PlatformHistoryOptions,\n PlatformUserInfo,\n Attachment,\n} from \"../../types.js\";\nimport {\n createConversationEvent,\n createConversationMessage,\n createOfficeAddress,\n listRegisteredOffices,\n} from \"../../office/index.js\";\nimport type { Office, Workspace, PlatformChannelKind } from \"../../office/types.js\";\nimport { COMMAND_MANIFEST } from \"../commands/manifest.js\";\nimport type { SlackSlashRoute } from \"../commands/types.js\";\nimport {\n slackConversationAutoReplyMode,\n resolveConversationSettings,\n} from \"../../settings/index.js\";\nimport { evaluateWithJev, JevNotConfiguredError } from \"../../harness/jev.js\";\nimport type { EventScheduler } from \"../../events/scheduler.js\";\nimport * as log from \"../../log.js\";\nimport type {\n SlackBlockAction,\n SlackBlockActionBody,\n SlackChannel,\n SlackEvent,\n SlackMessagingBotOptions,\n SlackSocketConnection,\n SlackSocketEventArgs,\n SlackUser,\n SlackWebApi,\n AgentContext,\n AssistantSurfaceOps,\n AssistantThreadPayload,\n SuggestedPrompt,\n} from \"./types.js\";\nimport { readTextFileIfExists } from \"../../file-guards.js\";\nimport { PRODUCT_NAME, formatForceStopped } from \"../messages.js\";\nimport {\n appendBotResponseLog,\n appendChannelLog,\n MessagingEventQueue,\n MessagingIntakeTracker,\n AttachmentRejectedError,\n saveIncomingAttachments,\n writeResponseToFile,\n withRetry,\n} from \"../shared.js\";\nimport { matchMagicWord, processMessageIntake } from \"../intake.js\";\nimport { readPlatformChannelKind, recordPlatformChannelKind } from \"../../office/projection.js\";\nimport {\n AssistantThreadRegistry,\n handleAgentContextChanged,\n handleAgentDmOpened,\n handleAssistantThreadStarted,\n titleAssistantThread,\n} from \"./assistant.js\";\nimport { createSlackAdapters } from \"./context.js\";\nimport {\n hasMaterializedChatSession,\n registerThreadSession,\n} from \"../../sessions/chat-history-sync.js\";\nimport type { SlackPersonaIdentity } from \"./persona.js\";\nimport { conversationIdOf } from \"../../sessions/session-key.js\";\nimport {\n isSlackThreadSessionKey,\n planSlackAdapterSession,\n planSlackEventAnchorRun,\n resolveSlackSessionKey,\n} from \"./session.js\";\nimport { reportUserFacingError } from \"../../observability/index.js\";\nimport { recordSlackUpdate } from \"./update-diagnostics.js\";\nimport { renderSlackBlocks, resolveSlackMentions } from \"./blocks.js\";\nimport {\n querySlackTasks,\n formatTaskStatus,\n readTaskRoots,\n isTaskStatusQuestion,\n} from \"./task-status.js\";\nimport { buildAutoReplyState, JEV_ADDRESSED_INSTRUCTIONS } from \"./auto-reply-context.js\";\nimport { buildTaskIntentState, classifyTaskIntent, type TaskIntent } from \"./task-intent.js\";\nimport { StreamStartLimiter } from \"./stream-limits.js\";\nimport { errorMessage, isRecord } from \"../../unknown-values.js\";\n\nconst SLACK_EVENT_ANCHOR_TEXT = \"Working on it...\";\n\ninterface SlackIncomingMessage {\n text?: string;\n channel: string;\n user?: string;\n ts: string;\n thread_ts?: string;\n channel_type?: string;\n subtype?: string;\n bot_id?: string;\n app_id?: string;\n username?: string;\n bot_profile?: { id?: string; app_id?: string; name?: string; real_name?: string };\n blocks?: unknown[];\n attachments?: unknown[];\n files?: Array<{ name: string; url_private_download?: string; url_private?: string }>;\n}\n\ntype SlackHistoryMessage = Omit<SlackIncomingMessage, \"channel\" | \"ts\"> & { ts?: string };\n\nfunction hasMessageContent(message: SlackHistoryMessage, includeBlocks = true): boolean {\n const content: Array<string | unknown[] | undefined> = [message.text, message.files];\n if (includeBlocks) content.push(message.blocks, message.attachments);\n return content.some((part) => !!part?.length);\n}\n\nfunction hasBotIdentity(message: SlackHistoryMessage): boolean {\n return !!message.bot_id || message.subtype === \"bot_message\";\n}\n\nconst USER_MESSAGE_SUBTYPES = new Set([undefined, \"file_share\"]);\nconst BOT_MESSAGE_SUBTYPES = new Set([...USER_MESSAGE_SUBTYPES, \"bot_message\"]);\n\ninterface CommandAdapterInput {\n conversationId: string;\n userId: string;\n userName: string | undefined;\n text: string;\n ts: string;\n ephemeralChannelId?: string;\n threadTs?: string;\n sessionKey?: string;\n}\n\nconst MAX_STREAM_TEXT_CHARS = 12_000;\n\nexport function chunkStreamText(text: string, limit = MAX_STREAM_TEXT_CHARS): string[] {\n if (text.length <= limit) return [text];\n const chunks: string[] = [];\n for (let index = 0; index < text.length; index += limit) {\n chunks.push(text.slice(index, index + limit));\n }\n return chunks;\n}\n\nfunction slackIsRateLimited(err: Error): boolean {\n if (err instanceof WebAPIRateLimitedError) return true;\n if ((err as { code?: unknown }).code === \"rate_limited\") return true;\n const data = (err as { data?: { error?: string; response?: { status?: number } } }).data;\n return data?.error === \"rate_limited\" || data?.response?.status === 429;\n}\n\nconst slackRetry = <T>(fn: () => Promise<T>): Promise<T> =>\n withRetry(fn, { isRateLimited: slackIsRateLimited });\n\nfunction collectSlackText(value: unknown, parts: string[]): void {\n if (value === null || value === undefined) return;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (trimmed) parts.push(trimmed);\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) collectSlackText(item, parts);\n return;\n }\n if (typeof value !== \"object\") return;\n\n const obj = value as Record<string, unknown>;\n for (const key of [\"text\", \"fallback\", \"title\", \"value\"] as const) {\n collectSlackText(obj[key], parts);\n }\n collectSlackText(obj.fields, parts);\n collectSlackText(obj.elements, parts);\n collectSlackText(obj.blocks, parts);\n}\n\nfunction buildSlackAppMessageText(event: {\n text?: string;\n blocks?: unknown[];\n attachments?: unknown[];\n}): string {\n const parts: string[] = [];\n collectSlackText(event.text, parts);\n collectSlackText(event.blocks, parts);\n collectSlackText(event.attachments, parts);\n const deduped = parts.filter((part, index) => parts.indexOf(part) === index);\n return deduped.join(\"\\n\");\n}\n\nconst MRKDWN_CONTEXT_TEXT_LIMIT = 3000;\n\nexport function buildMrkdwnContextBlock(text: string): object {\n const blockText =\n text.length > MRKDWN_CONTEXT_TEXT_LIMIT\n ? text.substring(0, MRKDWN_CONTEXT_TEXT_LIMIT - 20) + \"\\n_(truncated)_\"\n : text;\n return { type: \"context\", elements: [{ type: \"mrkdwn\", text: blockText }] };\n}\n\nclass AttachmentDownloadHttpError extends Error {\n constructor(\n message: string,\n readonly status: number,\n ) {\n super(message);\n }\n}\n\nfunction isRetryableAttachmentDownloadError(error: unknown): boolean {\n if (error instanceof AttachmentRejectedError) return false;\n if (!(error instanceof AttachmentDownloadHttpError)) return true;\n return error.status === 408 || error.status === 429 || error.status >= 500;\n}\n\nfunction assertSlackFileUrl(url: string): void {\n const { protocol, hostname } = new URL(url);\n if (protocol === \"https:\" && (hostname === \"slack.com\" || hostname.endsWith(\".slack.com\")))\n return;\n throw new AttachmentRejectedError(`refusing to send the bot token to ${hostname}`);\n}\n\nexport class SlackMessagingBot implements MessagingBot {\n private socketClient: SlackSocketConnection;\n private webClient: SlackWebApi;\n private readonly statusClient: WebClient;\n private readonly fetchFn: typeof fetch;\n private readonly statusUpdates = new Map<string, Promise<void>>();\n private handler: MessagingEventHandler;\n private workspace: Workspace;\n private botToken: string;\n private botUserId: string | null = null;\n private botId: string | null = null;\n private teamId: string | null = null;\n private ownMentionRegex: RegExp | null = null;\n private startupTs: string | null = null;\n\n private users = new Map<string, SlackUser>();\n private channels = new Map<string, SlackChannel>();\n private assistantThreads = new AssistantThreadRegistry();\n private streamStarts = new StreamStartLimiter();\n private stopped = false;\n private queues = new Map<string, MessagingEventQueue>();\n private intake = new MessagingIntakeTracker(\"Slack\");\n private eventScheduler: EventScheduler | null = null;\n\n private office(channelId: string): Office {\n return this.workspace.office(createOfficeAddress(\"slack\", channelId));\n }\n\n private conversationDir(channelId: string): string {\n return this.office(channelId).dir;\n }\n\n private resolveReplyMode(address: OfficeAddress): \"top-level\" | \"thread\" {\n return (\n resolveConversationSettings(this.workspace.office(address)).slack?.replyMode ?? \"top-level\"\n );\n }\n\n private createContext(event: SlackEvent): ConversationContext {\n const context = createSlackAdapters(event, this, {\n replyMode: this.resolveReplyMode(event.address),\n });\n if (event.conversationKind === \"direct\") {\n context.responder.getTaskStatus = (key) =>\n querySlackTasks(\n this.conversationDir(event.channel),\n event.channel,\n this.handler\n .getRunningSessions()\n .filter(\n (s) => s.address.platform === \"slack\" && s.address.conversationId === event.channel,\n ),\n key,\n );\n }\n if (\n event.conversationKind === \"direct\" &&\n event.thread_ts &&\n this.isTaskThread(event.channel, event.thread_ts)\n ) {\n let notified = false;\n context.responder.notifyCompletion = async () => {\n if (notified) return;\n const text = `<@${event.user}> 這一輪處理已結束,請查看上方結果。`;\n const ts = await this.postInThread(event.channel, event.thread_ts!, text);\n notified = true;\n this.logBotResponse(event.channel, text, ts, event.thread_ts);\n };\n }\n if (event.conversationKind === \"direct\" && !event.thread_ts) {\n context.responder.startTask = async (message, task) => {\n if (this.stopped) throw new Error(\"Slack is shutting down; task was not started.\");\n await context.responder.deleteResponse();\n const root = await this.postMessage(event.channel, message);\n this.logToFile(event.channel, {\n date: new Date().toISOString(),\n ts: root,\n user: \"bot\",\n text: message,\n isMessagingBot: true,\n taskRoot: true,\n });\n const sessionKey = resolveSlackSessionKey(event.channel, root);\n try {\n registerThreadSession({\n conversationDir: this.conversationDir(event.channel),\n sessionKey,\n });\n const child: SlackEvent = {\n ...event,\n ts: `task:${root}`,\n thread_ts: root,\n sessionKey,\n text: task,\n };\n if (\n !this.getQueue(sessionKey).enqueue(async () => {\n try {\n await this.handler.handleEvent(\n {\n ...child,\n attachments: child.attachments?.map((a) => ({\n name: a.original,\n localPath: a.localPath,\n })),\n },\n this,\n this.createContext(child),\n );\n } catch (error) {\n reportUserFacingError(error, {\n domain: \"mikan\",\n surface: \"task_handoff\",\n operation: \"start_task_run\",\n severity: \"error\",\n platform: \"slack\",\n context: { conversationId: event.channel, sessionKey, threadTs: root },\n });\n await this.postInThread(\n event.channel,\n root,\n \"Task could not start. Please reply here to try again.\",\n );\n throw error;\n }\n })\n )\n throw new Error(\"Task queue is closed.\");\n } catch (error) {\n await this.updateMessage(event.channel, root, `${message}\\n\\nTask could not start.`);\n throw error;\n }\n return sessionKey;\n };\n }\n return context;\n }\n\n constructor(handler: MessagingEventHandler, config: SlackMessagingBotOptions) {\n this.handler = handler;\n this.workspace = config.workspace;\n this.botToken = config.botToken;\n this.fetchFn = config.fetch ?? ((input, init) => fetch(input, init));\n this.socketClient =\n config.socket ??\n new SocketModeClient({\n appToken: config.appToken,\n clientPingTimeout: 12_000,\n });\n this.webClient = config.webApi ?? new WebClient(config.botToken, { fetch: config.fetch });\n this.statusClient = new WebClient(config.botToken, {\n timeout: 3000,\n retryConfig: { retries: 0 },\n rejectRateLimitedCalls: true,\n fetch: config.fetch,\n });\n }\n\n setEventScheduler(scheduler: EventScheduler): void {\n this.eventScheduler = scheduler;\n }\n\n async start(): Promise<void> {\n this.stopped = false;\n const auth = await this.webClient.auth.test();\n this.botUserId = auth.user_id as string;\n this.botId = typeof auth.bot_id === \"string\" ? auth.bot_id : null;\n this.teamId = typeof auth.team_id === \"string\" ? auth.team_id : null;\n\n await Promise.all([this.fetchUsers(), this.fetchChannels()]);\n if (this.stopped) return;\n log.logInfo(`Loaded ${this.channels.size} channels, ${this.users.size} users`);\n this.backfillChannelKinds();\n\n this.startupTs = (Date.now() / 1000).toFixed(6);\n\n this.setupEventHandlers();\n await this.socketClient.start();\n\n log.logConnected(\"Slack\");\n\n void this.backfillAllChannels(this.startupTs).catch((error) => {\n log.logWarning(\"Slack backfill failed\", String(error));\n });\n }\n\n async stop(): Promise<void> {\n this.stopped = true;\n try {\n await this.socketClient.disconnect();\n } finally {\n await this.intake.close();\n await Promise.all([...this.queues.values()].map((queue) => queue.close()));\n }\n }\n\n getUser(userId: string): SlackUser | undefined {\n return this.users.get(userId);\n }\n\n getChannel(channelId: string): SlackChannel | undefined {\n return this.channels.get(channelId);\n }\n\n getAllUsers(): SlackUser[] {\n return Array.from(this.users.values());\n }\n\n getAllChannels(): SlackChannel[] {\n return Array.from(this.channels.values());\n }\n\n private stripOwnMention(text: string | undefined): string {\n const source = text ?? \"\";\n if (!this.botUserId) return source.trim();\n if (!this.ownMentionRegex || !this.ownMentionRegex.source.includes(this.botUserId)) {\n this.ownMentionRegex = new RegExp(`<@${this.botUserId}>`, \"gi\");\n }\n return source.replace(this.ownMentionRegex, \"\").trim();\n }\n\n private resolveMentions(text: string): string {\n return resolveSlackMentions(text, this.users.values());\n }\n\n async postMessage(\n channel: string,\n text: string,\n threadTs?: string,\n identity?: SlackPersonaIdentity,\n ): Promise<string> {\n return slackRetry(async () => {\n const payload = {\n channel,\n thread_ts: threadTs,\n username: identity?.username,\n icon_emoji: identity?.iconEmoji,\n ...renderSlackBlocks(this.resolveMentions(text)),\n };\n const result = await this.webClient.chat.postMessage(payload);\n return result.ts as string;\n });\n }\n\n async addReaction(channel: string, messageTs: string, emoji: string): Promise<void> {\n const name = emoji.replace(/^:|:$/g, \"\");\n await slackRetry(async () => {\n try {\n await this.webClient.reactions.add({ channel, timestamp: messageTs, name });\n } catch (err) {\n if ((err as { data?: { error?: string } })?.data?.error === \"already_reacted\") return;\n throw err;\n }\n });\n }\n\n async postEphemeral(\n channel: string,\n user: string,\n text: string,\n threadTs?: string,\n blocks?: object[],\n ): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.chat.postEphemeral({\n channel,\n user,\n text,\n blocks: blocks as KnownBlock[] | undefined,\n thread_ts: threadTs || undefined,\n });\n });\n }\n\n async postEphemeralBlocks(\n channel: string,\n user: string,\n text: string,\n blocks: object[],\n threadTs?: string,\n ): Promise<void> {\n return this.postEphemeral(channel, user, text, threadTs, blocks);\n }\n\n async postMessageBlocks(\n channel: string,\n text: string,\n blocks: object[],\n threadTs?: string,\n ): Promise<string> {\n return slackRetry(async () => {\n const payload = {\n channel,\n text,\n blocks: blocks as KnownBlock[],\n thread_ts: threadTs,\n };\n const result = await this.webClient.chat.postMessage(payload);\n return result.ts as string;\n });\n }\n\n async updateMessageBlocks(\n channel: string,\n ts: string,\n text: string,\n blocks: object[],\n ): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.chat.update({ channel, ts, text, blocks: blocks as KnownBlock[] });\n });\n }\n\n async postPrivate(conversationId: string, userId: string, text: string): Promise<void> {\n await this.postEphemeral(conversationId, userId, text);\n }\n\n async postPrivateDiagnostic(\n conversationId: string,\n userId: string,\n text: string,\n options?: { style?: \"muted\" | \"error\" },\n ): Promise<void> {\n if (options?.style !== \"muted\") {\n await this.postEphemeral(\n conversationId,\n userId,\n options?.style === \"error\" ? `_${text}_` : text,\n );\n return;\n }\n await this.postEphemeralBlocks(conversationId, userId, text, [buildMrkdwnContextBlock(text)]);\n }\n\n async openDirectConversation(userId: string): Promise<string> {\n return slackRetry(async () => {\n const result = await this.webClient.conversations.open({ users: userId });\n const channelId = result.channel?.id;\n if (!channelId) {\n throw new Error(`Failed to open DM for user ${userId}`);\n }\n return channelId;\n });\n }\n\n async fetchHistory(\n channel: string,\n options?: PlatformHistoryOptions,\n ): Promise<PlatformHistoryMessage[]> {\n const limit = Math.min(Math.max(options?.limit ?? 200, 1), 999);\n const threadTs = options?.threadTs;\n return slackRetry(async () => {\n const result = threadTs\n ? await this.webClient.conversations.replies({\n channel,\n ts: threadTs,\n oldest: options?.oldest || undefined,\n inclusive: options?.oldest ? false : undefined,\n limit,\n })\n : await this.webClient.conversations.history({\n channel,\n oldest: options?.oldest || undefined,\n inclusive: options?.oldest ? false : undefined,\n limit,\n });\n const messages = (result.messages ?? []) as Array<{\n ts?: string;\n thread_ts?: string;\n user?: string;\n bot_id?: string;\n subtype?: string;\n text?: string;\n }>;\n const mapped = messages\n .filter((msg): msg is typeof msg & { ts: string } => !!msg.ts)\n .filter((msg) => msg.ts !== threadTs)\n .map((msg) => {\n const user = msg.user ? this.users.get(msg.user) : undefined;\n const message: PlatformHistoryMessage = {\n ts: msg.ts,\n text: msg.text ?? \"\",\n isBot: !!msg.bot_id || msg.subtype === \"bot_message\" || user?.isBot === true,\n };\n if (msg.thread_ts && msg.thread_ts !== msg.ts) message.threadTs = msg.thread_ts;\n if (msg.user) message.userId = msg.user;\n if (user) message.userName = user.userName;\n return message;\n });\n return threadTs ? mapped : mapped.toReversed();\n });\n }\n\n async listUsers(): Promise<PlatformUserInfo[]> {\n await slackRetry(() => this.fetchUsers());\n return this.getAllUsers().map((user) => ({\n id: user.id,\n userName: user.userName,\n displayName: user.displayName,\n isBot: user.isBot === true,\n }));\n }\n\n async updateMessage(channel: string, ts: string, text: string): Promise<void> {\n return slackRetry(async () => {\n const payload = { channel, ts, ...renderSlackBlocks(this.resolveMentions(text)) };\n try {\n await this.webClient.chat.update(payload);\n } catch (error) {\n recordSlackUpdate(this, { channel, ts }, text, payload, { error });\n throw error;\n }\n recordSlackUpdate(this, { channel, ts }, text, payload, { success: true });\n });\n }\n\n tryReserveStreamStart(): boolean {\n return this.streamStarts.tryReserve();\n }\n\n async startMessageStream(\n channel: string,\n text: string,\n threadTs?: string,\n recipientUserId?: string,\n ): Promise<string> {\n const [head, ...tail] = chunkStreamText(text);\n const ts = await slackRetry(async () => {\n const result = await this.webClient.apiCall(\"chat.startStream\", {\n channel,\n markdown_text: this.resolveMentions(head ?? \"\"),\n thread_ts: threadTs || undefined,\n recipient_team_id: this.teamId || undefined,\n recipient_user_id: recipientUserId || undefined,\n });\n const streamTs = (result as { ts?: string }).ts;\n if (!streamTs) throw new Error(\"Slack chat.startStream did not return ts\");\n return streamTs;\n });\n for (const part of tail) await this.appendStreamChunk(channel, ts, part);\n return ts;\n }\n\n async appendMessageStream(channel: string, ts: string, text: string): Promise<void> {\n for (const part of chunkStreamText(text)) {\n await this.appendStreamChunk(channel, ts, part);\n }\n }\n\n private async appendStreamChunk(channel: string, ts: string, text: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.apiCall(\"chat.appendStream\", {\n channel,\n ts,\n markdown_text: this.resolveMentions(text),\n });\n });\n }\n\n async stopMessageStream(channel: string, ts: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.apiCall(\"chat.stopStream\", { channel, ts });\n });\n }\n\n async deleteMessage(channel: string, ts: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.chat.delete({ channel, ts });\n });\n }\n\n async setAssistantStatus(channel: string, threadTs: string, status: string): Promise<void> {\n const key = `${channel}:${threadTs}`;\n const previous = this.statusUpdates.get(key) ?? Promise.resolve();\n const update = previous\n .catch(() => undefined)\n .then(async () => {\n await this.statusClient.assistant.threads.setStatus({\n channel_id: channel,\n thread_ts: threadTs,\n status,\n });\n });\n this.statusUpdates.set(key, update);\n try {\n await update;\n } finally {\n if (this.statusUpdates.get(key) === update) this.statusUpdates.delete(key);\n }\n }\n\n async setAssistantSuggestedPrompts(\n channel: string,\n threadTs: string | undefined,\n prompts: SuggestedPrompt[],\n ): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.assistant.threads.setSuggestedPrompts({\n channel_id: channel,\n thread_ts: threadTs || undefined,\n prompts,\n });\n });\n }\n\n async setAssistantTitle(channel: string, threadTs: string, title: string): Promise<void> {\n return slackRetry(async () => {\n await this.webClient.assistant.threads.setTitle({\n channel_id: channel,\n thread_ts: threadTs,\n title,\n });\n });\n }\n\n private assistantOps(): AssistantSurfaceOps {\n return {\n postInThread: (channel, threadTs, text) => this.postInThread(channel, threadTs, text),\n setSuggestedPrompts: (channel, threadTs, prompts) =>\n this.setAssistantSuggestedPrompts(channel, threadTs, prompts),\n setTitle: (channel, threadTs, title) => this.setAssistantTitle(channel, threadTs, title),\n channelName: (channelId) => this.channels.get(channelId)?.name,\n };\n }\n\n private handleAssistantThreadStarted({ event, ack }: SlackSocketEventArgs): void {\n ack();\n const payload = event as { assistant_thread?: AssistantThreadPayload };\n if (!payload.assistant_thread) return;\n void handleAssistantThreadStarted(\n this.assistantOps(),\n this.assistantThreads,\n payload.assistant_thread,\n );\n }\n\n private handleAgentContextChangedEvent({ event, ack }: SlackSocketEventArgs): void {\n ack();\n const payload = event as {\n assistant_thread?: AssistantThreadPayload;\n channel_id?: string;\n channel?: string;\n context?: AgentContext;\n };\n if (payload.assistant_thread) {\n handleAgentContextChanged(this.assistantThreads, payload.assistant_thread);\n return;\n }\n const channelId = payload.channel_id ?? payload.channel;\n if (channelId) {\n handleAgentContextChanged(this.assistantThreads, {\n channel_id: channelId,\n context: payload.context,\n });\n }\n }\n\n async postInThread(\n channel: string,\n threadTs: string,\n text: string,\n identity?: SlackPersonaIdentity,\n ): Promise<string> {\n return identity\n ? this.postMessage(channel, text, threadTs, identity)\n : this.postMessage(channel, text, threadTs);\n }\n\n async postInThreadBlocks(\n channel: string,\n threadTs: string,\n text: string,\n blocks: object[],\n ): Promise<string> {\n return this.postMessageBlocks(channel, text, blocks, threadTs);\n }\n\n async uploadFile(\n channel: string,\n filePath: string,\n title?: string,\n threadTs?: string,\n ): Promise<void> {\n return slackRetry(async () => {\n const fileName = title || basename(filePath);\n const fileContent = readFileSync(filePath);\n await this.webClient.files.uploadV2({\n channel_id: channel,\n file: fileContent,\n filename: fileName,\n title: fileName,\n ...(threadTs ? { thread_ts: threadTs } : {}),\n } as Parameters<SlackWebApi[\"files\"][\"uploadV2\"]>[0]);\n });\n }\n\n logToFile(channel: string, entry: object): void {\n appendChannelLog(this.workspace.office(createOfficeAddress(\"slack\", channel)), entry);\n }\n\n logBotResponse(\n channel: string,\n text: string,\n ts: string,\n threadTs?: string,\n slackBlocks?: object[],\n ): void {\n appendBotResponseLog(\n this.workspace.office(createOfficeAddress(\"slack\", channel)),\n text,\n ts,\n threadTs,\n {\n platform: \"slack\",\n slackBlocks,\n },\n );\n }\n\n ownsBlockKitMessage(channel: string, ts: string, threadTs?: string): boolean {\n const content = readTextFileIfExists(this.office(channel).logPath);\n if (content === undefined) return false;\n for (const line of content.trim().split(\"\\n\").toReversed()) {\n try {\n const entry: unknown = JSON.parse(line);\n if (!isRecord(entry) || entry.ts !== ts) continue;\n return (\n entry.isMessagingBot === true &&\n entry.platform === \"slack\" &&\n Array.isArray(entry.slackBlocks) &&\n entry.threadTs === threadTs\n );\n } catch {\n continue;\n }\n }\n return false;\n }\n\n getMessagingInfo(): MessagingInfo {\n return {\n name: \"slack\",\n workspaceId: this.teamId || undefined,\n trustModel: \"membership\",\n formattingGuide:\n \"## Slack Formatting\\nWrite standard Markdown/GFM: **bold**, _italic_, ~~strike~~, `code`, fenced code blocks, [links](url), lists, and pipe tables (rendered as native Slack tables).\\nDo NOT use Slack mrkdwn syntax like *single-asterisk bold* or <url|label> links.\",\n channels: this.getAllChannels().map((c) => ({ id: c.id, name: c.name })),\n users: this.getAllUsers().map((u) => ({\n id: u.id,\n userName: u.userName,\n displayName: u.displayName,\n })),\n diagnostics: {\n showUsageSummary: true,\n },\n };\n }\n\n enqueueEvent(event: ConversationEvent): boolean {\n if (this.stopped) return false;\n const conversationId = event.address.conversationId;\n const queue = this.getQueue(conversationId);\n if (queue.size() >= 5) {\n log.logWarning(\n `Event queue full for ${conversationId}, discarding: ${event.text.substring(0, 50)}`,\n );\n return false;\n }\n log.logInfo(`Enqueueing event for ${conversationId}: ${event.text.substring(0, 50)}`);\n return queue.enqueue(async () => {\n let anchorTs: string | undefined;\n if (!event.thread_ts) {\n try {\n anchorTs = await this.postMessage(conversationId, SLACK_EVENT_ANCHOR_TEXT);\n } catch (err) {\n log.logWarning(\n `Failed to post Slack event anchor for ${conversationId}`,\n errorMessage(err),\n );\n reportUserFacingError(err, {\n domain: \"events\",\n surface: \"event_delivery\",\n operation: \"slack_anchor_post\",\n severity: \"error\",\n platform: \"slack\",\n context: {\n conversationId,\n conversationKind: event.conversationKind,\n eventTs: event.ts,\n textLength: event.text.length,\n },\n });\n throw err;\n }\n }\n const eventPlan = planSlackEventAnchorRun(event, anchorTs);\n const eventForRun = eventPlan.event;\n if (eventPlan.initialMessageTs && eventForRun.sessionKey) {\n registerThreadSession({\n conversationDir: this.conversationDir(conversationId),\n sessionKey: eventForRun.sessionKey,\n });\n }\n\n const runQueueKey = planSlackAdapterSession(eventForRun, {\n initialMessageTs: eventPlan.initialMessageTs,\n }).sessionKey;\n const run = async () => {\n const slackEvent = createConversationEvent({\n platform: \"slack\",\n address: eventForRun.address,\n type: eventForRun.type as SlackEvent[\"type\"],\n conversationId,\n conversationKind: eventForRun.conversationKind,\n channel: conversationId,\n ts: eventForRun.ts,\n thread_ts: eventForRun.thread_ts,\n user: eventForRun.user,\n text: eventForRun.text,\n attachments: eventForRun.attachments,\n sessionKey: eventForRun.sessionKey,\n }) as SlackEvent;\n const context = createSlackAdapters(slackEvent, this, {\n initialMessageTs: eventPlan.initialMessageTs,\n replyMode: this.resolveReplyMode(eventForRun.address),\n });\n return this.handler.handleEvent(eventForRun, this, context);\n };\n const runQueue = this.getQueue(runQueueKey);\n if (!runQueue.enqueue(run)) {\n await runQueue.close();\n await run();\n }\n });\n }\n\n private getQueue(channelId: string): MessagingEventQueue {\n let queue = this.queues.get(channelId);\n if (!queue) {\n queue = new MessagingEventQueue(\"Slack\");\n if (this.stopped) void queue.close();\n this.queues.set(channelId, queue);\n }\n return queue;\n }\n\n private resolveQueueKey(conversationId: string, sessionKey: string): string {\n if (!isSlackThreadSessionKey(sessionKey)) return sessionKey;\n if (this.handler.isRunning(createOfficeAddress(\"slack\", conversationId), sessionKey)) {\n return sessionKey;\n }\n return this.hasKnownThreadSession(conversationId, sessionKey) ? sessionKey : conversationId;\n }\n\n private isTaskThread(channel: string, root: string): boolean {\n return readTaskRoots(this.conversationDir(channel)).has(root);\n }\n\n private hasRunningTaskThread(channel: string): boolean {\n const roots = readTaskRoots(this.conversationDir(channel));\n if (!roots.size) return false;\n return this.handler\n .getRunningSessions()\n .some(\n (s) =>\n s.address.platform === \"slack\" &&\n s.address.conversationId === channel &&\n [...roots.keys()].some((root) => resolveSlackSessionKey(channel, root) === s.sessionKey),\n );\n }\n\n private hasKnownThreadSession(conversationId: string, sessionKey: string): boolean {\n return hasMaterializedChatSession({\n conversationDir: this.conversationDir(conversationId),\n sessionKey,\n });\n }\n\n private channelKindFor(channelId: string): PlatformChannelKind | undefined {\n if (channelId.startsWith(\"D\")) return \"im\";\n const channel = this.channels.get(channelId);\n if (!channel) return undefined;\n if (channel.name.startsWith(\"DM:\")) return \"im\";\n if (channel.isExternallyShared) return \"external\";\n if (channel.isPrivate === true) return \"private_channel\";\n if (channel.isPrivate === false) return \"public_channel\";\n return undefined;\n }\n\n private backfillChannelKinds(): void {\n let recorded = 0;\n for (const record of listRegisteredOffices(this.workspace.stateDir)) {\n if (record.platform !== \"slack\") continue;\n const kind = this.channelKindFor(record.conversationId);\n if (!kind) continue;\n try {\n const office = this.workspace.office(record);\n if (readPlatformChannelKind(office) === kind) continue;\n recordPlatformChannelKind(office, kind);\n recorded++;\n } catch (err) {\n log.logWarning(\"Failed to backfill Slack channel kind\", String(err));\n }\n }\n if (recorded > 0) log.logInfo(`Recorded channel kind for ${recorded} Slack offices`);\n }\n\n private processSlackMessageIntake(options: {\n event: SlackEvent;\n attachmentsPromise: Promise<Attachment[]>;\n queueKey: string;\n addressed: boolean;\n magicWordAddressed?: boolean;\n }): Promise<void> {\n const kind = this.channelKindFor(options.event.address.conversationId);\n if (kind) {\n try {\n recordPlatformChannelKind(this.workspace.office(options.event.address), kind);\n } catch (err) {\n log.logWarning(\"Failed to record Slack channel kind\", String(err));\n }\n }\n const absorbAttachmentFailure = () => {\n void options.attachmentsPromise.catch((err) => {\n log.logWarning(\"Failed to log Slack message\", String(err));\n });\n };\n return processMessageIntake({\n eventBase: options.event as unknown as ConversationEvent,\n addressed: options.addressed,\n magicWord: {\n addressed: options.magicWordAddressed ?? options.addressed,\n scopeFallback: \"top-level\",\n },\n busyPolicy: \"queue\",\n logEntryBase: {},\n processAttachments: () => options.attachmentsPromise,\n queueKey: options.queueKey,\n enqueue: (queueKey, work) => this.getQueue(queueKey).enqueue(work),\n handler: this.handler,\n bot: this,\n createContext: (event) => this.createContext(event as SlackEvent),\n deferAttachmentsUntilRun: true,\n }).then(\n (outcome) => {\n if (outcome !== \"enqueued\") absorbAttachmentFailure();\n },\n (err) => {\n log.logWarning(\"Slack message intake failed\", String(err));\n absorbAttachmentFailure();\n },\n );\n }\n\n private appendRunningTasks(blocks: object[]): void {\n const runningSessions = this.handler.getRunningSessions();\n blocks.push(\n { type: \"divider\" },\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: `Running Tasks (${runningSessions.length})`,\n emoji: true,\n },\n },\n );\n if (runningSessions.length === 0) {\n blocks.push({\n type: \"context\",\n elements: [{ type: \"mrkdwn\", text: \"_No tasks running right now._\" }],\n });\n return;\n }\n\n const stuckThresholdMs = 10 * 60 * 1000;\n for (const session of runningSessions) {\n const channelId = conversationIdOf(session.sessionKey);\n const channelName = this.channels.get(channelId)?.name;\n const elapsed = Math.floor((Date.now() - session.startedAt) / 60000);\n const elapsedStr = elapsed < 1 ? \"<1 min\" : `${elapsed} min`;\n const lastActivity = session.lastActivityAt ? Date.now() - session.lastActivityAt : 0;\n const isStuck = lastActivity > stuckThresholdMs;\n let statusLine = `${isStuck ? \"_stuck_\" : \"_running_\"} · ${elapsedStr}`;\n if (session.currentTool) statusLine += ` · ${session.currentTool}`;\n if (isStuck) statusLine += ` · idle ${Math.floor(lastActivity / 60000)}m`;\n blocks.push({\n type: \"context\",\n elements: [\n {\n type: \"mrkdwn\",\n text: `*${channelName ? `#${channelName}` : channelId}* · ${statusLine}`,\n },\n ],\n });\n if (isStuck) {\n blocks.push({\n type: \"context\",\n elements: [\n { type: \"mrkdwn\", text: \" \" },\n {\n type: \"button\",\n text: { type: \"plain_text\", text: \"Force Stop\", emoji: true },\n action_id: `force_stop_${session.sessionKey.replace(/:/g, \"_\")}`,\n value: session.sessionKey,\n style: \"danger\",\n },\n ],\n });\n }\n }\n }\n\n private appendScheduledJobs(blocks: object[], dmChannelId: string | undefined): void {\n const periodicEvents =\n dmChannelId && this.eventScheduler\n ? this.eventScheduler.periodicEvents(createOfficeAddress(\"slack\", dmChannelId))\n : [];\n blocks.push(\n { type: \"divider\" },\n {\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: `Scheduled Jobs (${periodicEvents.length})`,\n emoji: true,\n },\n },\n );\n if (periodicEvents.length === 0) {\n blocks.push({\n type: \"context\",\n elements: [{ type: \"mrkdwn\", text: \"_No scheduled jobs._\" }],\n });\n return;\n }\n\n for (const event of periodicEvents) {\n const channel =\n event.platform === \"slack\" ? this.channels.get(event.conversationId) : undefined;\n const channelId = channel ? `#${channel.name}` : event.conversationId;\n const channelLabel = `${event.platform}:${channelId}`;\n const nextRun = event.nextRun\n ? new Date(event.nextRun).toLocaleString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })\n : \"—\";\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `*${event.text}*\\n└ \\`${event.schedule}\\` · ${channelLabel} · Next: ${nextRun}`,\n },\n });\n }\n }\n\n private buildHomeView(dmChannelId: string | undefined): { type: \"home\"; blocks: KnownBlock[] } {\n const blocks: object[] = [\n {\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `*${PRODUCT_NAME}*\\nStart a new task or check on running work.`,\n },\n accessory: {\n type: \"image\",\n image_url: \"https://media1.tenor.com/m/lfDATg4Bhc0AAAAC/happy-cat.gif\",\n alt_text: PRODUCT_NAME,\n },\n },\n ];\n this.appendRunningTasks(blocks);\n this.appendScheduledJobs(blocks, dmChannelId);\n blocks.push(\n { type: \"divider\" },\n {\n type: \"context\",\n elements: [\n { type: \"mrkdwn\", text: \"💡 @mention in a channel or send a DM to start a new task\" },\n ],\n },\n );\n return { type: \"home\", blocks: blocks as KnownBlock[] };\n }\n\n private createCommandAdapters(input: CommandAdapterInput): ConversationContext {\n const { conversationId, userId, userName, text, ts, ...options } = input;\n const message = createConversationMessage({\n platform: \"slack\",\n conversationId,\n id: ts,\n sessionKey: options.sessionKey ?? conversationId,\n conversationKind: options.ephemeralChannelId ? \"shared\" : \"direct\",\n userId,\n userName,\n text,\n attachments: [],\n });\n\n const respond = async (responseText: string, blocks?: object[]) => {\n if (options.ephemeralChannelId) {\n await this.postEphemeral(\n options.ephemeralChannelId,\n userId,\n responseText,\n options.threadTs,\n blocks,\n );\n return;\n }\n const messageTs = blocks\n ? await this.postMessageBlocks(conversationId, responseText, blocks)\n : await this.postMessage(conversationId, responseText);\n this.logBotResponse(conversationId, responseText, messageTs);\n };\n\n const responder: ConversationResponder = {\n respond,\n replaceResponse: (responseText) => respond(responseText),\n respondDiagnostic: async (\n responseText: string,\n responseOptions?: { style?: \"muted\" | \"error\" },\n ) => {\n if (responseOptions?.style === \"muted\") {\n await respond(responseText, [buildMrkdwnContextBlock(responseText)]);\n return;\n }\n await respond(responseOptions?.style === \"error\" ? `_${responseText}_` : responseText);\n },\n respondToolResult: async (result: ChatToolResult) => {\n const duration = (result.durationMs / 1000).toFixed(1);\n await respond(\n `${result.isError ? \"Error\" : \"Done\"} ${result.toolName} (${duration}s)\\n${result.result}`,\n );\n },\n setTyping: async () => {},\n setWorking: async () => {},\n uploadFile: async (filePath: string, title?: string) => {\n await this.uploadFile(conversationId, filePath, title);\n },\n deleteResponse: async () => {},\n };\n\n return {\n address: message.address,\n message,\n responder,\n platform: this.getMessagingInfo(),\n };\n }\n\n private buildSlashCommandEvent(\n payload: {\n command: string;\n text?: string;\n channel_id: string;\n user_id: string;\n user_name?: string;\n thread_ts?: string;\n },\n options: { type?: ConversationEvent[\"type\"]; includeText?: boolean; thread?: boolean } = {},\n ): { event: ConversationEvent; context: ConversationContext } {\n const conversationId = payload.channel_id;\n const isDirectMessage = conversationId.startsWith(\"D\");\n const createdAt = new Date();\n const eventTs = (createdAt.getTime() / 1000).toFixed(6);\n const userName = payload.user_name ?? this.getUser(payload.user_id)?.userName;\n const commandSuffix = options.includeText ? payload.text?.trim() : undefined;\n const commandText = commandSuffix ? `${payload.command} ${commandSuffix}` : payload.command;\n const threadTs = options.thread ? payload.thread_ts : undefined;\n const sessionKey = options.thread\n ? resolveSlackSessionKey(conversationId, threadTs)\n : conversationId;\n\n this.logToFile(conversationId, {\n date: createdAt.toISOString(),\n ts: eventTs,\n user: payload.user_id,\n userName,\n text: commandText,\n attachments: [],\n isMessagingBot: false,\n threadTs: threadTs || undefined,\n });\n\n const event = createConversationEvent({\n platform: \"slack\",\n conversationId,\n type: options.type ?? (isDirectMessage ? \"dm\" : \"mention\"),\n conversationKind: isDirectMessage ? \"direct\" : \"shared\",\n ts: eventTs,\n user: payload.user_id,\n text: commandText,\n attachments: [],\n thread_ts: threadTs || undefined,\n sessionKey,\n });\n\n const context = this.createCommandAdapters({\n conversationId,\n userId: payload.user_id,\n userName,\n text: commandText,\n ts: eventTs,\n ephemeralChannelId: isDirectMessage ? undefined : conversationId,\n threadTs,\n sessionKey,\n });\n\n return { event, context };\n }\n\n private async routeSlashCommand(\n route: SlackSlashRoute,\n payload: {\n command: string;\n text?: string;\n channel_id: string;\n user_id: string;\n user_name?: string;\n thread_ts?: string;\n },\n ): Promise<void> {\n const { event, context } = this.buildSlashCommandEvent(payload, {\n includeText: route.includeText,\n thread: route.thread,\n type: route.privateCommand\n ? payload.channel_id.startsWith(\"D\")\n ? (\"dm\" as const)\n : (\"private_command\" as const)\n : undefined,\n });\n await this.handler.handleEvent(event, this, context);\n }\n\n private setupEventHandlers(): void {\n this.socketClient.on(\"disconnect\", (err: unknown) => {\n log.logWarning(\"Slack socket disconnect\", err ? String(err) : \"\");\n });\n this.socketClient.on(\"error\", (err: unknown) => {\n log.logWarning(\"Slack socket error\", err ? String(err) : \"\");\n });\n this.socketClient.on(\"unable_to_socket_mode_start\", (err: unknown) => {\n log.logWarning(\"Slack socket unable_to_start\", err ? String(err) : \"\");\n });\n\n this.socketClient.on(\"app_mention\", (payload) =>\n this.intake.run(() => this.handleAppMention(payload)),\n );\n this.socketClient.on(\"message\", (payload) =>\n this.intake.run(() => this.handleMessageEvent(payload)),\n );\n this.socketClient.on(\"slash_commands\", (payload) =>\n this.intake.run(() => this.handleSlashCommand(payload)),\n );\n this.socketClient.on(\"app_home_opened\", (payload) =>\n this.intake.run(() => this.handleAppHomeOpened(payload)),\n );\n this.socketClient.on(\"assistant_thread_started\", (payload) =>\n this.intake.run(() => this.handleAssistantThreadStarted(payload)),\n );\n this.socketClient.on(\"assistant_thread_context_changed\", (payload) =>\n this.intake.run(() => this.handleAgentContextChangedEvent(payload)),\n );\n this.socketClient.on(\"app_context_changed\", (payload) =>\n this.intake.run(() => this.handleAgentContextChangedEvent(payload)),\n );\n const blockAction = ({ body, ack }: SlackSocketEventArgs) =>\n this.intake.run(() => this.handleBlockAction({ body: body as SlackBlockActionBody, ack }));\n this.socketClient.on(\"block_actions\", blockAction);\n this.socketClient.on(\"interactive\", blockAction);\n }\n\n private async handleAppMention({ event, ack }: SlackSocketEventArgs): Promise<void> {\n const e = event as {\n text: string;\n channel: string;\n user: string;\n ts: string;\n thread_ts?: string;\n files?: Array<{ name: string; url_private_download?: string; url_private?: string }>;\n };\n\n if (e.channel.startsWith(\"D\")) {\n ack();\n return;\n }\n\n const sessionKey = resolveSlackSessionKey(e.channel, e.thread_ts);\n\n const mentionText = this.stripOwnMention(e.text);\n const slackEvent = createConversationEvent({\n platform: \"slack\",\n conversationId: e.channel,\n type: \"mention\" as const,\n conversationKind: \"shared\",\n ts: e.ts,\n thread_ts: e.thread_ts,\n user: e.user,\n text: mentionText || \"Please respond to the recent conversation context.\",\n sessionKey,\n channel: e.channel,\n files: e.files,\n }) as SlackEvent;\n\n const attachmentsPromise = this.logUserMessage(slackEvent);\n\n if (this.startupTs && e.ts < this.startupTs) {\n log.logInfo(\n `[${e.channel}] Logged old message (pre-startup), not triggering: ${slackEvent.text.substring(0, 30)}`,\n );\n void attachmentsPromise.catch((err) => {\n log.logWarning(\"Failed to log Slack message\", String(err));\n });\n ack();\n return;\n }\n\n const intake = this.processSlackMessageIntake({\n event: slackEvent,\n attachmentsPromise,\n queueKey: this.resolveQueueKey(e.channel, sessionKey),\n addressed: true,\n });\n\n ack();\n await intake;\n }\n\n private admitHumanMessage(\n event: SlackIncomingMessage,\n ack: () => void,\n ): event is SlackIncomingMessage & { user: string } {\n const hasSlackContent = hasMessageContent(event);\n const isOwnMessage =\n event.user === this.botUserId || (!!this.botId && event.bot_id === this.botId);\n if (isOwnMessage) {\n ack();\n return false;\n }\n\n const authorIsKnownHuman = !!event.user && this.users.get(event.user)?.isBot === false;\n const isExternalMessage =\n event.subtype === \"bot_message\" || (!!event.bot_id && !authorIsKnownHuman);\n if (isExternalMessage) {\n const supportedSubtype = BOT_MESSAGE_SUBTYPES.has(event.subtype);\n if (supportedSubtype && hasSlackContent) {\n void this.logExternalMessagingBotMessage(event).catch((err) => {\n log.logWarning(\"Failed to log Slack bot message\", String(err));\n });\n }\n ack();\n return false;\n }\n\n const isSupportedUserMessage =\n !!event.user && USER_MESSAGE_SUBTYPES.has(event.subtype) && hasSlackContent;\n if (isSupportedUserMessage) return true;\n ack();\n return false;\n }\n\n private async deliverTaskUpdate(\n event: SlackEvent,\n attachmentsPromise: Promise<Attachment[]>,\n ): Promise<boolean> {\n if (matchMagicWord(event.text) === \"stop\" || event.text.startsWith(\"/\")) return false;\n event.attachments = await attachmentsPromise;\n const context = this.createContext(event);\n const post = (text: string) =>\n event.thread_ts\n ? this.postInThread(event.channel, event.thread_ts, text)\n : this.postMessage(event.channel, text);\n try {\n const tasks = await context.responder.getTaskStatus!(\n event.thread_ts ? event.sessionKey : undefined,\n );\n if (!tasks.length) return false;\n const active = tasks.filter((t) => t.status === \"running\" || t.status === \"stopping\");\n const user = this.users.get(event.user);\n const intent: TaskIntent = event.attachments?.length\n ? event.thread_ts\n ? \"steer\"\n : \"request\"\n : await classifyTaskIntent(\n buildTaskIntentState(this.conversationDir(event.channel), event, {\n speaker: user?.displayName ?? user?.userName,\n tasks,\n resolveName: (id) => this.users.get(id)?.displayName ?? this.users.get(id)?.userName,\n botUserId: this.botUserId,\n }),\n event.text,\n { conversationId: event.channel, inTaskThread: !!event.thread_ts },\n );\n if (intent === \"status\") {\n const selection = event.thread_ts ? tasks : active.length ? active : tasks.slice(0, 1);\n const text =\n selection.length > 1\n ? \"目前有多個任務在處理,請到你想查詢的任務對話串詢問,避免弄錯。\"\n : formatTaskStatus(selection);\n const ts = await post(text);\n this.logBotResponse(event.channel, text, ts, event.thread_ts);\n return true;\n }\n if (intent === \"steer\") {\n const target = event.thread_ts\n ? context.message\n : active.length === 1\n ? {\n ...context.message,\n sessionKey: active[0]!.sessionKey,\n threadTs: active[0]!.threadTs,\n }\n : undefined;\n if (target && (await this.handler.steer?.(target))) {\n const text = \"收到補充,會在下一個處理步驟納入;目前的操作不會立即中斷。\";\n const ts = await post(text);\n this.logBotResponse(event.channel, text, ts, event.thread_ts);\n return true;\n }\n }\n } catch (error) {\n await post(error instanceof Error ? error.message : \"Could not deliver task update.\");\n return true;\n }\n return false;\n }\n\n private async evaluateJevAddressed(event: SlackEvent): Promise<boolean> {\n if (!event.text.trim() || matchMagicWord(event.text) === \"stop\") return false;\n\n try {\n const user = this.users.get(event.user);\n const state = buildAutoReplyState(this.conversationDir(event.channel), event, {\n speaker: user?.displayName ?? user?.userName,\n resolveName: (id) => this.users.get(id)?.displayName ?? this.users.get(id)?.userName,\n botUserId: this.botUserId,\n });\n const result = await evaluateWithJev(\n state,\n { addressed: { type: \"boolean\", instructions: JEV_ADDRESSED_INSTRUCTIONS } },\n { caller: \"slack_auto_reply\" },\n );\n const probability = result.answers.addressed.probability;\n log.logInfo(\n `[${event.channel}] jev auto-reply: probability=${probability.toFixed(2)} addressed=${probability > 0.5} text=\"${event.text.slice(0, 80)}\"`,\n );\n return probability > 0.5;\n } catch (err) {\n if (err instanceof JevNotConfiguredError) {\n log.logWarning(\n \"Slack auto-reply jev mode requires OPENROUTER_API_KEY; treating message as unaddressed\",\n String(err),\n );\n return false;\n }\n reportUserFacingError(err, {\n domain: \"chat_platform\",\n surface: \"slack_auto_reply_jev\",\n operation: \"evaluate\",\n severity: \"warning\",\n context: { conversationId: event.address.conversationId },\n });\n return false;\n }\n }\n\n private async handleMessageEvent({ event, ack }: SlackSocketEventArgs): Promise<void> {\n const e = event as SlackIncomingMessage;\n if (!this.admitHumanMessage(e, ack)) return;\n\n const isDM = e.channel_type === \"im\" || e.channel.startsWith(\"D\");\n const conversationKind: ConversationKind = isDM ? \"direct\" : \"shared\";\n const isMessagingBotMention = e.text?.includes(`<@${this.botUserId}>`);\n\n if (!isDM && isMessagingBotMention) {\n ack();\n return;\n }\n\n const sessionKey = isDM ? resolveSlackSessionKey(e.channel, e.thread_ts) : undefined;\n\n if (isDM && e.thread_ts && e.text) {\n void titleAssistantThread(\n this.assistantOps(),\n this.assistantThreads,\n e.channel,\n e.thread_ts,\n this.stripOwnMention(e.text),\n );\n }\n\n const slackEvent = createConversationEvent({\n platform: \"slack\",\n conversationId: e.channel,\n type: (isDM ? \"dm\" : \"mention\") as SlackEvent[\"type\"],\n conversationKind,\n ts: e.ts,\n thread_ts: e.thread_ts,\n user: e.user,\n text: this.stripOwnMention(e.text),\n sessionKey,\n channel: e.channel,\n files: e.files,\n }) as SlackEvent;\n\n const attachmentsPromise = this.logUserMessage(slackEvent);\n\n if (this.startupTs && e.ts < this.startupTs) {\n log.logInfo(\n `[${e.channel}] Skipping old message (pre-startup): ${slackEvent.text.substring(0, 30)}`,\n );\n void attachmentsPromise.catch((err) => {\n log.logWarning(\"Failed to log Slack message\", String(err));\n });\n ack();\n return;\n }\n\n const activeSessionKey =\n slackEvent.sessionKey ?? resolveSlackSessionKey(e.channel, e.thread_ts);\n slackEvent.sessionKey = activeSessionKey;\n const taskControl =\n isDM &&\n (e.thread_ts\n ? this.isTaskThread(e.channel, e.thread_ts)\n : this.hasRunningTaskThread(e.channel) || isTaskStatusQuestion(slackEvent.text));\n if (taskControl) {\n ack();\n if (await this.deliverTaskUpdate(slackEvent, attachmentsPromise)) return;\n }\n const autoReplyMode = isDM\n ? \"off\"\n : slackConversationAutoReplyMode(this.workspace.office(slackEvent.address));\n const autoReply =\n autoReplyMode === \"on\"\n ? true\n : autoReplyMode === \"jev\"\n ? await this.evaluateJevAddressed(slackEvent)\n : false;\n const intake = this.processSlackMessageIntake({\n event: slackEvent,\n attachmentsPromise,\n queueKey: this.resolveQueueKey(e.channel, activeSessionKey),\n addressed: isDM || autoReply,\n magicWordAddressed: isDM,\n });\n\n if (!taskControl) ack();\n await intake;\n }\n\n private async handleSlashCommand({ body, ack }: SlackSocketEventArgs): Promise<void> {\n const payload = body as {\n command?: string;\n text?: string;\n channel_id?: string;\n user_id?: string;\n user_name?: string;\n thread_ts?: string;\n };\n\n await ack();\n\n if (!payload.command || !payload.channel_id || !payload.user_id) {\n return;\n }\n\n const { command, text, channel_id, user_id, user_name, thread_ts } = payload;\n const entry = COMMAND_MANIFEST.find((candidate) => candidate.slackCommand === command);\n if (!entry) return;\n\n if (!entry.slackRoute) return;\n try {\n await this.routeSlashCommand(entry.slackRoute, {\n command,\n text,\n channel_id,\n user_id,\n user_name,\n thread_ts,\n });\n } catch (err) {\n log.logWarning(\"Slack slash command error\", errorMessage(err));\n }\n }\n\n private handleAppHomeOpened({ event, ack }: SlackSocketEventArgs): void {\n const e = event as { user: string; tab: string; channel?: string; context?: AgentContext };\n ack();\n\n if (e.tab === \"messages\") {\n if (e.channel) {\n void handleAgentDmOpened(this.assistantOps(), this.assistantThreads, e.channel, e.context);\n }\n return;\n }\n if (e.tab !== \"home\") return;\n\n this.webClient.views\n .publish({\n user_id: e.user,\n view: this.buildHomeView(e.channel),\n })\n .catch((err) => {\n log.logWarning(`Failed to publish App Home view`, String(err));\n });\n }\n\n private async handleBlockAction({\n body,\n ack,\n }: {\n body: SlackBlockActionBody;\n ack: () => void;\n }): Promise<void> {\n const action = body.actions?.[0];\n if (!action) {\n ack();\n return;\n }\n\n if (!action.action_id?.startsWith(\"force_stop_\")) {\n ack();\n this.handleSlackInteraction(body, action);\n return;\n }\n\n ack();\n const sessionKey =\n action.value ?? action.action_id.replace(\"force_stop_\", \"\").replace(/_/g, \":\");\n const userId = body.user?.id;\n const channelId = body.container?.channel_id || conversationIdOf(sessionKey);\n\n log.logInfo(`[Force Stop] User ${userId} requested force stop for ${sessionKey}`);\n\n this.handler.forceStop(createOfficeAddress(\"slack\", channelId), sessionKey);\n\n await this.postMessage(channelId, formatForceStopped(\"slack\", userId ?? \"unknown\"));\n\n if (userId) {\n this.openDirectConversation(userId)\n .then((dmChannelId) =>\n this.webClient.views.publish({\n user_id: userId,\n view: this.buildHomeView(dmChannelId),\n }),\n )\n .catch((err) => {\n log.logWarning(`Failed to refresh App Home view`, String(err));\n });\n }\n }\n\n private handleSlackInteraction(body: SlackBlockActionBody, action: SlackBlockAction): void {\n const container = body.container ?? {};\n const channelId = container.channel_id;\n const userId = body.user?.id;\n if (!channelId || !userId) return;\n\n const selectedOption = action.selected_option;\n const selectedOptions = Array.isArray(action.selected_options)\n ? action.selected_options\n : undefined;\n const threadTs = container.thread_ts;\n const sessionKey = resolveSlackSessionKey(channelId, threadTs);\n\n const selectedText = selectedOption?.text?.text ?? selectedOption?.value;\n const selectedTexts = selectedOptions?.map((option) => option.text?.text ?? option.value);\n const valueText = selectedTexts?.length\n ? selectedTexts.join(\", \")\n : (selectedText ?? action.value ?? action.action_id);\n const text = `[Slack action] ${action.action_id}: ${valueText}`;\n const ts = `action:${Date.now()}`;\n\n this.logToFile(channelId, {\n date: new Date().toISOString(),\n ts,\n threadTs: threadTs || undefined,\n user: userId,\n userName: body.user?.username ?? body.user?.name,\n text,\n attachments: [],\n isMessagingBot: false,\n platform: \"slack\",\n slackInteraction: {\n type: \"block_actions\",\n actionId: action.action_id,\n blockId: action.block_id,\n actionType: action.type,\n value: action.value,\n selectedOption: selectedOption\n ? { text: selectedOption.text?.text, value: selectedOption.value }\n : undefined,\n selectedOptions: selectedOptions?.map((option) => ({\n text: option.text?.text,\n value: option.value,\n })),\n messageTs: container.message_ts,\n },\n });\n\n const event = createConversationEvent({\n platform: \"slack\",\n conversationId: channelId,\n type: \"slack_action\",\n conversationKind: channelId.startsWith(\"D\") ? \"direct\" : \"shared\",\n ts,\n user: userId,\n text,\n attachments: [],\n thread_ts: threadTs || undefined,\n sessionKey,\n });\n\n this.getQueue(this.resolveQueueKey(channelId, sessionKey)).enqueue(async () => {\n const slackEvent: SlackEvent = {\n ...createConversationEvent({\n platform: \"slack\",\n conversationId: channelId,\n type: (event.conversationKind === \"direct\" ? \"dm\" : \"mention\") as SlackEvent[\"type\"],\n conversationKind: event.conversationKind,\n ts,\n thread_ts: threadTs,\n user: userId,\n text,\n attachments: [],\n sessionKey,\n }),\n channel: channelId,\n attachments: [],\n };\n return this.handler.handleEvent(event, this, this.createContext(slackEvent));\n });\n }\n\n private async processAttachments(\n channelId: string,\n files: Array<{ name?: string; url_private_download?: string; url_private?: string }>,\n timestamp: string,\n ): Promise<Attachment[]> {\n const items = [];\n for (const file of files) {\n const url = file.url_private_download || file.url_private;\n if (!url) continue;\n if (!file.name) {\n throw new Error(`Attachment missing name for URL: ${url}`);\n }\n items.push({\n name: file.name,\n timestampMs: Math.floor(parseFloat(timestamp) * 1000),\n download: (destPath: string) => this.downloadSlackFile(url, destPath),\n });\n }\n\n const office = this.workspace.office(createOfficeAddress(\"slack\", channelId));\n const { saved, failed } = await saveIncomingAttachments(office, items);\n const firstFailure = failed[0];\n if (firstFailure) {\n const { name, error } = firstFailure;\n const errorMsg = errorMessage(error);\n throw new Error(`Failed to download attachment ${name}: ${errorMsg}`, { cause: error });\n }\n return saved;\n }\n\n private async downloadSlackFile(url: string, destPath: string): Promise<void> {\n assertSlackFileUrl(url);\n await withRetry(\n async () => {\n const response = await this.fetchFn(url, {\n headers: { Authorization: `Bearer ${this.botToken}` },\n });\n if (!response.ok) {\n throw new AttachmentDownloadHttpError(\n `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n );\n }\n await writeResponseToFile(response, destPath);\n },\n { maxAttempts: 3, baseDelayMs: 250, isRateLimited: isRetryableAttachmentDownloadError },\n );\n }\n\n private async logUserMessage(event: SlackEvent): Promise<Attachment[]> {\n const user = this.users.get(event.user);\n let attachments: Attachment[] = [];\n let attachmentError: unknown;\n if (event.files) {\n try {\n attachments = await this.processAttachments(event.channel, event.files, event.ts);\n } catch (err) {\n attachmentError = err;\n }\n }\n this.logToFile(event.channel, {\n date: new Date(parseFloat(event.ts) * 1000).toISOString(),\n ts: event.ts,\n threadTs: event.thread_ts,\n user: event.user,\n userName: user?.userName,\n displayName: user?.displayName,\n text: event.text,\n attachments,\n isMessagingBot: false,\n });\n if (attachmentError) throw attachmentError;\n return attachments;\n }\n\n private async logExternalMessagingBotMessage(event: {\n channel: string;\n ts: string;\n thread_ts?: string;\n text?: string;\n subtype?: string;\n bot_id?: string;\n app_id?: string;\n username?: string;\n bot_profile?: { app_id?: string; name?: string; real_name?: string };\n blocks?: unknown[];\n attachments?: unknown[];\n files?: Array<{ name: string; url_private_download?: string; url_private?: string }>;\n }): Promise<Attachment[]> {\n const attachments = event.files\n ? await this.processAttachments(event.channel, event.files, event.ts)\n : [];\n const botName =\n event.username ?? event.bot_profile?.name ?? event.bot_profile?.real_name ?? event.bot_id;\n this.logToFile(event.channel, {\n date: new Date(parseFloat(event.ts) * 1000).toISOString(),\n ts: event.ts,\n threadTs: event.thread_ts,\n user: event.bot_id ? `bot:${event.bot_id}` : \"external-bot\",\n userName: botName,\n displayName: botName,\n text: buildSlackAppMessageText(event),\n attachments,\n isMessagingBot: true,\n botId: event.bot_id,\n appId: event.app_id ?? event.bot_profile?.app_id,\n subtype: event.subtype,\n });\n return attachments;\n }\n\n private async getExistingTimestamps(channelId: string): Promise<Set<string>> {\n const { logPath } = this.office(channelId);\n const timestamps = new Set<string>();\n if (!existsSync(logPath)) return timestamps;\n\n const content = await readFile(logPath, \"utf-8\");\n const lines = content.trim().split(\"\\n\").filter(Boolean);\n for (let i = 0; i < lines.length; i++) {\n try {\n const entry = JSON.parse(lines[i] ?? \"\");\n if (entry.ts) timestamps.add(entry.ts);\n } catch (err) {\n log.logWarning(`Skipping malformed log entry at ${logPath}:${i + 1}`, errorMessage(err));\n }\n }\n return timestamps;\n }\n\n private isBackfillableMessage(message: SlackHistoryMessage): boolean {\n if (message.user === this.botUserId) return true;\n if (hasBotIdentity(message)) {\n if (this.botId && message.bot_id === this.botId) return false;\n return BOT_MESSAGE_SUBTYPES.has(message.subtype) && hasMessageContent(message);\n }\n return (\n !!message.user &&\n USER_MESSAGE_SUBTYPES.has(message.subtype) &&\n hasMessageContent(message, false)\n );\n }\n\n private async backfillChannel(channelId: string, upperBoundTs?: string): Promise<number> {\n const existingTs = await this.getExistingTimestamps(channelId);\n\n let lastLoggedTs: string | undefined;\n for (const ts of existingTs) {\n if (!lastLoggedTs || parseFloat(ts) > parseFloat(lastLoggedTs)) lastLoggedTs = ts;\n }\n\n const allMessages: SlackHistoryMessage[] = [];\n\n let cursor: string | undefined;\n let pageCount = 0;\n const maxPages = 3;\n\n do {\n const result = await this.webClient.conversations.history({\n channel: channelId,\n oldest: lastLoggedTs,\n latest: upperBoundTs,\n inclusive: false,\n limit: 1000,\n cursor,\n });\n if (result.messages) {\n allMessages.push(...(result.messages as SlackHistoryMessage[]));\n }\n cursor = result.response_metadata?.next_cursor;\n pageCount++;\n } while (cursor && pageCount < maxPages);\n\n const relevantMessages = allMessages.filter((msg) => {\n if (!msg.ts || existingTs.has(msg.ts)) return false;\n return this.isBackfillableMessage(msg);\n });\n\n relevantMessages.reverse();\n\n for (const msg of relevantMessages) {\n const isMikanMessage = msg.user === this.botUserId;\n const isExternalMessagingBotMessage = !isMikanMessage && hasBotIdentity(msg);\n if (isExternalMessagingBotMessage) {\n await this.logExternalMessagingBotMessage({ ...msg, channel: channelId, ts: msg.ts! });\n continue;\n }\n\n const user = this.users.get(msg.user!);\n const text = this.stripOwnMention(msg.text);\n const attachments = msg.files\n ? await this.processAttachments(channelId, msg.files, msg.ts!)\n : [];\n\n this.logToFile(channelId, {\n date: new Date(parseFloat(msg.ts!) * 1000).toISOString(),\n ts: msg.ts!,\n threadTs: msg.thread_ts,\n user: isMikanMessage ? \"bot\" : msg.user!,\n userName: isMikanMessage ? undefined : user?.userName,\n displayName: isMikanMessage ? undefined : user?.displayName,\n text,\n attachments,\n isMessagingBot: isMikanMessage,\n });\n }\n\n return relevantMessages.length;\n }\n\n private async backfillAllChannels(upperBoundTs?: string): Promise<void> {\n const startTime = Date.now();\n\n const channelsToBackfill: Array<[string, SlackChannel]> = [];\n for (const [channelId, channel] of this.channels) {\n if (existsSync(this.office(channelId).logPath)) {\n channelsToBackfill.push([channelId, channel]);\n }\n }\n\n log.logBackfillStart(channelsToBackfill.length);\n\n let totalMessages = 0;\n for (const [channelId, channel] of channelsToBackfill) {\n try {\n const count = await this.backfillChannel(channelId, upperBoundTs);\n if (count > 0) log.logBackfillChannel(channel.name, count);\n totalMessages += count;\n } catch (error) {\n log.logWarning(`Failed to backfill #${channel.name}`, String(error));\n }\n\n if (channelId !== channelsToBackfill[channelsToBackfill.length - 1]?.[0]) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n const durationMs = Date.now() - startTime;\n log.logBackfillComplete(totalMessages, durationMs);\n }\n\n private async fetchUsers(): Promise<void> {\n let cursor: string | undefined;\n do {\n const result = await this.webClient.users.list({ limit: 200, cursor });\n const members = result.members as\n | Array<{\n id?: string;\n name?: string;\n real_name?: string;\n deleted?: boolean;\n is_bot?: boolean;\n }>\n | undefined;\n for (const u of members ?? []) {\n if (!u.id || !u.name || u.deleted) continue;\n this.users.set(u.id, {\n id: u.id,\n userName: u.name,\n displayName: u.real_name || u.name,\n isBot: !!u.is_bot,\n });\n }\n cursor = result.response_metadata?.next_cursor;\n } while (cursor);\n }\n\n private async fetchChannels(): Promise<void> {\n let cursor: string | undefined;\n do {\n const result = await this.webClient.conversations.list({\n types: \"public_channel,private_channel\",\n exclude_archived: true,\n limit: 200,\n cursor,\n });\n const channels = result.channels as\n | Array<{\n id?: string;\n name?: string;\n is_member?: boolean;\n is_private?: boolean;\n is_shared?: boolean;\n is_ext_shared?: boolean;\n }>\n | undefined;\n for (const c of channels ?? []) {\n if (!c.id || !c.name || !c.is_member) continue;\n this.channels.set(c.id, {\n id: c.id,\n name: c.name,\n isPrivate: typeof c.is_private === \"boolean\" ? c.is_private : undefined,\n isExternallyShared: c.is_shared || c.is_ext_shared ? true : undefined,\n });\n }\n cursor = result.response_metadata?.next_cursor;\n } while (cursor);\n\n cursor = undefined;\n do {\n const result = await this.webClient.conversations.list({\n types: \"im\",\n limit: 200,\n cursor,\n });\n const ims = result.channels as Array<{ id?: string; user?: string }> | undefined;\n for (const im of ims ?? []) {\n if (!im.id) continue;\n const user = im.user ? this.users.get(im.user) : undefined;\n const name = user ? `DM:${user.userName}` : `DM:${im.id}`;\n this.channels.set(im.id, { id: im.id, name });\n }\n cursor = result.response_metadata?.next_cursor;\n } while (cursor);\n }\n}\n"]}
|