agent-slack 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../src/lib/version.ts", "../src/auth/brave.ts", "../src/auth/firefox-profile.ts", "../src/auth/chromium-cookie.ts", "../src/lib/object-type-guards.ts", "../src/auth/chrome.ts", "../src/auth/curl.ts", "../src/auth/desktop.ts", "../src/lib/leveldb-reader.ts", "../src/auth/desktop-crypto.ts", "../src/auth/firefox.ts", "../src/auth/paths.ts", "../src/lib/fs.ts", "../src/auth/schema.ts", "../src/auth/keychain.ts", "../src/auth/store.ts", "../src/slack/channels.ts", "../src/cli/workspace-selector.ts", "../src/slack/client.ts", "../src/cli/context-client-resolver.ts", "../src/cli/context.ts", "../src/lib/compact-json.ts", "../src/lib/redact.ts", "../src/cli/auth-command.ts", "../src/slack/files.ts", "../src/slack/html-to-md.ts", "../src/lib/tmp-paths.ts", "../src/lib/app-dir.ts", "../src/slack/canvas.ts", "../src/cli/canvas-command.ts", "../src/slack/emoji.ts", "../src/slack/mrkdwn.ts", "../src/slack/message-api-parsing.ts", "../src/slack/render-rich-text.ts", "../src/slack/render.ts", "../src/slack/message-compact.ts", "../src/slack/messages.ts", "../src/slack/url.ts", "../src/cli/targets.ts", "../src/cli/message-url-warning.ts", "../src/slack/rich-text.ts", "../src/slack/upload.ts", "../src/cli/message-file-downloads.ts", "../src/cli/message-thread-info.ts", "../src/cli/message-read-actions.ts", "../src/cli/message-actions.ts", "../src/cli/draft-server.ts", "../src/cli/draft-actions.ts", "../src/cli/message-command.ts", "../src/slack/search-query.ts", "../src/slack/search-raw.ts", "../src/slack/search-file-ext.ts", "../src/slack/search-files.ts", "../src/slack/search-messages.ts", "../src/slack/search.ts", "../src/cli/search-command.ts", "../src/lib/update.ts", "../src/cli/update-command.ts", "../src/slack/users.ts", "../src/cli/user-command.ts", "../src/slack/channel-admin.ts", "../src/cli/channel-command.ts"],
3
+ "sources": ["../src/index.ts", "../src/lib/version.ts", "../src/auth/brave.ts", "../src/auth/firefox-profile.ts", "../src/auth/chromium-cookie.ts", "../src/lib/object-type-guards.ts", "../src/auth/chrome.ts", "../src/auth/curl.ts", "../src/auth/desktop.ts", "../src/lib/leveldb-reader.ts", "../src/auth/desktop-crypto.ts", "../src/auth/firefox.ts", "../src/auth/paths.ts", "../src/lib/fs.ts", "../src/auth/schema.ts", "../src/auth/keychain.ts", "../src/auth/store.ts", "../src/slack/channels.ts", "../src/cli/workspace-selector.ts", "../src/slack/client.ts", "../src/cli/context-client-resolver.ts", "../src/cli/context.ts", "../src/lib/compact-json.ts", "../src/lib/redact.ts", "../src/cli/auth-command.ts", "../src/slack/files.ts", "../src/slack/html-to-md.ts", "../src/lib/tmp-paths.ts", "../src/lib/app-dir.ts", "../src/slack/canvas.ts", "../src/cli/canvas-command.ts", "../src/slack/emoji.ts", "../src/slack/mrkdwn.ts", "../src/slack/message-api-parsing.ts", "../src/slack/render-rich-text.ts", "../src/slack/render.ts", "../src/slack/message-compact.ts", "../src/slack/messages.ts", "../src/slack/url.ts", "../src/cli/targets.ts", "../src/cli/message-url-warning.ts", "../src/slack/rich-text.ts", "../src/slack/upload.ts", "../src/cli/message-file-downloads.ts", "../src/cli/message-thread-info.ts", "../src/slack/user-cache.ts", "../src/slack/users.ts", "../src/cli/message-read-actions.ts", "../src/cli/message-actions.ts", "../src/cli/draft-server.ts", "../src/cli/draft-actions.ts", "../src/cli/message-command.ts", "../src/slack/search-query.ts", "../src/slack/search-raw.ts", "../src/slack/search-file-ext.ts", "../src/slack/search-files.ts", "../src/slack/search-messages.ts", "../src/slack/search.ts", "../src/cli/search-command.ts", "../src/slack/later.ts", "../src/cli/later-command.ts", "../src/slack/unreads.ts", "../src/cli/unreads-command.ts", "../src/lib/update.ts", "../src/cli/update-command.ts", "../src/cli/user-command.ts", "../src/slack/channel-admin.ts", "../src/cli/channel-command.ts", "../src/slack/workflows.ts", "../src/cli/workflow-command.ts"],
4
4
  "sourcesContent": [
5
- "import { Command } from \"commander\";\nimport { getPackageVersion } from \"./lib/version.ts\";\nimport { createCliContext } from \"./cli/context.ts\";\nimport { registerAuthCommand } from \"./cli/auth-command.ts\";\nimport { registerCanvasCommand } from \"./cli/canvas-command.ts\";\nimport { registerMessageCommand } from \"./cli/message-command.ts\";\nimport { registerSearchCommand } from \"./cli/search-command.ts\";\nimport { registerUpdateCommand } from \"./cli/update-command.ts\";\nimport { registerUserCommand } from \"./cli/user-command.ts\";\nimport { registerChannelCommand } from \"./cli/channel-command.ts\";\nimport { backgroundUpdateCheck } from \"./lib/update.ts\";\n\nconst program = new Command();\nprogram\n .name(\"agent-slack\")\n .description(\"Slack automation CLI for AI agents\")\n .version(getPackageVersion());\n\nconst ctx = createCliContext();\n\nregisterAuthCommand({ program, ctx });\nregisterMessageCommand({ program, ctx });\nregisterCanvasCommand({ program, ctx });\nregisterSearchCommand({ program, ctx });\nregisterUpdateCommand({ program });\nregisterUserCommand({ program, ctx });\nregisterChannelCommand({ program, ctx });\n\nprogram.parse(process.argv);\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}\n\n// Fire-and-forget background update check (throttled to once/24h, stderr only).\n// Skip for the update command itself to avoid duplicate output.\nconst [subcommand] = process.argv.slice(2);\nif (subcommand && subcommand !== \"update\") {\n backgroundUpdateCheck();\n}\n",
5
+ "import { Command } from \"commander\";\nimport { getPackageVersion } from \"./lib/version.ts\";\nimport { createCliContext } from \"./cli/context.ts\";\nimport { registerAuthCommand } from \"./cli/auth-command.ts\";\nimport { registerCanvasCommand } from \"./cli/canvas-command.ts\";\nimport { registerMessageCommand } from \"./cli/message-command.ts\";\nimport { registerSearchCommand } from \"./cli/search-command.ts\";\nimport { registerLaterCommand } from \"./cli/later-command.ts\";\nimport { registerUnreadsCommand } from \"./cli/unreads-command.ts\";\nimport { registerUpdateCommand } from \"./cli/update-command.ts\";\nimport { registerUserCommand } from \"./cli/user-command.ts\";\nimport { registerChannelCommand } from \"./cli/channel-command.ts\";\nimport { registerWorkflowCommand } from \"./cli/workflow-command.ts\";\nimport { backgroundUpdateCheck } from \"./lib/update.ts\";\n\nconst program = new Command();\nprogram\n .name(\"agent-slack\")\n .description(\"Slack automation CLI for AI agents\")\n .version(getPackageVersion());\n\nconst ctx = createCliContext();\n\nregisterAuthCommand({ program, ctx });\nregisterMessageCommand({ program, ctx });\nregisterCanvasCommand({ program, ctx });\nregisterSearchCommand({ program, ctx });\nregisterLaterCommand({ program, ctx });\nregisterUnreadsCommand({ program, ctx });\nregisterUpdateCommand({ program });\nregisterUserCommand({ program, ctx });\nregisterChannelCommand({ program, ctx });\nregisterWorkflowCommand({ program, ctx });\n\nprogram.parse(process.argv);\nif (!process.argv.slice(2).length) {\n program.outputHelp();\n}\n\n// Fire-and-forget background update check (throttled to once/24h, stderr only).\n// Skip for the update command itself to avoid duplicate output.\nconst [subcommand] = process.argv.slice(2);\nif (subcommand && subcommand !== \"update\") {\n backgroundUpdateCheck();\n}\n",
6
6
  "import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\n// Injected at build time via --define AGENT_SLACK_BUILD_VERSION='\"x.y.z\"'\ndeclare const AGENT_SLACK_BUILD_VERSION: string | undefined;\n\nlet cachedVersion: string | undefined;\n\nexport function getPackageVersion(): string {\n if (cachedVersion !== undefined) {\n return cachedVersion;\n }\n\n // 1. Check build-time injected version (for compiled binaries)\n if (typeof AGENT_SLACK_BUILD_VERSION === \"string\" && AGENT_SLACK_BUILD_VERSION) {\n cachedVersion = AGENT_SLACK_BUILD_VERSION;\n return cachedVersion;\n }\n\n // 2. Check environment variables\n const envVersion =\n process.env.AGENT_SLACK_VERSION?.trim() || process.env.npm_package_version?.trim();\n if (envVersion) {\n cachedVersion = envVersion;\n return cachedVersion;\n }\n\n // 3. Try to read from package.json (for development)\n try {\n let dir = dirname(fileURLToPath(import.meta.url));\n for (let i = 0; i < 6; i++) {\n const candidate = join(dir, \"package.json\");\n if (existsSync(candidate)) {\n const raw = readFileSync(candidate, \"utf8\");\n const pkg = JSON.parse(raw) as { version?: unknown };\n const v = typeof pkg.version === \"string\" ? pkg.version.trim() : \"\";\n cachedVersion = v || \"0.0.0\";\n return cachedVersion;\n }\n const next = dirname(dir);\n if (next === dir) {\n break;\n }\n dir = next;\n }\n } catch {\n // fall through\n }\n\n cachedVersion = \"0.0.0\";\n return cachedVersion;\n}\n\nexport function getUserAgent(): string {\n return `agent-slack/${getPackageVersion()}`;\n}\n",
7
7
  "import { execFileSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\nimport { queryReadonlySqlite } from \"./firefox-profile.ts\";\nimport { decryptChromiumCookieValue } from \"./chromium-cookie.ts\";\nimport { isRecord } from \"../lib/object-type-guards.ts\";\n\ntype BraveExtractedTeam = { url: string; name?: string; token: string };\n\nexport type BraveExtracted = {\n cookie_d: string;\n teams: BraveExtractedTeam[];\n};\n\nconst IS_MACOS = platform() === \"darwin\";\n\n// --- AppleScript helpers (for extracting teams from Brave tabs) ---\n\nfunction osascript(script: string): string {\n return execFileSync(\"osascript\", [\"-e\", script], {\n encoding: \"utf8\",\n timeout: 7000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }).trim();\n}\n\nconst TEAM_JSON_PATHS = [\n \"JSON.stringify(JSON.parse(localStorage.localConfig_v2).teams)\",\n \"JSON.stringify(JSON.parse(localStorage.localConfig_v3).teams)\",\n \"JSON.stringify(JSON.parse(localStorage.getItem('reduxPersist:localConfig'))?.teams || {})\",\n \"JSON.stringify(window.boot_data?.teams || {})\",\n];\n\nfunction teamsScript(): string {\n const tryPaths = TEAM_JSON_PATHS.map(\n (expr) => `try { var v = ${expr}; if (v && v !== '{}' && v !== 'null') return v; } catch(e) {}`,\n );\n return `\n tell application \"Brave Browser\"\n repeat with w in windows\n repeat with t in tabs of w\n if URL of t contains \"slack.com\" then\n return execute t javascript \"(function(){ ${tryPaths.join(\" \")} return '{}'; })()\"\n end if\n end repeat\n end repeat\n return \"{}\"\n end tell\n `;\n}\n\nfunction toBraveTeam(value: unknown): BraveExtractedTeam | null {\n if (!isRecord(value)) {\n return null;\n }\n const token = typeof value.token === \"string\" ? value.token : null;\n const url = typeof value.url === \"string\" ? value.url : null;\n if (!token || !url || !token.startsWith(\"xoxc-\")) {\n return null;\n }\n const name = typeof value.name === \"string\" ? value.name : undefined;\n return { url, name, token };\n}\n\nfunction extractTeamsFromBraveTab(): BraveExtractedTeam[] {\n const teamsRaw = osascript(teamsScript());\n let teamsObj: unknown = {};\n try {\n teamsObj = JSON.parse(teamsRaw || \"{}\");\n } catch {\n teamsObj = {};\n }\n\n const teamsRecord = isRecord(teamsObj) ? teamsObj : {};\n return Object.values(teamsRecord)\n .map((t) => toBraveTeam(t))\n .filter((t): t is BraveExtractedTeam => t !== null);\n}\n\n// --- Cookie extraction from Brave's SQLite database ---\n\nconst BRAVE_COOKIES_DB = join(\n homedir(),\n \"Library\",\n \"Application Support\",\n \"BraveSoftware\",\n \"Brave-Browser\",\n \"Default\",\n \"Cookies\",\n);\n\nfunction getSafeStoragePasswords(): string[] {\n const services = [\n \"Brave Safe Storage\",\n \"Brave Browser Safe Storage\",\n \"Chrome Safe Storage\",\n \"Chromium Safe Storage\",\n ];\n const passwords: string[] = [];\n for (const service of services) {\n try {\n const out = execFileSync(\"security\", [\"find-generic-password\", \"-w\", \"-s\", service], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n if (out) {\n passwords.push(out);\n }\n } catch {\n // continue\n }\n }\n return passwords;\n}\n\nasync function extractCookieDFromBrave(): Promise<string> {\n if (!existsSync(BRAVE_COOKIES_DB)) {\n throw new Error(`Brave Cookies DB not found: ${BRAVE_COOKIES_DB}`);\n }\n\n const rows = (await queryReadonlySqlite(\n BRAVE_COOKIES_DB,\n \"select host_key, name, value, encrypted_value from cookies where name = 'd' and host_key like '%slack.com' order by length(encrypted_value) desc\",\n )) as {\n host_key: string;\n name: string;\n value: string;\n encrypted_value: Uint8Array;\n }[];\n\n if (!rows || rows.length === 0) {\n throw new Error(\"No Slack 'd' cookie found in Brave\");\n }\n const row = rows[0]!;\n if (row.value && row.value.startsWith(\"xoxd-\")) {\n return row.value;\n }\n\n const encrypted = Buffer.from(row.encrypted_value || []);\n if (encrypted.length === 0) {\n throw new Error(\"Brave Slack 'd' cookie had no encrypted_value\");\n }\n\n const prefix = encrypted.subarray(0, 3).toString(\"utf8\");\n const data = prefix === \"v10\" || prefix === \"v11\" ? encrypted.subarray(3) : encrypted;\n const passwords = getSafeStoragePasswords();\n\n for (const password of passwords) {\n try {\n const decrypted = decryptChromiumCookieValue(data, { password, iterations: 1003 });\n const match = decrypted.match(/xoxd-[A-Za-z0-9%/+_=.-]+/);\n if (match) {\n return match[0]!;\n }\n } catch {\n // continue\n }\n }\n\n throw new Error(\"Could not decrypt Slack 'd' cookie from Brave\");\n}\n\n// --- Main export ---\n\nexport async function extractFromBrave(): Promise<BraveExtracted | null> {\n if (!IS_MACOS) {\n return null;\n }\n try {\n const teams = extractTeamsFromBraveTab();\n if (teams.length === 0) {\n return null;\n }\n\n const cookie_d = await extractCookieDFromBrave();\n if (!cookie_d || !cookie_d.startsWith(\"xoxd-\")) {\n return null;\n }\n\n return { cookie_d, teams };\n } catch {\n return null;\n }\n}\n",
8
8
  "import { copyFile, mkdtemp, readdir, readFile, rm } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { homedir, platform } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport type SqliteRow = Record<string, unknown>;\n\nexport type ProfileCandidate = {\n name?: string;\n path: string;\n isDefault: boolean;\n};\n\nconst PLATFORM = platform();\nconst IS_MACOS = PLATFORM === \"darwin\";\nconst IS_LINUX = PLATFORM === \"linux\";\n\nexport function isMissingBunSqliteModule(error: unknown): boolean {\n if (!error || typeof error !== \"object\") {\n return false;\n }\n const err = error as { code?: unknown; message?: unknown };\n const code = typeof err.code === \"string\" ? err.code : \"\";\n const message = typeof err.message === \"string\" ? err.message : \"\";\n\n if (code === \"ERR_MODULE_NOT_FOUND\" || code === \"ERR_UNSUPPORTED_ESM_URL_SCHEME\") {\n return true;\n }\n if (!message.includes(\"bun:sqlite\")) {\n return false;\n }\n return (\n message.includes(\"Cannot find module\") ||\n message.includes(\"Unknown builtin module\") ||\n message.includes(\"unsupported URL scheme\") ||\n message.includes(\"Only URLs with a scheme in\")\n );\n}\n\nexport async function queryReadonlySqlite(dbPath: string, sql: string): Promise<SqliteRow[]> {\n try {\n const { Database } = await import(\"bun:sqlite\");\n const db = new Database(dbPath, { readonly: true });\n try {\n return db.query(sql).all() as SqliteRow[];\n } finally {\n db.close();\n }\n } catch (error) {\n if (!isMissingBunSqliteModule(error)) {\n throw error;\n }\n const { DatabaseSync } = await import(\"node:sqlite\");\n const db = new DatabaseSync(dbPath, { readOnly: true });\n try {\n return db.prepare(sql).all() as SqliteRow[];\n } finally {\n db.close();\n }\n }\n}\n\nexport function getFirefoxBaseDir(): string {\n if (IS_LINUX) {\n return join(homedir(), \".mozilla\", \"firefox\");\n }\n if (IS_MACOS) {\n return join(homedir(), \"Library\", \"Application Support\", \"Firefox\");\n }\n throw new Error(`Firefox extraction is not supported on ${PLATFORM}.`);\n}\n\nexport function parseProfilesIni(raw: string, baseDir: string): ProfileCandidate[] {\n const lines = raw.split(/\\r?\\n/);\n const profiles: {\n name?: string;\n path?: string;\n isRelative: boolean;\n isDefault: boolean;\n }[] = [];\n // Firefox can mark defaults either in [Profile*] (Default=1) or [Install*] sections.\n const installDefaults = new Set<string>();\n\n let section = \"\";\n let current: { name?: string; path?: string; isRelative: boolean; isDefault: boolean } | null =\n null;\n\n for (const lineRaw of lines) {\n const line = lineRaw.trim();\n if (!line || line.startsWith(\";\") || line.startsWith(\"#\")) {\n continue;\n }\n if (line.startsWith(\"[\") && line.endsWith(\"]\")) {\n if (current) {\n profiles.push(current);\n current = null;\n }\n section = line.slice(1, -1);\n if (section.startsWith(\"Profile\")) {\n current = { isRelative: true, isDefault: false };\n }\n continue;\n }\n\n const idx = line.indexOf(\"=\");\n if (idx === -1) {\n continue;\n }\n const key = line.slice(0, idx).trim();\n const value = line.slice(idx + 1).trim();\n\n if (section.startsWith(\"Profile\") && current) {\n if (key === \"Name\") {\n current.name = value;\n } else if (key === \"Path\") {\n current.path = value;\n } else if (key === \"IsRelative\") {\n current.isRelative = value !== \"0\";\n } else if (key === \"Default\") {\n current.isDefault = value === \"1\";\n }\n continue;\n }\n\n if (section.startsWith(\"Install\") && key === \"Default\" && value) {\n installDefaults.add(value);\n }\n }\n\n if (current) {\n profiles.push(current);\n }\n\n return profiles\n .filter((p) => Boolean(p.path))\n .map((p) => {\n const profilePath = p.isRelative ? join(baseDir, p.path!) : p.path!;\n return {\n name: p.name,\n path: profilePath,\n isDefault: p.isDefault || installDefaults.has(p.path!),\n };\n });\n}\n\nexport async function listProfileCandidates(): Promise<ProfileCandidate[]> {\n const baseDir = getFirefoxBaseDir();\n const iniPath = join(baseDir, \"profiles.ini\");\n const candidates: ProfileCandidate[] = [];\n\n if (existsSync(iniPath)) {\n const raw = await readFile(iniPath, \"utf8\");\n candidates.push(...parseProfilesIni(raw, baseDir));\n }\n\n // profiles.ini can be stale, so also scan profile directories as a fallback source.\n const dirName = IS_MACOS ? \"Profiles\" : baseDir;\n if (existsSync(dirName)) {\n const entries = await readdir(dirName, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) {\n continue;\n }\n const profilePath = join(dirName, entry.name);\n if (!candidates.some((c) => c.path === profilePath)) {\n candidates.push({ path: profilePath, isDefault: false });\n }\n }\n }\n\n const existing = candidates.filter((c) => existsSync(c.path));\n existing.sort((a, b) => Number(b.isDefault) - Number(a.isDefault));\n return existing;\n}\n\nexport function pickCandidatesByProfile(\n candidates: ProfileCandidate[],\n profile?: string,\n): ProfileCandidate[] {\n const selector = profile?.trim();\n if (!selector) {\n return candidates;\n }\n const normalized = selector.toLowerCase();\n const matched = candidates.filter((c) => {\n const name = c.name?.toLowerCase() ?? \"\";\n const base = c.path.split(\"/\").pop()?.toLowerCase() ?? \"\";\n const full = c.path.toLowerCase();\n return name === normalized || base === normalized || full.includes(normalized);\n });\n return matched;\n}\n\nexport async function copySqliteForRead(\n dbPath: string,\n): Promise<{ copyPath: string; cleanup: () => Promise<void> }> {\n const tmpPath = await mkdtemp(join(tmpdir(), \"agent-slack-firefox-\"));\n const base = dbPath.split(\"/\").pop() || \"db.sqlite\";\n const copyPath = join(tmpPath, base);\n await copyFile(dbPath, copyPath);\n\n // Firefox keeps recent commits in WAL/SHM while running; copy them with the DB snapshot.\n for (const suffix of [\"-wal\", \"-shm\"]) {\n const sidecar = `${dbPath}${suffix}`;\n if (!existsSync(sidecar)) {\n continue;\n }\n try {\n await copyFile(sidecar, `${copyPath}${suffix}`);\n } catch {}\n }\n\n return {\n copyPath,\n cleanup: async () => {\n try {\n await rm(tmpPath, { recursive: true, force: true });\n } catch {}\n },\n };\n}\n",
@@ -21,7 +21,7 @@
21
21
  "import { CREDENTIALS_FILE, KEYCHAIN_SERVICE } from \"./paths.ts\";\nimport { readJsonFile, writeJsonFile } from \"../lib/fs.ts\";\nimport { CredentialsSchema, type Credentials, type Workspace } from \"./schema.ts\";\nimport { keychainGet, keychainSet } from \"./keychain.ts\";\nimport { platform } from \"node:os\";\n\nconst KEYCHAIN_PLACEHOLDER = \"__KEYCHAIN__\";\nconst IS_MACOS = platform() === \"darwin\";\n\nfunction normalizeWorkspaceUrl(workspaceUrl: string): string {\n const u = new URL(workspaceUrl);\n return `${u.protocol}//${u.host}`;\n}\n\nfunction isPlaceholderSecret(value: string | undefined): boolean {\n return !value || value === KEYCHAIN_PLACEHOLDER;\n}\n\nexport async function loadCredentials(): Promise<Credentials> {\n const fromFile = await readJsonFile<unknown>(CREDENTIALS_FILE);\n const parsed = CredentialsSchema.safeParse(fromFile ?? { version: 1, workspaces: [] });\n if (!parsed.success) {\n return { version: 1, workspaces: [] };\n }\n\n // Optional: hydrate browser cookie/token from keychain for security.\n const creds = parsed.data;\n const hydrated = creds.workspaces.map((w) => {\n if (w.auth.auth_type === \"browser\") {\n const account = `xoxc:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const xoxc = keychainGet(account, KEYCHAIN_SERVICE);\n const xoxd = keychainGet(\"xoxd\", KEYCHAIN_SERVICE);\n return {\n ...w,\n auth: {\n auth_type: \"browser\" as const,\n xoxc_token: xoxc ?? w.auth.xoxc_token,\n xoxd_cookie: xoxd ?? w.auth.xoxd_cookie,\n },\n };\n }\n if (w.auth.auth_type === \"standard\") {\n const account = `token:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const token = keychainGet(account, KEYCHAIN_SERVICE);\n return {\n ...w,\n auth: {\n auth_type: \"standard\" as const,\n token: token ?? w.auth.token,\n },\n };\n }\n return w;\n });\n\n return { ...creds, workspaces: hydrated };\n}\n\nexport async function saveCredentials(credentials: Credentials): Promise<void> {\n const payload: Credentials = {\n ...credentials,\n updated_at: new Date().toISOString(),\n workspaces: credentials.workspaces.map((w) => ({\n ...w,\n workspace_url: normalizeWorkspaceUrl(w.workspace_url),\n })),\n };\n\n // Store secrets in keychain when possible and avoid writing plaintext tokens to disk.\n // If keychain writes fail (or non-macOS), fall back to storing secrets in the file.\n const filePayload: Credentials = structuredClone(payload);\n\n if (IS_MACOS) {\n // Browser auth: xoxd is shared across workspaces, xoxc is per-workspace.\n const firstBrowser = payload.workspaces.find((w) => w.auth.auth_type === \"browser\");\n let xoxdStored = false;\n if (\n firstBrowser?.auth.auth_type === \"browser\" &&\n !isPlaceholderSecret(firstBrowser.auth.xoxd_cookie)\n ) {\n const existing = keychainGet(\"xoxd\", KEYCHAIN_SERVICE);\n xoxdStored =\n existing === firstBrowser.auth.xoxd_cookie ||\n keychainSet({\n account: \"xoxd\",\n value: firstBrowser.auth.xoxd_cookie,\n service: KEYCHAIN_SERVICE,\n });\n }\n\n for (const w of filePayload.workspaces) {\n if (w.auth.auth_type === \"browser\") {\n const account = `xoxc:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const tokenStored =\n isPlaceholderSecret(w.auth.xoxc_token) ||\n keychainGet(account, KEYCHAIN_SERVICE) === w.auth.xoxc_token ||\n keychainSet({ account, value: w.auth.xoxc_token, service: KEYCHAIN_SERVICE });\n\n if (tokenStored) {\n w.auth.xoxc_token = KEYCHAIN_PLACEHOLDER;\n }\n if (xoxdStored) {\n w.auth.xoxd_cookie = KEYCHAIN_PLACEHOLDER;\n }\n }\n\n if (w.auth.auth_type === \"standard\") {\n const account = `token:${normalizeWorkspaceUrl(w.workspace_url)}`;\n const tokenStored =\n isPlaceholderSecret(w.auth.token) ||\n keychainGet(account, KEYCHAIN_SERVICE) === w.auth.token ||\n keychainSet({ account, value: w.auth.token, service: KEYCHAIN_SERVICE });\n if (tokenStored) {\n w.auth.token = KEYCHAIN_PLACEHOLDER;\n }\n }\n }\n }\n\n await writeJsonFile(CREDENTIALS_FILE, filePayload);\n}\n\nexport async function upsertWorkspace(workspace: Workspace): Promise<Workspace> {\n const creds = await loadCredentials();\n const normalizedUrl = normalizeWorkspaceUrl(workspace.workspace_url);\n const next: Workspace = { ...workspace, workspace_url: normalizedUrl };\n\n const idx = creds.workspaces.findIndex(\n (w) => normalizeWorkspaceUrl(w.workspace_url) === normalizedUrl,\n );\n if (idx === -1) {\n creds.workspaces.push(next);\n } else {\n creds.workspaces[idx] = {\n ...creds.workspaces[idx],\n ...next,\n auth: next.auth,\n };\n }\n\n if (!creds.default_workspace_url) {\n creds.default_workspace_url = normalizedUrl;\n }\n await saveCredentials(creds);\n return next;\n}\n\nexport async function upsertWorkspaces(workspaces: Workspace[]): Promise<void> {\n if (workspaces.length === 0) {\n return;\n }\n const creds = await loadCredentials();\n\n for (const workspace of workspaces) {\n const normalizedUrl = normalizeWorkspaceUrl(workspace.workspace_url);\n const next: Workspace = { ...workspace, workspace_url: normalizedUrl };\n\n const idx = creds.workspaces.findIndex(\n (w) => normalizeWorkspaceUrl(w.workspace_url) === normalizedUrl,\n );\n if (idx === -1) {\n creds.workspaces.push(next);\n } else {\n creds.workspaces[idx] = {\n ...creds.workspaces[idx],\n ...next,\n auth: next.auth,\n };\n }\n\n if (!creds.default_workspace_url) {\n creds.default_workspace_url = normalizedUrl;\n }\n }\n\n await saveCredentials(creds);\n}\n\nexport async function setDefaultWorkspace(workspaceUrl: string): Promise<void> {\n const creds = await loadCredentials();\n creds.default_workspace_url = normalizeWorkspaceUrl(workspaceUrl);\n await saveCredentials(creds);\n}\n\nexport async function removeWorkspace(workspaceUrl: string): Promise<void> {\n const creds = await loadCredentials();\n const normalized = normalizeWorkspaceUrl(workspaceUrl);\n creds.workspaces = creds.workspaces.filter(\n (w) => normalizeWorkspaceUrl(w.workspace_url) !== normalized,\n );\n if (creds.default_workspace_url === normalized) {\n creds.default_workspace_url = creds.workspaces[0]?.workspace_url;\n }\n await saveCredentials(creds);\n}\n\nexport async function resolveWorkspaceForUrl(workspaceUrl: string): Promise<Workspace | null> {\n const creds = await loadCredentials();\n const normalized = normalizeWorkspaceUrl(workspaceUrl);\n return (\n creds.workspaces.find((w) => normalizeWorkspaceUrl(w.workspace_url) === normalized) ?? null\n );\n}\n\nexport async function resolveDefaultWorkspace(): Promise<Workspace | null> {\n const creds = await loadCredentials();\n if (creds.default_workspace_url) {\n const byDefault = creds.workspaces.find((w) => w.workspace_url === creds.default_workspace_url);\n if (byDefault) {\n return byDefault;\n }\n }\n return creds.workspaces[0] ?? null;\n}\n\n// (reserved for future non-secret per-workspace metadata)\n",
22
22
  "import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nconst DEFAULT_CONVERSATION_TYPES = \"public_channel,private_channel,im,mpim\";\n\nexport type ConversationsPage = {\n channels: Record<string, unknown>[];\n next_cursor?: string;\n};\n\nexport function isChannelId(input: string): boolean {\n return /^[CDG][A-Z0-9]{8,}$/.test(input);\n}\n\nexport function isUserId(input: string): boolean {\n return /^U[A-Z0-9]{8,}$/.test(input);\n}\n\n/**\n * Open (or reuse) a DM channel with a user via conversations.open.\n * Returns the DM channel ID.\n */\nexport async function openDmChannel(client: SlackApiClient, userId: string): Promise<string> {\n const resp = await client.api(\"conversations.open\", { users: userId });\n const channel = isRecord(resp) ? resp.channel : null;\n const channelId = isRecord(channel) ? getString(channel.id) : undefined;\n if (!channelId) {\n throw new Error(`Could not open DM channel for user: ${userId}`);\n }\n return channelId;\n}\n\nexport function normalizeChannelInput(input: string): {\n kind: \"id\" | \"name\";\n value: string;\n} {\n const trimmed = input.trim();\n if (trimmed.startsWith(\"#\")) {\n return { kind: \"name\", value: trimmed.slice(1) };\n }\n if (isChannelId(trimmed)) {\n return { kind: \"id\", value: trimmed };\n }\n return { kind: \"name\", value: trimmed };\n}\n\nexport async function resolveChannelId(client: SlackApiClient, input: string): Promise<string> {\n const normalized = normalizeChannelInput(input);\n if (normalized.kind === \"id\") {\n return normalized.value;\n }\n\n const name = normalized.value;\n if (!name) {\n throw new Error(\"Channel name is empty\");\n }\n\n // Slack has no name→ID lookup API. conversations.list paginates the entire\n // workspace (200 at a time), which is O(channels) API calls — 3+ minutes in\n // large workspaces. search.messages with `in:#name` resolves it in one call\n // by returning a message whose metadata includes the channel ID.\n try {\n const searchResp = await client.api(\"search.messages\", {\n query: `in:#${name}`,\n count: 1,\n sort: \"timestamp\",\n sort_dir: \"desc\",\n });\n const messages = isRecord(searchResp) ? searchResp.messages : null;\n const matches = isRecord(messages) ? asArray(messages.matches).filter(isRecord) : [];\n if (matches.length > 0) {\n const channel = isRecord(matches[0]!.channel) ? matches[0]!.channel : null;\n const channelId = channel ? getString(channel.id) : undefined;\n if (channelId) {\n return channelId;\n }\n }\n } catch {\n // search may fail (e.g. token lacks search:read scope) — fall through to pagination\n }\n\n // Fallback: paginate conversations.list until we find a match\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.list\", {\n exclude_archived: true,\n limit: 200,\n cursor,\n types: \"public_channel,private_channel\",\n });\n const chans = asArray(resp.channels).filter(isRecord);\n for (const c of chans) {\n if (getString(c.name) === name && getString(c.id)) {\n return getString(c.id)!;\n }\n }\n\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n\n throw new Error(`Could not resolve channel name: #${name}`);\n}\n\n/**\n * Resolve a channel/DM ID to a human-readable name via conversations.info.\n * Returns the channel name (e.g. \"general\") or DM user's display name,\n * falling back to the raw ID on failure.\n */\nexport async function resolveChannelName(\n client: SlackApiClient,\n channelId: string,\n): Promise<string> {\n try {\n const resp = await client.api(\"conversations.info\", { channel: channelId });\n const channel = isRecord(resp) ? resp.channel : null;\n if (!isRecord(channel)) {\n return channelId;\n }\n\n // DM: resolve the other user's name\n if (channel.is_im) {\n const userId = getString(channel.user);\n if (userId) {\n try {\n const userResp = await client.api(\"users.info\", { user: userId });\n const user = isRecord(userResp) ? userResp.user : null;\n const profile = isRecord(user) ? user.profile : null;\n if (isRecord(profile)) {\n return getString(profile.display_name) || getString(profile.real_name) || channelId;\n }\n } catch {\n // fall through\n }\n }\n return channelId;\n }\n\n return getString(channel.name) || channelId;\n } catch {\n return channelId;\n }\n}\n\ntype ListConversationsOptions = {\n limit?: number;\n cursor?: string;\n types?: string;\n excludeArchived?: boolean;\n};\n\nexport async function listUserConversations(\n client: SlackApiClient,\n options?: ListConversationsOptions & { user?: string },\n): Promise<ConversationsPage> {\n const resp = await client.api(\"users.conversations\", {\n user: options?.user,\n limit: normalizeConversationsLimit(options?.limit),\n cursor: options?.cursor,\n types: options?.types ?? DEFAULT_CONVERSATION_TYPES,\n exclude_archived: options?.excludeArchived ?? true,\n });\n return normalizeConversationsPage(resp);\n}\n\nexport async function listAllConversations(\n client: SlackApiClient,\n options?: ListConversationsOptions,\n): Promise<ConversationsPage> {\n const resp = await client.api(\"conversations.list\", {\n limit: normalizeConversationsLimit(options?.limit),\n cursor: options?.cursor,\n types: options?.types ?? DEFAULT_CONVERSATION_TYPES,\n exclude_archived: options?.excludeArchived ?? true,\n });\n return normalizeConversationsPage(resp);\n}\n\nexport function normalizeConversationsPage(resp: Record<string, unknown>): ConversationsPage {\n const channels = asArray(resp.channels).filter(isRecord);\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n return { channels, next_cursor: next };\n}\n\nfunction normalizeConversationsLimit(value: number | undefined): number {\n return Math.min(Math.max(value ?? 100, 1), 1000);\n}\n\nexport async function markConversation(\n client: SlackApiClient,\n options: { channelId: string; ts: string },\n): Promise<void> {\n const { channelId, ts } = options;\n await client.api(\"conversations.mark\", { channel: channelId, ts });\n}\n",
23
23
  "import type { Workspace } from \"../auth/schema.ts\";\n\nexport type WorkspaceSelectorResult = {\n match: Workspace | null;\n ambiguous: Workspace[];\n};\n\nfunction normalizeUrl(u: string): string {\n const url = new URL(u);\n return `${url.protocol}//${url.host}`;\n}\n\nfunction normalizedWorkspaceCandidates(workspace: Workspace): string[] {\n let host = \"\";\n try {\n host = new URL(workspace.workspace_url).host.toLowerCase();\n } catch {\n host = \"\";\n }\n const hostWithoutSlackSuffix = host.replace(/\\.slack\\.com$/i, \"\");\n return [\n workspace.workspace_url.toLowerCase(),\n host,\n hostWithoutSlackSuffix,\n workspace.workspace_name?.toLowerCase() ?? \"\",\n workspace.team_domain?.toLowerCase() ?? \"\",\n ].filter(Boolean);\n}\n\nexport function resolveWorkspaceSelector(\n workspaces: Workspace[],\n selector: string,\n): WorkspaceSelectorResult {\n const raw = selector.trim();\n if (!raw) {\n return { match: null, ambiguous: [] };\n }\n\n try {\n const normalized = normalizeUrl(raw).toLowerCase();\n const exact = workspaces.find((w) => w.workspace_url.toLowerCase() === normalized);\n if (exact) {\n return { match: exact, ambiguous: [] };\n }\n } catch {\n // Not a URL selector; continue with fuzzy matching.\n }\n\n const needle = raw.toLowerCase();\n const matches = workspaces.filter((workspace) =>\n normalizedWorkspaceCandidates(workspace).some((candidate) => candidate.includes(needle)),\n );\n if (matches.length === 1) {\n return { match: matches[0]!, ambiguous: [] };\n }\n if (matches.length > 1) {\n return { match: null, ambiguous: matches };\n }\n return { match: null, ambiguous: [] };\n}\n",
24
- "import { WebClient } from \"@slack/web-api\";\nimport { getUserAgent } from \"../lib/version.ts\";\n\nexport type SlackAuth =\n | { auth_type: \"standard\"; token: string }\n | { auth_type: \"browser\"; xoxc_token: string; xoxd_cookie: string };\n\nexport class SlackApiClient {\n private auth: SlackAuth;\n private web?: WebClient;\n private workspaceUrl?: string;\n\n constructor(auth: SlackAuth, options?: { workspaceUrl?: string }) {\n this.auth = auth;\n this.workspaceUrl = options?.workspaceUrl;\n if (auth.auth_type === \"standard\") {\n this.web = new WebClient(auth.token);\n }\n }\n\n async api(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>> {\n if (this.auth.auth_type === \"standard\") {\n if (!this.web) {\n throw new Error(\"WebClient not initialized\");\n }\n return (await this.web.apiCall(method, params)) as unknown as Record<string, unknown>;\n }\n\n if (!this.workspaceUrl) {\n throw new Error(\n \"Browser auth requires workspace URL. Provide --workspace-url or set SLACK_WORKSPACE_URL, or call via a Slack message URL.\",\n );\n }\n const { auth } = this;\n if (auth.auth_type !== \"browser\") {\n throw new Error(\"Browser API requires browser auth\");\n }\n return this.browserApi({\n workspaceUrl: this.workspaceUrl,\n auth,\n method,\n params,\n });\n }\n\n private async browserApi(input: {\n workspaceUrl: string;\n auth: Extract<SlackAuth, { auth_type: \"browser\" }>;\n method: string;\n params: Record<string, unknown>;\n attempt?: number;\n }): Promise<Record<string, unknown>> {\n const attempt = input.attempt ?? 0;\n const url = `${input.workspaceUrl.replace(/\\/$/, \"\")}/api/${input.method}`;\n const cleanedEntries = Object.entries(input.params)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, typeof v === \"object\" ? JSON.stringify(v) : String(v)]);\n const formBody = new URLSearchParams({\n token: input.auth.xoxc_token,\n ...Object.fromEntries(cleanedEntries),\n });\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Cookie: `d=${encodeURIComponent(input.auth.xoxd_cookie)}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Origin: \"https://app.slack.com\",\n \"User-Agent\": getUserAgent(),\n },\n body: formBody,\n });\n\n if (response.status === 429 && attempt < 3) {\n const retryAfter = Number(response.headers.get(\"Retry-After\") ?? \"5\");\n const delayMs = Math.min(Math.max(retryAfter, 1) * 1000, 30000);\n await new Promise((r) => setTimeout(r, delayMs));\n return this.browserApi({\n ...input,\n attempt: attempt + 1,\n });\n }\n\n const data: unknown = await response.json().catch(() => ({}));\n if (!response.ok) {\n throw new Error(`Slack HTTP ${response.status} calling ${input.method}`);\n }\n if (!isRecord(data) || data.ok !== true) {\n const error = isRecord(data) && typeof data.error === \"string\" ? data.error : null;\n throw new Error(error || `Slack API error calling ${input.method}`);\n }\n return data;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n",
24
+ "import { WebClient } from \"@slack/web-api\";\nimport { getUserAgent } from \"../lib/version.ts\";\n\nexport type SlackAuth =\n | { auth_type: \"standard\"; token: string }\n | { auth_type: \"browser\"; xoxc_token: string; xoxd_cookie: string };\n\nexport class SlackApiClient {\n private auth: SlackAuth;\n private web?: WebClient;\n private workspaceUrl?: string;\n\n constructor(auth: SlackAuth, options?: { workspaceUrl?: string }) {\n this.auth = auth;\n this.workspaceUrl = options?.workspaceUrl;\n if (auth.auth_type === \"standard\") {\n this.web = new WebClient(auth.token);\n }\n }\n\n /**\n * Call a Slack API method using multipart/form-data encoding.\n * Some internal Slack APIs (e.g. saved.update) require multipart encoding\n * and silently ignore parameters sent as application/x-www-form-urlencoded.\n */\n async apiMultipart(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>> {\n if (this.auth.auth_type === \"standard\") {\n // Standard tokens can use the normal API path\n return this.api(method, params);\n }\n if (!this.workspaceUrl) {\n throw new Error(\"Browser auth requires workspace URL.\");\n }\n const auth = this.auth as Extract<SlackAuth, { auth_type: \"browser\" }>;\n const url = `${this.workspaceUrl.replace(/\\/$/, \"\")}/api/${method}`;\n const fd = new FormData();\n fd.append(\"token\", auth.xoxc_token);\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n fd.append(k, typeof v === \"object\" ? JSON.stringify(v) : String(v));\n }\n }\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Cookie: `d=${encodeURIComponent(auth.xoxd_cookie)}`,\n Origin: \"https://app.slack.com\",\n \"User-Agent\": getUserAgent(),\n },\n body: fd,\n });\n const data: unknown = await response.json().catch(() => ({}));\n if (!response.ok) {\n throw new Error(`Slack HTTP ${response.status} calling ${method}`);\n }\n if (!isRecord(data) || data.ok !== true) {\n const error = isRecord(data) && typeof data.error === \"string\" ? data.error : null;\n throw new Error(error || `Slack API error calling ${method}`);\n }\n return data;\n }\n\n async api(\n method: string,\n params: Record<string, unknown> = {},\n ): Promise<Record<string, unknown>> {\n if (this.auth.auth_type === \"standard\") {\n if (!this.web) {\n throw new Error(\"WebClient not initialized\");\n }\n return (await this.web.apiCall(method, params)) as unknown as Record<string, unknown>;\n }\n\n if (!this.workspaceUrl) {\n throw new Error(\n \"Browser auth requires workspace URL. Provide --workspace-url or set SLACK_WORKSPACE_URL, or call via a Slack message URL.\",\n );\n }\n const { auth } = this;\n if (auth.auth_type !== \"browser\") {\n throw new Error(\"Browser API requires browser auth\");\n }\n return this.browserApi({\n workspaceUrl: this.workspaceUrl,\n auth,\n method,\n params,\n });\n }\n\n private async browserApi(input: {\n workspaceUrl: string;\n auth: Extract<SlackAuth, { auth_type: \"browser\" }>;\n method: string;\n params: Record<string, unknown>;\n attempt?: number;\n }): Promise<Record<string, unknown>> {\n const attempt = input.attempt ?? 0;\n const url = `${input.workspaceUrl.replace(/\\/$/, \"\")}/api/${input.method}`;\n const cleanedEntries = Object.entries(input.params)\n .filter(([, v]) => v !== undefined)\n .map(([k, v]) => [k, typeof v === \"object\" ? JSON.stringify(v) : String(v)]);\n const formBody = new URLSearchParams({\n token: input.auth.xoxc_token,\n ...Object.fromEntries(cleanedEntries),\n });\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Cookie: `d=${encodeURIComponent(input.auth.xoxd_cookie)}`,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Origin: \"https://app.slack.com\",\n \"User-Agent\": getUserAgent(),\n },\n body: formBody,\n });\n\n if (response.status === 429 && attempt < 3) {\n const retryAfter = Number(response.headers.get(\"Retry-After\") ?? \"5\");\n const delayMs = Math.min(Math.max(retryAfter, 1) * 1000, 30000);\n await new Promise((r) => setTimeout(r, delayMs));\n return this.browserApi({\n ...input,\n attempt: attempt + 1,\n });\n }\n\n const data: unknown = await response.json().catch(() => ({}));\n if (!response.ok) {\n throw new Error(`Slack HTTP ${response.status} calling ${input.method}`);\n }\n if (!isRecord(data) || data.ok !== true) {\n const error = isRecord(data) && typeof data.error === \"string\" ? data.error : null;\n throw new Error(error || `Slack API error calling ${input.method}`);\n }\n return data;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n",
25
25
  "import { extractFromBrave } from \"../auth/brave.ts\";\nimport { extractFromChrome } from \"../auth/chrome.ts\";\nimport { extractFromSlackDesktop } from \"../auth/desktop.ts\";\nimport { extractFromFirefox } from \"../auth/firefox.ts\";\nimport {\n loadCredentials,\n resolveDefaultWorkspace,\n resolveWorkspaceForUrl,\n upsertWorkspace,\n upsertWorkspaces,\n} from \"../auth/store.ts\";\nimport { resolveWorkspaceSelector } from \"./workspace-selector.ts\";\nimport { SlackApiClient, type SlackAuth } from \"../slack/client.ts\";\n\nexport function normalizeUrl(u: string): string {\n const url = new URL(u);\n return `${url.protocol}//${url.host}`;\n}\n\nfunction tryNormalizeUrl(u: string): string | undefined {\n try {\n return normalizeUrl(u);\n } catch {\n return undefined;\n }\n}\n\nfunction pickAuthFromEnv(): SlackAuth | null {\n const token = process.env.SLACK_TOKEN?.trim();\n if (!token) {\n return null;\n }\n if (token.startsWith(\"xoxc-\")) {\n const cookie = (process.env.SLACK_COOKIE_D || process.env.SLACK_COOKIE || \"\").trim();\n if (!cookie) {\n throw new Error(\"SLACK_TOKEN looks like xoxc- but SLACK_COOKIE_D is missing\");\n }\n return { auth_type: \"browser\", xoxc_token: token, xoxd_cookie: cookie };\n }\n return { auth_type: \"standard\", token };\n}\n\nexport async function getClientForWorkspace(workspaceUrl?: string): Promise<{\n client: SlackApiClient;\n auth: SlackAuth;\n workspace_url?: string;\n}> {\n const selector = workspaceUrl?.trim() || undefined;\n const normalizedSelectorUrl = selector ? tryNormalizeUrl(selector) : undefined;\n const selectorProvided = Boolean(selector);\n let resolvedWorkspaceUrl = normalizedSelectorUrl;\n if (selector) {\n const creds = await loadCredentials();\n const resolved = resolveWorkspaceSelector(creds.workspaces, selector);\n if (resolved.ambiguous.length > 0) {\n const options = resolved.ambiguous.map((w) => w.workspace_url).join(\", \");\n throw new Error(\n `Workspace selector \"${selector}\" is ambiguous. Matches: ${options}. Pass a more specific selector or full workspace URL.`,\n );\n }\n if (resolved.match) {\n resolvedWorkspaceUrl = resolved.match.workspace_url;\n } else if (!normalizedSelectorUrl) {\n resolvedWorkspaceUrl = undefined;\n }\n }\n\n const env = pickAuthFromEnv();\n if (env) {\n const envWorkspaceUrl = process.env.SLACK_WORKSPACE_URL?.trim();\n const urlForBrowser = resolvedWorkspaceUrl || envWorkspaceUrl;\n return {\n client: new SlackApiClient(env, { workspaceUrl: urlForBrowser }),\n auth: env,\n workspace_url: urlForBrowser,\n };\n }\n\n if (resolvedWorkspaceUrl) {\n const ws = await resolveWorkspaceForUrl(resolvedWorkspaceUrl);\n if (ws) {\n return {\n client: new SlackApiClient(ws.auth as SlackAuth, {\n workspaceUrl: ws.workspace_url,\n }),\n auth: ws.auth as SlackAuth,\n workspace_url: ws.workspace_url,\n };\n }\n }\n\n if (!selectorProvided) {\n const def = await resolveDefaultWorkspace();\n if (def) {\n return {\n client: new SlackApiClient(def.auth as SlackAuth, {\n workspaceUrl: def.workspace_url,\n }),\n auth: def.auth as SlackAuth,\n workspace_url: def.workspace_url,\n };\n }\n }\n\n try {\n const extracted = await extractFromSlackDesktop();\n await upsertWorkspaces(\n extracted.teams.map((team) => ({\n workspace_url: normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\" as const,\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n })),\n );\n\n const desired = resolvedWorkspaceUrl\n ? await resolveWorkspaceForUrl(resolvedWorkspaceUrl)\n : selector\n ? resolveWorkspaceSelector((await loadCredentials()).workspaces, selector).match\n : await resolveDefaultWorkspace();\n const chosen = desired ?? (!selectorProvided ? await resolveDefaultWorkspace() : null);\n if (chosen) {\n return {\n client: new SlackApiClient(chosen.auth as SlackAuth, {\n workspaceUrl: chosen.workspace_url,\n }),\n auth: chosen.auth as SlackAuth,\n workspace_url: chosen.workspace_url,\n };\n }\n } catch {\n // Fall through to Chrome extraction.\n }\n\n // Fallback: try Chrome, Brave, then Firefox extraction.\n const browserSources: {\n cookie_d: string;\n teams: { url: string; name?: string; token: string }[];\n }[] = [];\n const chromeResult = extractFromChrome();\n if (chromeResult && chromeResult.teams.length > 0) {\n browserSources.push(chromeResult);\n }\n const braveResult = await extractFromBrave();\n if (braveResult && braveResult.teams.length > 0) {\n browserSources.push(braveResult);\n }\n const firefoxResult = await extractFromFirefox();\n if (firefoxResult && firefoxResult.teams.length > 0) {\n browserSources.push(firefoxResult);\n }\n\n for (const source of browserSources) {\n const result = await matchAndUpsertBrowserTeam({\n teams: source.teams,\n cookieD: source.cookie_d,\n selector,\n normalizedSelectorUrl,\n });\n if (result) {\n return result;\n }\n }\n\n if (selector && !normalizedSelectorUrl) {\n throw new Error(\n `No configured workspace matches selector \"${selector}\". Run \"agent-slack auth whoami\" to list available workspaces.`,\n );\n }\n\n throw new Error(\n 'No Slack credentials available. Try \"agent-slack auth import-desktop\", \"agent-slack auth import-chrome\", \"agent-slack auth import-brave\", \"agent-slack auth import-firefox\", or set SLACK_TOKEN / SLACK_COOKIE_D.',\n );\n}\n\nasync function matchAndUpsertBrowserTeam(input: {\n teams: { url: string; name?: string; token: string }[];\n cookieD: string;\n selector: string | undefined;\n normalizedSelectorUrl: string | undefined;\n}): Promise<{ client: SlackApiClient; auth: SlackAuth; workspace_url: string } | null> {\n const { teams, cookieD, selector, normalizedSelectorUrl } = input;\n let chosen = teams[0]!;\n\n if (selector) {\n const normalizedSelector = selector.toLowerCase();\n const matches = teams.filter((t) => {\n const normalizedUrl = normalizeUrl(t.url).toLowerCase();\n const host = new URL(t.url).host.toLowerCase();\n const hostWithoutSlackSuffix = host.replace(/\\.slack\\.com$/i, \"\");\n const name = t.name?.toLowerCase() ?? \"\";\n return (\n normalizedUrl.includes(normalizedSelector) ||\n host.includes(normalizedSelector) ||\n hostWithoutSlackSuffix.includes(normalizedSelector) ||\n name.includes(normalizedSelector)\n );\n });\n if (matches.length > 1) {\n throw new Error(\n `Workspace selector \"${selector}\" is ambiguous. Matches: ${matches.map((t) => normalizeUrl(t.url)).join(\", \")}. Pass a more specific selector or full workspace URL.`,\n );\n }\n if (matches.length === 1) {\n chosen = matches[0]!;\n } else if (normalizedSelectorUrl) {\n const exact = teams.find((t) => {\n try {\n return normalizeUrl(t.url) === normalizeUrl(selector);\n } catch {\n return false;\n }\n });\n if (exact) {\n chosen = exact;\n } else {\n return null;\n }\n } else {\n return null;\n }\n }\n\n const auth: SlackAuth = {\n auth_type: \"browser\",\n xoxc_token: chosen.token,\n xoxd_cookie: cookieD,\n };\n const workspaceUrl = normalizeUrl(chosen.url);\n await upsertWorkspace({\n workspace_url: workspaceUrl,\n workspace_name: chosen.name,\n auth: {\n auth_type: \"browser\",\n xoxc_token: chosen.token,\n xoxd_cookie: cookieD,\n },\n });\n return {\n client: new SlackApiClient(auth, { workspaceUrl }),\n auth,\n workspace_url: workspaceUrl,\n };\n}\n",
26
26
  "import { extractFromBrave } from \"../auth/brave.ts\";\nimport { extractFromChrome } from \"../auth/chrome.ts\";\nimport { parseSlackCurlCommand } from \"../auth/curl.ts\";\nimport { extractFromSlackDesktop } from \"../auth/desktop.ts\";\nimport { extractFromFirefox } from \"../auth/firefox.ts\";\nimport { loadCredentials, upsertWorkspaces } from \"../auth/store.ts\";\nimport { normalizeChannelInput } from \"../slack/channels.ts\";\nimport type { SlackApiClient } from \"../slack/client.ts\";\nimport { type SlackAuth } from \"../slack/client.ts\";\nimport { getClientForWorkspace, normalizeUrl } from \"./context-client-resolver.ts\";\n\nexport type CliContext = {\n effectiveWorkspaceUrl: (flag?: string) => string | undefined;\n assertWorkspaceSpecifiedForChannelNames: (input: {\n workspaceUrl: string | undefined;\n channels: string[];\n }) => Promise<void>;\n withAutoRefresh: <T>(input: {\n workspaceUrl: string | undefined;\n work: () => Promise<T>;\n }) => Promise<T>;\n getClientForWorkspace: (workspaceUrl?: string) => Promise<{\n client: SlackApiClient;\n auth: SlackAuth;\n workspace_url?: string;\n }>;\n normalizeUrl: (u: string) => string;\n errorMessage: (err: unknown) => string;\n parseContentType: (value: unknown) => \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n parseCurl: (curl: string) => ReturnType<typeof parseSlackCurlCommand>;\n importDesktop: () => ReturnType<typeof extractFromSlackDesktop>;\n importChrome: () => ReturnType<typeof extractFromChrome>;\n importBrave: () => ReturnType<typeof extractFromBrave>;\n importFirefox: () => ReturnType<typeof extractFromFirefox>;\n};\n\nfunction isEnvAuthConfigured(): boolean {\n return Boolean(process.env.SLACK_TOKEN?.trim());\n}\n\nfunction effectiveWorkspaceUrl(flag?: string): string | undefined {\n return flag?.trim() || process.env.SLACK_WORKSPACE_URL?.trim() || undefined;\n}\n\nfunction errorMessage(err: unknown): string {\n return err instanceof Error ? err.message : String(err);\n}\n\nfunction parseContentType(value: unknown): \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\" {\n const raw = String(value ?? \"any\").toLowerCase();\n if (raw === \"text\" || raw === \"image\" || raw === \"snippet\" || raw === \"file\") {\n return raw;\n }\n return \"any\";\n}\n\nasync function assertWorkspaceSpecifiedForChannelNames(input: {\n workspaceUrl: string | undefined;\n channels: string[];\n}): Promise<void> {\n const hasName = input.channels.some((c) => normalizeChannelInput(c).kind === \"name\");\n if (!hasName) {\n return;\n }\n\n const creds = await loadCredentials();\n if ((creds.workspaces?.length ?? 0) <= 1) {\n return;\n }\n\n if (!input.workspaceUrl) {\n throw new Error(\n 'Ambiguous channel name across multiple workspaces. Pass --workspace \"<url-or-unique-substring>\" (or set SLACK_WORKSPACE_URL).',\n );\n }\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n return /(?:^|[^a-z])(invalid_auth|token_expired)(?:$|[^a-z])/i.test(message);\n}\n\nasync function refreshFromDesktopIfPossible(): Promise<boolean> {\n if (\n process.platform !== \"darwin\" &&\n process.platform !== \"linux\" &&\n process.platform !== \"win32\"\n ) {\n return false;\n }\n try {\n const extracted = await extractFromSlackDesktop();\n await upsertWorkspaces(\n extracted.teams.map((team) => ({\n workspace_url: normalizeUrl(team.url),\n workspace_name: team.name,\n auth: {\n auth_type: \"browser\" as const,\n xoxc_token: team.token,\n xoxd_cookie: extracted.cookie_d,\n },\n })),\n );\n return true;\n } catch {\n return false;\n }\n}\n\nasync function withAutoRefresh<T>(input: {\n workspaceUrl: string | undefined;\n work: () => Promise<T>;\n}): Promise<T> {\n try {\n return await input.work();\n } catch (err: unknown) {\n const message = errorMessage(err);\n if (isEnvAuthConfigured()) {\n throw err;\n }\n if (!isAuthErrorMessage(message)) {\n throw err;\n }\n\n const refreshed = await refreshFromDesktopIfPossible();\n if (!refreshed) {\n throw err;\n }\n return await input.work();\n }\n}\n\nexport function createCliContext(): CliContext {\n return {\n effectiveWorkspaceUrl,\n assertWorkspaceSpecifiedForChannelNames,\n withAutoRefresh,\n getClientForWorkspace,\n normalizeUrl,\n errorMessage,\n parseContentType,\n parseCurl: parseSlackCurlCommand,\n importDesktop: extractFromSlackDesktop,\n importChrome: extractFromChrome,\n importBrave: extractFromBrave,\n importFirefox: extractFromFirefox,\n };\n}\n",
27
27
  "export function pruneEmpty<T>(value: T): T {\n const pruned = pruneEmptyInternal(value);\n return (pruned === undefined ? ({} as T) : (pruned as T)) as T;\n}\n\nfunction pruneEmptyInternal(value: unknown): unknown {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value === \"string\") {\n return value.trim() === \"\" ? undefined : value;\n }\n\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (Array.isArray(value)) {\n const next = value\n .map((v) => pruneEmptyInternal(v))\n .filter((v): v is Exclude<unknown, undefined> => v !== undefined);\n return next.length === 0 ? undefined : next;\n }\n\n if (typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n const next = pruneEmptyInternal(v);\n if (next !== undefined) {\n out[k] = next;\n }\n }\n return Object.keys(out).length === 0 ? undefined : out;\n }\n\n return value;\n}\n",
@@ -38,7 +38,7 @@
38
38
  "import type { SlackApiClient } from \"./client.ts\";\nimport type { SlackFileSummary } from \"./messages.ts\";\nimport { getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport function toSlackFileSummary(value: unknown): SlackFileSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = getString(value.id);\n if (!id) {\n return null;\n }\n return {\n id,\n name: getString(value.name),\n title: getString(value.title),\n mimetype: getString(value.mimetype),\n filetype: getString(value.filetype),\n mode: getString(value.mode),\n permalink: getString(value.permalink),\n url_private: getString(value.url_private),\n url_private_download: getString(value.url_private_download),\n size: getNumber(value.size),\n };\n}\n\nexport async function enrichFiles(\n client: SlackApiClient,\n files: SlackFileSummary[],\n): Promise<SlackFileSummary[]> {\n const out: SlackFileSummary[] = [];\n for (const f of files) {\n if (f.mode === \"snippet\" || !f.url_private_download) {\n try {\n const info = await client.api(\"files.info\", { file: f.id });\n const file = isRecord(info.file) ? info.file : null;\n out.push({\n ...f,\n name: f.name ?? getString(file?.name),\n title: f.title ?? getString(file?.title),\n mimetype: f.mimetype ?? getString(file?.mimetype),\n filetype: f.filetype ?? getString(file?.filetype),\n mode: f.mode ?? getString(file?.mode),\n permalink: f.permalink ?? getString(file?.permalink),\n url_private: f.url_private ?? getString(file?.url_private),\n url_private_download: f.url_private_download ?? getString(file?.url_private_download),\n snippet: {\n content: getString(file?.content),\n language: getString(file?.filetype),\n },\n });\n continue;\n } catch {\n // ignore and fall back to summary\n }\n }\n out.push(f);\n }\n return out;\n}\n",
39
39
  "/**\n * Rich-text block rendering helpers extracted from render.ts.\n */\n\nimport { isRecord } from \"../lib/object-type-guards.ts\";\n\nfunction getString(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n\nexport function extractMrkdwnFromRichTextBlock(block: unknown): string {\n if (!isRecord(block)) {\n return \"\";\n }\n const elements = Array.isArray(block.elements) ? block.elements : [];\n const out: string[] = [];\n for (const el of elements) {\n const txt = extractMrkdwnFromRichTextElement(el);\n if (txt.trim()) {\n out.push(txt);\n }\n }\n return out.join(\"\\n\\n\");\n}\n\nfunction extractMrkdwnFromRichTextElement(el: unknown): string {\n if (!isRecord(el)) {\n return \"\";\n }\n const t = getString(el.type);\n\n if (t === \"rich_text_section\") {\n const parts: string[] = [];\n for (const child of Array.isArray(el.elements) ? el.elements : []) {\n parts.push(extractMrkdwnFromRichTextElement(child));\n }\n return parts.join(\"\");\n }\n\n if (t === \"rich_text_preformatted\") {\n const parts: string[] = [];\n for (const child of Array.isArray(el.elements) ? el.elements : []) {\n parts.push(extractMrkdwnFromRichTextElement(child));\n }\n const text = parts.join(\"\");\n return text ? `\\`\\`\\`${text}\\`\\`\\`` : \"\";\n }\n\n if (t === \"rich_text_quote\") {\n const parts: string[] = [];\n for (const child of Array.isArray(el.elements) ? el.elements : []) {\n parts.push(extractMrkdwnFromRichTextElement(child));\n }\n const text = parts.join(\"\").trim();\n if (!text) {\n return \"\";\n }\n return text\n .split(\"\\n\")\n .map((line) => `> ${line}`)\n .join(\"\\n\");\n }\n\n if (t === \"rich_text_list\") {\n const style = typeof el.style === \"string\" ? el.style : \"bullet\";\n const items: string[] = [];\n const itemEls = Array.isArray(el.elements) ? el.elements : [];\n let num = 0;\n for (const item of itemEls) {\n const txt = extractMrkdwnFromRichTextElement(item).trim();\n if (!txt) {\n continue;\n }\n num++;\n const prefix = style === \"ordered\" ? `${num}. ` : \"- \";\n items.push(`${prefix}${txt}`);\n }\n return items.join(\"\\n\");\n }\n\n if (t === \"text\") {\n const raw = getString(el.text);\n const style = isRecord(el.style) ? el.style : null;\n if (!style) {\n return raw;\n }\n let text = raw;\n if (style.code) {\n text = `\\`${text}\\``;\n }\n if (style.bold) {\n text = `*${text}*`;\n }\n if (style.italic) {\n text = `_${text}_`;\n }\n if (style.strike) {\n text = `~${text}~`;\n }\n return text;\n }\n\n if (t === \"link\") {\n const url = getString(el.url);\n const text = getString(el.text);\n if (!url) {\n return text;\n }\n return text ? `<${url}|${text}>` : url;\n }\n\n if (t === \"emoji\") {\n const name = getString(el.name);\n return name ? `:${name}:` : \"\";\n }\n\n if (t === \"user\") {\n const userId = getString(el.user_id);\n return userId ? `<@${userId}>` : \"\";\n }\n\n if (t === \"channel\") {\n const channelId = getString(el.channel_id);\n return channelId ? `<#${channelId}>` : \"\";\n }\n\n return \"\";\n}\n",
40
40
  "import { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\nimport { extractMrkdwnFromRichTextBlock } from \"./render-rich-text.ts\";\n\ntype UnknownRecord = Record<string, unknown>;\ntype RenderState = { depth: number; seen: WeakSet<object> };\nconst MAX_ATTACHMENT_DEPTH = 8;\n\nexport function renderSlackMessageContent(msg: unknown): string {\n const msgObj = isRecord(msg) ? msg : {};\n const blockMrkdwn = extractMrkdwnFromBlocks(msgObj.blocks);\n const attachmentMrkdwn = extractMrkdwnFromAttachments(msgObj.attachments, {\n depth: 0,\n seen: new WeakSet<object>(),\n });\n const combined = [blockMrkdwn.trim(), attachmentMrkdwn.trim()].filter(Boolean).join(\"\\n\\n\");\n if (combined) {\n return slackMrkdwnToMarkdown(combined).trim();\n }\n\n const text = getString(msgObj.text).trim();\n if (text) {\n return slackMrkdwnToMarkdown(text).trim();\n }\n\n return \"\";\n}\n\nfunction extractMrkdwnFromBlocks(blocks: unknown): string {\n if (!Array.isArray(blocks)) {\n return \"\";\n }\n\n const out: string[] = [];\n for (const b of blocks) {\n if (!isRecord(b)) {\n continue;\n }\n const type = getString(b.type);\n if (type === \"section\") {\n const text = isRecord(b.text) ? b.text : null;\n const textType = text ? getString(text.type) : \"\";\n if (textType === \"mrkdwn\" || textType === \"plain_text\") {\n out.push(getString(text?.text));\n }\n if (Array.isArray(b.fields)) {\n for (const f of b.fields) {\n if (!isRecord(f)) {\n continue;\n }\n const fieldType = getString(f.type);\n if (fieldType === \"mrkdwn\" || fieldType === \"plain_text\") {\n out.push(getString(f.text));\n }\n }\n }\n // Buttons often carry the only URL (e.g. \"View Progress\")\n const accessory = isRecord(b.accessory) ? b.accessory : null;\n if (getString(accessory?.type) === \"button\") {\n const label = getString((accessory?.text as UnknownRecord | undefined)?.text);\n const url = getString(accessory?.url);\n if (url) {\n out.push(label ? `${label}: ${url}` : url);\n }\n }\n continue;\n }\n if (type === \"actions\" && Array.isArray(b.elements)) {\n for (const el of b.elements) {\n if (!isRecord(el)) {\n continue;\n }\n if (getString(el.type) === \"button\") {\n const label = getString((el.text as UnknownRecord | undefined)?.text);\n const url = getString(el.url);\n if (url) {\n out.push(label ? `${label}: ${url}` : url);\n }\n }\n }\n continue;\n }\n if (type === \"context\" && Array.isArray(b.elements)) {\n for (const el of b.elements) {\n if (!isRecord(el)) {\n continue;\n }\n const elType = getString(el.type);\n if (elType === \"mrkdwn\") {\n out.push(getString(el.text));\n }\n if (elType === \"plain_text\") {\n out.push(getString(el.text));\n }\n }\n continue;\n }\n if (type === \"image\") {\n const alt = getString(b.alt_text);\n const url = getString(b.image_url);\n if (url) {\n out.push(alt ? `${alt}: ${url}` : url);\n }\n continue;\n }\n if (type === \"rich_text\") {\n const rich = extractMrkdwnFromRichTextBlock(b);\n if (rich.trim()) {\n out.push(rich);\n }\n continue;\n }\n }\n\n return out.join(\"\\n\\n\");\n}\n\nfunction extractMrkdwnFromAttachments(attachments: unknown, state: RenderState): string {\n if (state.depth >= MAX_ATTACHMENT_DEPTH) {\n return \"\";\n }\n if (!Array.isArray(attachments)) {\n return \"\";\n }\n\n const parts: string[] = [];\n for (const a of attachments) {\n if (!isRecord(a)) {\n continue;\n }\n if (state.seen.has(a)) {\n continue;\n }\n state.seen.add(a);\n\n const isSharedMessage = Boolean(\n a.is_share || (a.is_msg_unfurl && Array.isArray(a.message_blocks)),\n );\n\n const chunk: string[] = [];\n\n if (isSharedMessage) {\n chunk.push(formatForwardHeader(a));\n\n const body =\n extractForwardedMessageBody(a, state).trim() ||\n extractMrkdwnFromAttachments(a.attachments, nextState(state)).trim() ||\n getString(a.text).trim();\n if (body) {\n chunk.push(quoteMarkdown(body));\n }\n\n if (chunk.length > 0) {\n parts.push(chunk.join(\"\\n\"));\n }\n continue;\n }\n\n const blocks = extractMrkdwnFromBlocks(a.blocks);\n if (blocks.trim()) {\n chunk.push(blocks);\n }\n const pretext = getString(a.pretext);\n if (pretext) {\n chunk.push(pretext);\n }\n const title = getString(a.title);\n const titleLink = getString(a.title_link);\n if (titleLink && title) {\n chunk.push(`<${titleLink}|${title}>`);\n } else if (title) {\n chunk.push(title);\n } else if (titleLink) {\n chunk.push(titleLink);\n }\n const text = getString(a.text);\n if (text) {\n chunk.push(text);\n }\n if (Array.isArray(a.fields)) {\n for (const f of a.fields) {\n if (!isRecord(f)) {\n continue;\n }\n const fieldTitle = getString(f.title);\n const value = getString(f.value);\n if (fieldTitle && value) {\n chunk.push(`${fieldTitle}\\n${value}`);\n } else if (fieldTitle) {\n chunk.push(fieldTitle);\n } else if (value) {\n chunk.push(value);\n }\n }\n }\n const fallback = getString(a.fallback);\n if (chunk.length === 0 && fallback) {\n chunk.push(fallback);\n }\n const nestedAttachments = extractMrkdwnFromAttachments(a.attachments, nextState(state));\n if (nestedAttachments.trim()) {\n chunk.push(nestedAttachments);\n }\n if (chunk.length > 0) {\n parts.push(uniqueTexts(chunk).join(\"\\n\"));\n }\n }\n return uniqueTexts(parts).join(\"\\n\\n\");\n}\n\nfunction formatForwardHeader(a: Record<string, unknown>): string {\n const authorName = getString(a.author_name);\n const authorLink = getString(a.author_link);\n const fromUrl = getString(a.from_url);\n\n const authorPart = authorName && authorLink ? `<${authorLink}|${authorName}>` : authorName || \"\";\n const sourcePart = fromUrl ? `<${fromUrl}|original>` : \"\";\n\n if (authorPart && sourcePart) {\n return `*Forwarded from ${authorPart} | ${sourcePart}*`;\n }\n if (authorPart) {\n return `*Forwarded from ${authorPart}*`;\n }\n if (sourcePart) {\n return `*Forwarded message | ${sourcePart}*`;\n }\n return \"*Forwarded message*\";\n}\n\nfunction extractForwardedMessageBody(\n attachment: Record<string, unknown>,\n state: RenderState,\n): string {\n const messageBlocks = attachment.message_blocks;\n const topLevelFiles = extractFileMentions(attachment.files).trim();\n if (!Array.isArray(messageBlocks)) {\n return topLevelFiles;\n }\n const out: string[] = [];\n for (const mb of messageBlocks) {\n if (!isRecord(mb)) {\n continue;\n }\n const message = isRecord(mb.message) ? mb.message : null;\n if (!message) {\n continue;\n }\n const messageText = getString(message.text).trim();\n const blocksContent = extractMrkdwnFromBlocks(message.blocks).trim();\n const attachmentsContent = extractMrkdwnFromAttachments(\n message.attachments,\n nextState(state),\n ).trim();\n const fileMentions = extractFileMentions(message.files).trim();\n const content = uniqueTexts([\n blocksContent,\n attachmentsContent,\n messageText,\n fileMentions,\n ]).join(\"\\n\\n\");\n if (content) {\n out.push(content);\n }\n }\n return uniqueTexts([topLevelFiles, ...out]).join(\"\\n\");\n}\n\nfunction nextState(state: RenderState): RenderState {\n return { depth: state.depth + 1, seen: state.seen };\n}\n\nfunction quoteMarkdown(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => `> ${line}`)\n .join(\"\\n\");\n}\n\nfunction uniqueTexts(values: string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const text = value.trim();\n if (!text || seen.has(text)) {\n continue;\n }\n seen.add(text);\n out.push(text);\n }\n return out;\n}\n\nfunction extractFileMentions(files: unknown): string {\n if (!Array.isArray(files)) {\n return \"\";\n }\n const lines: string[] = [];\n for (const f of files) {\n if (!isRecord(f)) {\n continue;\n }\n const name = getString(f.title) || getString(f.name) || \"file\";\n const url =\n getString(f.permalink) || getString(f.url_private_download) || getString(f.url_private);\n if (url) {\n lines.push(`<${url}|${name}>`);\n continue;\n }\n lines.push(name);\n }\n return uniqueTexts(lines).join(\"\\n\");\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction getString(value: unknown): string {\n return typeof value === \"string\" ? value : \"\";\n}\n",
41
- "import type { SlackMessageSummary } from \"./messages.ts\";\nimport type { DownloadResult } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackMessage = {\n channel_id: string;\n ts: string;\n thread_ts?: string;\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n files?: {\n name?: string;\n mimetype?: string;\n mode?: string;\n path?: string;\n error?: string;\n }[];\n reactions?: {\n name: string;\n users: string[];\n count?: number;\n }[];\n forwarded_threads?: {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[];\n};\n\nexport function toCompactMessage(\n msg: SlackMessageSummary,\n input?: {\n maxSnippetChars?: number;\n maxBodyChars?: number;\n includeReactions?: boolean;\n downloadedPaths?: Record<string, DownloadResult>;\n },\n): CompactSlackMessage {\n const maxBodyChars = input?.maxBodyChars ?? 8000;\n const includeReactions = input?.includeReactions ?? false;\n\n const rendered = renderSlackMessageContent(msg);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n…`\n : rendered;\n\n const files = msg.files\n ?.map((f) => {\n const entry = input?.downloadedPaths?.[f.id];\n if (!entry) {\n return null;\n }\n return entry.ok\n ? { name: f.name, mimetype: f.mimetype, mode: f.mode, path: entry.path }\n : {\n name: f.name,\n mimetype: f.mimetype,\n mode: f.mode,\n path: entry.path,\n error: entry.error,\n };\n })\n .filter((f): f is NonNullable<typeof f> => Boolean(f));\n\n return {\n channel_id: msg.channel_id,\n ts: msg.ts,\n thread_ts: msg.thread_ts ?? ((msg.reply_count ?? 0) > 0 ? msg.ts : undefined),\n author: msg.user || msg.bot_id ? { user_id: msg.user, bot_id: msg.bot_id } : undefined,\n content: content ? content : undefined,\n files: files && files.length > 0 ? files : undefined,\n reactions: includeReactions ? compactReactions(msg.reactions) : undefined,\n forwarded_threads: extractForwardedThreads(msg.attachments),\n };\n}\n\nexport function compactReactions(\n reactions: unknown[] | undefined,\n): Array<{ name: string; users: string[]; count?: number }> | undefined {\n if (!Array.isArray(reactions) || reactions.length === 0) {\n return undefined;\n }\n const out: { name: string; users: string[]; count?: number }[] = [];\n for (const r of reactions) {\n if (!isRecord(r)) {\n continue;\n }\n const name = getString(r.name)?.trim() ?? \"\";\n if (!name) {\n continue;\n }\n const users = Array.isArray(r.users)\n ? r.users.map((u) => String(u)).filter((u) => /^U[A-Z0-9]{8,}$/.test(u))\n : [];\n const count = typeof r.count === \"number\" && r.count !== users.length ? r.count : undefined;\n out.push({ name, users, count });\n }\n return out.length ? out : undefined;\n}\n\nexport function extractForwardedThreads(attachments: unknown[] | undefined):\n | {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[]\n | undefined {\n if (!Array.isArray(attachments) || attachments.length === 0) {\n return undefined;\n }\n const out: {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[] = [];\n const seen = new Set<string>();\n for (const attachment of attachments) {\n if (!isRecord(attachment)) {\n continue;\n }\n const fromUrl = getString(attachment.from_url)?.trim();\n if (!fromUrl) {\n continue;\n }\n let parsed: URL;\n try {\n parsed = new URL(fromUrl);\n } catch {\n continue;\n }\n const threadTs = parsed.searchParams.get(\"thread_ts\")?.trim();\n if (!threadTs || !/^\\d{6,}\\.\\d{6}$/.test(threadTs)) {\n continue;\n }\n const channelId = parsed.searchParams.get(\"cid\")?.trim();\n const replyCount = getNumber(attachment.reply_count);\n const key = `${fromUrl}::${threadTs}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push({\n url: fromUrl,\n thread_ts: threadTs,\n channel_id: channelId || undefined,\n reply_count: replyCount,\n });\n }\n return out.length ? out : undefined;\n}\n",
41
+ "import type { SlackMessageSummary } from \"./messages.ts\";\nimport type { DownloadResult } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackMessage = {\n channel_id: string;\n ts: string;\n thread_ts?: string;\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n files?: {\n name?: string;\n mimetype?: string;\n mode?: string;\n path?: string;\n error?: string;\n }[];\n reactions?: {\n name: string;\n users: string[];\n count?: number;\n }[];\n forwarded_threads?: {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[];\n};\n\nexport function toCompactMessage(\n msg: SlackMessageSummary,\n input?: {\n maxSnippetChars?: number;\n maxBodyChars?: number;\n includeReactions?: boolean;\n downloadedPaths?: Record<string, DownloadResult>;\n },\n): CompactSlackMessage {\n const maxBodyChars = input?.maxBodyChars ?? 8000;\n const includeReactions = input?.includeReactions ?? false;\n\n const rendered = renderSlackMessageContent(msg);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n…`\n : rendered;\n\n const files = msg.files\n ?.map((f) => {\n const entry = input?.downloadedPaths?.[f.id];\n if (!entry) {\n return null;\n }\n return entry.ok\n ? { name: f.name, mimetype: f.mimetype, mode: f.mode, path: entry.path }\n : {\n name: f.name,\n mimetype: f.mimetype,\n mode: f.mode,\n path: entry.path,\n error: entry.error,\n };\n })\n .filter((f): f is NonNullable<typeof f> => Boolean(f));\n\n return {\n channel_id: msg.channel_id,\n ts: msg.ts,\n thread_ts: msg.thread_ts ?? ((msg.reply_count ?? 0) > 0 ? msg.ts : undefined),\n author: msg.user || msg.bot_id ? { user_id: msg.user, bot_id: msg.bot_id } : undefined,\n content: content ? content : undefined,\n files: files && files.length > 0 ? files : undefined,\n reactions: includeReactions ? compactReactions(msg.reactions) : undefined,\n forwarded_threads: extractForwardedThreads(msg.attachments),\n };\n}\n\nexport function compactReactions(\n reactions: unknown[] | undefined,\n): { name: string; users: string[]; count?: number }[] | undefined {\n if (!Array.isArray(reactions) || reactions.length === 0) {\n return undefined;\n }\n const out: { name: string; users: string[]; count?: number }[] = [];\n for (const r of reactions) {\n if (!isRecord(r)) {\n continue;\n }\n const name = getString(r.name)?.trim() ?? \"\";\n if (!name) {\n continue;\n }\n const users = Array.isArray(r.users)\n ? r.users.map((u) => String(u)).filter((u) => /^U[A-Z0-9]{8,}$/.test(u))\n : [];\n const count = typeof r.count === \"number\" && r.count !== users.length ? r.count : undefined;\n out.push({ name, users, count });\n }\n return out.length ? out : undefined;\n}\n\nexport function extractForwardedThreads(attachments: unknown[] | undefined):\n | {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[]\n | undefined {\n if (!Array.isArray(attachments) || attachments.length === 0) {\n return undefined;\n }\n const out: {\n url: string;\n thread_ts: string;\n channel_id?: string;\n reply_count?: number;\n }[] = [];\n const seen = new Set<string>();\n for (const attachment of attachments) {\n if (!isRecord(attachment)) {\n continue;\n }\n const fromUrl = getString(attachment.from_url)?.trim();\n if (!fromUrl) {\n continue;\n }\n let parsed: URL;\n try {\n parsed = new URL(fromUrl);\n } catch {\n continue;\n }\n const threadTs = parsed.searchParams.get(\"thread_ts\")?.trim();\n if (!threadTs || !/^\\d{6,}\\.\\d{6}$/.test(threadTs)) {\n continue;\n }\n const channelId = parsed.searchParams.get(\"cid\")?.trim();\n const replyCount = getNumber(attachment.reply_count);\n const key = `${fromUrl}::${threadTs}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push({\n url: fromUrl,\n thread_ts: threadTs,\n channel_id: channelId || undefined,\n reply_count: replyCount,\n });\n }\n return out.length ? out : undefined;\n}\n",
42
42
  "import type { SlackMessageRef } from \"./url.ts\";\nimport type { SlackApiClient } from \"./client.ts\";\nimport { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\nimport { asArray, getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport { enrichFiles, toSlackFileSummary } from \"./message-api-parsing.ts\";\n\nexport type SlackFileSummary = {\n id: string;\n name?: string;\n title?: string;\n mimetype?: string;\n filetype?: string;\n mode?: string;\n permalink?: string;\n url_private?: string;\n url_private_download?: string;\n size?: number;\n snippet?: {\n content?: string;\n language?: string;\n };\n};\n\nexport type SlackMessageSummary = {\n channel_id: string;\n ts: string;\n thread_ts?: string;\n reply_count?: number;\n user?: string;\n bot_id?: string;\n text: string;\n markdown: string;\n blocks?: unknown[];\n attachments?: unknown[];\n files?: SlackFileSummary[];\n reactions?: unknown[];\n};\n\nexport async function fetchMessage(\n client: SlackApiClient,\n input: { ref: SlackMessageRef; includeReactions?: boolean },\n): Promise<SlackMessageSummary> {\n const history = await client.api(\"conversations.history\", {\n channel: input.ref.channel_id,\n latest: input.ref.message_ts,\n inclusive: true,\n limit: 5,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const historyMessages = asArray(history.messages);\n let msg = historyMessages.find(\n (m): m is Record<string, unknown> => isRecord(m) && getString(m.ts) === input.ref.message_ts,\n );\n\n // Thread replies are not guaranteed to appear in channel history. If the URL\n // includes ?thread_ts=..., scan the thread directly.\n if (!msg && input.ref.thread_ts_hint) {\n msg = await findMessageInThread(client, {\n channelId: input.ref.channel_id,\n threadTs: input.ref.thread_ts_hint,\n targetTs: input.ref.message_ts,\n includeReactions: input.includeReactions,\n });\n }\n\n // Fallback: if the message_ts is actually the thread root, replies can still\n // be fetched via conversations.replies even if history is missing it.\n if (!msg) {\n try {\n const rootResp = await client.api(\"conversations.replies\", {\n channel: input.ref.channel_id,\n ts: input.ref.message_ts,\n limit: 1,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const [root] = asArray(rootResp.messages);\n if (isRecord(root) && getString(root.ts) === input.ref.message_ts) {\n msg = root;\n }\n } catch {\n // ignore\n }\n }\n\n if (!msg) {\n throw new Error(\"Message not found (no access or wrong URL)\");\n }\n\n const files = asArray(msg.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n const enrichedFiles = files.length > 0 ? await enrichFiles(client, files) : undefined;\n\n const text = getString(msg.text) ?? \"\";\n const ts = getString(msg.ts) ?? input.ref.message_ts;\n const blocks = Array.isArray(msg.blocks) ? (msg.blocks as unknown[]) : undefined;\n const attachments = Array.isArray(msg.attachments) ? (msg.attachments as unknown[]) : undefined;\n const reactions = Array.isArray(msg.reactions) ? (msg.reactions as unknown[]) : undefined;\n return {\n channel_id: input.ref.channel_id,\n ts,\n thread_ts: getString(msg.thread_ts),\n reply_count: getNumber(msg.reply_count),\n user: getString(msg.user),\n bot_id: getString(msg.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks,\n attachments,\n files: enrichedFiles,\n reactions,\n };\n}\n\nasync function findMessageInThread(\n client: SlackApiClient,\n input: {\n channelId: string;\n threadTs: string;\n targetTs: string;\n includeReactions?: boolean;\n },\n): Promise<Record<string, unknown> | undefined> {\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.replies\", {\n channel: input.channelId,\n ts: input.threadTs,\n limit: 200,\n cursor,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const messages = asArray(resp.messages);\n const found = messages.find(\n (m): m is Record<string, unknown> => isRecord(m) && getString(m.ts) === input.targetTs,\n );\n if (found) {\n return found;\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return undefined;\n}\n\nexport async function fetchChannelHistory(\n client: SlackApiClient,\n input: {\n channelId: string;\n limit?: number;\n latest?: string;\n oldest?: string;\n includeReactions?: boolean;\n withReactions?: string[];\n withoutReactions?: string[];\n },\n): Promise<SlackMessageSummary[]> {\n const raw = input.limit ?? 25;\n const limit = Number.isFinite(raw) ? Math.min(Math.max(raw, 1), 200) : 25;\n const out: SlackMessageSummary[] = [];\n const withReactions = input.withReactions ?? [];\n const withoutReactions = input.withoutReactions ?? [];\n const hasReactionFilters = withReactions.length > 0 || withoutReactions.length > 0;\n const pageLimit = hasReactionFilters ? 200 : limit;\n\n let cursorLatest = input.latest;\n for (;;) {\n const resp = await client.api(\"conversations.history\", {\n channel: input.channelId,\n limit: pageLimit,\n latest: cursorLatest,\n oldest: input.oldest,\n include_all_metadata: input.includeReactions || hasReactionFilters ? true : undefined,\n });\n const messages = asArray(resp.messages);\n if (messages.length === 0) {\n break;\n }\n for (const m of messages) {\n if (!isRecord(m)) {\n continue;\n }\n if (\n hasReactionFilters &&\n !passesReactionNameFilters(m, {\n withReactions,\n withoutReactions,\n })\n ) {\n continue;\n }\n const files = asArray(m.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n const enrichedFiles = files.length > 0 ? await enrichFiles(client, files) : undefined;\n\n const text = getString(m.text) ?? \"\";\n out.push({\n channel_id: input.channelId,\n ts: getString(m.ts) ?? \"\",\n thread_ts: getString(m.thread_ts),\n reply_count: getNumber(m.reply_count),\n user: getString(m.user),\n bot_id: getString(m.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(m.blocks) ? (m.blocks as unknown[]) : undefined,\n attachments: Array.isArray(m.attachments) ? (m.attachments as unknown[]) : undefined,\n files: enrichedFiles,\n reactions: Array.isArray(m.reactions) ? (m.reactions as unknown[]) : undefined,\n });\n if (out.length >= limit) {\n break;\n }\n }\n\n if (out.length >= limit || !hasReactionFilters) {\n break;\n }\n\n if (!resp.has_more) {\n break;\n }\n\n const last = messages.at(-1);\n const nextLatest = isRecord(last) ? getString(last.ts) : undefined;\n if (!nextLatest || nextLatest === cursorLatest) {\n break;\n }\n cursorLatest = nextLatest;\n }\n\n // conversations.history returns newest-first; normalize to chronological.\n out.sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));\n return out;\n}\n\nexport function passesReactionNameFilters(\n msg: Record<string, unknown>,\n input: { withReactions?: string[]; withoutReactions?: string[] },\n): boolean {\n const withReactions = input.withReactions ?? [];\n const withoutReactions = input.withoutReactions ?? [];\n const names = new Set<string>();\n for (const r of asArray(msg.reactions)) {\n if (!isRecord(r)) {\n continue;\n }\n const name = getString(r.name)?.trim();\n if (name) {\n names.add(name);\n }\n }\n if (withReactions.some((name) => !names.has(name))) {\n return false;\n }\n if (withoutReactions.some((name) => names.has(name))) {\n return false;\n }\n return true;\n}\n\nexport async function fetchThread(\n client: SlackApiClient,\n input: { channelId: string; threadTs: string; includeReactions?: boolean },\n): Promise<SlackMessageSummary[]> {\n const out: SlackMessageSummary[] = [];\n let cursor: string | undefined;\n\n for (;;) {\n const resp = await client.api(\"conversations.replies\", {\n channel: input.channelId,\n ts: input.threadTs,\n limit: 200,\n cursor,\n include_all_metadata: input.includeReactions ? true : undefined,\n });\n const messages = asArray(resp.messages);\n for (const m of messages) {\n if (!isRecord(m)) {\n continue;\n }\n const files = asArray(m.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n const enrichedFiles = files.length > 0 ? await enrichFiles(client, files) : undefined;\n\n const text = getString(m.text) ?? \"\";\n out.push({\n channel_id: input.channelId,\n ts: getString(m.ts) ?? \"\",\n thread_ts: getString(m.thread_ts),\n reply_count: getNumber(m.reply_count),\n user: getString(m.user),\n bot_id: getString(m.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(m.blocks) ? (m.blocks as unknown[]) : undefined,\n attachments: Array.isArray(m.attachments) ? (m.attachments as unknown[]) : undefined,\n files: enrichedFiles,\n reactions: Array.isArray(m.reactions) ? (m.reactions as unknown[]) : undefined,\n });\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n\n // Slack returns newest-first for some methods; normalize to chronological.\n out.sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));\n return out;\n}\n\nexport { toCompactMessage, type CompactSlackMessage } from \"./message-compact.ts\";\n",
43
43
  "export type SlackMessageRef = {\n workspace_url: string;\n channel_id: string;\n message_ts: string; // \"1234567890.123456\"\n thread_ts_hint?: string; // from URL query (?thread_ts=...)\n raw: string;\n /** True if the URL looks like it may have been truncated by shell & interpretation */\n possiblyTruncated?: boolean;\n};\n\nexport function parseSlackMessageUrl(input: string): SlackMessageRef {\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n throw new Error(`Invalid URL: ${input}`);\n }\n\n if (!/\\.slack\\.com$/i.test(url.hostname)) {\n throw new Error(`Not a Slack workspace URL: ${url.hostname}`);\n }\n\n const parts = url.pathname.split(\"/\").filter(Boolean);\n // /archives/<channel>/p<digits>\n if (parts.length < 3 || parts[0] !== \"archives\") {\n throw new Error(`Unsupported Slack URL path: ${url.pathname}`);\n }\n\n const channel_id = parts[1]!;\n const messagePart = parts[2]!;\n const match = messagePart.match(/^p(\\d{7,})$/);\n if (!match) {\n throw new Error(`Unsupported Slack message id: ${messagePart}`);\n }\n\n const digits = match[1]!;\n if (digits.length <= 6) {\n throw new Error(`Invalid Slack message id: ${messagePart}`);\n }\n const seconds = digits.slice(0, -6);\n const micros = digits.slice(-6);\n const message_ts = `${seconds}.${micros}`;\n\n const threadTsParam = url.searchParams.get(\"thread_ts\");\n const thread_ts_hint =\n threadTsParam && /^\\d{6,}\\.\\d{6}$/.test(threadTsParam) ? threadTsParam : undefined;\n\n // Slack URLs with thread_ts typically also have cid param. If thread_ts exists but\n // cid doesn't, the URL was likely truncated by shell interpreting & as background.\n const hasCid = url.searchParams.has(\"cid\");\n const possiblyTruncated = Boolean(threadTsParam && !hasCid);\n\n const workspace_url = `${url.protocol}//${url.host}`;\n return { workspace_url, channel_id, message_ts, thread_ts_hint, raw: input, possiblyTruncated };\n}\n",
44
44
  "import { parseSlackMessageUrl, type SlackMessageRef } from \"../slack/url.ts\";\nimport { isChannelId, isUserId } from \"../slack/channels.ts\";\n\nexport type MsgTarget =\n | { kind: \"url\"; ref: SlackMessageRef }\n | { kind: \"channel\"; channel: string }\n | { kind: \"user\"; userId: string };\n\nexport function parseMsgTarget(input: string): MsgTarget {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(\"Missing target\");\n }\n\n try {\n const ref = parseSlackMessageUrl(trimmed);\n return { kind: \"url\", ref };\n } catch {\n // not a slack message URL\n }\n\n if (isUserId(trimmed)) {\n return { kind: \"user\", userId: trimmed };\n }\n if (trimmed.startsWith(\"#\")) {\n return { kind: \"channel\", channel: trimmed };\n }\n if (isChannelId(trimmed)) {\n return { kind: \"channel\", channel: trimmed };\n }\n\n // Allow bare channel names (\"general\") for convenience.\n return { kind: \"channel\", channel: `#${trimmed}` };\n}\n",
@@ -47,26 +47,33 @@
47
47
  "import { readFile, stat, realpath } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { SlackApiClient } from \"./client.ts\";\nimport { getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nconst MAX_FILE_SIZE = 100 * 1024 * 1024; // 100 MB — Slack's upload limit\n\nexport async function uploadLocalFileToSlack(input: {\n client: SlackApiClient;\n channelId: string;\n filePath: string;\n threadTs?: string;\n initialComment?: string;\n}): Promise<void> {\n const resolvedPath = await realpath(input.filePath);\n const fileStats = await stat(resolvedPath);\n if (!fileStats.isFile()) {\n throw new Error(`Attachment path is not a file: ${input.filePath}`);\n }\n if (fileStats.size > MAX_FILE_SIZE) {\n throw new Error(\n `File too large (${Math.round(fileStats.size / 1024 / 1024)}MB). Slack allows up to 100MB.`,\n );\n }\n\n const bytes = await readFile(resolvedPath);\n const filename = basename(resolvedPath);\n\n const uploadInitResp = await input.client.api(\"files.getUploadURLExternal\", {\n filename,\n length: bytes.length,\n });\n\n if (isRecord(uploadInitResp) && uploadInitResp.ok === false) {\n const errMsg = typeof uploadInitResp.error === \"string\" ? uploadInitResp.error : \"unknown\";\n throw new Error(`Slack files.getUploadURLExternal failed: ${errMsg}`);\n }\n\n const uploadUrl = getString(uploadInitResp.upload_url);\n const fileId = getString(uploadInitResp.file_id);\n if (!uploadUrl || !fileId) {\n throw new Error(\"Slack did not return an upload URL for file attachment\");\n }\n\n const uploadResp = await fetch(uploadUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n \"Content-Length\": String(bytes.length),\n },\n body: bytes,\n });\n if (!uploadResp.ok) {\n const body = await uploadResp.text().catch(() => \"\");\n throw new Error(\n `Failed to upload attachment bytes (HTTP ${uploadResp.status})${body ? `: ${body}` : \"\"}`,\n );\n }\n\n const completeResp = await input.client.api(\"files.completeUploadExternal\", {\n files: [{ id: fileId, title: filename }],\n channel_id: input.channelId,\n thread_ts: input.threadTs,\n initial_comment: input.initialComment?.trim() || undefined,\n });\n\n if (!isRecord(completeResp) || completeResp.ok !== true) {\n const errMsg =\n isRecord(completeResp) && typeof completeResp.error === \"string\"\n ? completeResp.error\n : \"unknown\";\n throw new Error(`Slack files.completeUploadExternal failed: ${errMsg}`);\n }\n}\n",
48
48
  "import type { SlackAuth } from \"../slack/client.ts\";\nimport type { SlackMessageSummary } from \"../slack/messages.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport {\n type DownloadResult,\n SlackDownloadError,\n downloadSlackFile,\n tryDownloadSlackFile,\n writeDownloadErrorFile,\n} from \"../slack/files.ts\";\nimport { htmlToMarkdown } from \"../slack/html-to-md.ts\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nfunction inferFileExtension(file: {\n mimetype?: string;\n filetype?: string;\n name?: string;\n title?: string;\n}): string | null {\n const mt = (file.mimetype || \"\").toLowerCase();\n const ft = (file.filetype || \"\").toLowerCase();\n\n if (mt === \"image/png\" || ft === \"png\") {\n return \"png\";\n }\n if (mt === \"image/jpeg\" || mt === \"image/jpg\" || ft === \"jpg\" || ft === \"jpeg\") {\n return \"jpg\";\n }\n if (mt === \"image/webp\" || ft === \"webp\") {\n return \"webp\";\n }\n if (mt === \"image/gif\" || ft === \"gif\") {\n return \"gif\";\n }\n\n if (mt === \"text/plain\" || ft === \"text\") {\n return \"txt\";\n }\n if (mt === \"text/markdown\" || ft === \"markdown\" || ft === \"md\") {\n return \"md\";\n }\n if (mt === \"application/json\" || ft === \"json\") {\n return \"json\";\n }\n\n const name = file.name || file.title || \"\";\n const match = name.match(/\\.([A-Za-z0-9]{1,10})$/);\n return match ? match[1]!.toLowerCase() : null;\n}\n\nconst CANVAS_MODES = new Set([\"canvas\", \"quip\", \"docs\"]);\n\nfunction looksLikeAuthPage(html: string): boolean {\n return /<form[^>]+signin|data-qa=\"signin|<title>[^<]*Sign\\s*in/i.test(html);\n}\n\nasync function downloadCanvasAsMarkdown(input: {\n auth: SlackAuth;\n fileId: string;\n url: string;\n destDir: string;\n}): Promise<string> {\n const htmlPath = await downloadSlackFile({\n auth: input.auth,\n url: input.url,\n destDir: input.destDir,\n preferredName: `${input.fileId}.html`,\n options: { allowHtml: true },\n });\n const html = await readFile(htmlPath, \"utf8\");\n if (looksLikeAuthPage(html)) {\n throw new SlackDownloadError(\n \"Downloaded auth/login page instead of canvas content (token may be expired)\",\n );\n }\n\n const markdown = htmlToMarkdown(html).trim();\n const safeName = `${input.fileId.replace(/[\\\\/<>\"|?*]/g, \"_\")}.md`;\n const markdownPath = join(input.destDir, safeName);\n await writeFile(markdownPath, markdown, \"utf8\");\n return markdownPath;\n}\n\nexport async function downloadMessageFiles(input: {\n auth: SlackAuth;\n messages: SlackMessageSummary[];\n}): Promise<Record<string, DownloadResult>> {\n const downloadedPaths: Record<string, DownloadResult> = {};\n const downloadsDir = await ensureDownloadsDir();\n\n for (const message of input.messages) {\n for (const file of message.files ?? []) {\n if (downloadedPaths[file.id]) {\n continue;\n }\n\n const isCanvas = file.mode != null && CANVAS_MODES.has(file.mode);\n const url = isCanvas\n ? file.url_private || file.url_private_download\n : file.url_private_download || file.url_private;\n if (!url) {\n continue;\n }\n\n if (isCanvas) {\n try {\n const path = await downloadCanvasAsMarkdown({\n auth: input.auth,\n fileId: file.id,\n url,\n destDir: downloadsDir,\n });\n downloadedPaths[file.id] = { ok: true, path };\n } catch (err) {\n if (!(err instanceof SlackDownloadError)) {\n throw err;\n }\n const path = await writeDownloadErrorFile({\n destDir: downloadsDir,\n fileId: file.id,\n error: err.message,\n });\n downloadedPaths[file.id] = {\n ok: false,\n error: err.message,\n httpStatus: err.httpStatus,\n path,\n };\n console.error(`Warning: skipping file ${file.id}: ${err.message}`);\n }\n } else {\n const ext = inferFileExtension(file);\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${file.id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n downloadedPaths[file.id] = {\n ...result,\n path: await writeDownloadErrorFile({\n destDir: downloadsDir,\n fileId: file.id,\n error: result.error,\n }),\n };\n console.error(`Warning: skipping file ${file.id}: ${result.error}`);\n } else {\n downloadedPaths[file.id] = result;\n }\n }\n }\n }\n\n return downloadedPaths;\n}\n",
49
49
  "import type { CompactSlackMessage } from \"../slack/messages.ts\";\nimport { asArray, isRecord } from \"../lib/object-type-guards.ts\";\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n\nexport async function getThreadSummary(\n client: { api: (method: string, params?: Record<string, unknown>) => Promise<unknown> },\n input: {\n channelId: string;\n msg: { ts: string; thread_ts?: string; reply_count?: number };\n },\n): Promise<{ ts: string; length: number } | null> {\n const replyCount = input.msg.reply_count ?? 0;\n const rootTs = input.msg.thread_ts ?? (replyCount > 0 ? input.msg.ts : null);\n if (!rootTs) {\n return null;\n }\n\n if (!input.msg.thread_ts && replyCount > 0) {\n return { ts: rootTs, length: 1 + replyCount };\n }\n\n const resp = await client.api(\"conversations.replies\", {\n channel: input.channelId,\n ts: rootTs,\n limit: 1,\n });\n const [root] = asArray(isRecord(resp) ? resp.messages : undefined);\n const rootReplyCount = isRecord(root) ? getNumber(root.reply_count) : undefined;\n if (rootReplyCount === undefined) {\n return { ts: rootTs, length: 1 };\n }\n return { ts: rootTs, length: 1 + rootReplyCount };\n}\n\nexport function toThreadListMessage(\n m: CompactSlackMessage,\n): Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\"> {\n const { channel_id: _channelId, thread_ts: _threadTs, ...rest } = m;\n return rest;\n}\n",
50
- "import type { CliContext } from \"./context.ts\";\nimport {\n fetchMessage,\n fetchThread,\n fetchChannelHistory,\n toCompactMessage,\n} from \"../slack/messages.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\nimport { downloadMessageFiles } from \"./message-file-downloads.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { getThreadSummary, toThreadListMessage } from \"./message-thread-info.ts\";\nimport type { MessageCommandOptions } from \"./message-actions.ts\";\nimport {\n parseLimit,\n parseReactionFilters,\n requireOldestWhenReactionFiltersUsed,\n} from \"./message-actions.ts\";\n\nexport async function handleMessageGet(input: {\n ctx: CliContext;\n targetInput: string;\n options: MessageCommandOptions;\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"message get does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n return input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client, auth } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n const thread = await getThreadSummary(client, { channelId: ref.channel_id, msg });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: [msg] });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const message = toCompactMessage(msg, { maxBodyChars, includeReactions, downloadedPaths });\n return pruneEmpty({ message, thread }) as Record<string, unknown>;\n }\n\n const ts = input.options.ts?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const includeReactions = Boolean(input.options.includeReactions);\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n const ref = {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n channel_id: channelId,\n message_ts: ts,\n thread_ts_hint: input.options.threadTs?.trim() || undefined,\n raw: input.targetInput,\n };\n\n const msg = await fetchMessage(client, { ref, includeReactions });\n const thread = await getThreadSummary(client, { channelId, msg });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: [msg] });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const message = toCompactMessage(msg, { maxBodyChars, includeReactions, downloadedPaths });\n return pruneEmpty({ message, thread }) as Record<string, unknown>;\n },\n });\n}\n\nexport async function handleMessageList(input: {\n ctx: CliContext;\n targetInput: string;\n options: MessageCommandOptions;\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"message list does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n return input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n const withReactions = parseReactionFilters(input.options.withReaction);\n const withoutReactions = parseReactionFilters(input.options.withoutReaction);\n const hasReactionFilters = withReactions.length > 0 || withoutReactions.length > 0;\n\n if (target.kind === \"url\") {\n if (hasReactionFilters) {\n throw new Error(\n \"Reaction filters are only supported for channel history mode (not message URL thread mode)\",\n );\n }\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client, auth } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n const rootTs = msg.thread_ts ?? msg.ts;\n const threadMessages = await fetchThread(client, {\n channelId: ref.channel_id,\n threadTs: rootTs,\n includeReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: threadMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n return pruneEmpty({\n messages: threadMessages\n .map((m) => toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }))\n .map(toThreadListMessage),\n }) as Record<string, unknown>;\n }\n\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const channelId = await resolveChannelId(client, target.channel);\n\n const threadTs = input.options.threadTs?.trim();\n const ts = input.options.ts?.trim();\n\n // No thread specifier list recent channel messages\n if (!threadTs && !ts) {\n const includeReactions = Boolean(input.options.includeReactions);\n const limit = parseLimit(input.options.limit);\n const oldest = requireOldestWhenReactionFiltersUsed({\n oldest: input.options.oldest,\n withReactions,\n withoutReactions,\n });\n const channelMessages = await fetchChannelHistory(client, {\n channelId,\n limit,\n latest: input.options.latest?.trim(),\n oldest,\n includeReactions: includeReactions || hasReactionFilters,\n withReactions,\n withoutReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: channelMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n return pruneEmpty({\n channel_id: channelId,\n messages: channelMessages.map((m) =>\n toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }),\n ),\n }) as Record<string, unknown>;\n }\n\n if (hasReactionFilters) {\n throw new Error(\n \"Reaction filters are only supported for channel history mode (without --thread-ts/--ts)\",\n );\n }\n\n const rootTs =\n threadTs ??\n (await (async () => {\n const ref = {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n channel_id: channelId,\n message_ts: ts!,\n raw: input.targetInput,\n };\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n return msg.thread_ts ?? msg.ts;\n })());\n\n const includeReactions = Boolean(input.options.includeReactions);\n const threadMessages = await fetchThread(client, {\n channelId,\n threadTs: rootTs,\n includeReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: threadMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n return pruneEmpty({\n messages: threadMessages\n .map((m) => toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }))\n .map(toThreadListMessage),\n }) as Record<string, unknown>;\n },\n });\n}\n",
51
- "import type { CliContext } from \"./context.ts\";\nimport { fetchMessage } from \"../slack/messages.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId, openDmChannel } from \"../slack/channels.ts\";\nimport { normalizeSlackReactionName } from \"../slack/emoji.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { textToRichTextBlocks } from \"../slack/rich-text.ts\";\nimport type { SlackApiClient } from \"../slack/client.ts\";\nimport { uploadLocalFileToSlack } from \"../slack/upload.ts\";\n\nexport type MessageCommandOptions = {\n maxBodyChars: string;\n workspace?: string;\n ts?: string;\n threadTs?: string;\n limit?: string;\n oldest?: string;\n latest?: string;\n withReaction?: string[];\n withoutReaction?: string[];\n includeReactions?: boolean;\n};\n\nexport function parseLimit(raw: string | undefined): number | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n < 1) {\n throw new Error(`Invalid --limit value \"${raw}\": must be a positive integer`);\n }\n return n;\n}\n\nexport function requireMessageTs(raw: string | undefined): string {\n const ts = raw?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n return ts;\n}\n\nexport function parseReactionFilters(raw: string[] | undefined): string[] {\n if (!Array.isArray(raw) || raw.length === 0) {\n return [];\n }\n const out: string[] = [];\n for (const value of raw) {\n const normalized = normalizeSlackReactionName(String(value));\n if (!out.includes(normalized)) {\n out.push(normalized);\n }\n }\n return out;\n}\n\nexport function requireOldestWhenReactionFiltersUsed(input: {\n oldest?: string;\n withReactions: string[];\n withoutReactions: string[];\n}): string | undefined {\n const hasReactionFilters = input.withReactions.length > 0 || input.withoutReactions.length > 0;\n const oldest = input.oldest?.trim();\n if (!hasReactionFilters) {\n return oldest;\n }\n if (!oldest) {\n throw new Error(\n 'Reaction filters require --oldest \"<seconds>.<micros>\" to bound scan size. Example: --oldest \"1770165109.628379\"',\n );\n }\n return oldest;\n}\n\nexport async function sendMessage(input: {\n ctx: CliContext;\n targetInput: string;\n text: string;\n options: { workspace?: string; threadTs?: string; attach?: string[] };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n const blocks = input.text ? textToRichTextBlocks(input.text) : null;\n const attachPaths = normalizeAttachPaths(input.options.attach);\n\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspace_url,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const msg = await fetchMessage(client, { ref });\n const threadTs = msg.thread_ts ?? msg.ts;\n await sendMessageToChannel({\n client,\n channelId: ref.channel_id,\n text: input.text,\n blocks,\n threadTs,\n attachPaths,\n });\n },\n });\n return { ok: true };\n }\n\n if (target.kind === \"user\") {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const dmChannelId = await openDmChannel(client, target.userId);\n await sendMessageToChannel({\n client,\n channelId: dmChannelId,\n text: input.text,\n blocks,\n attachPaths,\n });\n },\n });\n return { ok: true };\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [String(target.channel)],\n });\n await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, String(target.channel));\n await sendMessageToChannel({\n client,\n channelId,\n text: input.text,\n blocks,\n threadTs: input.options.threadTs ? String(input.options.threadTs) : undefined,\n attachPaths,\n });\n },\n });\n return { ok: true };\n}\n\nfunction normalizeAttachPaths(raw: string[] | undefined): string[] {\n if (!Array.isArray(raw) || raw.length === 0) {\n return [];\n }\n const out: string[] = [];\n for (const p of raw.map((v) => String(v).trim()).filter(Boolean)) {\n if (!out.includes(p)) {\n out.push(p);\n }\n }\n return out;\n}\n\nasync function sendMessageToChannel(input: {\n client: SlackApiClient;\n channelId: string;\n text: string;\n blocks?: unknown[] | null;\n threadTs?: string;\n attachPaths: string[];\n}): Promise<void> {\n if (input.attachPaths.length === 0) {\n await input.client.api(\"chat.postMessage\", {\n channel: input.channelId,\n text: input.text,\n thread_ts: input.threadTs,\n ...(input.blocks ? { blocks: input.blocks } : {}),\n });\n return;\n }\n\n if (input.blocks) {\n process.stderr.write(\n \"Warning: rich text formatting is not supported with file attachments; sending as plain text.\\n\",\n );\n }\n\n let initialComment = input.text;\n for (const filePath of input.attachPaths) {\n await uploadLocalFileToSlack({\n client: input.client,\n channelId: input.channelId,\n filePath,\n threadTs: input.threadTs,\n initialComment,\n });\n initialComment = \"\";\n }\n}\n\nexport async function editMessage(input: {\n ctx: CliContext;\n targetInput: string;\n text: string;\n options: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message edit does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n await client.api(\"chat.update\", {\n channel: ref.channel_id,\n ts: ref.message_ts,\n text: input.text,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options.ts);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n await client.api(\"chat.update\", {\n channel: channelId,\n ts,\n text: input.text,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport async function deleteMessage(input: {\n ctx: CliContext;\n targetInput: string;\n options: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message delete does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n await client.api(\"chat.delete\", {\n channel: ref.channel_id,\n ts: ref.message_ts,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options.ts);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n await client.api(\"chat.delete\", {\n channel: channelId,\n ts,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport async function reactOnTarget(input: {\n ctx: CliContext;\n action: \"add\" | \"remove\";\n targetInput: string;\n emoji: string;\n options?: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"react does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options?.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const name = normalizeSlackReactionName(input.emoji);\n await client.api(`reactions.${input.action}`, {\n channel: ref.channel_id,\n timestamp: ref.message_ts,\n name,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options?.ts);\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n const name = normalizeSlackReactionName(input.emoji);\n await client.api(`reactions.${input.action}`, {\n channel: channelId,\n timestamp: ts,\n name,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport { handleMessageGet, handleMessageList } from \"./message-read-actions.ts\";\n",
50
+ "import { createHash } from \"node:crypto\";\nimport { join } from \"node:path\";\nimport { getAppDir } from \"../lib/app-dir.ts\";\nimport { readJsonFile, writeJsonFile } from \"../lib/fs.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport type { SlackApiClient } from \"./client.ts\";\nimport type { SlackMessageSummary } from \"./messages.ts\";\nimport { toCompactUser, type CompactSlackUser } from \"./users.ts\";\n\nconst CACHE_VERSION = 1;\nconst USER_TTL_MS = 24 * 60 * 60 * 1000;\nconst USER_ID_PATTERN = /^(U|W)[A-Z0-9]{8,}$/;\nconst USER_MENTION_PATTERN = /<@((U|W)[A-Z0-9]{8,})(?:\\|[^>]+)?>/g;\n\ntype UserCacheEntry = {\n fetched_at: number;\n user: CompactSlackUser;\n};\n\ntype UserCacheFile = {\n version: number;\n entries: Record<string, UserCacheEntry>;\n};\n\nexport async function resolveUsersById(input: {\n client: SlackApiClient;\n workspaceUrl: string;\n userIds: string[];\n forceRefresh?: boolean;\n}): Promise<Map<string, CompactSlackUser>> {\n const uniqueIds = dedupeUserIds(input.userIds);\n if (uniqueIds.length === 0) {\n return new Map<string, CompactSlackUser>();\n }\n\n const forceRefresh = input.forceRefresh ?? false;\n const now = Date.now();\n const workspaceKey = hashWorkspaceUrl(input.workspaceUrl);\n const isUnknownWorkspace = workspaceKey === \"unknown\";\n const cachePath = isUnknownWorkspace ? \"\" : join(getAppDir(), `users-cache-${workspaceKey}.json`);\n\n const diskCache = cachePath\n ? await loadCache(cachePath)\n : { version: CACHE_VERSION, entries: {} };\n const out = new Map<string, CompactSlackUser>();\n const missing: string[] = [];\n\n for (const userId of uniqueIds) {\n const cached = diskCache.entries[userId];\n if (!forceRefresh && cached && now - cached.fetched_at < USER_TTL_MS) {\n out.set(userId, cached.user);\n continue;\n }\n missing.push(userId);\n }\n\n let cacheChanged = false;\n\n if (missing.length > 0) {\n const fetched: { userId: string; user: CompactSlackUser | undefined }[] = [];\n const concurrency = 5;\n for (let i = 0; i < missing.length; i += concurrency) {\n const chunk = missing.slice(i, i + concurrency);\n const results = await Promise.all(\n chunk.map(async (userId) => ({ userId, user: await fetchUserById(input.client, userId) })),\n );\n fetched.push(...results);\n }\n\n for (const item of fetched) {\n if (!item.user) {\n continue;\n }\n const entry: UserCacheEntry = {\n fetched_at: now,\n user: item.user,\n };\n diskCache.entries[item.userId] = entry;\n out.set(item.userId, item.user);\n cacheChanged = true;\n }\n }\n\n if (cachePath) {\n const prunedCache = pruneExpiredEntries(diskCache, now);\n if (Object.keys(diskCache.entries).length !== Object.keys(prunedCache.entries).length) {\n cacheChanged = true;\n }\n\n if (cacheChanged) {\n await writeCache(cachePath, prunedCache);\n }\n }\n\n return out;\n}\n\nexport function collectReferencedUserIds(\n messages: SlackMessageSummary[],\n options?: { includeReactions?: boolean },\n): string[] {\n const ids = new Set<string>();\n const includeReactions = options?.includeReactions ?? false;\n for (const message of messages) {\n collectUserIdsFromMessage(message, ids, { includeReactions });\n }\n return Array.from(ids);\n}\n\nexport function toReferencedUsers(\n userIds: string[],\n usersById: Map<string, CompactSlackUser>,\n): Record<string, CompactSlackUser> | undefined {\n const out: Record<string, CompactSlackUser> = {};\n for (const userId of dedupeUserIds(userIds)) {\n const user = usersById.get(userId);\n if (!user) {\n continue;\n }\n out[userId] = user;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction dedupeUserIds(ids: string[]): string[] {\n const seen = new Set<string>();\n for (const raw of ids) {\n const userId = String(raw).trim();\n if (!USER_ID_PATTERN.test(userId)) {\n continue;\n }\n seen.add(userId);\n }\n return Array.from(seen);\n}\n\nfunction hashWorkspaceUrl(workspaceUrl: string): string {\n const trimmed = workspaceUrl.trim();\n if (!trimmed) {\n return \"unknown\";\n }\n\n let source = trimmed;\n try {\n source = new URL(trimmed).hostname.toLowerCase();\n } catch {\n source = trimmed.toLowerCase();\n }\n\n if (!source || source === \"unknown\") {\n return \"unknown\";\n }\n\n return createHash(\"sha256\").update(source).digest(\"hex\").slice(0, 16);\n}\n\nasync function loadCache(path: string): Promise<UserCacheFile> {\n const file = await readJsonFile<UserCacheFile>(path);\n if (!file || file.version !== CACHE_VERSION || !isRecord(file.entries)) {\n return { version: CACHE_VERSION, entries: {} };\n }\n\n const entries: Record<string, UserCacheEntry> = {};\n for (const [userId, rawEntry] of Object.entries(file.entries)) {\n if (!USER_ID_PATTERN.test(userId) || !isRecord(rawEntry)) {\n continue;\n }\n const fetchedAt = typeof rawEntry.fetched_at === \"number\" ? rawEntry.fetched_at : undefined;\n const user = isRecord(rawEntry.user) ? toCompactUser(rawEntry.user) : null;\n if (!fetchedAt || !user) {\n continue;\n }\n entries[userId] = { fetched_at: fetchedAt, user };\n }\n\n return {\n version: CACHE_VERSION,\n entries,\n };\n}\n\nasync function writeCache(path: string, file: UserCacheFile): Promise<void> {\n try {\n await writeJsonFile(path, file);\n } catch {\n // Cache writes are best effort.\n }\n}\n\nfunction pruneExpiredEntries(file: UserCacheFile, now: number): UserCacheFile {\n const next: Record<string, UserCacheEntry> = {};\n for (const [userId, entry] of Object.entries(file.entries)) {\n if (now - entry.fetched_at >= USER_TTL_MS) {\n continue;\n }\n next[userId] = entry;\n }\n return { version: CACHE_VERSION, entries: next };\n}\n\nasync function fetchUserById(\n client: SlackApiClient,\n userId: string,\n): Promise<CompactSlackUser | undefined> {\n try {\n const resp = await client.api(\"users.info\", { user: userId });\n const user = isRecord(resp.user) ? resp.user : null;\n if (!user) {\n return undefined;\n }\n return toCompactUser(user);\n } catch {\n return undefined;\n }\n}\n\nfunction collectUserIdsFromUnknown(value: unknown, out: Set<string>): void {\n if (typeof value === \"string\") {\n collectMentionUserIds(value, out);\n return;\n }\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectUserIdsFromUnknown(item, out);\n }\n return;\n }\n\n if (!isRecord(value)) {\n return;\n }\n\n for (const [key, child] of Object.entries(value)) {\n if ((key === \"user\" || key === \"user_id\") && typeof child === \"string\") {\n if (USER_ID_PATTERN.test(child)) {\n out.add(child);\n }\n continue;\n }\n\n if (key === \"users\") {\n for (const maybeUserId of asArray(child)) {\n const userId = String(maybeUserId);\n if (USER_ID_PATTERN.test(userId)) {\n out.add(userId);\n }\n }\n continue;\n }\n\n collectUserIdsFromUnknown(child, out);\n }\n}\n\nfunction collectUserIdsFromMessage(\n message: SlackMessageSummary,\n out: Set<string>,\n options: { includeReactions: boolean },\n): void {\n if (message.user && USER_ID_PATTERN.test(message.user)) {\n out.add(message.user);\n }\n\n if (typeof message.text === \"string\") {\n collectMentionUserIds(message.text, out);\n }\n\n collectUserIdsFromUnknown(message.blocks, out);\n collectUserIdsFromUnknown(message.attachments, out);\n\n if (options.includeReactions) {\n collectUserIdsFromUnknown(message.reactions, out);\n }\n}\n\nfunction collectMentionUserIds(text: string, out: Set<string>): void {\n USER_MENTION_PATTERN.lastIndex = 0;\n for (;;) {\n const match = USER_MENTION_PATTERN.exec(text);\n if (!match) {\n break;\n }\n const userId = match[1] ?? \"\";\n if (USER_ID_PATTERN.test(userId)) {\n out.add(userId);\n }\n }\n}\n",
51
+ "import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackUser = {\n id: string;\n name?: string; // handle\n real_name?: string;\n display_name?: string;\n email?: string;\n title?: string;\n tz?: string;\n is_bot?: boolean;\n deleted?: boolean;\n dm_id?: string;\n};\n\nexport async function listUsers(\n client: SlackApiClient,\n options?: {\n limit?: number;\n cursor?: string;\n includeBots?: boolean;\n },\n): Promise<{ users: CompactSlackUser[]; next_cursor?: string }> {\n const limit = Math.min(Math.max(options?.limit ?? 200, 1), 1000);\n const includeBots = options?.includeBots ?? false;\n\n let next_cursor: string | undefined;\n const [out, dmMap] = await Promise.all([\n (async () => {\n const users: CompactSlackUser[] = [];\n let cursor = options?.cursor;\n while (users.length < limit) {\n const pageSize = Math.min(200, limit - users.length);\n const resp = await client.api(\"users.list\", { limit: pageSize, cursor });\n const members = asArray(resp.members).filter(isRecord);\n for (const m of members) {\n const id = getString(m.id);\n if (!id) {\n continue;\n }\n if (!includeBots && m.is_bot) {\n continue;\n }\n users.push(toCompactUser(m));\n if (users.length >= limit) {\n break;\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n next_cursor = next;\n }\n return users;\n })(),\n fetchDmMap(client),\n ]);\n\n for (const u of out) {\n const dmId = dmMap.get(u.id);\n if (dmId) {\n u.dm_id = dmId;\n }\n }\n\n return { users: out, next_cursor };\n}\n\nexport async function getUser(client: SlackApiClient, input: string): Promise<CompactSlackUser> {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(\"User is empty\");\n }\n\n const userId = await resolveUserId(client, trimmed);\n if (!userId) {\n throw new Error(`Could not resolve user: ${input}`);\n }\n\n const resp = await client.api(\"users.info\", { user: userId });\n const u = isRecord(resp.user) ? resp.user : null;\n if (!u || !getString(u.id)) {\n throw new Error(\"users.info returned no user\");\n }\n return toCompactUser(u);\n}\n\nexport async function resolveUserId(client: SlackApiClient, input: string): Promise<string | null> {\n const trimmed = input.trim();\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n return trimmed;\n }\n\n const looksLikeEmail = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(trimmed) && !trimmed.startsWith(\"@\");\n if (looksLikeEmail) {\n try {\n const byEmail = await client.api(\"users.lookupByEmail\", { email: trimmed });\n const user = isRecord(byEmail.user) ? byEmail.user : null;\n const userId = user ? getString(user.id) : undefined;\n if (userId) {\n return userId;\n }\n } catch {\n // Fallback to users.list scan below.\n }\n }\n\n const handle = trimmed.startsWith(\"@\") ? trimmed.slice(1) : trimmed;\n if (!handle) {\n return null;\n }\n\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"users.list\", { limit: 200, cursor });\n const members = asArray(resp.members).filter(isRecord);\n const found = members.find((m) => {\n if (getString(m.name) === handle) {\n return true;\n }\n if (looksLikeEmail) {\n const profile = isRecord(m.profile) ? m.profile : null;\n const email = profile ? getString(profile.email) : undefined;\n return Boolean(email) && email?.toLowerCase() === trimmed.toLowerCase();\n }\n return false;\n });\n if (found) {\n const id = getString(found.id);\n if (id) {\n return id;\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return null;\n}\n\nasync function fetchDmMap(client: SlackApiClient): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.list\", {\n types: \"im\",\n limit: 200,\n cursor,\n });\n const channels = asArray(resp.channels).filter(isRecord);\n for (const ch of channels) {\n const id = getString(ch.id);\n const user = getString(ch.user);\n if (id && user) {\n map.set(user, id);\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return map;\n}\n\nexport async function getDmChannelForUsers(\n client: SlackApiClient,\n inputs: string[],\n): Promise<{ user_ids: string[]; dm_channel_id: string; channel_type: \"dm\" | \"group_dm\" }> {\n if (!inputs || inputs.length === 0) {\n throw new Error(\"At least one user is required\");\n }\n\n if (inputs.length > 8) {\n throw new Error(\"Slack supports a maximum of 8 users in a group DM\");\n }\n\n const userIds: string[] = [];\n for (const input of inputs) {\n const trimmed = input.trim();\n if (!trimmed) {\n continue;\n }\n const userId = await resolveUserId(client, trimmed);\n if (!userId) {\n throw new Error(`Could not resolve user: ${input}`);\n }\n userIds.push(userId);\n }\n\n if (userIds.length === 0) {\n throw new Error(\"No valid users provided\");\n }\n\n const resp = await client.api(\"conversations.open\", { users: userIds.join(\",\") });\n const channel = isRecord(resp.channel) ? resp.channel : null;\n const channelId = channel ? getString(channel.id) : null;\n\n if (!channelId) {\n throw new Error(\"conversations.open returned no channel\");\n }\n\n const channelType = channelId.startsWith(\"D\") ? \"dm\" : \"group_dm\";\n\n return {\n user_ids: userIds,\n dm_channel_id: channelId,\n channel_type: channelType,\n };\n}\n\nexport function toCompactUser(u: Record<string, unknown>): CompactSlackUser {\n const profile = isRecord(u.profile) ? u.profile : {};\n return {\n id: getString(u.id) ?? \"\",\n name: getString(u.name) ?? undefined,\n real_name: getString(u.real_name) ?? getString(profile.real_name) ?? undefined,\n display_name: getString(profile.display_name) ?? undefined,\n email: getString(profile.email) ?? undefined,\n title: getString(profile.title) ?? undefined,\n tz: getString(u.tz) ?? undefined,\n is_bot: typeof u.is_bot === \"boolean\" ? u.is_bot : undefined,\n deleted: typeof u.deleted === \"boolean\" ? u.deleted : undefined,\n };\n}\n",
52
+ "import type { CliContext } from \"./context.ts\";\nimport {\n fetchMessage,\n fetchThread,\n fetchChannelHistory,\n toCompactMessage,\n} from \"../slack/messages.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\nimport { downloadMessageFiles } from \"./message-file-downloads.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { getThreadSummary, toThreadListMessage } from \"./message-thread-info.ts\";\nimport type { MessageCommandOptions } from \"./message-actions.ts\";\nimport {\n parseLimit,\n parseReactionFilters,\n requireOldestWhenReactionFiltersUsed,\n} from \"./message-actions.ts\";\nimport {\n collectReferencedUserIds,\n resolveUsersById,\n toReferencedUsers,\n} from \"../slack/user-cache.ts\";\n\nexport async function handleMessageGet(input: {\n ctx: CliContext;\n targetInput: string;\n options: MessageCommandOptions;\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"message get does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n return input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client, auth } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n const thread = await getThreadSummary(client, { channelId: ref.channel_id, msg });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: [msg] });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const referencedUserIds = collectReferencedUserIds([msg], {\n includeReactions,\n });\n const usersById =\n input.options.resolveUsers || input.options.refreshUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: ref.workspace_url,\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.options.refreshUsers),\n })\n : new Map();\n const message = toCompactMessage(msg, {\n maxBodyChars,\n includeReactions,\n downloadedPaths,\n });\n return pruneEmpty({\n message,\n thread,\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n }) as Record<string, unknown>;\n }\n\n const ts = input.options.ts?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const includeReactions = Boolean(input.options.includeReactions);\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n const ref = {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n channel_id: channelId,\n message_ts: ts,\n thread_ts_hint: input.options.threadTs?.trim() || undefined,\n raw: input.targetInput,\n };\n\n const msg = await fetchMessage(client, { ref, includeReactions });\n const thread = await getThreadSummary(client, { channelId, msg });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: [msg] });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const referencedUserIds = collectReferencedUserIds([msg], {\n includeReactions,\n });\n const usersById =\n input.options.resolveUsers || input.options.refreshUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: ref.workspace_url,\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.options.refreshUsers),\n })\n : new Map();\n const message = toCompactMessage(msg, {\n maxBodyChars,\n includeReactions,\n downloadedPaths,\n });\n return pruneEmpty({\n message,\n thread,\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n }) as Record<string, unknown>;\n },\n });\n}\n\nexport async function handleMessageList(input: {\n ctx: CliContext;\n targetInput: string;\n options: MessageCommandOptions;\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"message list does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n return input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n const withReactions = parseReactionFilters(input.options.withReaction);\n const withoutReactions = parseReactionFilters(input.options.withoutReaction);\n const hasReactionFilters = withReactions.length > 0 || withoutReactions.length > 0;\n\n if (target.kind === \"url\") {\n if (hasReactionFilters) {\n throw new Error(\n \"Reaction filters are only supported for channel history mode (not message URL thread mode)\",\n );\n }\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client, auth } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n const rootTs = msg.thread_ts ?? msg.ts;\n const threadMessages = await fetchThread(client, {\n channelId: ref.channel_id,\n threadTs: rootTs,\n includeReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: threadMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const referencedUserIds = collectReferencedUserIds(threadMessages, {\n includeReactions,\n });\n const usersById =\n input.options.resolveUsers || input.options.refreshUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: ref.workspace_url,\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.options.refreshUsers),\n })\n : new Map();\n return pruneEmpty({\n messages: threadMessages\n .map((m) => toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }))\n .map(toThreadListMessage),\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n }) as Record<string, unknown>;\n }\n\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const channelId = await resolveChannelId(client, target.channel);\n\n const threadTs = input.options.threadTs?.trim();\n const ts = input.options.ts?.trim();\n\n // No thread specifier → list recent channel messages\n if (!threadTs && !ts) {\n const includeReactions = Boolean(input.options.includeReactions);\n const limit = parseLimit(input.options.limit);\n const oldest = requireOldestWhenReactionFiltersUsed({\n oldest: input.options.oldest,\n withReactions,\n withoutReactions,\n });\n const channelMessages = await fetchChannelHistory(client, {\n channelId,\n limit,\n latest: input.options.latest?.trim(),\n oldest,\n includeReactions: includeReactions || hasReactionFilters,\n withReactions,\n withoutReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: channelMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const referencedUserIds = collectReferencedUserIds(channelMessages, {\n includeReactions,\n });\n const usersById =\n input.options.resolveUsers || input.options.refreshUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: workspace_url ?? workspaceUrl ?? \"\",\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.options.refreshUsers),\n })\n : new Map();\n return pruneEmpty({\n channel_id: channelId,\n messages: channelMessages.map((m) =>\n toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }),\n ),\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n }) as Record<string, unknown>;\n }\n\n if (hasReactionFilters) {\n throw new Error(\n \"Reaction filters are only supported for channel history mode (without --thread-ts/--ts)\",\n );\n }\n\n const rootTs =\n threadTs ??\n (await (async () => {\n const ref = {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n channel_id: channelId,\n message_ts: ts!,\n raw: input.targetInput,\n };\n const includeReactions = Boolean(input.options.includeReactions);\n const msg = await fetchMessage(client, { ref, includeReactions });\n return msg.thread_ts ?? msg.ts;\n })());\n\n const includeReactions = Boolean(input.options.includeReactions);\n const threadMessages = await fetchThread(client, {\n channelId,\n threadTs: rootTs,\n includeReactions,\n });\n const downloadedPaths = await downloadMessageFiles({ auth, messages: threadMessages });\n const maxBodyChars = Number.parseInt(input.options.maxBodyChars, 10);\n const referencedUserIds = collectReferencedUserIds(threadMessages, {\n includeReactions,\n });\n const usersById =\n input.options.resolveUsers || input.options.refreshUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: workspace_url ?? workspaceUrl ?? \"\",\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.options.refreshUsers),\n })\n : new Map();\n return pruneEmpty({\n messages: threadMessages\n .map((m) => toCompactMessage(m, { maxBodyChars, includeReactions, downloadedPaths }))\n .map(toThreadListMessage),\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n }) as Record<string, unknown>;\n },\n });\n}\n",
53
+ "import type { CliContext } from \"./context.ts\";\nimport { fetchMessage } from \"../slack/messages.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId, openDmChannel } from \"../slack/channels.ts\";\nimport { normalizeSlackReactionName } from \"../slack/emoji.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { textToRichTextBlocks } from \"../slack/rich-text.ts\";\nimport type { SlackApiClient } from \"../slack/client.ts\";\nimport { uploadLocalFileToSlack } from \"../slack/upload.ts\";\n\nexport type MessageCommandOptions = {\n maxBodyChars: string;\n workspace?: string;\n ts?: string;\n threadTs?: string;\n limit?: string;\n oldest?: string;\n latest?: string;\n withReaction?: string[];\n withoutReaction?: string[];\n includeReactions?: boolean;\n resolveUsers?: boolean;\n refreshUsers?: boolean;\n};\n\nexport function parseLimit(raw: string | undefined): number | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n < 1) {\n throw new Error(`Invalid --limit value \"${raw}\": must be a positive integer`);\n }\n return n;\n}\n\nexport function requireMessageTs(raw: string | undefined): string {\n const ts = raw?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n return ts;\n}\n\nexport function parseReactionFilters(raw: string[] | undefined): string[] {\n if (!Array.isArray(raw) || raw.length === 0) {\n return [];\n }\n const out: string[] = [];\n for (const value of raw) {\n const normalized = normalizeSlackReactionName(String(value));\n if (!out.includes(normalized)) {\n out.push(normalized);\n }\n }\n return out;\n}\n\nexport function requireOldestWhenReactionFiltersUsed(input: {\n oldest?: string;\n withReactions: string[];\n withoutReactions: string[];\n}): string | undefined {\n const hasReactionFilters = input.withReactions.length > 0 || input.withoutReactions.length > 0;\n const oldest = input.oldest?.trim();\n if (!hasReactionFilters) {\n return oldest;\n }\n if (!oldest) {\n throw new Error(\n 'Reaction filters require --oldest \"<seconds>.<micros>\" to bound scan size. Example: --oldest \"1770165109.628379\"',\n );\n }\n return oldest;\n}\n\nexport async function sendMessage(input: {\n ctx: CliContext;\n targetInput: string;\n text: string;\n options: { workspace?: string; threadTs?: string; attach?: string[] };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n const blocks = input.text ? textToRichTextBlocks(input.text) : null;\n const attachPaths = normalizeAttachPaths(input.options.attach);\n\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspace_url,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const msg = await fetchMessage(client, { ref });\n const threadTs = msg.thread_ts ?? msg.ts;\n await sendMessageToChannel({\n client,\n channelId: ref.channel_id,\n text: input.text,\n blocks,\n threadTs,\n attachPaths,\n });\n },\n });\n return { ok: true };\n }\n\n if (target.kind === \"user\") {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const dmChannelId = await openDmChannel(client, target.userId);\n await sendMessageToChannel({\n client,\n channelId: dmChannelId,\n text: input.text,\n blocks,\n attachPaths,\n });\n },\n });\n return { ok: true };\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [String(target.channel)],\n });\n await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, String(target.channel));\n await sendMessageToChannel({\n client,\n channelId,\n text: input.text,\n blocks,\n threadTs: input.options.threadTs ? String(input.options.threadTs) : undefined,\n attachPaths,\n });\n },\n });\n return { ok: true };\n}\n\nfunction normalizeAttachPaths(raw: string[] | undefined): string[] {\n if (!Array.isArray(raw) || raw.length === 0) {\n return [];\n }\n const out: string[] = [];\n for (const p of raw.map((v) => String(v).trim()).filter(Boolean)) {\n if (!out.includes(p)) {\n out.push(p);\n }\n }\n return out;\n}\n\nasync function sendMessageToChannel(input: {\n client: SlackApiClient;\n channelId: string;\n text: string;\n blocks?: unknown[] | null;\n threadTs?: string;\n attachPaths: string[];\n}): Promise<void> {\n if (input.attachPaths.length === 0) {\n await input.client.api(\"chat.postMessage\", {\n channel: input.channelId,\n text: input.text,\n thread_ts: input.threadTs,\n ...(input.blocks ? { blocks: input.blocks } : {}),\n });\n return;\n }\n\n if (input.blocks) {\n process.stderr.write(\n \"Warning: rich text formatting is not supported with file attachments; sending as plain text.\\n\",\n );\n }\n\n let initialComment = input.text;\n for (const filePath of input.attachPaths) {\n await uploadLocalFileToSlack({\n client: input.client,\n channelId: input.channelId,\n filePath,\n threadTs: input.threadTs,\n initialComment,\n });\n initialComment = \"\";\n }\n}\n\nexport async function editMessage(input: {\n ctx: CliContext;\n targetInput: string;\n text: string;\n options: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message edit does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n await client.api(\"chat.update\", {\n channel: ref.channel_id,\n ts: ref.message_ts,\n text: input.text,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options.ts);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n await client.api(\"chat.update\", {\n channel: channelId,\n ts,\n text: input.text,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport async function deleteMessage(input: {\n ctx: CliContext;\n targetInput: string;\n options: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message delete does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n await client.api(\"chat.delete\", {\n channel: ref.channel_id,\n ts: ref.message_ts,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options.ts);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n await client.api(\"chat.delete\", {\n channel: channelId,\n ts,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport async function reactOnTarget(input: {\n ctx: CliContext;\n action: \"add\" | \"remove\";\n targetInput: string;\n emoji: string;\n options?: { workspace?: string; ts?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(input.targetInput);\n if (target.kind === \"user\") {\n throw new Error(\n \"react does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options?.workspace);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: target.kind === \"url\" ? target.ref.workspace_url : workspaceUrl,\n work: async () => {\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const name = normalizeSlackReactionName(input.emoji);\n await client.api(`reactions.${input.action}`, {\n channel: ref.channel_id,\n timestamp: ref.message_ts,\n name,\n });\n return;\n }\n\n const ts = requireMessageTs(input.options?.ts);\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [target.channel],\n });\n\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, target.channel);\n const name = normalizeSlackReactionName(input.emoji);\n await client.api(`reactions.${input.action}`, {\n channel: channelId,\n timestamp: ts,\n name,\n });\n },\n });\n\n return { ok: true };\n}\n\nexport { handleMessageGet, handleMessageList } from \"./message-read-actions.ts\";\n",
52
54
  "import { createServer, type IncomingMessage, type Server } from \"node:http\";\nimport { execFile } from \"node:child_process\";\n// @ts-ignore — import attributes need module:\"esnext\" in tsconfig; Bun handles this fine\nimport _editorHtmlContent from \"./draft-editor.html\" with { type: \"text\" };\n\nexport type DraftEditorConfig = {\n channelName: string;\n channelId?: string;\n workspaceUrl?: string;\n threadTs?: string;\n initialText?: string;\n onSend: (mrkdwn: string) => Promise<{ ts: string }>;\n};\n\nexport type DraftResult = { sent: true; text: string } | { cancelled: true };\n\nexport function openDraftEditor(config: DraftEditorConfig): Promise<DraftResult> {\n return new Promise<DraftResult>((resolve, reject) => {\n let settled = false;\n\n const server: Server = createServer(async (req, res) => {\n if (req.method === \"GET\" && (req.url === \"/\" || req.url === \"/index.html\")) {\n const html = buildEditorHtml(config);\n res.writeHead(200, { \"Content-Type\": \"text/html; charset=utf-8\" });\n res.end(html);\n return;\n }\n\n if (req.method === \"POST\" && req.url === \"/send\") {\n try {\n const body = await readBody(req);\n const data = JSON.parse(body) as { text: string };\n if (typeof data.text !== \"string\" || !data.text.trim()) {\n res.writeHead(400, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: \"text is required\" }));\n return;\n }\n const sendResult = await config.onSend(data.text);\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true, ts: sendResult.ts }));\n settled = true;\n resolve({ sent: true, text: data.text });\n setTimeout(() => server.close(), 300);\n } catch (err: unknown) {\n const safeMessage =\n err instanceof Error\n ? err.message.replace(/xox[a-z]-[A-Za-z0-9-]+/g, \"[REDACTED]\")\n : \"Send failed\";\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: false, error: safeMessage }));\n }\n return;\n }\n\n if (req.method === \"POST\" && req.url === \"/cancel\") {\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ ok: true }));\n settled = true;\n resolve({ cancelled: true });\n setTimeout(() => server.close(), 300);\n return;\n }\n\n res.writeHead(404);\n res.end(\"Not found\");\n });\n\n server.on(\"error\", (err) => {\n if (!settled) {\n reject(err);\n }\n });\n\n server.on(\"close\", () => {\n clearTimeout(idleTimeout);\n if (!settled) {\n settled = true;\n resolve({ cancelled: true });\n }\n });\n\n const idleTimeout = setTimeout(\n () => {\n if (!settled) {\n server.close();\n }\n },\n 30 * 60 * 1000,\n );\n\n server.listen(0, \"127.0.0.1\", () => {\n const addr = server.address();\n const port = typeof addr === \"object\" && addr ? addr.port : 0;\n const url = `http://127.0.0.1:${port}`;\n process.stderr.write(`Draft editor: ${url}\\n`);\n openBrowser(url);\n });\n });\n}\n\nconst MAX_BODY_BYTES = 1024 * 1024; // 1 MB\n\nfunction readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n let totalBytes = 0;\n req.on(\"data\", (chunk: Buffer) => {\n totalBytes += chunk.length;\n if (totalBytes > MAX_BODY_BYTES) {\n req.destroy();\n reject(new Error(\"Request body too large\"));\n return;\n }\n chunks.push(chunk);\n });\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString()));\n req.on(\"error\", reject);\n });\n}\n\nfunction openBrowser(url: string): void {\n const cmd =\n process.platform === \"darwin\" ? \"open\" : process.platform === \"win32\" ? \"start\" : \"xdg-open\";\n execFile(cmd, [url], () => {});\n}\n\nfunction buildSlackThreadUrl(config: DraftEditorConfig): string | null {\n if (!config.workspaceUrl || !config.channelId || !config.threadTs) {\n return null;\n }\n const tsNoDot = config.threadTs.replaceAll(\".\", \"\");\n return `${config.workspaceUrl.replace(/\\/$/, \"\")}/archives/${config.channelId}/p${tsNoDot}`;\n}\n\nfunction extractWorkspaceName(url?: string): string | null {\n if (!url) {\n return null;\n }\n try {\n const host = new URL(url).hostname; // e.g. \"stablygroup.slack.com\"\n const parts = host.split(\".\");\n if (parts.length >= 3 && parts.at(-2) === \"slack\") {\n return parts.slice(0, -2).join(\".\"); // e.g. \"stablygroup\"\n }\n return host;\n } catch {\n return null;\n }\n}\n\nfunction buildEditorHtml(config: DraftEditorConfig): string {\n const threadUrl = buildSlackThreadUrl(config);\n const workspaceName = extractWorkspaceName(config.workspaceUrl);\n const injectedConfig = JSON.stringify({\n channelName: config.channelName,\n channelId: config.channelId || null,\n workspaceUrl: config.workspaceUrl || null,\n workspaceName,\n threadTs: config.threadTs || null,\n threadUrl,\n initialText: config.initialText || \"\",\n });\n\n // JSON.stringify handles quotes/backslashes; escape < and > to prevent\n // </script> breakout and other HTML injection in <script> context.\n const safeConfig = injectedConfig.replace(/</g, \"\\\\u003c\").replace(/>/g, \"\\\\u003e\");\n return getEditorHtml().replace(\"__DRAFT_CONFIG__\", safeConfig);\n}\n\nfunction getEditorHtml(): string {\n return _editorHtmlContent;\n}\n",
53
55
  "import type { CliContext } from \"./context.ts\";\nimport { fetchMessage } from \"../slack/messages.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId, resolveChannelName, normalizeChannelInput } from \"../slack/channels.ts\";\nimport { warnOnTruncatedSlackUrl } from \"./message-url-warning.ts\";\nimport { openDraftEditor } from \"./draft-server.ts\";\n\nexport async function draftMessage(input: {\n ctx: CliContext;\n targetInput: string;\n initialText?: string;\n options: { workspace?: string; threadTs?: string };\n}): Promise<Record<string, unknown>> {\n const target = parseMsgTarget(String(input.targetInput));\n if (target.kind === \"user\") {\n throw new Error(\n \"message draft does not support user ID targets. Use a channel name, channel ID, or message URL.\",\n );\n }\n\n // URL target: resolve thread context and send\n if (target.kind === \"url\") {\n const { ref } = target;\n warnOnTruncatedSlackUrl(ref);\n return input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspace_url,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspace_url);\n const msg = await fetchMessage(client, { ref });\n const threadTs = input.options.threadTs ?? msg.thread_ts ?? msg.ts;\n const channelName = await resolveChannelName(client, ref.channel_id);\n\n return draftWithEditor({\n channelName,\n channelId: ref.channel_id,\n workspaceUrl: ref.workspace_url,\n threadTs,\n initialText: input.initialText,\n sendFn: async (text: string) => {\n const resp = await client.api(\"chat.postMessage\", {\n channel: ref.channel_id,\n text,\n thread_ts: threadTs,\n });\n return { ts: resp.ts as string };\n },\n });\n },\n });\n }\n\n // Channel name/ID target\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [String(target.channel)],\n });\n\n return input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, String(target.channel));\n const normalized = normalizeChannelInput(target.channel);\n const channelName =\n normalized.kind === \"name\" ? normalized.value : await resolveChannelName(client, channelId);\n\n return draftWithEditor({\n channelName,\n channelId,\n workspaceUrl,\n threadTs: input.options.threadTs,\n initialText: input.initialText,\n sendFn: async (text: string) => {\n const resp = await client.api(\"chat.postMessage\", {\n channel: channelId,\n text,\n thread_ts: input.options.threadTs,\n });\n return { ts: resp.ts as string };\n },\n });\n },\n });\n}\n\nasync function draftWithEditor(input: {\n channelName: string;\n channelId: string;\n workspaceUrl?: string;\n threadTs?: string;\n initialText?: string;\n sendFn: (text: string) => Promise<{ ts: string }>;\n}): Promise<Record<string, unknown>> {\n // In CI mode, skip the editor and send directly\n if (process.env.CI) {\n if (!input.initialText) {\n throw new Error(\"In CI mode, initial text is required (no editor available)\");\n }\n const result = await input.sendFn(input.initialText);\n return { ok: true, sent: true, editor: \"skipped\", ts: result.ts };\n }\n\n const result = await openDraftEditor({\n channelName: input.channelName,\n channelId: input.channelId,\n workspaceUrl: input.workspaceUrl,\n threadTs: input.threadTs,\n initialText: input.initialText,\n onSend: input.sendFn,\n });\n\n if (\"cancelled\" in result) {\n return { ok: true, cancelled: true };\n }\n\n return { ok: true, sent: true };\n}\n",
54
- "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport {\n deleteMessage,\n editMessage,\n handleMessageGet,\n handleMessageList,\n reactOnTarget,\n sendMessage,\n type MessageCommandOptions,\n} from \"./message-actions.ts\";\nimport { draftMessage } from \"./draft-actions.ts\";\n\nfunction collectOptionValue(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nexport function registerMessageCommand(input: { program: Command; ctx: CliContext }): void {\n const messageCmd = input.program\n .command(\"message\")\n .description(\"Read/write Slack messages (token-efficient JSON)\");\n\n messageCmd\n .command(\"get\", { isDefault: true })\n .description(\"Fetch a single Slack message (with thread summary if any)\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .option(\"--thread-ts <ts>\", \"Thread root ts hint (useful for thread permalinks)\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters to include (default 8000, -1 for unlimited)\",\n \"8000\",\n )\n .option(\"--include-reactions\", \"Include reactions + reacting users\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, MessageCommandOptions];\n try {\n const payload = await handleMessageGet({ ctx: input.ctx, targetInput, options });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"list\")\n .description(\"List recent channel messages, or fetch a full thread\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts (lists thread replies instead of channel history)\")\n .option(\"--ts <ts>\", \"Message ts (resolve message to its thread)\")\n .option(\"--limit <n>\", \"Max messages to return for channel history (default 25, max 200)\")\n .option(\"--oldest <ts>\", \"Only messages after this ts (channel history mode)\")\n .option(\"--latest <ts>\", \"Only messages before this ts (channel history mode)\")\n .option(\n \"--with-reaction <emoji>\",\n \"Only include messages with this reaction (repeatable; channel history mode; requires --oldest)\",\n collectOptionValue,\n [],\n )\n .option(\n \"--without-reaction <emoji>\",\n \"Only include messages without this reaction (repeatable; channel history mode; requires --oldest)\",\n collectOptionValue,\n [],\n )\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters to include (default 8000, -1 for unlimited)\",\n \"8000\",\n )\n .option(\"--include-reactions\", \"Include reactions + reacting users\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, MessageCommandOptions];\n try {\n const payload = await handleMessageList({ ctx: input.ctx, targetInput, options });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"edit\")\n .description(\"Edit a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<text>\", \"New message text\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await editMessage({\n ctx: input.ctx,\n targetInput,\n text,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"delete\")\n .description(\"Delete a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const payload = await deleteMessage({\n ctx: input.ctx,\n targetInput,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"send\")\n .description(\"Send a message (optionally into a thread)\")\n .argument(\"<target>\", \"Slack message URL, #name/name, or channel id\")\n .argument(\"[text]\", \"Message text to post (optional when using --attach)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts to post into (optional)\")\n .option(\"--attach <path>\", \"Attach a local file path (repeatable)\", collectOptionValue, [])\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string | undefined,\n { workspace?: string; threadTs?: string; attach?: string[] },\n ];\n const hasAttach = (options.attach ?? []).length > 0;\n if (!text && !hasAttach) {\n console.error(\"Error: <text> is required when no --attach files are provided.\");\n process.exitCode = 1;\n return;\n }\n try {\n const payload = await sendMessage({\n ctx: input.ctx,\n targetInput,\n text: text ?? \"\",\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"draft\")\n .description(\"Open a rich Slack-like editor to compose and send a message\")\n .argument(\"<target>\", \"Slack message URL, #name/name, or channel id\")\n .argument(\"[text]\", \"Initial draft text (mrkdwn format)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts to post into (optional)\")\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string | undefined,\n { workspace?: string; threadTs?: string },\n ];\n try {\n const payload = await draftMessage({\n ctx: input.ctx,\n targetInput,\n initialText: text,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n const reactCmd = messageCmd.command(\"react\").description(\"Add or remove reactions\");\n\n reactCmd\n .command(\"add\")\n .description(\"Add a reaction to a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<emoji>\", \"Emoji to react with (:rocket:, rocket, or 🚀)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, emoji, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await reactOnTarget({\n ctx: input.ctx,\n action: \"add\",\n targetInput,\n emoji,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n reactCmd\n .command(\"remove\")\n .description(\"Remove a reaction from a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<emoji>\", \"Emoji to remove (:rocket:, rocket, or 🚀)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, emoji, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await reactOnTarget({\n ctx: input.ctx,\n action: \"remove\",\n targetInput,\n emoji,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
56
+ "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport {\n deleteMessage,\n editMessage,\n handleMessageGet,\n handleMessageList,\n reactOnTarget,\n sendMessage,\n type MessageCommandOptions,\n} from \"./message-actions.ts\";\nimport { draftMessage } from \"./draft-actions.ts\";\n\nfunction collectOptionValue(value: string, previous: string[] = []): string[] {\n return [...previous, value];\n}\n\nexport function registerMessageCommand(input: { program: Command; ctx: CliContext }): void {\n const messageCmd = input.program\n .command(\"message\")\n .description(\"Read/write Slack messages (token-efficient JSON)\");\n\n messageCmd\n .command(\"get\", { isDefault: true })\n .description(\"Fetch a single Slack message (with thread summary if any)\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .option(\"--thread-ts <ts>\", \"Thread root ts hint (useful for thread permalinks)\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters to include (default 8000, -1 for unlimited)\",\n \"8000\",\n )\n .option(\"--include-reactions\", \"Include reactions + reacting users\")\n .option(\"--resolve-users\", \"Resolve user IDs to user profiles\")\n .option(\n \"--refresh-users\",\n \"Refresh user profile cache before resolving user IDs (implies --resolve-users)\",\n )\n .action(async (...args) => {\n const [targetInput, options] = args as [string, MessageCommandOptions];\n try {\n const payload = await handleMessageGet({ ctx: input.ctx, targetInput, options });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"list\")\n .description(\"List recent channel messages, or fetch a full thread\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts (lists thread replies instead of channel history)\")\n .option(\"--ts <ts>\", \"Message ts (resolve message to its thread)\")\n .option(\"--limit <n>\", \"Max messages to return for channel history (default 25, max 200)\")\n .option(\"--oldest <ts>\", \"Only messages after this ts (channel history mode)\")\n .option(\"--latest <ts>\", \"Only messages before this ts (channel history mode)\")\n .option(\n \"--with-reaction <emoji>\",\n \"Only include messages with this reaction (repeatable; channel history mode; requires --oldest)\",\n collectOptionValue,\n [],\n )\n .option(\n \"--without-reaction <emoji>\",\n \"Only include messages without this reaction (repeatable; channel history mode; requires --oldest)\",\n collectOptionValue,\n [],\n )\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters to include (default 8000, -1 for unlimited)\",\n \"8000\",\n )\n .option(\"--include-reactions\", \"Include reactions + reacting users\")\n .option(\"--resolve-users\", \"Resolve user IDs to user profiles\")\n .option(\n \"--refresh-users\",\n \"Refresh user profile cache before resolving user IDs (implies --resolve-users)\",\n )\n .action(async (...args) => {\n const [targetInput, options] = args as [string, MessageCommandOptions];\n try {\n const payload = await handleMessageList({ ctx: input.ctx, targetInput, options });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"edit\")\n .description(\"Edit a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<text>\", \"New message text\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await editMessage({\n ctx: input.ctx,\n targetInput,\n text,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"delete\")\n .description(\"Delete a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const payload = await deleteMessage({\n ctx: input.ctx,\n targetInput,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"send\")\n .description(\"Send a message (optionally into a thread)\")\n .argument(\"<target>\", \"Slack message URL, #name/name, or channel id\")\n .argument(\"[text]\", \"Message text to post (optional when using --attach)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts to post into (optional)\")\n .option(\"--attach <path>\", \"Attach a local file path (repeatable)\", collectOptionValue, [])\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string | undefined,\n { workspace?: string; threadTs?: string; attach?: string[] },\n ];\n const hasAttach = (options.attach ?? []).length > 0;\n if (!text && !hasAttach) {\n console.error(\"Error: <text> is required when no --attach files are provided.\");\n process.exitCode = 1;\n return;\n }\n try {\n const payload = await sendMessage({\n ctx: input.ctx,\n targetInput,\n text: text ?? \"\",\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n messageCmd\n .command(\"draft\")\n .description(\"Open a rich Slack-like editor to compose and send a message\")\n .argument(\"<target>\", \"Slack message URL, #name/name, or channel id\")\n .argument(\"[text]\", \"Initial draft text (mrkdwn format)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--thread-ts <ts>\", \"Thread root ts to post into (optional)\")\n .action(async (...args) => {\n const [targetInput, text, options] = args as [\n string,\n string | undefined,\n { workspace?: string; threadTs?: string },\n ];\n try {\n const payload = await draftMessage({\n ctx: input.ctx,\n targetInput,\n initialText: text,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n const reactCmd = messageCmd.command(\"react\").description(\"Add or remove reactions\");\n\n reactCmd\n .command(\"add\")\n .description(\"Add a reaction to a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<emoji>\", \"Emoji to react with (:rocket:, rocket, or 🚀)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, emoji, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await reactOnTarget({\n ctx: input.ctx,\n action: \"add\",\n targetInput,\n emoji,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n reactCmd\n .command(\"remove\")\n .description(\"Remove a reaction from a message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .argument(\"<emoji>\", \"Emoji to remove (:rocket:, rocket, or 🚀)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when using #channel/channel id across multiple workspaces)\",\n )\n .option(\"--ts <ts>\", \"Message ts (required when using #channel/channel id)\")\n .action(async (...args) => {\n const [targetInput, emoji, options] = args as [\n string,\n string,\n { workspace?: string; ts?: string },\n ];\n try {\n const payload = await reactOnTarget({\n ctx: input.ctx,\n action: \"remove\",\n targetInput,\n emoji,\n options,\n });\n console.log(JSON.stringify(payload, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
55
57
  "import type { SlackApiClient } from \"./client.ts\";\nimport { normalizeChannelInput } from \"./channels.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport async function buildSlackSearchQuery(\n client: SlackApiClient,\n input: {\n query: string;\n channels?: string[];\n user?: string;\n after?: string;\n before?: string;\n },\n): Promise<string> {\n const parts: string[] = [];\n const base = input.query.trim();\n if (base) {\n parts.push(base);\n }\n\n if (input.after) {\n parts.push(`after:${validateDate(input.after)}`);\n }\n if (input.before) {\n parts.push(`before:${validateDate(input.before)}`);\n }\n\n if (input.user) {\n const token = await userTokenForSearch(client, input.user);\n if (token) {\n parts.push(token);\n }\n }\n\n if (input.channels && input.channels.length > 0) {\n for (const ch of input.channels) {\n const inToken = await channelTokenForSearch(client, ch);\n if (inToken) {\n parts.push(inToken);\n }\n }\n }\n\n return parts.join(\" \");\n}\n\nexport function validateDate(s: string): string {\n const v = s.trim();\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(v)) {\n throw new Error(`Invalid date: ${s} (expected YYYY-MM-DD)`);\n }\n return v;\n}\n\nexport function dateToUnixSeconds(date: string, edge: \"start\" | \"end\"): number {\n const d = validateDate(date);\n const iso = edge === \"start\" ? `${d}T00:00:00.000Z` : `${d}T23:59:59.999Z`;\n return Math.floor(Date.parse(iso) / 1000);\n}\n\nasync function userTokenForSearch(client: SlackApiClient, user: string): Promise<string | null> {\n const trimmed = user.trim();\n if (!trimmed) {\n return null;\n }\n\n // Accept @name or name\n if (trimmed.startsWith(\"@\")) {\n return `from:@${trimmed.slice(1)}`;\n }\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n try {\n const info = await client.api(\"users.info\", { user: trimmed });\n const infoUser = isRecord(info) ? info.user : null;\n const name = isRecord(infoUser) ? (getString(infoUser.name) ?? \"\").trim() : \"\";\n return name ? `from:@${name}` : null;\n } catch {\n return null;\n }\n }\n return `from:@${trimmed}`;\n}\n\nasync function channelTokenForSearch(\n client: SlackApiClient,\n channel: string,\n): Promise<string | null> {\n const normalized = normalizeChannelInput(channel);\n if (normalized.kind === \"name\") {\n const name = normalized.value.trim();\n if (!name) {\n return null;\n }\n return `in:#${name}`;\n }\n\n // Channel id -> name for use in search query.\n try {\n const info = await client.api(\"conversations.info\", {\n channel: normalized.value,\n });\n const channelInfo = isRecord(info) ? info.channel : null;\n const name = isRecord(channelInfo) ? (getString(channelInfo.name) ?? \"\").trim() : \"\";\n if (name) {\n return `in:#${name}`;\n }\n } catch {\n // ignore\n }\n return null;\n}\n\nexport async function resolveUserId(\n client: SlackApiClient,\n input: string,\n): Promise<string | undefined> {\n const trimmed = input.trim();\n if (!trimmed) {\n return undefined;\n }\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n return trimmed;\n }\n const name = trimmed.startsWith(\"@\") ? trimmed.slice(1) : trimmed;\n\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"users.list\", { limit: 200, cursor });\n const members = isRecord(resp) ? asArray(resp.members).filter(isRecord) : [];\n const found = members.find((m) => {\n const mName = getString(m.name);\n const profile = isRecord(m.profile) ? m.profile : null;\n const display = profile ? getString(profile.display_name) : undefined;\n return mName === name || display === name;\n });\n const foundId = found ? getString(found.id) : undefined;\n if (foundId) {\n return foundId;\n }\n const meta = isRecord(resp) ? resp.response_metadata : null;\n const next = isRecord(meta) ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return undefined;\n}\n",
56
58
  "import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport async function searchMessagesRaw(\n client: SlackApiClient,\n input: { query: string; limit: number },\n): Promise<Record<string, unknown>[]> {\n const pageSize = Math.min(Math.max(input.limit, 1), 100);\n const out: Record<string, unknown>[] = [];\n let page = 1;\n let pages = 1;\n\n for (;;) {\n const resp = await client.api(\"search.messages\", {\n query: input.query,\n count: pageSize,\n page,\n highlight: false,\n sort: \"timestamp\",\n sort_dir: \"desc\",\n });\n const messages = isRecord(resp) ? resp.messages : null;\n const matches = isRecord(messages) ? asArray(messages.matches).filter(isRecord) : [];\n out.push(...matches);\n\n const paging = isRecord(messages) ? (messages.paging ?? messages.pagination) : null;\n const totalPages = Number(isRecord(paging) ? (paging.pages ?? 1) : 1);\n if (Number.isFinite(totalPages) && totalPages > 0) {\n pages = totalPages;\n }\n\n if (out.length >= input.limit) {\n break;\n }\n if (matches.length === 0) {\n break;\n }\n if (page >= pages) {\n break;\n }\n page++;\n }\n\n return out.slice(0, input.limit);\n}\n\nexport async function searchFilesRaw(\n client: SlackApiClient,\n input: { query: string; limit: number },\n): Promise<Record<string, unknown>[]> {\n const pageSize = Math.min(Math.max(input.limit, 1), 100);\n const out: Record<string, unknown>[] = [];\n let page = 1;\n let pages = 1;\n\n for (;;) {\n const resp = await client.api(\"search.files\", {\n query: input.query,\n count: pageSize,\n page,\n highlight: false,\n sort: \"timestamp\",\n sort_dir: \"desc\",\n });\n const files = isRecord(resp) ? resp.files : null;\n const matches = isRecord(files) ? asArray(files.matches).filter(isRecord) : [];\n out.push(...matches);\n\n const paging = isRecord(files) ? (files.paging ?? files.pagination) : null;\n const totalPages = Number(isRecord(paging) ? (paging.pages ?? 1) : 1);\n if (Number.isFinite(totalPages) && totalPages > 0) {\n pages = totalPages;\n }\n\n if (out.length >= input.limit) {\n break;\n }\n if (matches.length === 0) {\n break;\n }\n if (page >= pages) {\n break;\n }\n page++;\n }\n\n return out.slice(0, input.limit);\n}\n",
57
59
  "export function inferExt(file: {\n mimetype?: string;\n filetype?: string;\n name?: string;\n title?: string;\n}): string | null {\n const mt = (file.mimetype || \"\").toLowerCase();\n const ft = (file.filetype || \"\").toLowerCase();\n\n if (mt === \"image/png\" || ft === \"png\") {\n return \"png\";\n }\n if (mt === \"image/jpeg\" || mt === \"image/jpg\" || ft === \"jpg\" || ft === \"jpeg\") {\n return \"jpg\";\n }\n if (mt === \"image/webp\" || ft === \"webp\") {\n return \"webp\";\n }\n if (mt === \"image/gif\" || ft === \"gif\") {\n return \"gif\";\n }\n\n if (mt === \"text/plain\" || ft === \"text\") {\n return \"txt\";\n }\n if (mt === \"text/markdown\" || ft === \"markdown\" || ft === \"md\") {\n return \"md\";\n }\n if (mt === \"application/json\" || ft === \"json\") {\n return \"json\";\n }\n\n const name = file.name || file.title || \"\";\n const m = name.match(/\\.([A-Za-z0-9]{1,10})$/);\n return m ? m[1]!.toLowerCase() : null;\n}\n",
58
60
  "import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport { tryDownloadSlackFile } from \"./files.ts\";\nimport { inferExt } from \"./search-file-ext.ts\";\nimport { dateToUnixSeconds, resolveUserId } from \"./search-query.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport async function searchFilesViaSearchApi(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n slack_query: string;\n limit: number;\n contentType: ContentType;\n rawMatches: Record<string, unknown>[];\n },\n): Promise<{ title?: string; mimetype?: string; mode?: string; path: string }[]> {\n const matches = input.rawMatches;\n if (matches.length === 0) {\n return [];\n }\n\n const downloadsDir = await ensureDownloadsDir();\n const out: { title?: string; mimetype?: string; mode?: string; path: string }[] = [];\n\n for (const f of matches) {\n const mode = getString(f.mode);\n const mimetype = getString(f.mimetype);\n if (!passesFileContentTypeFilter({ mode, mimetype }, input.contentType)) {\n continue;\n }\n const url = getString(f.url_private_download) ?? getString(f.url_private);\n if (!url) {\n continue;\n }\n const ext = inferExt({\n mimetype,\n filetype: getString(f.filetype),\n name: getString(f.name),\n title: getString(f.title),\n });\n const id = getString(f.id);\n if (!id) {\n continue;\n }\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n console.warn(`Warning: skipping file ${id}: ${result.error}`);\n continue;\n }\n const title = (getString(f.title) || getString(f.name) || \"\").trim();\n out.push({\n title: title || undefined,\n mimetype,\n mode,\n path: result.path,\n });\n if (out.length >= input.limit) {\n break;\n }\n }\n\n return out;\n}\n\nexport async function searchFilesInChannelsFallback(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n query: string;\n channels: string[];\n user?: string;\n after?: string;\n before?: string;\n limit: number;\n contentType: ContentType;\n },\n): Promise<{ title?: string; mimetype?: string; mode?: string; path: string }[]> {\n const channelIds = await Promise.all(input.channels.map((c) => resolveChannelId(client, c)));\n const userId = input.user ? await resolveUserId(client, input.user) : undefined;\n const queryLower = input.query.trim().toLowerCase();\n\n const ts_from = input.after ? dateToUnixSeconds(input.after, \"start\") : undefined;\n const ts_to = input.before ? dateToUnixSeconds(input.before, \"end\") : undefined;\n\n const downloadsDir = await ensureDownloadsDir();\n const out: { title?: string; mimetype?: string; mode?: string; path: string }[] = [];\n\n for (const channelId of channelIds) {\n let page = 1;\n for (;;) {\n const resp = await client.api(\"files.list\", {\n channel: channelId,\n user: userId,\n ts_from,\n ts_to,\n count: 100,\n page,\n });\n const files = isRecord(resp) ? asArray(resp.files).filter(isRecord) : [];\n if (files.length === 0) {\n break;\n }\n\n for (const f of files) {\n const mode = getString(f.mode);\n const mimetype = getString(f.mimetype);\n if (!passesFileContentTypeFilter({ mode, mimetype }, input.contentType)) {\n continue;\n }\n\n const title = (getString(f.title) || getString(f.name) || \"\").trim();\n if (queryLower && !title.toLowerCase().includes(queryLower)) {\n continue;\n }\n\n const url = getString(f.url_private_download) ?? getString(f.url_private);\n if (!url) {\n continue;\n }\n\n const ext = inferExt({\n mimetype,\n filetype: getString(f.filetype),\n name: getString(f.name),\n title: getString(f.title),\n });\n const id = getString(f.id);\n if (!id) {\n continue;\n }\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: downloadsDir,\n preferredName: `${id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n console.warn(`Warning: skipping file ${id}: ${result.error}`);\n continue;\n }\n out.push({\n title: title || undefined,\n mimetype,\n mode,\n path: result.path,\n });\n if (out.length >= input.limit) {\n return out;\n }\n }\n\n const paging = isRecord(resp)\n ? isRecord(resp.paging)\n ? resp.paging\n : resp.pagination\n : null;\n const pages = Number(isRecord(paging) ? (paging.pages ?? paging.page_count) : undefined);\n if (Number.isFinite(pages) && page >= pages) {\n break;\n }\n page++;\n }\n }\n\n return out;\n}\n\nfunction passesFileContentTypeFilter(\n f: { mode?: string; mimetype?: string },\n contentType: ContentType,\n): boolean {\n if (contentType === \"any\") {\n return true;\n }\n if (contentType === \"file\") {\n return true;\n }\n if (contentType === \"snippet\") {\n return f.mode === \"snippet\";\n }\n if (contentType === \"image\") {\n return String(f.mimetype ?? \"\")\n .toLowerCase()\n .startsWith(\"image/\");\n }\n if (contentType === \"text\") {\n return String(f.mimetype ?? \"\") === \"text/plain\";\n }\n return true;\n}\n",
59
- "import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage, SlackFileSummary, SlackMessageSummary } from \"./messages.ts\";\nimport { fetchMessage, toCompactMessage } from \"./messages.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { type DownloadResult, tryDownloadSlackFile, writeDownloadErrorFile } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { parseSlackMessageUrl } from \"./url.ts\";\nimport { inferExt } from \"./search-file-ext.ts\";\nimport { dateToUnixSeconds, resolveUserId } from \"./search-query.ts\";\nimport { asArray, getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\n\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport async function searchMessagesViaSearchApi(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n workspace_url?: string;\n slack_query: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n rawMatches: Record<string, unknown>[];\n },\n): Promise<Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[]> {\n const matches = input.rawMatches;\n if (matches.length === 0) {\n return [];\n }\n\n const messageRefs: {\n channel_id: string;\n message_ts: string;\n permalink?: string;\n }[] = [];\n for (const m of matches) {\n const ts = getString(m.ts)?.trim() ?? \"\";\n if (!ts) {\n continue;\n }\n const channelValue = isRecord(m.channel) ? m.channel : null;\n const channelId =\n channelValue && getString(channelValue.id)\n ? getString(channelValue.id)!\n : channelValue && getString(channelValue.name)\n ? await resolveChannelId(client, `#${getString(channelValue.name)}`)\n : \"\";\n if (!channelId) {\n continue;\n }\n messageRefs.push({\n channel_id: channelId,\n message_ts: ts,\n permalink: getString(m.permalink),\n });\n if (messageRefs.length >= input.limit) {\n break;\n }\n }\n\n const downloadedPaths: Record<string, DownloadResult> = {};\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const out: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[] = [];\n\n for (const ref of messageRefs) {\n let full: SlackMessageSummary | null = null;\n try {\n const parsed =\n ref.permalink && typeof ref.permalink === \"string\"\n ? (() => {\n try {\n return parseSlackMessageUrl(ref.permalink);\n } catch {\n return null;\n }\n })()\n : null;\n\n full = await fetchMessage(client, {\n ref: {\n workspace_url: parsed?.workspace_url ?? input.workspace_url ?? \"\",\n channel_id: ref.channel_id,\n message_ts: ref.message_ts,\n thread_ts_hint: parsed?.thread_ts_hint,\n raw: parsed?.raw ?? ref.permalink ?? `${ref.channel_id}:${ref.message_ts}`,\n },\n });\n } catch {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: full,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(full, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n out.push(stripThreadListFields(compact));\n if (out.length >= input.limit) {\n break;\n }\n }\n\n return out;\n}\n\nexport async function searchMessagesInChannelsFallback(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n query: string;\n channels: string[];\n user?: string;\n after?: string;\n before?: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n },\n): Promise<Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[]> {\n const channelIds = await Promise.all(input.channels.map((c) => resolveChannelId(client, c)));\n const queryLower = input.query.trim().toLowerCase();\n\n const userId = input.user ? await resolveUserId(client, input.user) : undefined;\n\n const afterSec = input.after ? dateToUnixSeconds(input.after, \"start\") : null;\n const beforeSec = input.before ? dateToUnixSeconds(input.before, \"end\") : null;\n\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const downloadedPaths: Record<string, DownloadResult> = {};\n\n const results: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[] = [];\n\n for (const channelId of channelIds) {\n let cursorLatest: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.history\", {\n channel: channelId,\n limit: 200,\n latest: cursorLatest,\n });\n const messages = isRecord(resp) ? asArray(resp.messages).filter(isRecord) : [];\n if (messages.length === 0) {\n break;\n }\n\n for (const m of messages) {\n const summary = messageSummaryFromApiMessage(channelId, m);\n\n const tsNum = Number.parseFloat(summary.ts);\n if (Number.isFinite(tsNum)) {\n if (beforeSec !== null && tsNum > beforeSec) {\n continue;\n }\n if (afterSec !== null && tsNum < afterSec) {\n cursorLatest = undefined;\n break;\n }\n }\n\n if (userId && summary.user !== userId) {\n continue;\n }\n\n const content = renderSlackMessageContent(summary);\n if (queryLower && !content.toLowerCase().includes(queryLower)) {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: summary,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(summary, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n\n results.push(stripThreadListFields(compact));\n if (results.length >= input.limit) {\n return results;\n }\n }\n\n if (!cursorLatest) {\n break;\n }\n\n const last = messages.at(-1);\n cursorLatest = last ? getString(last.ts) : undefined;\n if (!cursorLatest) {\n break;\n }\n }\n }\n\n return results;\n}\n\nexport function passesContentTypeFilter(m: CompactSlackMessage, contentType: ContentType): boolean {\n if (contentType === \"any\") {\n return true;\n }\n const hasFiles = Boolean(m.files && m.files.length > 0);\n if (contentType === \"text\") {\n return !hasFiles;\n }\n if (!hasFiles) {\n return false;\n }\n\n if (contentType === \"file\") {\n return true;\n }\n if (contentType === \"snippet\") {\n return (m.files ?? []).some((f) => f.mode === \"snippet\");\n }\n if (contentType === \"image\") {\n return (m.files ?? []).some((f) => String(f.mimetype ?? \"\").startsWith(\"image/\"));\n }\n return true;\n}\n\nfunction stripThreadListFields(\n m: CompactSlackMessage,\n): Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\"> {\n const { channel_id: _channelId, thread_ts: _threadTs, ...rest } = m;\n return rest;\n}\n\nasync function downloadFilesForMessage(input: {\n auth: SlackAuth;\n downloadsDir: string;\n message: SlackMessageSummary;\n downloadedPaths: Record<string, DownloadResult>;\n}): Promise<void> {\n for (const f of input.message.files ?? []) {\n if (input.downloadedPaths[f.id]) {\n continue;\n }\n const url = f.url_private_download || f.url_private;\n if (!url) {\n continue;\n }\n const ext = inferExt(f);\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: input.downloadsDir,\n preferredName: `${f.id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n input.downloadedPaths[f.id] = {\n ...result,\n path: await writeDownloadErrorFile({\n destDir: input.downloadsDir,\n fileId: f.id,\n error: result.error,\n }),\n };\n console.warn(`Warning: file ${f.id}: ${result.error}`);\n } else {\n input.downloadedPaths[f.id] = result;\n }\n }\n}\n\nfunction messageSummaryFromApiMessage(\n channelId: string,\n msg: Record<string, unknown>,\n): SlackMessageSummary {\n const text = getString(msg.text) ?? \"\";\n const files = asArray(msg.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n\n return {\n channel_id: channelId,\n ts: getString(msg.ts) ?? \"\",\n thread_ts: getString(msg.thread_ts),\n reply_count: getNumber(msg.reply_count),\n user: getString(msg.user),\n bot_id: getString(msg.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(msg.blocks) ? (msg.blocks as unknown[]) : undefined,\n attachments: Array.isArray(msg.attachments) ? (msg.attachments as unknown[]) : undefined,\n files: files.length > 0 ? files : undefined,\n reactions: Array.isArray(msg.reactions) ? (msg.reactions as unknown[]) : undefined,\n };\n}\n\nfunction toSlackFileSummary(value: unknown): SlackFileSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = getString(value.id);\n if (!id) {\n return null;\n }\n return {\n id,\n name: getString(value.name),\n title: getString(value.title),\n mimetype: getString(value.mimetype),\n filetype: getString(value.filetype),\n mode: getString(value.mode),\n permalink: getString(value.permalink),\n url_private: getString(value.url_private),\n url_private_download: getString(value.url_private_download),\n size: getNumber(value.size),\n };\n}\n",
60
- "import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage } from \"./messages.ts\";\nimport { buildSlackSearchQuery } from \"./search-query.ts\";\nimport { searchFilesRaw, searchMessagesRaw } from \"./search-raw.ts\";\nimport { searchFilesInChannelsFallback, searchFilesViaSearchApi } from \"./search-files.ts\";\nimport { searchMessagesInChannelsFallback, searchMessagesViaSearchApi } from \"./search-messages.ts\";\n\nexport type SearchKind = \"messages\" | \"files\" | \"all\";\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport type SearchOptions = {\n workspace_url?: string;\n query: string;\n kind: SearchKind;\n channels?: string[];\n user?: string; // @name, name, or U...\n after?: string; // YYYY-MM-DD\n before?: string; // YYYY-MM-DD\n content_type?: ContentType;\n limit?: number;\n max_content_chars?: number;\n download?: boolean;\n};\n\nexport type SearchResult = {\n messages?: Omit<CompactSlackMessage, \"channel_id\" | \"thread_ts\">[];\n files?: { title?: string; mimetype?: string; mode?: string; path: string }[];\n};\n\nexport async function searchSlack(input: {\n client: SlackApiClient;\n auth: SlackAuth;\n options: SearchOptions;\n}): Promise<SearchResult> {\n const limit = Math.min(Math.max(input.options.limit ?? 20, 1), 200);\n const maxContentChars = input.options.max_content_chars ?? 4000;\n const contentType = input.options.content_type ?? \"any\";\n const download = input.options.download ?? true;\n if (!download && (input.options.kind === \"files\" || input.options.kind === \"all\")) {\n throw new Error(\"File search requires downloads enabled (so agents get local file paths).\");\n }\n\n const slackQuery = await buildSlackSearchQuery(input.client, {\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n });\n\n const out: SearchResult = {};\n\n if (input.options.kind === \"messages\" || input.options.kind === \"all\") {\n if (input.options.channels?.length) {\n out.messages = await searchMessagesInChannelsFallback(input.client, {\n auth: input.auth,\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n limit,\n maxContentChars,\n contentType,\n download,\n });\n } else {\n const rawMatches = await searchMessagesRaw(input.client, { query: slackQuery, limit });\n out.messages = await searchMessagesViaSearchApi(input.client, {\n auth: input.auth,\n workspace_url: input.options.workspace_url,\n slack_query: slackQuery,\n limit,\n maxContentChars,\n contentType,\n download,\n rawMatches,\n });\n }\n }\n\n if (input.options.kind === \"files\" || input.options.kind === \"all\") {\n if (input.options.channels?.length) {\n out.files = await searchFilesInChannelsFallback(input.client, {\n auth: input.auth,\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n limit,\n contentType,\n });\n } else {\n const rawMatches = await searchFilesRaw(input.client, { query: slackQuery, limit });\n out.files = await searchFilesViaSearchApi(input.client, {\n auth: input.auth,\n slack_query: slackQuery,\n limit,\n contentType,\n rawMatches,\n });\n }\n }\n\n return out;\n}\n",
61
- "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { searchSlack } from \"../slack/search.ts\";\n\ntype SearchCommandOptions = {\n workspace?: string;\n channel?: string[] | string;\n user?: string;\n after?: string;\n before?: string;\n contentType?: string;\n limit?: string;\n maxContentChars?: string;\n};\n\nfunction addSearchOptions(cmd: Command): Command {\n return cmd\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when searching across multiple workspaces)\",\n )\n .option(\"--channel <channel...>\", \"Channel filter (#name, name, or id). Repeatable.\")\n .option(\"--user <user>\", \"User filter (@name, name, or user id U...)\")\n .option(\"--after <date>\", \"Only results after YYYY-MM-DD\")\n .option(\"--before <date>\", \"Only results before YYYY-MM-DD\")\n .option(\n \"--content-type <type>\",\n \"Filter content type: any|text|image|snippet|file (default any)\",\n )\n .option(\"--limit <n>\", \"Max results (default 20)\", \"20\")\n .option(\n \"--max-content-chars <n>\",\n \"Max message content characters (default 4000, -1 for unlimited)\",\n \"4000\",\n );\n}\n\nasync function runSearch(input: {\n ctx: CliContext;\n kind: \"messages\" | \"files\" | \"all\";\n query: string;\n options: SearchCommandOptions;\n}): Promise<void> {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n const channels = Array.isArray(input.options.channel)\n ? input.options.channel\n : input.options.channel\n ? [input.options.channel]\n : [];\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({ workspaceUrl, channels });\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const limit = Number.parseInt(input.options.limit || \"20\", 10);\n const maxContentChars = Number.parseInt(input.options.maxContentChars || \"4000\", 10);\n const contentType = input.ctx.parseContentType(input.options.contentType);\n return await searchSlack({\n client,\n auth,\n options: {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n query: input.query,\n kind: input.kind,\n channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n content_type: contentType,\n limit,\n max_content_chars: maxContentChars,\n download: true,\n },\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n}\n\nexport function registerSearchCommand(input: { program: Command; ctx: CliContext }): void {\n const searchCmd = input.program\n .command(\"search\")\n .description(\"Search Slack messages and files (token-efficient JSON)\");\n\n const create = (spec: {\n kind: \"messages\" | \"files\" | \"all\";\n name: string;\n desc: string;\n }): Command =>\n addSearchOptions(searchCmd.command(spec.name).description(spec.desc))\n .argument(\"<query>\", \"Search query\")\n .action(async (...args) => {\n const [query, options] = args as [string, SearchCommandOptions];\n try {\n await runSearch({ ctx: input.ctx, kind: spec.kind, query, options });\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n create({ kind: \"all\", name: \"all\", desc: \"Search messages and files\" });\n create({ kind: \"messages\", name: \"messages\", desc: \"Search messages\" });\n create({ kind: \"files\", name: \"files\", desc: \"Search files\" });\n}\n",
61
+ "import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage, SlackFileSummary, SlackMessageSummary } from \"./messages.ts\";\nimport { fetchMessage, toCompactMessage } from \"./messages.ts\";\nimport { resolveChannelId } from \"./channels.ts\";\nimport { ensureDownloadsDir } from \"../lib/tmp-paths.ts\";\nimport { type DownloadResult, tryDownloadSlackFile, writeDownloadErrorFile } from \"./files.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\nimport { parseSlackMessageUrl } from \"./url.ts\";\nimport { inferExt } from \"./search-file-ext.ts\";\nimport { dateToUnixSeconds, resolveUserId } from \"./search-query.ts\";\nimport { asArray, getNumber, getString, isRecord } from \"../lib/object-type-guards.ts\";\nimport { slackMrkdwnToMarkdown } from \"./mrkdwn.ts\";\nimport { collectReferencedUserIds, resolveUsersById, toReferencedUsers } from \"./user-cache.ts\";\nimport type { CompactSlackUser } from \"./users.ts\";\n\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\nexport type SearchMessageResult = {\n messages: SearchCompactMessage[];\n referenced_users?: Record<string, CompactSlackUser>;\n};\n\nexport async function searchMessagesViaSearchApi(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n workspace_url?: string;\n slack_query: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n rawMatches: Record<string, unknown>[];\n resolveUsers?: boolean;\n refreshUsers?: boolean;\n },\n): Promise<SearchMessageResult> {\n const matches = input.rawMatches;\n if (matches.length === 0) {\n return { messages: [] };\n }\n\n const messageRefs: {\n channel_id: string;\n message_ts: string;\n permalink?: string;\n }[] = [];\n for (const m of matches) {\n const ts = getString(m.ts)?.trim() ?? \"\";\n if (!ts) {\n continue;\n }\n const channelValue = isRecord(m.channel) ? m.channel : null;\n const channelId =\n channelValue && getString(channelValue.id)\n ? getString(channelValue.id)!\n : channelValue && getString(channelValue.name)\n ? await resolveChannelId(client, `#${getString(channelValue.name)}`)\n : \"\";\n if (!channelId) {\n continue;\n }\n messageRefs.push({\n channel_id: channelId,\n message_ts: ts,\n permalink: getString(m.permalink),\n });\n if (messageRefs.length >= input.limit) {\n break;\n }\n }\n\n const downloadedPaths: Record<string, DownloadResult> = {};\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const resolvedMessages: SlackMessageSummary[] = [];\n const out: SearchCompactMessage[] = [];\n\n for (const ref of messageRefs) {\n let full: SlackMessageSummary | null = null;\n try {\n const parsed =\n ref.permalink && typeof ref.permalink === \"string\"\n ? (() => {\n try {\n return parseSlackMessageUrl(ref.permalink);\n } catch {\n return null;\n }\n })()\n : null;\n\n full = await fetchMessage(client, {\n ref: {\n workspace_url: parsed?.workspace_url ?? input.workspace_url ?? \"\",\n channel_id: ref.channel_id,\n message_ts: ref.message_ts,\n thread_ts_hint: parsed?.thread_ts_hint,\n raw: parsed?.raw ?? ref.permalink ?? `${ref.channel_id}:${ref.message_ts}`,\n },\n });\n } catch {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: full,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(full, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n resolvedMessages.push(full);\n out.push(toSearchCompactMessage(compact, ref.permalink));\n if (out.length >= input.limit) {\n break;\n }\n }\n\n const referencedUserIds = collectReferencedUserIds(resolvedMessages, {\n includeReactions: false,\n });\n const shouldResolveUsers = input.resolveUsers || input.refreshUsers;\n const usersById = shouldResolveUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: input.workspace_url ?? \"\",\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.refreshUsers),\n })\n : new Map();\n return {\n messages: out,\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n };\n}\n\nexport async function searchMessagesInChannelsFallback(\n client: SlackApiClient,\n input: {\n auth: SlackAuth;\n workspace_url?: string;\n query: string;\n channels: string[];\n user?: string;\n after?: string;\n before?: string;\n limit: number;\n maxContentChars: number;\n contentType: ContentType;\n download: boolean;\n resolveUsers?: boolean;\n refreshUsers?: boolean;\n },\n): Promise<SearchMessageResult> {\n const channelIds = await Promise.all(input.channels.map((c) => resolveChannelId(client, c)));\n const queryLower = input.query.trim().toLowerCase();\n\n const userId = input.user ? await resolveUserId(client, input.user) : undefined;\n\n const afterSec = input.after ? dateToUnixSeconds(input.after, \"start\") : null;\n const beforeSec = input.before ? dateToUnixSeconds(input.before, \"end\") : null;\n\n const downloadsDir = input.download ? await ensureDownloadsDir() : null;\n const downloadedPaths: Record<string, DownloadResult> = {};\n const matchedSummaries: SlackMessageSummary[] = [];\n\n const results: SearchCompactMessage[] = [];\n\n for (const channelId of channelIds) {\n let cursorLatest: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.history\", {\n channel: channelId,\n limit: 200,\n latest: cursorLatest,\n });\n const messages = isRecord(resp) ? asArray(resp.messages).filter(isRecord) : [];\n if (messages.length === 0) {\n break;\n }\n\n for (const m of messages) {\n const summary = messageSummaryFromApiMessage(channelId, m);\n\n const tsNum = Number.parseFloat(summary.ts);\n if (Number.isFinite(tsNum)) {\n if (beforeSec !== null && tsNum > beforeSec) {\n continue;\n }\n if (afterSec !== null && tsNum < afterSec) {\n cursorLatest = undefined;\n break;\n }\n }\n\n if (userId && summary.user !== userId) {\n continue;\n }\n\n const content = renderSlackMessageContent(summary);\n if (queryLower && !content.toLowerCase().includes(queryLower)) {\n continue;\n }\n\n if (downloadsDir) {\n await downloadFilesForMessage({\n auth: input.auth,\n downloadsDir,\n message: summary,\n downloadedPaths,\n });\n }\n\n const compact = toCompactMessage(summary, {\n maxBodyChars: input.maxContentChars,\n downloadedPaths,\n });\n if (!passesContentTypeFilter(compact, input.contentType)) {\n continue;\n }\n\n matchedSummaries.push(summary);\n results.push(toSearchCompactMessage(compact));\n if (results.length >= input.limit) {\n const referencedUserIds = collectReferencedUserIds(matchedSummaries, {\n includeReactions: false,\n });\n const usersById = await resolveUsersById({\n client,\n workspaceUrl: input.workspace_url ?? \"\",\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.refreshUsers),\n });\n return {\n messages: results,\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n };\n }\n }\n\n if (!cursorLatest) {\n break;\n }\n\n const last = messages.at(-1);\n cursorLatest = last ? getString(last.ts) : undefined;\n if (!cursorLatest) {\n break;\n }\n }\n }\n\n const referencedUserIds = collectReferencedUserIds(matchedSummaries, {\n includeReactions: false,\n });\n const shouldResolveUsers = input.resolveUsers || input.refreshUsers;\n const usersById = shouldResolveUsers\n ? await resolveUsersById({\n client,\n workspaceUrl: input.workspace_url ?? \"\",\n userIds: referencedUserIds,\n forceRefresh: Boolean(input.refreshUsers),\n })\n : new Map();\n return {\n messages: results,\n referenced_users: toReferencedUsers(referencedUserIds, usersById),\n };\n}\n\nexport function passesContentTypeFilter(m: CompactSlackMessage, contentType: ContentType): boolean {\n if (contentType === \"any\") {\n return true;\n }\n const hasFiles = Boolean(m.files && m.files.length > 0);\n if (contentType === \"text\") {\n return !hasFiles;\n }\n if (!hasFiles) {\n return false;\n }\n\n if (contentType === \"file\") {\n return true;\n }\n if (contentType === \"snippet\") {\n return (m.files ?? []).some((f) => f.mode === \"snippet\");\n }\n if (contentType === \"image\") {\n return (m.files ?? []).some((f) => String(f.mimetype ?? \"\").startsWith(\"image/\"));\n }\n return true;\n}\n\nexport type SearchCompactMessage = Omit<CompactSlackMessage, \"thread_ts\"> & {\n permalink?: string;\n};\n\nfunction toSearchCompactMessage(m: CompactSlackMessage, permalink?: string): SearchCompactMessage {\n const { thread_ts: _threadTs, ...rest } = m;\n return permalink ? { ...rest, permalink } : rest;\n}\n\nasync function downloadFilesForMessage(input: {\n auth: SlackAuth;\n downloadsDir: string;\n message: SlackMessageSummary;\n downloadedPaths: Record<string, DownloadResult>;\n}): Promise<void> {\n for (const f of input.message.files ?? []) {\n if (input.downloadedPaths[f.id]) {\n continue;\n }\n const url = f.url_private_download || f.url_private;\n if (!url) {\n continue;\n }\n const ext = inferExt(f);\n const result = await tryDownloadSlackFile({\n auth: input.auth,\n url,\n destDir: input.downloadsDir,\n preferredName: `${f.id}${ext ? `.${ext}` : \"\"}`,\n });\n if (!result.ok) {\n input.downloadedPaths[f.id] = {\n ...result,\n path: await writeDownloadErrorFile({\n destDir: input.downloadsDir,\n fileId: f.id,\n error: result.error,\n }),\n };\n console.warn(`Warning: file ${f.id}: ${result.error}`);\n } else {\n input.downloadedPaths[f.id] = result;\n }\n }\n}\n\nfunction messageSummaryFromApiMessage(\n channelId: string,\n msg: Record<string, unknown>,\n): SlackMessageSummary {\n const text = getString(msg.text) ?? \"\";\n const files = asArray(msg.files)\n .map((f) => toSlackFileSummary(f))\n .filter((f): f is SlackFileSummary => f !== null);\n\n return {\n channel_id: channelId,\n ts: getString(msg.ts) ?? \"\",\n thread_ts: getString(msg.thread_ts),\n reply_count: getNumber(msg.reply_count),\n user: getString(msg.user),\n bot_id: getString(msg.bot_id),\n text,\n markdown: slackMrkdwnToMarkdown(text),\n blocks: Array.isArray(msg.blocks) ? (msg.blocks as unknown[]) : undefined,\n attachments: Array.isArray(msg.attachments) ? (msg.attachments as unknown[]) : undefined,\n files: files.length > 0 ? files : undefined,\n reactions: Array.isArray(msg.reactions) ? (msg.reactions as unknown[]) : undefined,\n };\n}\n\nfunction toSlackFileSummary(value: unknown): SlackFileSummary | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = getString(value.id);\n if (!id) {\n return null;\n }\n return {\n id,\n name: getString(value.name),\n title: getString(value.title),\n mimetype: getString(value.mimetype),\n filetype: getString(value.filetype),\n mode: getString(value.mode),\n permalink: getString(value.permalink),\n url_private: getString(value.url_private),\n url_private_download: getString(value.url_private_download),\n size: getNumber(value.size),\n };\n}\n",
62
+ "import type { SlackApiClient, SlackAuth } from \"./client.ts\";\nimport type { CompactSlackMessage } from \"./messages.ts\";\nimport type { CompactSlackUser } from \"./users.ts\";\nimport { buildSlackSearchQuery } from \"./search-query.ts\";\nimport { searchFilesRaw, searchMessagesRaw } from \"./search-raw.ts\";\nimport { searchFilesInChannelsFallback, searchFilesViaSearchApi } from \"./search-files.ts\";\nimport {\n type SearchCompactMessage,\n searchMessagesInChannelsFallback,\n searchMessagesViaSearchApi,\n} from \"./search-messages.ts\";\n\nexport type SearchKind = \"messages\" | \"files\" | \"all\";\nexport type ContentType = \"any\" | \"text\" | \"image\" | \"snippet\" | \"file\";\n\nexport type SearchOptions = {\n workspace_url?: string;\n query: string;\n kind: SearchKind;\n channels?: string[];\n user?: string; // @name, name, or U...\n after?: string; // YYYY-MM-DD\n before?: string; // YYYY-MM-DD\n content_type?: ContentType;\n limit?: number;\n max_content_chars?: number;\n download?: boolean;\n resolve_users?: boolean;\n refresh_users?: boolean;\n};\n\nexport type SearchResult = {\n messages?: SearchCompactMessage[];\n files?: { title?: string; mimetype?: string; mode?: string; path: string }[];\n referenced_users?: Record<string, CompactSlackUser>;\n};\n\nexport async function searchSlack(input: {\n client: SlackApiClient;\n auth: SlackAuth;\n options: SearchOptions;\n}): Promise<SearchResult> {\n const limit = Math.min(Math.max(input.options.limit ?? 20, 1), 200);\n const maxContentChars = input.options.max_content_chars ?? 4000;\n const contentType = input.options.content_type ?? \"any\";\n const download = input.options.download ?? true;\n if (!download && (input.options.kind === \"files\" || input.options.kind === \"all\")) {\n throw new Error(\"File search requires downloads enabled (so agents get local file paths).\");\n }\n\n const slackQuery = await buildSlackSearchQuery(input.client, {\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n });\n\n const out: SearchResult = {};\n\n if (input.options.kind === \"messages\" || input.options.kind === \"all\") {\n if (input.options.channels?.length) {\n const messageResult = await searchMessagesInChannelsFallback(input.client, {\n auth: input.auth,\n workspace_url: input.options.workspace_url,\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n limit,\n maxContentChars,\n contentType,\n download,\n resolveUsers: input.options.resolve_users,\n refreshUsers: input.options.refresh_users,\n });\n out.messages = messageResult.messages;\n out.referenced_users = messageResult.referenced_users;\n } else {\n const rawMatches = await searchMessagesRaw(input.client, { query: slackQuery, limit });\n const messageResult = await searchMessagesViaSearchApi(input.client, {\n auth: input.auth,\n workspace_url: input.options.workspace_url,\n slack_query: slackQuery,\n limit,\n maxContentChars,\n contentType,\n download,\n rawMatches,\n resolveUsers: input.options.resolve_users,\n refreshUsers: input.options.refresh_users,\n });\n out.messages = messageResult.messages;\n out.referenced_users = messageResult.referenced_users;\n }\n }\n\n if (input.options.kind === \"files\" || input.options.kind === \"all\") {\n if (input.options.channels?.length) {\n out.files = await searchFilesInChannelsFallback(input.client, {\n auth: input.auth,\n query: input.options.query,\n channels: input.options.channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n limit,\n contentType,\n });\n } else {\n const rawMatches = await searchFilesRaw(input.client, { query: slackQuery, limit });\n out.files = await searchFilesViaSearchApi(input.client, {\n auth: input.auth,\n slack_query: slackQuery,\n limit,\n contentType,\n rawMatches,\n });\n }\n }\n\n return out;\n}\n",
63
+ "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { searchSlack } from \"../slack/search.ts\";\n\ntype SearchCommandOptions = {\n workspace?: string;\n channel?: string[] | string;\n user?: string;\n after?: string;\n before?: string;\n contentType?: string;\n limit?: string;\n maxContentChars?: string;\n resolveUsers?: boolean;\n refreshUsers?: boolean;\n};\n\nfunction addSearchOptions(cmd: Command): Command {\n return cmd\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; needed when searching across multiple workspaces)\",\n )\n .option(\"--channel <channel...>\", \"Channel filter (#name, name, or id). Repeatable.\")\n .option(\"--user <user>\", \"User filter (@name, name, or user id U...)\")\n .option(\"--after <date>\", \"Only results after YYYY-MM-DD\")\n .option(\"--before <date>\", \"Only results before YYYY-MM-DD\")\n .option(\n \"--content-type <type>\",\n \"Filter content type: any|text|image|snippet|file (default any)\",\n )\n .option(\"--limit <n>\", \"Max results (default 20)\", \"20\")\n .option(\n \"--max-content-chars <n>\",\n \"Max message content characters (default 4000, -1 for unlimited)\",\n \"4000\",\n )\n .option(\"--resolve-users\", \"Resolve user IDs to user profiles\")\n .option(\n \"--refresh-users\",\n \"Refresh user profile cache before resolving referenced users (implies --resolve-users)\",\n );\n}\n\nasync function runSearch(input: {\n ctx: CliContext;\n kind: \"messages\" | \"files\" | \"all\";\n query: string;\n options: SearchCommandOptions;\n}): Promise<void> {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(input.options.workspace);\n const channels = Array.isArray(input.options.channel)\n ? input.options.channel\n : input.options.channel\n ? [input.options.channel]\n : [];\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({ workspaceUrl, channels });\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client, auth, workspace_url } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const limit = Number.parseInt(input.options.limit || \"20\", 10);\n const maxContentChars = Number.parseInt(input.options.maxContentChars || \"4000\", 10);\n const contentType = input.ctx.parseContentType(input.options.contentType);\n return await searchSlack({\n client,\n auth,\n options: {\n workspace_url: workspace_url ?? workspaceUrl ?? \"\",\n query: input.query,\n kind: input.kind,\n channels,\n user: input.options.user,\n after: input.options.after,\n before: input.options.before,\n content_type: contentType,\n limit,\n max_content_chars: maxContentChars,\n download: true,\n resolve_users: Boolean(input.options.resolveUsers || input.options.refreshUsers),\n refresh_users: Boolean(input.options.refreshUsers),\n },\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n}\n\nexport function registerSearchCommand(input: { program: Command; ctx: CliContext }): void {\n const searchCmd = input.program\n .command(\"search\")\n .description(\"Search Slack messages and files (token-efficient JSON)\");\n\n const create = (spec: {\n kind: \"messages\" | \"files\" | \"all\";\n name: string;\n desc: string;\n }): Command =>\n addSearchOptions(searchCmd.command(spec.name).description(spec.desc))\n .argument(\"<query>\", \"Search query\")\n .action(async (...args) => {\n const [query, options] = args as [string, SearchCommandOptions];\n try {\n await runSearch({ ctx: input.ctx, kind: spec.kind, query, options });\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n create({ kind: \"all\", name: \"all\", desc: \"Search messages and files\" });\n create({ kind: \"messages\", name: \"messages\", desc: \"Search messages\" });\n create({ kind: \"files\", name: \"files\", desc: \"Search files\" });\n}\n",
64
+ "import type { SlackApiClient } from \"./client.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\n\nexport type LaterItem = {\n channel_id: string;\n channel_name?: string;\n ts: string;\n state: string;\n date_saved: number;\n date_completed?: number;\n message?: {\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n thread_ts?: string;\n reply_count?: number;\n };\n};\n\nexport async function fetchLaterItems(\n client: SlackApiClient,\n options?: {\n state?: \"in_progress\" | \"archived\" | \"completed\" | \"all\";\n limit?: number;\n maxBodyChars?: number;\n countsOnly?: boolean;\n cursor?: string;\n },\n): Promise<{\n counts: {\n in_progress: number;\n archived: number;\n completed: number;\n total: number;\n };\n items: LaterItem[];\n next_cursor?: string;\n}> {\n const stateFilter = options?.state ?? \"in_progress\";\n const limit = options?.limit ?? 20;\n const maxBodyChars = options?.maxBodyChars ?? 4000;\n const countsOnly = options?.countsOnly ?? false;\n\n let currentCursor = options?.cursor;\n let allRawItems: Record<string, unknown>[] = [];\n let counts: Record<string, unknown> = {};\n let nextCursor: string | undefined;\n\n while (true) {\n const resp = await client.api(\"saved.list\", {\n limit: 50,\n cursor: currentCursor,\n });\n\n if (!currentCursor) {\n counts = isRecord(resp.counts) ? resp.counts : {};\n }\n\n const pageRawItems = asArray(resp.saved_items).filter(isRecord);\n allRawItems.push(...pageRawItems);\n\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n nextCursor = meta ? getString(meta.next_cursor) : undefined;\n\n if (countsOnly) {\n break;\n }\n\n let filtered = allRawItems.filter((item) => getString(item.item_type) === \"message\");\n if (stateFilter !== \"all\") {\n filtered = filtered.filter((item) => getString(item.state) === stateFilter);\n }\n\n if (filtered.length >= limit || !nextCursor) {\n break;\n }\n currentCursor = nextCursor;\n }\n\n const result = {\n counts: {\n in_progress: getNumber(counts.uncompleted_count) ?? 0,\n archived: getNumber(counts.archived_count) ?? 0,\n completed: getNumber(counts.completed_count) ?? 0,\n total: getNumber(counts.total_count) ?? 0,\n },\n items: [] as LaterItem[],\n next_cursor: nextCursor,\n };\n\n if (countsOnly) {\n return result;\n }\n\n // Filter to messages only, then by state\n let filtered = allRawItems.filter((item) => getString(item.item_type) === \"message\");\n if (stateFilter !== \"all\") {\n filtered = filtered.filter((item) => getString(item.state) === stateFilter);\n }\n\n // Limit results\n filtered = filtered.slice(0, limit);\n\n // Hydrate items in parallel\n result.items = await Promise.all(\n filtered.map(async (item) => {\n const channelId = getString(item.item_id) ?? \"\";\n const ts = getString(item.ts) ?? \"\";\n const state = getString(item.state) ?? \"in_progress\";\n const dateSaved = getNumber(item.date_created) ?? 0;\n const dateCompleted = getNumber(item.date_completed);\n\n let channelName: string | undefined;\n let message: LaterItem[\"message\"];\n\n // Resolve channel name\n try {\n const info = await client.api(\"conversations.info\", {\n channel: channelId,\n });\n const ch = isRecord(info.channel) ? info.channel : null;\n if (ch) {\n channelName = getString(ch.name) ?? getString(ch.name_normalized) ?? undefined;\n\n // For DMs, resolve user display name\n if (ch.is_im && !channelName) {\n const userId = getString(ch.user);\n if (userId) {\n try {\n const userInfo = await client.api(\"users.info\", { user: userId });\n const u = isRecord(userInfo.user) ? userInfo.user : null;\n const profile = u && isRecord(u.profile) ? u.profile : null;\n channelName =\n getString(profile?.display_name) ||\n getString(u?.real_name) ||\n getString(u?.name) ||\n undefined;\n } catch {\n // ignore\n }\n }\n }\n }\n } catch {\n // ignore\n }\n\n // Fetch the actual message\n if (ts) {\n try {\n const history = await client.api(\"conversations.history\", {\n channel: channelId,\n latest: ts,\n inclusive: true,\n limit: 1,\n });\n const msgs = asArray(history.messages).filter(isRecord);\n const msg = msgs.find((m) => getString(m.ts) === ts);\n if (msg) {\n const rendered = renderSlackMessageContent(msg);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n…`\n : rendered;\n\n message = {\n author:\n getString(msg.user) || getString(msg.bot_id)\n ? {\n user_id: getString(msg.user) ?? undefined,\n bot_id: getString(msg.bot_id) ?? undefined,\n }\n : undefined,\n content: content || undefined,\n thread_ts: getString(msg.thread_ts) ?? undefined,\n reply_count: getNumber(msg.reply_count) ?? undefined,\n };\n }\n } catch {\n // ignore — message may have been deleted\n }\n }\n\n return {\n channel_id: channelId,\n channel_name: channelName,\n ts,\n state,\n date_saved: dateSaved,\n date_completed: dateCompleted && dateCompleted > 0 ? dateCompleted : undefined,\n message,\n } satisfies LaterItem;\n }),\n );\n\n return result;\n}\n\n/**\n * Mark a saved item as completed, archived, or reopen it.\n * Uses multipart/form-data with the `mark` param (not `state`).\n * Valid `mark` values: completed, uncompleted, archived, unarchived.\n */\nexport async function updateLaterMark(\n client: SlackApiClient,\n input: {\n channelId: string;\n ts: string;\n mark: \"completed\" | \"uncompleted\" | \"archived\" | \"unarchived\";\n },\n): Promise<void> {\n await client.apiMultipart(\"saved.update\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n mark: input.mark,\n });\n}\n\nexport async function saveLater(\n client: SlackApiClient,\n input: { channelId: string; ts: string },\n): Promise<void> {\n await client.api(\"saved.add\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n });\n}\n\nexport async function removeLater(\n client: SlackApiClient,\n input: { channelId: string; ts: string },\n): Promise<void> {\n await client.api(\"saved.delete\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n });\n}\n\nexport async function setLaterReminder(\n client: SlackApiClient,\n input: { channelId: string; ts: string; dateDue: number },\n): Promise<void> {\n await client.apiMultipart(\"saved.update\", {\n item_id: input.channelId,\n item_type: \"message\",\n ts: input.ts,\n date_due: String(input.dateDue),\n });\n}\n\nexport function parseReminderDuration(input: string): number {\n const now = Math.floor(Date.now() / 1000);\n const trimmed = input.trim().toLowerCase();\n\n // Relative durations: 30m, 1h, 3h, 2d, 1.5h\n const relMatch = trimmed.match(\n /^(\\d+(?:\\.\\d+)?)\\s*(m|min|mins|minutes?|h|hr|hrs|hours?|d|days?)$/,\n );\n if (relMatch) {\n const amount = Number.parseFloat(relMatch[1]!);\n const unit = relMatch[2]!.charAt(0);\n if (unit === \"m\") {\n return now + amount * 60;\n }\n if (unit === \"h\") {\n return now + amount * 3600;\n }\n if (unit === \"d\") {\n return now + amount * 86400;\n }\n }\n\n // Named times\n const tomorrow9am = getNext9am(1);\n if (trimmed === \"tomorrow\") {\n return tomorrow9am;\n }\n\n const dayNames = [\"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\"];\n const dayIndex = dayNames.indexOf(trimmed);\n if (dayIndex >= 0) {\n const today = new Date();\n const currentDay = today.getDay();\n let daysUntil = dayIndex - currentDay;\n if (daysUntil <= 0) {\n daysUntil += 7;\n }\n return getNext9am(daysUntil);\n }\n\n // Unix timestamp passthrough\n const asNum = Number(trimmed);\n if (!Number.isNaN(asNum) && asNum > 1000000000) {\n return asNum;\n }\n\n throw new Error(\n `Invalid duration: \"${input}\". Use: 30m, 1h, 3h, 2d, tomorrow, monday, or a unix timestamp.`,\n );\n}\n\nfunction getNext9am(daysFromNow: number): number {\n const date = new Date();\n date.setDate(date.getDate() + daysFromNow);\n date.setHours(9, 0, 0, 0);\n return Math.floor(date.getTime() / 1000);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n",
65
+ "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport {\n setLaterReminder,\n fetchLaterItems,\n parseReminderDuration,\n removeLater,\n saveLater,\n updateLaterMark,\n} from \"../slack/later.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\n\nfunction resolveTargetRef(input: {\n targetInput: string;\n options: { workspace?: string; ts?: string };\n ctx: CliContext;\n}): {\n getChannelAndTs: (client: {\n api: (method: string, params?: Record<string, unknown>) => Promise<unknown>;\n }) => Promise<{ channelId: string; ts: string }>;\n workspaceUrl: string | undefined;\n} {\n const { targetInput, options, ctx } = input;\n const target = parseMsgTarget(targetInput);\n\n if (target.kind === \"url\") {\n return {\n workspaceUrl: target.ref.workspace_url,\n getChannelAndTs: async () => ({\n channelId: target.ref.channel_id,\n ts: target.ref.message_ts,\n }),\n };\n }\n\n const workspaceUrl = ctx.effectiveWorkspaceUrl(options.workspace);\n const ts = options.ts?.trim();\n if (!ts) {\n throw new Error('When targeting a channel, you must pass --ts \"<seconds>.<micros>\"');\n }\n\n return {\n workspaceUrl,\n getChannelAndTs: async (client) => {\n const channelId = await resolveChannelId(\n client as Parameters<typeof resolveChannelId>[0],\n target.kind === \"channel\" ? target.channel : targetInput,\n );\n return { channelId, ts };\n },\n };\n}\n\nexport function registerLaterCommand(input: { program: Command; ctx: CliContext }): void {\n const laterCmd = input.program\n .command(\"later\")\n .description(\"Manage saved-for-later messages (Slack's Later tab)\");\n\n laterCmd\n .command(\"list\", { isDefault: true })\n .description(\"List saved-for-later messages\")\n .option(\"--workspace <url>\", \"Workspace URL (defaults to your configured workspace)\")\n .option(\n \"--state <state>\",\n \"Filter by state: in_progress (default), archived, completed, all\",\n \"in_progress\",\n )\n .option(\"--limit <n>\", \"Max items to show (default 20)\", \"20\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters per message (default 4000, -1 for unlimited)\",\n \"4000\",\n )\n .option(\"--counts-only\", \"Only show counts per state, skip message content\")\n .action(\n async (options: {\n workspace?: string;\n state?: string;\n limit?: string;\n maxBodyChars?: string;\n countsOnly?: boolean;\n }) => {\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const state = parseState(options.state ?? \"in_progress\");\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return fetchLaterItems(client, {\n state,\n limit: Number.parseInt(options.limit ?? \"20\", 10),\n maxBodyChars: Number.parseInt(options.maxBodyChars ?? \"4000\", 10),\n countsOnly: options.countsOnly,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n },\n );\n\n laterCmd\n .command(\"complete\")\n .description(\"Mark a saved message as completed\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await updateLaterMark(client, { channelId, ts, mark: \"completed\" });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"archive\")\n .description(\"Archive a saved message\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await updateLaterMark(client, { channelId, ts, mark: \"archived\" });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"reopen\")\n .description(\"Move a saved message back to in-progress\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n // Try both uncompleted and unarchived since we don't know current state\n await Promise.allSettled([\n updateLaterMark(client, { channelId, ts, mark: \"uncompleted\" }),\n updateLaterMark(client, { channelId, ts, mark: \"unarchived\" }),\n ]);\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"save\")\n .description(\"Save a message for later\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await saveLater(client, { channelId, ts });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"remove\")\n .description(\"Remove a message from Later entirely\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [string, { workspace?: string; ts?: string }];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await removeLater(client, { channelId, ts });\n },\n });\n console.log(JSON.stringify({ ok: true }));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n laterCmd\n .command(\"remind\")\n .description(\"Set a reminder for a saved message\")\n .argument(\"<target>\", \"Slack message URL or channel ID\")\n .requiredOption(\"--in <duration>\", \"When to remind: 30m, 1h, 3h, 2d, tomorrow, monday, etc.\")\n .option(\"--workspace <url>\", \"Workspace URL\")\n .option(\"--ts <ts>\", \"Message ts (required when using channel ID)\")\n .action(async (...args) => {\n const [targetInput, options] = args as [\n string,\n { in: string; workspace?: string; ts?: string },\n ];\n try {\n const ref = resolveTargetRef({ targetInput, options, ctx: input.ctx });\n const reminderTime = parseReminderDuration(options.in);\n\n await input.ctx.withAutoRefresh({\n workspaceUrl: ref.workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(ref.workspaceUrl);\n const { channelId, ts } = await ref.getChannelAndTs(client);\n await setLaterReminder(client, { channelId, ts, dateDue: reminderTime });\n },\n });\n\n console.log(\n JSON.stringify({\n ok: true,\n remind_at: reminderTime,\n }),\n );\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n\nfunction parseState(value: string): \"in_progress\" | \"archived\" | \"completed\" | \"all\" {\n const v = value.toLowerCase().trim();\n if (v === \"in_progress\" || v === \"in-progress\" || v === \"active\" || v === \"open\") {\n return \"in_progress\";\n }\n if (v === \"archived\" || v === \"archive\") {\n return \"archived\";\n }\n if (v === \"completed\" || v === \"complete\" || v === \"done\") {\n return \"completed\";\n }\n if (v === \"all\") {\n return \"all\";\n }\n return \"in_progress\";\n}\n",
66
+ "import type { SlackApiClient } from \"./client.ts\";\nimport { renderSlackMessageContent } from \"./render.ts\";\n\nexport type UnreadChannel = {\n channel_id: string;\n channel_name?: string;\n channel_type: \"channel\" | \"dm\" | \"mpim\" | \"group\";\n unread_count: number;\n mention_count: number;\n messages?: UnreadMessage[];\n};\n\nexport type UnreadMessage = {\n ts: string;\n author?: { user_id?: string; bot_id?: string };\n content?: string;\n thread_ts?: string;\n reply_count?: number;\n};\n\ntype ClientCountsEntry = {\n id: string;\n has_unreads?: boolean;\n unread_count?: number;\n unread_count_display?: number;\n mention_count?: number;\n latest?: string;\n last_read?: string;\n};\n\nexport async function fetchUnreads(\n client: SlackApiClient,\n options?: {\n includeMessages?: boolean;\n maxMessagesPerChannel?: number;\n maxBodyChars?: number;\n skipSystemMessages?: boolean;\n },\n): Promise<{\n channels: UnreadChannel[];\n threads: {\n has_unreads: boolean;\n mention_count: number;\n } | null;\n}> {\n const includeMessages = options?.includeMessages ?? true;\n const maxMessages = options?.maxMessagesPerChannel ?? 10;\n const maxBodyChars = options?.maxBodyChars ?? 4000;\n const skipSystem = options?.skipSystemMessages ?? true;\n\n const resp = await client.api(\"client.counts\", {\n thread_count_by_channel: true,\n });\n\n const channels = asArray(resp.channels).filter(isRecord) as unknown as ClientCountsEntry[];\n const mpims = asArray(resp.mpims).filter(isRecord) as unknown as ClientCountsEntry[];\n const ims = asArray(resp.ims).filter(isRecord) as unknown as ClientCountsEntry[];\n\n const allEntries = [\n ...channels.map((c) => ({ ...c, type: \"channel\" as const })),\n ...mpims.map((c) => ({ ...c, type: \"mpim\" as const })),\n ...ims.map((c) => ({ ...c, type: \"dm\" as const })),\n ];\n\n const withUnreads = allEntries.filter((c) => c.has_unreads);\n\n // Resolve channel info and fetch messages in parallel\n const channelInfos = await Promise.all(\n withUnreads.map(async (entry) => {\n // 1. Concurrently fetch channel info & user info (if DM)\n const channelInfoPromise = (async () => {\n let name: string | undefined;\n let { type } = entry;\n try {\n const info = await client.api(\"conversations.info\", {\n channel: entry.id,\n });\n const ch = isRecord(info.channel) ? info.channel : null;\n if (ch) {\n name = getString(ch.name) ?? getString(ch.name_normalized) ?? undefined;\n if (ch.is_im) {\n type = \"dm\";\n const userId = getString(ch.user);\n if (userId && !name) {\n try {\n const userInfo = await client.api(\"users.info\", { user: userId });\n const u = isRecord(userInfo.user) ? userInfo.user : null;\n const profile = u && isRecord(u.profile) ? u.profile : null;\n name =\n getString(profile?.display_name) ||\n getString(u?.real_name) ||\n getString(u?.name) ||\n undefined;\n } catch {\n // ignore\n }\n }\n } else if (ch.is_mpim) {\n type = \"mpim\";\n } else if (ch.is_group || ch.is_private) {\n type = \"channel\";\n } else {\n type = \"channel\";\n }\n }\n } catch {\n // ignore - name will remain undefined\n }\n return { name, type };\n })();\n\n // 2. Concurrently fetch message history\n const historyPromise = (async () => {\n let messages: UnreadMessage[] | undefined;\n let unreadCount =\n entry.unread_count_display ?? entry.unread_count ?? (entry.has_unreads ? 1 : 0);\n\n if (includeMessages && entry.last_read) {\n try {\n const history = await client.api(\"conversations.history\", {\n channel: entry.id,\n oldest: entry.last_read,\n limit: maxMessages,\n inclusive: false,\n });\n let msgs = asArray(history.messages).filter(isRecord);\n if (skipSystem) {\n msgs = msgs.filter((m) => {\n const subtype = getString(m.subtype);\n if (!subtype) {\n return true;\n }\n const systemSubtypes = [\n \"channel_join\",\n \"channel_leave\",\n \"channel_topic\",\n \"channel_purpose\",\n \"channel_name\",\n \"channel_archive\",\n \"channel_unarchive\",\n \"group_join\",\n \"group_leave\",\n \"group_topic\",\n \"group_purpose\",\n \"group_name\",\n \"group_archive\",\n \"group_unarchive\",\n ];\n return !systemSubtypes.includes(subtype);\n });\n }\n\n // If API didn't provide a count, infer from messages fetched\n if (entry.unread_count_display === undefined && entry.unread_count === undefined) {\n unreadCount = msgs.length;\n if (history.has_more) {\n unreadCount = Math.max(unreadCount, 2);\n }\n }\n\n messages = msgs.map((m) => {\n const rendered = renderSlackMessageContent(m);\n const content =\n maxBodyChars >= 0 && rendered.length > maxBodyChars\n ? `${rendered.slice(0, maxBodyChars)}\\n...`\n : rendered;\n\n return {\n ts: getString(m.ts) ?? \"\",\n author:\n getString(m.user) || getString(m.bot_id)\n ? {\n user_id: getString(m.user) ?? undefined,\n bot_id: getString(m.bot_id) ?? undefined,\n }\n : undefined,\n content: content || undefined,\n thread_ts: getString(m.thread_ts) ?? undefined,\n reply_count: getNumber(m.reply_count) ?? undefined,\n };\n });\n\n // Sort chronologically (oldest first)\n messages.sort((a, b) => Number.parseFloat(a.ts) - Number.parseFloat(b.ts));\n } catch {\n // ignore\n }\n }\n return { messages, unreadCount };\n })();\n\n // 3. Await both sets of network requests at the same time\n const [channelData, historyData] = await Promise.all([channelInfoPromise, historyPromise]);\n\n return {\n channel_id: entry.id,\n channel_name: channelData.name,\n channel_type: channelData.type,\n unread_count: historyData.unreadCount,\n mention_count: entry.mention_count ?? 0,\n messages: historyData.messages,\n } satisfies UnreadChannel;\n }),\n );\n\n // Sort: mentions first, then by unread count\n channelInfos.sort((a, b) => {\n if (a.mention_count !== b.mention_count) {\n return b.mention_count - a.mention_count;\n }\n return b.unread_count - a.unread_count;\n });\n\n // Process thread unreads\n const threads = isRecord(resp.threads) ? resp.threads : null;\n const threadInfo = threads?.has_unreads\n ? {\n has_unreads: true,\n mention_count: (threads.mention_count as number) ?? 0,\n }\n : null;\n\n return { channels: channelInfos, threads: threadInfo };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction getNumber(value: unknown): number | undefined {\n return typeof value === \"number\" ? value : undefined;\n}\n",
67
+ "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { fetchUnreads } from \"../slack/unreads.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\n\nexport function registerUnreadsCommand(input: { program: Command; ctx: CliContext }): void {\n input.program\n .command(\"unreads\")\n .description(\"Show all unread messages across channels, DMs, and threads\")\n .option(\"--workspace <url>\", \"Workspace URL (defaults to your configured workspace)\")\n .option(\"--counts-only\", \"Only show unread counts, do not fetch message content\")\n .option(\"--max-messages <n>\", \"Max unread messages to fetch per channel (default 10)\", \"10\")\n .option(\n \"--max-body-chars <n>\",\n \"Max content characters per message (default 4000, -1 for unlimited)\",\n \"4000\",\n )\n .option(\"--include-system\", \"Include system messages (joins, leaves, topic changes, etc.)\")\n .action(\n async (options: {\n workspace?: string;\n countsOnly?: boolean;\n maxMessages?: string;\n maxBodyChars?: string;\n includeSystem?: boolean;\n }) => {\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return fetchUnreads(client, {\n includeMessages: !options.countsOnly,\n maxMessagesPerChannel: Number.parseInt(options.maxMessages ?? \"10\", 10),\n maxBodyChars: Number.parseInt(options.maxBodyChars ?? \"4000\", 10),\n skipSystemMessages: !options.includeSystem,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n },\n );\n}\n",
62
68
  "import { execSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport { chmod, copyFile, mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { basename, join } from \"node:path\";\nimport { getAppDir } from \"./app-dir.ts\";\nimport { readJsonFile, writeJsonFile } from \"./fs.ts\";\nimport { getPackageVersion } from \"./version.ts\";\n\nconst REPO = \"stablyai/agent-slack\";\nconst CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours\n\ntype UpdateCheckCache = {\n latest_version: string;\n checked_at: number; // epoch ms\n};\n\ntype GitHubRelease = {\n tag_name: string;\n assets: { name: string; browser_download_url: string }[];\n};\n\nfunction getCachePath(): string {\n return join(getAppDir(), \"update-check.json\");\n}\n\n/**\n * Compare two semver strings. Returns:\n * negative if a < b, 0 if equal, positive if a > b\n */\nexport function compareSemver(a: string, b: string): number {\n const pa = a.replace(/^v/, \"\").split(\".\").map(Number);\n const pb = b.replace(/^v/, \"\").split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n const diff = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (diff !== 0) {\n return diff;\n }\n }\n return 0;\n}\n\n/**\n * Fetch the latest release version from GitHub.\n * Returns null on any network/API error (never throws).\n */\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const resp = await fetch(`https://api.github.com/repos/${REPO}/releases/latest`, {\n headers: { Accept: \"application/vnd.github+json\", \"User-Agent\": \"agent-slack-updater\" },\n signal: AbortSignal.timeout(5000),\n });\n if (!resp.ok) {\n return null;\n }\n const data = (await resp.json()) as GitHubRelease;\n return data.tag_name?.replace(/^v/, \"\") ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check if a newer version is available. Uses a local cache to avoid\n * hitting GitHub more than once per CHECK_INTERVAL_MS.\n *\n * @param force Skip the cache and always fetch from GitHub.\n * @returns `{ current, latest, updateAvailable }` or null on error.\n */\nexport async function checkForUpdate(force = false): Promise<{\n current: string;\n latest: string;\n update_available: boolean;\n} | null> {\n const current = getPackageVersion();\n\n if (!force) {\n const cached = await readJsonFile<UpdateCheckCache>(getCachePath());\n if (cached && Date.now() - cached.checked_at < CHECK_INTERVAL_MS) {\n return {\n current,\n latest: cached.latest_version,\n update_available: compareSemver(cached.latest_version, current) > 0,\n };\n }\n }\n\n const latest = await fetchLatestVersion();\n if (!latest) {\n return null;\n }\n\n // Persist cache (best-effort, never throw)\n try {\n await writeJsonFile(getCachePath(), {\n latest_version: latest,\n checked_at: Date.now(),\n } satisfies UpdateCheckCache);\n } catch {\n // ignore\n }\n\n return {\n current,\n latest,\n update_available: compareSemver(latest, current) > 0,\n };\n}\n\nexport type InstallMethod = \"binary\" | \"npm\" | \"bun\";\n\n/**\n * Detect how agent-slack was installed so we can use the right update strategy.\n *\n * - \"npm\" → running via Node.js (npm install -g agent-slack)\n * - \"bun\" → running via Bun runtime (bun install -g agent-slack / bunx)\n * - \"binary\" → standalone compiled binary (GitHub release)\n */\nexport function detectInstallMethod(): InstallMethod {\n // Running under Bun runtime (bun install -g, bunx, bun run, etc.)\n // Note: compiled bun binaries also have process.versions.bun set,\n // so we check that the executable is actually the bun runtime itself.\n if (process.versions.bun && basename(process.execPath) === \"bun\") {\n return \"bun\";\n }\n\n // Running under Node.js (npm install -g, npx, etc.)\n const execName = basename(process.execPath);\n if ([\"node\", \"nodejs\", \"node.exe\"].includes(execName) || process.env.npm_execpath) {\n return \"npm\";\n }\n\n // Standalone compiled binary\n return \"binary\";\n}\n\n/**\n * Return the shell command a user should run to update, based on install method.\n */\nexport function getUpdateCommand(method?: InstallMethod): string {\n const m = method ?? detectInstallMethod();\n switch (m) {\n case \"npm\":\n return \"npm install -g agent-slack@latest\";\n case \"bun\":\n return \"bun install -g agent-slack@latest\";\n case \"binary\":\n return \"agent-slack update\";\n }\n}\n\n/**\n * Update via a package manager (npm or bun).\n * Spawns the package manager synchronously and returns the result.\n */\nexport function performPackageManagerUpdate(method: \"npm\" | \"bun\"): {\n success: boolean;\n message: string;\n} {\n const cmd = getUpdateCommand(method);\n try {\n execSync(cmd, { stdio: [\"inherit\", \"pipe\", \"inherit\"] });\n return { success: true, message: `Updated agent-slack via: ${cmd}` };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { success: false, message: `Failed to run \"${cmd}\": ${msg}` };\n }\n}\n\nfunction detectPlatformAsset(): string {\n const platform = process.platform === \"win32\" ? \"windows\" : process.platform;\n const archMap: Record<string, string> = { x64: \"x64\", arm64: \"arm64\" };\n const arch = archMap[process.arch] ?? process.arch;\n const ext = platform === \"windows\" ? \".exe\" : \"\";\n return `agent-slack-${platform}-${arch}${ext}`;\n}\n\nasync function sha256(filePath: string): Promise<string> {\n const data = await readFile(filePath);\n return createHash(\"sha256\").update(data).digest(\"hex\");\n}\n\n/**\n * Download, verify, and replace the current binary with the latest release.\n * Returns `true` on success.\n */\nexport async function performUpdate(\n latest: string,\n): Promise<{ success: boolean; message: string }> {\n const asset = detectPlatformAsset();\n const tag = `v${latest}`;\n const baseUrl = `https://github.com/${REPO}/releases/download/${tag}`;\n\n const tmp = join(tmpdir(), `agent-slack-update-${Date.now()}`);\n await mkdir(tmp, { recursive: true });\n\n const binTmp = join(tmp, asset);\n const sumsTmp = join(tmp, \"checksums-sha256.txt\");\n\n try {\n // Download binary + checksums in parallel\n const [binResp, sumsResp] = await Promise.all([\n fetch(`${baseUrl}/${asset}`, { signal: AbortSignal.timeout(120_000) }),\n fetch(`${baseUrl}/checksums-sha256.txt`, { signal: AbortSignal.timeout(30_000) }),\n ]);\n\n if (!binResp.ok) {\n return { success: false, message: `Failed to download ${asset}: HTTP ${binResp.status}` };\n }\n if (!sumsResp.ok) {\n return { success: false, message: `Failed to download checksums: HTTP ${sumsResp.status}` };\n }\n\n await writeFile(binTmp, Buffer.from(await binResp.arrayBuffer()));\n const sumsText = await sumsResp.text();\n await writeFile(sumsTmp, sumsText);\n\n // Verify checksum\n const expected = sumsText\n .split(\"\\n\")\n .map((line) => line.trim().split(/\\s+/))\n .find((parts) => parts[1] === asset)?.[0];\n\n if (!expected) {\n return { success: false, message: `Checksum not found for ${asset} in release checksums` };\n }\n\n const actual = await sha256(binTmp);\n if (actual !== expected) {\n return { success: false, message: `Checksum mismatch: expected ${expected}, got ${actual}` };\n }\n\n // Replace current binary\n const currentBin = process.execPath;\n const backupPath = `${currentBin}.bak`;\n\n // Rename current -> backup, copy new -> current, remove backup\n await rename(currentBin, backupPath);\n try {\n await copyFile(binTmp, currentBin);\n await chmod(currentBin, 0o755);\n await rm(backupPath, { force: true });\n } catch (err) {\n // Restore backup on failure\n try {\n await rename(backupPath, currentBin);\n } catch {\n // ignore restore failure\n }\n throw err;\n }\n\n return { success: true, message: `Updated agent-slack to ${latest}` };\n } finally {\n await rm(tmp, { recursive: true, force: true }).catch(() => {});\n }\n}\n\n/**\n * Background update check. Writes a notice to stderr if an update is available.\n * Swallows all errors silently. Respects the 24-hour throttle.\n * Disable with AGENT_SLACK_NO_UPDATE_CHECK=1.\n */\nexport async function backgroundUpdateCheck(): Promise<void> {\n if (process.env.AGENT_SLACK_NO_UPDATE_CHECK === \"1\") {\n return;\n }\n try {\n const result = await checkForUpdate();\n if (result?.update_available) {\n const cmd = getUpdateCommand();\n process.stderr.write(\n `\\nUpdate available: ${result.current} → ${result.latest}. Run \"${cmd}\" to upgrade.\\n`,\n );\n }\n } catch {\n // never interfere with normal operation\n }\n}\n",
63
69
  "import type { Command } from \"commander\";\nimport {\n checkForUpdate,\n detectInstallMethod,\n getUpdateCommand,\n performPackageManagerUpdate,\n performUpdate,\n} from \"../lib/update.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\n\nexport function registerUpdateCommand(input: { program: Command }): void {\n input.program\n .command(\"update\")\n .description(\"Update agent-slack to the latest version\")\n .option(\"--check\", \"Only check for updates (don't install)\")\n .action(async (...args) => {\n const [options] = args as [{ check?: boolean }];\n const method = detectInstallMethod();\n\n try {\n const result = await checkForUpdate(true);\n\n if (!result) {\n console.error(\"Could not check for updates. Check your network connection.\");\n process.exitCode = 1;\n return;\n }\n\n if (!result.update_available) {\n console.log(\n JSON.stringify(\n pruneEmpty({ ...result, install_method: method, status: \"up_to_date\" }),\n null,\n 2,\n ),\n );\n return;\n }\n\n if (options.check) {\n console.log(\n JSON.stringify(\n pruneEmpty({\n ...result,\n install_method: method,\n update_command: getUpdateCommand(method),\n status: \"update_available\",\n }),\n null,\n 2,\n ),\n );\n return;\n }\n\n process.stderr.write(`Updating agent-slack ${result.current} → ${result.latest}...\\n`);\n\n let outcome: { success: boolean; message: string };\n if (method === \"npm\" || method === \"bun\") {\n process.stderr.write(`Detected install method: ${method}\\n`);\n outcome = performPackageManagerUpdate(method);\n } else {\n outcome = await performUpdate(result.latest);\n }\n\n if (!outcome.success) {\n console.error(outcome.message);\n process.exitCode = 1;\n return;\n }\n\n console.log(\n JSON.stringify(\n pruneEmpty({\n status: \"updated\",\n install_method: method,\n previous_version: result.current,\n new_version: result.latest,\n message: outcome.message,\n }),\n null,\n 2,\n ),\n );\n } catch (err: unknown) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n}\n",
64
- "import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type CompactSlackUser = {\n id: string;\n name?: string; // handle\n real_name?: string;\n display_name?: string;\n email?: string;\n title?: string;\n tz?: string;\n is_bot?: boolean;\n deleted?: boolean;\n dm_id?: string;\n};\n\nexport async function listUsers(\n client: SlackApiClient,\n options?: {\n limit?: number;\n cursor?: string;\n includeBots?: boolean;\n },\n): Promise<{ users: CompactSlackUser[]; next_cursor?: string }> {\n const limit = Math.min(Math.max(options?.limit ?? 200, 1), 1000);\n const includeBots = options?.includeBots ?? false;\n\n let next_cursor: string | undefined;\n const [out, dmMap] = await Promise.all([\n (async () => {\n const users: CompactSlackUser[] = [];\n let cursor = options?.cursor;\n while (users.length < limit) {\n const pageSize = Math.min(200, limit - users.length);\n const resp = await client.api(\"users.list\", { limit: pageSize, cursor });\n const members = asArray(resp.members).filter(isRecord);\n for (const m of members) {\n const id = getString(m.id);\n if (!id) {\n continue;\n }\n if (!includeBots && m.is_bot) {\n continue;\n }\n users.push(toCompactUser(m));\n if (users.length >= limit) {\n break;\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n next_cursor = next;\n }\n return users;\n })(),\n fetchDmMap(client),\n ]);\n\n for (const u of out) {\n const dmId = dmMap.get(u.id);\n if (dmId) {\n u.dm_id = dmId;\n }\n }\n\n return { users: out, next_cursor };\n}\n\nexport async function getUser(client: SlackApiClient, input: string): Promise<CompactSlackUser> {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(\"User is empty\");\n }\n\n const userId = await resolveUserId(client, trimmed);\n if (!userId) {\n throw new Error(`Could not resolve user: ${input}`);\n }\n\n const resp = await client.api(\"users.info\", { user: userId });\n const u = isRecord(resp.user) ? resp.user : null;\n if (!u || !getString(u.id)) {\n throw new Error(\"users.info returned no user\");\n }\n return toCompactUser(u);\n}\n\nexport async function resolveUserId(client: SlackApiClient, input: string): Promise<string | null> {\n const trimmed = input.trim();\n if (/^U[A-Z0-9]{8,}$/.test(trimmed)) {\n return trimmed;\n }\n\n const looksLikeEmail = /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(trimmed) && !trimmed.startsWith(\"@\");\n if (looksLikeEmail) {\n try {\n const byEmail = await client.api(\"users.lookupByEmail\", { email: trimmed });\n const user = isRecord(byEmail.user) ? byEmail.user : null;\n const userId = user ? getString(user.id) : undefined;\n if (userId) {\n return userId;\n }\n } catch {\n // Fallback to users.list scan below.\n }\n }\n\n const handle = trimmed.startsWith(\"@\") ? trimmed.slice(1) : trimmed;\n if (!handle) {\n return null;\n }\n\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"users.list\", { limit: 200, cursor });\n const members = asArray(resp.members).filter(isRecord);\n const found = members.find((m) => {\n if (getString(m.name) === handle) {\n return true;\n }\n if (looksLikeEmail) {\n const profile = isRecord(m.profile) ? m.profile : null;\n const email = profile ? getString(profile.email) : undefined;\n return Boolean(email) && email?.toLowerCase() === trimmed.toLowerCase();\n }\n return false;\n });\n if (found) {\n const id = getString(found.id);\n if (id) {\n return id;\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return null;\n}\n\nasync function fetchDmMap(client: SlackApiClient): Promise<Map<string, string>> {\n const map = new Map<string, string>();\n let cursor: string | undefined;\n for (;;) {\n const resp = await client.api(\"conversations.list\", {\n types: \"im\",\n limit: 200,\n cursor,\n });\n const channels = asArray(resp.channels).filter(isRecord);\n for (const ch of channels) {\n const id = getString(ch.id);\n const user = getString(ch.user);\n if (id && user) {\n map.set(user, id);\n }\n }\n const meta = isRecord(resp.response_metadata) ? resp.response_metadata : null;\n const next = meta ? getString(meta.next_cursor) : undefined;\n if (!next) {\n break;\n }\n cursor = next;\n }\n return map;\n}\n\nexport async function getDmChannelForUsers(\n client: SlackApiClient,\n inputs: string[],\n): Promise<{ user_ids: string[]; dm_channel_id: string; channel_type: \"dm\" | \"group_dm\" }> {\n if (!inputs || inputs.length === 0) {\n throw new Error(\"At least one user is required\");\n }\n\n if (inputs.length > 8) {\n throw new Error(\"Slack supports a maximum of 8 users in a group DM\");\n }\n\n const userIds: string[] = [];\n for (const input of inputs) {\n const trimmed = input.trim();\n if (!trimmed) {\n continue;\n }\n const userId = await resolveUserId(client, trimmed);\n if (!userId) {\n throw new Error(`Could not resolve user: ${input}`);\n }\n userIds.push(userId);\n }\n\n if (userIds.length === 0) {\n throw new Error(\"No valid users provided\");\n }\n\n const resp = await client.api(\"conversations.open\", { users: userIds.join(\",\") });\n const channel = isRecord(resp.channel) ? resp.channel : null;\n const channelId = channel ? getString(channel.id) : null;\n\n if (!channelId) {\n throw new Error(\"conversations.open returned no channel\");\n }\n\n const channelType = channelId.startsWith(\"D\") ? \"dm\" : \"group_dm\";\n\n return {\n user_ids: userIds,\n dm_channel_id: channelId,\n channel_type: channelType,\n };\n}\n\nfunction toCompactUser(u: Record<string, unknown>): CompactSlackUser {\n const profile = isRecord(u.profile) ? u.profile : {};\n return {\n id: getString(u.id) ?? \"\",\n name: getString(u.name) ?? undefined,\n real_name: getString(u.real_name) ?? getString(profile.real_name) ?? undefined,\n display_name: getString(profile.display_name) ?? undefined,\n email: getString(profile.email) ?? undefined,\n title: getString(profile.title) ?? undefined,\n tz: getString(u.tz) ?? undefined,\n is_bot: typeof u.is_bot === \"boolean\" ? u.is_bot : undefined,\n deleted: typeof u.deleted === \"boolean\" ? u.deleted : undefined,\n };\n}\n",
65
70
  "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { getDmChannelForUsers, getUser, listUsers } from \"../slack/users.ts\";\n\nexport function registerUserCommand(input: { program: Command; ctx: CliContext }): void {\n const userCmd = input.program.command(\"user\").description(\"Workspace user directory\");\n\n userCmd\n .command(\"list\")\n .description(\"List users in the workspace\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .option(\"--limit <n>\", \"Max users (default 200)\", \"200\")\n .option(\"--cursor <cursor>\", \"Pagination cursor\")\n .option(\"--include-bots\", \"Include bot users\")\n .action(async (...args) => {\n const [options] = args as [\n { workspace?: string; limit: string; cursor?: string; includeBots?: boolean },\n ];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const limit = Number.parseInt(options.limit, 10);\n return await listUsers(client, {\n limit,\n cursor: options.cursor,\n includeBots: Boolean(options.includeBots),\n });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n userCmd\n .command(\"get\")\n .description(\"Get a single user by id (U...) or handle (@name)\")\n .argument(\"<user>\", \"User id (U...) or @handle/handle\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [user, options] = args as [string, { workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await getUser(client, user);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n userCmd\n .command(\"dm-open\")\n .description(\n \"Open or get a DM / group DM channel for one or more users by id (U...) or handle (@name)\",\n )\n .argument(\"<users...>\", \"One or more user ids or @handles (space-separated)\")\n .option(\"--workspace <url>\", \"Workspace URL (required if you have multiple workspaces)\")\n .action(async (...args) => {\n const [users, options] = args as [string[], { workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await getDmChannelForUsers(client, users);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
66
71
  "import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport async function createChannel(\n client: SlackApiClient,\n input: { name: string; isPrivate?: boolean },\n): Promise<{ channel: { id: string; name: string; is_private: boolean } }> {\n const name = input.name.trim();\n if (!name) {\n throw new Error(\"Channel name is empty\");\n }\n\n const resp = await client.api(\"conversations.create\", {\n name,\n is_private: Boolean(input.isPrivate),\n });\n const channel = isRecord(resp.channel) ? resp.channel : null;\n const id = channel ? getString(channel.id) : undefined;\n const channelName = channel ? getString(channel.name) : undefined;\n const isPrivate =\n channel && typeof channel.is_private === \"boolean\"\n ? channel.is_private\n : Boolean(input.isPrivate);\n\n if (!id || !channelName) {\n throw new Error(\"conversations.create returned no channel\");\n }\n\n return {\n channel: {\n id,\n name: channelName,\n is_private: isPrivate,\n },\n };\n}\n\nexport async function inviteUsersToChannel(\n client: SlackApiClient,\n input: { channelId: string; userIds: string[] },\n): Promise<{ invited_user_ids: string[]; already_in_channel_user_ids: string[] }> {\n const invitedUserIds: string[] = [];\n const alreadyInChannelUserIds: string[] = [];\n\n for (const userId of input.userIds) {\n try {\n await client.api(\"conversations.invite\", {\n channel: input.channelId,\n users: userId,\n });\n invitedUserIds.push(userId);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"already_in_channel\")) {\n alreadyInChannelUserIds.push(userId);\n continue;\n }\n throw err;\n }\n }\n\n return {\n invited_user_ids: invitedUserIds,\n already_in_channel_user_ids: alreadyInChannelUserIds,\n };\n}\n\nexport function parseInviteUsersCsv(input: string): string[] {\n return Array.from(\n new Set(\n asArray(input.split(\",\"))\n .map((value) => String(value).trim())\n .filter(Boolean),\n ),\n );\n}\n\nexport function splitEmailsFromInviteTargets(input: string[]): {\n emails: string[];\n non_email_targets: string[];\n} {\n const emails: string[] = [];\n const nonEmailTargets: string[] = [];\n for (const target of input) {\n if (isLikelyEmail(target)) {\n emails.push(target);\n continue;\n }\n nonEmailTargets.push(target);\n }\n return {\n emails: Array.from(new Set(emails)),\n non_email_targets: nonEmailTargets,\n };\n}\n\nexport async function inviteExternalUsersToChannel(\n client: SlackApiClient,\n input: { channelId: string; emails: string[]; externalLimited?: boolean },\n): Promise<{ invited_emails: string[]; already_invited_emails: string[] }> {\n const invitedEmails: string[] = [];\n const alreadyInvitedEmails: string[] = [];\n\n for (const email of input.emails) {\n try {\n await client.api(\"conversations.inviteShared\", {\n channel: input.channelId,\n emails: [email],\n external_limited: input.externalLimited ?? true,\n });\n invitedEmails.push(email);\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes(\"already_in_channel\") || message.includes(\"already_invited\")) {\n alreadyInvitedEmails.push(email);\n continue;\n }\n throw err;\n }\n }\n\n return {\n invited_emails: invitedEmails,\n already_invited_emails: alreadyInvitedEmails,\n };\n}\n\nfunction isLikelyEmail(input: string): boolean {\n return /^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(input.trim());\n}\n",
67
- "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport {\n listAllConversations,\n listUserConversations,\n markConversation,\n resolveChannelId,\n} from \"../slack/channels.ts\";\nimport {\n createChannel,\n inviteExternalUsersToChannel,\n inviteUsersToChannel,\n parseInviteUsersCsv,\n splitEmailsFromInviteTargets,\n} from \"../slack/channel-admin.ts\";\nimport { resolveUserId } from \"../slack/users.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\n\ntype ChannelListOptions = {\n workspace?: string;\n user?: string;\n all?: boolean;\n limit: string;\n cursor?: string;\n};\n\nexport function registerChannelCommand(input: { program: Command; ctx: CliContext }): void {\n const channelCmd = input.program\n .command(\"channel\")\n .description(\"List conversations, create channels, and manage invites\");\n\n channelCmd\n .command(\"list\")\n .description(\"List conversations for a user (or current user), or all conversations\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .option(\"--user <user>\", \"User id (U...) or @handle/handle\")\n .option(\"--all\", \"List all conversations (conversations.list); incompatible with --user\")\n .option(\"--limit <n>\", \"Max conversations in one page (default 100)\", \"100\")\n .option(\"--cursor <cursor>\", \"Pagination cursor for the next page\")\n .action(async (...args) => {\n const [options] = args as [ChannelListOptions];\n try {\n if (options.all && options.user) {\n throw new Error(\"--all cannot be used with --user\");\n }\n\n const limit = Number.parseInt(options.limit, 10);\n if (!Number.isFinite(limit) || limit < 1) {\n throw new Error(`Invalid --limit value \"${options.limit}\": must be a positive integer`);\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n if (options.all) {\n return await listAllConversations(client, {\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n }\n\n let userId: string | undefined;\n if (options.user) {\n const resolvedUserId = await resolveUserId(client, options.user);\n if (!resolvedUserId) {\n throw new Error(`Could not resolve user: ${options.user}`);\n }\n userId = resolvedUserId;\n }\n\n return await listUserConversations(client, {\n user: userId,\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"new\")\n .description(\"Create a new channel\")\n .requiredOption(\"--name <name>\", \"Channel name\")\n .option(\"--private\", \"Create as a private channel\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [{ name: string; private?: boolean; workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await createChannel(client, {\n name: options.name,\n isPrivate: Boolean(options.private),\n });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"invite\")\n .description(\"Invite users to a channel\")\n .requiredOption(\"--channel <id-or-name>\", \"Channel id/name (#general, general, C...)\")\n .requiredOption(\"--users <users>\", \"Comma-separated users (U..., @handle, handle, email)\")\n .option(\"--external\", \"Send Slack Connect external invites (email targets only)\")\n .option(\n \"--allow-external-user-invites\",\n \"For --external invites, allow invitees to invite additional users\",\n )\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [\n {\n channel: string;\n users: string;\n external?: boolean;\n allowExternalUserInvites?: boolean;\n workspace?: string;\n },\n ];\n try {\n if (options.allowExternalUserInvites && !options.external) {\n throw new Error(\"--allow-external-user-invites requires --external\");\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [options.channel],\n });\n\n const userInputs = parseInviteUsersCsv(options.users);\n if (userInputs.length === 0) {\n throw new Error('No users provided. Pass --users \"U01...,@alice,bob@example.com\"');\n }\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, options.channel);\n\n if (options.external) {\n const split = splitEmailsFromInviteTargets(userInputs);\n if (split.emails.length === 0) {\n throw new Error(\n 'External invites require email targets in --users, e.g. --users \"alice@example.com,bob@example.com\"',\n );\n }\n const externalLimited = !options.allowExternalUserInvites;\n const inviteResult = await inviteExternalUsersToChannel(client, {\n channelId,\n emails: split.emails,\n externalLimited,\n });\n return {\n channel_id: channelId,\n external: true,\n external_limited: externalLimited,\n invited_emails: inviteResult.invited_emails,\n already_invited_emails: inviteResult.already_invited_emails,\n invalid_external_targets: split.non_email_targets,\n };\n }\n\n const resolvedUserIds: string[] = [];\n const unresolvedUsers: string[] = [];\n for (const userInput of userInputs) {\n const userId = await resolveUserId(client, userInput);\n if (!userId) {\n unresolvedUsers.push(userInput);\n continue;\n }\n resolvedUserIds.push(userId);\n }\n\n const inviteResult = await inviteUsersToChannel(client, {\n channelId,\n userIds: resolvedUserIds,\n });\n return {\n channel_id: channelId,\n invited_user_ids: inviteResult.invited_user_ids,\n already_in_channel_user_ids: inviteResult.already_in_channel_user_ids,\n unresolved_users: unresolvedUsers,\n };\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"mark\")\n .description(\"Mark a channel/DM as read up to a given message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\"--ts <ts>\", \"Message ts to mark as read (required when target is a channel name/ID)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [targetArg, options] = args as [string, { ts?: string; workspace?: string }];\n try {\n const target = parseMsgTarget(targetArg);\n let channelId: string;\n let ts: string;\n let workspaceUrl: string | undefined;\n\n if (target.kind === \"url\") {\n if (options.workspace) {\n throw new Error(\n \"--workspace cannot be used with a URL target; the workspace is derived from the URL\",\n );\n }\n channelId = target.ref.channel_id;\n ts = options.ts ?? target.ref.message_ts;\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(target.ref.workspace_url);\n } else if (target.kind === \"channel\") {\n if (!options.ts) {\n throw new Error(\"--ts is required when target is a channel name or ID\");\n }\n ({ ts } = options);\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n channelId = target.channel;\n } else {\n throw new Error(\"User targets are not supported for channel mark\");\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [channelId],\n });\n\n const resolvedId = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const resolved = await resolveChannelId(client, channelId);\n await markConversation(client, { channelId: resolved, ts });\n return resolved;\n },\n });\n\n console.log(JSON.stringify({ ok: true, channel: resolvedId, ts }, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n"
72
+ "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport {\n listAllConversations,\n listUserConversations,\n markConversation,\n resolveChannelId,\n} from \"../slack/channels.ts\";\nimport {\n createChannel,\n inviteExternalUsersToChannel,\n inviteUsersToChannel,\n parseInviteUsersCsv,\n splitEmailsFromInviteTargets,\n} from \"../slack/channel-admin.ts\";\nimport { resolveUserId } from \"../slack/users.ts\";\nimport { parseMsgTarget } from \"./targets.ts\";\n\ntype ChannelListOptions = {\n workspace?: string;\n user?: string;\n all?: boolean;\n limit: string;\n cursor?: string;\n};\n\nexport function registerChannelCommand(input: { program: Command; ctx: CliContext }): void {\n const channelCmd = input.program\n .command(\"channel\")\n .description(\"List conversations, create channels, and manage invites\");\n\n channelCmd\n .command(\"list\")\n .description(\"List conversations for a user (or current user), or all conversations\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .option(\"--user <user>\", \"User id (U...) or @handle/handle\")\n .option(\"--all\", \"List all conversations (conversations.list); incompatible with --user\")\n .option(\"--limit <n>\", \"Max conversations in one page (default 100)\", \"100\")\n .option(\"--cursor <cursor>\", \"Pagination cursor for the next page\")\n .action(async (...args) => {\n const [options] = args as [ChannelListOptions];\n try {\n if (options.all && options.user) {\n throw new Error(\"--all cannot be used with --user\");\n }\n\n const limit = Number.parseInt(options.limit, 10);\n if (!Number.isFinite(limit) || limit < 1) {\n throw new Error(`Invalid --limit value \"${options.limit}\": must be a positive integer`);\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n if (options.all) {\n return await listAllConversations(client, {\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n }\n\n let userId: string | undefined;\n if (options.user) {\n const resolvedUserId = await resolveUserId(client, options.user);\n if (!resolvedUserId) {\n throw new Error(`Could not resolve user: ${options.user}`);\n }\n userId = resolvedUserId;\n }\n\n return await listUserConversations(client, {\n user: userId,\n limit,\n cursor: options.cursor,\n excludeArchived: true,\n });\n },\n });\n\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"new\")\n .description(\"Create a new channel\")\n .requiredOption(\"--name <name>\", \"Channel name\")\n .option(\"--private\", \"Create as a private channel\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [{ name: string; private?: boolean; workspace?: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await createChannel(client, {\n name: options.name,\n isPrivate: Boolean(options.private),\n });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"invite\")\n .description(\"Invite users to a channel\")\n .requiredOption(\"--channel <id-or-name>\", \"Channel id/name (#general, general, C...)\")\n .requiredOption(\"--users <users>\", \"Comma-separated users (U..., @handle, handle, email)\")\n .option(\"--external\", \"Send Slack Connect external invites (email targets only)\")\n .option(\n \"--allow-external-user-invites\",\n \"For --external invites, allow invitees to invite additional users\",\n )\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [options] = args as [\n {\n channel: string;\n users: string;\n external?: boolean;\n allowExternalUserInvites?: boolean;\n workspace?: string;\n },\n ];\n try {\n if (options.allowExternalUserInvites && !options.external) {\n throw new Error(\"--allow-external-user-invites requires --external\");\n }\n\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [options.channel],\n });\n\n const userInputs = parseInviteUsersCsv(options.users);\n if (userInputs.length === 0) {\n throw new Error('No users provided. Pass --users \"U01...,@alice,bob@example.com\"');\n }\n\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, options.channel);\n\n if (options.external) {\n const split = splitEmailsFromInviteTargets(userInputs);\n if (split.emails.length === 0) {\n throw new Error(\n 'External invites require email targets in --users, e.g. --users \"alice@example.com,bob@example.com\"',\n );\n }\n const externalLimited = !options.allowExternalUserInvites;\n const inviteResult = await inviteExternalUsersToChannel(client, {\n channelId,\n emails: split.emails,\n externalLimited,\n });\n return {\n channel_id: channelId,\n external: true,\n external_limited: externalLimited,\n invited_emails: inviteResult.invited_emails,\n already_invited_emails: inviteResult.already_invited_emails,\n invalid_external_targets: split.non_email_targets,\n };\n }\n\n const resolvedUserIds: string[] = [];\n const unresolvedUsers: string[] = [];\n for (const userInput of userInputs) {\n const userId = await resolveUserId(client, userInput);\n if (!userId) {\n unresolvedUsers.push(userInput);\n continue;\n }\n resolvedUserIds.push(userId);\n }\n\n const inviteResult = await inviteUsersToChannel(client, {\n channelId,\n userIds: resolvedUserIds,\n });\n return {\n channel_id: channelId,\n invited_user_ids: inviteResult.invited_user_ids,\n already_in_channel_user_ids: inviteResult.already_in_channel_user_ids,\n unresolved_users: unresolvedUsers,\n };\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n channelCmd\n .command(\"mark\")\n .description(\"Mark a channel/DM as read up to a given message\")\n .argument(\"<target>\", \"Slack message URL, #channel, or channel ID\")\n .option(\"--ts <ts>\", \"Message ts to mark as read (required when target is a channel name/ID)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [targetArg, options] = args as [string, { ts?: string; workspace?: string }];\n try {\n const target = parseMsgTarget(targetArg);\n let channelId: string;\n let ts: string;\n let workspaceUrl: string | undefined;\n\n if (target.kind === \"url\") {\n if (options.workspace) {\n throw new Error(\n \"--workspace cannot be used with a URL target; the workspace is derived from the URL\",\n );\n }\n channelId = target.ref.channel_id;\n ts = options.ts ?? target.ref.message_ts;\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(target.ref.workspace_url);\n } else if (target.kind === \"channel\") {\n if (!options.ts) {\n throw new Error(\"--ts is required when target is a channel name or ID\");\n }\n ({ ts } = options);\n workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n channelId = target.channel;\n } else {\n throw new Error(\"User targets are not supported for channel mark\");\n }\n\n await input.ctx.assertWorkspaceSpecifiedForChannelNames({\n workspaceUrl,\n channels: [channelId],\n });\n\n const resolvedId = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const resolved = await resolveChannelId(client, channelId);\n await markConversation(client, { channelId: resolved, ts });\n return resolved;\n },\n });\n\n console.log(JSON.stringify({ ok: true, channel: resolvedId, ts }, null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n",
73
+ "import type { SlackApiClient } from \"./client.ts\";\nimport { asArray, getString, isRecord } from \"../lib/object-type-guards.ts\";\n\nexport type ChannelWorkflow = {\n title: string;\n trigger_id: string;\n link?: string;\n app_id?: string;\n featured: boolean;\n};\n\nexport type ChannelWorkflows = {\n channel_id: string;\n workflows: ChannelWorkflow[];\n};\n\nexport async function listChannelWorkflows(\n client: SlackApiClient,\n channelId: string,\n): Promise<ChannelWorkflows> {\n const [bookmarked, featured] = await Promise.all([\n listBookmarkedWorkflows(client, channelId),\n listFeaturedWorkflows(client, channelId),\n ]);\n\n // Merge: bookmarked is the primary source, featured adds the flag\n const featuredIds = new Set(featured.map((f) => f.trigger_id));\n const seen = new Set<string>();\n const workflows: ChannelWorkflow[] = [];\n\n for (const bk of bookmarked) {\n if (bk.trigger_id) {\n seen.add(bk.trigger_id);\n }\n workflows.push({\n title: bk.title,\n trigger_id: bk.trigger_id ?? \"\",\n link: bk.link,\n app_id: bk.app_id,\n featured: bk.trigger_id ? featuredIds.has(bk.trigger_id) : false,\n });\n }\n\n // Add any featured workflows not already found in bookmarks\n for (const ft of featured) {\n if (!seen.has(ft.trigger_id)) {\n workflows.push({\n title: ft.title,\n trigger_id: ft.trigger_id,\n featured: true,\n });\n }\n }\n\n return { channel_id: channelId, workflows };\n}\n\ntype BookmarkedWorkflow = {\n title: string;\n trigger_id?: string;\n link?: string;\n app_id?: string;\n};\n\nasync function listBookmarkedWorkflows(\n client: SlackApiClient,\n channelId: string,\n): Promise<BookmarkedWorkflow[]> {\n const resp = await client.api(\"bookmarks.list\", {\n channel_id: channelId,\n });\n return asArray(resp.bookmarks)\n .filter(isRecord)\n .filter((b) => {\n const link = getString(b.link) ?? \"\";\n const shortcutId = getString(b.shortcut_id);\n return shortcutId || link.includes(\"slack.com/shortcuts/\");\n })\n .map((b) => {\n const link = getString(b.link);\n const shortcutId = getString(b.shortcut_id);\n const triggerId = shortcutId || extractTriggerId(link);\n return {\n title: getString(b.title) ?? \"\",\n trigger_id: triggerId,\n link,\n app_id: getString(b.app_id),\n };\n });\n}\n\ntype FeaturedWorkflow = {\n trigger_id: string;\n title: string;\n};\n\nasync function listFeaturedWorkflows(\n client: SlackApiClient,\n channelId: string,\n): Promise<FeaturedWorkflow[]> {\n try {\n const resp = await client.api(\"workflows.featured.list\", {\n channel_ids: JSON.stringify([channelId]),\n });\n const entries = asArray(resp.featured_workflows).filter(isRecord);\n const entry = entries.find((e) => getString(e.channel_id) === channelId);\n if (!entry) {\n return [];\n }\n return asArray(entry.triggers)\n .filter(isRecord)\n .map((t) => ({\n trigger_id: getString(t.id) ?? \"\",\n title: getString(t.title) ?? \"\",\n }))\n .filter((t) => t.trigger_id);\n } catch {\n // workflows.featured.list may not be available — not fatal\n return [];\n }\n}\n\nexport type WorkflowPreview = {\n trigger_id: string;\n type: string;\n name: string;\n description: string;\n shortcut_url?: string;\n workflow: {\n id: string;\n title: string;\n description: string;\n app_id: string;\n app_name: string;\n };\n collaborators: string[];\n};\n\nexport async function previewWorkflow(\n client: SlackApiClient,\n triggerId: string,\n): Promise<WorkflowPreview> {\n const resp = await client.api(\"workflows.triggers.preview\", {\n trigger_ids: triggerId,\n });\n const triggers = asArray(resp.triggers).filter(isRecord);\n if (triggers.length === 0) {\n const rejected = asArray(resp.rejected_triggers);\n if (rejected.length > 0) {\n throw new Error(`Trigger ${triggerId} was rejected — you may not have access`);\n }\n throw new Error(`No preview data returned for trigger ${triggerId}`);\n }\n const t = triggers[0]!;\n const wf = isRecord(t.workflow) ? t.workflow : {};\n const wfApp = isRecord(wf.app) ? wf.app : {};\n const details = isRecord(t.workflow_details) ? t.workflow_details : {};\n return {\n trigger_id: getString(t.id) ?? triggerId,\n type: getString(t.type) ?? \"\",\n name: getString(t.name) ?? \"\",\n description: getString(t.description) ?? \"\",\n shortcut_url: getString(t.shortcut_url),\n workflow: {\n id: getString(wf.workflow_id) ?? \"\",\n title: getString(wf.title) ?? \"\",\n description: getString(wf.description) ?? \"\",\n app_id: getString(wf.app_id) ?? getString(wfApp.id) ?? \"\",\n app_name: getString(wfApp.name) ?? \"\",\n },\n collaborators: asArray(details.collaborators)\n .map((c) => (typeof c === \"string\" ? c : \"\"))\n .filter(Boolean),\n };\n}\n\nexport type WorkflowRunResult = {\n function_execution_id: string;\n trigger_execution_id: string;\n is_slow_workflow: boolean;\n};\n\nexport async function runWorkflow(\n client: SlackApiClient,\n input: { shortcutUrl: string; channelId: string; triggerId: string },\n): Promise<WorkflowRunResult> {\n const clientToken = `cli-${Date.now()}`;\n const resp = await client.api(\"workflows.triggers.trip\", {\n url: input.shortcutUrl,\n client_token: clientToken,\n context: JSON.stringify({\n location: \"bookmark\",\n channel_id: input.channelId,\n trigger_id: input.triggerId,\n }),\n run_precheck: true,\n });\n return {\n function_execution_id: getString(resp.function_execution_id) ?? \"\",\n trigger_execution_id: getString(resp.trigger_execution_id) ?? \"\",\n is_slow_workflow: resp.is_slow_workflow === true,\n };\n}\n\nexport async function resolveShortcutUrl(\n client: SlackApiClient,\n input: { channelId: string; triggerId: string },\n): Promise<string> {\n const { channelId, triggerId } = input;\n const resp = await client.api(\"bookmarks.list\", {\n channel_id: channelId,\n });\n const bookmarks = asArray(resp.bookmarks).filter(isRecord);\n for (const b of bookmarks) {\n const shortcutId = getString(b.shortcut_id);\n if (shortcutId === triggerId) {\n const link = getString(b.link);\n if (link) {\n return link;\n }\n }\n }\n throw new Error(`Could not find shortcut URL for trigger ${triggerId} in channel bookmarks`);\n}\n\nexport type FormField = {\n name: string;\n title: string;\n type: string;\n description: string;\n required: boolean;\n long?: boolean;\n};\n\nexport type WorkflowSchema = {\n workflow_id: string;\n title: string;\n description: string;\n form_title?: string;\n fields: FormField[];\n steps: string[];\n};\n\nexport async function getWorkflowSchema(\n client: SlackApiClient,\n workflowId: string,\n): Promise<WorkflowSchema> {\n const resp = await client.api(\"workflows.get\", { workflow_id: workflowId });\n const wf = isRecord(resp.workflow) ? resp.workflow : null;\n if (!wf) {\n throw new Error(`No workflow found for ID ${workflowId}`);\n }\n\n const steps = asArray(wf.steps).filter(isRecord);\n const stepSummaries: string[] = [];\n let fields: FormField[] = [];\n let formTitle: string | undefined;\n\n for (const step of steps) {\n const fn = isRecord(step.function) ? step.function : {};\n const callbackId = getString(fn.callback_id) ?? \"\";\n const title = getString(fn.title) ?? callbackId;\n stepSummaries.push(title);\n\n if (callbackId === \"open_form\") {\n const inputs = isRecord(step.inputs) ? step.inputs : {};\n const titleInput = isRecord(inputs.title) ? inputs.title : {};\n formTitle = getString(titleInput.value);\n\n const fieldsInput = isRecord(inputs.fields) ? inputs.fields : {};\n const fieldsValue = isRecord(fieldsInput.value) ? fieldsInput.value : {};\n const elements = asArray(fieldsValue.elements).filter(isRecord);\n const required = new Set(\n asArray(fieldsValue.required)\n .map((r) => (typeof r === \"string\" ? r : \"\"))\n .filter(Boolean),\n );\n\n fields = elements.map((el) => ({\n name: getString(el.name) ?? \"\",\n title: getString(el.title) ?? \"\",\n type: getString(el.type) ?? \"string\",\n description: getString(el.description) ?? \"\",\n required: required.has(getString(el.name) ?? \"\"),\n long: el.long === true ? true : undefined,\n }));\n }\n }\n\n return {\n workflow_id: getString(wf.id) ?? workflowId,\n title: getString(wf.title) ?? \"\",\n description: getString(wf.description) ?? \"\",\n form_title: formTitle,\n fields,\n steps: stepSummaries,\n };\n}\n\nfunction extractTriggerId(link: string | undefined): string | undefined {\n if (!link) {\n return undefined;\n }\n const match = link.match(/slack\\.com\\/shortcuts\\/(Ft[A-Za-z0-9]+)/);\n return match?.[1];\n}\n",
74
+ "import type { Command } from \"commander\";\nimport type { CliContext } from \"./context.ts\";\nimport { pruneEmpty } from \"../lib/compact-json.ts\";\nimport { resolveChannelId } from \"../slack/channels.ts\";\nimport {\n getWorkflowSchema,\n listChannelWorkflows,\n previewWorkflow,\n resolveShortcutUrl,\n runWorkflow,\n} from \"../slack/workflows.ts\";\n\ntype WorkspaceOption = {\n workspace?: string;\n};\n\nexport function registerWorkflowCommand(input: { program: Command; ctx: CliContext }): void {\n const workflowCmd = input.program\n .command(\"workflow\")\n .description(\"Discover and interact with Slack workflows\");\n\n workflowCmd\n .command(\"list\")\n .description(\"List workflows bookmarked or featured in a channel\")\n .argument(\"<channel>\", \"Channel id or name (#channel, channel, C...)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [channel, options] = args as [string, WorkspaceOption];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, channel);\n return await listChannelWorkflows(client, channelId);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n workflowCmd\n .command(\"preview\")\n .description(\"Get workflow metadata from a trigger ID (no side effects)\")\n .argument(\"<trigger-id>\", \"Trigger ID (Ft...)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [triggerId, options] = args as [string, WorkspaceOption];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n return await previewWorkflow(client, triggerId);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n workflowCmd\n .command(\"get\")\n .description(\"Get workflow definition including form fields and steps (accepts Ft... or Wf...)\")\n .argument(\"<id>\", \"Trigger ID (Ft...) or Workflow ID (Wf...)\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [id, options] = args as [string, WorkspaceOption];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n let workflowId = id;\n if (id.startsWith(\"Ft\")) {\n const preview = await previewWorkflow(client, id);\n workflowId = preview.workflow.id;\n }\n return await getWorkflowSchema(client, workflowId);\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n\n workflowCmd\n .command(\"run\")\n .description(\"Trip a workflow trigger\")\n .argument(\"<trigger-id>\", \"Trigger ID (Ft...)\")\n .requiredOption(\"--channel <id-or-name>\", \"Channel where the workflow is bookmarked\")\n .option(\n \"--workspace <url>\",\n \"Workspace selector (full URL or unique substring; required if you have multiple workspaces)\",\n )\n .action(async (...args) => {\n const [triggerId, options] = args as [string, WorkspaceOption & { channel: string }];\n try {\n const workspaceUrl = input.ctx.effectiveWorkspaceUrl(options.workspace);\n const payload = await input.ctx.withAutoRefresh({\n workspaceUrl,\n work: async () => {\n const { client } = await input.ctx.getClientForWorkspace(workspaceUrl);\n const channelId = await resolveChannelId(client, options.channel);\n const shortcutUrl = await resolveShortcutUrl(client, { channelId, triggerId });\n return await runWorkflow(client, { shortcutUrl, channelId, triggerId });\n },\n });\n console.log(JSON.stringify(pruneEmpty(payload), null, 2));\n } catch (err: unknown) {\n console.error(input.ctx.errorMessage(err));\n process.exitCode = 1;\n }\n });\n}\n"
68
75
  ],
69
- "mappings": ";;;;AAAA;;;ACAA;AACA;AACA;AAKA,IAAI;AAEG,SAAS,iBAAiB,GAAW;AAAA,EAC1C,IAAI,kBAAkB,WAAW;AAAA,IAC/B,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,OAAO,8BAA8B,YAAY,2BAA2B;AAAA,IAC9E,gBAAgB;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,aACJ,QAAQ,IAAI,qBAAqB,KAAK,KAAK,QAAQ,IAAI,qBAAqB,KAAK;AAAA,EACnF,IAAI,YAAY;AAAA,IACd,gBAAgB;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EAGA,IAAI;AAAA,IACF,IAAI,MAAM,QAAQ,cAAc,YAAY,GAAG,CAAC;AAAA,IAChD,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK;AAAA,MAC1B,MAAM,YAAY,KAAK,KAAK,cAAc;AAAA,MAC1C,IAAI,WAAW,SAAS,GAAG;AAAA,QACzB,MAAM,MAAM,aAAa,WAAW,MAAM;AAAA,QAC1C,MAAM,MAAM,KAAK,MAAM,GAAG;AAAA,QAC1B,MAAM,IAAI,OAAO,IAAI,YAAY,WAAW,IAAI,QAAQ,KAAK,IAAI;AAAA,QACjE,gBAAgB,KAAK;AAAA,QACrB,OAAO;AAAA,MACT;AAAA,MACA,MAAM,OAAO,QAAQ,GAAG;AAAA,MACxB,IAAI,SAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAAA,MACA,MAAM;AAAA,IACR;AAAA,IACA,MAAM;AAAA,EAIR,gBAAgB;AAAA,EAChB,OAAO;AAAA;AAGF,SAAS,YAAY,GAAW;AAAA,EACrC,OAAO,eAAe,kBAAkB;AAAA;;;ACvD1C;AACA,uBAAS;AACT,oBAAS,sBAAS;AAClB,iBAAS;;;ACHT;AACA,uBAAS;AACT;AACA;AACA,iBAAS;AAUT,IAAM,WAAW,SAAS;AAC1B,IAAM,WAAW,aAAa;AAC9B,IAAM,WAAW,aAAa;AAEvB,SAAS,wBAAwB,CAAC,OAAyB;AAAA,EAChE,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AAAA,IACvC,OAAO;AAAA,EACT;AAAA,EACA,MAAM,MAAM;AAAA,EACZ,MAAM,OAAO,OAAO,IAAI,SAAS,WAAW,IAAI,OAAO;AAAA,EACvD,MAAM,UAAU,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU;AAAA,EAEhE,IAAI,SAAS,0BAA0B,SAAS,kCAAkC;AAAA,IAChF,OAAO;AAAA,EACT;AAAA,EACA,IAAI,CAAC,QAAQ,SAAS,YAAY,GAAG;AAAA,IACnC,OAAO;AAAA,EACT;AAAA,EACA,OACE,QAAQ,SAAS,oBAAoB,KACrC,QAAQ,SAAS,wBAAwB,KACzC,QAAQ,SAAS,wBAAwB,KACzC,QAAQ,SAAS,4BAA4B;AAAA;AAIjD,eAAsB,mBAAmB,CAAC,QAAgB,KAAmC;AAAA,EAC3F,IAAI;AAAA,IACF,QAAQ,aAAa,MAAa;AAAA,IAClC,MAAM,KAAK,IAAI,SAAS,QAAQ,EAAE,UAAU,KAAK,CAAC;AAAA,IAClD,IAAI;AAAA,MACF,OAAO,GAAG,MAAM,GAAG,EAAE,IAAI;AAAA,cACzB;AAAA,MACA,GAAG,MAAM;AAAA;AAAA,IAEX,OAAO,OAAO;AAAA,IACd,IAAI,CAAC,yBAAyB,KAAK,GAAG;AAAA,MACpC,MAAM;AAAA,IACR;AAAA,IACA,QAAQ,iBAAiB,MAAa;AAAA,IACtC,MAAM,KAAK,IAAI,aAAa,QAAQ,EAAE,UAAU,KAAK,CAAC;AAAA,IACtD,IAAI;AAAA,MACF,OAAO,GAAG,QAAQ,GAAG,EAAE,IAAI;AAAA,cAC3B;AAAA,MACA,GAAG,MAAM;AAAA;AAAA;AAAA;AAKR,SAAS,iBAAiB,GAAW;AAAA,EAC1C,IAAI,UAAU;AAAA,IACZ,OAAO,MAAK,QAAQ,GAAG,YAAY,SAAS;AAAA,EAC9C;AAAA,EACA,IAAI,UAAU;AAAA,IACZ,OAAO,MAAK,QAAQ,GAAG,WAAW,uBAAuB,SAAS;AAAA,EACpE;AAAA,EACA,MAAM,IAAI,MAAM,0CAA0C,WAAW;AAAA;AAGhE,SAAS,gBAAgB,CAAC,KAAa,SAAqC;AAAA,EACjF,MAAM,QAAQ,IAAI,MAAM,OAAO;AAAA,EAC/B,MAAM,WAKA,CAAC;AAAA,EAEP,MAAM,kBAAkB,IAAI;AAAA,EAE5B,IAAI,UAAU;AAAA,EACd,IAAI,UACF;AAAA,EAEF,WAAW,WAAW,OAAO;AAAA,IAC3B,MAAM,OAAO,QAAQ,KAAK;AAAA,IAC1B,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,GAAG;AAAA,MACzD;AAAA,IACF;AAAA,IACA,IAAI,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;AAAA,MAC9C,IAAI,SAAS;AAAA,QACX,SAAS,KAAK,OAAO;AAAA,QACrB,UAAU;AAAA,MACZ;AAAA,MACA,UAAU,KAAK,MAAM,GAAG,EAAE;AAAA,MAC1B,IAAI,QAAQ,WAAW,SAAS,GAAG;AAAA,QACjC,UAAU,EAAE,YAAY,MAAM,WAAW,MAAM;AAAA,MACjD;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,KAAK,QAAQ,GAAG;AAAA,IAC5B,IAAI,QAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAAA,IACA,MAAM,MAAM,KAAK,MAAM,GAAG,GAAG,EAAE,KAAK;AAAA,IACpC,MAAM,QAAQ,KAAK,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,IAEvC,IAAI,QAAQ,WAAW,SAAS,KAAK,SAAS;AAAA,MAC5C,IAAI,QAAQ,QAAQ;AAAA,QAClB,QAAQ,OAAO;AAAA,MACjB,EAAO,SAAI,QAAQ,QAAQ;AAAA,QACzB,QAAQ,OAAO;AAAA,MACjB,EAAO,SAAI,QAAQ,cAAc;AAAA,QAC/B,QAAQ,aAAa,UAAU;AAAA,MACjC,EAAO,SAAI,QAAQ,WAAW;AAAA,QAC5B,QAAQ,YAAY,UAAU;AAAA,MAChC;AAAA,MACA;AAAA,IACF;AAAA,IAEA,IAAI,QAAQ,WAAW,SAAS,KAAK,QAAQ,aAAa,OAAO;AAAA,MAC/D,gBAAgB,IAAI,KAAK;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,IAAI,SAAS;AAAA,IACX,SAAS,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,OAAO,SACJ,OAAO,CAAC,MAAM,QAAQ,EAAE,IAAI,CAAC,EAC7B,IAAI,CAAC,MAAM;AAAA,IACV,MAAM,cAAc,EAAE,aAAa,MAAK,SAAS,EAAE,IAAK,IAAI,EAAE;AAAA,IAC9D,OAAO;AAAA,MACL,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,WAAW,EAAE,aAAa,gBAAgB,IAAI,EAAE,IAAK;AAAA,IACvD;AAAA,GACD;AAAA;AAGL,eAAsB,qBAAqB,GAAgC;AAAA,EACzE,MAAM,UAAU,kBAAkB;AAAA,EAClC,MAAM,UAAU,MAAK,SAAS,cAAc;AAAA,EAC5C,MAAM,aAAiC,CAAC;AAAA,EAExC,IAAI,YAAW,OAAO,GAAG;AAAA,IACvB,MAAM,MAAM,MAAM,SAAS,SAAS,MAAM;AAAA,IAC1C,WAAW,KAAK,GAAG,iBAAiB,KAAK,OAAO,CAAC;AAAA,EACnD;AAAA,EAGA,MAAM,UAAU,WAAW,aAAa;AAAA,EACxC,IAAI,YAAW,OAAO,GAAG;AAAA,IACvB,MAAM,UAAU,MAAM,QAAQ,SAAS,EAAE,eAAe,KAAK,CAAC;AAAA,IAC9D,WAAW,SAAS,SAAS;AAAA,MAC3B,IAAI,CAAC,MAAM,YAAY,GAAG;AAAA,QACxB;AAAA,MACF;AAAA,MACA,MAAM,cAAc,MAAK,SAAS,MAAM,IAAI;AAAA,MAC5C,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,GAAG;AAAA,QACnD,WAAW,KAAK,EAAE,MAAM,aAAa,WAAW,MAAM,CAAC;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,WAAW,OAAO,CAAC,MAAM,YAAW,EAAE,IAAI,CAAC;AAAA,EAC5D,SAAS,KAAK,CAAC,GAAG,MAAM,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,SAAS,CAAC;AAAA,EACjE,OAAO;AAAA;AAGF,SAAS,uBAAuB,CACrC,YACA,SACoB;AAAA,EACpB,MAAM,WAAW,SAAS,KAAK;AAAA,EAC/B,IAAI,CAAC,UAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,MAAM,aAAa,SAAS,YAAY;AAAA,EACxC,MAAM,UAAU,WAAW,OAAO,CAAC,MAAM;AAAA,IACvC,MAAM,OAAO,EAAE,MAAM,YAAY,KAAK;AAAA,IACtC,MAAM,OAAO,EAAE,KAAK,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,KAAK;AAAA,IACvD,MAAM,OAAO,EAAE,KAAK,YAAY;AAAA,IAChC,OAAO,SAAS,cAAc,SAAS,cAAc,KAAK,SAAS,UAAU;AAAA,GAC9E;AAAA,EACD,OAAO;AAAA;AAGT,eAAsB,iBAAiB,CACrC,QAC6D;AAAA,EAC7D,MAAM,UAAU,MAAM,QAAQ,MAAK,OAAO,GAAG,sBAAsB,CAAC;AAAA,EACpE,MAAM,OAAO,OAAO,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,EACxC,MAAM,WAAW,MAAK,SAAS,IAAI;AAAA,EACnC,MAAM,SAAS,QAAQ,QAAQ;AAAA,EAG/B,WAAW,UAAU,CAAC,QAAQ,MAAM,GAAG;AAAA,IACrC,MAAM,UAAU,GAAG,SAAS;AAAA,IAC5B,IAAI,CAAC,YAAW,OAAO,GAAG;AAAA,MACxB;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,MAAM,SAAS,SAAS,GAAG,WAAW,QAAQ;AAAA,MAC9C,MAAM;AAAA,EACV;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA,SAAS,YAAY;AAAA,MACnB,IAAI;AAAA,QACF,MAAM,GAAG,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,QAClD,MAAM;AAAA;AAAA,EAEZ;AAAA;;;AC5NF;AAEO,SAAS,0BAA0B,CACxC,MACA,SACQ;AAAA,EACR,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAAA,IAC9B,OAAO;AAAA,EACT;AAAA,EAEA,QAAQ,UAAU,eAAe;AAAA,EAEjC,IAAI,aAAa,GAAG;AAAA,IAClB,MAAM,IAAI,WAAW,gCAAgC,YAAY;AAAA,EACnE;AAAA,EAEA,MAAM,OAAO,OAAO,KAAK,aAAa,MAAM;AAAA,EAC5C,MAAM,KAAK,OAAO,MAAM,IAAI,GAAG;AAAA,EAC/B,MAAM,MAAM,WAAW,UAAU,MAAM,YAAY,IAAI,MAAM;AAAA,EAE7D,MAAM,WAAW,iBAAiB,eAAe,KAAK,EAAE;AAAA,EACxD,SAAS,eAAe,IAAI;AAAA,EAC5B,MAAM,QAAQ,OAAO,OAAO,CAAC,SAAS,OAAO,IAAI,GAAG,SAAS,MAAM,CAAC,CAAC;AAAA,EACrE,MAAM,SAAS,OAAO,KAAK,OAAO;AAAA,EAClC,MAAM,MAAM,MAAM,QAAQ,MAAM;AAAA,EAChC,IAAI,QAAQ,IAAI;AAAA,IACd,OAAO,MAAM,SAAS,MAAM;AAAA,EAC9B;AAAA,EAEA,IAAI,MAAM;AAAA,EACV,OAAO,MAAM,MAAM,QAAQ;AAAA,IACzB,MAAM,IAAI,MAAM;AAAA,IAChB,IAAI,IAAI,MAAQ,IAAI,KAAM;AAAA,MACxB;AAAA,IACF;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAM,WAAW,MAAM,SAAS,KAAK,GAAG,EAAE,SAAS,MAAM;AAAA,EACzD,IAAI;AAAA,IACF,OAAO,mBAAmB,QAAQ;AAAA,IAClC,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;;;ACzCJ,SAAS,QAAQ,CAAC,OAAkD;AAAA,EACzE,OAAO,OAAO,UAAU,YAAY,UAAU;AAAA;AAGzC,SAAS,OAAO,CAAC,OAA2B;AAAA,EACjD,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;AAAA;AAGlC,SAAS,SAAS,CAAC,OAAoC;AAAA,EAC5D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;AAGtC,SAAS,SAAS,CAAC,OAAoC;AAAA,EAC5D,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;;;AHE7C,IAAM,YAAW,UAAS,MAAM;AAIhC,SAAS,SAAS,CAAC,QAAwB;AAAA,EACzC,OAAO,aAAa,aAAa,CAAC,MAAM,MAAM,GAAG;AAAA,IAC/C,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,EAClC,CAAC,EAAE,KAAK;AAAA;AAGV,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,WAAW,GAAW;AAAA,EAC7B,MAAM,WAAW,gBAAgB,IAC/B,CAAC,SAAS,iBAAiB,oEAC7B;AAAA,EACA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wDAK+C,SAAS,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASzE,SAAS,WAAW,CAAC,OAA2C;AAAA,EAC9D,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,QAAQ,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,EAC9D,MAAM,MAAM,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AAAA,EACxD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,WAAW,OAAO,GAAG;AAAA,IAChD,OAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,EAC3D,OAAO,EAAE,KAAK,MAAM,MAAM;AAAA;AAG5B,SAAS,wBAAwB,GAAyB;AAAA,EACxD,MAAM,WAAW,UAAU,YAAY,CAAC;AAAA,EACxC,IAAI,WAAoB,CAAC;AAAA,EACzB,IAAI;AAAA,IACF,WAAW,KAAK,MAAM,YAAY,IAAI;AAAA,IACtC,MAAM;AAAA,IACN,WAAW,CAAC;AAAA;AAAA,EAGd,MAAM,cAAc,SAAS,QAAQ,IAAI,WAAW,CAAC;AAAA,EACrD,OAAO,OAAO,OAAO,WAAW,EAC7B,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC,EACzB,OAAO,CAAC,MAA+B,MAAM,IAAI;AAAA;AAKtD,IAAM,mBAAmB,MACvB,SAAQ,GACR,WACA,uBACA,iBACA,iBACA,WACA,SACF;AAEA,SAAS,uBAAuB,GAAa;AAAA,EAC3C,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAM,YAAsB,CAAC;AAAA,EAC7B,WAAW,WAAW,UAAU;AAAA,IAC9B,IAAI;AAAA,MACF,MAAM,MAAM,aAAa,YAAY,CAAC,yBAAyB,MAAM,MAAM,OAAO,GAAG;AAAA,QACnF,UAAU;AAAA,QACV,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,MACpC,CAAC,EAAE,KAAK;AAAA,MACR,IAAI,KAAK;AAAA,QACP,UAAU,KAAK,GAAG;AAAA,MACpB;AAAA,MACA,MAAM;AAAA,EAGV;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,uBAAuB,GAAoB;AAAA,EACxD,IAAI,CAAC,YAAW,gBAAgB,GAAG;AAAA,IACjC,MAAM,IAAI,MAAM,+BAA+B,kBAAkB;AAAA,EACnE;AAAA,EAEA,MAAM,OAAQ,MAAM,oBAClB,kBACA,kJACF;AAAA,EAOA,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAAA,IAC9B,MAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAAA,EACA,MAAM,MAAM,KAAK;AAAA,EACjB,IAAI,IAAI,SAAS,IAAI,MAAM,WAAW,OAAO,GAAG;AAAA,IAC9C,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,YAAY,OAAO,KAAK,IAAI,mBAAmB,CAAC,CAAC;AAAA,EACvD,IAAI,UAAU,WAAW,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAAA,EAEA,MAAM,SAAS,UAAU,SAAS,GAAG,CAAC,EAAE,SAAS,MAAM;AAAA,EACvD,MAAM,OAAO,WAAW,SAAS,WAAW,QAAQ,UAAU,SAAS,CAAC,IAAI;AAAA,EAC5E,MAAM,YAAY,wBAAwB;AAAA,EAE1C,WAAW,YAAY,WAAW;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,YAAY,2BAA2B,MAAM,EAAE,UAAU,YAAY,KAAK,CAAC;AAAA,MACjF,MAAM,QAAQ,UAAU,MAAM,0BAA0B;AAAA,MACxD,IAAI,OAAO;AAAA,QACT,OAAO,MAAM;AAAA,MACf;AAAA,MACA,MAAM;AAAA,EAGV;AAAA,EAEA,MAAM,IAAI,MAAM,+CAA+C;AAAA;AAKjE,eAAsB,gBAAgB,GAAmC;AAAA,EACvE,IAAI,CAAC,WAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,IAAI;AAAA,IACF,MAAM,QAAQ,yBAAyB;AAAA,IACvC,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,WAAW,MAAM,wBAAwB;AAAA,IAC/C,IAAI,CAAC,YAAY,CAAC,SAAS,WAAW,OAAO,GAAG;AAAA,MAC9C,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,EAAE,UAAU,MAAM;AAAA,IACzB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;;;AItLX;AACA,qBAAS;AAST,IAAM,YAAW,UAAS,MAAM;AAEhC,SAAS,eAAe,CAAC,QAAwB;AAAA,EAE/C,OAAO,OAAO,QAAQ,MAAM,OAAO;AAAA;AAGrC,SAAS,UAAS,CAAC,QAAwB;AAAA,EACzC,OAAO,SAAS,iBAAiB,gBAAgB,MAAM,MAAM;AAAA,IAC3D,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,EAClC,CAAC,EAAE,KAAK;AAAA;AAGV,SAAS,YAAY,GAAW;AAAA,EAC9B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcT,IAAM,mBAAkB;AAAA,EAEtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,SAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU;AAAA;AAGhD,SAAS,YAAY,CAAC,OAA4C;AAAA,EAChE,IAAI,CAAC,UAAS,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,QAAQ,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,EAC9D,MAAM,MAAM,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AAAA,EACxD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,WAAW,OAAO,GAAG;AAAA,IAChD,OAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,EAC3D,OAAO,EAAE,KAAK,MAAM,MAAM;AAAA;AAG5B,SAAS,YAAW,GAAW;AAAA,EAC7B,MAAM,WAAW,iBAAgB,IAC/B,CAAC,SAAS,iBAAiB,oEAC7B;AAAA,EACA,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wDAK+C,SAAS,KAAK,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlE,SAAS,iBAAiB,GAA2B;AAAA,EAC1D,IAAI,CAAC,WAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,IAAI;AAAA,IACF,MAAM,SAAS,WAAU,aAAa,CAAC;AAAA,IACvC,IAAI,CAAC,UAAU,CAAC,OAAO,WAAW,OAAO,GAAG;AAAA,MAC1C,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,WAAW,WAAU,aAAY,CAAC;AAAA,IACxC,IAAI,WAAoB,CAAC;AAAA,IACzB,IAAI;AAAA,MACF,WAAW,KAAK,MAAM,YAAY,IAAI;AAAA,MACtC,MAAM;AAAA,MACN,WAAW,CAAC;AAAA;AAAA,IAGd,MAAM,cAAc,UAAS,QAAQ,IAAI,WAAW,CAAC;AAAA,IACrD,MAAM,QAA+B,OAAO,OAAO,WAAW,EAC3D,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC,EAC1B,OAAO,CAAC,MAAgC,MAAM,IAAI;AAAA,IAErD,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IACA,OAAO,EAAE,UAAU,QAAQ,MAAM;AAAA,IACjC,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;;;ACzGJ,SAAS,qBAAqB,CAAC,WAAqC;AAAA,EACzE,MAAM,WAAW,UAAU,MAAM,uDAAuD;AAAA,EACxF,IAAI,CAAC,UAAU;AAAA,IACb,MAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAAA,EACA,MAAM,gBAAgB,WAAW,SAAS;AAAA,EAE1C,MAAM,cAAc,UAAU,MAC5B,6HACF;AAAA,EACA,MAAM,eAAe,cACjB,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,KACxE;AAAA,EACJ,MAAM,YAAY,aAAa,MAAM,0BAA0B;AAAA,EAC/D,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AAAA,EACA,MAAM,cAAc,mBAAmB,UAAU,EAAG;AAAA,EAIpD,MAAM,gBAA0B;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAEA,IAAI,aAA4B;AAAA,EAChC,WAAW,MAAM,eAAe;AAAA,IAC9B,MAAM,IAAI,UAAU,MAAM,EAAE;AAAA,IAC5B,IAAI,IAAI,IAAI;AAAA,MACV,SAAS,SAAS;AAAA,MAClB,aAAa,SAAS;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA,EACA,IAAI,CAAC,YAAY;AAAA,IACf,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAAA,EAEA,OAAO,EAAE,eAAe,YAAY,YAAY;AAAA;;;AC7ClD,0BAAoB;AACpB,uBAAS,sDAAuC;AAChD,yBAAS;AACT,oBAAS,sBAAS,qBAAU;AAC5B,iBAAS;;;ACET,oBAAS,sBAAS;AAClB,iBAAS;AACT;AAGA,IAAM,gBAAgB,OAAO,KAAK,CAAC,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,GAAI,CAAC;AAGlF,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAG3B,IAAM,kBAAkB;AACxB,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AAUxB,SAAS,UAAU,CAAC,KAAa,QAAkC;AAAA,EACjE,IAAI,SAAS;AAAA,EACb,IAAI,QAAQ;AAAA,EACZ,IAAI,YAAY;AAAA,EAEhB,OAAO,SAAS,YAAY,IAAI,QAAQ;AAAA,IACtC,MAAM,OAAO,IAAI,SAAS;AAAA,IAC1B;AAAA,IACA,WAAW,OAAO,QAAS;AAAA,IAC3B,KAAK,OAAO,SAAU,GAAG;AAAA,MACvB,OAAO,CAAC,QAAQ,SAAS;AAAA,IAC3B;AAAA,IACA,SAAS;AAAA,IACT,IAAI,SAAS,IAAI;AAAA,MACf,MAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAAA,EACF;AAAA,EACA,MAAM,IAAI,MAAM,yCAAyC;AAAA;AAM3D,SAAS,YAAY,CAAC,KAAa,QAAkC;AAAA,EACnE,IAAI,SAAS;AAAA,EACb,IAAI,QAAQ;AAAA,EACZ,IAAI,YAAY;AAAA,EAEhB,OAAO,SAAS,YAAY,IAAI,UAAU,YAAY,IAAI;AAAA,IACxD,MAAM,OAAO,IAAI,SAAS;AAAA,IAC1B;AAAA,IACA,IAAI,QAAQ,IAAI;AAAA,MACd,WAAW,OAAO,QAAS;AAAA,IAC7B;AAAA,IACA,KAAK,OAAO,SAAU,GAAG;AAAA,MACvB,OAAO,CAAC,WAAW,GAAG,SAAS;AAAA,IACjC;AAAA,IACA,SAAS;AAAA,EACX;AAAA,EACA,MAAM,IAAI,MAAM,2CAA2C;AAAA;AAO7D,SAAS,2BAA2B,CAAC,YAA4B;AAAA,EAC/D,OAAO,UAAU,WAAW,YAAY,CAAC;AAAA,EACzC,OAAO;AAAA;AAMT,SAAS,gBAAgB,CACvB,KACA,QACqD;AAAA,EACrD,OAAO,aAAa,MAAM,aAAa,KAAK,MAAM;AAAA,EAClD,OAAO,WAAW,MAAM,aAAa,KAAK,SAAS,EAAE;AAAA,EACrD,OAAO,EAAE,QAAQ,aAAa,MAAM,WAAW,WAAW,KAAK,GAAG;AAAA;AAMpE,SAAS,eAAe,CAAC,WAAmB,iBAAiC;AAAA,EAC3E,IAAI,oBAAoB,kBAAkB;AAAA,IACxC,OAAO;AAAA,EACT;AAAA,EACA,IAAI,oBAAoB,oBAAoB;AAAA,IAC1C,MAAM,qBAAqB,4BAA4B,SAAS;AAAA,IAChE,MAAM,SAAS,iBAAiB,WAAW,kBAAkB;AAAA,IAC7D,OAAO,OAAO,KAAK,MAAM;AAAA,EAC3B;AAAA,EACA,MAAM,IAAI,MAAM,6BAA6B,iBAAiB;AAAA;AAOhE,SAAS,cAAc,CAAC,OAA+B;AAAA,EACrD,MAAM,UAA0B,CAAC;AAAA,EAEjC,IAAI,MAAM,SAAS,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,cAAc,MAAM,aAAa,MAAM,SAAS,CAAC;AAAA,EAEvD,MAAM,gBAAgB,MAAM,SAAS,IAAI,cAAc;AAAA,EAEvD,IAAI,gBAAgB,GAAG;AAAA,IACrB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAS;AAAA,EACb,IAAI,UAAU,OAAO,MAAM,CAAC;AAAA,EAE5B,OAAO,SAAS,eAAe;AAAA,IAC7B,IAAI;AAAA,MACF,OAAO,QAAQ,MAAM,WAAW,OAAO,MAAM;AAAA,MAC7C,UAAU;AAAA,MACV,OAAO,WAAW,MAAM,WAAW,OAAO,MAAM;AAAA,MAChD,UAAU;AAAA,MACV,OAAO,UAAU,MAAM,WAAW,OAAO,MAAM;AAAA,MAC/C,UAAU;AAAA,MAEV,IAAI,SAAS,YAAY,WAAW,eAAe;AAAA,QACjD;AAAA,MACF;AAAA,MAGA,MAAM,WAAW,MAAM,SAAS,QAAQ,SAAS,SAAS;AAAA,MAC1D,UAAU;AAAA,MAEV,MAAM,MAAM,OAAO,OAAO,CAAC,QAAQ,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAAA,MACjE,MAAM,QAAQ,MAAM,SAAS,QAAQ,SAAS,QAAQ;AAAA,MACtD,UAAU;AAAA,MAIV,QAAQ,KAAK,EAAE,KAAK,OAAO,KAAK,GAAG,GAAG,OAAO,OAAO,KAAK,KAAK,EAAE,CAAC;AAAA,MACjE,UAAU;AAAA,MACV,MAAM;AAAA,MACN;AAAA;AAAA,EAEJ;AAAA,EAEA,OAAO;AAAA;AAMT,eAAe,YAAY,CAAC,UAA2C;AAAA,EACrE,MAAM,UAA0B,CAAC;AAAA,EAEjC,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,MAAM,UAAS,QAAQ;AAAA,IAC9B,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAGT,IAAI,KAAK,SAAS,IAAI;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,SAAS,KAAK,SAAS,GAAG;AAAA,EAGhC,MAAM,QAAQ,OAAO,SAAS,IAAI,EAAE;AAAA,EACpC,IAAI,CAAC,MAAM,OAAO,aAAa,GAAG;AAAA,IAEhC,OAAO;AAAA,EACT;AAAA,EAEA,IAAI;AAAA,IAGF,QAAQ,WAAW,cAAc,iBAAiB,QAAQ,CAAC;AAAA,IAC3D,MAAM,cAAc,iBAAiB,QAAQ,SAAS;AAAA,IAGtD,MAAM,kBAAkB,YAAY;AAAA,IACpC,MAAM,gBAAgB,YAAY,SAAS,YAAY,OAAO;AAAA,IAE9D,IAAI,gBAAgB,KAAK,SAAS,IAAI;AAAA,MACpC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,gBAAgB,KAAK,SAAS,iBAAiB,aAAa;AAAA,IAClE,MAAM,uBAAuB,cAAc,GAAG,EAAE;AAAA,IAChD,MAAM,iBAAiB,cAAc,SAAS,GAAG,EAAE;AAAA,IACnD,MAAM,aAAa,gBAAgB,gBAAgB,oBAAoB;AAAA,IAGvE,MAAM,eAAe,eAAe,UAAU;AAAA,IAG9C,WAAW,cAAc,cAAc;AAAA,MACrC,IAAI;AAAA,QAEF,MAAM,cAAc,iBAAiB,WAAW,OAAO,CAAC;AAAA,QACxD,MAAM,aAAa,YAAY;AAAA,QAC/B,MAAM,WAAW,YAAY,SAAS,YAAY,OAAO;AAAA,QAEzD,IAAI,WAAW,KAAK,QAAQ;AAAA,UAC1B;AAAA,QACF;AAAA,QAEA,MAAM,WAAW,KAAK,SAAS,YAAY,QAAQ;AAAA,QACnD,MAAM,kBAAkB,SAAS,GAAG,EAAE;AAAA,QACtC,MAAM,YAAY,SAAS,SAAS,GAAG,EAAE;AAAA,QACzC,MAAM,QAAQ,gBAAgB,WAAW,eAAe;AAAA,QAExD,MAAM,eAAe,eAAe,KAAK;AAAA,QACzC,QAAQ,KAAK,GAAG,YAAY;AAAA,QAC5B,MAAM;AAAA,QAEN;AAAA;AAAA,IAEJ;AAAA,IACA,MAAM;AAAA,IAEN,OAAO;AAAA;AAAA,EAGT,OAAO;AAAA;AAOT,eAAe,YAAY,CAAC,UAA2C;AAAA,EACrE,MAAM,UAA0B,CAAC;AAAA,EAEjC,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,MAAM,UAAS,QAAQ;AAAA,IAC9B,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAGT,MAAM,aAAa;AAAA,EACnB,IAAI,SAAS;AAAA,EACb,IAAI,gBAA0B,CAAC;AAAA,EAE/B,OAAO,SAAS,KAAK,QAAQ;AAAA,IAE3B,MAAM,cAAc,SAAS;AAAA,IAC7B,MAAM,YAAY,aAAa;AAAA,IAG/B,IAAI,YAAY,GAAG;AAAA,MACjB,UAAU;AAAA,MACV;AAAA,IACF;AAAA,IAGA,IAAI,SAAS,IAAI,KAAK,QAAQ;AAAA,MAC5B;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,KAAK,aAAa,SAAS,CAAC;AAAA,IAC3C,MAAM,OAAO,KAAK,SAAS;AAAA,IAE3B,IAAI,WAAW,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ;AAAA,MACrD,UAAU;AAAA,MACV,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,KAAK,SAAS,SAAS,GAAG,SAAS,IAAI,MAAM;AAAA,IAChE,UAAU,IAAI;AAAA,IAEd,IAAI,SAAS,iBAAiB;AAAA,MAC5B,gBAAgB,CAAC;AAAA,MACjB,cAAc,YAAY,OAAO;AAAA,IACnC,EAAO,SAAI,SAAS,kBAAkB;AAAA,MACpC,gBAAgB,CAAC,UAAU;AAAA,IAC7B,EAAO,SAAI,SAAS,mBAAmB;AAAA,MACrC,IAAI,cAAc,SAAS,GAAG;AAAA,QAC5B,cAAc,KAAK,UAAU;AAAA,MAC/B;AAAA,IACF,EAAO,SAAI,SAAS,iBAAiB;AAAA,MACnC,IAAI,cAAc,SAAS,GAAG;AAAA,QAC5B,cAAc,KAAK,UAAU;AAAA,QAC7B,MAAM,aAAa,OAAO,OAAO,aAAa;AAAA,QAC9C,cAAc,YAAY,OAAO;AAAA,MACnC;AAAA,MACA,gBAAgB,CAAC;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAQT,SAAS,aAAa,CAAC,OAAe,SAA+B;AAAA,EACnE,IAAI,MAAM,SAAS,IAAI;AAAA,IACrB;AAAA,EACF;AAAA,EAGA,IAAI,SAAS;AAAA,EAEb,OAAO,SAAS,MAAM,QAAQ;AAAA,IAC5B,IAAI;AAAA,MACF,MAAM,aAAa,MAAM;AAAA,MACzB;AAAA,MAEA,IAAI,eAAe,GAAG;AAAA,QAEpB,OAAO,QAAQ,MAAM,WAAW,OAAO,MAAM;AAAA,QAC7C,UAAU;AAAA,QACV,MAAM,MAAM,MAAM,SAAS,QAAQ,SAAS,MAAM;AAAA,QAClD,UAAU;AAAA,QACV,OAAO,UAAU,MAAM,WAAW,OAAO,MAAM;AAAA,QAC/C,UAAU;AAAA,QACV,MAAM,QAAQ,MAAM,SAAS,QAAQ,SAAS,QAAQ;AAAA,QACtD,UAAU;AAAA,QAEV,QAAQ,KAAK,EAAE,KAAK,OAAO,KAAK,GAAG,GAAG,OAAO,OAAO,KAAK,KAAK,EAAE,CAAC;AAAA,MACnE,EAAO,SAAI,eAAe,GAAG;AAAA,QAE3B,OAAO,QAAQ,MAAM,WAAW,OAAO,MAAM;AAAA,QAC7C,UAAU,KAAK;AAAA,MACjB,EAAO;AAAA,QAEL;AAAA;AAAA,MAEF,MAAM;AAAA,MACN;AAAA;AAAA,EAEJ;AAAA;AAOF,eAAsB,mBAAmB,CAAC,KAAsC;AAAA,EAC9E,MAAM,UAA0B,CAAC;AAAA,EAEjC,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,QAAQ,MAAM,SAAQ,GAAG;AAAA,IACzB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAIT,MAAM,WAAW,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,EAC7E,WAAW,QAAQ,UAAU;AAAA,IAC3B,MAAM,cAAc,MAAM,aAAa,MAAK,KAAK,IAAI,CAAC;AAAA,IACtD,QAAQ,KAAK,GAAG,WAAW;AAAA,EAC7B;AAAA,EAGA,MAAM,WAAW,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC;AAAA,EACvD,WAAW,QAAQ,UAAU;AAAA,IAC3B,MAAM,cAAc,MAAM,aAAa,MAAK,KAAK,IAAI,CAAC;AAAA,IACtD,QAAQ,KAAK,GAAG,WAAW;AAAA,EAC7B;AAAA,EAEA,OAAO;AAAA;AAMT,eAAsB,kBAAkB,CAAC,KAAa,WAA4C;AAAA,EAChG,MAAM,aAAa,MAAM,oBAAoB,GAAG;AAAA,EAChD,OAAO,WAAW,OAAO,CAAC,UAAU,MAAM,IAAI,SAAS,SAAS,CAAC;AAAA;;;AC5YnE,uBAAS,6BAAY;AACrB,yBAAS;AACT,6BAAS;AACT,mBAAS;AACT,iBAAS;AAGT,IAAM,YAAW,QAAQ,aAAa;AACtC,IAAM,YAAW,QAAQ,aAAa;AAE/B,SAAS,wBAAuB,CAAC,QAA0B;AAAA,EAChE,IAAI,WAAU;AAAA,IAKZ,MAAM,kBAA2D;AAAA,MAC/D,EAAE,SAAS,sBAAsB,SAAS,YAAY;AAAA,MACtD,EAAE,SAAS,sBAAsB,SAAS,sBAAsB;AAAA,MAChE,EAAE,SAAS,qBAAqB;AAAA,MAChC,EAAE,SAAS,sBAAsB;AAAA,MACjC,EAAE,SAAS,wBAAwB;AAAA,IACrC;AAAA,IACA,MAAM,YAAsB,CAAC;AAAA,IAC7B,WAAW,KAAK,iBAAiB;AAAA,MAC/B,IAAI;AAAA,QACF,MAAM,OAAO,CAAC,MAAM,MAAM,EAAE,OAAO;AAAA,QACnC,IAAI,EAAE,SAAS;AAAA,UACb,KAAK,KAAK,MAAM,EAAE,OAAO;AAAA,QAC3B;AAAA,QACA,MAAM,MAAM,cAAa,YAAY,CAAC,yBAAyB,GAAG,IAAI,GAAG;AAAA,UACvE,UAAU;AAAA,UACV,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,QACpC,CAAC,EAAE,KAAK;AAAA,QACR,IAAI,KAAK;AAAA,UACP,UAAU,KAAK,GAAG;AAAA,QACpB;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,IACA,IAAI,UAAU,SAAS,GAAG;AAAA,MACxB,OAAO,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,IAAI,WAAU;AAAA,IACZ,MAAM,aAAyB;AAAA,MAC7B,CAAC,eAAe,iBAAiB;AAAA,MACjC,CAAC,eAAe,OAAO;AAAA,MACvB,CAAC,eAAe,OAAO;AAAA,MACvB,CAAC,WAAW,oBAAoB;AAAA,IAClC;AAAA,IACA,MAAM,YAAsB,CAAC;AAAA,IAC7B,WAAW,QAAQ,YAAY;AAAA,MAC7B,IAAI;AAAA,QACF,MAAM,MAAM,cAAa,eAAe,CAAC,UAAU,GAAG,IAAI,GAAG;AAAA,UAC3D,UAAU;AAAA,UACV,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,QACpC,CAAC,EAAE,KAAK;AAAA,QACR,IAAI,KAAK;AAAA,UACP,UAAU,KAAK,GAAG;AAAA,QACpB;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,IAGA,IAAI,WAAW,OAAO;AAAA,MACpB,UAAU,KAAK,EAAE;AAAA,IACnB;AAAA,IACA,UAAU,KAAK,SAAS;AAAA,IAExB,OAAO,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC;AAAA,EAC/B;AAAA,EAEA,MAAM,IAAI,MAAM,6DAA6D;AAAA;AAYxE,SAAS,oBAAoB,CAAC,WAAmB,cAA8B;AAAA,EAEpF,MAAM,iBAAiB,MAAK,cAAc,aAAa;AAAA,EACvD,IAAI,CAAC,YAAW,cAAc,GAAG;AAAA,IAC/B,MAAM,IAAI,MAAM,+BAA+B,gBAAgB;AAAA,EACjE;AAAA,EACA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,aAAa,KAAK,MAAM,cAAa,gBAAgB,MAAM,CAAC;AAAA,IAC5D,OAAO,OAAO;AAAA,IACd,MAAM,IAAI,MAAM,qCAAqC,kBAAkB,EAAE,OAAO,MAAM,CAAC;AAAA;AAAA,EAEzF,MAAM,UAAU,SAAS,UAAU,IAAI,WAAW,WAAW;AAAA,EAC7D,IAAI,CAAC,SAAS,OAAO,KAAK,OAAO,QAAQ,kBAAkB,UAAU;AAAA,IACnE,MAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAAA,EACA,MAAM,aAAa,OAAO,KAAK,QAAQ,eAAyB,QAAQ;AAAA,EAExE,MAAM,aAAa,WAAW,SAAS,CAAC;AAAA,EAGxC,MAAM,KAAK,WAAW;AAAA,EACtB,MAAM,aAAa,MAAK,QAAO,GAAG,cAAc,QAAQ;AAAA,EACxD,MAAM,aAAa,MAAK,QAAO,GAAG,cAAc,QAAQ;AAAA,EACxD,cAAc,YAAY,YAAY,EAAE,MAAM,IAAM,CAAC;AAAA,EACrD,IAAI;AAAA,IAEF,MAAM,eAAe,WAAW,WAAW,KAAK,IAAI;AAAA,IACpD,MAAM,eAAe,WAAW,WAAW,KAAK,IAAI;AAAA,IACpD,MAAM,QAAQ;AAAA,MACZ;AAAA,MACA,sCAAsC;AAAA,MACtC;AAAA,MACA,oCAAoC;AAAA,IACtC,EAAE,KAAK,IAAI;AAAA,IACX,cAAa,cAAc,CAAC,oBAAoB,UAAU,YAAY,KAAK,GAAG;AAAA,MAC5E,OAAO;AAAA,IACT,CAAC;AAAA,IACD,IAAI,CAAC,YAAW,UAAU,GAAG;AAAA,MAC3B,MAAM,IAAI,MAAM,4EAA4E;AAAA,IAC9F;AAAA,IACA,MAAM,SAAS,cAAa,UAAU;AAAA,IAGtC,MAAM,QAAQ,UAAU,SAAS,GAAG,EAAE;AAAA,IACtC,MAAM,oBAAoB,UAAU,SAAS,EAAE;AAAA,IAC/C,MAAM,MAAM,kBAAkB,SAAS,GAAG;AAAA,IAC1C,MAAM,aAAa,kBAAkB,SAAS,GAAG,GAAG;AAAA,IAEpD,MAAM,WAAW,kBAAiB,eAAe,QAAQ,KAAK;AAAA,IAC9D,SAAS,WAAW,GAAG;AAAA,IACvB,IAAI,YAAY,SAAS,OAAO,YAAY,WAAW,MAAM;AAAA,IAC7D,aAAa,SAAS,MAAM,MAAM;AAAA,IAElC,OAAO;AAAA,YACP;AAAA,IACA,IAAI;AAAA,MACF,WAAW,UAAU;AAAA,MACrB,MAAM;AAAA,IAGR,IAAI;AAAA,MACF,WAAW,UAAU;AAAA,MACrB,MAAM;AAAA;AAAA;;;AFnIZ,IAAM,YAAW,UAAS;AAC1B,IAAM,YAAW,cAAa;AAC9B,IAAM,YAAW,cAAa;AAC9B,IAAM,WAAW,cAAa;AAG9B,IAAM,6BAA6B,MAAK,SAAQ,GAAG,WAAW,uBAAuB,OAAO;AAE5F,IAAM,6BAA6B,MACjC,SAAQ,GACR,WACA,cACA,6BACA,QACA,WACA,uBACA,OACF;AAEA,IAAM,0BAA0B,MAAK,SAAQ,GAAG,WAAW,OAAO;AAElE,IAAM,kCAAkC,MACtC,SAAQ,GACR,QACA,OACA,mBACA,UACA,OACF;AAGA,IAAM,gCAAgC,MACpC,QAAQ,IAAI,WAAW,MAAK,SAAQ,GAAG,WAAW,SAAS,GAC3D,OACF;AAOA,SAAS,wBAAwB,GAAkB;AAAA,EACjD,MAAM,UAAU,MAAK,QAAQ,IAAI,gBAAgB,MAAK,SAAQ,GAAG,WAAW,OAAO,GAAG,UAAU;AAAA,EAChG,IAAI;AAAA,IACF,MAAM,UAAU,YAAY,OAAO;AAAA,IACnC,MAAM,WAAW,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,6BAA6B,CAAC;AAAA,IAChF,IAAI,UAAU;AAAA,MACZ,OAAO,MAAK,SAAS,UAAU,cAAc,WAAW,OAAO;AAAA,IACjE;AAAA,IACA,MAAM;AAAA,EAGR,OAAO;AAAA;AAGT,SAAS,gBAAgB,GAAiE;AAAA,EACxF,IAAI;AAAA,EACJ,IAAI,WAAU;AAAA,IACZ,aAAa,CAAC,4BAA4B,0BAA0B;AAAA,EACtE,EAAO,SAAI,WAAU;AAAA,IACnB,aAAa,CAAC,iCAAiC,uBAAuB;AAAA,EACxE,EAAO,SAAI,UAAU;AAAA,IACnB,aAAa,CAAC,6BAA6B;AAAA,IAC3C,MAAM,YAAY,yBAAyB;AAAA,IAC3C,IAAI,WAAW;AAAA,MACb,WAAW,KAAK,SAAS;AAAA,IAC3B;AAAA,EACF,EAAO;AAAA,IACL,aAAa,CAAC;AAAA;AAAA,EAGhB,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B,MAAM,IAAI,MAAM,gDAAgD,YAAW;AAAA,EAC7E;AAAA,EAEA,MAAM,UAAwE,CAAC;AAAA,EAC/E,WAAW,OAAO,YAAY;AAAA,IAC5B,MAAM,aAAa,MAAK,KAAK,iBAAiB,SAAS;AAAA,IACvD,IAAI,YAAW,UAAU,GAAG;AAAA,MAC1B,MAAM,sBAAsB,CAAC,MAAK,KAAK,WAAW,SAAS,GAAG,MAAK,KAAK,SAAS,CAAC;AAAA,MAClF,MAAM,YACJ,oBAAoB,KAAK,CAAC,cAAc,YAAW,SAAS,CAAC,KAAK,oBAAoB;AAAA,MACxF,QAAQ,KAAK,EAAE,YAAY,WAAW,SAAS,IAAI,CAAC;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,MAAM,IAAI,MACR;AAAA,MAA+C,WAAW,IAAI,CAAC,MAAM,MAAK,GAAG,iBAAiB,SAAS,CAAC,EAAE,KAAK;AAAA,KAAQ,GACzH;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,OAAoC;AAAA,EACzD,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,MAAM,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AAAA,EACxD,MAAM,QAAQ,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,EAC9D,IAAI,CAAC,OAAO,CAAC,OAAO;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAAA,EAC3D,OAAO,EAAE,KAAK,MAAM,MAAM;AAAA;AAG5B,eAAe,eAAe,CAAC,QAAiC;AAAA,EAC9D,MAAM,OAAO,MAAK,SAAQ,GAAG,WAAW,eAAe,SAAS,mBAAmB;AAAA,EACnF,MAAM,OAAO,MAAK,MAAM,GAAG,KAAK,IAAI,GAAG;AAAA,EACvC,MAAM,MAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AAAA,EACrC,IAAI,cAAc,CAAC;AAAA,EACnB,IAAI,WAAU;AAAA,IACZ,IAAI;AAAA,MACF,cAAa,MAAM,CAAC,OAAO,QAAQ,IAAI,GAAG;AAAA,QACxC,OAAO,CAAC,UAAU,UAAU,QAAQ;AAAA,MACtC,CAAC;AAAA,MACD,MAAM;AAAA,MACN,cAAc;AAAA;AAAA,EAElB;AAAA,EACA,IAAI,aAAa;AAAA,IACf,MAAM,GAAG,QAAQ,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,OAAO,MAAK,MAAM,MAAM,CAAC;AAAA,IAC/B,MAAM;AAAA,EAGR,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,KAAsB;AAAA,EAC9C,IAAI,CAAC,OAAO,IAAI,WAAW,GAAG;AAAA,IAC5B,MAAM,IAAI,MAAM,sBAAsB;AAAA,EACxC;AAAA,EAEA,OAAO,SAAS;AAAA,EAChB,MAAM,OAAO,UAAU,KAAQ,UAAU,KAAQ,UAAU,IAAO,IAAI,SAAS,CAAC,IAAI;AAAA,EAEpF,IAAI,WAAW;AAAA,EACf,WAAW,KAAK,MAAM;AAAA,IACpB,IAAI,MAAM,GAAG;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,WAAW,KAAK,SAAS,IAAK,CAAC,WAAW,MAAM,IAAe,CAAC,QAAQ,SAAS;AAAA,EAEnF,IAAI;AAAA,EACJ,WAAW,OAAO,WAAW;AAAA,IAC3B,IAAI;AAAA,MACF,MAAM,OAAO,KAAK,SAAS,GAAG;AAAA,MAC9B,IAAI;AAAA,QACF,OAAO,KAAK,MAAM,IAAI;AAAA,QACtB,OAAO,MAAM;AAAA,QACb,UAAU;AAAA;AAAA,MAGZ,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAAA,MAC9B,MAAM,MAAM,KAAK,YAAY,GAAG;AAAA,MAChC,IAAI,UAAU,MAAM,QAAQ,MAAM,MAAM,OAAO;AAAA,QAC7C,IAAI;AAAA,UACF,OAAO,KAAK,MAAM,KAAK,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,UAC5C,OAAO,MAAM;AAAA,UACb,UAAU;AAAA;AAAA,MAEd;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,UAAU;AAAA;AAAA,EAEd;AAAA,EAEA,MAAM,WAAW,IAAI,MAAM,2BAA2B;AAAA;AAGxD,eAAe,4BAA4B,CAAC,YAA4C;AAAA,EACtF,IAAI,CAAC,YAAW,UAAU,GAAG;AAAA,IAC3B,MAAM,IAAI,MAAM,4BAA4B,YAAY;AAAA,EAC1D;AAAA,EAEA,MAAM,OAAO,MAAM,gBAAgB,UAAU;AAAA,EAE7C,IAAI;AAAA,IAEF,MAAM,gBAAgB,OAAO,KAAK,gBAAgB;AAAA,IAClD,MAAM,gBAAgB,OAAO,KAAK,gBAAgB;AAAA,IAElD,MAAM,UAAU,MAAM,mBAAmB,MAAM,OAAO,KAAK,eAAe,CAAC;AAAA,IAE3E,IAAI,YAA2B;AAAA,IAC/B,IAAI,aAAa,CAAC;AAAA,IAClB,WAAW,SAAS,SAAS;AAAA,MAC3B,IAAI,MAAM,IAAI,SAAS,aAAa,KAAK,MAAM,IAAI,SAAS,aAAa,GAAG;AAAA,QAC1E,IAAI,MAAM,SAAS,MAAM,MAAM,SAAS,GAAG;AAAA,UACzC,IAAI,OAAO;AAAA,UACX,IAAI,MAAM,IAAI,UAAU,GAAG;AAAA,YACzB,OAAO,MAAM,IAAI,gBAAgB,MAAM,IAAI,SAAS,CAAC;AAAA,UACvD;AAAA,UACA,IAAI,CAAC,aAAa,QAAQ,YAAY;AAAA,YACpC,YAAY,MAAM;AAAA,YAClB,aAAa;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,WAAW;AAAA,MACd,MAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AAAA,IAEA,MAAM,MAAM,iBAAiB,SAAS;AAAA,IACtC,MAAM,aAAa,SAAS,GAAG,IAAI,IAAI,QAAQ;AAAA,IAC/C,MAAM,WAAW,SAAS,UAAU,IAAI,aAAa,CAAC;AAAA,IACtD,MAAM,QAAuB,OAAO,OAAO,QAAQ,EAChD,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,EAC3B,OAAO,CAAC,MAAwB,MAAM,IAAI,EAC1C,OAAO,CAAC,MAAM,EAAE,MAAM,WAAW,OAAO,CAAC;AAAA,IAE5C,IAAI,MAAM,WAAW,GAAG;AAAA,MACtB,MAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AAAA,IACA,OAAO;AAAA,YACP;AAAA,IACA,IAAI;AAAA,MACF,MAAM,IAAG,MAAM,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,MAC/C,MAAM;AAAA;AAAA;AAMZ,eAAe,gCAAgC,CAC7C,aACA,cACiB;AAAA,EACjB,IAAI,CAAC,YAAW,WAAW,GAAG;AAAA,IAC5B,MAAM,IAAI,MAAM,+BAA+B,aAAa;AAAA,EAC9D;AAAA,EAIA,IAAI,gBAAgB;AAAA,EACpB,IAAI,UAAU;AAAA,IACZ,MAAM,UAAU,MAAK,QAAO,GAAG,uBAAuB,KAAK,IAAI,GAAG;AAAA,IAClE,aAAa,aAAa,OAAO;AAAA,IACjC,gBAAgB;AAAA,EAClB;AAAA,EAEA,IAAI;AAAA,EAMJ,IAAI;AAAA,IACF,OAAQ,MAAM,oBACZ,eACA,kJACF;AAAA,YACA;AAAA,IACA,IAAI,YAAY,kBAAkB,aAAa;AAAA,MAC7C,IAAI;AAAA,QACF,YAAW,aAAa;AAAA,QACxB,MAAM;AAAA,IAGV;AAAA;AAAA,EAGF,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG;AAAA,IAC9B,MAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AAAA,EACA,MAAM,MAAM,KAAK;AAAA,EACjB,IAAI,IAAI,SAAS,IAAI,MAAM,WAAW,OAAO,GAAG;AAAA,IAC9C,OAAO,IAAI;AAAA,EACb;AAAA,EAEA,MAAM,YAAY,OAAO,KAAK,IAAI,mBAAmB,CAAC,CAAC;AAAA,EACvD,IAAI,UAAU,WAAW,GAAG;AAAA,IAC1B,MAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAAA,EAEA,MAAM,SAAS,UAAU,SAAS,GAAG,CAAC,EAAE,SAAS,MAAM;AAAA,EAGvD,IAAI,aAAa,WAAW,SAAS,WAAW,QAAQ;AAAA,IACtD,MAAM,YAAY,qBAAqB,WAAW,YAAY;AAAA,IAC9D,MAAM,QAAQ,UAAU,MAAM,0BAA0B;AAAA,IACxD,IAAI,OAAO;AAAA,MACT,IAAI;AAAA,QACF,OAAO,mBAAmB,MAAM,EAAG;AAAA,QACnC,MAAM;AAAA,QACN,OAAO,MAAM;AAAA;AAAA,IAEjB;AAAA,IACA,MAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AAAA,EAGA,MAAM,OAAO,WAAW,SAAS,WAAW,QAAQ,UAAU,SAAS,CAAC,IAAI;AAAA,EAC5E,MAAM,YAAY,yBAAwB,MAAM;AAAA,EAEhD,WAAW,YAAY,WAAW;AAAA,IAChC,IAAI;AAAA,MACF,MAAM,YAAY,2BAA2B,MAAM;AAAA,QACjD;AAAA,QACA,YAAY,YAAW,IAAI;AAAA,MAC7B,CAAC;AAAA,MACD,MAAM,QAAQ,UAAU,MAAM,0BAA0B;AAAA,MACxD,IAAI,OAAO;AAAA,QACT,OAAO,MAAM;AAAA,MACf;AAAA,MACA,MAAM;AAAA,EAGV;AAAA,EAEA,MAAM,IAAI,MAAM,mDAAmD;AAAA;AAGrE,eAAsB,uBAAuB,GAA8B;AAAA,EACzE,MAAM,WAAW,iBAAiB;AAAA,EAGlC,MAAM,SAAmB,CAAC;AAAA,EAC1B,aAAa,YAAY,WAAW,aAAa,UAAU;AAAA,IACzD,IAAI;AAAA,MACF,MAAM,QAAQ,MAAM,6BAA6B,UAAU;AAAA,MAC3D,MAAM,WAAW,MAAM,iCAAiC,WAAW,OAAO;AAAA,MAC1E,OAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,QAAQ,EAAE,cAAc,YAAY,cAAc,UAAU;AAAA,MAC9D;AAAA,MACA,OAAO,KAAc;AAAA,MACrB,OAAO,KAAK,GAAG,YAAY,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GAAG;AAAA;AAAA,EAEjF;AAAA,EAEA,MAAM,IAAI,MACR;AAAA,MAAuE,OAAO,KAAK;AAAA,KAAQ,GAC7F;AAAA;;;AG9WF,uBAAS;AACT,iBAAS;AAkBT,IAAM,kBAAkB;AAExB,SAAS,aAAa,CAAC,OAAwB;AAAA,EAC7C,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EACA,IAAI,iBAAiB,YAAY;AAAA,IAE/B,MAAM,MAAM,OAAO,KAAK,KAAK;AAAA,IAC7B,MAAM,UAAoB,CAAC;AAAA,IAC3B,QAAQ,KAAK,IAAI,SAAS,MAAM,CAAC;AAAA,IACjC,QAAQ,KAAK,IAAI,SAAS,SAAS,CAAC;AAAA,IACpC,OAAO,SAAS;AAAA,IAChB,IAAI,UAAU,KAAQ,UAAU,KAAQ,UAAU,GAAM;AAAA,MACtD,MAAM,SAAS,IAAI,SAAS,CAAC;AAAA,MAC7B,QAAQ,KAAK,OAAO,SAAS,MAAM,CAAC;AAAA,MACpC,QAAQ,KAAK,OAAO,SAAS,SAAS,CAAC;AAAA,IACzC;AAAA,IACA,OAAO,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;AAAA,EAC3D;AAAA,EACA,OAAO,OAAO,SAAS,EAAE;AAAA;AAG3B,SAAS,wBAAwB,CAAC,OAAgD;AAAA,EAChF,MAAM,MAAM,cAAc,KAAK;AAAA,EAC/B,IAAI,CAAC,KAAK;AAAA,IACR,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,CAAC,SAAiD;AAAA,IAClE,IAAI;AAAA,MACF,MAAM,SAAS,KAAK,MAAM,IAAI;AAAA,MAC9B,IAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AAAA,QACjD,OAAO;AAAA,MACT;AAAA,MACA,MAAM;AAAA,IACR,OAAO;AAAA;AAAA,EAGT,MAAM,SAAS,UAAU,GAAG;AAAA,EAC5B,IAAI,QAAQ;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,WAAW,IAAI,QAAQ,iBAAiB,EAAE;AAAA,EAChD,MAAM,iBAAiB,UAAU,QAAQ;AAAA,EACzC,IAAI,gBAAgB;AAAA,IAClB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAQ,IAAI,QAAQ,GAAG;AAAA,EAC7B,MAAM,MAAM,IAAI,YAAY,GAAG;AAAA,EAC/B,IAAI,UAAU,MAAM,QAAQ,MAAM,OAAO,OAAO;AAAA,IAC9C,OAAO;AAAA,EACT;AAAA,EACA,MAAM,SAAS,IAAI,MAAM,OAAO,MAAM,CAAC;AAAA,EACvC,MAAM,eAAe,UAAU,MAAM;AAAA,EACrC,IAAI,cAAc;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EACA,OAAO,UAAU,OAAO,QAAQ,iBAAiB,EAAE,CAAC;AAAA;AAGtD,SAAS,aAAa,CAAC,OAAoC;AAAA,EACzD,IAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,IAC/C,OAAO;AAAA,EACT;AAAA,EACA,MAAM,SAAS;AAAA,EACf,MAAM,MAAM,OAAO,OAAO,QAAQ,WAAW,OAAO,MAAM;AAAA,EAC1D,MAAM,QAAQ,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,EAChE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,WAAW,OAAO,GAAG;AAAA,IAChD,OAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,EAC7D,OAAO,EAAE,KAAK,MAAM,MAAM;AAAA;AAG5B,SAAS,uBAAuB,CAAC,KAA4B;AAAA,EAC3D,MAAM,QAAuB,CAAC;AAAA,EAC9B,MAAM,OAAO,IAAI;AAAA,EAGjB,MAAM,cACJ;AAAA,EACF,WAAW,SAAS,IAAI,SAAS,WAAW,GAAG;AAAA,IAC7C,SAAS,MAAM,KAAK,SAAS;AAAA,IAC7B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,MAAM,MAAM,GAAG,QAAQ;AAAA,IACvB,IAAI,KAAK,IAAI,GAAG,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,IACA,KAAK,IAAI,GAAG;AAAA,IACZ,MAAM,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAAA,EACjC;AAAA,EAEA,IAAI,MAAM,SAAS,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,MAAM,KAAK,IAAI,SAAS,0CAA0C,CAAC,EAAE,IAChF,CAAC,MAAM,EAAE,EACX;AAAA,EACA,MAAM,SAAS,MAAM,KAAK,IAAI,SAAS,yBAAyB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAG;AAAA,EACnF,MAAM,QAAQ,KAAK,IAAI,KAAK,QAAQ,OAAO,MAAM;AAAA,EACjD,SAAS,IAAI,EAAG,IAAI,OAAO,KAAK;AAAA,IAC9B,MAAM,MAAM,KAAK;AAAA,IACjB,MAAM,QAAQ,OAAO;AAAA,IACrB,IAAI,CAAC,OAAO,CAAC,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,IACA,MAAM,MAAM,GAAG,QAAQ;AAAA,IACvB,IAAI,KAAK,IAAI,GAAG,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,IACA,KAAK,IAAI,GAAG;AAAA,IACZ,MAAM,KAAK,EAAE,KAAK,MAAM,CAAC;AAAA,EAC3B;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,mBAAmB,CAAC,aAA+B;AAAA,EAC1D,MAAM,QAAQ,CAAC,MAAK,aAAa,WAAW,SAAS,CAAC;AAAA,EACtD,MAAM,aAAuB,CAAC;AAAA,EAC9B,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,CAAC,YAAW,IAAI,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,WAAW,KAAK,MAAK,MAAM,yBAAyB,IAAI,CAAC;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,uBAAuB,CACpC,aAC8D;AAAA,EAC9D,MAAM,SAAS,oBAAoB,WAAW;AAAA,EAC9C,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,SAAS,MAAK,OAAO,aAAa;AAAA,IACxC,IAAI,CAAC,YAAW,MAAM,GAAG;AAAA,MACvB;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,MAAM,kBAAkB,MAAM;AAAA,IAC7C,IAAI;AAAA,MACF,MAAM,OAAQ,MAAM,oBAClB,OAAO,UACP,iGACF;AAAA,MAEA,WAAW,OAAO,MAAM;AAAA,QACtB,MAAM,MAAM,yBAAyB,IAAI,KAAK;AAAA,QAC9C,MAAM,WACJ,OAAO,OAAO,IAAI,UAAU,YAAY,IAAI,UAAU,OAAO,IAAI,QAAQ,CAAC;AAAA,QAC5E,MAAM,cAAc,OAAO,OAAO,QAAQ,EACvC,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC,EAC3B,OAAO,CAAC,MAAwB,MAAM,IAAI;AAAA,QAC7C,IAAI,YAAY,SAAS,GAAG;AAAA,UAC1B,OAAO,EAAE,OAAO,aAAa,YAAY,OAAO;AAAA,QAClD;AAAA,QAEA,MAAM,WAAW,wBAAwB,cAAc,IAAI,KAAK,CAAC;AAAA,QACjE,IAAI,SAAS,SAAS,GAAG;AAAA,UACvB,OAAO,EAAE,OAAO,UAAU,YAAY,OAAO;AAAA,QAC/C;AAAA,MACF;AAAA,cACA;AAAA,MACA,MAAM,OAAO,QAAQ;AAAA;AAAA,EAEzB;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,yBAAyB,CACtC,aAC0D;AAAA,EAC1D,MAAM,SAAS,MAAK,aAAa,gBAAgB;AAAA,EACjD,IAAI,CAAC,YAAW,MAAM,GAAG;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,MAAM,kBAAkB,MAAM;AAAA,EAC7C,IAAI;AAAA,IACF,MAAM,OAAQ,MAAM,oBAClB,OAAO,UACP,sGACF;AAAA,IAEA,WAAW,OAAO,MAAM;AAAA,MACtB,IAAI,IAAI,OAAO,WAAW,OAAO,GAAG;AAAA,QAClC,OAAO,EAAE,UAAU,yBAAyB,IAAI,KAAK,GAAG,YAAY,OAAO;AAAA,MAC7E;AAAA,IACF;AAAA,YACA;AAAA,IACA,MAAM,OAAO,QAAQ;AAAA;AAAA,EAGvB,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAAC,QAAwB;AAAA,EACxD,IAAI,UAAU;AAAA,EAEd,SAAS,IAAI,EAAG,IAAI,GAAG,KAAK,GAAG;AAAA,IAC7B,IAAI;AAAA,MACF,MAAM,OAAO,mBAAmB,OAAO;AAAA,MACvC,IAAI,SAAS,SAAS;AAAA,QACpB;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV,MAAM;AAAA,MACN;AAAA;AAAA,EAEJ;AAAA,EACA,OAAO;AAAA;AAGT,eAAsB,kBAAkB,CAAC,OAEJ;AAAA,EAUnC,MAAM,gBAAgB,MAAM,sBAAsB;AAAA,EAClD,MAAM,aAAa,wBAAwB,eAAe,OAAO,OAAO;AAAA,EACxE,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B,OAAO;AAAA,EACT;AAAA,EAEA,WAAW,aAAa,YAAY;AAAA,IAClC,MAAM,cAAc,MAAM,wBAAwB,UAAU,IAAI;AAAA,IAChE,IAAI,CAAC,aAAa;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,eAAe,MAAM,0BAA0B,UAAU,IAAI;AAAA,IACnE,IAAI,CAAC,cAAc;AAAA,MACjB;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,UAAU,aAAa;AAAA,MACvB,OAAO,YAAY;AAAA,MACnB,QAAQ;AAAA,QACN,cAAc,UAAU;AAAA,QACxB,cAAc,aAAa;AAAA,QAC3B,mBAAmB,YAAY;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;;;ACrRT,oBAAS;AACT,iBAAS;AAEF,IAAM,kBAAkB,MAAK,SAAQ,GAAG,WAAW,aAAa;AAChE,IAAM,mBAAmB,MAAK,iBAAiB,kBAAkB;AACjE,IAAM,mBAAmB;;;ACLhC,kBAAS,oBAAO;AAChB,oBAAS;AAGT,eAAsB,YAAe,CAAC,MAAiC;AAAA,EACrE,IAAI;AAAA,IACF,MAAM,MAAM,MAAM,UAAS,MAAM,MAAM;AAAA,IACvC,OAAO,KAAK,MAAM,GAAG;AAAA,IACrB,OAAO,KAAc;AAAA,IACrB,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,UAAU;AAAA,MAC1C,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,eAAe,aAAa;AAAA,MAC9B,OAAO;AAAA,IACT;AAAA,IACA,MAAM;AAAA;AAAA;AAIV,eAAsB,aAAa,CAAC,MAAc,MAA8B;AAAA,EAC9E,MAAM,OAAM,SAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAC9C,MAAM,UAAU,MAAM,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,GAAO,EAAE,MAAM,IAAM,CAAC;AAAA;;;ACtB7E;AAEO,IAAM,sBAAsB,EAAE,MAAM;AAAA,EACzC,EAAE,OAAO;AAAA,IACP,WAAW,EAAE,QAAQ,UAAU;AAAA,IAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACzB,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,WAAW,EAAE,QAAQ,SAAS;AAAA,IAC9B,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC5B,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC/B,CAAC;AACH,CAAC;AAIM,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,eAAe,EAAE,OAAO,EAAE,IAAI;AAAA,EAC9B,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,MAAM;AACR,CAAC;AAIM,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,SAAS,EAAE,QAAQ,CAAC;AAAA,EACpB,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,uBAAuB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjD,YAAY,EAAE,MAAM,eAAe,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;;;AC/BD,qBAAS;AACT,yBAAS;AAET,IAAM,YAAW,UAAS,MAAM;AAEzB,SAAS,WAAW,CAAC,SAAiB,SAAgC;AAAA,EAC3E,IAAI,CAAC,WAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,IAAI;AAAA,IACF,MAAM,SAAS,cACb,YACA,CAAC,yBAAyB,MAAM,SAAS,MAAM,SAAS,IAAI,GAC5D,EAAE,UAAU,QAAQ,OAAO,CAAC,QAAQ,QAAQ,QAAQ,EAAE,CACxD;AAAA,IACA,OAAO,OAAO,KAAK,KAAK;AAAA,IACxB,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIJ,SAAS,WAAW,CAAC,OAAqE;AAAA,EAC/F,IAAI,CAAC,WAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EACA,QAAQ,SAAS,OAAO,YAAY;AAAA,EACpC,IAAI;AAAA,IACF,IAAI;AAAA,MACF,cAAa,YAAY,CAAC,2BAA2B,MAAM,SAAS,MAAM,OAAO,GAAG;AAAA,QAClF,OAAO,CAAC,QAAQ,QAAQ,QAAQ;AAAA,MAClC,CAAC;AAAA,MACD,MAAM;AAAA,IAGR,cAAa,YAAY,CAAC,wBAAwB,MAAM,SAAS,MAAM,SAAS,MAAM,KAAK,GAAG;AAAA,MAC5F,OAAO;AAAA,IACT,CAAC;AAAA,IACD,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;;;ACnCX,qBAAS;AAET,IAAM,uBAAuB;AAC7B,IAAM,YAAW,UAAS,MAAM;AAEhC,SAAS,qBAAqB,CAAC,cAA8B;AAAA,EAC3D,MAAM,IAAI,IAAI,IAAI,YAAY;AAAA,EAC9B,OAAO,GAAG,EAAE,aAAa,EAAE;AAAA;AAG7B,SAAS,mBAAmB,CAAC,OAAoC;AAAA,EAC/D,OAAO,CAAC,SAAS,UAAU;AAAA;AAG7B,eAAsB,eAAe,GAAyB;AAAA,EAC5D,MAAM,WAAW,MAAM,aAAsB,gBAAgB;AAAA,EAC7D,MAAM,SAAS,kBAAkB,UAAU,YAAY,EAAE,SAAS,GAAG,YAAY,CAAC,EAAE,CAAC;AAAA,EACrF,IAAI,CAAC,OAAO,SAAS;AAAA,IACnB,OAAO,EAAE,SAAS,GAAG,YAAY,CAAC,EAAE;AAAA,EACtC;AAAA,EAGA,MAAM,QAAQ,OAAO;AAAA,EACrB,MAAM,WAAW,MAAM,WAAW,IAAI,CAAC,MAAM;AAAA,IAC3C,IAAI,EAAE,KAAK,cAAc,WAAW;AAAA,MAClC,MAAM,UAAU,QAAQ,sBAAsB,EAAE,aAAa;AAAA,MAC7D,MAAM,OAAO,YAAY,SAAS,gBAAgB;AAAA,MAClD,MAAM,OAAO,YAAY,QAAQ,gBAAgB;AAAA,MACjD,OAAO;AAAA,WACF;AAAA,QACH,MAAM;AAAA,UACJ,WAAW;AAAA,UACX,YAAY,QAAQ,EAAE,KAAK;AAAA,UAC3B,aAAa,QAAQ,EAAE,KAAK;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI,EAAE,KAAK,cAAc,YAAY;AAAA,MACnC,MAAM,UAAU,SAAS,sBAAsB,EAAE,aAAa;AAAA,MAC9D,MAAM,QAAQ,YAAY,SAAS,gBAAgB;AAAA,MACnD,OAAO;AAAA,WACF;AAAA,QACH,MAAM;AAAA,UACJ,WAAW;AAAA,UACX,OAAO,SAAS,EAAE,KAAK;AAAA,QACzB;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA,GACR;AAAA,EAED,OAAO,KAAK,OAAO,YAAY,SAAS;AAAA;AAG1C,eAAsB,eAAe,CAAC,aAAyC;AAAA,EAC7E,MAAM,UAAuB;AAAA,OACxB;AAAA,IACH,YAAY,IAAI,KAAK,EAAE,YAAY;AAAA,IACnC,YAAY,YAAY,WAAW,IAAI,CAAC,OAAO;AAAA,SAC1C;AAAA,MACH,eAAe,sBAAsB,EAAE,aAAa;AAAA,IACtD,EAAE;AAAA,EACJ;AAAA,EAIA,MAAM,cAA2B,gBAAgB,OAAO;AAAA,EAExD,IAAI,WAAU;AAAA,IAEZ,MAAM,eAAe,QAAQ,WAAW,KAAK,CAAC,MAAM,EAAE,KAAK,cAAc,SAAS;AAAA,IAClF,IAAI,aAAa;AAAA,IACjB,IACE,cAAc,KAAK,cAAc,aACjC,CAAC,oBAAoB,aAAa,KAAK,WAAW,GAClD;AAAA,MACA,MAAM,WAAW,YAAY,QAAQ,gBAAgB;AAAA,MACrD,aACE,aAAa,aAAa,KAAK,eAC/B,YAAY;AAAA,QACV,SAAS;AAAA,QACT,OAAO,aAAa,KAAK;AAAA,QACzB,SAAS;AAAA,MACX,CAAC;AAAA,IACL;AAAA,IAEA,WAAW,KAAK,YAAY,YAAY;AAAA,MACtC,IAAI,EAAE,KAAK,cAAc,WAAW;AAAA,QAClC,MAAM,UAAU,QAAQ,sBAAsB,EAAE,aAAa;AAAA,QAC7D,MAAM,cACJ,oBAAoB,EAAE,KAAK,UAAU,KACrC,YAAY,SAAS,gBAAgB,MAAM,EAAE,KAAK,cAClD,YAAY,EAAE,SAAS,OAAO,EAAE,KAAK,YAAY,SAAS,iBAAiB,CAAC;AAAA,QAE9E,IAAI,aAAa;AAAA,UACf,EAAE,KAAK,aAAa;AAAA,QACtB;AAAA,QACA,IAAI,YAAY;AAAA,UACd,EAAE,KAAK,cAAc;AAAA,QACvB;AAAA,MACF;AAAA,MAEA,IAAI,EAAE,KAAK,cAAc,YAAY;AAAA,QACnC,MAAM,UAAU,SAAS,sBAAsB,EAAE,aAAa;AAAA,QAC9D,MAAM,cACJ,oBAAoB,EAAE,KAAK,KAAK,KAChC,YAAY,SAAS,gBAAgB,MAAM,EAAE,KAAK,SAClD,YAAY,EAAE,SAAS,OAAO,EAAE,KAAK,OAAO,SAAS,iBAAiB,CAAC;AAAA,QACzE,IAAI,aAAa;AAAA,UACf,EAAE,KAAK,QAAQ;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,kBAAkB,WAAW;AAAA;AAGnD,eAAsB,eAAe,CAAC,WAA0C;AAAA,EAC9E,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EACpC,MAAM,gBAAgB,sBAAsB,UAAU,aAAa;AAAA,EACnE,MAAM,OAAkB,KAAK,WAAW,eAAe,cAAc;AAAA,EAErE,MAAM,MAAM,MAAM,WAAW,UAC3B,CAAC,MAAM,sBAAsB,EAAE,aAAa,MAAM,aACpD;AAAA,EACA,IAAI,QAAQ,IAAI;AAAA,IACd,MAAM,WAAW,KAAK,IAAI;AAAA,EAC5B,EAAO;AAAA,IACL,MAAM,WAAW,OAAO;AAAA,SACnB,MAAM,WAAW;AAAA,SACjB;AAAA,MACH,MAAM,KAAK;AAAA,IACb;AAAA;AAAA,EAGF,IAAI,CAAC,MAAM,uBAAuB;AAAA,IAChC,MAAM,wBAAwB;AAAA,EAChC;AAAA,EACA,MAAM,gBAAgB,KAAK;AAAA,EAC3B,OAAO;AAAA;AAGT,eAAsB,gBAAgB,CAAC,YAAwC;AAAA,EAC7E,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EAEpC,WAAW,aAAa,YAAY;AAAA,IAClC,MAAM,gBAAgB,sBAAsB,UAAU,aAAa;AAAA,IACnE,MAAM,OAAkB,KAAK,WAAW,eAAe,cAAc;AAAA,IAErE,MAAM,MAAM,MAAM,WAAW,UAC3B,CAAC,MAAM,sBAAsB,EAAE,aAAa,MAAM,aACpD;AAAA,IACA,IAAI,QAAQ,IAAI;AAAA,MACd,MAAM,WAAW,KAAK,IAAI;AAAA,IAC5B,EAAO;AAAA,MACL,MAAM,WAAW,OAAO;AAAA,WACnB,MAAM,WAAW;AAAA,WACjB;AAAA,QACH,MAAM,KAAK;AAAA,MACb;AAAA;AAAA,IAGF,IAAI,CAAC,MAAM,uBAAuB;AAAA,MAChC,MAAM,wBAAwB;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,KAAK;AAAA;AAG7B,eAAsB,mBAAmB,CAAC,cAAqC;AAAA,EAC7E,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EACpC,MAAM,wBAAwB,sBAAsB,YAAY;AAAA,EAChE,MAAM,gBAAgB,KAAK;AAAA;AAG7B,eAAsB,eAAe,CAAC,cAAqC;AAAA,EACzE,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EACpC,MAAM,aAAa,sBAAsB,YAAY;AAAA,EACrD,MAAM,aAAa,MAAM,WAAW,OAClC,CAAC,MAAM,sBAAsB,EAAE,aAAa,MAAM,UACpD;AAAA,EACA,IAAI,MAAM,0BAA0B,YAAY;AAAA,IAC9C,MAAM,wBAAwB,MAAM,WAAW,IAAI;AAAA,EACrD;AAAA,EACA,MAAM,gBAAgB,KAAK;AAAA;AAG7B,eAAsB,sBAAsB,CAAC,cAAiD;AAAA,EAC5F,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EACpC,MAAM,aAAa,sBAAsB,YAAY;AAAA,EACrD,OACE,MAAM,WAAW,KAAK,CAAC,MAAM,sBAAsB,EAAE,aAAa,MAAM,UAAU,KAAK;AAAA;AAI3F,eAAsB,uBAAuB,GAA8B;AAAA,EACzE,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EACpC,IAAI,MAAM,uBAAuB;AAAA,IAC/B,MAAM,YAAY,MAAM,WAAW,KAAK,CAAC,MAAM,EAAE,kBAAkB,MAAM,qBAAqB;AAAA,IAC9F,IAAI,WAAW;AAAA,MACb,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,OAAO,MAAM,WAAW,MAAM;AAAA;;;ACjNhC,IAAM,6BAA6B;AAO5B,SAAS,WAAW,CAAC,OAAwB;AAAA,EAClD,OAAO,sBAAsB,KAAK,KAAK;AAAA;AAGlC,SAAS,QAAQ,CAAC,OAAwB;AAAA,EAC/C,OAAO,kBAAkB,KAAK,KAAK;AAAA;AAOrC,eAAsB,aAAa,CAAC,QAAwB,QAAiC;AAAA,EAC3F,MAAM,OAAO,MAAM,OAAO,IAAI,sBAAsB,EAAE,OAAO,OAAO,CAAC;AAAA,EACrE,MAAM,UAAU,SAAS,IAAI,IAAI,KAAK,UAAU;AAAA,EAChD,MAAM,YAAY,SAAS,OAAO,IAAI,UAAU,QAAQ,EAAE,IAAI;AAAA,EAC9D,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,IAAI,MAAM,uCAAuC,QAAQ;AAAA,EACjE;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,qBAAqB,CAAC,OAGpC;AAAA,EACA,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,IAC3B,OAAO,EAAE,MAAM,QAAQ,OAAO,QAAQ,MAAM,CAAC,EAAE;AAAA,EACjD;AAAA,EACA,IAAI,YAAY,OAAO,GAAG;AAAA,IACxB,OAAO,EAAE,MAAM,MAAM,OAAO,QAAQ;AAAA,EACtC;AAAA,EACA,OAAO,EAAE,MAAM,QAAQ,OAAO,QAAQ;AAAA;AAGxC,eAAsB,gBAAgB,CAAC,QAAwB,OAAgC;AAAA,EAC7F,MAAM,aAAa,sBAAsB,KAAK;AAAA,EAC9C,IAAI,WAAW,SAAS,MAAM;AAAA,IAC5B,OAAO,WAAW;AAAA,EACpB;AAAA,EAEA,MAAM,OAAO,WAAW;AAAA,EACxB,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AAAA,EAMA,IAAI;AAAA,IACF,MAAM,aAAa,MAAM,OAAO,IAAI,mBAAmB;AAAA,MACrD,OAAO,OAAO;AAAA,MACd,OAAO;AAAA,MACP,MAAM;AAAA,MACN,UAAU;AAAA,IACZ,CAAC;AAAA,IACD,MAAM,WAAW,SAAS,UAAU,IAAI,WAAW,WAAW;AAAA,IAC9D,MAAM,UAAU,SAAS,QAAQ,IAAI,QAAQ,SAAS,OAAO,EAAE,OAAO,QAAQ,IAAI,CAAC;AAAA,IACnF,IAAI,QAAQ,SAAS,GAAG;AAAA,MACtB,MAAM,UAAU,SAAS,QAAQ,GAAI,OAAO,IAAI,QAAQ,GAAI,UAAU;AAAA,MACtE,MAAM,YAAY,UAAU,UAAU,QAAQ,EAAE,IAAI;AAAA,MACpD,IAAI,WAAW;AAAA,QACb,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EAKR,IAAI;AAAA,EACJ,UAAS;AAAA,IACP,MAAM,OAAO,MAAM,OAAO,IAAI,sBAAsB;AAAA,MAClD,kBAAkB;AAAA,MAClB,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,IACD,MAAM,QAAQ,QAAQ,KAAK,QAAQ,EAAE,OAAO,QAAQ;AAAA,IACpD,WAAW,KAAK,OAAO;AAAA,MACrB,IAAI,UAAU,EAAE,IAAI,MAAM,QAAQ,UAAU,EAAE,EAAE,GAAG;AAAA,QACjD,OAAO,UAAU,EAAE,EAAE;AAAA,MACvB;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,SAAS,KAAK,iBAAiB,IAAI,KAAK,oBAAoB;AAAA,IACzE,MAAM,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI;AAAA,IAClD,IAAI,CAAC,MAAM;AAAA,MACT;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX;AAAA,EAEA,MAAM,IAAI,MAAM,oCAAoC,MAAM;AAAA;AAQ5D,eAAsB,kBAAkB,CACtC,QACA,WACiB;AAAA,EACjB,IAAI;AAAA,IACF,MAAM,OAAO,MAAM,OAAO,IAAI,sBAAsB,EAAE,SAAS,UAAU,CAAC;AAAA,IAC1E,MAAM,UAAU,SAAS,IAAI,IAAI,KAAK,UAAU;AAAA,IAChD,IAAI,CAAC,SAAS,OAAO,GAAG;AAAA,MACtB,OAAO;AAAA,IACT;AAAA,IAGA,IAAI,QAAQ,OAAO;AAAA,MACjB,MAAM,SAAS,UAAU,QAAQ,IAAI;AAAA,MACrC,IAAI,QAAQ;AAAA,QACV,IAAI;AAAA,UACF,MAAM,WAAW,MAAM,OAAO,IAAI,cAAc,EAAE,MAAM,OAAO,CAAC;AAAA,UAChE,MAAM,OAAO,SAAS,QAAQ,IAAI,SAAS,OAAO;AAAA,UAClD,MAAM,UAAU,SAAS,IAAI,IAAI,KAAK,UAAU;AAAA,UAChD,IAAI,SAAS,OAAO,GAAG;AAAA,YACrB,OAAO,UAAU,QAAQ,YAAY,KAAK,UAAU,QAAQ,SAAS,KAAK;AAAA,UAC5E;AAAA,UACA,MAAM;AAAA,MAGV;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,UAAU,QAAQ,IAAI,KAAK;AAAA,IAClC,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAWX,eAAsB,qBAAqB,CACzC,QACA,SAC4B;AAAA,EAC5B,MAAM,OAAO,MAAM,OAAO,IAAI,uBAAuB;AAAA,IACnD,MAAM,SAAS;AAAA,IACf,OAAO,4BAA4B,SAAS,KAAK;AAAA,IACjD,QAAQ,SAAS;AAAA,IACjB,OAAO,SAAS,SAAS;AAAA,IACzB,kBAAkB,SAAS,mBAAmB;AAAA,EAChD,CAAC;AAAA,EACD,OAAO,2BAA2B,IAAI;AAAA;AAGxC,eAAsB,oBAAoB,CACxC,QACA,SAC4B;AAAA,EAC5B,MAAM,OAAO,MAAM,OAAO,IAAI,sBAAsB;AAAA,IAClD,OAAO,4BAA4B,SAAS,KAAK;AAAA,IACjD,QAAQ,SAAS;AAAA,IACjB,OAAO,SAAS,SAAS;AAAA,IACzB,kBAAkB,SAAS,mBAAmB;AAAA,EAChD,CAAC;AAAA,EACD,OAAO,2BAA2B,IAAI;AAAA;AAGjC,SAAS,0BAA0B,CAAC,MAAkD;AAAA,EAC3F,MAAM,WAAW,QAAQ,KAAK,QAAQ,EAAE,OAAO,QAAQ;AAAA,EACvD,MAAM,OAAO,SAAS,KAAK,iBAAiB,IAAI,KAAK,oBAAoB;AAAA,EACzE,MAAM,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI;AAAA,EAClD,OAAO,EAAE,UAAU,aAAa,KAAK;AAAA;AAGvC,SAAS,2BAA2B,CAAC,OAAmC;AAAA,EACtE,OAAO,KAAK,IAAI,KAAK,IAAI,SAAS,KAAK,CAAC,GAAG,IAAI;AAAA;AAGjD,eAAsB,gBAAgB,CACpC,QACA,SACe;AAAA,EACf,QAAQ,WAAW,OAAO;AAAA,EAC1B,MAAM,OAAO,IAAI,sBAAsB,EAAE,SAAS,WAAW,GAAG,CAAC;AAAA;;;AC/LnE,SAAS,YAAY,CAAC,GAAmB;AAAA,EACvC,MAAM,MAAM,IAAI,IAAI,CAAC;AAAA,EACrB,OAAO,GAAG,IAAI,aAAa,IAAI;AAAA;AAGjC,SAAS,6BAA6B,CAAC,WAAgC;AAAA,EACrE,IAAI,OAAO;AAAA,EACX,IAAI;AAAA,IACF,OAAO,IAAI,IAAI,UAAU,aAAa,EAAE,KAAK,YAAY;AAAA,IACzD,MAAM;AAAA,IACN,OAAO;AAAA;AAAA,EAET,MAAM,yBAAyB,KAAK,QAAQ,kBAAkB,EAAE;AAAA,EAChE,OAAO;AAAA,IACL,UAAU,cAAc,YAAY;AAAA,IACpC;AAAA,IACA;AAAA,IACA,UAAU,gBAAgB,YAAY,KAAK;AAAA,IAC3C,UAAU,aAAa,YAAY,KAAK;AAAA,EAC1C,EAAE,OAAO,OAAO;AAAA;AAGX,SAAS,wBAAwB,CACtC,YACA,UACyB;AAAA,EACzB,MAAM,MAAM,SAAS,KAAK;AAAA,EAC1B,IAAI,CAAC,KAAK;AAAA,IACR,OAAO,EAAE,OAAO,MAAM,WAAW,CAAC,EAAE;AAAA,EACtC;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,aAAa,aAAa,GAAG,EAAE,YAAY;AAAA,IACjD,MAAM,QAAQ,WAAW,KAAK,CAAC,MAAM,EAAE,cAAc,YAAY,MAAM,UAAU;AAAA,IACjF,IAAI,OAAO;AAAA,MACT,OAAO,EAAE,OAAO,OAAO,WAAW,CAAC,EAAE;AAAA,IACvC;AAAA,IACA,MAAM;AAAA,EAIR,MAAM,SAAS,IAAI,YAAY;AAAA,EAC/B,MAAM,UAAU,WAAW,OAAO,CAAC,cACjC,8BAA8B,SAAS,EAAE,KAAK,CAAC,cAAc,UAAU,SAAS,MAAM,CAAC,CACzF;AAAA,EACA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,OAAO,EAAE,OAAO,QAAQ,IAAK,WAAW,CAAC,EAAE;AAAA,EAC7C;AAAA,EACA,IAAI,QAAQ,SAAS,GAAG;AAAA,IACtB,OAAO,EAAE,OAAO,MAAM,WAAW,QAAQ;AAAA,EAC3C;AAAA,EACA,OAAO,EAAE,OAAO,MAAM,WAAW,CAAC,EAAE;AAAA;;;AC1DtC;AAOO,MAAM,eAAe;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EAER,WAAW,CAAC,MAAiB,SAAqC;AAAA,IAChE,KAAK,OAAO;AAAA,IACZ,KAAK,eAAe,SAAS;AAAA,IAC7B,IAAI,KAAK,cAAc,YAAY;AAAA,MACjC,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK;AAAA,IACrC;AAAA;AAAA,OAGI,IAAG,CACP,QACA,SAAkC,CAAC,GACD;AAAA,IAClC,IAAI,KAAK,KAAK,cAAc,YAAY;AAAA,MACtC,IAAI,CAAC,KAAK,KAAK;AAAA,QACb,MAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AAAA,MACA,OAAQ,MAAM,KAAK,IAAI,QAAQ,QAAQ,MAAM;AAAA,IAC/C;AAAA,IAEA,IAAI,CAAC,KAAK,cAAc;AAAA,MACtB,MAAM,IAAI,MACR,2HACF;AAAA,IACF;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB,IAAI,KAAK,cAAc,WAAW;AAAA,MAChC,MAAM,IAAI,MAAM,mCAAmC;AAAA,IACrD;AAAA,IACA,OAAO,KAAK,WAAW;AAAA,MACrB,cAAc,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA;AAAA,OAGW,WAAU,CAAC,OAMY;AAAA,IACnC,MAAM,UAAU,MAAM,WAAW;AAAA,IACjC,MAAM,MAAM,GAAG,MAAM,aAAa,QAAQ,OAAO,EAAE,SAAS,MAAM;AAAA,IAClE,MAAM,iBAAiB,OAAO,QAAQ,MAAM,MAAM,EAC/C,OAAO,IAAI,OAAO,MAAM,SAAS,EACjC,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,OAAO,MAAM,WAAW,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;AAAA,IAC7E,MAAM,WAAW,IAAI,gBAAgB;AAAA,MACnC,OAAO,MAAM,KAAK;AAAA,SACf,OAAO,YAAY,cAAc;AAAA,IACtC,CAAC;AAAA,IACD,MAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,QAAQ,KAAK,mBAAmB,MAAM,KAAK,WAAW;AAAA,QACtD,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,cAAc,aAAa;AAAA,MAC7B;AAAA,MACA,MAAM;AAAA,IACR,CAAC;AAAA,IAED,IAAI,SAAS,WAAW,OAAO,UAAU,GAAG;AAAA,MAC1C,MAAM,aAAa,OAAO,SAAS,QAAQ,IAAI,aAAa,KAAK,GAAG;AAAA,MACpE,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,YAAY,CAAC,IAAI,MAAM,KAAK;AAAA,MAC9D,MAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC;AAAA,MAC/C,OAAO,KAAK,WAAW;AAAA,WAClB;AAAA,QACH,SAAS,UAAU;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,OAAgB,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,IAC5D,IAAI,CAAC,SAAS,IAAI;AAAA,MAChB,MAAM,IAAI,MAAM,cAAc,SAAS,kBAAkB,MAAM,QAAQ;AAAA,IACzE;AAAA,IACA,IAAI,CAAC,UAAS,IAAI,KAAK,KAAK,OAAO,MAAM;AAAA,MACvC,MAAM,QAAQ,UAAS,IAAI,KAAK,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;AAAA,MAC9E,MAAM,IAAI,MAAM,SAAS,2BAA2B,MAAM,QAAQ;AAAA,IACpE;AAAA,IACA,OAAO;AAAA;AAEX;AAEA,SAAS,SAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU;AAAA;;;ACpFzC,SAAS,aAAY,CAAC,GAAmB;AAAA,EAC9C,MAAM,MAAM,IAAI,IAAI,CAAC;AAAA,EACrB,OAAO,GAAG,IAAI,aAAa,IAAI;AAAA;AAGjC,SAAS,eAAe,CAAC,GAA+B;AAAA,EACtD,IAAI;AAAA,IACF,OAAO,cAAa,CAAC;AAAA,IACrB,MAAM;AAAA,IACN;AAAA;AAAA;AAIJ,SAAS,eAAe,GAAqB;AAAA,EAC3C,MAAM,QAAQ,QAAQ,IAAI,aAAa,KAAK;AAAA,EAC5C,IAAI,CAAC,OAAO;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,IAAI,MAAM,WAAW,OAAO,GAAG;AAAA,IAC7B,MAAM,UAAU,QAAQ,IAAI,kBAAkB,QAAQ,IAAI,gBAAgB,IAAI,KAAK;AAAA,IACnF,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,4DAA4D;AAAA,IAC9E;AAAA,IACA,OAAO,EAAE,WAAW,WAAW,YAAY,OAAO,aAAa,OAAO;AAAA,EACxE;AAAA,EACA,OAAO,EAAE,WAAW,YAAY,MAAM;AAAA;AAGxC,eAAsB,qBAAqB,CAAC,cAIzC;AAAA,EACD,MAAM,WAAW,cAAc,KAAK,KAAK;AAAA,EACzC,MAAM,wBAAwB,WAAW,gBAAgB,QAAQ,IAAI;AAAA,EACrE,MAAM,mBAAmB,QAAQ,QAAQ;AAAA,EACzC,IAAI,uBAAuB;AAAA,EAC3B,IAAI,UAAU;AAAA,IACZ,MAAM,QAAQ,MAAM,gBAAgB;AAAA,IACpC,MAAM,WAAW,yBAAyB,MAAM,YAAY,QAAQ;AAAA,IACpE,IAAI,SAAS,UAAU,SAAS,GAAG;AAAA,MACjC,MAAM,UAAU,SAAS,UAAU,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,IAAI;AAAA,MACxE,MAAM,IAAI,MACR,uBAAuB,oCAAoC,+DAC7D;AAAA,IACF;AAAA,IACA,IAAI,SAAS,OAAO;AAAA,MAClB,uBAAuB,SAAS,MAAM;AAAA,IACxC,EAAO,SAAI,CAAC,uBAAuB;AAAA,MACjC,uBAAuB;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,gBAAgB;AAAA,EAC5B,IAAI,KAAK;AAAA,IACP,MAAM,kBAAkB,QAAQ,IAAI,qBAAqB,KAAK;AAAA,IAC9D,MAAM,gBAAgB,wBAAwB;AAAA,IAC9C,OAAO;AAAA,MACL,QAAQ,IAAI,eAAe,KAAK,EAAE,cAAc,cAAc,CAAC;AAAA,MAC/D,MAAM;AAAA,MACN,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,IAAI,sBAAsB;AAAA,IACxB,MAAM,KAAK,MAAM,uBAAuB,oBAAoB;AAAA,IAC5D,IAAI,IAAI;AAAA,MACN,OAAO;AAAA,QACL,QAAQ,IAAI,eAAe,GAAG,MAAmB;AAAA,UAC/C,cAAc,GAAG;AAAA,QACnB,CAAC;AAAA,QACD,MAAM,GAAG;AAAA,QACT,eAAe,GAAG;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,kBAAkB;AAAA,IACrB,MAAM,MAAM,MAAM,wBAAwB;AAAA,IAC1C,IAAI,KAAK;AAAA,MACP,OAAO;AAAA,QACL,QAAQ,IAAI,eAAe,IAAI,MAAmB;AAAA,UAChD,cAAc,IAAI;AAAA,QACpB,CAAC;AAAA,QACD,MAAM,IAAI;AAAA,QACV,eAAe,IAAI;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,YAAY,MAAM,wBAAwB;AAAA,IAChD,MAAM,iBACJ,UAAU,MAAM,IAAI,CAAC,UAAU;AAAA,MAC7B,eAAe,cAAa,KAAK,GAAG;AAAA,MACpC,gBAAgB,KAAK;AAAA,MACrB,MAAM;AAAA,QACJ,WAAW;AAAA,QACX,YAAY,KAAK;AAAA,QACjB,aAAa,UAAU;AAAA,MACzB;AAAA,IACF,EAAE,CACJ;AAAA,IAEA,MAAM,UAAU,uBACZ,MAAM,uBAAuB,oBAAoB,IACjD,WACE,0BAA0B,MAAM,gBAAgB,GAAG,YAAY,QAAQ,EAAE,QACzE,MAAM,wBAAwB;AAAA,IACpC,MAAM,SAAS,YAAY,CAAC,mBAAmB,MAAM,wBAAwB,IAAI;AAAA,IACjF,IAAI,QAAQ;AAAA,MACV,OAAO;AAAA,QACL,QAAQ,IAAI,eAAe,OAAO,MAAmB;AAAA,UACnD,cAAc,OAAO;AAAA,QACvB,CAAC;AAAA,QACD,MAAM,OAAO;AAAA,QACb,eAAe,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EAKR,MAAM,iBAGA,CAAC;AAAA,EACP,MAAM,eAAe,kBAAkB;AAAA,EACvC,IAAI,gBAAgB,aAAa,MAAM,SAAS,GAAG;AAAA,IACjD,eAAe,KAAK,YAAY;AAAA,EAClC;AAAA,EACA,MAAM,cAAc,MAAM,iBAAiB;AAAA,EAC3C,IAAI,eAAe,YAAY,MAAM,SAAS,GAAG;AAAA,IAC/C,eAAe,KAAK,WAAW;AAAA,EACjC;AAAA,EACA,MAAM,gBAAgB,MAAM,mBAAmB;AAAA,EAC/C,IAAI,iBAAiB,cAAc,MAAM,SAAS,GAAG;AAAA,IACnD,eAAe,KAAK,aAAa;AAAA,EACnC;AAAA,EAEA,WAAW,UAAU,gBAAgB;AAAA,IACnC,MAAM,SAAS,MAAM,0BAA0B;AAAA,MAC7C,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,MAChB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,IAAI,QAAQ;AAAA,MACV,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,IAAI,YAAY,CAAC,uBAAuB;AAAA,IACtC,MAAM,IAAI,MACR,6CAA6C,wEAC/C;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,MACR,mNACF;AAAA;AAGF,eAAe,yBAAyB,CAAC,OAK8C;AAAA,EACrF,QAAQ,OAAO,SAAS,UAAU,0BAA0B;AAAA,EAC5D,IAAI,SAAS,MAAM;AAAA,EAEnB,IAAI,UAAU;AAAA,IACZ,MAAM,qBAAqB,SAAS,YAAY;AAAA,IAChD,MAAM,UAAU,MAAM,OAAO,CAAC,MAAM;AAAA,MAClC,MAAM,gBAAgB,cAAa,EAAE,GAAG,EAAE,YAAY;AAAA,MACtD,MAAM,OAAO,IAAI,IAAI,EAAE,GAAG,EAAE,KAAK,YAAY;AAAA,MAC7C,MAAM,yBAAyB,KAAK,QAAQ,kBAAkB,EAAE;AAAA,MAChE,MAAM,OAAO,EAAE,MAAM,YAAY,KAAK;AAAA,MACtC,OACE,cAAc,SAAS,kBAAkB,KACzC,KAAK,SAAS,kBAAkB,KAChC,uBAAuB,SAAS,kBAAkB,KAClD,KAAK,SAAS,kBAAkB;AAAA,KAEnC;AAAA,IACD,IAAI,QAAQ,SAAS,GAAG;AAAA,MACtB,MAAM,IAAI,MACR,uBAAuB,oCAAoC,QAAQ,IAAI,CAAC,MAAM,cAAa,EAAE,GAAG,CAAC,EAAE,KAAK,IAAI,yDAC9G;AAAA,IACF;AAAA,IACA,IAAI,QAAQ,WAAW,GAAG;AAAA,MACxB,SAAS,QAAQ;AAAA,IACnB,EAAO,SAAI,uBAAuB;AAAA,MAChC,MAAM,QAAQ,MAAM,KAAK,CAAC,MAAM;AAAA,QAC9B,IAAI;AAAA,UACF,OAAO,cAAa,EAAE,GAAG,MAAM,cAAa,QAAQ;AAAA,UACpD,MAAM;AAAA,UACN,OAAO;AAAA;AAAA,OAEV;AAAA,MACD,IAAI,OAAO;AAAA,QACT,SAAS;AAAA,MACX,EAAO;AAAA,QACL,OAAO;AAAA;AAAA,IAEX,EAAO;AAAA,MACL,OAAO;AAAA;AAAA,EAEX;AAAA,EAEA,MAAM,OAAkB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY,OAAO;AAAA,IACnB,aAAa;AAAA,EACf;AAAA,EACA,MAAM,eAAe,cAAa,OAAO,GAAG;AAAA,EAC5C,MAAM,gBAAgB;AAAA,IACpB,eAAe;AAAA,IACf,gBAAgB,OAAO;AAAA,IACvB,MAAM;AAAA,MACJ,WAAW;AAAA,MACX,YAAY,OAAO;AAAA,MACnB,aAAa;AAAA,IACf;AAAA,EACF,CAAC;AAAA,EACD,OAAO;AAAA,IACL,QAAQ,IAAI,eAAe,MAAM,EAAE,aAAa,CAAC;AAAA,IACjD;AAAA,IACA,eAAe;AAAA,EACjB;AAAA;;;ACjNF,SAAS,mBAAmB,GAAY;AAAA,EACtC,OAAO,QAAQ,QAAQ,IAAI,aAAa,KAAK,CAAC;AAAA;AAGhD,SAAS,qBAAqB,CAAC,MAAmC;AAAA,EAChE,OAAO,MAAM,KAAK,KAAK,QAAQ,IAAI,qBAAqB,KAAK,KAAK;AAAA;AAGpE,SAAS,YAAY,CAAC,KAAsB;AAAA,EAC1C,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA;AAGxD,SAAS,gBAAgB,CAAC,OAA+D;AAAA,EACvF,MAAM,MAAM,OAAO,SAAS,KAAK,EAAE,YAAY;AAAA,EAC/C,IAAI,QAAQ,UAAU,QAAQ,WAAW,QAAQ,aAAa,QAAQ,QAAQ;AAAA,IAC5E,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,uCAAuC,CAAC,OAGrC;AAAA,EAChB,MAAM,UAAU,MAAM,SAAS,KAAK,CAAC,MAAM,sBAAsB,CAAC,EAAE,SAAS,MAAM;AAAA,EACnF,IAAI,CAAC,SAAS;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAAM,gBAAgB;AAAA,EACpC,KAAK,MAAM,YAAY,UAAU,MAAM,GAAG;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,MAAM,cAAc;AAAA,IACvB,MAAM,IAAI,MACR,+HACF;AAAA,EACF;AAAA;AAGF,SAAS,kBAAkB,CAAC,SAA0B;AAAA,EACpD,OAAO,wDAAwD,KAAK,OAAO;AAAA;AAG7E,eAAe,4BAA4B,GAAqB;AAAA,EAC9D,IACE,QAAQ,aAAa,YACrB,QAAQ,aAAa,WACrB,QAAQ,aAAa,SACrB;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,IAAI;AAAA,IACF,MAAM,YAAY,MAAM,wBAAwB;AAAA,IAChD,MAAM,iBACJ,UAAU,MAAM,IAAI,CAAC,UAAU;AAAA,MAC7B,eAAe,cAAa,KAAK,GAAG;AAAA,MACpC,gBAAgB,KAAK;AAAA,MACrB,MAAM;AAAA,QACJ,WAAW;AAAA,QACX,YAAY,KAAK;AAAA,QACjB,aAAa,UAAU;AAAA,MACzB;AAAA,IACF,EAAE,CACJ;AAAA,IACA,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AAIX,eAAe,eAAkB,CAAC,OAGnB;AAAA,EACb,IAAI;AAAA,IACF,OAAO,MAAM,MAAM,KAAK;AAAA,IACxB,OAAO,KAAc;AAAA,IACrB,MAAM,UAAU,aAAa,GAAG;AAAA,IAChC,IAAI,oBAAoB,GAAG;AAAA,MACzB,MAAM;AAAA,IACR;AAAA,IACA,IAAI,CAAC,mBAAmB,OAAO,GAAG;AAAA,MAChC,MAAM;AAAA,IACR;AAAA,IAEA,MAAM,YAAY,MAAM,6BAA6B;AAAA,IACrD,IAAI,CAAC,WAAW;AAAA,MACd,MAAM;AAAA,IACR;AAAA,IACA,OAAO,MAAM,MAAM,KAAK;AAAA;AAAA;AAIrB,SAAS,gBAAgB,GAAe;AAAA,EAC7C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,eAAe;AAAA,EACjB;AAAA;;;ACjJK,SAAS,UAAa,CAAC,OAAa;AAAA,EACzC,MAAM,SAAS,mBAAmB,KAAK;AAAA,EACvC,OAAQ,WAAW,YAAa,CAAC,IAAW;AAAA;AAG9C,SAAS,kBAAkB,CAAC,OAAyB;AAAA,EACnD,IAAI,UAAU,QAAQ,UAAU,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO,MAAM,KAAK,MAAM,KAAK,YAAY;AAAA,EAC3C;AAAA,EAEA,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AAAA,IAC3D,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAM,QAAQ,KAAK,GAAG;AAAA,IACxB,MAAM,OAAO,MACV,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC,EAChC,OAAO,CAAC,MAAwC,MAAM,SAAS;AAAA,IAClE,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,EACzC;AAAA,EAEA,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM,MAA+B,CAAC;AAAA,IACtC,YAAY,GAAG,MAAM,OAAO,QAAQ,KAAgC,GAAG;AAAA,MACrE,MAAM,OAAO,mBAAmB,CAAC;AAAA,MACjC,IAAI,SAAS,WAAW;AAAA,QACtB,IAAI,KAAK;AAAA,MACX;AAAA,IACF;AAAA,IACA,OAAO,OAAO,KAAK,GAAG,EAAE,WAAW,IAAI,YAAY;AAAA,EACrD;AAAA,EAEA,OAAO;AAAA;;;ACpCF,SAAS,YAAY,CAC1B,OACA,SACQ;AAAA,EACR,MAAM,YAAY,SAAS,aAAa;AAAA,EACxC,MAAM,UAAU,SAAS,WAAW;AAAA,EACpC,IAAI,CAAC,OAAO;AAAA,IACV,OAAO;AAAA,EACT;AAAA,EACA,IAAI,MAAM,UAAU,YAAY,UAAU,GAAG;AAAA,IAC3C,OAAO;AAAA,EACT;AAAA,EACA,OAAO,GAAG,MAAM,MAAM,GAAG,SAAS,KAAI,MAAM,MAAM,CAAC,OAAO;AAAA;;;ACA5D,eAAe,WAAW,CAAC,OAGU;AAAA,EACnC,OAAO,MAAM,IAAI,gBAAgB;AAAA,IAC/B,cAAc,MAAM;AAAA,IACpB,MAAM,YAAY;AAAA,MAChB,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,MAAM,YAAY;AAAA,MAC3E,OAAQ,MAAM,OAAO,IAAI,aAAa,CAAC,CAAC;AAAA;AAAA,EAE5C,CAAC;AAAA;AAGI,SAAS,mBAAmB,CAAC,OAAoD;AAAA,EACtF,MAAM,OAAO,MAAM,QAAQ,QAAQ,MAAM,EAAE,YAAY,6BAA6B;AAAA,EAEpF,KACG,QAAQ,QAAQ,EAChB,YAAY,8CAA8C,EAC1D,OAAO,YAAY;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,QAAQ,MAAM,gBAAgB;AAAA,MACpC,MAAM,YAAY;AAAA,WACb;AAAA,QACH,YAAY,MAAM,WAAW,IAAI,CAAC,OAAO;AAAA,UACvC,eAAe,EAAE;AAAA,UACjB,gBAAgB,EAAE;AAAA,UAClB,WAAW,EAAE,KAAK;AAAA,UAClB,OACE,EAAE,KAAK,cAAc,aACjB,aAAa,EAAE,KAAK,KAAK,IACzB,aAAa,EAAE,KAAK,UAAU;AAAA,UACpC,UAAU,EAAE,KAAK,cAAc,YAAY,aAAa,EAAE,KAAK,WAAW,IAAI;AAAA,QAChF,EAAE;AAAA,MACJ;AAAA,MACA,QAAQ,IAAI,KAAK,UAAU,WAAW,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,MAC1D,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,MAAM,EACd,YAAY,4CAA4C,EACxD,OACC,qBACA,6FACF,EACC,OAAO,UAAU,SAAS;AAAA,IACzB,OAAO,WAAW;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,OAAO,MAAM,YAAY;AAAA,QAC7B,KAAK,MAAM;AAAA,QACX,cAAc,MAAM,IAAI,sBAAsB,QAAQ,SAAS;AAAA,MACjE,CAAC;AAAA,MACD,QAAQ,IAAI,KAAK,UAAU,WAAW,IAAI,GAAG,MAAM,CAAC,CAAC;AAAA,MACrD,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,eAAe,EACvB,YAAY,sEAAsE,EAClF,OAAO,YAAY;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,YAAY,MAAM,IAAI,aAAa;AAAA,MACzC,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,IAAI,MACR,yFACF;AAAA,MACF;AAAA,MAEA,WAAW,QAAQ,UAAU,OAAO;AAAA,QAClC,MAAM,gBAAgB;AAAA,UACpB,eAAe,MAAM,IAAI,aAAa,KAAK,GAAG;AAAA,UAC9C,gBAAgB,KAAK;AAAA,UACrB,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,YAAY,KAAK;AAAA,YACjB,aAAa,UAAU;AAAA,UACzB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,QAAQ,IAAI,YAAY,UAAU,MAAM,wCAAwC;AAAA,MAChF,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,cAAc,EACtB,YAAY,sEAAsE,EAClF,OAAO,YAAY;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,YAAY,MAAM,MAAM,IAAI,YAAY;AAAA,MAC9C,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,IAAI,MACR,uFACF;AAAA,MACF;AAAA,MAEA,WAAW,QAAQ,UAAU,OAAO;AAAA,QAClC,MAAM,gBAAgB;AAAA,UACpB,eAAe,MAAM,IAAI,aAAa,KAAK,GAAG;AAAA,UAC9C,gBAAgB,KAAK;AAAA,UACrB,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,YAAY,KAAK;AAAA,YACjB,aAAa,UAAU;AAAA,UACzB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,QAAQ,IAAI,YAAY,UAAU,MAAM,uCAAuC;AAAA,MAC/E,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,gBAAgB,EACxB,YAAY,6DAA6D,EACzE,OAAO,YAAY;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,YAAY,MAAM,MAAM,IAAI,cAAc;AAAA,MAChD,IAAI,CAAC,WAAW;AAAA,QACd,MAAM,IAAI,MACR,2FACF;AAAA,MACF;AAAA,MAEA,WAAW,QAAQ,UAAU,OAAO;AAAA,QAClC,MAAM,gBAAgB;AAAA,UACpB,eAAe,MAAM,IAAI,aAAa,KAAK,GAAG;AAAA,UAC9C,gBAAgB,KAAK;AAAA,UACrB,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,YAAY,KAAK;AAAA,YACjB,aAAa,UAAU;AAAA,UACzB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,QAAQ,IAAI,YAAY,UAAU,MAAM,yCAAyC;AAAA,MACjF,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,YAAY,EACpB,YAAY,iFAAiF,EAC7F,OAAO,YAAY;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,YAAY,MAAM,IAAI,SAAS,QAAQ,KAAK,EAAE,KAAK;AAAA,MACzD,IAAI,CAAC,UAAU,KAAK,GAAG;AAAA,QACrB,MAAM,IAAI,MAAM,gCAAgC;AAAA,MAClD;AAAA,MACA,MAAM,SAAS,MAAM,IAAI,UAAU,SAAS;AAAA,MAC5C,MAAM,gBAAgB;AAAA,QACpB,eAAe,MAAM,IAAI,aAAa,OAAO,aAAa;AAAA,QAC1D,MAAM;AAAA,UACJ,WAAW;AAAA,UACX,YAAY,OAAO;AAAA,UACnB,aAAa,OAAO;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,MACD,QAAQ,IAAI,uBAAuB,MAAM,IAAI,aAAa,OAAO,aAAa,IAAI;AAAA,MAClF,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,gBAAgB,EACxB,YACC,6FACF,EACC,OAAO,YAAY;AAAA,IAClB,IAAI;AAAA,MACF,MAAM,YAAY,MAAM,MAAM,IAAI,cAAc;AAAA,MAChD,MAAM,iBACJ,UAAU,MAAM,IAAI,CAAC,UAAU;AAAA,QAC7B,eAAe,MAAM,IAAI,aAAa,KAAK,GAAG;AAAA,QAC9C,gBAAgB,KAAK;AAAA,QACrB,MAAM;AAAA,UACJ,WAAW;AAAA,UACX,YAAY,KAAK;AAAA,UACjB,aAAa,UAAU;AAAA,QACzB;AAAA,MACF,EAAE,CACJ;AAAA,MACA,MAAM,UAAU;AAAA,QACd,UAAU,UAAU,MAAM;AAAA,QAC1B,QAAQ,UAAU;AAAA,QAClB,YAAY,UAAU,MAAM,IAAI,CAAC,OAAO;AAAA,UACtC,eAAe,MAAM,IAAI,aAAa,EAAE,GAAG;AAAA,UAC3C,gBAAgB,EAAE;AAAA,QACpB,EAAE;AAAA,MACJ;AAAA,MACA,QAAQ,IAAI,KAAK,UAAU,WAAW,OAAO,GAAG,MAAM,CAAC,CAAC;AAAA,MACxD,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,KAAK,EACb,YAAY,uDAAuD,EACnE,eAAe,yBAAyB,6CAA6C,EACrF,OAAO,mBAAmB,kCAAkC,EAC5D,OAAO,kBAAkB,0BAA0B,EACnD,OAAO,mBAAmB,6BAA6B,EACvD,OAAO,UAAU,SAAS;AAAA,IACzB,OAAO,WAAW;AAAA,IAGlB,IAAI;AAAA,MACF,MAAM,eAAe,MAAM,IAAI,aAAa,QAAQ,YAAY;AAAA,MAChE,IAAI,QAAQ,OAAO;AAAA,QACjB,MAAM,gBAAgB;AAAA,UACpB,eAAe;AAAA,UACf,MAAM,EAAE,WAAW,YAAY,OAAO,QAAQ,MAAM;AAAA,QACtD,CAAC;AAAA,QACD,QAAQ,IAAI,uBAAuB;AAAA,QACnC;AAAA,MACF;AAAA,MACA,IAAI,QAAQ,QAAQ,QAAQ,MAAM;AAAA,QAChC,MAAM,gBAAgB;AAAA,UACpB,eAAe;AAAA,UACf,MAAM;AAAA,YACJ,WAAW;AAAA,YACX,YAAY,QAAQ;AAAA,YACpB,aAAa,QAAQ;AAAA,UACvB;AAAA,QACF,CAAC;AAAA,QACD,QAAQ,IAAI,uBAAuB;AAAA,QACnC;AAAA,MACF;AAAA,MACA,MAAM,IAAI,MAAM,kDAAkD;AAAA,MAClE,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,aAAa,EACrB,YAAY,+BAA+B,EAC3C,SAAS,mBAAmB,6CAA6C,EACzE,OAAO,UAAU,SAAS;AAAA,IACzB,OAAO,gBAAgB;AAAA,IACvB,IAAI;AAAA,MACF,MAAM,oBAAoB,YAAY;AAAA,MACtC,QAAQ,IAAI,4BAA4B;AAAA,MACxC,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA,EAEH,KACG,QAAQ,QAAQ,EAChB,YAAY,sCAAsC,EAClD,SAAS,mBAAmB,6CAA6C,EACzE,OAAO,UAAU,SAAS;AAAA,IACzB,OAAO,gBAAgB;AAAA,IACvB,IAAI;AAAA,MACF,MAAM,gBAAgB,YAAY;AAAA,MAClC,QAAQ,IAAI,oBAAoB;AAAA,MAChC,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA;;;ACpSL,kBAAS,qBAAO;AAChB,2BAAmB;AAEnB,uBAAS;AAGF,MAAM,2BAA2B,MAAM;AAAA,EAG1B;AAAA,EAFlB,WAAW,CACT,SACgB,YAChB;AAAA,IACA,MAAM,OAAO;AAAA,IAFG;AAAA,IAGhB,KAAK,OAAO;AAAA;AAEhB;AAMA,eAAsB,iBAAiB,CAAC,OAMpB;AAAA,EAClB,QAAQ,MAAM,KAAK,SAAS,eAAe,YAAY;AAAA,EACvD,MAAM,SAAS,QAAQ,OAAO;AAAA,EAC9B,MAAM,OAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EACvC,MAAM,OAAO,iBAAiB,iBAAiB,SAAS,IAAI,IAAI,GAAG,EAAE,QAAQ,KAAK,MAAM;AAAA,EACxF,MAAM,OAAO,MAAK,QAAQ,IAAI;AAAA,EAE9B,IAAI,YAAW,IAAI,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAkC,CAAC;AAAA,EACzC,IAAI,KAAK,cAAc,YAAY;AAAA,IACjC,QAAQ,gBAAgB,UAAU,KAAK;AAAA,EACzC,EAAO;AAAA,IACL,QAAQ,gBAAgB,UAAU,KAAK;AAAA,IACvC,QAAQ,SAAS,KAAK,mBAAmB,KAAK,WAAW;AAAA,IACzD,QAAQ,UAAU;AAAA,IAClB,QAAQ,gBAAgB,aAAa;AAAA;AAAA,EAGvC,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,MAAM,MAAM,KAAK,EAAE,QAAQ,CAAC;AAAA,IACnC,OAAO,KAAK;AAAA,IACZ,MAAM,IAAI,mBACR,kBAAkB,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,GACnE;AAAA;AAAA,EAEF,IAAI,CAAC,KAAK,IAAI;AAAA,IACZ,MAAM,IAAI,mBAAmB,4BAA4B,KAAK,WAAW,KAAK,MAAM;AAAA,EACtF;AAAA,EACA,MAAM,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK;AAAA,EACxD,IAAI,CAAC,SAAS,aAAa,YAAY,SAAS,WAAW,GAAG;AAAA,IAC5D,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,OAAO,MAAM,KAAK,KAAK;AAAA,MACvB,OAAO,KAAK;AAAA,MACZ,MAAM,IAAI,mBACR,0CAA0C,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,KACzF,KAAK,MACP;AAAA;AAAA,IAEF,MAAM,IAAI,mBACR,sEAAsE,KAAK,UACzE,KAAK,MAAM,GAAG,GAAG,CACnB,KACA,KAAK,MACP;AAAA,EACF;AAAA,EACA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,cAAc,MAAM,KAAK,YAAY;AAAA,IACrC,OAAO,KAAK;AAAA,IACZ,MAAM,IAAI,mBACR,0CAA0C,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,KACzF,KAAK,MACP;AAAA;AAAA,EAEF,MAAM,MAAM,OAAO,KAAK,WAAW;AAAA,EACnC,MAAM,WAAU,MAAM,GAAG;AAAA,EACzB,OAAO;AAAA;AAGT,eAAsB,oBAAoB,CACxC,OACyB;AAAA,EACzB,IAAI;AAAA,IACF,MAAM,OAAO,MAAM,kBAAkB,KAAK;AAAA,IAC1C,OAAO,EAAE,IAAI,MAAM,KAAK;AAAA,IACxB,OAAO,KAAK;AAAA,IACZ,IAAI,eAAe,oBAAoB;AAAA,MACrC,OAAO,EAAE,IAAI,OAAO,OAAO,IAAI,SAAS,YAAY,IAAI,WAAW;AAAA,IACrE;AAAA,IACA,MAAM;AAAA;AAAA;AAIV,eAAsB,sBAAsB,CAAC,OAIzB;AAAA,EAClB,MAAM,SAAS,QAAQ,MAAM,OAAO;AAAA,EACpC,MAAM,OAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EACvC,MAAM,OAAO,MAAK,QAAQ,iBAAiB,GAAG,MAAM,2BAA2B,CAAC;AAAA,EAChF,MAAM,WAAU,MAAM,GAAG,MAAM;AAAA,GAAW,MAAM;AAAA,EAChD,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,MAAsB;AAAA,EAC9C,OAAO,KAAK,QAAQ,iBAAiB,GAAG;AAAA;;;ACrH1C;AACA;AAEO,SAAS,cAAc,CAAC,MAAsB;AAAA,EACnD,MAAM,UAAU,IAAI,gBAAgB;AAAA,IAClC,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,aAAa;AAAA,EACf,CAAC;AAAA,EAED,QAAQ,IAAI,GAAG;AAAA,EAGf,QAAQ,QAAQ,MAAM;AAAA,IACpB,QAAQ;AAAA,IACR,aAAa,MAAM;AAAA;AAAA,EACrB,CAAC;AAAA,EAID,MAAM,YACJ,WAAW,MAAM,MAAM,KAAK,WAAW,MAAM,SAAS,KAAK,WAAW,MAAM,MAAM,KAAK;AAAA,EAEzF,OAAO,QAAQ,SAAS,SAAS;AAAA;AAGnC,SAAS,UAAU,CAAC,MAAc,KAA4B;AAAA,EAC5D,MAAM,KAAK,IAAI,OAAO,IAAI,+BAA+B,QAAQ,GAAG;AAAA,EACpE,MAAM,IAAI,KAAK,MAAM,EAAE;AAAA,EACvB,OAAO,IAAI,EAAE,KAAM;AAAA;;;AC9BrB,iBAAS,mBAAM;AACf,kBAAS;;;ACDT,oBAAS,oBAAS;AAClB,iBAAS;AAEF,SAAS,SAAS,GAAW;AAAA,EAClC,MAAM,MAAM,QAAQ,IAAI,iBAAiB,KAAK;AAAA,EAC9C,IAAI,KAAK;AAAA,IACP,OAAO,OAAK,KAAK,aAAa;AAAA,EAChC;AAAA,EAEA,MAAM,OAAO,SAAQ;AAAA,EACrB,IAAI,MAAM;AAAA,IACR,OAAO,OAAK,MAAM,cAAc;AAAA,EAClC;AAAA,EAEA,OAAO,OAAK,QAAO,GAAG,aAAa;AAAA;;;ADV9B,SAAS,eAAe,GAAW;AAAA,EACxC,OAAO,SAAQ,OAAK,UAAU,GAAG,OAAO,WAAW,CAAC;AAAA;AAGtD,eAAsB,kBAAkB,GAAoB;AAAA,EAC1D,MAAM,MAAM,gBAAgB;AAAA,EAC5B,MAAM,OAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACpC,OAAO;AAAA;;;AENT,qBAAS;AASF,SAAS,mBAAmB,CAAC,OAA+B;AAAA,EACjE,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,MAAM,IAAI,IAAI,KAAK;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,IAAI,MAAM,gBAAgB,OAAO;AAAA;AAAA,EAGzC,IAAI,CAAC,iBAAiB,KAAK,IAAI,QAAQ,GAAG;AAAA,IACxC,MAAM,IAAI,MAAM,8BAA8B,IAAI,UAAU;AAAA,EAC9D;AAAA,EAIA,MAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EACpD,IAAI,MAAM,OAAO,QAAQ;AAAA,IACvB,MAAM,IAAI,MAAM,sCAAsC,IAAI,UAAU;AAAA,EACtE;AAAA,EAEA,MAAM,YAAY,MAAM,KAAK,CAAC,MAAM,kBAAkB,KAAK,CAAC,CAAC;AAAA,EAC7D,IAAI,CAAC,WAAW;AAAA,IACd,MAAM,IAAI,MAAM,gCAAgC,IAAI,UAAU;AAAA,EAChE;AAAA,EAEA,MAAM,gBAAgB,GAAG,IAAI,aAAa,IAAI;AAAA,EAC9C,OAAO,EAAE,eAAe,WAAW,KAAK,MAAM;AAAA;AAGhD,eAAsB,mBAAmB,CACvC,QACA,OAMuE;AAAA,EACvE,MAAM,OAAO,MAAM,OAAO,IAAI,cAAc,EAAE,MAAM,MAAM,SAAS,CAAC;AAAA,EACpE,MAAM,OAAO,SAAS,KAAK,IAAI,IAAI,KAAK,OAAO;AAAA,EAC/C,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAAA,EAEA,MAAM,SAAS,UAAU,KAAK,KAAK,KAAK,UAAU,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK;AAAA,EAC9E,MAAM,cAAc,UAAU,KAAK,oBAAoB,KAAK,UAAU,KAAK,WAAW;AAAA,EACtF,IAAI,CAAC,aAAa;AAAA,IAChB,MAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AAAA,EAEA,IAAI,OAAO;AAAA,EACX,IAAI,MAAM,SAAS,gBAAgB,MAAM;AAAA,IACvC,MAAM,WAAW,MAAM,kBAAkB;AAAA,MACvC,MAAM,MAAM;AAAA,MACZ,KAAK;AAAA,MAKL,SAAS,MAAM,mBAAmB;AAAA,MAClC,eAAe,GAAG,MAAM;AAAA,MACxB,SAAS,EAAE,WAAW,KAAK;AAAA,IAC7B,CAAC;AAAA,IACD,OAAO,MAAM,UAAS,UAAU,MAAM;AAAA,EACxC,EAAO;AAAA,IACL,MAAM,UAAkC,CAAC;AAAA,IACzC,IAAI,MAAM,KAAK,cAAc,YAAY;AAAA,MACvC,QAAQ,gBAAgB,UAAU,MAAM,KAAK;AAAA,IAC/C,EAAO;AAAA,MACL,QAAQ,gBAAgB,UAAU,MAAM,KAAK;AAAA,MAC7C,QAAQ,SAAS,KAAK,mBAAmB,MAAM,KAAK,WAAW;AAAA,MAC/D,QAAQ,UAAU;AAAA,MAClB,QAAQ,gBAAgB,aAAa;AAAA;AAAA,IAEvC,MAAM,OAAO,MAAM,MAAM,aAAa,EAAE,QAAQ,CAAC;AAAA,IACjD,IAAI,CAAC,KAAK,IAAI;AAAA,MACZ,MAAM,IAAI,MAAM,mCAAmC,KAAK,SAAS;AAAA,IACnE;AAAA,IACA,OAAO,MAAM,KAAK,KAAK;AAAA;AAAA,EAGzB,MAAM,cAAc,eAAe,IAAI,EAAE,KAAK;AAAA,EAC9C,MAAM,WAAW,MAAM,SAAS,YAAY;AAAA,EAC5C,MAAM,WACJ,YAAY,KAAK,YAAY,SAAS,WAClC,GAAG,YAAY,MAAM,GAAG,QAAQ;AAAA,KAChC;AAAA,EAEN,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,IAAI,MAAM;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;;;ACtGK,SAAS,qBAAqB,CAAC,OAAoD;AAAA,EACxF,MAAM,YAAY,MAAM,QAAQ,QAAQ,QAAQ,EAAE,YAAY,0BAA0B;AAAA,EAExF,UACG,QAAQ,KAAK,EACb,YAAY,iDAAiD,EAC7D,SAAS,YAAY,kDAAiD,EACtE,OACC,qBACA,+GACF,EACC,OACC,mBACA,wEACA,OACF,EACC,OAAO,UAAU,SAAS;AAAA,IACzB,OAAO,OAAO,WAAW;AAAA,IACzB,IAAI;AAAA,MACF,IAAI;AAAA,MACJ,IAAI;AAAA,MAEJ,IAAI;AAAA,QACF,MAAM,MAAM,oBAAoB,KAAK;AAAA,QACrC,eAAe,IAAI;AAAA,QACnB,WAAW,IAAI;AAAA,QACf,MAAM;AAAA,QACN,MAAM,UAAU,OAAO,KAAK,EAAE,KAAK;AAAA,QACnC,IAAI,CAAC,kBAAkB,KAAK,OAAO,GAAG;AAAA,UACpC,MAAM,IAAI,MACR,6BAA6B,mDAC/B;AAAA,QACF;AAAA,QACA,WAAW;AAAA,QACX,eAAe,QAAQ,WAAW,KAAK,KAAK;AAAA;AAAA,MAG9C,MAAM,UAAU,MAAM,MAAM,IAAI,gBAAgB;AAAA,QAC9C;AAAA,QACA,MAAM,YAAY;AAAA,UAChB,QAAQ,QAAQ,MAAM,kBACpB,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,UACpD,MAAM,WAAW,OAAO,SAAS,QAAQ,UAAU,EAAE;AAAA,UACrD,OAAO,MAAM,oBAAoB,QAAQ;AAAA,YACvC;AAAA,YACA,cAAc,iBAAiB,gBAAgB;AAAA,YAC/C;AAAA,YACA,SAAS,EAAE,SAAS;AAAA,UACtB,CAAC;AAAA;AAAA,MAEL,CAAC;AAAA,MAED,QAAQ,IAAI,KAAK,UAAU,WAAW,OAAO,GAAG,MAAM,CAAC,CAAC;AAAA,MACxD,OAAO,KAAc;AAAA,MACrB,QAAQ,MAAM,MAAM,IAAI,aAAa,GAAG,CAAC;AAAA,MACzC,QAAQ,WAAW;AAAA;AAAA,GAEtB;AAAA;;;AC9DL;AAEO,SAAS,6BAA6B,CAAC,MAAsB;AAAA,EAClE,IAAI,CAAC,MAAM;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EAGA,OAAa,cAAQ,IAAI;AAAA;AAGpB,SAAS,0BAA0B,CAAC,OAAuB;AAAA,EAChE,MAAM,UAAU,OAAO,SAAS,EAAE,EAAE,KAAK;AAAA,EACzC,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AAAA,EAGA,MAAM,iBAAiB,QAAQ,MAAM,eAAe;AAAA,EACpD,IAAI,gBAAgB;AAAA,IAClB,OAAO,eAAe;AAAA,EACxB;AAAA,EAGA,IAAI,oBAAoB,KAAK,OAAO,GAAG;AAAA,IACrC,OAAO;AAAA,EACT;AAAA,EAGA,MAAM,eAAqB,YAAM,OAAO;AAAA,EACxC,IAAI,cAAc;AAAA,IAChB,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,MACR,6BAA6B,KAAK,UAAU,KAAK,kCACnD;AAAA;;;AClCK,SAAS,qBAAqB,CAAC,MAAsB;AAAA,EAC1D,IAAI,CAAC,MAAM;AAAA,IACT,OAAO;AAAA,EACT;AAAA,EAGA,IAAI,MAAM,KAAK,QAAQ,qCAAqC,UAAU;AAAA,EACtE,MAAM,IAAI,QAAQ,2BAA2B,IAAI;AAAA,EAGjD,MAAM,IAAI,QAAQ,0BAA0B,KAAK;AAAA,EAGjD,MAAM,IAAI,QAAQ,4BAA4B,KAAK;AAAA,EACnD,MAAM,IAAI,QAAQ,mBAAmB,KAAK;AAAA,EAG1C,MAAM,IAAI,QAAQ,mBAAmB,KAAK;AAAA,EAG1C,MAAM,IAAI,QAAQ,SAAS,GAAG,EAAE,QAAQ,SAAS,GAAG,EAAE,QAAQ,UAAU,GAAG;AAAA,EAG3E,MAAM,8BAA8B,GAAG;AAAA,EAEvC,OAAO;AAAA;;;ACvBF,SAAS,kBAAkB,CAAC,OAAyC;AAAA,EAC1E,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK,UAAU,MAAM,EAAE;AAAA,EAC7B,IAAI,CAAC,IAAI;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA,MAAM,UAAU,MAAM,IAAI;AAAA,IAC1B,OAAO,UAAU,MAAM,KAAK;AAAA,IAC5B,UAAU,UAAU,MAAM,QAAQ;AAAA,IAClC,UAAU,UAAU,MAAM,QAAQ;AAAA,IAClC,MAAM,UAAU,MAAM,IAAI;AAAA,IAC1B,WAAW,UAAU,MAAM,SAAS;AAAA,IACpC,aAAa,UAAU,MAAM,WAAW;AAAA,IACxC,sBAAsB,UAAU,MAAM,oBAAoB;AAAA,IAC1D,MAAM,UAAU,MAAM,IAAI;AAAA,EAC5B;AAAA;AAGF,eAAsB,WAAW,CAC/B,QACA,OAC6B;AAAA,EAC7B,MAAM,MAA0B,CAAC;AAAA,EACjC,WAAW,KAAK,OAAO;AAAA,IACrB,IAAI,EAAE,SAAS,aAAa,CAAC,EAAE,sBAAsB;AAAA,MACnD,IAAI;AAAA,QACF,MAAM,OAAO,MAAM,OAAO,IAAI,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC;AAAA,QAC1D,MAAM,OAAO,SAAS,KAAK,IAAI,IAAI,KAAK,OAAO;AAAA,QAC/C,IAAI,KAAK;AAAA,aACJ;AAAA,UACH,MAAM,EAAE,QAAQ,UAAU,MAAM,IAAI;AAAA,UACpC,OAAO,EAAE,SAAS,UAAU,MAAM,KAAK;AAAA,UACvC,UAAU,EAAE,YAAY,UAAU,MAAM,QAAQ;AAAA,UAChD,UAAU,EAAE,YAAY,UAAU,MAAM,QAAQ;AAAA,UAChD,MAAM,EAAE,QAAQ,UAAU,MAAM,IAAI;AAAA,UACpC,WAAW,EAAE,aAAa,UAAU,MAAM,SAAS;AAAA,UACnD,aAAa,EAAE,eAAe,UAAU,MAAM,WAAW;AAAA,UACzD,sBAAsB,EAAE,wBAAwB,UAAU,MAAM,oBAAoB;AAAA,UACpF,SAAS;AAAA,YACP,SAAS,UAAU,MAAM,OAAO;AAAA,YAChC,UAAU,UAAU,MAAM,QAAQ;AAAA,UACpC;AAAA,QACF,CAAC;AAAA,QACD;AAAA,QACA,MAAM;AAAA,IAGV;AAAA,IACA,IAAI,KAAK,CAAC;AAAA,EACZ;AAAA,EACA,OAAO;AAAA;;;ACpDT,SAAS,UAAS,CAAC,OAAwB;AAAA,EACzC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;AAGtC,SAAS,8BAA8B,CAAC,OAAwB;AAAA,EACrE,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACpB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC;AAAA,EACnE,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,MAAM,UAAU;AAAA,IACzB,MAAM,MAAM,iCAAiC,EAAE;AAAA,IAC/C,IAAI,IAAI,KAAK,GAAG;AAAA,MACd,IAAI,KAAK,GAAG;AAAA,IACd;AAAA,EACF;AAAA,EACA,OAAO,IAAI,KAAK;AAAA;AAAA,CAAM;AAAA;AAGxB,SAAS,gCAAgC,CAAC,IAAqB;AAAA,EAC7D,IAAI,CAAC,SAAS,EAAE,GAAG;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,IAAI,WAAU,GAAG,IAAI;AAAA,EAE3B,IAAI,MAAM,qBAAqB;AAAA,IAC7B,MAAM,QAAkB,CAAC;AAAA,IACzB,WAAW,SAAS,MAAM,QAAQ,GAAG,QAAQ,IAAI,GAAG,WAAW,CAAC,GAAG;AAAA,MACjE,MAAM,KAAK,iCAAiC,KAAK,CAAC;AAAA,IACpD;AAAA,IACA,OAAO,MAAM,KAAK,EAAE;AAAA,EACtB;AAAA,EAEA,IAAI,MAAM,0BAA0B;AAAA,IAClC,MAAM,QAAkB,CAAC;AAAA,IACzB,WAAW,SAAS,MAAM,QAAQ,GAAG,QAAQ,IAAI,GAAG,WAAW,CAAC,GAAG;AAAA,MACjE,MAAM,KAAK,iCAAiC,KAAK,CAAC;AAAA,IACpD;AAAA,IACA,MAAM,OAAO,MAAM,KAAK,EAAE;AAAA,IAC1B,OAAO,OAAO,SAAS,eAAe;AAAA,EACxC;AAAA,EAEA,IAAI,MAAM,mBAAmB;AAAA,IAC3B,MAAM,QAAkB,CAAC;AAAA,IACzB,WAAW,SAAS,MAAM,QAAQ,GAAG,QAAQ,IAAI,GAAG,WAAW,CAAC,GAAG;AAAA,MACjE,MAAM,KAAK,iCAAiC,KAAK,CAAC;AAAA,IACpD;AAAA,IACA,MAAM,OAAO,MAAM,KAAK,EAAE,EAAE,KAAK;AAAA,IACjC,IAAI,CAAC,MAAM;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,OAAO,KACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,SAAS,KAAK,MAAM,EACzB,KAAK;AAAA,CAAI;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,kBAAkB;AAAA,IAC1B,MAAM,QAAQ,OAAO,GAAG,UAAU,WAAW,GAAG,QAAQ;AAAA,IACxD,MAAM,QAAkB,CAAC;AAAA,IACzB,MAAM,UAAU,MAAM,QAAQ,GAAG,QAAQ,IAAI,GAAG,WAAW,CAAC;AAAA,IAC5D,IAAI,MAAM;AAAA,IACV,WAAW,QAAQ,SAAS;AAAA,MAC1B,MAAM,MAAM,iCAAiC,IAAI,EAAE,KAAK;AAAA,MACxD,IAAI,CAAC,KAAK;AAAA,QACR;AAAA,MACF;AAAA,MACA;AAAA,MACA,MAAM,SAAS,UAAU,YAAY,GAAG,UAAU;AAAA,MAClD,MAAM,KAAK,GAAG,SAAS,KAAK;AAAA,IAC9B;AAAA,IACA,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA,EACxB;AAAA,EAEA,IAAI,MAAM,QAAQ;AAAA,IAChB,MAAM,MAAM,WAAU,GAAG,IAAI;AAAA,IAC7B,MAAM,QAAQ,SAAS,GAAG,KAAK,IAAI,GAAG,QAAQ;AAAA,IAC9C,IAAI,CAAC,OAAO;AAAA,MACV,OAAO;AAAA,IACT;AAAA,IACA,IAAI,OAAO;AAAA,IACX,IAAI,MAAM,MAAM;AAAA,MACd,OAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAI,MAAM,MAAM;AAAA,MACd,OAAO,IAAI;AAAA,IACb;AAAA,IACA,IAAI,MAAM,QAAQ;AAAA,MAChB,OAAO,IAAI;AAAA,IACb;AAAA,IACA,IAAI,MAAM,QAAQ;AAAA,MAChB,OAAO,IAAI;AAAA,IACb;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAM,QAAQ;AAAA,IAChB,MAAM,MAAM,WAAU,GAAG,GAAG;AAAA,IAC5B,MAAM,OAAO,WAAU,GAAG,IAAI;AAAA,IAC9B,IAAI,CAAC,KAAK;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IACA,OAAO,OAAO,IAAI,OAAO,UAAU;AAAA,EACrC;AAAA,EAEA,IAAI,MAAM,SAAS;AAAA,IACjB,MAAM,OAAO,WAAU,GAAG,IAAI;AAAA,IAC9B,OAAO,OAAO,IAAI,UAAU;AAAA,EAC9B;AAAA,EAEA,IAAI,MAAM,QAAQ;AAAA,IAChB,MAAM,SAAS,WAAU,GAAG,OAAO;AAAA,IACnC,OAAO,SAAS,KAAK,YAAY;AAAA,EACnC;AAAA,EAEA,IAAI,MAAM,WAAW;AAAA,IACnB,MAAM,YAAY,WAAU,GAAG,UAAU;AAAA,IACzC,OAAO,YAAY,KAAK,eAAe;AAAA,EACzC;AAAA,EAEA,OAAO;AAAA;;;ACzHT,IAAM,uBAAuB;AAEtB,SAAS,yBAAyB,CAAC,KAAsB;AAAA,EAC9D,MAAM,SAAS,UAAS,GAAG,IAAI,MAAM,CAAC;AAAA,EACtC,MAAM,cAAc,wBAAwB,OAAO,MAAM;AAAA,EACzD,MAAM,mBAAmB,6BAA6B,OAAO,aAAa;AAAA,IACxE,OAAO;AAAA,IACP,MAAM,IAAI;AAAA,EACZ,CAAC;AAAA,EACD,MAAM,WAAW,CAAC,YAAY,KAAK,GAAG,iBAAiB,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA;AAAA,CAAM;AAAA,EAC1F,IAAI,UAAU;AAAA,IACZ,OAAO,sBAAsB,QAAQ,EAAE,KAAK;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAO,WAAU,OAAO,IAAI,EAAE,KAAK;AAAA,EACzC,IAAI,MAAM;AAAA,IACR,OAAO,sBAAsB,IAAI,EAAE,KAAK;AAAA,EAC1C;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,uBAAuB,CAAC,QAAyB;AAAA,EACxD,IAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAAA,IAC1B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,KAAK,QAAQ;AAAA,IACtB,IAAI,CAAC,UAAS,CAAC,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,WAAU,EAAE,IAAI;AAAA,IAC7B,IAAI,SAAS,WAAW;AAAA,MACtB,MAAM,OAAO,UAAS,EAAE,IAAI,IAAI,EAAE,OAAO;AAAA,MACzC,MAAM,WAAW,OAAO,WAAU,KAAK,IAAI,IAAI;AAAA,MAC/C,IAAI,aAAa,YAAY,aAAa,cAAc;AAAA,QACtD,IAAI,KAAK,WAAU,MAAM,IAAI,CAAC;AAAA,MAChC;AAAA,MACA,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG;AAAA,QAC3B,WAAW,KAAK,EAAE,QAAQ;AAAA,UACxB,IAAI,CAAC,UAAS,CAAC,GAAG;AAAA,YAChB;AAAA,UACF;AAAA,UACA,MAAM,YAAY,WAAU,EAAE,IAAI;AAAA,UAClC,IAAI,cAAc,YAAY,cAAc,cAAc;AAAA,YACxD,IAAI,KAAK,WAAU,EAAE,IAAI,CAAC;AAAA,UAC5B;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,UAAS,EAAE,SAAS,IAAI,EAAE,YAAY;AAAA,MACxD,IAAI,WAAU,WAAW,IAAI,MAAM,UAAU;AAAA,QAC3C,MAAM,QAAQ,WAAW,WAAW,MAAoC,IAAI;AAAA,QAC5E,MAAM,MAAM,WAAU,WAAW,GAAG;AAAA,QACpC,IAAI,KAAK;AAAA,UACP,IAAI,KAAK,QAAQ,GAAG,UAAU,QAAQ,GAAG;AAAA,QAC3C;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,SAAS,aAAa,MAAM,QAAQ,EAAE,QAAQ,GAAG;AAAA,MACnD,WAAW,MAAM,EAAE,UAAU;AAAA,QAC3B,IAAI,CAAC,UAAS,EAAE,GAAG;AAAA,UACjB;AAAA,QACF;AAAA,QACA,IAAI,WAAU,GAAG,IAAI,MAAM,UAAU;AAAA,UACnC,MAAM,QAAQ,WAAW,GAAG,MAAoC,IAAI;AAAA,UACpE,MAAM,MAAM,WAAU,GAAG,GAAG;AAAA,UAC5B,IAAI,KAAK;AAAA,YACP,IAAI,KAAK,QAAQ,GAAG,UAAU,QAAQ,GAAG;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,SAAS,aAAa,MAAM,QAAQ,EAAE,QAAQ,GAAG;AAAA,MACnD,WAAW,MAAM,EAAE,UAAU;AAAA,QAC3B,IAAI,CAAC,UAAS,EAAE,GAAG;AAAA,UACjB;AAAA,QACF;AAAA,QACA,MAAM,SAAS,WAAU,GAAG,IAAI;AAAA,QAChC,IAAI,WAAW,UAAU;AAAA,UACvB,IAAI,KAAK,WAAU,GAAG,IAAI,CAAC;AAAA,QAC7B;AAAA,QACA,IAAI,WAAW,cAAc;AAAA,UAC3B,IAAI,KAAK,WAAU,GAAG,IAAI,CAAC;AAAA,QAC7B;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,SAAS,SAAS;AAAA,MACpB,MAAM,MAAM,WAAU,EAAE,QAAQ;AAAA,MAChC,MAAM,MAAM,WAAU,EAAE,SAAS;AAAA,MACjC,IAAI,KAAK;AAAA,QACP,IAAI,KAAK,MAAM,GAAG,QAAQ,QAAQ,GAAG;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,SAAS,aAAa;AAAA,MACxB,MAAM,OAAO,+BAA+B,CAAC;AAAA,MAC7C,IAAI,KAAK,KAAK,GAAG;AAAA,QACf,IAAI,KAAK,IAAI;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,IAAI,KAAK;AAAA;AAAA,CAAM;AAAA;AAGxB,SAAS,4BAA4B,CAAC,aAAsB,OAA4B;AAAA,EACtF,IAAI,MAAM,SAAS,sBAAsB;AAAA,IACvC,OAAO;AAAA,EACT;AAAA,EACA,IAAI,CAAC,MAAM,QAAQ,WAAW,GAAG;AAAA,IAC/B,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,KAAK,aAAa;AAAA,IAC3B,IAAI,CAAC,UAAS,CAAC,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,IACA,IAAI,MAAM,KAAK,IAAI,CAAC,GAAG;AAAA,MACrB;AAAA,IACF;AAAA,IACA,MAAM,KAAK,IAAI,CAAC;AAAA,IAEhB,MAAM,kBAAkB,QACtB,EAAE,YAAa,EAAE,iBAAiB,MAAM,QAAQ,EAAE,cAAc,CAClE;AAAA,IAEA,MAAM,QAAkB,CAAC;AAAA,IAEzB,IAAI,iBAAiB;AAAA,MACnB,MAAM,KAAK,oBAAoB,CAAC,CAAC;AAAA,MAEjC,MAAM,OACJ,4BAA4B,GAAG,KAAK,EAAE,KAAK,KAC3C,6BAA6B,EAAE,aAAa,UAAU,KAAK,CAAC,EAAE,KAAK,KACnE,WAAU,EAAE,IAAI,EAAE,KAAK;AAAA,MACzB,IAAI,MAAM;AAAA,QACR,MAAM,KAAK,cAAc,IAAI,CAAC;AAAA,MAChC;AAAA,MAEA,IAAI,MAAM,SAAS,GAAG;AAAA,QACpB,MAAM,KAAK,MAAM,KAAK;AAAA,CAAI,CAAC;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,wBAAwB,EAAE,MAAM;AAAA,IAC/C,IAAI,OAAO,KAAK,GAAG;AAAA,MACjB,MAAM,KAAK,MAAM;AAAA,IACnB;AAAA,IACA,MAAM,UAAU,WAAU,EAAE,OAAO;AAAA,IACnC,IAAI,SAAS;AAAA,MACX,MAAM,KAAK,OAAO;AAAA,IACpB;AAAA,IACA,MAAM,QAAQ,WAAU,EAAE,KAAK;AAAA,IAC/B,MAAM,YAAY,WAAU,EAAE,UAAU;AAAA,IACxC,IAAI,aAAa,OAAO;AAAA,MACtB,MAAM,KAAK,IAAI,aAAa,QAAQ;AAAA,IACtC,EAAO,SAAI,OAAO;AAAA,MAChB,MAAM,KAAK,KAAK;AAAA,IAClB,EAAO,SAAI,WAAW;AAAA,MACpB,MAAM,KAAK,SAAS;AAAA,IACtB;AAAA,IACA,MAAM,OAAO,WAAU,EAAE,IAAI;AAAA,IAC7B,IAAI,MAAM;AAAA,MACR,MAAM,KAAK,IAAI;AAAA,IACjB;AAAA,IACA,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG;AAAA,MAC3B,WAAW,KAAK,EAAE,QAAQ;AAAA,QACxB,IAAI,CAAC,UAAS,CAAC,GAAG;AAAA,UAChB;AAAA,QACF;AAAA,QACA,MAAM,aAAa,WAAU,EAAE,KAAK;AAAA,QACpC,MAAM,QAAQ,WAAU,EAAE,KAAK;AAAA,QAC/B,IAAI,cAAc,OAAO;AAAA,UACvB,MAAM,KAAK,GAAG;AAAA,EAAe,OAAO;AAAA,QACtC,EAAO,SAAI,YAAY;AAAA,UACrB,MAAM,KAAK,UAAU;AAAA,QACvB,EAAO,SAAI,OAAO;AAAA,UAChB,MAAM,KAAK,KAAK;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,WAAW,WAAU,EAAE,QAAQ;AAAA,IACrC,IAAI,MAAM,WAAW,KAAK,UAAU;AAAA,MAClC,MAAM,KAAK,QAAQ;AAAA,IACrB;AAAA,IACA,MAAM,oBAAoB,6BAA6B,EAAE,aAAa,UAAU,KAAK,CAAC;AAAA,IACtF,IAAI,kBAAkB,KAAK,GAAG;AAAA,MAC5B,MAAM,KAAK,iBAAiB;AAAA,IAC9B;AAAA,IACA,IAAI,MAAM,SAAS,GAAG;AAAA,MACpB,MAAM,KAAK,YAAY,KAAK,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,OAAO,YAAY,KAAK,EAAE,KAAK;AAAA;AAAA,CAAM;AAAA;AAGvC,SAAS,mBAAmB,CAAC,GAAoC;AAAA,EAC/D,MAAM,aAAa,WAAU,EAAE,WAAW;AAAA,EAC1C,MAAM,aAAa,WAAU,EAAE,WAAW;AAAA,EAC1C,MAAM,UAAU,WAAU,EAAE,QAAQ;AAAA,EAEpC,MAAM,aAAa,cAAc,aAAa,IAAI,cAAc,gBAAgB,cAAc;AAAA,EAC9F,MAAM,aAAa,UAAU,IAAI,sBAAsB;AAAA,EAEvD,IAAI,cAAc,YAAY;AAAA,IAC5B,OAAO,mBAAmB,gBAAgB;AAAA,EAC5C;AAAA,EACA,IAAI,YAAY;AAAA,IACd,OAAO,mBAAmB;AAAA,EAC5B;AAAA,EACA,IAAI,YAAY;AAAA,IACd,OAAO,wBAAwB;AAAA,EACjC;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,2BAA2B,CAClC,YACA,OACQ;AAAA,EACR,MAAM,gBAAgB,WAAW;AAAA,EACjC,MAAM,gBAAgB,oBAAoB,WAAW,KAAK,EAAE,KAAK;AAAA,EACjE,IAAI,CAAC,MAAM,QAAQ,aAAa,GAAG;AAAA,IACjC,OAAO;AAAA,EACT;AAAA,EACA,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,MAAM,eAAe;AAAA,IAC9B,IAAI,CAAC,UAAS,EAAE,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,IACA,MAAM,UAAU,UAAS,GAAG,OAAO,IAAI,GAAG,UAAU;AAAA,IACpD,IAAI,CAAC,SAAS;AAAA,MACZ;AAAA,IACF;AAAA,IACA,MAAM,cAAc,WAAU,QAAQ,IAAI,EAAE,KAAK;AAAA,IACjD,MAAM,gBAAgB,wBAAwB,QAAQ,MAAM,EAAE,KAAK;AAAA,IACnE,MAAM,qBAAqB,6BACzB,QAAQ,aACR,UAAU,KAAK,CACjB,EAAE,KAAK;AAAA,IACP,MAAM,eAAe,oBAAoB,QAAQ,KAAK,EAAE,KAAK;AAAA,IAC7D,MAAM,UAAU,YAAY;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC,EAAE,KAAK;AAAA;AAAA,CAAM;AAAA,IACd,IAAI,SAAS;AAAA,MACX,IAAI,KAAK,OAAO;AAAA,IAClB;AAAA,EACF;AAAA,EACA,OAAO,YAAY,CAAC,eAAe,GAAG,GAAG,CAAC,EAAE,KAAK;AAAA,CAAI;AAAA;AAGvD,SAAS,SAAS,CAAC,OAAiC;AAAA,EAClD,OAAO,EAAE,OAAO,MAAM,QAAQ,GAAG,MAAM,MAAM,KAAK;AAAA;AAGpD,SAAS,aAAa,CAAC,MAAsB;AAAA,EAC3C,OAAO,KACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAAC,SAAS,KAAK,MAAM,EACzB,KAAK;AAAA,CAAI;AAAA;AAGd,SAAS,WAAW,CAAC,QAA4B;AAAA,EAC/C,MAAM,MAAgB,CAAC;AAAA,EACvB,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,SAAS,QAAQ;AAAA,IAC1B,MAAM,OAAO,MAAM,KAAK;AAAA,IACxB,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,KAAK,IAAI,IAAI;AAAA,IACb,IAAI,KAAK,IAAI;AAAA,EACf;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,mBAAmB,CAAC,OAAwB;AAAA,EACnD,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EACA,MAAM,QAAkB,CAAC;AAAA,EACzB,WAAW,KAAK,OAAO;AAAA,IACrB,IAAI,CAAC,UAAS,CAAC,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,WAAU,EAAE,KAAK,KAAK,WAAU,EAAE,IAAI,KAAK;AAAA,IACxD,MAAM,MACJ,WAAU,EAAE,SAAS,KAAK,WAAU,EAAE,oBAAoB,KAAK,WAAU,EAAE,WAAW;AAAA,IACxF,IAAI,KAAK;AAAA,MACP,MAAM,KAAK,IAAI,OAAO,OAAO;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,MAAM,KAAK,IAAI;AAAA,EACjB;AAAA,EACA,OAAO,YAAY,KAAK,EAAE,KAAK;AAAA,CAAI;AAAA;AAGrC,SAAS,SAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU;AAAA;AAGhD,SAAS,UAAS,CAAC,OAAwB;AAAA,EACzC,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;;;AC/RtC,SAAS,gBAAgB,CAC9B,KACA,OAMqB;AAAA,EACrB,MAAM,eAAe,OAAO,gBAAgB;AAAA,EAC5C,MAAM,mBAAmB,OAAO,oBAAoB;AAAA,EAEpD,MAAM,WAAW,0BAA0B,GAAG;AAAA,EAC9C,MAAM,UACJ,gBAAgB,KAAK,SAAS,SAAS,eACnC,GAAG,SAAS,MAAM,GAAG,YAAY;AAAA,KACjC;AAAA,EAEN,MAAM,QAAQ,IAAI,OACd,IAAI,CAAC,MAAM;AAAA,IACX,MAAM,QAAQ,OAAO,kBAAkB,EAAE;AAAA,IACzC,IAAI,CAAC,OAAO;AAAA,MACV,OAAO;AAAA,IACT;AAAA,IACA,OAAO,MAAM,KACT,EAAE,MAAM,EAAE,MAAM,UAAU,EAAE,UAAU,MAAM,EAAE,MAAM,MAAM,MAAM,KAAK,IACrE;AAAA,MACE,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,MAAM,EAAE;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,IACf;AAAA,GACL,EACA,OAAO,CAAC,MAAkC,QAAQ,CAAC,CAAC;AAAA,EAEvD,OAAO;AAAA,IACL,YAAY,IAAI;AAAA,IAChB,IAAI,IAAI;AAAA,IACR,WAAW,IAAI,eAAe,IAAI,eAAe,KAAK,IAAI,IAAI,KAAK;AAAA,IACnE,QAAQ,IAAI,QAAQ,IAAI,SAAS,EAAE,SAAS,IAAI,MAAM,QAAQ,IAAI,OAAO,IAAI;AAAA,IAC7E,SAAS,UAAU,UAAU;AAAA,IAC7B,OAAO,SAAS,MAAM,SAAS,IAAI,QAAQ;AAAA,IAC3C,WAAW,mBAAmB,iBAAiB,IAAI,SAAS,IAAI;AAAA,IAChE,mBAAmB,wBAAwB,IAAI,WAAW;AAAA,EAC5D;AAAA;AAGK,SAAS,gBAAgB,CAC9B,WACsE;AAAA,EACtE,IAAI,CAAC,MAAM,QAAQ,SAAS,KAAK,UAAU,WAAW,GAAG;AAAA,IACvD;AAAA,EACF;AAAA,EACA,MAAM,MAA2D,CAAC;AAAA,EAClE,WAAW,KAAK,WAAW;AAAA,IACzB,IAAI,CAAC,SAAS,CAAC,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,UAAU,EAAE,IAAI,GAAG,KAAK,KAAK;AAAA,IAC1C,IAAI,CAAC,MAAM;AAAA,MACT;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,MAAM,QAAQ,EAAE,KAAK,IAC/B,EAAE,MAAM,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,kBAAkB,KAAK,CAAC,CAAC,IACrE,CAAC;AAAA,IACL,MAAM,QAAQ,OAAO,EAAE,UAAU,YAAY,EAAE,UAAU,MAAM,SAAS,EAAE,QAAQ;AAAA,IAClF,IAAI,KAAK,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,EACjC;AAAA,EACA,OAAO,IAAI,SAAS,MAAM;AAAA;AAGrB,SAAS,uBAAuB,CAAC,aAO1B;AAAA,EACZ,IAAI,CAAC,MAAM,QAAQ,WAAW,KAAK,YAAY,WAAW,GAAG;AAAA,IAC3D;AAAA,EACF;AAAA,EACA,MAAM,MAKA,CAAC;AAAA,EACP,MAAM,OAAO,IAAI;AAAA,EACjB,WAAW,cAAc,aAAa;AAAA,IACpC,IAAI,CAAC,SAAS,UAAU,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IACA,MAAM,UAAU,UAAU,WAAW,QAAQ,GAAG,KAAK;AAAA,IACrD,IAAI,CAAC,SAAS;AAAA,MACZ;AAAA,IACF;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,SAAS,IAAI,IAAI,OAAO;AAAA,MACxB,MAAM;AAAA,MACN;AAAA;AAAA,IAEF,MAAM,WAAW,OAAO,aAAa,IAAI,WAAW,GAAG,KAAK;AAAA,IAC5D,IAAI,CAAC,YAAY,CAAC,kBAAkB,KAAK,QAAQ,GAAG;AAAA,MAClD;AAAA,IACF;AAAA,IACA,MAAM,YAAY,OAAO,aAAa,IAAI,KAAK,GAAG,KAAK;AAAA,IACvD,MAAM,aAAa,UAAU,WAAW,WAAW;AAAA,IACnD,MAAM,MAAM,GAAG,YAAY;AAAA,IAC3B,IAAI,KAAK,IAAI,GAAG,GAAG;AAAA,MACjB;AAAA,IACF;AAAA,IACA,KAAK,IAAI,GAAG;AAAA,IACZ,IAAI,KAAK;AAAA,MACP,KAAK;AAAA,MACL,WAAW;AAAA,MACX,YAAY,aAAa;AAAA,MACzB,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EACA,OAAO,IAAI,SAAS,MAAM;AAAA;;;ACnH5B,eAAsB,YAAY,CAChC,QACA,OAC8B;AAAA,EAC9B,MAAM,UAAU,MAAM,OAAO,IAAI,yBAAyB;AAAA,IACxD,SAAS,MAAM,IAAI;AAAA,IACnB,QAAQ,MAAM,IAAI;AAAA,IAClB,WAAW;AAAA,IACX,OAAO;AAAA,IACP,sBAAsB,MAAM,mBAAmB,OAAO;AAAA,EACxD,CAAC;AAAA,EACD,MAAM,kBAAkB,QAAQ,QAAQ,QAAQ;AAAA,EAChD,IAAI,MAAM,gBAAgB,KACxB,CAAC,MAAoC,SAAS,CAAC,KAAK,UAAU,EAAE,EAAE,MAAM,MAAM,IAAI,UACpF;AAAA,EAIA,IAAI,CAAC,OAAO,MAAM,IAAI,gBAAgB;AAAA,IACpC,MAAM,MAAM,oBAAoB,QAAQ;AAAA,MACtC,WAAW,MAAM,IAAI;AAAA,MACrB,UAAU,MAAM,IAAI;AAAA,MACpB,UAAU,MAAM,IAAI;AAAA,MACpB,kBAAkB,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EAIA,IAAI,CAAC,KAAK;AAAA,IACR,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,OAAO,IAAI,yBAAyB;AAAA,QACzD,SAAS,MAAM,IAAI;AAAA,QACnB,IAAI,MAAM,IAAI;AAAA,QACd,OAAO;AAAA,QACP,sBAAsB,MAAM,mBAAmB,OAAO;AAAA,MACxD,CAAC;AAAA,MACD,OAAO,QAAQ,QAAQ,SAAS,QAAQ;AAAA,MACxC,IAAI,SAAS,IAAI,KAAK,UAAU,KAAK,EAAE,MAAM,MAAM,IAAI,YAAY;AAAA,QACjE,MAAM;AAAA,MACR;AAAA,MACA,MAAM;AAAA,EAGV;AAAA,EAEA,IAAI,CAAC,KAAK;AAAA,IACR,MAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAAA,EAEA,MAAM,QAAQ,QAAQ,IAAI,KAAK,EAC5B,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC,EAChC,OAAO,CAAC,MAA6B,MAAM,IAAI;AAAA,EAClD,MAAM,gBAAgB,MAAM,SAAS,IAAI,MAAM,YAAY,QAAQ,KAAK,IAAI;AAAA,EAE5E,MAAM,OAAO,UAAU,IAAI,IAAI,KAAK;AAAA,EACpC,MAAM,KAAK,UAAU,IAAI,EAAE,KAAK,MAAM,IAAI;AAAA,EAC1C,MAAM,SAAS,MAAM,QAAQ,IAAI,MAAM,IAAK,IAAI,SAAuB;AAAA,EACvE,MAAM,cAAc,MAAM,QAAQ,IAAI,WAAW,IAAK,IAAI,cAA4B;AAAA,EACtF,MAAM,YAAY,MAAM,QAAQ,IAAI,SAAS,IAAK,IAAI,YAA0B;AAAA,EAChF,OAAO;AAAA,IACL,YAAY,MAAM,IAAI;AAAA,IACtB;AAAA,IACA,WAAW,UAAU,IAAI,SAAS;AAAA,IAClC,aAAa,UAAU,IAAI,WAAW;AAAA,IACtC,MAAM,UAAU,IAAI,IAAI;AAAA,IACxB,QAAQ,UAAU,IAAI,MAAM;AAAA,IAC5B;AAAA,IACA,UAAU,sBAAsB,IAAI;AAAA,IACpC;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF;AAAA;AAGF,eAAe,mBAAmB,CAChC,QACA,OAM8C;AAAA,EAC9C,IAAI;AAAA,EACJ,UAAS;AAAA,IACP,MAAM,OAAO,MAAM,OAAO,IAAI,yBAAyB;AAAA,MACrD,SAAS,MAAM;AAAA,MACf,IAAI,MAAM;AAAA,MACV,OAAO;AAAA,MACP;AAAA,MACA,sBAAsB,MAAM,mBAAmB,OAAO;AAAA,IACxD,CAAC;AAAA,IACD,MAAM,WAAW,QAAQ,KAAK,QAAQ;AAAA,IACtC,MAAM,QAAQ,SAAS,KACrB,CAAC,MAAoC,SAAS,CAAC,KAAK,UAAU,EAAE,EAAE,MAAM,MAAM,QAChF;AAAA,IACA,IAAI,OAAO;AAAA,MACT,OAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAO,SAAS,KAAK,iBAAiB,IAAI,KAAK,oBAAoB;AAAA,IACzE,MAAM,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI;AAAA,IAClD,IAAI,CAAC,MAAM;AAAA,MACT;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX;AAAA,EACA;AAAA;AAGF,eAAsB,mBAAmB,CACvC,QACA,OASgC;AAAA,EAChC,MAAM,MAAM,MAAM,SAAS;AAAA,EAC3B,MAAM,QAAQ,OAAO,SAAS,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI;AAAA,EACvE,MAAM,MAA6B,CAAC;AAAA,EACpC,MAAM,gBAAgB,MAAM,iBAAiB,CAAC;AAAA,EAC9C,MAAM,mBAAmB,MAAM,oBAAoB,CAAC;AAAA,EACpD,MAAM,qBAAqB,cAAc,SAAS,KAAK,iBAAiB,SAAS;AAAA,EACjF,MAAM,YAAY,qBAAqB,MAAM;AAAA,EAE7C,IAAI,eAAe,MAAM;AAAA,EACzB,UAAS;AAAA,IACP,MAAM,OAAO,MAAM,OAAO,IAAI,yBAAyB;AAAA,MACrD,SAAS,MAAM;AAAA,MACf,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,MAAM;AAAA,MACd,sBAAsB,MAAM,oBAAoB,qBAAqB,OAAO;AAAA,IAC9E,CAAC;AAAA,IACD,MAAM,WAAW,QAAQ,KAAK,QAAQ;AAAA,IACtC,IAAI,SAAS,WAAW,GAAG;AAAA,MACzB;AAAA,IACF;AAAA,IACA,WAAW,KAAK,UAAU;AAAA,MACxB,IAAI,CAAC,SAAS,CAAC,GAAG;AAAA,QAChB;AAAA,MACF;AAAA,MACA,IACE,sBACA,CAAC,0BAA0B,GAAG;AAAA,QAC5B;AAAA,QACA;AAAA,MACF,CAAC,GACD;AAAA,QACA;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,QAAQ,EAAE,KAAK,EAC1B,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC,EAChC,OAAO,CAAC,MAA6B,MAAM,IAAI;AAAA,MAClD,MAAM,gBAAgB,MAAM,SAAS,IAAI,MAAM,YAAY,QAAQ,KAAK,IAAI;AAAA,MAE5E,MAAM,OAAO,UAAU,EAAE,IAAI,KAAK;AAAA,MAClC,IAAI,KAAK;AAAA,QACP,YAAY,MAAM;AAAA,QAClB,IAAI,UAAU,EAAE,EAAE,KAAK;AAAA,QACvB,WAAW,UAAU,EAAE,SAAS;AAAA,QAChC,aAAa,UAAU,EAAE,WAAW;AAAA,QACpC,MAAM,UAAU,EAAE,IAAI;AAAA,QACtB,QAAQ,UAAU,EAAE,MAAM;AAAA,QAC1B;AAAA,QACA,UAAU,sBAAsB,IAAI;AAAA,QACpC,QAAQ,MAAM,QAAQ,EAAE,MAAM,IAAK,EAAE,SAAuB;AAAA,QAC5D,aAAa,MAAM,QAAQ,EAAE,WAAW,IAAK,EAAE,cAA4B;AAAA,QAC3E,OAAO;AAAA,QACP,WAAW,MAAM,QAAQ,EAAE,SAAS,IAAK,EAAE,YAA0B;AAAA,MACvE,CAAC;AAAA,MACD,IAAI,IAAI,UAAU,OAAO;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,UAAU,SAAS,CAAC,oBAAoB;AAAA,MAC9C;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,KAAK,UAAU;AAAA,MAClB;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,SAAS,GAAG,EAAE;AAAA,IAC3B,MAAM,aAAa,SAAS,IAAI,IAAI,UAAU,KAAK,EAAE,IAAI;AAAA,IACzD,IAAI,CAAC,cAAc,eAAe,cAAc;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,eAAe;AAAA,EACjB;AAAA,EAGA,IAAI,KAAK,CAAC,GAAG,MAAM,OAAO,WAAW,EAAE,EAAE,IAAI,OAAO,WAAW,EAAE,EAAE,CAAC;AAAA,EACpE,OAAO;AAAA;AAGF,SAAS,yBAAyB,CACvC,KACA,OACS;AAAA,EACT,MAAM,gBAAgB,MAAM,iBAAiB,CAAC;AAAA,EAC9C,MAAM,mBAAmB,MAAM,oBAAoB,CAAC;AAAA,EACpD,MAAM,QAAQ,IAAI;AAAA,EAClB,WAAW,KAAK,QAAQ,IAAI,SAAS,GAAG;AAAA,IACtC,IAAI,CAAC,SAAS,CAAC,GAAG;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,OAAO,UAAU,EAAE,IAAI,GAAG,KAAK;AAAA,IACrC,IAAI,MAAM;AAAA,MACR,MAAM,IAAI,IAAI;AAAA,IAChB;AAAA,EACF;AAAA,EACA,IAAI,cAAc,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG;AAAA,IAClD,OAAO;AAAA,EACT;AAAA,EACA,IAAI,iBAAiB,KAAK,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,GAAG;AAAA,IACpD,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,eAAsB,WAAW,CAC/B,QACA,OACgC;AAAA,EAChC,MAAM,MAA6B,CAAC;AAAA,EACpC,IAAI;AAAA,EAEJ,UAAS;AAAA,IACP,MAAM,OAAO,MAAM,OAAO,IAAI,yBAAyB;AAAA,MACrD,SAAS,MAAM;AAAA,MACf,IAAI,MAAM;AAAA,MACV,OAAO;AAAA,MACP;AAAA,MACA,sBAAsB,MAAM,mBAAmB,OAAO;AAAA,IACxD,CAAC;AAAA,IACD,MAAM,WAAW,QAAQ,KAAK,QAAQ;AAAA,IACtC,WAAW,KAAK,UAAU;AAAA,MACxB,IAAI,CAAC,SAAS,CAAC,GAAG;AAAA,QAChB;AAAA,MACF;AAAA,MACA,MAAM,QAAQ,QAAQ,EAAE,KAAK,EAC1B,IAAI,CAAC,MAAM,mBAAmB,CAAC,CAAC,EAChC,OAAO,CAAC,MAA6B,MAAM,IAAI;AAAA,MAClD,MAAM,gBAAgB,MAAM,SAAS,IAAI,MAAM,YAAY,QAAQ,KAAK,IAAI;AAAA,MAE5E,MAAM,OAAO,UAAU,EAAE,IAAI,KAAK;AAAA,MAClC,IAAI,KAAK;AAAA,QACP,YAAY,MAAM;AAAA,QAClB,IAAI,UAAU,EAAE,EAAE,KAAK;AAAA,QACvB,WAAW,UAAU,EAAE,SAAS;AAAA,QAChC,aAAa,UAAU,EAAE,WAAW;AAAA,QACpC,MAAM,UAAU,EAAE,IAAI;AAAA,QACtB,QAAQ,UAAU,EAAE,MAAM;AAAA,QAC1B;AAAA,QACA,UAAU,sBAAsB,IAAI;AAAA,QACpC,QAAQ,MAAM,QAAQ,EAAE,MAAM,IAAK,EAAE,SAAuB;AAAA,QAC5D,aAAa,MAAM,QAAQ,EAAE,WAAW,IAAK,EAAE,cAA4B;AAAA,QAC3E,OAAO;AAAA,QACP,WAAW,MAAM,QAAQ,EAAE,SAAS,IAAK,EAAE,YAA0B;AAAA,MACvE,CAAC;AAAA,IACH;AAAA,IACA,MAAM,OAAO,SAAS,KAAK,iBAAiB,IAAI,KAAK,oBAAoB;AAAA,IACzE,MAAM,OAAO,OAAO,UAAU,KAAK,WAAW,IAAI;AAAA,IAClD,IAAI,CAAC,MAAM;AAAA,MACT;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX;AAAA,EAGA,IAAI,KAAK,CAAC,GAAG,MAAM,OAAO,WAAW,EAAE,EAAE,IAAI,OAAO,WAAW,EAAE,EAAE,CAAC;AAAA,EACpE,OAAO;AAAA;;;ACnTF,SAAS,oBAAoB,CAAC,OAAgC;AAAA,EACnE,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,MAAM,IAAI,IAAI,KAAK;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,IAAI,MAAM,gBAAgB,OAAO;AAAA;AAAA,EAGzC,IAAI,CAAC,iBAAiB,KAAK,IAAI,QAAQ,GAAG;AAAA,IACxC,MAAM,IAAI,MAAM,8BAA8B,IAAI,UAAU;AAAA,EAC9D;AAAA,EAEA,MAAM,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAAA,EAEpD,IAAI,MAAM,SAAS,KAAK,MAAM,OAAO,YAAY;AAAA,IAC/C,MAAM,IAAI,MAAM,+BAA+B,IAAI,UAAU;AAAA,EAC/D;AAAA,EAEA,MAAM,aAAa,MAAM;AAAA,EACzB,MAAM,cAAc,MAAM;AAAA,EAC1B,MAAM,QAAQ,YAAY,MAAM,aAAa;AAAA,EAC7C,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MAAM,iCAAiC,aAAa;AAAA,EAChE;AAAA,EAEA,MAAM,SAAS,MAAM;AAAA,EACrB,IAAI,OAAO,UAAU,GAAG;AAAA,IACtB,MAAM,IAAI,MAAM,6BAA6B,aAAa;AAAA,EAC5D;AAAA,EACA,MAAM,UAAU,OAAO,MAAM,GAAG,EAAE;AAAA,EAClC,MAAM,SAAS,OAAO,MAAM,EAAE;AAAA,EAC9B,MAAM,aAAa,GAAG,WAAW;AAAA,EAEjC,MAAM,gBAAgB,IAAI,aAAa,IAAI,WAAW;AAAA,EACtD,MAAM,iBACJ,iBAAiB,kBAAkB,KAAK,aAAa,IAAI,gBAAgB;AAAA,EAI3E,MAAM,SAAS,IAAI,aAAa,IAAI,KAAK;AAAA,EACzC,MAAM,oBAAoB,QAAQ,iBAAiB,CAAC,MAAM;AAAA,EAE1D,MAAM,gBAAgB,GAAG,IAAI,aAAa,IAAI;AAAA,EAC9C,OAAO,EAAE,eAAe,YAAY,YAAY,gBAAgB,KAAK,OAAO,kBAAkB;AAAA;;;AC7CzF,SAAS,cAAc,CAAC,OAA0B;AAAA,EACvD,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,CAAC,SAAS;AAAA,IACZ,MAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AAAA,EAEA,IAAI;AAAA,IACF,MAAM,MAAM,qBAAqB,OAAO;AAAA,IACxC,OAAO,EAAE,MAAM,OAAO,IAAI;AAAA,IAC1B,MAAM;AAAA,EAIR,IAAI,SAAS,OAAO,GAAG;AAAA,IACrB,OAAO,EAAE,MAAM,QAAQ,QAAQ,QAAQ;AAAA,EACzC;AAAA,EACA,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,IAC3B,OAAO,EAAE,MAAM,WAAW,SAAS,QAAQ;AAAA,EAC7C;AAAA,EACA,IAAI,YAAY,OAAO,GAAG;AAAA,IACxB,OAAO,EAAE,MAAM,WAAW,SAAS,QAAQ;AAAA,EAC7C;AAAA,EAGA,OAAO,EAAE,MAAM,WAAW,SAAS,IAAI,UAAU;AAAA;;;AChC5C,SAAS,uBAAuB,CAAC,KAA4C;AAAA,EAClF,IAAI,IAAI,mBAAmB;AAAA,IACzB,QAAQ,MACN;AAAA,IACE,+DACJ;AAAA,EACF;AAAA;;;ACqBF,IAAM,YAAY;AAClB,IAAM,aAAa;AACnB,IAAM,mBAAmB;AACzB,IAAM,gBAAgB;AAOf,SAAS,mBAAmB,CAAC,MAA+B;AAAA,EACjE,MAAM,WAA4B,CAAC;AAAA,EACnC,MAAM,KAAK;AAAA,EACX,IAAI,YAAY;AAAA,EAChB,IAAI;AAAA,EAEJ,QAAQ,QAAQ,GAAG,KAAK,IAAI,OAAO,MAAM;AAAA,IACvC,IAAI,MAAM,QAAQ,WAAW;AAAA,MAC3B,SAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,WAAW,MAAM,KAAK,EAAE,CAAC;AAAA,IAC1E;AAAA,IAEA,SAAS,MAAM,MAAM,QAAQ,QAAQ,SAAS,UAAU,WAAW;AAAA,IACnE,IAAI,QAAQ,MAAM;AAAA,MAChB,SAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,EAAE,CAAC;AAAA,IACnE,EAAO,SAAI,QAAQ,MAAM;AAAA,MACvB,SAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM,OAAO,EAAE,MAAM,KAAK,EAAE,CAAC;AAAA,IACnE,EAAO,SAAI,UAAU,MAAM;AAAA,MACzB,SAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,KAAK,EAAE,CAAC;AAAA,IACvE,EAAO,SAAI,UAAU,MAAM;AAAA,MACzB,SAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,EAAE,QAAQ,KAAK,EAAE,CAAC;AAAA,IACvE,EAAO,SAAI,WAAW,QAAQ,YAAY,MAAM;AAAA,MAC9C,SAAS,KAAK,EAAE,MAAM,QAAQ,KAAK,SAAS,MAAM,SAAS,CAAC;AAAA,IAC9D,EAAO,SAAI,WAAW,MAAM;AAAA,MAC1B,SAAS,KAAK,EAAE,MAAM,QAAQ,KAAK,QAAQ,CAAC;AAAA,IAC9C;AAAA,IAEA,YAAY,MAAM,QAAQ,MAAM,GAAG;AAAA,EACrC;AAAA,EAEA,IAAI,YAAY,KAAK,QAAQ;AAAA,IAC3B,SAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,EAAE,CAAC;AAAA,EAC7D;AAAA,EAEA,OAAO,SAAS,SAAS,IAAI,WAAW,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC;AAAA;AAQ1D,SAAS,oBAAoB,CAAC,MAAsC;AAAA,EACzE,MAAM,QAAQ,KAAK,MAAM;AAAA,CAAI;AAAA,EAC7B,MAAM,WAA8B,CAAC;AAAA,EACrC,IAAI,WAAW;AAAA,EACf,IAAI,MAAM;AAAA,EAEV,OAAO,MAAM,MAAM,QAAQ;AAAA,IACzB,MAAM,OAAO,MAAM;AAAA,IAGnB,IAAI,iBAAiB,KAAK,IAAI,GAAG;AAAA,MAC/B;AAAA,MACA,MAAM,YAAsB,CAAC;AAAA,MAC7B,OAAO,MAAM,MAAM,UAAU,CAAC,iBAAiB,KAAK,MAAM,IAAK,GAAG;AAAA,QAChE,UAAU,KAAK,MAAM,IAAK;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,IAAI,MAAM,MAAM,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,MACA,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,KAAK;AAAA,CAAI,EAAE,CAAC;AAAA,MACzD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IAGA,MAAM,aAAa,KAAK,MAAM,aAAa;AAAA,IAC3C,IAAI,YAAY;AAAA,MACd,MAAM,aAAuB,CAAC;AAAA,MAC9B,OAAO,MAAM,MAAM,QAAQ;AAAA,QACzB,MAAM,KAAK,MAAM,KAAM,MAAM,aAAa;AAAA,QAC1C,IAAI,CAAC,IAAI;AAAA,UACP;AAAA,QACF;AAAA,QACA,WAAW,KAAK,GAAG,EAAG;AAAA,QACtB;AAAA,MACF;AAAA,MACA,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,oBAAoB,WAAW,KAAK;AAAA,CAAI,CAAC;AAAA,MACrD,CAAC;AAAA,MACD;AAAA,IACF;AAAA,IAGA,IAAI,UAAU,KAAK,IAAI,GAAG;AAAA,MACxB,WAAW;AAAA,MACX,MAAM,YAAY,EAAE,OAAO,UAAU,KAAK,OAAO,UAAU,SAAS,WAAW,SAAS,CAAC;AAAA,MACzF;AAAA,IACF;AAAA,IAGA,IAAI,WAAW,KAAK,IAAI,GAAG;AAAA,MACzB,WAAW;AAAA,MACX,MAAM,YAAY,EAAE,OAAO,UAAU,KAAK,OAAO,WAAW,SAAS,YAAY,SAAS,CAAC;AAAA,MAC3F;AAAA,IACF;AAAA,IAGA,MAAM,YAAsB,CAAC;AAAA,IAC7B,OAAO,MAAM,MAAM,QAAQ;AAAA,MACzB,MAAM,IAAI,MAAM;AAAA,MAChB,IACE,UAAU,KAAK,CAAC,KAChB,WAAW,KAAK,CAAC,KACjB,iBAAiB,KAAK,CAAC,KACvB,cAAc,KAAK,CAAC,GACpB;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAAA,IACA,MAAM,UAAU,UAAU,KAAK;AAAA,CAAI;AAAA,IACnC,IAAI,QAAQ,KAAK,GAAG;AAAA,MAClB,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,UAAU,oBAAoB,QAAQ,SAAS;AAAA,CAAI,IAAI,UAAU,GAAG;AAAA,CAAW;AAAA,MACjF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,IAAI,CAAC,UAAU;AAAA,IACb,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,CAAC,EAAE,MAAM,aAAa,SAAS,CAAC;AAAA;AAGzC,SAAS,WAAW,CAAC,OAMV;AAAA,EACT,QAAQ,OAAO,UAAU,OAAO,SAAS,aAAa;AAAA,EACtD,IAAI,MAAM;AAAA,EAGV,MAAM,aAAa,MAAM,UAAW,MAAM,OAAO;AAAA,EACjD,MAAM,aAAa,WAAW,GAAI;AAAA,EAElC,IAAI,gBAAgB;AAAA,EACpB,IAAI,eAAmC,CAAC;AAAA,EAExC,OAAO,MAAM,MAAM,QAAQ;AAAA,IACzB,MAAM,QAAQ,MAAM,KAAM,MAAM,OAAO;AAAA,IACvC,IAAI,CAAC,OAAO;AAAA,MACV;AAAA,IACF;AAAA,IAGA,MAAM,SAAS,MAAM,GAAI,UAAU,aAAa,IAAI,IAAI;AAAA,IACxD,MAAM,UAAU,MAAM;AAAA,IAEtB,IAAI,kBAAkB,MAAM,WAAW,eAAe;AAAA,MACpD,SAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN;AAAA,WACI,gBAAgB,IAAI,EAAE,QAAQ,cAAc,IAAI,CAAC;AAAA,QACrD,UAAU;AAAA,MACZ,CAAC;AAAA,MACD,eAAe,CAAC;AAAA,IAClB;AAAA,IAEA,gBAAgB;AAAA,IAChB,aAAa,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,UAAU,oBAAoB,OAAO;AAAA,IACvC,CAAC;AAAA,IACD;AAAA,EACF;AAAA,EAEA,IAAI,aAAa,SAAS,GAAG;AAAA,IAC3B,SAAS,KAAK;AAAA,MACZ,MAAM;AAAA,MACN;AAAA,SACI,gBAAgB,IAAI,EAAE,QAAQ,cAAc,IAAI,CAAC;AAAA,MACrD,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,OAAO;AAAA;;;AC/NT,qBAAS;AACT,qBAAS;AAIT,IAAM,gBAAgB,MAAM,OAAO;AAEnC,eAAsB,sBAAsB,CAAC,OAM3B;AAAA,EAChB,MAAM,eAAe,MAAM,SAAS,MAAM,QAAQ;AAAA,EAClD,MAAM,YAAY,MAAM,KAAK,YAAY;AAAA,EACzC,IAAI,CAAC,UAAU,OAAO,GAAG;AAAA,IACvB,MAAM,IAAI,MAAM,kCAAkC,MAAM,UAAU;AAAA,EACpE;AAAA,EACA,IAAI,UAAU,OAAO,eAAe;AAAA,IAClC,MAAM,IAAI,MACR,mBAAmB,KAAK,MAAM,UAAU,OAAO,OAAO,IAAI,iCAC5D;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAAM,UAAS,YAAY;AAAA,EACzC,MAAM,WAAW,UAAS,YAAY;AAAA,EAEtC,MAAM,iBAAiB,MAAM,MAAM,OAAO,IAAI,8BAA8B;AAAA,IAC1E;AAAA,IACA,QAAQ,MAAM;AAAA,EAChB,CAAC;AAAA,EAED,IAAI,SAAS,cAAc,KAAK,eAAe,OAAO,OAAO;AAAA,IAC3D,MAAM,SAAS,OAAO,eAAe,UAAU,WAAW,eAAe,QAAQ;AAAA,IACjF,MAAM,IAAI,MAAM,4CAA4C,QAAQ;AAAA,EACtE;AAAA,EAEA,MAAM,YAAY,UAAU,eAAe,UAAU;AAAA,EACrD,MAAM,SAAS,UAAU,eAAe,OAAO;AAAA,EAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ;AAAA,IACzB,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA,EAEA,MAAM,aAAa,MAAM,MAAM,WAAW;AAAA,IACxC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,kBAAkB,OAAO,MAAM,MAAM;AAAA,IACvC;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AAAA,EACD,IAAI,CAAC,WAAW,IAAI;AAAA,IAClB,MAAM,OAAO,MAAM,WAAW,KAAK,EAAE,MAAM,MAAM,EAAE;AAAA,IACnD,MAAM,IAAI,MACR,2CAA2C,WAAW,UAAU,OAAO,KAAK,SAAS,IACvF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,MAAM,MAAM,OAAO,IAAI,gCAAgC;AAAA,IAC1E,OAAO,CAAC,EAAE,IAAI,QAAQ,OAAO,SAAS,CAAC;AAAA,IACvC,YAAY,MAAM;AAAA,IAClB,WAAW,MAAM;AAAA,IACjB,iBAAiB,MAAM,gBAAgB,KAAK,KAAK;AAAA,EACnD,CAAC;AAAA,EAED,IAAI,CAAC,SAAS,YAAY,KAAK,aAAa,OAAO,MAAM;AAAA,IACvD,MAAM,SACJ,SAAS,YAAY,KAAK,OAAO,aAAa,UAAU,WACpD,aAAa,QACb;AAAA,IACN,MAAM,IAAI,MAAM,8CAA8C,QAAQ;AAAA,EACxE;AAAA;;;AC7DF,qBAAS,wBAAU;AACnB,iBAAS;AAET,SAAS,kBAAkB,CAAC,MAKV;AAAA,EAChB,MAAM,MAAM,KAAK,YAAY,IAAI,YAAY;AAAA,EAC7C,MAAM,MAAM,KAAK,YAAY,IAAI,YAAY;AAAA,EAE7C,IAAI,OAAO,eAAe,OAAO,OAAO;AAAA,IACtC,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,gBAAgB,OAAO,eAAe,OAAO,SAAS,OAAO,QAAQ;AAAA,IAC9E,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,gBAAgB,OAAO,QAAQ;AAAA,IACxC,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,eAAe,OAAO,OAAO;AAAA,IACtC,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAO,gBAAgB,OAAO,QAAQ;AAAA,IACxC,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,mBAAmB,OAAO,cAAc,OAAO,MAAM;AAAA,IAC9D,OAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAO,sBAAsB,OAAO,QAAQ;AAAA,IAC9C,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,KAAK,QAAQ,KAAK,SAAS;AAAA,EACxC,MAAM,QAAQ,KAAK,MAAM,wBAAwB;AAAA,EACjD,OAAO,QAAQ,MAAM,GAAI,YAAY,IAAI;AAAA;AAG3C,IAAM,eAAe,IAAI,IAAI,CAAC,UAAU,QAAQ,MAAM,CAAC;AAEvD,SAAS,iBAAiB,CAAC,MAAuB;AAAA,EAChD,OAAO,0DAA0D,KAAK,IAAI;AAAA;AAG5E,eAAe,wBAAwB,CAAC,OAKpB;AAAA,EAClB,MAAM,WAAW,MAAM,kBAAkB;AAAA,IACvC,MAAM,MAAM;AAAA,IACZ,KAAK,MAAM;AAAA,IACX,SAAS,MAAM;AAAA,IACf,eAAe,GAAG,MAAM;AAAA,IACxB,SAAS,EAAE,WAAW,KAAK;AAAA,EAC7B,CAAC;AAAA,EACD,MAAM,OAAO,MAAM,UAAS,UAAU,MAAM;AAAA,EAC5C,IAAI,kBAAkB,IAAI,GAAG;AAAA,IAC3B,MAAM,IAAI,mBACR,6EACF;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,eAAe,IAAI,EAAE,KAAK;AAAA,EAC3C,MAAM,WAAW,GAAG,MAAM,OAAO,QAAQ,gBAAgB,GAAG;AAAA,EAC5D,MAAM,eAAe,OAAK,MAAM,SAAS,QAAQ;AAAA,EACjD,MAAM,WAAU,cAAc,UAAU,MAAM;AAAA,EAC9C,OAAO;AAAA;AAGT,eAAsB,oBAAoB,CAAC,OAGC;AAAA,EAC1C,MAAM,kBAAkD,CAAC;AAAA,EACzD,MAAM,eAAe,MAAM,mBAAmB;AAAA,EAE9C,WAAW,WAAW,MAAM,UAAU;AAAA,IACpC,WAAW,QAAQ,QAAQ,SAAS,CAAC,GAAG;AAAA,MACtC,IAAI,gBAAgB,KAAK,KAAK;AAAA,QAC5B;AAAA,MACF;AAAA,MAEA,MAAM,WAAW,KAAK,QAAQ,QAAQ,aAAa,IAAI,KAAK,IAAI;AAAA,MAChE,MAAM,MAAM,WACR,KAAK,eAAe,KAAK,uBACzB,KAAK,wBAAwB,KAAK;AAAA,MACtC,IAAI,CAAC,KAAK;AAAA,QACR;AAAA,MACF;AAAA,MAEA,IAAI,UAAU;AAAA,QACZ,IAAI;AAAA,UACF,MAAM,OAAO,MAAM,yBAAyB;AAAA,YAC1C,MAAM,MAAM;AAAA,YACZ,QAAQ,KAAK;AAAA,YACb;AAAA,YACA,SAAS;AAAA,UACX,CAAC;AAAA,UACD,gBAAgB,KAAK,MAAM,EAAE,IAAI,MAAM,KAAK;AAAA,UAC5C,OAAO,KAAK;AAAA,UACZ,IAAI,EAAE,eAAe,qBAAqB;AAAA,YACxC,MAAM;AAAA,UACR;AAAA,UACA,MAAM,OAAO,MAAM,uBAAuB;AAAA,YACxC,SAAS;AAAA,YACT,QAAQ,KAAK;AAAA,YACb,OAAO,IAAI;AAAA,UACb,CAAC;AAAA,UACD,gBAAgB,KAAK,MAAM;AAAA,YACzB,IAAI;AAAA,YACJ,OAAO,IAAI;AAAA,YACX,YAAY,IAAI;AAAA,YAChB;AAAA,UACF;AAAA,UACA,QAAQ,MAAM,0BAA0B,KAAK,OAAO,IAAI,SAAS;AAAA;AAAA,MAErE,EAAO;AAAA,QACL,MAAM,MAAM,mBAAmB,IAAI;AAAA,QACnC,MAAM,SAAS,MAAM,qBAAqB;AAAA,UACxC,MAAM,MAAM;AAAA,UACZ;AAAA,UACA,SAAS;AAAA,UACT,eAAe,GAAG,KAAK,KAAK,MAAM,IAAI,QAAQ;AAAA,QAChD,CAAC;AAAA,QACD,IAAI,CAAC,OAAO,IAAI;AAAA,UACd,gBAAgB,KAAK,MAAM;AAAA,eACtB;AAAA,YACH,MAAM,MAAM,uBAAuB;AAAA,cACjC,SAAS;AAAA,cACT,QAAQ,KAAK;AAAA,cACb,OAAO,OAAO;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,UACA,QAAQ,MAAM,0BAA0B,KAAK,OAAO,OAAO,OAAO;AAAA,QACpE,EAAO;AAAA,UACL,gBAAgB,KAAK,MAAM;AAAA;AAAA;AAAA,IAGjC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;;;ACzJT,SAAS,UAAS,CAAC,OAAoC;AAAA,EACrD,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;AAG7C,eAAsB,gBAAgB,CACpC,QACA,OAIgD;AAAA,EAChD,MAAM,aAAa,MAAM,IAAI,eAAe;AAAA,EAC5C,MAAM,SAAS,MAAM,IAAI,cAAc,aAAa,IAAI,MAAM,IAAI,KAAK;AAAA,EACvE,IAAI,CAAC,QAAQ;AAAA,IACX,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,CAAC,MAAM,IAAI,aAAa,aAAa,GAAG;AAAA,IAC1C,OAAO,EAAE,IAAI,QAAQ,QAAQ,IAAI,WAAW;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAO,MAAM,OAAO,IAAI,yBAAyB;AAAA,IACrD,SAAS,MAAM;AAAA,IACf,IAAI;AAAA,IACJ,OAAO;AAAA,EACT,CAAC;AAAA,EACD,OAAO,QAAQ,QAAQ,SAAS,IAAI,IAAI,KAAK,WAAW,SAAS;AAAA,EACjE,MAAM,iBAAiB,SAAS,IAAI,IAAI,WAAU,KAAK,WAAW,IAAI;AAAA,EACtE,IAAI,mBAAmB,WAAW;AAAA,IAChC,OAAO,EAAE,IAAI,QAAQ,QAAQ,EAAE;AAAA,EACjC;AAAA,EACA,OAAO,EAAE,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAAA;AAG3C,SAAS,mBAAmB,CACjC,GACuD;AAAA,EACvD,QAAQ,YAAY,YAAY,WAAW,cAAc,SAAS;AAAA,EAClE,OAAO;AAAA;;;ACrBT,eAAsB,gBAAgB,CAAC,OAIF;AAAA,EACnC,MAAM,SAAS,eAAe,MAAM,WAAW;AAAA,EAC/C,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,MAAM,IAAI,MACR,+FACF;AAAA,EACF;AAAA,EACA,MAAM,eAAe,MAAM,IAAI,sBAAsB,MAAM,QAAQ,SAAS;AAAA,EAE5E,OAAO,MAAM,IAAI,gBAAgB;AAAA,IAC/B,cAAc,OAAO,SAAS,QAAQ,OAAO,IAAI,gBAAgB;AAAA,IACjE,MAAM,YAAY;AAAA,MAChB,IAAI,OAAO,SAAS,OAAO;AAAA,QACzB,QAAQ,cAAQ;AAAA,QAChB,wBAAwB,IAAG;AAAA,QAC3B,QAAQ,iBAAQ,gBAAS,MAAM,MAAM,IAAI,sBAAsB,KAAI,aAAa;AAAA,QAChF,MAAM,oBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,QAC/D,MAAM,OAAM,MAAM,aAAa,SAAQ,EAAE,WAAK,oCAAiB,CAAC;AAAA,QAChE,MAAM,UAAS,MAAM,iBAAiB,SAAQ,EAAE,WAAW,KAAI,YAAY,UAAI,CAAC;AAAA,QAChF,MAAM,mBAAkB,MAAM,qBAAqB,EAAE,aAAM,UAAU,CAAC,IAAG,EAAE,CAAC;AAAA,QAC5E,MAAM,gBAAe,OAAO,SAAS,MAAM,QAAQ,cAAc,EAAE;AAAA,QACnE,MAAM,WAAU,iBAAiB,MAAK,EAAE,6BAAc,qCAAkB,kCAAgB,CAAC;AAAA,QACzF,OAAO,WAAW,EAAE,mBAAS,gBAAO,CAAC;AAAA,MACvC;AAAA,MAEA,MAAM,KAAK,MAAM,QAAQ,IAAI,KAAK;AAAA,MAClC,IAAI,CAAC,IAAI;AAAA,QACP,MAAM,IAAI,MAAM,mEAAmE;AAAA,MACrF;AAAA,MAEA,MAAM,MAAM,IAAI,wCAAwC;AAAA,QACtD;AAAA,QACA,UAAU,CAAC,OAAO,OAAO;AAAA,MAC3B,CAAC;AAAA,MAED,MAAM,mBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,MAC/D,QAAQ,QAAQ,MAAM,kBAAkB,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,MAC1F,MAAM,YAAY,MAAM,iBAAiB,QAAQ,OAAO,OAAO;AAAA,MAC/D,MAAM,MAAM;AAAA,QACV,eAAe,iBAAiB,gBAAgB;AAAA,QAChD,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,gBAAgB,MAAM,QAAQ,UAAU,KAAK,KAAK;AAAA,QAClD,KAAK,MAAM;AAAA,MACb;AAAA,MAEA,MAAM,MAAM,MAAM,aAAa,QAAQ,EAAE,KAAK,iBAAiB,CAAC;AAAA,MAChE,MAAM,SAAS,MAAM,iBAAiB,QAAQ,EAAE,WAAW,IAAI,CAAC;AAAA,MAChE,MAAM,kBAAkB,MAAM,qBAAqB,EAAE,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC;AAAA,MAC5E,MAAM,eAAe,OAAO,SAAS,MAAM,QAAQ,cAAc,EAAE;AAAA,MACnE,MAAM,UAAU,iBAAiB,KAAK,EAAE,cAAc,kBAAkB,gBAAgB,CAAC;AAAA,MACzF,OAAO,WAAW,EAAE,SAAS,OAAO,CAAC;AAAA;AAAA,EAEzC,CAAC;AAAA;AAGH,eAAsB,iBAAiB,CAAC,OAIH;AAAA,EACnC,MAAM,SAAS,eAAe,MAAM,WAAW;AAAA,EAC/C,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,MAAM,IAAI,MACR,gGACF;AAAA,EACF;AAAA,EACA,MAAM,eAAe,MAAM,IAAI,sBAAsB,MAAM,QAAQ,SAAS;AAAA,EAE5E,OAAO,MAAM,IAAI,gBAAgB;AAAA,IAC/B,cAAc,OAAO,SAAS,QAAQ,OAAO,IAAI,gBAAgB;AAAA,IACjE,MAAM,YAAY;AAAA,MAChB,MAAM,gBAAgB,qBAAqB,MAAM,QAAQ,YAAY;AAAA,MACrE,MAAM,mBAAmB,qBAAqB,MAAM,QAAQ,eAAe;AAAA,MAC3E,MAAM,qBAAqB,cAAc,SAAS,KAAK,iBAAiB,SAAS;AAAA,MAEjF,IAAI,OAAO,SAAS,OAAO;AAAA,QACzB,IAAI,oBAAoB;AAAA,UACtB,MAAM,IAAI,MACR,4FACF;AAAA,QACF;AAAA,QACA,QAAQ,QAAQ;AAAA,QAChB,wBAAwB,GAAG;AAAA,QAC3B,QAAQ,iBAAQ,gBAAS,MAAM,MAAM,IAAI,sBAAsB,IAAI,aAAa;AAAA,QAChF,MAAM,oBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,QAC/D,MAAM,MAAM,MAAM,aAAa,SAAQ,EAAE,KAAK,oCAAiB,CAAC;AAAA,QAChE,MAAM,UAAS,IAAI,aAAa,IAAI;AAAA,QACpC,MAAM,kBAAiB,MAAM,YAAY,SAAQ;AAAA,UAC/C,WAAW,IAAI;AAAA,UACf,UAAU;AAAA,UACV;AAAA,QACF,CAAC;AAAA,QACD,MAAM,mBAAkB,MAAM,qBAAqB,EAAE,aAAM,UAAU,gBAAe,CAAC;AAAA,QACrF,MAAM,gBAAe,OAAO,SAAS,MAAM,QAAQ,cAAc,EAAE;AAAA,QACnE,OAAO,WAAW;AAAA,UAChB,UAAU,gBACP,IAAI,CAAC,MAAM,iBAAiB,GAAG,EAAE,6BAAc,qCAAkB,kCAAgB,CAAC,CAAC,EACnF,IAAI,mBAAmB;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,MAEA,QAAQ,QAAQ,MAAM,kBAAkB,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,MAE1F,MAAM,MAAM,IAAI,wCAAwC;AAAA,QACtD;AAAA,QACA,UAAU,CAAC,OAAO,OAAO;AAAA,MAC3B,CAAC;AAAA,MAED,MAAM,YAAY,MAAM,iBAAiB,QAAQ,OAAO,OAAO;AAAA,MAE/D,MAAM,WAAW,MAAM,QAAQ,UAAU,KAAK;AAAA,MAC9C,MAAM,KAAK,MAAM,QAAQ,IAAI,KAAK;AAAA,MAGlC,IAAI,CAAC,YAAY,CAAC,IAAI;AAAA,QACpB,MAAM,oBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,QAC/D,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAAA,QAC5C,MAAM,SAAS,qCAAqC;AAAA,UAClD,QAAQ,MAAM,QAAQ;AAAA,UACtB;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,MAAM,kBAAkB,MAAM,oBAAoB,QAAQ;AAAA,UACxD;AAAA,UACA;AAAA,UACA,QAAQ,MAAM,QAAQ,QAAQ,KAAK;AAAA,UACnC;AAAA,UACA,kBAAkB,qBAAoB;AAAA,UACtC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,MAAM,mBAAkB,MAAM,qBAAqB,EAAE,MAAM,UAAU,gBAAgB,CAAC;AAAA,QACtF,MAAM,gBAAe,OAAO,SAAS,MAAM,QAAQ,cAAc,EAAE;AAAA,QACnE,OAAO,WAAW;AAAA,UAChB,YAAY;AAAA,UACZ,UAAU,gBAAgB,IAAI,CAAC,MAC7B,iBAAiB,GAAG,EAAE,6BAAc,qCAAkB,kCAAgB,CAAC,CACzE;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MAEA,IAAI,oBAAoB;AAAA,QACtB,MAAM,IAAI,MACR,yFACF;AAAA,MACF;AAAA,MAEA,MAAM,SACJ,YACC,OAAO,YAAY;AAAA,QAClB,MAAM,MAAM;AAAA,UACV,eAAe,iBAAiB,gBAAgB;AAAA,UAChD,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,KAAK,MAAM;AAAA,QACb;AAAA,QACA,MAAM,oBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,QAC/D,MAAM,MAAM,MAAM,aAAa,QAAQ,EAAE,KAAK,oCAAiB,CAAC;AAAA,QAChE,OAAO,IAAI,aAAa,IAAI;AAAA,SAC3B;AAAA,MAEL,MAAM,mBAAmB,QAAQ,MAAM,QAAQ,gBAAgB;AAAA,MAC/D,MAAM,iBAAiB,MAAM,YAAY,QAAQ;AAAA,QAC/C;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,MACD,MAAM,kBAAkB,MAAM,qBAAqB,EAAE,MAAM,UAAU,eAAe,CAAC;AAAA,MACrF,MAAM,eAAe,OAAO,SAAS,MAAM,QAAQ,cAAc,EAAE;AAAA,MACnE,OAAO,WAAW;AAAA,QAChB,UAAU,eACP,IAAI,CAAC,MAAM,iBAAiB,GAAG,EAAE,cAAc,kBAAkB,gBAAgB,CAAC,CAAC,EACnF,IAAI,mBAAmB;AAAA,MAC5B,CAAC;AAAA;AAAA,EAEL,CAAC;AAAA;;;ACjLI,SAAS,UAAU,CAAC,KAA6C;AAAA,EACtE,IAAI,QAAQ,WAAW;AAAA,IACrB;AAAA,EACF;AAAA,EACA,MAAM,IAAI,OAAO,SAAS,KAAK,EAAE;AAAA,EACjC,IAAI,CAAC,OAAO,SAAS,CAAC,KAAK,IAAI,GAAG;AAAA,IAChC,MAAM,IAAI,MAAM,0BAA0B,kCAAkC;AAAA,EAC9E;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,gBAAgB,CAAC,KAAiC;AAAA,EAChE,MAAM,KAAK,KAAK,KAAK;AAAA,EACrB,IAAI,CAAC,IAAI;AAAA,IACP,MAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,oBAAoB,CAAC,KAAqC;AAAA,EACxE,IAAI,CAAC,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,GAAG;AAAA,IAC3C,OAAO,CAAC;AAAA,EACV;AAAA,EACA,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,SAAS,KAAK;AAAA,IACvB,MAAM,aAAa,2BAA2B,OAAO,KAAK,CAAC;AAAA,IAC3D,IAAI,CAAC,IAAI,SAAS,UAAU,GAAG;AAAA,MAC7B,IAAI,KAAK,UAAU;AAAA,IACrB;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,oCAAoC,CAAC,OAI9B;AAAA,EACrB,MAAM,qBAAqB,MAAM,cAAc,SAAS,KAAK,MAAM,iBAAiB,SAAS;AAAA,EAC7F,MAAM,SAAS,MAAM,QAAQ,KAAK;AAAA,EAClC,IAAI,CAAC,oBAAoB;AAAA,IACvB,OAAO;AAAA,EACT;AAAA,EACA,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MACR,kHACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,eAAsB,WAAW,CAAC,OAKG;AAAA,EACnC,MAAM,SAAS,eAAe,OAAO,MAAM,WAAW,CAAC;AAAA,EACvD,MAAM,SAAS,MAAM,OAAO,qBAAqB,MAAM,IAAI,IAAI;AAAA,EAC/D,MAAM,cAAc,qBAAqB,MAAM,QAAQ,MAAM;AAAA,EAE7D,IAAI,OAAO,SAAS,OAAO;AAAA,IACzB,QAAQ,QAAQ;AAAA,IAChB,wBAAwB,GAAG;AAAA,IAC3B,MAAM,MAAM,IAAI,gBAAgB;AAAA,MAC9B,cAAc,IAAI;AAAA,MAClB,MAAM,YAAY;AAAA,QAChB,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,IAAI,aAAa;AAAA,QAC1E,MAAM,MAAM,MAAM,aAAa,QAAQ,EAAE,IAAI,CAAC;AAAA,QAC9C,MAAM,WAAW,IAAI,aAAa,IAAI;AAAA,QACtC,MAAM,qBAAqB;AAAA,UACzB;AAAA,UACA,WAAW,IAAI;AAAA,UACf,MAAM,MAAM;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA;AAAA,IAEL,CAAC;AAAA,IACD,OAAO,EAAE,IAAI,KAAK;AAAA,EACpB;AAAA,EAEA,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,MAAM,gBAAe,MAAM,IAAI,sBAAsB,MAAM,QAAQ,SAAS;AAAA,IAC5E,MAAM,MAAM,IAAI,gBAAgB;AAAA,MAC9B;AAAA,MACA,MAAM,YAAY;AAAA,QAChB,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,aAAY;AAAA,QACrE,MAAM,cAAc,MAAM,cAAc,QAAQ,OAAO,MAAM;AAAA,QAC7D,MAAM,qBAAqB;AAAA,UACzB;AAAA,UACA,WAAW;AAAA,UACX,MAAM,MAAM;AAAA,UACZ;AAAA,UACA;AAAA,QACF,CAAC;AAAA;AAAA,IAEL,CAAC;AAAA,IACD,OAAO,EAAE,IAAI,KAAK;AAAA,EACpB;AAAA,EAEA,MAAM,eAAe,MAAM,IAAI,sBAAsB,MAAM,QAAQ,SAAS;AAAA,EAC5E,MAAM,MAAM,IAAI,wCAAwC;AAAA,IACtD;AAAA,IACA,UAAU,CAAC,OAAO,OAAO,OAAO,CAAC;AAAA,EACnC,CAAC;AAAA,EACD,MAAM,MAAM,IAAI,gBAAgB;AAAA,IAC9B;AAAA,IACA,MAAM,YAAY;AAAA,MAChB,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,MACrE,MAAM,YAAY,MAAM,iBAAiB,QAAQ,OAAO,OAAO,OAAO,CAAC;AAAA,MACvE,MAAM,qBAAqB;AAAA,QACzB;AAAA,QACA;AAAA,QACA,MAAM,MAAM;AAAA,QACZ;AAAA,QACA,UAAU,MAAM,QAAQ,WAAW,OAAO,MAAM,QAAQ,QAAQ,IAAI;AAAA,QACpE;AAAA,MACF,CAAC;AAAA;AAAA,EAEL,CAAC;AAAA,EACD,OAAO,EAAE,IAAI,KAAK;AAAA;AAGpB,SAAS,oBAAoB,CAAC,KAAqC;AAAA,EACjE,IAAI,CAAC,MAAM,QAAQ,GAAG,KAAK,IAAI,WAAW,GAAG;AAAA,IAC3C,OAAO,CAAC;AAAA,EACV;AAAA,EACA,MAAM,MAAgB,CAAC;AAAA,EACvB,WAAW,KAAK,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,GAAG;AAAA,IAChE,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG;AAAA,MACpB,IAAI,KAAK,CAAC;AAAA,IACZ;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,eAAe,oBAAoB,CAAC,OAOlB;AAAA,EAChB,IAAI,MAAM,YAAY,WAAW,GAAG;AAAA,IAClC,MAAM,MAAM,OAAO,IAAI,oBAAoB;AAAA,MACzC,SAAS,MAAM;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,WAAW,MAAM;AAAA,SACb,MAAM,SAAS,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,IACjD,CAAC;AAAA,IACD;AAAA,EACF;AAAA,EAEA,IAAI,MAAM,QAAQ;AAAA,IAChB,QAAQ,OAAO,MACb;AAAA,CACF;AAAA,EACF;AAAA,EAEA,IAAI,iBAAiB,MAAM;AAAA,EAC3B,WAAW,YAAY,MAAM,aAAa;AAAA,IACxC,MAAM,uBAAuB;AAAA,MAC3B,QAAQ,MAAM;AAAA,MACd,WAAW,MAAM;AAAA,MACjB;AAAA,MACA,UAAU,MAAM;AAAA,MAChB;AAAA,IACF,CAAC;AAAA,IACD,iBAAiB;AAAA,EACnB;AAAA;AAGF,eAAsB,WAAW,CAAC,OAKG;AAAA,EACnC,MAAM,SAAS,eAAe,OAAO,MAAM,WAAW,CAAC;AAAA,EACvD,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,MAAM,IAAI,MACR,gGACF;AAAA,EACF;AAAA,EACA,MAAM,eAAe,MAAM,IAAI,sBAAsB,MAAM,QAAQ,SAAS;AAAA,EAE5E,MAAM,MAAM,IAAI,gBAAgB;AAAA,IAC9B,cAAc,OAAO,SAAS,QAAQ,OAAO,IAAI,gBAAgB;AAAA,IACjE,MAAM,YAAY;AAAA,MAChB,IAAI,OAAO,SAAS,OAAO;AAAA,QACzB,QAAQ,QAAQ;AAAA,QAChB,wBAAwB,GAAG;AAAA,QAC3B,QAAQ,oBAAW,MAAM,MAAM,IAAI,sBAAsB,IAAI,aAAa;AAAA,QAC1E,MAAM,QAAO,IAAI,eAAe;AAAA,UAC9B,SAAS,IAAI;AAAA,UACb,IAAI,IAAI;AAAA,UACR,MAAM,MAAM;AAAA,QACd,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,MAAM,KAAK,iBAAiB,MAAM,QAAQ,EAAE;AAAA,MAC5C,MAAM,MAAM,IAAI,wCAAwC;AAAA,QACtD;AAAA,QACA,UAAU,CAAC,OAAO,OAAO;AAAA,MAC3B,CAAC;AAAA,MACD,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,MACrE,MAAM,YAAY,MAAM,iBAAiB,QAAQ,OAAO,OAAO;AAAA,MAC/D,MAAM,OAAO,IAAI,eAAe;AAAA,QAC9B,SAAS;AAAA,QACT;AAAA,QACA,MAAM,MAAM;AAAA,MACd,CAAC;AAAA;AAAA,EAEL,CAAC;AAAA,EAED,OAAO,EAAE,IAAI,KAAK;AAAA;AAGpB,eAAsB,aAAa,CAAC,OAIC;AAAA,EACnC,MAAM,SAAS,eAAe,OAAO,MAAM,WAAW,CAAC;AAAA,EACvD,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,MAAM,IAAI,MACR,kGACF;AAAA,EACF;AAAA,EACA,MAAM,eAAe,MAAM,IAAI,sBAAsB,MAAM,QAAQ,SAAS;AAAA,EAE5E,MAAM,MAAM,IAAI,gBAAgB;AAAA,IAC9B,cAAc,OAAO,SAAS,QAAQ,OAAO,IAAI,gBAAgB;AAAA,IACjE,MAAM,YAAY;AAAA,MAChB,IAAI,OAAO,SAAS,OAAO;AAAA,QACzB,QAAQ,QAAQ;AAAA,QAChB,wBAAwB,GAAG;AAAA,QAC3B,QAAQ,oBAAW,MAAM,MAAM,IAAI,sBAAsB,IAAI,aAAa;AAAA,QAC1E,MAAM,QAAO,IAAI,eAAe;AAAA,UAC9B,SAAS,IAAI;AAAA,UACb,IAAI,IAAI;AAAA,QACV,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,MAAM,KAAK,iBAAiB,MAAM,QAAQ,EAAE;AAAA,MAC5C,MAAM,MAAM,IAAI,wCAAwC;AAAA,QACtD;AAAA,QACA,UAAU,CAAC,OAAO,OAAO;AAAA,MAC3B,CAAC;AAAA,MACD,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,MACrE,MAAM,YAAY,MAAM,iBAAiB,QAAQ,OAAO,OAAO;AAAA,MAC/D,MAAM,OAAO,IAAI,eAAe;AAAA,QAC9B,SAAS;AAAA,QACT;AAAA,MACF,CAAC;AAAA;AAAA,EAEL,CAAC;AAAA,EAED,OAAO,EAAE,IAAI,KAAK;AAAA;AAGpB,eAAsB,aAAa,CAAC,OAMC;AAAA,EACnC,MAAM,SAAS,eAAe,MAAM,WAAW;AAAA,EAC/C,IAAI,OAAO,SAAS,QAAQ;AAAA,IAC1B,MAAM,IAAI,MACR,yFACF;AAAA,EACF;AAAA,EACA,MAAM,eAAe,MAAM,IAAI,sBAAsB,MAAM,SAAS,SAAS;AAAA,EAE7E,MAAM,MAAM,IAAI,gBAAgB;AAAA,IAC9B,cAAc,OAAO,SAAS,QAAQ,OAAO,IAAI,gBAAgB;AAAA,IACjE,MAAM,YAAY;AAAA,MAChB,IAAI,OAAO,SAAS,OAAO;AAAA,QACzB,QAAQ,QAAQ;AAAA,QAChB,wBAAwB,GAAG;AAAA,QAC3B,QAAQ,oBAAW,MAAM,MAAM,IAAI,sBAAsB,IAAI,aAAa;AAAA,QAC1E,MAAM,QAAO,2BAA2B,MAAM,KAAK;AAAA,QACnD,MAAM,QAAO,IAAI,aAAa,MAAM,UAAU;AAAA,UAC5C,SAAS,IAAI;AAAA,UACb,WAAW,IAAI;AAAA,UACf;AAAA,QACF,CAAC;AAAA,QACD;AAAA,MACF;AAAA,MAEA,MAAM,KAAK,iBAAiB,MAAM,SAAS,EAAE;AAAA,MAE7C,MAAM,MAAM,IAAI,wCAAwC;AAAA,QACtD;AAAA,QACA,UAAU,CAAC,OAAO,OAAO;AAAA,MAC3B,CAAC;AAAA,MAED,QAAQ,WAAW,MAAM,MAAM,IAAI,sBAAsB,YAAY;AAAA,MACrE,MAAM,YAAY,MAAM,iBAAiB,QAAQ,OAAO,OAAO;AAAA,MAC/D,MAAM,OAAO,2BAA2B,MAAM,KAAK;AAAA,MACnD,MAAM,OAAO,IAAI,aAAa,MAAM,UAAU;AAAA,QAC5C,SAAS;AAAA,QACT,WAAW;AAAA,QACX;AAAA,MACF,CAAC;AAAA;AAAA,EAEL,CAAC;AAAA,EAED,OAAO,EAAE,IAAI,KAAK;AAAA;;;AClVpB;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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",
70
- "debugId": "3EBC31FAC3ADA2FD64756E2164756E21",
76
+ "mappings": "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",
77
+ "debugId": "4F295E0EDEFC23F164756E2164756E21",
71
78
  "names": []
72
79
  }