@opentag/cli 0.3.3 → 0.3.5

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 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/config.ts","../src/catalogs/capabilities.ts","../src/catalogs/executors.ts","../src/catalogs/platforms.ts","../src/commands/executors.ts","../src/commands/platforms.ts","../src/cancel.ts","../src/status.ts","../src/health.ts","../src/project-target-summary.ts","../src/relay-security.ts","../src/secret-readiness.ts","../src/doctor.ts","../src/ingest.ts","../src/maintenance.ts","../src/start.ts","../src/platforms/ports.ts","../src/platforms/github/display.ts","../src/pair.ts","../src/service.ts","../src/commands/setup.ts","../src/setup/builders.ts","../src/setup/flow.ts","../src/catalogs/languages.ts","../src/platforms/lark/display.ts","../src/platforms/lark/saved-config.ts","../src/ui/messages.ts","../src/setup/defaults.ts","../src/setup/guides.ts","../src/setup/summary.ts","../src/ui/clack.ts","../src/platforms/lark/registration-ui.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport {\n defaultConfigPath,\n formatCliConfigError,\n readRedactedCliConfig\n} from \"./config.js\";\nimport { runExecutorsCommand } from \"./commands/executors.js\";\nimport { runPlatformsCommand } from \"./commands/platforms.js\";\nimport { runCancelCommand } from \"./cancel.js\";\nimport { runDoctorCommand } from \"./doctor.js\";\nimport { runIngestCommand, runIngestTemplateCommand } from \"./ingest.js\";\nimport { runMaintenancePruneSourceDeliveriesCommand } from \"./maintenance.js\";\nimport { runPairCommand } from \"./pair.js\";\nimport {\n runServiceAutostartDisableCommand,\n runServiceAutostartEnableCommand,\n runServiceInstallCommand,\n runServiceLogsCommand,\n runServiceRestartCommand,\n runServiceRunCommand,\n runServiceStartCommand,\n runServiceStatusCommand,\n runServiceStopCommand,\n runServiceUninstallCommand\n} from \"./service.js\";\nimport { runSetupCommand } from \"./commands/setup.js\";\nimport { runStartCommand } from \"./start.js\";\nimport { runStatusCommand } from \"./status.js\";\n\nconst program = new Command();\n\nfunction handleError(error: unknown): never {\n console.error(formatCliConfigError(error));\n process.exit(1);\n}\n\nfunction runCliAction<T extends unknown[]>(handler: (...args: T) => Promise<void> | void): (...args: T) => Promise<void> {\n return async (...args: T) => {\n try {\n await handler(...args);\n } catch (error) {\n handleError(error);\n }\n };\n}\n\nprogram.name(process.env.OPENTAG_CLI_NAME?.trim() || \"opentag\").description(\"OpenTag CLI\");\n\nprogram\n .command(\"setup\")\n .description(\"Create a local OpenTag config\")\n .option(\"--platform <platform>\", \"Platform to configure\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--project <path>\", \"Project checkout path\")\n .option(\"--language <language>\", \"Setup language: en or zh-CN\")\n .option(\"--executor <executor>\", \"Default executor: echo, codex, claude-code, or hermes\")\n .option(\"--hermes-command <command>\", \"Hermes CLI command\")\n .option(\"--hermes-profile <profile>\", \"Hermes profile\")\n .option(\"--hermes-profile-template <template>\", \"Hermes profile template\")\n .option(\"--agent-profile <profile>\", \"Executor-neutral agent session profile\")\n .option(\"--agent-profile-template <template>\", \"Executor-neutral agent session profile template\")\n .option(\"--lark-setup <method>\", \"Lark setup method: saved, scan, or manual\")\n .option(\"--lark-app-id <id>\", \"Lark app id\")\n .option(\"--lark-app-secret <secret>\", \"Lark app secret\")\n .option(\"--tenant <tenant>\", \"Manual Lark / Feishu tenant: feishu or lark\")\n .option(\"--lark-bot-open-id <openId>\", \"Lark bot open id for group mentions\")\n .option(\"--slack-mode <mode>\", \"Slack connection mode: socket_mode or events_api\")\n .option(\"--slack-app-token <token>\", \"Slack app-level token for Socket Mode\")\n .option(\"--slack-signing-secret <secret>\", \"Slack signing secret\")\n .option(\"--slack-bot-token <token>\", \"Slack bot user OAuth token\")\n .option(\"--slack-app-id <id>\", \"Slack app id\")\n .option(\"--slack-team-id <id>\", \"Slack team id\")\n .option(\"--slack-channel-id <id>\", \"Slack channel id\")\n .option(\"--slack-port <port>\", \"Local Slack Events API port\")\n .option(\"--github-token <token>\", \"GitHub token for comments and apply-1 pull requests\")\n .option(\"--github-webhook-secret <secret>\", \"GitHub webhook secret; generated when omitted\")\n .option(\"--github-repository <ownerRepo>\", \"GitHub repository as owner/repo\")\n .option(\"--github-webhook-path <path>\", \"GitHub webhook path\")\n .option(\"--github-port <port>\", \"Local GitHub webhook port\")\n .option(\"--github-auto-create-pr\", \"Create pull requests immediately after runs\")\n .option(\"--no-github-auto-create-pr\", \"Use the default apply-1 pull request flow\")\n .option(\"--binding <method>\", \"Binding method: default_project or bind_later\")\n .option(\"--force\", \"Overwrite an existing config\")\n .option(\"--start\", \"Start OpenTag immediately after setup\")\n .option(\"--no-start\", \"Do not ask to start OpenTag after setup\")\n .option(\"-y, --yes\", \"Skip setup confirmation\")\n .action(runCliAction(runSetupCommand));\n\nprogram\n .command(\"pair\")\n .description(\"Pair this local runner with a remote relay\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--relay <url>\", \"Remote relay dispatcher URL\")\n .option(\"--no-register\", \"Update config without registering runner and project targets\")\n .action(runCliAction(runPairCommand));\n\nprogram\n .command(\"start\")\n .description(\"Start the local OpenTag stack\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runStartCommand));\n\nprogram\n .command(\"status\")\n .description(\"Show the local OpenTag status\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--run <runId>\", \"Show audit details for one run\")\n .option(\"--channel <provider:account/conversation>\", \"Show active run and queued follow-ups for one source container\")\n .action(runCliAction(runStatusCommand));\n\nprogram\n .command(\"cancel\")\n .description(\"Request cancellation for a run or the active run in a source container\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--run <runId>\", \"Cancel one run by id\")\n .option(\"--channel <provider:account/conversation>\", \"Cancel the active run for one source container\")\n .option(\"--reason <reason>\", \"Audit reason for cancellation\")\n .option(\"--requested-by <actor>\", \"Audit actor requesting cancellation\")\n .action(runCliAction(runCancelCommand));\n\nprogram\n .command(\"doctor\")\n .description(\"Check dispatcher, bindings, checkouts, and executors\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runDoctorCommand));\n\nprogram\n .command(\"ingest\")\n .description(\"Ingest a local external agent progress or completion event\")\n .option(\"--config <path>\", \"Config file path\")\n .requiredOption(\"--run <runId>\", \"OpenTag run id\")\n .requiredOption(\"--event <event>\", \"Event: progress, post_llm_call, before_agent_finalize, agent_end, failed, cancelled, timed_out, or interrupted\")\n .option(\"--source <source>\", \"External agent runtime source label\")\n .option(\"--message <message>\", \"Progress or completion summary\")\n .option(\"--type <type>\", \"Progress event type\")\n .option(\"--idempotency-key <key>\", \"Stable replay-protection key for retrying the same progress event\")\n .option(\"--result-json <json>\", \"Complete run with an OpenTagRunResult JSON object\")\n .option(\"--conclusion <conclusion>\", \"Completion conclusion when --result-json is omitted\")\n .option(\"--summary <summary>\", \"Completion summary when --result-json is omitted\")\n .action(runCliAction(runIngestCommand));\n\nprogram\n .command(\"ingest-template\")\n .description(\"Print a shell template or manifest for local external agent hook ingest\")\n .option(\"--source <source>\", \"External agent runtime source label\")\n .option(\"--command <command>\", \"OpenTag CLI command to use in the template\")\n .option(\"--format <format>\", \"Template format: shell or manifest\")\n .action(runCliAction(runIngestTemplateCommand));\n\nconst serviceCommand = program.command(\"service\").description(\"Install and control the OpenTag background service\");\n\nserviceCommand\n .command(\"install\")\n .description(\"Install the OpenTag user LaunchAgent\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--max-request-body-bytes <bytes>\", \"Persist dispatcher request body limit in the LaunchAgent\")\n .option(\"--rate-limit-window-ms <ms>\", \"Persist dispatcher rate-limit window in the LaunchAgent\")\n .option(\"--rate-limit-max-requests <n>\", \"Persist dispatcher rate-limit max requests in the LaunchAgent\")\n .option(\"--rate-limit-disabled\", \"Persist an explicit disabled dispatcher rate-limit state in the LaunchAgent\")\n .action(runCliAction(runServiceInstallCommand));\n\nserviceCommand\n .command(\"start\")\n .description(\"Start the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceStartCommand));\n\nserviceCommand\n .command(\"stop\")\n .description(\"Stop the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceStopCommand));\n\nserviceCommand\n .command(\"restart\")\n .description(\"Restart the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceRestartCommand));\n\nserviceCommand\n .command(\"status\")\n .description(\"Show the OpenTag background service status\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceStatusCommand));\n\nserviceCommand\n .command(\"logs\")\n .description(\"Show recent OpenTag background service logs\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--lines <n>\", \"Number of lines per log file\")\n .action(runCliAction(runServiceLogsCommand));\n\nserviceCommand\n .command(\"uninstall\")\n .description(\"Uninstall the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceUninstallCommand));\n\nconst autostartCommand = serviceCommand.command(\"autostart\").description(\"Control OpenTag service login autostart\");\n\nautostartCommand\n .command(\"enable\")\n .description(\"Enable OpenTag service login autostart\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceAutostartEnableCommand));\n\nautostartCommand\n .command(\"disable\")\n .description(\"Disable OpenTag service login autostart\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceAutostartDisableCommand));\n\nserviceCommand\n .command(\"run\", { hidden: true })\n .description(\"Run the OpenTag service payload\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--mode <mode>\", \"Service run mode\", \"background\")\n .action(runCliAction(runServiceRunCommand));\n\nprogram\n .command(\"platforms\")\n .description(\"List OpenTag platform setup support and runtime capabilities\")\n .action(() => {\n runPlatformsCommand();\n });\n\nprogram\n .command(\"executors\")\n .description(\"List available coding agents and runtime capabilities\")\n .action(() => {\n runExecutorsCommand();\n });\n\nconst maintenanceCommand = program.command(\"maintenance\").description(\"Run explicit OpenTag maintenance operations\");\n\nmaintenanceCommand\n .command(\"prune-source-deliveries\")\n .description(\"Prune stale source delivery replay keys after their runs are terminal\")\n .option(\"--config <path>\", \"Config file path\")\n .requiredOption(\"--older-than <timestamp>\", \"Prune delivery replay keys created before this ISO timestamp\")\n .option(\"--limit <n>\", \"Maximum delivery replay keys to scan\")\n .action(runCliAction(runMaintenancePruneSourceDeliveriesCommand));\n\nconst configCommand = program.command(\"config\").description(\"Inspect OpenTag config\");\n\nconfigCommand\n .command(\"path\")\n .description(\"Print the OpenTag config path\")\n .action(() => {\n console.log(defaultConfigPath());\n });\n\nconfigCommand\n .command(\"show\")\n .description(\"Print the OpenTag config with secrets redacted\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction((options) => {\n console.log(JSON.stringify(readRedactedCliConfig(options.config ?? defaultConfigPath()), null, 2));\n }));\n\nawait program.parseAsync(process.argv);\n","import { execFileSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { chmodSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { formatConfigError as formatDaemonConfigError, parseDaemonConfig, type OpenTagDaemonConfig } from \"@opentag/local-runtime\";\nimport { z } from \"zod\";\nimport type { CliLanguage } from \"./catalogs/languages.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\n\n// Executor ids (repository bindings and the last-used preference) accept any\n// trimmed non-empty string so custom executors registered by a standalone runner\n// validate; echo, codex, claude-code, and hermes remain the documented built-ins.\n// Mirrors the daemon config and the open runtime dispatch.\nconst ExecutorIdSchema = z.string().trim().min(1);\nconst KeepWorktreeSchema = z.enum([\"always\", \"on_failure\", \"never\"]);\nconst PositiveIntegerSchema = z.number().int().positive();\nconst CliLanguageSchema = z.enum([\"en\", \"zh-CN\"]);\nconst PlatformSchema = z.enum([\"lark\", \"slack\", \"github\", \"gitlab\", \"telegram\"]);\nconst LarkSetupMethodSchema = z.enum([\"saved\", \"scan\", \"manual\"]);\nconst SlackModeSchema = z.enum([\"socket_mode\", \"events_api\"]);\nconst BindingMethodSchema = z.enum([\"default_project\", \"bind_later\"]);\nconst OptionalPortSchema = z.number().int().min(1).max(65535).optional();\n\nconst SecretRefSchema = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"env\"),\n name: z.string().trim().min(1)\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"file\"),\n path: z.string().trim().min(1)\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"keychain\"),\n service: z.string().trim().min(1),\n account: z.string().trim().min(1)\n })\n .strict()\n]);\n\nexport type SecretRef = z.infer<typeof SecretRefSchema>;\nexport type KeychainSecretRef = Extract<SecretRef, { kind: \"keychain\" }>;\n\ntype ExecFileSyncLike = (file: string, args: readonly string[], options: { encoding: \"utf8\" }) => string | Buffer;\n\nfunction requireResolvedSecret(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`Secret ${label} resolved to an empty value.`);\n }\n return trimmed;\n}\n\nexport function readKeychainSecret(ref: KeychainSecretRef, execFileSyncImpl: ExecFileSyncLike = execFileSync): string {\n let value: string | Buffer;\n try {\n value = execFileSyncImpl(\n \"/usr/bin/security\",\n [\"find-generic-password\", \"-w\", \"-s\", ref.service, \"-a\", ref.account],\n { encoding: \"utf8\" }\n );\n } catch (error) {\n const detail = error instanceof Error && error.message ? ` ${error.message}` : \"\";\n throw new Error(\n `Secret keychain ref ${ref.service}/${ref.account} could not be resolved via macOS Keychain (/usr/bin/security). Keychain SecretRefs are only supported on macOS.${detail}`\n );\n }\n return requireResolvedSecret(String(value), `keychain ref ${ref.service}/${ref.account}`);\n}\n\nfunction resolveSecretRef(ref: SecretRef): string {\n if (ref.kind === \"env\") {\n const value = process.env[ref.name];\n if (!value) {\n throw new Error(`Secret env ref ${ref.name} is not set.`);\n }\n return requireResolvedSecret(value, `env ref ${ref.name}`);\n }\n if (ref.kind === \"file\") {\n let value: string;\n try {\n value = readFileSync(ref.path, \"utf8\");\n } catch {\n throw new Error(`Secret file ref ${ref.path} could not be resolved.`);\n }\n return requireResolvedSecret(value, `file ref ${ref.path}`);\n }\n return readKeychainSecret(ref);\n}\n\nconst SecretStringSchema = z.union([z.string().min(1), SecretRefSchema]).transform((value) => {\n return typeof value === \"string\" ? value : resolveSecretRef(value);\n});\n\nconst RuntimeConfigSchema = z.discriminatedUnion(\"mode\", [\n z\n .object({\n mode: z.literal(\"local\")\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"relay\"),\n relayUrl: z.string().url(),\n relayProvider: z.string().min(1).optional()\n })\n .strict()\n]);\n\nconst RepositoryBindingSchema = z\n .object({\n provider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n checkoutPath: z.string().min(1),\n defaultExecutor: ExecutorIdSchema,\n baseBranch: z.string().min(1),\n pushRemote: z.string().min(1),\n worktreeRoot: z.string().min(1),\n keepWorktree: KeepWorktreeSchema\n })\n .strict();\n\nconst ChannelBindingSchema = z\n .object({\n provider: z.string().min(1),\n accountId: z.string().min(1),\n conversationId: z.string().min(1),\n repoProvider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional()\n })\n .strict();\n\nconst ClaudeCodeSchema = z\n .object({\n command: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n permissionMode: z.enum([\"acceptEdits\", \"auto\", \"bypassPermissions\", \"default\", \"plan\"]).optional(),\n dangerouslySkipPermissions: z.boolean().optional()\n })\n .strict();\n\nconst HermesSchema = z\n .object({\n command: z.string().trim().min(1).optional(),\n profile: z.string().trim().min(1).optional(),\n profileTemplate: z.string().trim().min(1).optional()\n })\n .strict();\n\nconst AgentSessionProfileSchema = z\n .object({\n profile: z.string().trim().min(1).optional(),\n profileTemplate: z.string().trim().min(1).optional()\n })\n .strict();\n\nconst SecuritySchema = z\n .object({\n mode: z.enum([\"enforce\", \"audit\", \"off\"]).optional(),\n allowedWorkspaceRoot: z.string().min(1).optional(),\n allowUnsafePrompts: z.boolean().optional(),\n extraSafeEnv: z.array(z.string().min(1)).optional()\n })\n .strict();\n\nconst DaemonConfigSchema = z\n .object({\n runnerId: z.string().min(1),\n dispatcherUrl: z.string().url(),\n repositories: z.array(RepositoryBindingSchema).min(1),\n channelBindings: z.array(ChannelBindingSchema).optional(),\n claudeCode: ClaudeCodeSchema.optional(),\n hermes: HermesSchema.optional(),\n agentSessionProfile: AgentSessionProfileSchema.optional(),\n security: SecuritySchema.optional(),\n githubToken: SecretStringSchema.optional(),\n githubApplyToken: SecretStringSchema.nullable().optional(),\n preparePullRequestBranch: z.boolean().optional(),\n allowAutoCreatePullRequest: z.boolean().optional(),\n runnerToken: SecretStringSchema.optional(),\n runnerTokens: z.array(SecretStringSchema).optional(),\n revokedRunnerTokenFingerprints: z.array(z.string().trim().min(1)).optional(),\n pairingToken: SecretStringSchema,\n pollIntervalMs: PositiveIntegerSchema,\n heartbeatIntervalMs: PositiveIntegerSchema,\n runTimeoutMs: PositiveIntegerSchema.optional()\n })\n .strict();\n\nconst LarkPlatformSchema = z\n .object({\n appId: z.string().min(1),\n appSecret: SecretStringSchema,\n domain: z.enum([\"lark\", \"feishu\"]),\n botOpenId: z.string().min(1).optional(),\n defaultProjectBinding: z.boolean().optional()\n })\n .strict();\n\nconst SlackPlatformSchema = z\n .object({\n mode: SlackModeSchema.optional(),\n appToken: SecretStringSchema.optional(),\n signingSecret: SecretStringSchema.optional(),\n botToken: SecretStringSchema,\n teamId: z.string().min(1),\n channelId: z.string().min(1),\n appId: z.string().min(1).optional(),\n defaultProjectBinding: z.boolean().optional(),\n port: OptionalPortSchema\n })\n .strict()\n .superRefine((value, context) => {\n const mode = value.mode ?? \"events_api\";\n if (mode === \"socket_mode\" && !value.appToken) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"appToken\"],\n message: \"Slack Socket Mode requires appToken.\"\n });\n }\n if (mode === \"events_api\" && !value.signingSecret) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"signingSecret\"],\n message: \"Slack Events API requires signingSecret.\"\n });\n }\n });\n\nconst GitHubPlatformSchema = z\n .object({\n webhookSecret: SecretStringSchema,\n owner: z.string().min(1),\n repo: z.string().min(1),\n webhookPath: z.string().min(1).optional(),\n port: OptionalPortSchema\n })\n .strict();\n\nconst PreferencesSchema = z\n .object({\n language: CliLanguageSchema.optional(),\n lastSetup: z\n .object({\n platforms: z.array(PlatformSchema).optional(),\n executor: ExecutorIdSchema.optional(),\n projectPath: z.string().min(1).optional(),\n larkSetupMethod: LarkSetupMethodSchema.optional(),\n larkDomain: z.enum([\"lark\", \"feishu\"]).optional(),\n bindingMethod: BindingMethodSchema.optional(),\n slackMode: SlackModeSchema.optional(),\n slackTeamId: z.string().min(1).optional(),\n slackChannelId: z.string().min(1).optional(),\n slackPort: OptionalPortSchema,\n githubOwner: z.string().min(1).optional(),\n githubRepo: z.string().min(1).optional(),\n githubPort: OptionalPortSchema,\n githubAutoCreatePullRequest: z.boolean().optional()\n })\n .strict()\n .optional()\n })\n .strict();\n\nexport const OpenTagCliConfigSchema = z\n .object({\n schemaVersion: z.literal(1),\n state: z\n .object({\n directory: z.string().min(1),\n databasePath: z.string().min(1),\n worktreeRoot: z.string().min(1)\n })\n .strict(),\n runtime: RuntimeConfigSchema.optional(),\n preferences: PreferencesSchema.optional(),\n daemon: DaemonConfigSchema,\n platforms: z\n .object({\n lark: LarkPlatformSchema.optional(),\n slack: SlackPlatformSchema.optional(),\n github: GitHubPlatformSchema.optional()\n })\n .strict()\n })\n .strict();\n\nexport type OpenTagCliConfig = Omit<z.infer<typeof OpenTagCliConfigSchema>, \"daemon\"> & {\n daemon: OpenTagDaemonConfig;\n};\n\nexport type OpenTagCliPreferences = NonNullable<OpenTagCliConfig[\"preferences\"]>;\nexport type OpenTagCliLastSetup = NonNullable<OpenTagCliPreferences[\"lastSetup\"]>;\nexport type OpenTagCliLanguage = CliLanguage;\nexport type OpenTagCliPlatform = PlatformId;\nexport type OpenTagCliExecutor = string;\nexport type OpenTagRuntimeMode = NonNullable<OpenTagCliConfig[\"runtime\"]>[\"mode\"];\n\nexport type PathEnvironment = Partial<\n Record<\"OPENTAG_CONFIG_PATH\" | \"OPENTAG_CONFIG_HOME\" | \"OPENTAG_STATE_DIR\" | \"XDG_CONFIG_HOME\" | \"XDG_STATE_HOME\", string>\n>;\n\nfunction configHome(env: PathEnvironment, home = homedir()): string {\n if (env.OPENTAG_CONFIG_HOME) return resolve(env.OPENTAG_CONFIG_HOME);\n if (env.XDG_CONFIG_HOME) return resolve(env.XDG_CONFIG_HOME, \"opentag\");\n return join(home, \".config\", \"opentag\");\n}\n\nexport function defaultConfigPath(env: PathEnvironment = process.env, home = homedir()): string {\n if (env.OPENTAG_CONFIG_PATH) return resolve(env.OPENTAG_CONFIG_PATH);\n return join(configHome(env, home), \"config.json\");\n}\n\nexport function defaultStateDirectory(env: PathEnvironment = process.env, home = homedir()): string {\n if (env.OPENTAG_STATE_DIR) return resolve(env.OPENTAG_STATE_DIR);\n if (env.XDG_STATE_HOME) return resolve(env.XDG_STATE_HOME, \"opentag\");\n return join(home, \".local\", \"state\", \"opentag\");\n}\n\nfunction formatPath(path: Array<string | number>): string {\n return path.length ? path.join(\".\") : \"config\";\n}\n\nexport function formatCliConfigError(error: unknown): string {\n if (error instanceof z.ZodError) {\n return error.issues.map((issue) => `${formatPath(issue.path)}: ${issue.message}`).join(\"\\n\");\n }\n return formatDaemonConfigError(error);\n}\n\nexport function parseCliConfig(value: unknown): OpenTagCliConfig {\n const parsed = OpenTagCliConfigSchema.parse(value);\n return {\n ...parsed,\n daemon: parseDaemonConfig(parsed.daemon)\n };\n}\n\nexport function runnerDispatcherToken(config: Pick<OpenTagDaemonConfig, \"runnerToken\" | \"pairingToken\">): string | undefined {\n return config.runnerToken ?? config.pairingToken;\n}\n\nexport function runtimeModeFromConfig(config: OpenTagCliConfig): OpenTagRuntimeMode {\n return config.runtime?.mode ?? \"local\";\n}\n\nexport function relayUrlFromConfig(config: OpenTagCliConfig): string | undefined {\n return config.runtime?.mode === \"relay\" ? config.runtime.relayUrl : undefined;\n}\n\nexport function readCliConfig(path = defaultConfigPath()): OpenTagCliConfig {\n assertPrivateConfigFile(path);\n return parseCliConfig(JSON.parse(readFileSync(path, \"utf8\")));\n}\n\nexport function ensurePrivateDirectory(path: string): void {\n const createdPath = mkdirSync(path, { recursive: true, mode: 0o700 });\n if (createdPath) {\n chmodSync(path, 0o700);\n }\n}\n\nexport function writeCliConfigAtomic(path: string, config: OpenTagCliConfig): void {\n ensurePrivateDirectory(dirname(path));\n const tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeFileSync(tempPath, `${JSON.stringify(config, null, 2)}\\n`, { mode: 0o600, flag: \"wx\" });\n chmodSync(tempPath, 0o600);\n renameSync(tempPath, path);\n chmodSync(path, 0o600);\n } catch (error) {\n rmSync(tempPath, { force: true });\n throw error;\n }\n}\n\nexport function assertPrivateConfigFile(path: string): void {\n if (process.platform === \"win32\") return;\n const mode = statSync(path).mode & 0o777;\n if ((mode & 0o077) !== 0) {\n throw new Error(`OpenTag config contains secrets and must not be readable by group or others: ${path}\\nFix it with: chmod 600 ${path}`);\n }\n}\n\nfunction redactSecretValue(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const ref = value as { account?: unknown; kind?: unknown; name?: unknown; path?: unknown; service?: unknown };\n if (ref.kind === \"env\" && typeof ref.name === \"string\") {\n return `[env:${ref.name}]`;\n }\n if (ref.kind === \"file\" && typeof ref.path === \"string\") {\n return `[file:${ref.path}]`;\n }\n if (ref.kind === \"keychain\" && typeof ref.service === \"string\" && typeof ref.account === \"string\") {\n return `[keychain:${ref.service}/${ref.account}]`;\n }\n }\n return \"[REDACTED]\";\n}\n\nfunction redactValue(key: string, value: unknown): unknown {\n if (key === \"runnerTokens\" && Array.isArray(value)) {\n return value.map((entry) => redactSecretValue(entry));\n }\n if (\n [\n \"appSecret\",\n \"appToken\",\n \"botToken\",\n \"githubToken\",\n \"githubApplyToken\",\n \"runnerToken\",\n \"runnerTokens\",\n \"pairingToken\",\n \"signingSecret\",\n \"webhookSecret\"\n ].includes(key)\n ) {\n return redactSecretValue(value);\n }\n if (Array.isArray(value)) {\n return value.map((entry) => redactValue(\"\", entry));\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([entryKey, entryValue]) => [entryKey, redactValue(entryKey, entryValue)]));\n }\n return value;\n}\n\nexport function redactedCliConfig(config: OpenTagCliConfig): unknown {\n return redactValue(\"\", config);\n}\n\nexport function redactedCliConfigValue(value: unknown): unknown {\n return redactValue(\"\", value);\n}\n\nexport function readRedactedCliConfig(path = defaultConfigPath()): unknown {\n assertPrivateConfigFile(path);\n return redactedCliConfigValue(JSON.parse(readFileSync(path, \"utf8\")));\n}\n","import { OPEN_TAG_PLATFORM_CAPABILITIES, type PlatformCapabilityDescriptor } from \"@opentag/core\";\nimport { EXECUTOR_CATALOG, type ExecutorId, isExecutorId } from \"./executors.js\";\nimport { PLATFORM_CATALOG, type PlatformId } from \"./platforms.js\";\n\nexport type ExecutorCapabilityDescriptor = {\n id: string;\n invocation: \"spawn\" | \"hook_ingest\" | \"hybrid\";\n supportsProfile: boolean;\n supportsStreaming: boolean;\n supportsCancel: boolean;\n supportsHookCompletion: boolean;\n progressEvents: \"none\" | \"audit\" | \"human\";\n approvalMode: \"none\" | \"opentag_policy\" | \"executor_managed\";\n contextAccess: Array<\"context_packet\" | \"context_pointers\" | \"workspace\">;\n promptAssembly: \"opentag\" | \"executor_adapter\" | \"external_runtime\";\n writeAccess: \"none\" | \"workspace\" | \"external\";\n conversationAccess: \"none\" | \"request\" | \"thread_transcript\";\n promptMutation: \"none\" | \"append\" | \"replace\";\n rawContextAccess: boolean;\n writeActionAccess: \"none\" | \"propose\" | \"execute\";\n workspaceIsolation: \"none\" | \"branch\" | \"worktree\" | \"external\";\n requiredSecrets: string[];\n completionSignals: Array<\"process_exit\" | \"hook_event\" | \"stream_event\">;\n};\n\nexport const PLATFORM_CAPABILITIES: Record<PlatformId, PlatformCapabilityDescriptor> = OPEN_TAG_PLATFORM_CAPABILITIES;\n\nexport const EXECUTOR_CAPABILITIES: Record<ExecutorId, ExecutorCapabilityDescriptor> = {\n codex: {\n id: \"codex\",\n invocation: \"spawn\",\n supportsProfile: false,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\", \"workspace\"],\n promptAssembly: \"executor_adapter\",\n writeAccess: \"workspace\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"worktree\",\n requiredSecrets: [\"openai_api_key\"],\n completionSignals: [\"process_exit\"]\n },\n \"claude-code\": {\n id: \"claude-code\",\n invocation: \"spawn\",\n supportsProfile: false,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\", \"workspace\"],\n promptAssembly: \"executor_adapter\",\n writeAccess: \"workspace\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"branch\",\n requiredSecrets: [\"anthropic_api_key\"],\n completionSignals: [\"process_exit\"]\n },\n hermes: {\n id: \"hermes\",\n invocation: \"spawn\",\n supportsProfile: true,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\", \"workspace\"],\n promptAssembly: \"executor_adapter\",\n writeAccess: \"workspace\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"branch\",\n requiredSecrets: [],\n completionSignals: [\"process_exit\"]\n },\n echo: {\n id: \"echo\",\n invocation: \"spawn\",\n supportsProfile: false,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\"],\n promptAssembly: \"opentag\",\n writeAccess: \"none\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"none\",\n requiredSecrets: [],\n completionSignals: [\"process_exit\"]\n }\n};\n\nfunction yesNo(value: boolean): \"yes\" | \"no\" {\n return value ? \"yes\" : \"no\";\n}\n\nexport function formatPlatformCapability(id: PlatformId): string {\n const descriptor = PLATFORM_CATALOG.find((platform) => platform.id === id);\n const capability = PLATFORM_CAPABILITIES[id];\n const label = descriptor?.label ?? id;\n return `${label}: events=${yesNo(capability.receivesEvents)}, replies=${yesNo(capability.repliesToSourceThread)}, status_updates=${yesNo(capability.supportsStatusUpdates)}, rich=${yesNo(capability.supportsRichPresentation)}, actions=${yesNo(capability.supportsActionReplies)}, explicit_addressing=${yesNo(capability.requiresExplicitAddressing)}, liveness=${capability.livenessStrategy}`;\n}\n\nexport function formatExecutorCapability(id: string): string {\n const capability = isExecutorId(id) ? EXECUTOR_CAPABILITIES[id] : undefined;\n const label = EXECUTOR_CATALOG.find((executor) => executor.id === id)?.label ?? id;\n if (!capability) {\n return `${label}: custom executor, capability details unknown`;\n }\n const secrets = capability.requiredSecrets.length ? capability.requiredSecrets.join(\",\") : \"none\";\n const completion = capability.completionSignals.length ? capability.completionSignals.join(\",\") : \"none\";\n const context = capability.contextAccess.length ? capability.contextAccess.join(\",\") : \"none\";\n return `${label}: invocation=${capability.invocation}, profile=${yesNo(capability.supportsProfile)}, streaming=${yesNo(capability.supportsStreaming)}, cancel=${yesNo(capability.supportsCancel)}, hook_completion=${yesNo(capability.supportsHookCompletion)}, progress=${capability.progressEvents}, approval=${capability.approvalMode}, context=${context}, prompt=${capability.promptAssembly}, write=${capability.writeAccess}, conversation=${capability.conversationAccess}, prompt_mutation=${capability.promptMutation}, raw_context=${yesNo(capability.rawContextAccess)}, write_actions=${capability.writeActionAccess}, isolation=${capability.workspaceIsolation}, secrets=${secrets}, completion=${completion}`;\n}\n\nexport function formatConfiguredCapabilities(input: { platforms: PlatformId[]; executors: string[] }): string[] {\n const platformLines = input.platforms.map((id) => ` platform ${formatPlatformCapability(id)}`);\n const uniqueExecutors = [...new Set(input.executors)];\n const executorLines = uniqueExecutors.map((id) => ` executor ${formatExecutorCapability(id)}`);\n return [\"Capabilities:\", ...(platformLines.length ? platformLines : [\" platform none\"]), ...(executorLines.length ? executorLines : [\" executor none\"])];\n}\n","import { existsSync } from \"node:fs\";\nimport { delimiter, extname, join } from \"node:path\";\n\nexport type ExecutorId = \"echo\" | \"codex\" | \"claude-code\" | \"hermes\";\n\nexport type ExecutorDescriptor = {\n id: ExecutorId;\n label: string;\n command?: string;\n commandEnv?: string;\n alwaysAvailable?: boolean;\n devOnly?: boolean;\n};\n\nexport type ExecutorDetection = {\n id: ExecutorId;\n available: boolean;\n reason: string;\n};\n\nexport const EXECUTOR_CATALOG: ExecutorDescriptor[] = [\n {\n id: \"codex\",\n label: \"Codex\",\n command: \"codex\"\n },\n {\n id: \"claude-code\",\n label: \"Claude Code\",\n command: \"claude\",\n commandEnv: \"OPENTAG_CLAUDE_COMMAND\"\n },\n {\n id: \"hermes\",\n label: \"Hermes\",\n command: \"hermes\",\n commandEnv: \"OPENTAG_HERMES_COMMAND\"\n },\n {\n id: \"echo\",\n label: \"Echo\",\n alwaysAvailable: true,\n devOnly: true\n }\n];\n\nfunction pathExistsOnPath(command: string, env: NodeJS.ProcessEnv = process.env): boolean {\n if (command.includes(\"/\") || command.includes(\"\\\\\")) return existsSync(command);\n const paths = env.PATH?.split(delimiter).filter(Boolean) ?? [];\n const candidates =\n process.platform === \"win32\" && !extname(command)\n ? [command, ...(env.PATHEXT?.split(delimiter).filter(Boolean) ?? [\".COM\", \".EXE\", \".BAT\", \".CMD\"]).map((extension) => `${command}${extension.toLowerCase()}`)]\n : [command];\n return paths.some((directory) => candidates.some((candidate) => existsSync(join(directory, candidate))));\n}\n\nfunction executorCommand(executor: ExecutorDescriptor, env: NodeJS.ProcessEnv): string | undefined {\n return executor.commandEnv ? env[executor.commandEnv] || executor.command : executor.command;\n}\n\nexport function isExecutorId(value: string): value is ExecutorId {\n return value === \"echo\" || value === \"codex\" || value === \"claude-code\" || value === \"hermes\";\n}\n\nexport function detectExecutors(env: NodeJS.ProcessEnv = process.env): ExecutorDetection[] {\n return EXECUTOR_CATALOG.map((executor) => {\n if (executor.alwaysAvailable) {\n return {\n id: executor.id,\n available: true,\n reason: executor.devOnly ? \"Dev/test only; does not run a real coding agent\" : \"Built in\"\n };\n }\n const command = executorCommand(executor, env);\n const available = command ? pathExistsOnPath(command, env) : false;\n return {\n id: executor.id,\n available,\n reason: available ? `Found ${command} on PATH` : `Could not find ${command} on PATH`\n };\n });\n}\n\nexport function defaultExecutorId(input: {\n previous?: ExecutorId;\n detections?: ExecutorDetection[];\n} = {}): ExecutorId {\n if (input.previous) {\n return input.previous;\n }\n const detections = input.detections ?? detectExecutors();\n if (detections.find((executor) => executor.id === \"codex\")?.available) {\n return \"codex\";\n }\n if (detections.find((executor) => executor.id === \"claude-code\")?.available) {\n return \"claude-code\";\n }\n if (detections.find((executor) => executor.id === \"hermes\")?.available) {\n return \"hermes\";\n }\n return \"echo\";\n}\n\nexport function executorLabel(id: string): string {\n return EXECUTOR_CATALOG.find((executor) => executor.id === id)?.label ?? id;\n}\n\nfunction formatExecutorStatus(executor: ExecutorDescriptor, available: boolean): string {\n if (executor.devOnly) {\n return \"dev/test only\";\n }\n return available ? \"available\" : \"not found\";\n}\n\nexport function formatExecutors(env: NodeJS.ProcessEnv = process.env): string {\n const detections = detectExecutors(env);\n return [\n \"Coding agents:\",\n ...EXECUTOR_CATALOG.map((executor) => {\n const detection = detections.find((entry) => entry.id === executor.id);\n const status = formatExecutorStatus(executor, detection?.available ?? false);\n return ` ${executor.label}: ${status}${detection ? ` (${detection.reason})` : \"\"}`;\n })\n ].join(\"\\n\");\n}\n","import type { CliLanguage } from \"./languages.js\";\n\nexport type PlatformId = \"lark\" | \"slack\" | \"github\" | \"gitlab\" | \"telegram\";\n\nexport type PlatformStatus = \"setup_ready\" | \"setup_pending\" | \"experimental_setup_pending\";\n\nexport type PlatformDescriptor = {\n id: PlatformId;\n label: string;\n status: PlatformStatus;\n startable: boolean;\n};\n\nconst SETUP_GUIDE_BASE_URL = \"https://github.com/amplifthq/opentag/blob/main/docs/platforms\";\n\nconst PLATFORM_SETUP_GUIDE_FILES: Partial<Record<PlatformId, Record<CliLanguage, string>>> = {\n lark: {\n en: \"lark.en.md\",\n \"zh-CN\": \"lark.zh-CN.md\"\n },\n slack: {\n en: \"slack.en.md\",\n \"zh-CN\": \"slack.zh-CN.md\"\n },\n github: {\n en: \"github.en.md\",\n \"zh-CN\": \"github.zh-CN.md\"\n }\n // gitlab deliberately has no setup guide entry until CLI setup wiring lands;\n // the MVP only exposes gitlab through the adapter package, not via `opentag setup`.\n};\n\nexport const PLATFORM_CATALOG: PlatformDescriptor[] = [\n {\n id: \"lark\",\n label: \"Lark / Feishu\",\n status: \"setup_ready\",\n startable: true\n },\n {\n id: \"slack\",\n label: \"Slack\",\n status: \"setup_ready\",\n startable: true\n },\n {\n id: \"github\",\n label: \"GitHub\",\n status: \"setup_ready\",\n startable: true\n },\n {\n id: \"gitlab\",\n label: \"GitLab\",\n status: \"experimental_setup_pending\",\n startable: false\n },\n {\n id: \"telegram\",\n label: \"Telegram\",\n status: \"experimental_setup_pending\",\n startable: false\n }\n];\n\nexport function parsePlatformId(value: string): PlatformId {\n if (value === \"lark\" || value === \"slack\" || value === \"github\" || value === \"gitlab\" || value === \"telegram\") {\n return value;\n }\n throw new Error(\"Platform must be lark, slack, github, gitlab, or telegram.\");\n}\n\nexport function platformById(id: PlatformId): PlatformDescriptor {\n const descriptor = PLATFORM_CATALOG.find((platform) => platform.id === id);\n if (!descriptor) {\n throw new Error(`Unknown platform: ${id}`);\n }\n return descriptor;\n}\n\nexport function platformSetupGuideUrl(id: PlatformId, language: CliLanguage): string | undefined {\n const file = PLATFORM_SETUP_GUIDE_FILES[id]?.[language];\n return file ? `${SETUP_GUIDE_BASE_URL}/${file}` : undefined;\n}\n\nexport function formatPlatformStatus(status: PlatformStatus): string {\n switch (status) {\n case \"setup_ready\":\n return \"Setup wizard ready\";\n case \"setup_pending\":\n return \"Adapter exists; CLI setup pending\";\n case \"experimental_setup_pending\":\n return \"Experimental adapter; CLI setup pending\";\n }\n}\n\nexport function formatPlatforms(): string {\n return [\n \"CLI setup support:\",\n ...PLATFORM_CATALOG.map((platform) => {\n return ` ${platform.label}: ${formatPlatformStatus(platform.status)}`;\n })\n ].join(\"\\n\");\n}\n","import { formatExecutorCapability } from \"../catalogs/capabilities.js\";\nimport { EXECUTOR_CATALOG, formatExecutors } from \"../catalogs/executors.js\";\n\nexport type ExecutorsCommandOptions = {\n env?: NodeJS.ProcessEnv;\n logger?: Pick<typeof console, \"log\">;\n};\n\nexport function formatExecutorCapabilityCatalog(): string {\n return [\"Executor capabilities:\", ...EXECUTOR_CATALOG.map((executor) => ` ${formatExecutorCapability(executor.id)}`)].join(\"\\n\");\n}\n\nexport function formatExecutorsCommandOutput(env: NodeJS.ProcessEnv = process.env): string {\n return [formatExecutors(env), formatExecutorCapabilityCatalog()].join(\"\\n\\n\");\n}\n\nexport function runExecutorsCommand(options: ExecutorsCommandOptions = {}): void {\n const logger = options.logger ?? console;\n logger.log(formatExecutorsCommandOutput(options.env ?? process.env));\n}\n","import { formatPlatformCapability } from \"../catalogs/capabilities.js\";\nimport { formatPlatforms, PLATFORM_CATALOG } from \"../catalogs/platforms.js\";\n\nexport type PlatformsCommandOptions = {\n logger?: Pick<typeof console, \"log\">;\n};\n\nexport function formatPlatformCapabilityCatalog(): string {\n return [\"Platform capabilities:\", ...PLATFORM_CATALOG.map((platform) => ` ${formatPlatformCapability(platform.id)}`)].join(\"\\n\");\n}\n\nexport function formatPlatformsCommandOutput(): string {\n return [formatPlatforms(), formatPlatformCapabilityCatalog()].join(\"\\n\\n\");\n}\n\nexport function runPlatformsCommand(options: PlatformsCommandOptions = {}): void {\n const logger = options.logger ?? console;\n logger.log(formatPlatformsCommandOutput());\n}\n","import { createOpenTagClient } from \"@opentag/client\";\nimport type { OpenTagRun } from \"@opentag/core\";\nimport { defaultConfigPath, readCliConfig, runnerDispatcherToken, type OpenTagCliConfig } from \"./config.js\";\nimport { parseChannelRef } from \"./status.js\";\n\nexport type CancelCommandOptions = {\n config?: string;\n run?: string;\n channel?: string;\n reason?: string;\n requestedBy?: string;\n};\n\nexport type CancelCommandDependencies = {\n fetchImpl?: typeof fetch;\n logger?: Pick<typeof console, \"log\">;\n};\n\nexport type CancelSummary = {\n configPath: string;\n dispatcherUrl: string;\n scope: string;\n run: OpenTagRun;\n};\n\nfunction nonEmpty(value: string | undefined, label: string): string {\n const trimmed = value?.trim();\n if (!trimmed) throw new Error(`${label} is required.`);\n return trimmed;\n}\n\nfunction cancellationReason(options: CancelCommandOptions): string {\n return options.reason?.trim() || \"Cancellation requested from opentag CLI.\";\n}\n\nfunction requestedBy(options: CancelCommandOptions): string {\n return options.requestedBy?.trim() || \"cli:opentag\";\n}\n\nfunction validateCancelTarget(options: CancelCommandOptions): void {\n if (options.run && options.channel) {\n throw new Error(\"Use either --run or --channel, not both.\");\n }\n if (!options.run && !options.channel) {\n throw new Error(\"Provide --run <run_id> or --channel provider:account/conversation.\");\n }\n}\n\nexport async function cancelFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n options: CancelCommandOptions;\n fetchImpl?: typeof fetch;\n}): Promise<CancelSummary> {\n validateCancelTarget(input.options);\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const reason = cancellationReason(input.options);\n const requester = requestedBy(input.options);\n\n if (input.options.channel) {\n const channel = parseChannelRef(input.options.channel);\n const result = await client.cancelActiveChannelRun({\n ...channel,\n reason,\n requestedBy: requester\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n scope: `${channel.provider}:${channel.accountId}/${channel.conversationId}`,\n run: result.run\n };\n }\n\n const runId = nonEmpty(input.options.run, \"--run\");\n const result = await client.cancelRun({\n runId,\n reason,\n requestedBy: requester\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n scope: runId,\n run: result.run\n };\n}\n\nexport function formatCancelSummary(summary: CancelSummary): string {\n const conclusion = summary.run.result?.conclusion;\n return [\n \"Cancellation requested.\",\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n `Scope: ${summary.scope}`,\n `Run: ${summary.run.id}`,\n `Status: ${summary.run.status}${conclusion ? ` (${conclusion})` : \"\"}`,\n \"Stop is not treated as successful completion.\",\n `Inspect audit detail with \\`opentag status --run ${summary.run.id}\\`.`\n ].join(\"\\n\");\n}\n\nexport async function runCancelCommand(options: CancelCommandOptions, dependencies: CancelCommandDependencies = {}): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n const logger = dependencies.logger ?? console;\n logger.log(formatCancelSummary(await cancelFromConfig({ config, configPath, options, ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}) })));\n}\n","import { createOpenTagClient, type ChannelRuntimeStatus, type ControlPlaneAlert, type RunMetrics } from \"@opentag/client\";\nimport {\n createSourceThreadStatusPresentation,\n formatProjectTargetRef,\n platformCapabilityForProvider,\n projectTargetRefFromEvent,\n renderOpenTagPresentationPlainText,\n type OpenTagEvent,\n type OpenTagRun,\n type PlatformLivenessStrategy\n} from \"@opentag/core\";\nimport { DEFAULT_AGENT_SESSION_PROFILE_TEMPLATE } from \"@opentag/local-runtime\";\nimport { formatConfiguredCapabilities } from \"./catalogs/capabilities.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\nimport {\n defaultConfigPath,\n readCliConfig,\n readRedactedCliConfig,\n relayUrlFromConfig,\n redactedCliConfig,\n runnerDispatcherToken,\n runtimeModeFromConfig,\n type OpenTagCliConfig\n} from \"./config.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { formatConfiguredProjectTargetSummary } from \"./project-target-summary.js\";\nimport { formatRelaySecurityChecks, relaySecurityChecksFromConfig } from \"./relay-security.js\";\nimport { formatSecretReadiness } from \"./secret-readiness.js\";\n\nexport type StatusCommandOptions = {\n config?: string;\n run?: string;\n channel?: string;\n};\n\nexport type StatusSummary = {\n configPath: string;\n dispatcher: \"online\" | \"offline\";\n dispatcherUrl: string;\n runtimeMode: \"local\" | \"relay\";\n relayUrl?: string;\n relaySecurity: string[];\n controlPlaneAlerts: ControlPlaneAlert[];\n controlPlaneAlertsError?: string;\n runnerId: string;\n runTimeoutPolicy: string;\n secrets: string[];\n repositories: string[];\n platforms: string[];\n agentSessionProfile: string[];\n capabilities: string[];\n};\n\ntype RunAuditEvent = {\n type?: unknown;\n visibility?: unknown;\n importance?: unknown;\n message?: unknown;\n payload?: unknown;\n createdAt?: unknown;\n};\n\nexport type RunStatusSummary = {\n configPath: string;\n dispatcherUrl: string;\n run: OpenTagRun;\n event: OpenTagEvent;\n metrics: RunMetrics;\n runTimeoutPolicy?: string;\n events: RunAuditEvent[];\n};\n\nexport type ChannelStatusSummary = {\n configPath: string;\n dispatcherUrl: string;\n provider: string;\n accountId: string;\n conversationId: string;\n runTimeoutPolicy: string;\n status: ChannelRuntimeStatus;\n};\n\nexport function parseChannelRef(ref: string): { provider: string; accountId: string; conversationId: string } {\n const trimmed = ref.trim();\n const colon = trimmed.indexOf(\":\");\n const slash = trimmed.indexOf(\"/\", colon + 1);\n if (colon <= 0 || slash <= colon + 1 || slash === trimmed.length - 1) {\n throw new Error(\"--channel must be formatted as provider:account_id/conversation_id.\");\n }\n return {\n provider: trimmed.slice(0, colon),\n accountId: trimmed.slice(colon + 1, slash),\n conversationId: trimmed.slice(slash + 1)\n };\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms % 60_000 === 0) return `${ms / 60_000} minute(s)`;\n if (ms % 1_000 === 0) return `${ms / 1_000} second(s)`;\n return `${ms}ms`;\n}\n\nfunction formatRunTimeoutPolicy(timeoutMs: number | undefined): string {\n return timeoutMs ? `hard timeout after ${formatDurationMs(timeoutMs)}` : \"disabled\";\n}\n\nfunction formatAgentSessionProfile(config: OpenTagCliConfig[\"daemon\"][\"agentSessionProfile\"]): string[] {\n const lines = [\"Agent Session Profile:\"];\n if (config?.profile) {\n lines.push(` fixed profile: ${config.profile}`);\n if (config.profileTemplate) {\n lines.push(` template ignored while fixed profile is set: ${config.profileTemplate}`);\n }\n } else if (config?.profileTemplate) {\n lines.push(` template: ${config.profileTemplate}`);\n } else {\n lines.push(` default template: ${DEFAULT_AGENT_SESSION_PROFILE_TEMPLATE}`);\n }\n lines.push(\" scope: derived from source provider, source container, Project Target, and actor; session identity excludes checkout paths and secrets.\");\n return lines;\n}\n\nexport async function getStatusSummary(input: {\n configPath?: string;\n fetchImpl?: typeof fetch;\n} = {}): Promise<StatusSummary> {\n const configPath = input.configPath ?? defaultConfigPath();\n const secretConfig = readRedactedCliConfig(configPath);\n const config = readCliConfig(configPath);\n return statusFromConfig({ config, configPath, secretConfig, ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}) });\n}\n\nexport async function statusFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n fetchImpl?: typeof fetch;\n healthTimeoutMs?: number;\n secretConfig?: unknown;\n}): Promise<StatusSummary> {\n const relayUrl = relayUrlFromConfig(input.config);\n const dispatcher = (await probeDispatcherHealth({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),\n timeoutMs: input.healthTimeoutMs ?? 1_000\n }))\n ? \"online\"\n : \"offline\";\n const controlPlaneAlertState = await loadControlPlaneAlertState({\n config: input.config,\n dispatcher,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n\n const platforms = Object.entries(input.config.platforms)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key);\n const executors = input.config.daemon.repositories.map((repository) => repository.defaultExecutor);\n return {\n configPath: input.configPath,\n dispatcher,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n runtimeMode: runtimeModeFromConfig(input.config),\n ...(relayUrl ? { relayUrl } : {}),\n relaySecurity: formatRelaySecurityChecks(relaySecurityChecksFromConfig(input.config)),\n controlPlaneAlerts: controlPlaneAlertState.alerts,\n ...(controlPlaneAlertState.error ? { controlPlaneAlertsError: controlPlaneAlertState.error } : {}),\n runnerId: input.config.daemon.runnerId,\n runTimeoutPolicy: formatRunTimeoutPolicy(input.config.daemon.runTimeoutMs),\n secrets: formatSecretReadiness(input.secretConfig ?? redactedCliConfig(input.config)),\n repositories: input.config.daemon.repositories.map((repository) => {\n return formatConfiguredProjectTargetSummary(repository);\n }),\n platforms,\n agentSessionProfile: formatAgentSessionProfile(input.config.daemon.agentSessionProfile),\n capabilities: formatConfiguredCapabilities({\n platforms: platforms as PlatformId[],\n executors\n })\n };\n}\n\nasync function loadControlPlaneAlertState(input: {\n config: OpenTagCliConfig;\n dispatcher: \"online\" | \"offline\";\n fetchImpl?: typeof fetch;\n}): Promise<{ alerts: ControlPlaneAlert[]; error?: string }> {\n if (input.dispatcher !== \"online\") return { alerts: [] };\n try {\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const result = await client.listControlPlaneAlerts({ limit: 5 });\n return { alerts: Array.isArray(result.alerts) ? result.alerts : [] };\n } catch (error) {\n return { alerts: [], error: error instanceof Error ? error.message : String(error) };\n }\n}\n\nexport async function getRunStatusSummary(input: {\n runId: string;\n configPath?: string;\n fetchImpl?: typeof fetch;\n}): Promise<RunStatusSummary> {\n const configPath = input.configPath ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n return runStatusFromConfig({\n config,\n configPath,\n runId: input.runId,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n}\n\nexport async function getChannelStatusSummary(input: {\n channel: string;\n configPath?: string;\n fetchImpl?: typeof fetch;\n}): Promise<ChannelStatusSummary> {\n const configPath = input.configPath ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n return channelStatusFromConfig({\n config,\n configPath,\n channel: input.channel,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n}\n\nexport async function channelStatusFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n channel: string;\n fetchImpl?: typeof fetch;\n}): Promise<ChannelStatusSummary> {\n const channel = parseChannelRef(input.channel);\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n runTimeoutPolicy: formatRunTimeoutPolicy(input.config.daemon.runTimeoutMs),\n ...channel,\n status: await client.getChannelRuntimeStatus(channel)\n };\n}\n\nexport async function runStatusFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n runId: string;\n fetchImpl?: typeof fetch;\n}): Promise<RunStatusSummary> {\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const [claimed, events, metrics] = await Promise.all([\n client.getRun({ runId: input.runId }),\n client.listRunEvents({ runId: input.runId }),\n client.getRunMetrics({ runId: input.runId })\n ]);\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n run: claimed.run,\n event: claimed.event,\n metrics: metrics.metrics,\n runTimeoutPolicy: formatRunTimeoutPolicy(input.config.daemon.runTimeoutMs),\n events: events.events as RunAuditEvent[]\n };\n}\n\nexport function formatStatus(summary: StatusSummary): string {\n return [\n `Config: ${summary.configPath}`,\n `Runtime: ${summary.runtimeMode}`,\n ...(summary.relayUrl ? [`Relay: ${summary.relayUrl}`] : []),\n ...summary.relaySecurity,\n `Dispatcher: ${summary.dispatcher} (${summary.dispatcherUrl})`,\n ...formatControlPlaneAlerts(summary),\n `Runner: ${summary.runnerId}`,\n `Run Timeout: ${summary.runTimeoutPolicy}`,\n ...summary.secrets,\n ...summary.agentSessionProfile,\n `Platforms: ${summary.platforms.length ? summary.platforms.join(\", \") : \"none\"}`,\n ...summary.capabilities,\n \"Project Targets:\",\n ...(summary.repositories.length ? summary.repositories.map((repository) => ` ${repository}`) : [\" none\"])\n ].join(\"\\n\");\n}\n\nfunction formatControlPlaneAlerts(summary: StatusSummary): string[] {\n if (summary.dispatcher !== \"online\") {\n return [\"Control Plane Alerts:\", \" unavailable (dispatcher offline)\"];\n }\n if (summary.controlPlaneAlertsError) {\n return [\"Control Plane Alerts:\", ` WARN unavailable: ${summary.controlPlaneAlertsError}`];\n }\n if (summary.controlPlaneAlerts.length === 0) {\n return [\"Control Plane Alerts:\", \" none\"];\n }\n return [\n \"Control Plane Alerts:\",\n ...summary.controlPlaneAlerts.flatMap((alert) => [\n ` ${alert.severity.toUpperCase()} ${alert.type}: ${alert.subject ?? \"unknown\"} count=${alert.count} threshold=${alert.threshold} last=${alert.lastSeenAt} - ${alert.reason}`,\n ` Next: ${alert.nextAction}`\n ])\n ];\n}\n\nfunction displayValue(value: unknown, fallback = \"unknown\"): string {\n return typeof value === \"string\" && value.length > 0 ? value : fallback;\n}\n\nfunction formatRunEvent(event: RunAuditEvent): string {\n const createdAt = displayValue(event.createdAt);\n const visibility = displayValue(event.visibility);\n const importance = displayValue(event.importance);\n const message = typeof event.message === \"string\" && event.message.length > 0 ? ` - ${event.message}` : \"\";\n return ` ${createdAt} ${visibility}/${importance} ${displayValue(event.type)}${message}`;\n}\n\nfunction recordFromUnknown(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : null;\n}\n\nfunction runTerminalSemantics(summary: RunStatusSummary): string[] {\n const terminalEvent = [...summary.events].reverse().find((event) => {\n if (summary.run.status === \"cancelled\") return event.type === \"run.cancel_requested\";\n return false;\n });\n const payload = recordFromUnknown(terminalEvent?.payload);\n const terminalReason = payload?.[\"terminalReason\"];\n const terminalSemantics = payload?.[\"terminalSemantics\"];\n if (typeof terminalReason !== \"string\" || terminalReason.length === 0) return [];\n return [\n `Terminal reason: ${terminalReason}`,\n ...(typeof terminalSemantics === \"string\" && terminalSemantics.length > 0 ? [`Terminal semantics: ${terminalSemantics}`] : [])\n ];\n}\n\nfunction runSpecificTimeoutPolicy(summary: RunStatusSummary): string | undefined {\n for (const event of [...summary.events].reverse()) {\n if (event.type !== \"run.running\") continue;\n const payload = recordFromUnknown(event.payload);\n const runTimeoutMs = payload?.[\"runTimeoutMs\"];\n if (typeof runTimeoutMs === \"number\" && Number.isInteger(runTimeoutMs) && runTimeoutMs > 0) {\n return formatRunTimeoutPolicy(runTimeoutMs);\n }\n }\n return summary.runTimeoutPolicy;\n}\n\nfunction stringFromRecord(record: Record<string, unknown> | null | undefined, keys: string[]): string | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (trimmed.length > 0) return trimmed;\n }\n return undefined;\n}\n\nfunction booleanFromRecord(record: Record<string, unknown> | null | undefined, keys: string[]): boolean | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction runProvenancePayload(summary: RunStatusSummary): Record<string, unknown> | null {\n const created = summary.events.find((event) => event.type === \"run.created\");\n const createdProvenance = recordFromUnknown(recordFromUnknown(created?.payload)?.[\"provenance\"]);\n if (createdProvenance) return createdProvenance;\n\n for (const event of [...summary.events].reverse()) {\n const provenance = recordFromUnknown(recordFromUnknown(event.payload)?.[\"provenance\"]);\n if (provenance) return provenance;\n }\n return null;\n}\n\nfunction sourceDeliveryIdFromMetadata(metadata: Record<string, unknown> | null): string | undefined {\n return stringFromRecord(metadata, [\n \"sourceDeliveryId\",\n \"webhookDeliveryId\",\n \"deliveryId\",\n \"githubDeliveryId\",\n \"githubDeliveryGuid\",\n \"slackEventId\",\n \"larkEventId\"\n ]);\n}\n\nfunction signatureStateFromMetadata(metadata: Record<string, unknown> | null): string {\n const explicit = stringFromRecord(metadata, [\"signatureState\", \"webhookSignatureState\"]);\n if (explicit === \"verified\" || explicit === \"unverified\" || explicit === \"unknown\") return explicit;\n\n const verified = booleanFromRecord(metadata, [\"signatureVerified\", \"verifiedSignature\", \"webhookSignatureVerified\", \"githubSignatureVerified\"]);\n if (verified === true) return \"verified\";\n if (verified === false) return \"unverified\";\n return \"unknown\";\n}\n\nfunction projectTargetFromProvenance(provenance: Record<string, unknown> | null): string | undefined {\n const target = recordFromUnknown(provenance?.[\"projectTarget\"]);\n return stringFromRecord(target, [\"ref\"]);\n}\n\nfunction projectTargetFromEvent(event: OpenTagEvent): string | undefined {\n const ref = projectTargetRefFromEvent(event);\n return ref ? formatProjectTargetRef(ref) : undefined;\n}\n\nfunction admissionLineFromProvenance(provenance: Record<string, unknown> | null): string {\n const admission = recordFromUnknown(provenance?.[\"admissionDecision\"]);\n const action = stringFromRecord(admission, [\"action\"]) ?? \"unknown\";\n const reasonCode = stringFromRecord(admission, [\"reasonCode\"]);\n const activeRunId = stringFromRecord(admission, [\"activeRunId\"]);\n const eventId = stringFromRecord(admission, [\"eventId\"]);\n return [\n reasonCode ? `${action} (${reasonCode})` : action,\n ...(activeRunId ? [`activeRun=${activeRunId}`] : []),\n ...(eventId ? [`event=${eventId}`] : [])\n ].join(\"; \");\n}\n\nfunction claimedRunnerId(summary: RunStatusSummary): string | undefined {\n if (summary.run.assignedRunnerId) return summary.run.assignedRunnerId;\n for (const event of [...summary.events].reverse()) {\n if (event.type !== \"run.claimed\") continue;\n const runnerId = stringFromRecord(recordFromUnknown(event.payload), [\"runnerId\"]);\n if (runnerId) return runnerId;\n }\n return undefined;\n}\n\nfunction formatRunProvenance(summary: RunStatusSummary): string[] {\n const provenance = runProvenancePayload(summary);\n const metadata = recordFromUnknown(summary.event.metadata);\n const sourceDeliveryId = stringFromRecord(provenance, [\"sourceDeliveryId\"]) ?? sourceDeliveryIdFromMetadata(metadata);\n const signatureState = stringFromRecord(provenance, [\"signatureState\"]) ?? signatureStateFromMetadata(metadata);\n const projectTarget = projectTargetFromProvenance(provenance) ?? projectTargetFromEvent(summary.event);\n const expectedRunnerId = stringFromRecord(provenance, [\"expectedRunnerId\"]);\n return [\n \"Provenance:\",\n ` Source delivery: ${sourceDeliveryId ?? \"unknown\"}`,\n ` Signature: ${signatureState}`,\n ` Project Target: ${projectTarget ?? \"unknown\"}`,\n ` Admission: ${admissionLineFromProvenance(provenance)}`,\n ` Expected runner: ${expectedRunnerId ?? \"unbound\"}`,\n ` Claimed runner: ${claimedRunnerId(summary) ?? \"none\"}`\n ];\n}\n\nfunction livenessGuidance(strategy: PlatformLivenessStrategy | \"default_callback\"): string {\n if (strategy === \"status_update\") return \"source thread can receive concise status/progress callbacks.\";\n if (strategy === \"source_receipt\") return \"source thread uses native receipts first; routine progress stays in audit/status.\";\n if (strategy === \"pull_status\") return \"source thread stays quiet by default; pull detail with /status or this command.\";\n if (strategy === \"thread_reply\") return \"source thread uses concise thread replies for liveness.\";\n return \"callback delivery follows provider default behavior.\";\n}\n\nfunction formatRunLiveness(summary: RunStatusSummary): string[] {\n const provider = summary.event.callback.provider;\n const capability = platformCapabilityForProvider(provider);\n const strategy = capability?.livenessStrategy ?? \"default_callback\";\n const suppressedProgressEvents = summary.events.filter((event) => event.type === \"callback.progress.suppressed\");\n const sourceReceiptDeliveredEvents = summary.events.filter((event) => event.type === \"source_receipt.delivered\");\n const sourceReceiptFailedEvents = summary.events.filter((event) => event.type === \"source_receipt.failed\");\n const suppressedReasons = Array.from(\n new Set(\n suppressedProgressEvents\n .map((event) => {\n const payload = recordFromUnknown(event.payload);\n const reason = payload?.[\"reason\"];\n return typeof reason === \"string\" && reason.length > 0 ? reason : undefined;\n })\n .filter((reason): reason is string => Boolean(reason))\n )\n );\n const sourceReceiptStates = Array.from(\n new Set(\n [...sourceReceiptDeliveredEvents, ...sourceReceiptFailedEvents]\n .map((event) => {\n const payload = recordFromUnknown(event.payload);\n const state = payload?.[\"state\"];\n return typeof state === \"string\" && state.length > 0 ? state : undefined;\n })\n .filter((state): state is string => Boolean(state))\n )\n );\n return [\n \"Liveness:\",\n ` Provider: ${provider} (${strategy})`,\n ` Human callbacks: ${summary.metrics.humanCallbackCount}; thread noise ratio: ${summary.metrics.threadNoiseRatio}`,\n ` Progress delivery: ${livenessGuidance(strategy)}`,\n ...(sourceReceiptDeliveredEvents.length || sourceReceiptFailedEvents.length\n ? [\n ` Source receipts: ${sourceReceiptDeliveredEvents.length} delivered, ${sourceReceiptFailedEvents.length} failed${\n sourceReceiptStates.length ? ` (${sourceReceiptStates.join(\", \")})` : \"\"\n }`\n ]\n : []),\n ...(suppressedProgressEvents.length\n ? [\n ` Suppressed progress callbacks: ${suppressedProgressEvents.length}${\n suppressedReasons.length ? ` (${suppressedReasons.join(\", \")})` : \"\"\n }`\n ]\n : [])\n ];\n}\n\ntype CallbackDeliveryKind = \"acknowledgement\" | \"progress\" | \"final\";\ntype CallbackDeliveryState = \"queued\" | \"delivered\" | \"failed\" | \"duplicate\" | \"suppressed\";\n\nconst callbackKinds: CallbackDeliveryKind[] = [\"acknowledgement\", \"progress\", \"final\"];\nconst callbackStates: CallbackDeliveryState[] = [\"queued\", \"delivered\", \"failed\", \"duplicate\", \"suppressed\"];\n\nfunction emptyCallbackDeliveryCounts(): Record<CallbackDeliveryKind, Record<CallbackDeliveryState, number>> {\n return Object.fromEntries(\n callbackKinds.map((kind) => [\n kind,\n Object.fromEntries(callbackStates.map((state) => [state, 0])) as Record<CallbackDeliveryState, number>\n ])\n ) as Record<CallbackDeliveryKind, Record<CallbackDeliveryState, number>>;\n}\n\nfunction callbackDeliveryEventType(type: unknown): { kind: CallbackDeliveryKind; state: CallbackDeliveryState } | null {\n if (typeof type !== \"string\") return null;\n const match = type.match(/^callback\\.(acknowledgement|progress|final)\\.(queued|delivered|failed|duplicate|suppressed)$/);\n if (!match) return null;\n return {\n kind: match[1] as CallbackDeliveryKind,\n state: match[2] as CallbackDeliveryState\n };\n}\n\nfunction callbackDeliveryLine(kind: CallbackDeliveryKind, counts: Record<CallbackDeliveryState, number>): string | null {\n const parts = callbackStates.filter((state) => counts[state] > 0).map((state) => `${state}=${counts[state]}`);\n return parts.length ? ` ${kind}: ${parts.join(\", \")}` : null;\n}\n\nfunction formatCallbackDelivery(summary: RunStatusSummary): string[] {\n const counts = emptyCallbackDeliveryCounts();\n for (const event of summary.events) {\n const parsed = callbackDeliveryEventType(event.type);\n if (!parsed) continue;\n counts[parsed.kind][parsed.state] += 1;\n }\n\n const lines = callbackKinds\n .map((kind) => callbackDeliveryLine(kind, counts[kind]))\n .filter((line): line is string => Boolean(line));\n if (lines.length === 0) return [\"Callback Delivery:\", \" none\"];\n\n const finalFailed = counts.final.failed;\n const finalSuppressed = counts.final.suppressed;\n return [\n \"Callback Delivery:\",\n ...lines,\n ...(finalFailed || finalSuppressed\n ? [` Attention: final callback has failed=${finalFailed}, suppressed=${finalSuppressed}; inspect audit events before assuming the source thread saw the result.`]\n : [])\n ];\n}\n\nexport function formatRunStatus(summary: RunStatusSummary): string {\n const latestEvents = summary.events.slice(-5);\n const conclusion = summary.run.result?.conclusion;\n const timeoutPolicy = runSpecificTimeoutPolicy(summary);\n return [\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n `Run: ${summary.run.id}`,\n `Status: ${summary.run.status}${conclusion ? ` (${conclusion})` : \"\"}`,\n ...(timeoutPolicy ? [`Run Timeout: ${timeoutPolicy}`] : []),\n ...runTerminalSemantics(summary),\n `Source: ${summary.event.source} (${summary.event.sourceEventId})`,\n ...formatRunProvenance(summary),\n `Command: ${summary.event.command.rawText}`,\n `Updated: ${summary.run.updatedAt}`,\n `Metrics: ${summary.metrics.totalEventCount} events, ${summary.metrics.suggestedChangesCount} suggested action(s), ${summary.metrics.applyPlanCount} apply plan(s), ${summary.metrics.staleIntentCount} stale intent(s)`,\n ...formatRunLiveness(summary),\n ...formatCallbackDelivery(summary),\n \"Recent Events:\",\n ...(latestEvents.length ? latestEvents.map(formatRunEvent) : [\" none\"])\n ].join(\"\\n\");\n}\n\nfunction projectTargetLabel(input: { repoProvider: string; owner: string; repo: string }): string {\n return `${input.repoProvider}:${input.owner}/${input.repo}`;\n}\n\nexport function formatChannelStatus(summary: ChannelStatusSummary): string {\n const activeRun = summary.status.activeRun;\n const runTimeoutPolicy = summary.status.runTimeoutPolicy?.hardTimeoutMs\n ? formatRunTimeoutPolicy(summary.status.runTimeoutPolicy.hardTimeoutMs)\n : summary.runTimeoutPolicy;\n const statusPresentation = createSourceThreadStatusPresentation({\n title: \"OpenTag status:\",\n sourceContainer: `${summary.provider}:${summary.accountId}/${summary.conversationId}`,\n projectTarget: projectTargetLabel(summary.status.binding),\n bindingState: \"bound\",\n ...(activeRun\n ? {\n activeRun: {\n id: activeRun.id,\n status: activeRun.status,\n updatedAt: activeRun.updatedAt\n }\n }\n : {}),\n ...(summary.status.activeEvent?.command.rawText ? { currentCommand: summary.status.activeEvent.command.rawText } : {}),\n queuedFollowUps: summary.status.queuedFollowUps.slice(0, 5).map((followUp) => ({\n id: followUp.id,\n status: followUp.status,\n command: followUp.event.command.rawText\n })),\n queuedFollowUpsTotal: summary.status.queuedFollowUps.length,\n nextAction: activeRun\n ? `wait for the final reply, send a source-thread follow-up, or request cancellation with \\`opentag cancel --run ${activeRun.id}\\` or source-thread /stop.`\n : \"mention the bot in the bound source container to start a run.\",\n stopHint: `cancellation is explicit and is not reported as successful completion; timeout policy: ${runTimeoutPolicy}.`,\n detailHint: activeRun\n ? `use \\`opentag status --run ${activeRun.id}\\` locally for audit events and executor detail.`\n : `use \\`opentag status --channel ${summary.provider}:${summary.accountId}/${summary.conversationId}\\` to refresh this source-container view.`\n });\n return [\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n renderOpenTagPresentationPlainText(statusPresentation)\n ].join(\"\\n\");\n}\n\nexport async function runStatusCommand(options: StatusCommandOptions): Promise<void> {\n if (options.run && options.channel) {\n throw new Error(\"Use either --run or --channel, not both.\");\n }\n if (options.run) {\n console.log(formatRunStatus(await getRunStatusSummary({ runId: options.run, ...(options.config ? { configPath: options.config } : {}) })));\n return;\n }\n if (options.channel) {\n console.log(\n formatChannelStatus(await getChannelStatusSummary({ channel: options.channel, ...(options.config ? { configPath: options.config } : {}) }))\n );\n return;\n }\n console.log(formatStatus(await getStatusSummary({ ...(options.config ? { configPath: options.config } : {}) })));\n}\n","export async function fetchWithTimeout(input: {\n url: string;\n fetchImpl?: typeof fetch;\n timeoutMs: number;\n}): Promise<Response> {\n const fetchImpl = input.fetchImpl ?? fetch;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n return await fetchImpl(input.url, { signal: controller.signal });\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport async function probeDispatcherHealth(input: {\n dispatcherUrl: string;\n fetchImpl?: typeof fetch;\n timeoutMs: number;\n}): Promise<boolean> {\n const healthUrl = `${input.dispatcherUrl.replace(/\\/$/, \"\")}/healthz`;\n try {\n const response = await fetchWithTimeout({\n url: healthUrl,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),\n timeoutMs: input.timeoutMs\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n","import { formatProjectTargetRef } from \"@opentag/core\";\nimport type { OpenTagCliConfig } from \"./config.js\";\n\ntype ConfiguredRepository = OpenTagCliConfig[\"daemon\"][\"repositories\"][number];\n\nexport function formatConfiguredProjectTargetSummary(repository: ConfiguredRepository): string {\n const target = formatProjectTargetRef({\n provider: repository.provider,\n owner: repository.owner,\n repo: repository.repo\n });\n return `${target} (hasWorkspacePath=${repository.checkoutPath ? \"yes\" : \"no\"})`;\n}\n","import { relayUrlFromConfig, runtimeModeFromConfig, type OpenTagCliConfig } from \"./config.js\";\n\nexport type RelaySecurityCheck = {\n status: \"ok\" | \"warn\" | \"fail\";\n name: string;\n message: string;\n};\n\nexport function isLocalRelayUrl(relayUrl: string): boolean {\n const url = new URL(relayUrl);\n return url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"::1\" || url.hostname.endsWith(\".localhost\");\n}\n\nexport function assertRelayTransportAllowed(relayUrl: string): void {\n const url = new URL(relayUrl);\n if (url.protocol === \"http:\" && !isLocalRelayUrl(relayUrl)) {\n throw new Error(\"Relay URL must use HTTPS unless it points to localhost for local testing.\");\n }\n}\n\nexport function relayTrustWarning(relayUrl: string): string {\n return [\n `Security: only pair with a relay you operate or trust (${relayUrl}).`,\n \"The relay can see run metadata, command text, and progress, and it controls which queued runs this local runner claims.\"\n ].join(\"\\n\");\n}\n\nexport function relaySecurityChecksFromConfig(config: OpenTagCliConfig): RelaySecurityCheck[] {\n if (runtimeModeFromConfig(config) !== \"relay\") return [];\n const relayUrl = relayUrlFromConfig(config) ?? config.daemon.dispatcherUrl;\n let relay: URL;\n try {\n relay = new URL(relayUrl);\n } catch {\n return [{ status: \"fail\", name: \"relay URL\", message: \"Relay URL is malformed; fix runtime.relayUrl or daemon.dispatcherUrl.\" }];\n }\n const checks: RelaySecurityCheck[] = [];\n\n if (relay.protocol === \"https:\") {\n checks.push({ status: \"ok\", name: \"relay transport\", message: \"HTTPS is enabled.\" });\n } else if (relay.protocol === \"http:\" && isLocalRelayUrl(relayUrl)) {\n checks.push({ status: \"ok\", name: \"relay transport\", message: \"HTTP is limited to localhost development.\" });\n } else {\n checks.push({ status: \"fail\", name: \"relay transport\", message: \"Public relay URLs must use HTTPS.\" });\n }\n\n checks.push({\n status: \"warn\",\n name: \"relay trust\",\n message: \"Use only a relay you operate or trust; the relay is the remote control plane for this local runner.\"\n });\n\n checks.push(\n config.daemon.runnerToken\n ? {\n status: \"ok\",\n name: \"relay token scope\",\n message:\n \"Runner calls use daemon.runnerToken instead of the pairing token; keep registration, runner, and webhook credentials independently rotatable.\"\n }\n : {\n status: \"warn\",\n name: \"relay token scope\",\n message:\n \"This self-hosted MVP still uses the daemon pairing token for registration and runner calls; configure daemon.runnerToken before treating relay credentials as beta-ready.\"\n }\n );\n\n if (config.daemon.runnerTokens?.length) {\n checks.push({\n status: config.daemon.runnerToken ? \"ok\" : \"warn\",\n name: \"runner token rotation\",\n message: config.daemon.runnerToken\n ? `${config.daemon.runnerTokens.length} additional runner token(s) configured for the rotation window.`\n : \"Additional runner tokens are configured, but daemon.runnerToken is missing; configure the current runner token before relying on rotation.\"\n });\n }\n\n if (config.daemon.revokedRunnerTokenFingerprints?.length) {\n checks.push({\n status: \"ok\",\n name: \"runner token revocation\",\n message: `${config.daemon.revokedRunnerTokenFingerprints.length} revoked runner token fingerprint(s) configured; revoked tokens fail closed without printing token values.`\n });\n }\n\n checks.push({\n status: \"ok\",\n name: \"Project Target allowlist\",\n message: `${config.daemon.repositories.length} local Project Target(s) configured; the runner refuses unlisted targets before executor startup.`\n });\n\n if (config.platforms.github) {\n checks.push({\n status: \"ok\",\n name: \"GitHub webhook secret\",\n message: \"Configured locally; the relay /github/webhooks endpoint must verify this secret before creating runs.\"\n });\n }\n\n if (config.platforms.slack || config.platforms.lark) {\n const unsupported = [config.platforms.slack ? \"Slack\" : undefined, config.platforms.lark ? \"Lark / Feishu\" : undefined]\n .filter((value): value is string => Boolean(value))\n .join(\", \");\n checks.push({\n status: \"fail\",\n name: \"relay platform support\",\n message: `${unsupported} relay mode is not supported in this MVP; use local mode for those ingress paths.`\n });\n }\n\n if (!config.daemon.security) {\n checks.push({\n status: \"warn\",\n name: \"runner security policy\",\n message: \"No explicit daemon.security policy is configured; consider setting allowedWorkspaceRoot for relay-backed runners.\"\n });\n }\n\n return checks;\n}\n\nexport function formatRelaySecurityChecks(checks: RelaySecurityCheck[]): string[] {\n if (!checks.length) return [];\n return [\"Relay Security:\", ...checks.map((check) => ` ${check.status.toUpperCase()} ${check.name}: ${check.message}`)];\n}\n","type SecretContainer = Record<string, unknown>;\n\nfunction asRecord(value: unknown): SecretContainer | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as SecretContainer) : undefined;\n}\n\nfunction getPath(root: unknown, path: string[]): unknown {\n let current: unknown = root;\n for (const segment of path) {\n const record = asRecord(current);\n if (!record || !(segment in record)) return undefined;\n current = record[segment];\n }\n return current;\n}\n\nfunction formatSecretSource(value: unknown): string {\n if (value === undefined) return \"missing\";\n if (value === null) return \"disabled\";\n if (Array.isArray(value)) {\n if (value.length === 0) return \"none\";\n const sources = [...new Set(value.map(formatSecretSource))];\n return `${value.length} configured (${sources.join(\", \")})`;\n }\n if (typeof value === \"string\") {\n const ref = value.match(/^\\[(env|file|keychain):(.+)]$/);\n if (ref) return `${ref[1]} ref (${ref[2]})`;\n return \"inline (redacted)\";\n }\n return \"configured (redacted)\";\n}\n\nfunction hasPath(root: unknown, path: string[]): boolean {\n return getPath(root, path) !== undefined;\n}\n\nexport function formatSecretReadiness(redactedConfig: unknown): string[] {\n const rows: string[] = [\"Secrets:\"];\n const add = (label: string, path: string[], fallback?: string) => {\n const value = getPath(redactedConfig, path);\n rows.push(` ${label}: ${value === undefined && fallback ? fallback : formatSecretSource(value)}`);\n };\n\n add(\"daemon.pairingToken\", [\"daemon\", \"pairingToken\"]);\n add(\"daemon.runnerToken\", [\"daemon\", \"runnerToken\"], \"daemon.pairingToken fallback\");\n if (hasPath(redactedConfig, [\"daemon\", \"runnerTokens\"])) {\n add(\"daemon.runnerTokens\", [\"daemon\", \"runnerTokens\"]);\n }\n if (hasPath(redactedConfig, [\"daemon\", \"githubToken\"])) {\n add(\"daemon.githubToken\", [\"daemon\", \"githubToken\"]);\n }\n if (hasPath(redactedConfig, [\"daemon\", \"githubApplyToken\"]) || hasPath(redactedConfig, [\"daemon\", \"githubToken\"])) {\n add(\"daemon.githubApplyToken\", [\"daemon\", \"githubApplyToken\"], \"daemon.githubToken fallback\");\n }\n\n if (hasPath(redactedConfig, [\"platforms\", \"lark\"])) {\n add(\"platforms.lark.appSecret\", [\"platforms\", \"lark\", \"appSecret\"]);\n }\n\n if (hasPath(redactedConfig, [\"platforms\", \"slack\"])) {\n add(\"platforms.slack.botToken\", [\"platforms\", \"slack\", \"botToken\"]);\n if (hasPath(redactedConfig, [\"platforms\", \"slack\", \"appToken\"])) {\n add(\"platforms.slack.appToken\", [\"platforms\", \"slack\", \"appToken\"]);\n }\n if (hasPath(redactedConfig, [\"platforms\", \"slack\", \"signingSecret\"])) {\n add(\"platforms.slack.signingSecret\", [\"platforms\", \"slack\", \"signingSecret\"]);\n }\n }\n\n if (hasPath(redactedConfig, [\"platforms\", \"github\"])) {\n add(\"platforms.github.webhookSecret\", [\"platforms\", \"github\", \"webhookSecret\"]);\n }\n\n return rows;\n}\n","import { createDoctorSummaryPresentation, renderOpenTagPresentationPlainText } from \"@opentag/core\";\nimport { doctorHasFailures, executorsFromConfig, runDoctor, type DoctorCheck } from \"@opentag/local-runtime\";\nimport { formatConfiguredCapabilities } from \"./catalogs/capabilities.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\nimport { defaultConfigPath, readCliConfig, readRedactedCliConfig, redactedCliConfig } from \"./config.js\";\nimport { relaySecurityChecksFromConfig } from \"./relay-security.js\";\nimport { formatSecretReadiness } from \"./secret-readiness.js\";\n\nexport type DoctorCommandOptions = {\n config?: string;\n};\n\nfunction credentialSourcesCheck(secretConfig: unknown): DoctorCheck {\n return {\n status: \"ok\",\n name: \"credential sources\",\n message: formatSecretReadiness(secretConfig).slice(1).join(\"; \")\n };\n}\n\nexport function appendCliDoctorChecks(config: ReturnType<typeof readCliConfig>, checks: DoctorCheck[], secretConfig: unknown = redactedCliConfig(config)): DoctorCheck[] {\n const platforms = Object.entries(config.platforms)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key as PlatformId);\n const capabilityLines = formatConfiguredCapabilities({\n platforms,\n executors: config.daemon.repositories.map((repository) => repository.defaultExecutor)\n }).slice(1);\n return [\n ...checks,\n credentialSourcesCheck(secretConfig),\n {\n status: \"ok\",\n name: \"capability catalog\",\n message: capabilityLines.join(\"; \")\n },\n ...relaySecurityChecksFromConfig(config).map((check) => ({\n status: check.status,\n name: check.name,\n message: check.message\n }))\n ];\n}\n\nexport function formatCliDoctorChecks(checks: DoctorCheck[]): string {\n return renderOpenTagPresentationPlainText(\n createDoctorSummaryPresentation({\n title: \"OpenTag doctor\",\n checks\n })\n );\n}\n\nexport async function runDoctorCommand(options: DoctorCommandOptions): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n let config: ReturnType<typeof readCliConfig>;\n let secretConfig: unknown;\n try {\n secretConfig = readRedactedCliConfig(configPath);\n config = readCliConfig(configPath);\n } catch (error) {\n const checks: DoctorCheck[] = [\n {\n status: \"fail\",\n name: \"credential resolution\",\n message: error instanceof Error ? error.message : String(error)\n }\n ];\n if (secretConfig !== undefined) {\n checks.unshift(credentialSourcesCheck(secretConfig));\n }\n console.log(formatCliDoctorChecks(checks));\n process.exitCode = 1;\n return;\n }\n const checks = appendCliDoctorChecks(\n config,\n await runDoctor({\n config: config.daemon,\n executors: executorsFromConfig(config.daemon)\n }),\n secretConfig\n );\n console.log(formatCliDoctorChecks(checks));\n if (doctorHasFailures(checks)) {\n process.exitCode = 1;\n }\n}\n","import { createDispatcherClient, type DispatcherRunnerClient } from \"@opentag/client\";\nimport { OpenTagRunResultSchema, type OpenTagRunResult } from \"@opentag/core\";\nimport { defaultConfigPath, readCliConfig, runnerDispatcherToken } from \"./config.js\";\n\nexport type IngestCommandOptions = {\n config?: string;\n run?: string;\n event?: string;\n source?: string;\n message?: string;\n type?: string;\n idempotencyKey?: string;\n resultJson?: string;\n conclusion?: string;\n summary?: string;\n};\n\nexport type IngestTemplateCommandOptions = {\n source?: string;\n command?: string;\n format?: string;\n};\n\nexport type IngestDependencies = {\n client?: Pick<DispatcherRunnerClient, \"progress\" | \"complete\">;\n now?(): Date;\n fetchImpl?: typeof fetch;\n logger?: Pick<Console, \"log\">;\n};\n\ntype NormalizedIngestEvent = \"progress\" | \"completed\" | \"failed\" | \"cancelled\" | \"interrupted\" | \"timed_out\";\ntype IngestTemplateFormat = \"shell\" | \"manifest\";\n\nexport type IngestHookManifestEvent = {\n externalEvent: string;\n openTagEvent: NormalizedIngestEvent;\n idempotencySuffix: string;\n terminal: boolean;\n visibility: \"audit\";\n conclusion?: OpenTagRunResult[\"conclusion\"];\n description: string;\n};\n\nexport type IngestHookManifest = {\n version: 1;\n kind: \"opentag_hook_ingest_manifest\";\n source: string;\n command: string;\n requiredEnv: string[];\n optionalEnv: string[];\n permissions: {\n conversationAccess: \"none\";\n promptMutation: \"none\";\n rawContextAccess: false;\n writeActionAccess: \"none\";\n sourceThreadProgress: \"audit_only\";\n sourceThreadFinal: \"concise_open_tag_summary\";\n };\n lifecycle: {\n progressVisibility: \"audit\";\n finalAnswerGate: \"before_agent_finalize_is_progress\";\n terminalEventPolicy: \"exactly_one_terminal_event_per_run\";\n };\n events: IngestHookManifestEvent[];\n constraints: string[];\n};\n\nconst INGEST_SOURCE_PATTERN = /^[a-z0-9][a-z0-9_-]{0,63}$/;\n\nfunction nonEmpty(value: string | undefined, label: string): string {\n const trimmed = value?.trim();\n if (!trimmed) throw new Error(`${label} is required.`);\n return trimmed;\n}\n\nfunction normalizeIngestSource(value: string | undefined): string {\n const source = (value?.trim() || \"external\").toLowerCase();\n if (!INGEST_SOURCE_PATTERN.test(source)) {\n throw new Error(\"--source must be a safe label using lowercase letters, numbers, underscores, or hyphens.\");\n }\n return source;\n}\n\nfunction normalizeIngestEventName(value: string | undefined): string {\n return nonEmpty(value, \"--event\").toLowerCase().replace(/[-.]/g, \"_\");\n}\n\nfunction normalizeIngestTemplateFormat(value: string | undefined): IngestTemplateFormat {\n const format = (value?.trim() || \"shell\").toLowerCase();\n if (format === \"shell\" || format === \"manifest\") return format;\n throw new Error(\"--format must be shell or manifest.\");\n}\n\nfunction normalizeIngestEvent(value: string | undefined): NormalizedIngestEvent {\n const event = normalizeIngestEventName(value);\n if (\n event === \"progress\" ||\n event === \"agent_progress\" ||\n event === \"post_llm_call\" ||\n event === \"before_agent_finalize\" ||\n event === \"tool_start\" ||\n event === \"tool_end\"\n ) {\n return \"progress\";\n }\n if (event === \"agent_end\" || event === \"completed\" || event === \"complete\" || event === \"final\") return \"completed\";\n if (event === \"agent_failed\" || event === \"failed\" || event === \"failure\" || event === \"agent_error\" || event === \"error\") return \"failed\";\n if (event === \"agent_cancelled\" || event === \"cancelled\" || event === \"canceled\" || event === \"stop\" || event === \"stopped\") {\n return \"cancelled\";\n }\n if (event === \"timed_out\" || event === \"timeout\" || event === \"agent_timeout\") return \"timed_out\";\n if (event === \"agent_interrupted\" || event === \"interrupted\" || event === \"session_end\" || event === \"on_session_end\") return \"interrupted\";\n throw new Error(\n \"--event must be progress, post_llm_call, before_agent_finalize, agent_end, failed, cancelled, timed_out, or interrupted.\"\n );\n}\n\nfunction clientFromConfig(configPath: string, dependencies: IngestDependencies): Pick<DispatcherRunnerClient, \"progress\" | \"complete\"> {\n if (dependencies.client) return dependencies.client;\n const config = readCliConfig(configPath);\n const token = runnerDispatcherToken(config.daemon);\n return createDispatcherClient({\n dispatcherUrl: config.daemon.dispatcherUrl,\n runnerId: config.daemon.runnerId,\n ...(token ? { pairingToken: token } : {}),\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {})\n });\n}\n\nfunction parseResultJson(value: string): OpenTagRunResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n throw new Error(`--result-json must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n return OpenTagRunResultSchema.parse(parsed);\n}\n\nfunction resultFromOptions(options: IngestCommandOptions, event: NormalizedIngestEvent): OpenTagRunResult {\n if (options.resultJson) return parseResultJson(options.resultJson);\n\n const summary = nonEmpty(options.summary ?? options.message, event === \"completed\" ? \"--summary or --message\" : \"--message\");\n if (event === \"completed\") {\n const conclusion = options.conclusion?.trim() || \"success\";\n return OpenTagRunResultSchema.parse({ conclusion, summary });\n }\n if (event === \"cancelled\") {\n return { conclusion: \"cancelled\", summary };\n }\n if (event === \"interrupted\") {\n return { conclusion: \"interrupted\", summary };\n }\n if (event === \"timed_out\") {\n return { conclusion: \"timed_out\", summary };\n }\n return { conclusion: \"failure\", summary };\n}\n\nfunction shellParameterDefault(value: string): string {\n return value.replace(/[\"\\\\$`]/g, \"\\\\$&\");\n}\n\nfunction ingestCommandLine(input: {\n commandVariable?: string;\n event: string;\n idempotencySuffix: string;\n message?: string;\n summary?: string;\n commented?: boolean;\n}): string {\n const prefix = input.commented ? \"# \" : \"\";\n const commandVariable = input.commandVariable ?? \"$OPENTAG_INGEST_COMMAND\";\n const textFlag = input.summary ? `--summary \"${input.summary}\"` : `--message \"${input.message ?? \"\"}\"`;\n return `${prefix}\"${commandVariable}\" ingest --run \"$OPENTAG_RUN_ID\" --source \"$OPENTAG_INGEST_SOURCE\" --event ${input.event} --idempotency-key \"$OPENTAG_INGEST_IDEMPOTENCY_PREFIX:${input.idempotencySuffix}\" ${textFlag}`;\n}\n\nfunction genericIngestTemplateBody(): string[] {\n return [\n ingestCommandLine({ event: \"progress\", idempotencySuffix: \"progress:started\", message: \"External runtime started.\" }),\n ingestCommandLine({ event: \"post_llm_call\", idempotencySuffix: \"progress:post_llm_call\", message: \"LLM call completed.\" }),\n ingestCommandLine({ event: \"before_agent_finalize\", idempotencySuffix: \"progress:before_agent_finalize\", message: \"Final answer is being prepared.\" }),\n \"\",\n \"# Choose exactly one terminal event:\",\n ingestCommandLine({ event: \"agent_end\", idempotencySuffix: \"complete:agent_end\", summary: \"External runtime completed.\" }),\n ingestCommandLine({\n event: \"failed\",\n idempotencySuffix: \"complete:failed\",\n message: \"External runtime failed before finalization.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"on_session_end\",\n idempotencySuffix: \"complete:on_session_end\",\n message: \"External runtime ended before finalization.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"timed_out\",\n idempotencySuffix: \"complete:timed_out\",\n message: \"External runtime exceeded its timeout policy.\",\n commented: true\n })\n ];\n}\n\nfunction hermesIngestTemplateBody(): string[] {\n return [\n \"# Hermes hook placement:\",\n \"# - post_llm_call: audit-visible progress after a successful model call.\",\n \"# - before_agent_finalize: final-answer gate, still progress rather than completion.\",\n \"# - agent_end: natural completion. Use on_session_end for interrupted sessions.\",\n ingestCommandLine({ event: \"progress\", idempotencySuffix: \"progress:started\", message: \"Hermes runtime started.\" }),\n ingestCommandLine({ event: \"post_llm_call\", idempotencySuffix: \"progress:post_llm_call\", message: \"Hermes post_llm_call completed.\" }),\n ingestCommandLine({\n event: \"before_agent_finalize\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n message: \"Hermes finalization gate reached.\"\n }),\n \"\",\n \"# Choose exactly one terminal event:\",\n ingestCommandLine({ event: \"agent_end\", idempotencySuffix: \"complete:agent_end\", summary: \"Hermes session completed.\" }),\n ingestCommandLine({\n event: \"on_session_end\",\n idempotencySuffix: \"complete:on_session_end\",\n message: \"Hermes session ended before a final answer.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_failed\",\n idempotencySuffix: \"complete:agent_failed\",\n message: \"Hermes session failed.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_timeout\",\n idempotencySuffix: \"complete:agent_timeout\",\n message: \"Hermes session exceeded its timeout policy.\",\n commented: true\n })\n ];\n}\n\nfunction openClawIngestTemplateBody(): string[] {\n return [\n \"# OpenClaw hook placement:\",\n \"# - before_agent_finalize: final answer is about to be produced, but the run is not complete yet.\",\n \"# - agent_end: natural completion observation.\",\n \"# - agent_cancelled / agent_interrupted: explicit non-success terminal states.\",\n ingestCommandLine({ event: \"progress\", idempotencySuffix: \"progress:started\", message: \"OpenClaw runtime started.\" }),\n ingestCommandLine({\n event: \"before_agent_finalize\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n message: \"OpenClaw finalization gate reached.\"\n }),\n \"\",\n \"# Choose exactly one terminal event:\",\n ingestCommandLine({ event: \"agent_end\", idempotencySuffix: \"complete:agent_end\", summary: \"OpenClaw agent completed.\" }),\n ingestCommandLine({\n event: \"agent_cancelled\",\n idempotencySuffix: \"complete:agent_cancelled\",\n message: \"OpenClaw agent was cancelled by user request.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_interrupted\",\n idempotencySuffix: \"complete:agent_interrupted\",\n message: \"OpenClaw agent was interrupted before finalization.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_timeout\",\n idempotencySuffix: \"complete:agent_timeout\",\n message: \"OpenClaw agent exceeded its timeout policy.\",\n commented: true\n })\n ];\n}\n\nfunction sourceSpecificIngestTemplateBody(source: string): string[] {\n if (source === \"hermes\") return hermesIngestTemplateBody();\n if (source === \"openclaw\") return openClawIngestTemplateBody();\n return genericIngestTemplateBody();\n}\n\nfunction genericIngestManifestEvents(): IngestHookManifestEvent[] {\n return [\n {\n externalEvent: \"progress\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:started\",\n terminal: false,\n visibility: \"audit\",\n description: \"External runtime started.\"\n },\n {\n externalEvent: \"post_llm_call\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:post_llm_call\",\n terminal: false,\n visibility: \"audit\",\n description: \"Model call completed; this stays in audit/status by default.\"\n },\n {\n externalEvent: \"before_agent_finalize\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n terminal: false,\n visibility: \"audit\",\n description: \"Final answer gate reached; this is not a successful completion signal.\"\n },\n {\n externalEvent: \"agent_end\",\n openTagEvent: \"completed\",\n idempotencySuffix: \"complete:agent_end\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"success\",\n description: \"Natural external runtime completion.\"\n },\n {\n externalEvent: \"failed\",\n openTagEvent: \"failed\",\n idempotencySuffix: \"complete:failed\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"failure\",\n description: \"External runtime failed before finalization.\"\n },\n {\n externalEvent: \"on_session_end\",\n openTagEvent: \"interrupted\",\n idempotencySuffix: \"complete:on_session_end\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"interrupted\",\n description: \"External runtime ended without a normal final answer.\"\n },\n {\n externalEvent: \"timed_out\",\n openTagEvent: \"timed_out\",\n idempotencySuffix: \"complete:timed_out\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"timed_out\",\n description: \"External runtime exceeded its timeout policy.\"\n }\n ];\n}\n\nfunction hermesIngestManifestEvents(): IngestHookManifestEvent[] {\n return genericIngestManifestEvents().map((event) => {\n if (event.externalEvent === \"progress\") return { ...event, description: \"Hermes runtime started.\" };\n if (event.externalEvent === \"post_llm_call\") return { ...event, description: \"Hermes post_llm_call completed.\" };\n if (event.externalEvent === \"before_agent_finalize\") return { ...event, description: \"Hermes finalization gate reached; still progress.\" };\n if (event.externalEvent === \"agent_end\") return { ...event, description: \"Hermes session completed.\" };\n if (event.externalEvent === \"failed\") return { ...event, externalEvent: \"agent_failed\", idempotencySuffix: \"complete:agent_failed\", description: \"Hermes session failed.\" };\n if (event.externalEvent === \"on_session_end\") return { ...event, description: \"Hermes session ended before a final answer.\" };\n if (event.externalEvent === \"timed_out\") return { ...event, externalEvent: \"agent_timeout\", idempotencySuffix: \"complete:agent_timeout\", description: \"Hermes session exceeded its timeout policy.\" };\n return event;\n });\n}\n\nfunction openClawIngestManifestEvents(): IngestHookManifestEvent[] {\n return [\n {\n externalEvent: \"progress\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:started\",\n terminal: false,\n visibility: \"audit\",\n description: \"OpenClaw runtime started.\"\n },\n {\n externalEvent: \"before_agent_finalize\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n terminal: false,\n visibility: \"audit\",\n description: \"OpenClaw finalization gate reached; this is not a completion signal.\"\n },\n {\n externalEvent: \"agent_end\",\n openTagEvent: \"completed\",\n idempotencySuffix: \"complete:agent_end\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"success\",\n description: \"OpenClaw agent completed naturally.\"\n },\n {\n externalEvent: \"agent_cancelled\",\n openTagEvent: \"cancelled\",\n idempotencySuffix: \"complete:agent_cancelled\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"cancelled\",\n description: \"OpenClaw agent was cancelled by user request.\"\n },\n {\n externalEvent: \"agent_interrupted\",\n openTagEvent: \"interrupted\",\n idempotencySuffix: \"complete:agent_interrupted\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"interrupted\",\n description: \"OpenClaw agent was interrupted before finalization.\"\n },\n {\n externalEvent: \"agent_timeout\",\n openTagEvent: \"timed_out\",\n idempotencySuffix: \"complete:agent_timeout\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"timed_out\",\n description: \"OpenClaw agent exceeded its timeout policy.\"\n }\n ];\n}\n\nfunction sourceSpecificIngestManifestEvents(source: string): IngestHookManifestEvent[] {\n if (source === \"hermes\") return hermesIngestManifestEvents();\n if (source === \"openclaw\") return openClawIngestManifestEvents();\n return genericIngestManifestEvents();\n}\n\nexport function createIngestHookManifest(options: IngestTemplateCommandOptions = {}): IngestHookManifest {\n const source = normalizeIngestSource(options.source);\n const command = options.command?.trim() || \"opentag\";\n return {\n version: 1,\n kind: \"opentag_hook_ingest_manifest\",\n source,\n command,\n requiredEnv: [\"OPENTAG_RUN_ID\"],\n optionalEnv: [\"OPENTAG_INGEST_SOURCE\", \"OPENTAG_INGEST_COMMAND\", \"OPENTAG_INGEST_IDEMPOTENCY_PREFIX\"],\n permissions: {\n conversationAccess: \"none\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n sourceThreadProgress: \"audit_only\",\n sourceThreadFinal: \"concise_open_tag_summary\"\n },\n lifecycle: {\n progressVisibility: \"audit\",\n finalAnswerGate: \"before_agent_finalize_is_progress\",\n terminalEventPolicy: \"exactly_one_terminal_event_per_run\"\n },\n events: sourceSpecificIngestManifestEvents(source),\n constraints: [\n \"Do not paste dispatcher tokens, local checkout paths, raw provider payloads, or raw tool logs into source threads.\",\n \"Use stable idempotency keys when retrying the same hook delivery.\",\n \"Report exactly one terminal event per OpenTag run.\",\n \"Keep progress audit-visible by default; source-thread callbacks should remain concise and provider-rendered from OpenTag state.\"\n ]\n };\n}\n\nexport function renderIngestShellTemplate(options: IngestTemplateCommandOptions = {}): string {\n const source = normalizeIngestSource(options.source);\n const command = options.command?.trim() || \"opentag\";\n return [\n \"#!/usr/bin/env sh\",\n \"set -eu\",\n \"\",\n \"# OpenTag local hook ingest template.\",\n \"# Requires a paired local config with runnerId, dispatcherUrl, and runnerToken or legacy pairingToken.\",\n \"# Do not paste dispatcher tokens, local checkout paths, or raw tool logs into source threads.\",\n \": \\\"${OPENTAG_RUN_ID:?Set OPENTAG_RUN_ID to the OpenTag run id}\\\"\",\n `OPENTAG_INGEST_SOURCE=\"\\${OPENTAG_INGEST_SOURCE:-${source}}\"`,\n `OPENTAG_INGEST_COMMAND=\"\\${OPENTAG_INGEST_COMMAND:-${shellParameterDefault(command)}}\"`,\n 'OPENTAG_INGEST_IDEMPOTENCY_PREFIX=\"${OPENTAG_INGEST_IDEMPOTENCY_PREFIX:-$OPENTAG_INGEST_SOURCE:$OPENTAG_RUN_ID}\"',\n \"\",\n ...sourceSpecificIngestTemplateBody(source)\n ].join(\"\\n\");\n}\n\nexport function renderIngestTemplate(options: IngestTemplateCommandOptions = {}): string {\n const format = normalizeIngestTemplateFormat(options.format);\n if (format === \"manifest\") {\n return JSON.stringify(createIngestHookManifest(options), null, 2);\n }\n return renderIngestShellTemplate(options);\n}\n\nexport async function runIngestCommand(options: IngestCommandOptions, dependencies: IngestDependencies = {}): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n const runId = nonEmpty(options.run, \"--run\");\n const source = normalizeIngestSource(options.source);\n const rawEventName = normalizeIngestEventName(options.event);\n const event = normalizeIngestEvent(options.event);\n const client = clientFromConfig(configPath, dependencies);\n const logger = dependencies.logger ?? console;\n\n if (event === \"progress\") {\n const message = nonEmpty(options.message, \"--message\");\n await client.progress(runId, {\n type: options.type?.trim() || `ingest.${source}.${rawEventName}`,\n message,\n at: (dependencies.now?.() ?? new Date()).toISOString(),\n visibility: \"audit\",\n ...(options.idempotencyKey?.trim() ? { idempotencyKey: options.idempotencyKey.trim() } : {})\n });\n logger.log(`Ingested progress for ${runId}.`);\n return;\n }\n\n const result = resultFromOptions(options, event);\n const idempotencyKey = options.idempotencyKey?.trim();\n if (idempotencyKey) {\n await client.complete(runId, result, { idempotencyKey });\n } else {\n await client.complete(runId, result);\n }\n logger.log(`Ingested ${event} result for ${runId}.`);\n}\n\nexport async function runIngestTemplateCommand(\n options: IngestTemplateCommandOptions,\n dependencies: Pick<IngestDependencies, \"logger\"> = {}\n): Promise<void> {\n const logger = dependencies.logger ?? console;\n logger.log(renderIngestTemplate(options));\n}\n","import { createOpenTagClient, type SourceDeliveryPruneResult } from \"@opentag/client\";\nimport { z } from \"zod\";\nimport { defaultConfigPath, readCliConfig, runnerDispatcherToken, type OpenTagCliConfig } from \"./config.js\";\n\nexport type MaintenancePruneSourceDeliveriesOptions = {\n config?: string;\n olderThan?: string;\n limit?: string | number;\n};\n\nexport type PruneSourceDeliveriesSummary = {\n configPath: string;\n dispatcherUrl: string;\n olderThan: string;\n limit?: number;\n result: SourceDeliveryPruneResult;\n};\n\nfunction parsePositiveInteger(name: string, value: string | number | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = typeof value === \"number\" ? value : Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`${name} must be a positive integer.`);\n }\n return parsed;\n}\n\nexport function parsePruneSourceDeliveriesOptions(options: MaintenancePruneSourceDeliveriesOptions): {\n olderThan: string;\n limit?: number;\n} {\n const olderThan = options.olderThan?.trim();\n if (!olderThan) {\n throw new Error(\"--older-than is required.\");\n }\n if (!z.string().datetime().safeParse(olderThan).success) {\n throw new Error(\"--older-than must be a valid ISO timestamp.\");\n }\n const limit = parsePositiveInteger(\"--limit\", options.limit);\n return {\n olderThan,\n ...(limit ? { limit } : {})\n };\n}\n\nexport async function pruneSourceDeliveriesFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n olderThan: string;\n limit?: number;\n fetchImpl?: typeof fetch;\n}): Promise<PruneSourceDeliveriesSummary> {\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const result = await client.pruneSourceDeliveries({\n olderThan: input.olderThan,\n ...(input.limit !== undefined ? { limit: input.limit } : {})\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n olderThan: input.olderThan,\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n result\n };\n}\n\nexport function formatPruneSourceDeliveriesSummary(summary: PruneSourceDeliveriesSummary): string {\n return [\n \"Source delivery replay-key prune:\",\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n `Older than: ${summary.olderThan}`,\n `Limit: ${summary.limit ?? \"default\"}`,\n `Scanned: ${summary.result.scanned}`,\n `Pruned: ${summary.result.pruned}`,\n `Retained active: ${summary.result.retainedActive}`\n ].join(\"\\n\");\n}\n\nexport async function runMaintenancePruneSourceDeliveriesCommand(options: MaintenancePruneSourceDeliveriesOptions): Promise<void> {\n const parsed = parsePruneSourceDeliveriesOptions(options);\n const configPath = options.config ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n const summary = await pruneSourceDeliveriesFromConfig({\n config,\n configPath,\n ...parsed\n });\n console.log(formatPruneSourceDeliveriesSummary(summary));\n}\n","import { createServer } from \"node:net\";\nimport { createDispatcherAdminClient, type ChannelBindingInput, type RepositoryBindingConfig } from \"@opentag/client\";\nimport { startGitHubIngress, type GitHubIngressConfig, type GitHubIngressHandle } from \"@opentag/github\";\nimport { DEFAULT_AGENT_ID, startLarkIngress, type LarkIngressConfig, type LarkIngressHandle } from \"@opentag/lark\";\nimport {\n createDaemonRuntimeInput,\n dispatcherRuntimeHardeningInputFromEnv,\n normalizeChannelBindings,\n serveDaemon,\n startDispatcher,\n type LocalDispatcherRuntimeInput\n} from \"@opentag/local-runtime\";\nimport {\n startSlackIngress,\n startSlackSocketModeIngress,\n type SlackEventsApiIngressConfig,\n type SlackIngressHandle,\n type SlackSocketModeIngressConfig,\n type SlackSocketModeIngressHandle\n} from \"@opentag/slack\";\nimport {\n defaultConfigPath,\n ensurePrivateDirectory,\n readCliConfig,\n relayUrlFromConfig,\n runtimeModeFromConfig,\n type OpenTagCliConfig\n} from \"./config.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { githubLocalWebhookUrl, githubPublicWebhookUrlPlaceholder, githubWebhooksSettingsUrl } from \"./platforms/github/display.js\";\nimport { DEFAULT_GITHUB_WEBHOOK_PORT, DEFAULT_SLACK_EVENTS_PORT } from \"./platforms/ports.js\";\nimport { assertRelayTransportAllowed, relayTrustWarning } from \"./relay-security.js\";\n\nexport type StartCommandOptions = {\n config?: string;\n background?: boolean;\n};\n\ntype Logger = Pick<Console, \"log\">;\n\nexport type StartRuntimeDependencies = {\n assertStartPortsAvailable?: typeof assertStartPortsAvailable;\n bootstrapDispatcher?: typeof bootstrapLocalDispatcher;\n env?: NodeJS.ProcessEnv;\n logger?: Logger;\n serveDaemon?: typeof serveDaemon;\n startDispatcher?: typeof startDispatcher;\n startGitHubIngress?: typeof startGitHubIngress;\n startLarkIngress?: typeof startLarkIngress;\n startSlackIngress?: typeof startSlackIngress;\n startSlackSocketModeIngress?: typeof startSlackSocketModeIngress;\n waitForDispatcher?: typeof waitForDispatcher;\n};\n\nexport type StartFromConfigInput = {\n config: OpenTagCliConfig;\n configPath: string;\n dependencies?: StartRuntimeDependencies;\n listenForProcessSignals?: boolean;\n signal?: AbortSignal;\n};\n\nexport type BootstrapClient = {\n registerRunner(name?: string): Promise<void>;\n bindRepository(binding: RepositoryBindingConfig): Promise<void>;\n bindChannel(binding: ChannelBindingInput): Promise<void>;\n};\n\ntype PlatformIngressHandle =\n | { platform: \"lark\"; url?: string; handle: LarkIngressHandle }\n | { platform: \"slack\"; mode: \"events_api\"; url: string; handle: SlackIngressHandle }\n | { platform: \"slack\"; mode: \"socket_mode\"; handle: SlackSocketModeIngressHandle }\n | { platform: \"github\"; url: string; webhookPath: string; handle: GitHubIngressHandle };\n\nfunction dispatcherPortFromUrl(dispatcherUrl: string): number {\n const url = new URL(dispatcherUrl);\n if (url.protocol !== \"http:\" || (url.hostname !== \"localhost\" && url.hostname !== \"127.0.0.1\")) {\n throw new Error(\"opentag start currently supports only local http dispatcher URLs.\");\n }\n if (url.pathname !== \"/\" || url.search || url.hash) {\n throw new Error(\"Dispatcher URL must not include a path, query, or hash.\");\n }\n const port = url.port ? Number(url.port) : 80;\n if (!Number.isInteger(port) || port <= 0) {\n throw new Error(`Dispatcher URL has an invalid port: ${dispatcherUrl}`);\n }\n return port;\n}\n\nfunction requireLarkConfig(config: OpenTagCliConfig): NonNullable<OpenTagCliConfig[\"platforms\"][\"lark\"]> {\n const lark = config.platforms.lark;\n if (!lark) {\n throw new Error(\"This config has no Lark platform config.\");\n }\n return lark;\n}\n\nfunction requireSlackConfig(config: OpenTagCliConfig): NonNullable<OpenTagCliConfig[\"platforms\"][\"slack\"]> {\n const slack = config.platforms.slack;\n if (!slack) {\n throw new Error(\"This config has no Slack platform config.\");\n }\n return slack;\n}\n\nfunction requireGitHubConfig(config: OpenTagCliConfig): NonNullable<OpenTagCliConfig[\"platforms\"][\"github\"]> {\n const github = config.platforms.github;\n if (!github) {\n throw new Error(\"This config has no GitHub platform config.\");\n }\n return github;\n}\n\nfunction hasStartablePlatform(config: OpenTagCliConfig): boolean {\n return Boolean(config.platforms.lark || config.platforms.slack || config.platforms.github);\n}\n\nfunction positiveIntegerFromEnv(name: string, value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`${name} must be a positive integer`);\n }\n return parsed;\n}\n\nfunction maxRequestBodyBytesFromEnv(env?: NodeJS.ProcessEnv): number | undefined {\n return positiveIntegerFromEnv(\"OPENTAG_MAX_REQUEST_BODY_BYTES\", env?.OPENTAG_MAX_REQUEST_BODY_BYTES);\n}\n\ntype LocalPortCheck = {\n label: string;\n port: number;\n fix: string;\n};\n\nfunction localStartPortChecks(config: OpenTagCliConfig): LocalPortCheck[] {\n const checks: LocalPortCheck[] = [\n {\n label: \"dispatcher\",\n port: dispatcherPortFromUrl(config.daemon.dispatcherUrl),\n fix: \"Change daemon.dispatcherUrl in the OpenTag config.\"\n }\n ];\n const slack = config.platforms.slack;\n if (slack && slackModeFromCliConfig(config) === \"events_api\") {\n checks.push({\n label: \"Slack Events API\",\n port: slack.port ?? DEFAULT_SLACK_EVENTS_PORT,\n fix: \"Run `opentag setup --platform slack --slack-mode events_api --slack-port <port> --force`, or edit platforms.slack.port in the OpenTag config.\"\n });\n }\n const github = config.platforms.github;\n if (github) {\n checks.push({\n label: \"GitHub local webhook\",\n port: github.port ?? DEFAULT_GITHUB_WEBHOOK_PORT,\n fix: \"Run `opentag setup --platform github --github-port <port> --force`, or edit platforms.github.port in the OpenTag config.\"\n });\n }\n return checks;\n}\n\nasync function assertPortAvailable(check: LocalPortCheck): Promise<void> {\n const server = createServer();\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EADDRINUSE\") {\n reject(\n new Error(\n [\n `OpenTag cannot start ${check.label} because port ${check.port} is already in use.`,\n check.fix,\n `To inspect the current process: lsof -nP -iTCP:${check.port} -sTCP:LISTEN`\n ].join(\"\\n\")\n )\n );\n return;\n }\n reject(\n new Error(\n [`OpenTag cannot start ${check.label} on port ${check.port}: ${error.message}`, check.fix].join(\"\\n\")\n )\n );\n });\n // Tunnels commonly forward to localhost/127.0.0.1; this catches the real\n // collision even when another address family would still let Node listen.\n server.listen(check.port, \"127.0.0.1\", () => {\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n });\n}\n\nexport async function assertStartPortsAvailable(config: OpenTagCliConfig): Promise<void> {\n const checks = localStartPortChecks(config);\n const seen = new Map<number, LocalPortCheck>();\n for (const check of checks) {\n const existing = seen.get(check.port);\n if (existing) {\n throw new Error(\n [\n `OpenTag cannot start because ${existing.label} and ${check.label} both use port ${check.port}.`,\n `${existing.label}: ${existing.fix}`,\n `${check.label}: ${check.fix}`\n ].join(\"\\n\")\n );\n }\n seen.set(check.port, check);\n }\n for (const check of checks) {\n await assertPortAvailable(check);\n }\n}\n\nexport function dispatcherRuntimeInputFromCliConfig(\n config: OpenTagCliConfig,\n input: { env?: NodeJS.ProcessEnv } = {}\n): LocalDispatcherRuntimeInput {\n if (!hasStartablePlatform(config)) {\n throw new Error(\"This config has no startable platform. Run `opentag setup` and choose Lark, Slack, or GitHub.\");\n }\n const lark = config.platforms.lark;\n const slack = config.platforms.slack;\n const github = config.platforms.github;\n if (github && !config.daemon.githubToken) {\n throw new Error(\"GitHub platform requires daemon.githubToken for callbacks.\");\n }\n if (github && !config.daemon.preparePullRequestBranch && !config.daemon.allowAutoCreatePullRequest) {\n throw new Error(\n \"GitHub platform requires daemon.preparePullRequestBranch=true unless legacy daemon.allowAutoCreatePullRequest is enabled. Run `opentag setup` and choose GitHub to update this config.\"\n );\n }\n return {\n port: dispatcherPortFromUrl(config.daemon.dispatcherUrl),\n databasePath: config.state.databasePath,\n ...dispatcherRuntimeHardeningInputFromEnv(input.env ?? process.env),\n ...(config.daemon.pairingToken ? { pairingToken: config.daemon.pairingToken } : {}),\n ...(config.daemon.runnerToken ? { runnerToken: config.daemon.runnerToken } : {}),\n ...(config.daemon.runnerTokens ? { runnerTokens: config.daemon.runnerTokens } : {}),\n ...(config.daemon.revokedRunnerTokenFingerprints\n ? { revokedRunnerTokenFingerprints: config.daemon.revokedRunnerTokenFingerprints }\n : {}),\n ...(config.daemon.githubToken ? { githubToken: config.daemon.githubToken } : {}),\n ...(config.daemon.githubToken ? { githubCallbackToken: config.daemon.githubToken } : {}),\n ...(config.daemon.githubApplyToken !== undefined\n ? { githubApplyToken: config.daemon.githubApplyToken }\n : config.daemon.githubToken\n ? { githubApplyToken: config.daemon.githubToken }\n : {}),\n ...(lark\n ? {\n lark: {\n appId: lark.appId,\n appSecret: lark.appSecret,\n domain: lark.domain\n }\n }\n : {}),\n ...(slack ? { slackBotToken: slack.botToken } : {})\n };\n}\n\nfunction defaultRepoBindingFromConfig(config: OpenTagCliConfig): LarkIngressConfig[\"defaultRepoBinding\"] {\n if (config.platforms.lark?.defaultProjectBinding === false) return undefined;\n if (config.daemon.repositories.length !== 1) return undefined;\n const repository = config.daemon.repositories[0];\n if (!repository) return undefined;\n return {\n repoProvider: repository.provider,\n owner: repository.owner,\n repo: repository.repo\n };\n}\n\nexport function larkIngressConfigFromCliConfig(config: OpenTagCliConfig): LarkIngressConfig {\n const lark = requireLarkConfig(config);\n const defaultRepoBinding = defaultRepoBindingFromConfig(config);\n return {\n appId: lark.appId,\n appSecret: lark.appSecret,\n dispatcherUrl: config.daemon.dispatcherUrl,\n domain: lark.domain,\n agentId: DEFAULT_AGENT_ID,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n ...(lark.botOpenId ? { botOpenId: lark.botOpenId } : {}),\n ...(config.daemon.runTimeoutMs ? { runTimeoutMs: config.daemon.runTimeoutMs } : {}),\n ...(defaultRepoBinding ? { defaultRepoBinding } : {})\n };\n}\n\nfunction slackModeFromCliConfig(config: OpenTagCliConfig): \"socket_mode\" | \"events_api\" {\n const slack = requireSlackConfig(config);\n return slack.mode ?? \"events_api\";\n}\n\nexport function slackIngressConfigFromCliConfig(\n config: OpenTagCliConfig,\n input: { env?: NodeJS.ProcessEnv } = {}\n): SlackEventsApiIngressConfig {\n const slack = requireSlackConfig(config);\n if (!slack.signingSecret) {\n throw new Error(\"Slack Events API mode requires platforms.slack.signingSecret.\");\n }\n const maxRequestBodyBytes = maxRequestBodyBytesFromEnv(input.env);\n return {\n signingSecret: slack.signingSecret,\n dispatcherUrl: config.daemon.dispatcherUrl,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n botToken: slack.botToken,\n ...(slack.appId ? { appId: slack.appId } : {}),\n ...(config.daemon.runTimeoutMs ? { runTimeoutMs: config.daemon.runTimeoutMs } : {}),\n ...(maxRequestBodyBytes ? { maxRequestBodyBytes } : {}),\n ...(slack.port ? { port: slack.port } : {})\n };\n}\n\nexport function slackSocketModeIngressConfigFromCliConfig(config: OpenTagCliConfig): SlackSocketModeIngressConfig {\n const slack = requireSlackConfig(config);\n if (!slack.appToken) {\n throw new Error(\"Slack Socket Mode requires platforms.slack.appToken.\");\n }\n return {\n appToken: slack.appToken,\n dispatcherUrl: config.daemon.dispatcherUrl,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n botToken: slack.botToken,\n ...(config.daemon.runTimeoutMs ? { runTimeoutMs: config.daemon.runTimeoutMs } : {}),\n ...(slack.appId ? { appId: slack.appId } : {})\n };\n}\n\nexport function githubIngressConfigFromCliConfig(\n config: OpenTagCliConfig,\n input: { env?: NodeJS.ProcessEnv } = {}\n): GitHubIngressConfig {\n const github = requireGitHubConfig(config);\n const maxRequestBodyBytes = maxRequestBodyBytesFromEnv(input.env);\n return {\n webhookSecret: github.webhookSecret,\n dispatcherUrl: config.daemon.dispatcherUrl,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n ...(maxRequestBodyBytes ? { maxRequestBodyBytes } : {}),\n port: github.port ?? DEFAULT_GITHUB_WEBHOOK_PORT,\n ...(github.webhookPath ? { webhookPath: github.webhookPath } : {})\n };\n}\n\nexport async function bootstrapLocalDispatcher(config: OpenTagCliConfig, client?: BootstrapClient): Promise<void> {\n const admin =\n client ??\n createDispatcherAdminClient({\n dispatcherUrl: config.daemon.dispatcherUrl,\n runnerId: config.daemon.runnerId,\n ...(config.daemon.pairingToken ? { pairingToken: config.daemon.pairingToken } : {})\n });\n\n await admin.registerRunner(config.daemon.runnerId);\n for (const repository of config.daemon.repositories) {\n await admin.bindRepository({\n provider: repository.provider,\n owner: repository.owner,\n repo: repository.repo,\n checkoutPath: repository.checkoutPath,\n ...(repository.defaultExecutor ? { defaultExecutor: repository.defaultExecutor } : {}),\n ...(repository.baseBranch ? { baseBranch: repository.baseBranch } : {}),\n ...(repository.pushRemote ? { pushRemote: repository.pushRemote } : {}),\n ...(repository.worktreeRoot ? { worktreeRoot: repository.worktreeRoot } : {}),\n ...(repository.keepWorktree ? { keepWorktree: repository.keepWorktree } : {})\n });\n }\n for (const binding of normalizeChannelBindings(config.daemon)) {\n await admin.bindChannel({\n provider: binding.provider,\n accountId: binding.accountId,\n conversationId: binding.conversationId,\n repoProvider: binding.repoProvider,\n owner: binding.owner,\n repo: binding.repo,\n ...(binding.metadata ? { metadata: binding.metadata } : {})\n });\n }\n}\n\nexport async function waitForDispatcher(input: {\n dispatcherUrl: string;\n fetchImpl?: typeof fetch;\n attempts?: number;\n delayMs?: number;\n timeoutMs?: number;\n}): Promise<void> {\n const attempts = input.attempts ?? 60;\n const delayMs = input.delayMs ?? 500;\n const timeoutMs = input.timeoutMs ?? 1_000;\n const healthUrl = `${input.dispatcherUrl.replace(/\\/$/, \"\")}/healthz`;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const healthy = await probeDispatcherHealth({\n dispatcherUrl: input.dispatcherUrl,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),\n timeoutMs\n });\n if (healthy) return;\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n throw new Error(`Dispatcher did not become healthy at ${healthUrl}.`);\n}\n\nfunction waitForAbort(signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n signal.addEventListener(\"abort\", () => resolve(), { once: true });\n });\n}\n\nexport function shouldRethrowAbortReason(input: { shutdownRequested: boolean; reason: unknown }): boolean {\n return !input.shutdownRequested && input.reason instanceof Error;\n}\n\nfunction defaultStartDependencies(dependencies: StartRuntimeDependencies = {}) {\n return {\n assertStartPortsAvailable: dependencies.assertStartPortsAvailable ?? assertStartPortsAvailable,\n bootstrapDispatcher: dependencies.bootstrapDispatcher ?? bootstrapLocalDispatcher,\n env: dependencies.env ?? process.env,\n logger: dependencies.logger ?? console,\n serveDaemon: dependencies.serveDaemon ?? serveDaemon,\n startDispatcher: dependencies.startDispatcher ?? startDispatcher,\n startGitHubIngress: dependencies.startGitHubIngress ?? startGitHubIngress,\n startLarkIngress: dependencies.startLarkIngress ?? startLarkIngress,\n startSlackIngress: dependencies.startSlackIngress ?? startSlackIngress,\n startSlackSocketModeIngress: dependencies.startSlackSocketModeIngress ?? startSlackSocketModeIngress,\n waitForDispatcher: dependencies.waitForDispatcher ?? waitForDispatcher\n };\n}\n\nfunction addAbortHandlers(input: StartFromConfigInput, abortController: AbortController): {\n shutdownRequested(): boolean;\n dispose(): void;\n} {\n let shutdownRequested = false;\n const abortGracefully = (reason?: unknown) => {\n shutdownRequested = true;\n if (!abortController.signal.aborted) {\n abortController.abort(reason);\n }\n };\n\n const onProcessSignal = () => abortGracefully();\n const onExternalAbort = () => abortGracefully(input.signal?.reason);\n\n if (input.listenForProcessSignals !== false) {\n process.once(\"SIGINT\", onProcessSignal);\n process.once(\"SIGTERM\", onProcessSignal);\n }\n if (input.signal) {\n if (input.signal.aborted) {\n onExternalAbort();\n } else {\n input.signal.addEventListener(\"abort\", onExternalAbort, { once: true });\n }\n }\n\n return {\n shutdownRequested: () => shutdownRequested,\n dispose() {\n if (input.listenForProcessSignals !== false) {\n process.off(\"SIGINT\", onProcessSignal);\n process.off(\"SIGTERM\", onProcessSignal);\n }\n input.signal?.removeEventListener(\"abort\", onExternalAbort);\n }\n };\n}\n\nfunction abortOnSubsystemFailure(promise: Promise<void>, abortController: AbortController): void {\n promise.catch((error: unknown) => {\n if (!abortController.signal.aborted) {\n abortController.abort(error);\n }\n });\n}\n\nfunction assertRelayModePlatformsSupported(config: OpenTagCliConfig): void {\n const unsupported = [\n ...(config.platforms.lark ? [\"Lark / Feishu\"] : []),\n ...(config.platforms.slack ? [\"Slack\"] : [])\n ];\n if (unsupported.length > 0) {\n throw new Error(\n `Relay mode currently supports GitHub-backed ingress only. ${unsupported.join(\", \")} configs still require local mode.`\n );\n }\n}\n\nexport function githubRelayWebhookUrl(config: OpenTagCliConfig): string {\n const relayUrl = relayUrlFromConfig(config) ?? config.daemon.dispatcherUrl;\n return `${relayUrl.replace(/\\/$/, \"\")}/github/webhooks`;\n}\n\nasync function startLocalMode(input: StartFromConfigInput, abortController: AbortController, shutdownRequested: () => boolean): Promise<void> {\n const dependencies = defaultStartDependencies(input.dependencies);\n const logger = dependencies.logger;\n const config = input.config;\n const env = dependencies.env ?? process.env;\n const ingresses: PlatformIngressHandle[] = [];\n const dispatcher = dependencies.startDispatcher(dispatcherRuntimeInputFromCliConfig(config, { env }));\n let originalError: unknown;\n\n try {\n await dependencies.waitForDispatcher({ dispatcherUrl: config.daemon.dispatcherUrl });\n await dependencies.bootstrapDispatcher(config);\n\n const daemonPromise = dependencies.serveDaemon({\n ...createDaemonRuntimeInput(config.daemon),\n signal: abortController.signal\n });\n abortOnSubsystemFailure(daemonPromise, abortController);\n\n if (config.platforms.lark) {\n const handle = dependencies.startLarkIngress(larkIngressConfigFromCliConfig(config));\n ingresses.push({ platform: \"lark\", handle });\n abortOnSubsystemFailure(handle.startPromise, abortController);\n }\n if (config.platforms.slack) {\n if (slackModeFromCliConfig(config) === \"socket_mode\") {\n const handle = dependencies.startSlackSocketModeIngress(slackSocketModeIngressConfigFromCliConfig(config));\n ingresses.push({ platform: \"slack\", mode: \"socket_mode\", handle });\n abortOnSubsystemFailure(handle.startPromise, abortController);\n } else {\n const handle = dependencies.startSlackIngress(slackIngressConfigFromCliConfig(config, { env }));\n ingresses.push({ platform: \"slack\", mode: \"events_api\", url: handle.url, handle });\n }\n }\n if (config.platforms.github) {\n const handle = dependencies.startGitHubIngress(githubIngressConfigFromCliConfig(config, { env }));\n ingresses.push({ platform: \"github\", url: handle.url, webhookPath: handle.webhookPath, handle });\n }\n\n logger.log(\"OpenTag is running.\");\n logger.log(`Config: ${input.configPath}`);\n logger.log(`Dispatcher: ${config.daemon.dispatcherUrl}`);\n for (const ingress of ingresses) {\n if (ingress.platform === \"slack\") {\n const slack = config.platforms.slack!;\n if (ingress.mode === \"socket_mode\") {\n logger.log(\"Slack: using Socket Mode\");\n logger.log(`Slack channel binding: ${slack.teamId}/${slack.channelId}`);\n logger.log(\"Before testing, invite the Slack app to that channel with /invite @your app name.\");\n } else {\n logger.log(`Slack Events: ${ingress.url}/slack/events`);\n logger.log(`Slack channel binding: ${slack.teamId}/${slack.channelId}`);\n logger.log(\"Before testing, invite the Slack app to that channel with /invite @your app name.\");\n }\n } else if (ingress.platform === \"github\") {\n const github = config.platforms.github!;\n logger.log(`GitHub local webhook: ${githubLocalWebhookUrl({ port: github.port, webhookPath: ingress.webhookPath })}`);\n logger.log(`GitHub Payload URL: ${githubPublicWebhookUrlPlaceholder(ingress.webhookPath)}`);\n logger.log(`GitHub settings: ${githubWebhooksSettingsUrl(github)}`);\n logger.log(`Tunnel example: ngrok http ${github.port ?? DEFAULT_GITHUB_WEBHOOK_PORT}`);\n } else {\n logger.log(\"Lark / Feishu: connected through Personal Agent long connection\");\n }\n }\n logger.log(\"Press Ctrl-C to stop.\");\n\n await waitForAbort(abortController.signal);\n const reason = abortController.signal.reason;\n if (shouldRethrowAbortReason({ shutdownRequested: shutdownRequested(), reason })) {\n throw reason;\n }\n } catch (error) {\n originalError = error;\n throw error;\n } finally {\n abortController.abort();\n await Promise.allSettled([...ingresses].reverse().map((ingress) => ingress.handle.close()));\n try {\n await dispatcher.close();\n } catch (error) {\n if (originalError !== undefined) {\n logger.log(`OpenTag dispatcher close failed during shutdown: ${error instanceof Error ? error.message : String(error)}`);\n } else {\n throw error;\n }\n }\n }\n}\n\nasync function startRelayMode(input: StartFromConfigInput, abortController: AbortController, shutdownRequested: () => boolean): Promise<void> {\n const dependencies = defaultStartDependencies(input.dependencies);\n const logger = dependencies.logger;\n const config = input.config;\n assertRelayModePlatformsSupported(config);\n const relayUrl = relayUrlFromConfig(config) ?? config.daemon.dispatcherUrl;\n assertRelayTransportAllowed(relayUrl);\n\n await dependencies.waitForDispatcher({ dispatcherUrl: config.daemon.dispatcherUrl });\n await dependencies.bootstrapDispatcher(config);\n\n try {\n const daemonPromise = dependencies.serveDaemon({\n ...createDaemonRuntimeInput(config.daemon),\n signal: abortController.signal\n });\n abortOnSubsystemFailure(daemonPromise, abortController);\n\n logger.log(\"OpenTag is running in relay mode.\");\n logger.log(`Config: ${input.configPath}`);\n logger.log(`Relay: ${relayUrl}`);\n logger.log(relayTrustWarning(relayUrl));\n logger.log(\"Local dispatcher: disabled\");\n logger.log(`Runner: ${config.daemon.runnerId}`);\n if (config.platforms.github) {\n logger.log(`GitHub webhook URL: ${githubRelayWebhookUrl(config)}`);\n logger.log(\"GitHub webhook secret: the relay must verify the configured secret before creating runs.\");\n }\n logger.log(\"Press Ctrl-C to stop.\");\n\n await waitForAbort(abortController.signal);\n const reason = abortController.signal.reason;\n if (shouldRethrowAbortReason({ shutdownRequested: shutdownRequested(), reason })) {\n throw reason;\n }\n } finally {\n abortController.abort();\n }\n}\n\nexport async function startFromConfig(input: StartFromConfigInput): Promise<void> {\n ensurePrivateDirectory(input.config.state.directory);\n ensurePrivateDirectory(input.config.state.worktreeRoot);\n\n const dependencies = defaultStartDependencies(input.dependencies);\n if (runtimeModeFromConfig(input.config) === \"local\") {\n await dependencies.assertStartPortsAvailable(input.config);\n }\n\n const abortController = new AbortController();\n const abortHandlers = addAbortHandlers(input, abortController);\n try {\n if (runtimeModeFromConfig(input.config) === \"relay\") {\n await startRelayMode(input, abortController, abortHandlers.shutdownRequested);\n return;\n }\n await startLocalMode(input, abortController, abortHandlers.shutdownRequested);\n } finally {\n abortHandlers.dispose();\n }\n}\n\nexport async function runStartCommand(options: StartCommandOptions): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n await startFromConfig({ config, configPath });\n}\n","export const DEFAULT_SLACK_EVENTS_PORT = 3040;\nexport const DEFAULT_GITHUB_WEBHOOK_PORT = 3050;\nexport const DEFAULT_GITLAB_WEBHOOK_PORT = 3060;\n\nexport function parseLocalPort(value: string | number, label: string): number {\n const port = typeof value === \"number\" ? value : Number(value.trim());\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(`${label} must be an integer from 1 to 65535.`);\n }\n return port;\n}\n","import { DEFAULT_GITHUB_WEBHOOK_PORT } from \"../ports.js\";\n\nexport function githubLocalWebhookUrl(input: { port?: number | undefined; webhookPath?: string | undefined }): string {\n return `http://127.0.0.1:${input.port ?? DEFAULT_GITHUB_WEBHOOK_PORT}${input.webhookPath ?? \"/github/webhooks\"}`;\n}\n\nexport function githubPublicWebhookUrlPlaceholder(webhookPath = \"/github/webhooks\"): string {\n return `https://<your-tunnel-host>${webhookPath}`;\n}\n\nexport function githubWebhooksSettingsUrl(input: { owner: string; repo: string }): string {\n return `https://github.com/${input.owner}/${input.repo}/settings/hooks`;\n}\n","import { defaultConfigPath, readCliConfig, writeCliConfigAtomic, type OpenTagCliConfig } from \"./config.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { formatConfiguredProjectTargetSummary } from \"./project-target-summary.js\";\nimport { assertRelayTransportAllowed, relayTrustWarning } from \"./relay-security.js\";\nimport { bootstrapLocalDispatcher, type BootstrapClient } from \"./start.js\";\n\nexport type PairCommandOptions = {\n config?: string;\n relay?: string;\n register?: boolean;\n};\n\nexport type PairRelayDependencies = {\n fetchImpl?: typeof fetch;\n bootstrapClient?: BootstrapClient;\n logger?: Pick<Console, \"log\" | \"warn\">;\n healthTimeoutMs?: number;\n};\n\ntype PairRelaySummaryInput = {\n configPath: string;\n config: OpenTagCliConfig;\n relayUrl: string;\n registered: boolean;\n};\n\nfunction stripTrailingSlash(value: string): string {\n return value.endsWith(\"/\") ? value.slice(0, -1) : value;\n}\n\nexport function normalizeRelayUrl(rawRelayUrl: string): string {\n const raw = rawRelayUrl.trim();\n if (!raw) {\n throw new Error(\"Relay URL must not be empty.\");\n }\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new Error(`Relay URL must be a valid http or https URL: ${rawRelayUrl}`);\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Relay URL must use http or https.\");\n }\n if (url.username || url.password) {\n throw new Error(\"Relay URL must not include credentials.\");\n }\n if (url.search || url.hash) {\n throw new Error(\"Relay URL must not include a query string or fragment.\");\n }\n return stripTrailingSlash(url.toString());\n}\n\nexport function inferRelayProvider(relayUrl: string): string {\n const hostname = new URL(relayUrl).hostname.toLowerCase();\n return hostname.includes(\"railway\") ? \"railway\" : \"custom\";\n}\n\nexport function relayConfigFrom(input: { config: OpenTagCliConfig; relayUrl: string }): OpenTagCliConfig {\n const relayProvider = inferRelayProvider(input.relayUrl);\n return {\n ...input.config,\n runtime: {\n mode: \"relay\",\n relayUrl: input.relayUrl,\n relayProvider\n },\n daemon: {\n ...input.config.daemon,\n dispatcherUrl: input.relayUrl\n }\n };\n}\n\nfunction githubRelayWebhookUrl(relayUrl: string): string {\n return `${stripTrailingSlash(relayUrl)}/github/webhooks`;\n}\n\nexport function formatPairRelaySummary(input: PairRelaySummaryInput): string {\n const projectTargets = input.config.daemon.repositories.map((repository) => {\n return ` ${formatConfiguredProjectTargetSummary(repository)}`;\n });\n return [\n \"OpenTag relay pairing updated.\",\n `Config: ${input.configPath}`,\n `Relay: ${input.relayUrl}`,\n `Runner: ${input.config.daemon.runnerId}`,\n `Registration: ${input.registered ? \"completed\" : \"skipped\"}`,\n relayTrustWarning(input.relayUrl),\n \"Project Targets:\",\n ...(projectTargets.length ? projectTargets : [\" none\"]),\n ...(input.config.platforms.github ? [`GitHub webhook URL: ${githubRelayWebhookUrl(input.relayUrl)}`] : []),\n \"Next steps:\",\n ` opentag start --config ${input.configPath}`,\n \" opentag service start\"\n ].join(\"\\n\");\n}\n\nexport async function runPairCommand(options: PairCommandOptions, dependencies: PairRelayDependencies = {}): Promise<void> {\n if (!options.relay) {\n throw new Error(\"opentag pair currently requires --relay <url>.\");\n }\n\n const logger = dependencies.logger ?? console;\n const configPath = options.config ?? defaultConfigPath();\n const relayUrl = normalizeRelayUrl(options.relay);\n assertRelayTransportAllowed(relayUrl);\n const config = readCliConfig(configPath);\n\n const healthy = await probeDispatcherHealth({\n dispatcherUrl: relayUrl,\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}),\n timeoutMs: dependencies.healthTimeoutMs ?? 5_000\n });\n if (!healthy) {\n throw new Error(`Relay health check failed at ${relayUrl}/healthz.`);\n }\n\n const updated = relayConfigFrom({ config, relayUrl });\n\n const shouldRegister = options.register !== false;\n if (shouldRegister) {\n await bootstrapLocalDispatcher(updated, dependencies.bootstrapClient);\n }\n\n writeCliConfigAtomic(configPath, updated);\n\n logger.log(\n formatPairRelaySummary({\n configPath,\n config: updated,\n relayUrl,\n registered: shouldRegister\n })\n );\n}\n","import { spawnSync } from \"node:child_process\";\nimport { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, rmSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport {\n defaultConfigPath,\n defaultStateDirectory,\n ensurePrivateDirectory,\n readCliConfig,\n readRedactedCliConfig,\n relayUrlFromConfig,\n runtimeModeFromConfig,\n type OpenTagCliConfig,\n type PathEnvironment\n} from \"./config.js\";\nimport {\n dispatcherRuntimeHardeningInputFromEnv,\n doctorHasFailures,\n executorsFromConfig,\n runDoctor,\n type DoctorCheck\n} from \"@opentag/local-runtime\";\nimport type { CommandRunner } from \"@opentag/runner\";\nimport { formatConfiguredCapabilities } from \"./catalogs/capabilities.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\nimport { formatRelaySecurityChecks, relaySecurityChecksFromConfig } from \"./relay-security.js\";\nimport { formatSecretReadiness } from \"./secret-readiness.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { runStartCommand } from \"./start.js\";\n\nexport const SERVICE_LABEL = \"im.opentag.agent\";\n\nexport type ServiceCommandOptions = {\n config?: string;\n lines?: string | number;\n maxRequestBodyBytes?: string | number;\n mode?: string;\n rateLimitDisabled?: boolean;\n rateLimitMaxRequests?: string | number;\n rateLimitWindowMs?: string | number;\n};\n\nexport type CommandResult = {\n status: number;\n stdout: string;\n stderr: string;\n};\n\nexport type ServiceDependencies = {\n cliEntry?: string;\n codexConfigPath?: string;\n commandRunner?: CommandRunner;\n env?: PathEnvironment;\n fetchImpl?: typeof fetch;\n healthTimeoutMs?: number;\n homeDir?: string;\n launchctl?: (args: string[]) => CommandResult;\n logger?: Pick<Console, \"log\">;\n nodePath?: string;\n platform?: NodeJS.Platform;\n uid?: number;\n};\n\nexport type ServicePaths = {\n configPath: string;\n label: string;\n logsDir: string;\n plistPath: string;\n stderrPath: string;\n stdoutPath: string;\n};\n\nexport type ServiceStatusSummary = ServicePaths & {\n autostart: \"enabled\" | \"disabled\" | \"unknown\";\n controller: \"launchd\" | \"unsupported\";\n installed: boolean;\n relayUrl?: string;\n relaySecurity: string[];\n running: \"running\" | \"stopped\" | \"unknown\";\n runtimeMode: \"local\" | \"relay\" | \"unknown\";\n runtimeReadiness: \"ready\" | \"starting\" | \"degraded\" | \"stale_heartbeat\" | \"unreachable\" | \"unverified\" | \"stopped\" | \"unknown\";\n runtimeReadinessDetail?: string;\n runtimeDiagnostics?: string[];\n connectors: string[];\n secrets: string[];\n capabilities: string[];\n serviceHardening: string[];\n};\n\nconst serviceHardeningEnvKeys = [\n \"OPENTAG_MAX_REQUEST_BODY_BYTES\",\n \"OPENTAG_RATE_LIMIT_WINDOW_MS\",\n \"OPENTAG_RATE_LIMIT_MAX_REQUESTS\",\n \"OPENTAG_RATE_LIMIT_DISABLED\"\n] as const;\n\nfunction loggerFrom(dependencies: ServiceDependencies): Pick<Console, \"log\"> {\n return dependencies.logger ?? console;\n}\n\nfunction platformFrom(dependencies: ServiceDependencies): NodeJS.Platform {\n return dependencies.platform ?? process.platform;\n}\n\nfunction homeFrom(dependencies: ServiceDependencies): string {\n return dependencies.homeDir ?? homedir();\n}\n\nfunction uidFrom(dependencies: ServiceDependencies): number {\n return dependencies.uid ?? (typeof process.getuid === \"function\" ? process.getuid() : 0);\n}\n\nexport function servicePaths(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const home = homeFrom(dependencies);\n const env = dependencies.env ?? process.env;\n const configPath = options.config ?? defaultConfigPath(env, home);\n const stateDirectory = defaultStateDirectory(env, home);\n const logsDir = join(stateDirectory, \"logs\");\n return {\n configPath,\n label: SERVICE_LABEL,\n logsDir,\n plistPath: join(home, \"Library\", \"LaunchAgents\", `${SERVICE_LABEL}.plist`),\n stdoutPath: join(logsDir, \"opentag.log\"),\n stderrPath: join(logsDir, \"opentag.err.log\")\n };\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\");\n}\n\nfunction unescapeXml(value: string): string {\n return value\n .replaceAll(\"&apos;\", \"'\")\n .replaceAll(\"&quot;\", '\"')\n .replaceAll(\"&gt;\", \">\")\n .replaceAll(\"&lt;\", \"<\")\n .replaceAll(\"&amp;\", \"&\");\n}\n\nfunction plistStringArray(values: string[]): string {\n return values.map((value) => ` <string>${escapeXml(value)}</string>`).join(\"\\n\");\n}\n\nexport function buildLaunchAgentPlist(input: {\n environment?: Record<string, string>;\n keepAlive: boolean;\n label: string;\n programArguments: string[];\n runAtLoad: boolean;\n stderrPath: string;\n stdoutPath: string;\n workingDirectory: string;\n}): string {\n const environmentEntries = Object.entries(input.environment ?? {});\n const environment =\n environmentEntries.length > 0\n ? [\n \" <key>EnvironmentVariables</key>\",\n \" <dict>\",\n ...environmentEntries.flatMap(([key, value]) => [\n ` <key>${escapeXml(key)}</key>`,\n ` <string>${escapeXml(value)}</string>`\n ]),\n \" </dict>\"\n ]\n : [];\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n '<plist version=\"1.0\">',\n \"<dict>\",\n \" <key>Label</key>\",\n ` <string>${escapeXml(input.label)}</string>`,\n \" <key>ProgramArguments</key>\",\n \" <array>\",\n plistStringArray(input.programArguments),\n \" </array>\",\n \" <key>RunAtLoad</key>\",\n ` <${input.runAtLoad ? \"true\" : \"false\"}/>`,\n \" <key>KeepAlive</key>\",\n ` <${input.keepAlive ? \"true\" : \"false\"}/>`,\n \" <key>StandardOutPath</key>\",\n ` <string>${escapeXml(input.stdoutPath)}</string>`,\n \" <key>StandardErrorPath</key>\",\n ` <string>${escapeXml(input.stderrPath)}</string>`,\n \" <key>WorkingDirectory</key>\",\n ` <string>${escapeXml(input.workingDirectory)}</string>`,\n ...environment,\n \"</dict>\",\n \"</plist>\",\n \"\"\n ].join(\"\\n\");\n}\n\nfunction launchctlRunner(dependencies: ServiceDependencies): (args: string[]) => CommandResult {\n if (dependencies.launchctl) return dependencies.launchctl;\n return (args: string[]) => {\n const result = spawnSync(\"launchctl\", args, { encoding: \"utf8\" });\n return {\n status: result.status ?? 1,\n stdout: result.stdout ?? \"\",\n stderr: result.stderr ?? \"\"\n };\n };\n}\n\nfunction launchdDomain(dependencies: ServiceDependencies): string {\n return `gui/${uidFrom(dependencies)}`;\n}\n\nfunction launchdServiceTarget(dependencies: ServiceDependencies): string {\n return `${launchdDomain(dependencies)}/${SERVICE_LABEL}`;\n}\n\nfunction unsupportedMessage(): string {\n return \"OpenTag service management is not supported yet on this platform. Use `opentag start` in the foreground for now.\";\n}\n\nfunction assertMacOS(dependencies: ServiceDependencies): void {\n if (platformFrom(dependencies) !== \"darwin\") {\n throw new Error(unsupportedMessage());\n }\n}\n\nfunction runLaunchctlOrThrow(dependencies: ServiceDependencies, args: string[], action: string): CommandResult {\n const result = launchctlRunner(dependencies)(args);\n if (result.status !== 0) {\n const detail = [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join(\"\\n\");\n throw new Error(`${action} failed${detail ? `: ${detail}` : \".\"}`);\n }\n return result;\n}\n\nfunction serviceWorkingDirectory(configPath: string): string {\n const config = readCliConfig(configPath);\n return config.daemon.repositories[0]?.checkoutPath ?? dirname(configPath);\n}\n\nfunction serviceProgramArguments(options: ServiceCommandOptions, dependencies: ServiceDependencies): string[] {\n const paths = servicePaths(options, dependencies);\n return [\n dependencies.nodePath ?? process.execPath,\n dependencies.cliEntry ?? process.argv[1] ?? \"opentag\",\n \"service\",\n \"run\",\n \"--mode\",\n \"background\",\n \"--config\",\n paths.configPath\n ];\n}\n\nfunction positiveIntegerOption(flag: string, value: string | number | undefined): string | undefined {\n if (value === undefined || value === \"\") return undefined;\n const parsed = typeof value === \"number\" ? value : Number(String(value).trim());\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`${flag} must be a positive integer, received ${value}`);\n }\n return String(parsed);\n}\n\nfunction serviceHardeningEnvironment(options: ServiceCommandOptions): Record<string, string> {\n const maxRequestBodyBytes = positiveIntegerOption(\"--max-request-body-bytes\", options.maxRequestBodyBytes);\n const rateLimitWindowMs = positiveIntegerOption(\"--rate-limit-window-ms\", options.rateLimitWindowMs);\n const rateLimitMaxRequests = positiveIntegerOption(\"--rate-limit-max-requests\", options.rateLimitMaxRequests);\n const environment: Record<string, string> = {\n ...(maxRequestBodyBytes ? { OPENTAG_MAX_REQUEST_BODY_BYTES: maxRequestBodyBytes } : {}),\n ...(rateLimitWindowMs ? { OPENTAG_RATE_LIMIT_WINDOW_MS: rateLimitWindowMs } : {}),\n ...(rateLimitMaxRequests ? { OPENTAG_RATE_LIMIT_MAX_REQUESTS: rateLimitMaxRequests } : {}),\n ...(options.rateLimitDisabled ? { OPENTAG_RATE_LIMIT_DISABLED: \"true\" } : {})\n };\n dispatcherRuntimeHardeningInputFromEnv(environment);\n return environment;\n}\n\nfunction configured(value: unknown): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction connectorStatus(ready: boolean, detail: string): string {\n return ready ? `ready (${detail})` : `missing (${detail})`;\n}\n\nfunction formatConnectorReadiness(config: OpenTagCliConfig): string[] {\n const lines = [\"Connectors:\"];\n const github = config.platforms.github;\n if (github) {\n const callbackReady = configured(config.daemon.githubToken);\n const applyReady = config.daemon.githubApplyToken === null ? \"disabled\" : configured(config.daemon.githubApplyToken ?? config.daemon.githubToken) ? \"ready\" : \"missing\";\n lines.push(\n ` github: ingress=repository_webhook path=${github.webhookPath ?? \"/github/webhooks\"} port=${github.port ?? \"default\"}, callback=${connectorStatus(callbackReady, \"daemon.githubToken\")}, apply=${applyReady}, target=github:${github.owner}/${github.repo}`\n );\n }\n\n const slack = config.platforms.slack;\n if (slack) {\n const mode = slack.mode ?? \"events_api\";\n const ingressReady = mode === \"socket_mode\" ? configured(slack.appToken) : configured(slack.signingSecret);\n const ingressDetail = mode === \"socket_mode\" ? \"appToken\" : `signingSecret port=${slack.port ?? \"default\"}`;\n lines.push(\n ` slack: ingress=${mode} ${connectorStatus(ingressReady, ingressDetail)}, callback=${connectorStatus(configured(slack.botToken), \"botToken\")}, source=${slack.teamId}/${slack.channelId}`\n );\n }\n\n const lark = config.platforms.lark;\n if (lark) {\n const credentialsReady = configured(lark.appId) && configured(lark.appSecret);\n const addressing = lark.botOpenId ? \"bot_open_id configured\" : \"bot identity may need discovery\";\n lines.push(\n ` lark: ingress=long_connection tenant=${lark.domain} ${connectorStatus(credentialsReady, \"appId/appSecret\")}, callback=${connectorStatus(credentialsReady, \"appId/appSecret\")}, addressing=${addressing}`\n );\n }\n\n return lines.length > 1 ? lines : [...lines, \" none configured\"];\n}\n\nfunction launchAgentEnvironment(options: ServiceCommandOptions, paths: ServicePaths): Record<string, string> {\n return {\n OPENTAG_CONFIG_PATH: paths.configPath,\n ...serviceHardeningEnvironment(options)\n };\n}\n\nexport function installService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n assertMacOS(dependencies);\n const paths = servicePaths(options, dependencies);\n const workingDirectory = serviceWorkingDirectory(paths.configPath);\n mkdirSync(dirname(paths.plistPath), { recursive: true });\n ensurePrivateDirectory(paths.logsDir);\n const plist = buildLaunchAgentPlist({\n label: paths.label,\n programArguments: serviceProgramArguments(options, dependencies),\n runAtLoad: true,\n keepAlive: true,\n stdoutPath: paths.stdoutPath,\n stderrPath: paths.stderrPath,\n workingDirectory,\n environment: launchAgentEnvironment(options, paths)\n });\n writeFileSync(paths.plistPath, plist, { mode: 0o644 });\n return paths;\n}\n\nfunction installed(paths: ServicePaths): boolean {\n return existsSync(paths.plistPath);\n}\n\nfunction isNotLoaded(result: CommandResult): boolean {\n const text = `${result.stderr}\\n${result.stdout}`.toLowerCase();\n return text.includes(\"no such process\") || text.includes(\"could not find service\") || text.includes(\"service is not loaded\");\n}\n\nexport function startService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n assertMacOS(dependencies);\n const paths = servicePaths(options, dependencies);\n if (!installed(paths)) {\n throw new Error(`OpenTag service is not installed. Run \\`opentag service install --config ${paths.configPath}\\` first.`);\n }\n const launchctl = launchctlRunner(dependencies);\n const bootstrap = launchctl([\"bootstrap\", launchdDomain(dependencies), paths.plistPath]);\n if (bootstrap.status !== 0) {\n const print = launchctl([\"print\", launchdServiceTarget(dependencies)]);\n if (print.status !== 0) {\n const detail = [bootstrap.stderr.trim(), bootstrap.stdout.trim()].filter(Boolean).join(\"\\n\");\n throw new Error(`launchctl bootstrap failed${detail ? `: ${detail}` : \".\"}`);\n }\n }\n runLaunchctlOrThrow(dependencies, [\"kickstart\", \"-k\", launchdServiceTarget(dependencies)], \"launchctl kickstart\");\n return paths;\n}\n\nexport function stopService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n assertMacOS(dependencies);\n const paths = servicePaths(options, dependencies);\n if (!installed(paths)) return paths;\n const launchctl = launchctlRunner(dependencies);\n const first = launchctl([\"bootout\", launchdServiceTarget(dependencies)]);\n if (first.status !== 0 && !isNotLoaded(first)) {\n const second = launchctl([\"bootout\", launchdDomain(dependencies), paths.plistPath]);\n if (second.status !== 0 && !isNotLoaded(second)) {\n const detail = [second.stderr.trim(), first.stderr.trim(), second.stdout.trim(), first.stdout.trim()].filter(Boolean).join(\"\\n\");\n throw new Error(`launchctl bootout failed${detail ? `: ${detail}` : \".\"}`);\n }\n }\n return paths;\n}\n\nexport function uninstallService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n assertMacOS(dependencies);\n const paths = stopService(options, dependencies);\n rmSync(paths.plistPath, { force: true });\n return paths;\n}\n\nexport function enableServiceAutostart(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n assertMacOS(dependencies);\n const paths = installed(servicePaths(options, dependencies)) ? servicePaths(options, dependencies) : installService(options, dependencies);\n runLaunchctlOrThrow(dependencies, [\"enable\", launchdServiceTarget(dependencies)], \"launchctl enable\");\n return paths;\n}\n\nexport function disableServiceAutostart(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n assertMacOS(dependencies);\n const paths = servicePaths(options, dependencies);\n if (installed(paths)) {\n runLaunchctlOrThrow(dependencies, [\"disable\", launchdServiceTarget(dependencies)], \"launchctl disable\");\n }\n return paths;\n}\n\nfunction serviceAutostart(paths: ServicePaths, dependencies: ServiceDependencies, isInstalled: boolean): ServiceStatusSummary[\"autostart\"] {\n if (!isInstalled) return \"disabled\";\n if (platformFrom(dependencies) !== \"darwin\") return \"unknown\";\n const result = launchctlRunner(dependencies)([\"print-disabled\", launchdDomain(dependencies)]);\n if (result.status !== 0) return \"unknown\";\n const escapedLabel = SERVICE_LABEL.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const disabledEntry = new RegExp(`\"${escapedLabel}\"\\\\s*=>\\\\s*(true|disabled)`).test(result.stdout);\n if (disabledEntry) return \"disabled\";\n const enabledEntry = new RegExp(`\"${escapedLabel}\"\\\\s*=>\\\\s*(false|enabled)`).test(result.stdout);\n if (enabledEntry) return \"enabled\";\n return \"enabled\";\n}\n\nexport function getServiceStatus(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServiceStatusSummary {\n const paths = servicePaths(options, dependencies);\n const controller = platformFrom(dependencies) === \"darwin\" ? \"launchd\" : \"unsupported\";\n const isInstalled = installed(paths);\n let running: ServiceStatusSummary[\"running\"] = isInstalled ? \"stopped\" : \"unknown\";\n if (controller === \"launchd\" && isInstalled) {\n const result = launchctlRunner(dependencies)([\"print\", launchdServiceTarget(dependencies)]);\n running = result.status === 0 ? \"running\" : \"stopped\";\n }\n\n let runtimeMode: ServiceStatusSummary[\"runtimeMode\"] = \"unknown\";\n let relayUrl: string | undefined;\n let relaySecurity: string[] = [];\n let connectors: string[] = [\"Connectors:\", \" unavailable (config missing)\"];\n let secrets: string[] = [\"Secrets:\", \" unavailable (config missing)\"];\n let capabilities: string[] = [\"Capabilities:\", \" platform unknown\", \" executor unknown\"];\n if (existsSync(paths.configPath)) {\n const config = readCliConfig(paths.configPath);\n runtimeMode = runtimeModeFromConfig(config);\n relayUrl = relayUrlFromConfig(config);\n relaySecurity = formatRelaySecurityChecks(relaySecurityChecksFromConfig(config));\n connectors = formatConnectorReadiness(config);\n secrets = formatSecretReadiness(readRedactedCliConfig(paths.configPath));\n const platforms = Object.entries(config.platforms)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key as PlatformId);\n capabilities = formatConfiguredCapabilities({\n platforms,\n executors: config.daemon.repositories.map((repository) => repository.defaultExecutor)\n });\n }\n\n return {\n ...paths,\n controller,\n installed: isInstalled,\n running,\n runtimeMode,\n runtimeReadiness: running === \"running\" ? \"unverified\" : running === \"stopped\" ? \"stopped\" : \"unknown\",\n ...(relayUrl ? { relayUrl } : {}),\n relaySecurity,\n connectors,\n secrets,\n capabilities,\n serviceHardening: formatServiceHardening(paths),\n autostart: serviceAutostart(paths, dependencies, isInstalled)\n };\n}\n\nfunction readLaunchAgentEnvironment(paths: ServicePaths): Record<string, string> {\n if (!existsSync(paths.plistPath)) return {};\n const plist = readFileSync(paths.plistPath, \"utf8\");\n const environmentBlock = plist.match(/<key>EnvironmentVariables<\\/key>\\s*<dict>([\\s\\S]*?)<\\/dict>/);\n const body = environmentBlock?.[1];\n if (!body) return {};\n return Object.fromEntries(\n Array.from(body.matchAll(/<key>([\\s\\S]*?)<\\/key>\\s*<string>([\\s\\S]*?)<\\/string>/g)).flatMap((match) => {\n const key = match[1];\n const value = match[2];\n return key !== undefined && value !== undefined ? [[unescapeXml(key), unescapeXml(value)]] : [];\n })\n );\n}\n\nfunction formatServiceHardening(paths: ServicePaths): string[] {\n const environment = readLaunchAgentEnvironment(paths);\n const configured = serviceHardeningEnvKeys\n .filter((key) => environment[key])\n .map((key) => ` ${key}=${environment[key]}`);\n return [\"Service Hardening:\", ...(configured.length ? configured : [\" dispatcher hardening env not configured in LaunchAgent\"])];\n}\n\nfunction doctorCounts(checks: DoctorCheck[]): { fail: number; warn: number } {\n return {\n fail: checks.filter((check) => check.status === \"fail\").length,\n warn: checks.filter((check) => check.status === \"warn\").length\n };\n}\n\nfunction formatRuntimeDiagnostic(check: DoctorCheck): string {\n return `${check.status.toUpperCase()} ${check.name}: ${check.message}`;\n}\n\nfunction runtimeReadinessFromHeartbeatChecks(checks: DoctorCheck[]): Pick<ServiceStatusSummary, \"runtimeReadiness\" | \"runtimeReadinessDetail\"> | null {\n if (checks.some((check) => check.status === \"fail\")) return null;\n const heartbeat = checks.find((check) => check.name === \"runner heartbeat\" && check.status === \"warn\");\n if (!heartbeat) return null;\n if (heartbeat.message.startsWith(\"stale;\")) {\n return {\n runtimeReadiness: \"stale_heartbeat\",\n runtimeReadinessDetail: heartbeat.message\n };\n }\n if (heartbeat.message.startsWith(\"no heartbeat observed\")) {\n return {\n runtimeReadiness: \"starting\",\n runtimeReadinessDetail: heartbeat.message\n };\n }\n return null;\n}\n\nexport async function getServiceStatusWithRuntimeReadiness(\n options: ServiceCommandOptions = {},\n dependencies: ServiceDependencies = {}\n): Promise<ServiceStatusSummary> {\n const summary = getServiceStatus(options, dependencies);\n if (summary.running !== \"running\" || !existsSync(summary.configPath) || summary.controller === \"unsupported\") {\n return summary;\n }\n\n const config = readCliConfig(summary.configPath);\n const dispatcherUrl = config.daemon.dispatcherUrl;\n const ready = await probeDispatcherHealth({\n dispatcherUrl,\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}),\n timeoutMs: dependencies.healthTimeoutMs ?? 1_000\n });\n if (!ready) {\n return {\n ...summary,\n runtimeReadiness: \"unreachable\",\n runtimeReadinessDetail: `dispatcher healthz failed (${dispatcherUrl})`\n };\n }\n\n try {\n const checks = await runDoctor({\n config: config.daemon,\n executors: executorsFromConfig(config.daemon),\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}),\n ...(dependencies.commandRunner ? { commandRunner: dependencies.commandRunner } : {}),\n ...(dependencies.codexConfigPath ? { codexConfigPath: dependencies.codexConfigPath } : {})\n });\n const counts = doctorCounts(checks);\n const diagnostics = checks.filter((check) => check.status !== \"ok\").map(formatRuntimeDiagnostic);\n const heartbeatReadiness = runtimeReadinessFromHeartbeatChecks(checks);\n if (heartbeatReadiness) {\n return {\n ...summary,\n ...heartbeatReadiness,\n ...(diagnostics.length ? { runtimeDiagnostics: diagnostics } : {})\n };\n }\n if (doctorHasFailures(checks) || counts.warn > 0) {\n return {\n ...summary,\n runtimeReadiness: \"degraded\",\n runtimeReadinessDetail: `doctor checks degraded (${counts.fail} fail, ${counts.warn} warn)`,\n runtimeDiagnostics: diagnostics\n };\n }\n return {\n ...summary,\n runtimeReadiness: \"ready\",\n runtimeReadinessDetail: `dispatcher healthz ok; doctor checks ok (${checks.length} checks)`\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ...summary,\n runtimeReadiness: \"degraded\",\n runtimeReadinessDetail: `doctor checks failed: ${message}`,\n runtimeDiagnostics: [`FAIL doctor checks: ${message}`]\n };\n }\n}\n\nexport function formatServiceStatus(summary: ServiceStatusSummary): string {\n return [\n `Controller: ${summary.controller}`,\n `Installed: ${summary.installed ? \"yes\" : \"no\"}`,\n `Running: ${summary.running}`,\n `Autostart: ${summary.autostart}`,\n `Config: ${summary.configPath}`,\n `Runtime: ${summary.runtimeMode}`,\n `OpenTag runtime: ${summary.runtimeReadiness}${summary.runtimeReadinessDetail ? ` (${summary.runtimeReadinessDetail})` : \"\"}`,\n ...(summary.runtimeDiagnostics?.length ? [\"Runtime Checks:\", ...summary.runtimeDiagnostics.map((diagnostic) => ` ${diagnostic}`)] : []),\n ...(summary.relayUrl ? [`Relay: ${summary.relayUrl}`] : []),\n ...summary.relaySecurity,\n ...summary.connectors,\n ...summary.secrets,\n ...summary.capabilities,\n ...summary.serviceHardening,\n `LaunchAgent: ${summary.plistPath}`,\n `Stdout log: ${summary.stdoutPath}`,\n `Stderr log: ${summary.stderrPath}`,\n ...(summary.controller === \"unsupported\" ? [unsupportedMessage()] : [])\n ].join(\"\\n\");\n}\n\nfunction parseLines(value: string | number | undefined): number {\n if (value === undefined) return 80;\n const parsed = typeof value === \"number\" ? value : Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`--lines must be a positive integer, received ${value}`);\n }\n return parsed;\n}\n\nfunction tailFile(path: string, lines: number): string {\n if (!existsSync(path)) {\n return \"(log file does not exist yet)\";\n }\n const maxReadBytes = 1024 * 1024;\n const fd = openSync(path, \"r\");\n let content = \"\";\n try {\n const stats = fstatSync(fd);\n const bytesToRead = Math.min(stats.size, maxReadBytes);\n const position = stats.size - bytesToRead;\n const buffer = Buffer.alloc(bytesToRead);\n const bytesRead = readSync(fd, buffer, 0, bytesToRead, position);\n content = buffer.subarray(0, bytesRead).toString(\"utf8\");\n const entries = content.split(/\\r?\\n/);\n if (entries.at(-1) === \"\") entries.pop();\n if (position > 0 && entries.length > 1) {\n entries.shift();\n }\n return entries.slice(-lines).join(\"\\n\") || \"(log file is empty)\";\n } finally {\n closeSync(fd);\n }\n}\n\nexport function formatServiceLogs(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): string {\n const paths = servicePaths(options, dependencies);\n const lines = parseLines(options.lines);\n return [\n `== ${paths.stdoutPath} ==`,\n tailFile(paths.stdoutPath, lines),\n `== ${paths.stderrPath} ==`,\n tailFile(paths.stderrPath, lines)\n ].join(\"\\n\");\n}\n\nexport async function runServiceInstallCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = installService(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service installed: ${paths.plistPath}`);\n loggerFrom(dependencies).log(\"It will start at login. Run `opentag service start` to start it now.\");\n}\n\nexport async function runServiceStartCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = startService(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service started: ${paths.label}`);\n}\n\nexport async function runServiceStopCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = stopService(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service stopped: ${paths.label}`);\n}\n\nexport async function runServiceRestartCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n stopService(options, dependencies);\n const paths = startService(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service restarted: ${paths.label}`);\n}\n\nexport async function runServiceUninstallCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = uninstallService(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service uninstalled: ${paths.plistPath}`);\n}\n\nexport async function runServiceStatusCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const summary = await getServiceStatusWithRuntimeReadiness(options, dependencies);\n loggerFrom(dependencies).log(formatServiceStatus(summary));\n if (summary.controller === \"unsupported\") {\n process.exitCode = 1;\n }\n}\n\nexport async function runServiceLogsCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n loggerFrom(dependencies).log(formatServiceLogs(options, dependencies));\n}\n\nexport async function runServiceAutostartEnableCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = enableServiceAutostart(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service autostart enabled: ${paths.label}`);\n}\n\nexport async function runServiceAutostartDisableCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = disableServiceAutostart(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service autostart disabled: ${paths.label}`);\n}\n\nexport async function runServiceRunCommand(options: ServiceCommandOptions): Promise<void> {\n if (options.mode && options.mode !== \"background\") {\n throw new Error(`Unsupported service run mode: ${options.mode}`);\n }\n await runStartCommand({ ...(options.config ? { config: options.config } : {}), background: true });\n}\n","import { existsSync } from \"node:fs\";\nimport {\n defaultConfigPath,\n ensurePrivateDirectory,\n writeCliConfigAtomic\n} from \"../config.js\";\nimport { createSetupConfig } from \"../setup/builders.js\";\nimport { collectSetupInput, type SetupCommandOptions, type SetupFlowDependencies } from \"../setup/flow.js\";\nimport { formatSetupComplete } from \"../setup/summary.js\";\nimport { createClackPromptAdapter } from \"../ui/clack.js\";\nimport { scanLarkPersonalAgent } from \"../platforms/lark/registration-ui.js\";\nimport { runStartCommand, type StartCommandOptions } from \"../start.js\";\n\nexport type { SetupCommandOptions };\n\nexport type SetupCommandDependencies = Partial<Omit<SetupFlowDependencies, \"prompts\" | \"scanLarkPersonalAgent\">> & {\n prompts?: SetupFlowDependencies[\"prompts\"];\n scanLarkPersonalAgent?: SetupFlowDependencies[\"scanLarkPersonalAgent\"];\n validateLarkCredentials?: SetupFlowDependencies[\"validateLarkCredentials\"];\n startOpenTag?(options: StartCommandOptions): Promise<void>;\n};\n\nfunction startPromptMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"现在启动 OpenTag?\" : \"Start OpenTag now?\";\n}\n\nfunction setupCompleteMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"OpenTag 设置完成。\" : \"OpenTag setup complete.\";\n}\n\nfunction startingMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"正在启动 OpenTag...\" : \"Starting OpenTag...\";\n}\n\nexport async function runSetupCommand(options: SetupCommandOptions, dependencies: SetupCommandDependencies = {}): Promise<void> {\n const env = dependencies.env ?? process.env;\n const configPath = options.config ?? defaultConfigPath(env);\n if (options.yes && existsSync(configPath) && !options.force) {\n throw new Error(`OpenTag config already exists at ${configPath}. Use --force with --yes to overwrite it.`);\n }\n\n const prompts = dependencies.prompts ?? createClackPromptAdapter();\n const setupInput = await collectSetupInput(options, configPath, {\n prompts,\n scanLarkPersonalAgent: dependencies.scanLarkPersonalAgent ?? scanLarkPersonalAgent,\n ...(dependencies.validateLarkCredentials ? { validateLarkCredentials: dependencies.validateLarkCredentials } : {}),\n ...(dependencies.cwd ? { cwd: dependencies.cwd } : {}),\n ...(dependencies.env ? { env: dependencies.env } : {}),\n ...(dependencies.defaults ? { defaults: dependencies.defaults } : {})\n });\n const config = createSetupConfig(setupInput, env);\n ensurePrivateDirectory(config.state.directory);\n ensurePrivateDirectory(config.state.worktreeRoot);\n writeCliConfigAtomic(configPath, config);\n\n prompts.note(formatSetupComplete(config, configPath));\n\n const shouldStart =\n options.start ??\n (!options.yes\n ? await prompts.confirm({\n message: startPromptMessage(config.preferences?.language),\n initialValue: true\n })\n : false);\n if (shouldStart) {\n prompts.outro(startingMessage(config.preferences?.language));\n await (dependencies.startOpenTag ?? runStartCommand)({ config: configPath });\n } else {\n prompts.outro(setupCompleteMessage(config.preferences?.language));\n }\n}\n","import { randomBytes } from \"node:crypto\";\nimport { realpathSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { projectTargetRefFromLocalPath } from \"@opentag/core\";\nimport {\n defaultStateDirectory,\n type OpenTagCliConfig,\n type PathEnvironment\n} from \"../config.js\";\nimport type { OpenTagSetupInput } from \"./types.js\";\n\nfunction pairingToken(): string {\n return randomBytes(32).toString(\"hex\");\n}\n\nexport function createSetupConfig(input: OpenTagSetupInput, env: PathEnvironment = process.env): OpenTagCliConfig {\n const checkoutPath = realpathSync.native(input.projectPath);\n const target = projectTargetRefFromLocalPath(checkoutPath);\n const stateDirectory = input.stateDirectory ?? defaultStateDirectory(env);\n const worktreeRoot = join(stateDirectory, \"worktrees\");\n const databasePath = join(stateDirectory, \"opentag.db\");\n const repositoryBindings = [\n {\n provider: target.provider,\n owner: target.owner,\n repo: target.repo,\n checkoutPath,\n defaultExecutor: input.executor,\n baseBranch: \"main\",\n pushRemote: \"origin\",\n worktreeRoot,\n keepWorktree: \"on_failure\" as const\n },\n ...(input.github\n ? [\n {\n provider: \"github\",\n owner: input.github.owner,\n repo: input.github.repo,\n checkoutPath,\n defaultExecutor: input.executor,\n baseBranch: \"main\",\n pushRemote: \"origin\",\n worktreeRoot,\n keepWorktree: \"on_failure\" as const\n }\n ]\n : [])\n ].filter((binding, index, bindings) => {\n return bindings.findIndex((candidate) => candidate.provider === binding.provider && candidate.owner === binding.owner && candidate.repo === binding.repo) === index;\n });\n\n const channelBindings = [\n ...(input.slack && input.slack.bindingMethod === \"default_project\"\n ? [\n {\n provider: \"slack\",\n accountId: input.slack.teamId,\n conversationId: input.slack.channelId,\n repoProvider: target.provider,\n owner: target.owner,\n repo: target.repo\n }\n ]\n : [])\n ];\n\n return {\n schemaVersion: 1,\n preferences: {\n language: input.language,\n lastSetup: {\n platforms: [input.platform],\n executor: input.executor,\n projectPath: checkoutPath,\n ...(input.lark\n ? {\n larkSetupMethod: input.lark.setupMethod,\n larkDomain: input.lark.domain,\n bindingMethod: input.lark.bindingMethod\n }\n : {}),\n ...(input.slack\n ? {\n bindingMethod: input.slack.bindingMethod,\n slackMode: input.slack.mode,\n slackTeamId: input.slack.teamId,\n slackChannelId: input.slack.channelId,\n ...(input.slack.port ? { slackPort: input.slack.port } : {})\n }\n : {}),\n ...(input.github\n ? {\n githubOwner: input.github.owner,\n githubRepo: input.github.repo,\n githubPort: input.github.port,\n githubAutoCreatePullRequest: input.github.autoCreatePullRequest\n }\n : {})\n }\n },\n state: {\n directory: stateDirectory,\n databasePath,\n worktreeRoot\n },\n runtime: {\n mode: \"local\"\n },\n daemon: {\n runnerId: \"runner_local\",\n dispatcherUrl: \"http://localhost:3030\",\n pairingToken: pairingToken(),\n repositories: repositoryBindings,\n ...(input.hermes\n ? {\n hermes: {\n ...(input.hermes.command ? { command: input.hermes.command } : {}),\n ...(input.hermes.profile ? { profile: input.hermes.profile } : {}),\n ...(input.hermes.profileTemplate ? { profileTemplate: input.hermes.profileTemplate } : {})\n }\n }\n : {}),\n ...(input.agentSessionProfile\n ? {\n agentSessionProfile: {\n ...(input.agentSessionProfile.profile ? { profile: input.agentSessionProfile.profile } : {}),\n ...(input.agentSessionProfile.profileTemplate ? { profileTemplate: input.agentSessionProfile.profileTemplate } : {})\n }\n }\n : {}),\n ...(channelBindings.length > 0 ? { channelBindings } : {}),\n ...(input.github ? { githubToken: input.github.token } : {}),\n ...(input.github ? { preparePullRequestBranch: true } : {}),\n ...(input.github ? { allowAutoCreatePullRequest: input.github.autoCreatePullRequest } : {}),\n pollIntervalMs: 5000,\n heartbeatIntervalMs: 15000\n },\n platforms: {\n ...(input.lark\n ? {\n lark: {\n appId: input.lark.appId,\n appSecret: input.lark.appSecret,\n domain: input.lark.domain,\n defaultProjectBinding: input.lark.bindingMethod === \"default_project\",\n ...(input.lark.botOpenId ? { botOpenId: input.lark.botOpenId } : {})\n }\n }\n : {}),\n ...(input.slack\n ? {\n slack: {\n mode: input.slack.mode,\n ...(input.slack.appToken ? { appToken: input.slack.appToken } : {}),\n ...(input.slack.signingSecret ? { signingSecret: input.slack.signingSecret } : {}),\n botToken: input.slack.botToken,\n teamId: input.slack.teamId,\n channelId: input.slack.channelId,\n defaultProjectBinding: input.slack.bindingMethod === \"default_project\",\n ...(input.slack.appId ? { appId: input.slack.appId } : {}),\n ...(input.slack.port ? { port: input.slack.port } : {})\n }\n }\n : {}),\n ...(input.github\n ? {\n github: {\n webhookSecret: input.github.webhookSecret,\n owner: input.github.owner,\n repo: input.github.repo,\n webhookPath: input.github.webhookPath,\n port: input.github.port\n }\n }\n : {})\n }\n };\n}\n","import { execFileSync } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { validateLarkCredentials, type LarkDomain, type RegisteredLarkPersonalAgent } from \"@opentag/lark\";\nimport {\n defaultExecutorId,\n detectExecutors,\n EXECUTOR_CATALOG,\n executorLabel,\n isExecutorId\n} from \"../catalogs/executors.js\";\nimport { LANGUAGE_OPTIONS, parseCliLanguage, type CliLanguage } from \"../catalogs/languages.js\";\nimport { formatPlatformStatus, PLATFORM_CATALOG, parsePlatformId, platformById, type PlatformId } from \"../catalogs/platforms.js\";\nimport { formatSavedLarkCredentialsHint } from \"../platforms/lark/display.js\";\nimport { readLegacyLarkCredentials, type SavedLarkCredentials } from \"../platforms/lark/saved-config.js\";\nimport { DEFAULT_GITHUB_WEBHOOK_PORT, DEFAULT_SLACK_EVENTS_PORT, parseLocalPort } from \"../platforms/ports.js\";\nimport type { PromptAdapter, PromptOption } from \"../ui/prompts.js\";\nimport { bindingMethodHint, bindingMethodLabel, larkSetupHint, larkSetupLabel, slackModeHint, slackModeLabel, t } from \"../ui/messages.js\";\nimport { loadSetupDefaults } from \"./defaults.js\";\nimport { formatGitHubTokenHelp, formatLarkManualCredentialHelp, formatPlatformSetupGuide, formatSlackCredentialHelp } from \"./guides.js\";\nimport { formatSetupReview } from \"./summary.js\";\nimport type { BindingMethod, GitHubSetupInput, HermesSetupInput, LarkSetupMethod, OpenTagSetupInput, SetupDefaults, SlackSetupInput, SlackSetupMode } from \"./types.js\";\n\nconst DEFAULT_HERMES_PROFILE_TEMPLATE =\n \"opentag-{provider}-{accountId}-{conversationId}-{owner}-{repo}-i{issueNumber}-pr{pullRequestNumber}\";\n\ntype LarkCredentialInput = {\n appId: string;\n appSecret: string;\n botOpenId?: string;\n domain: LarkDomain;\n};\n\nexport type SetupCommandOptions = {\n platform?: string;\n config?: string;\n project?: string;\n executor?: string;\n language?: string;\n larkSetup?: string;\n larkAppId?: string;\n larkAppSecret?: string;\n tenant?: string;\n larkBotOpenId?: string;\n slackMode?: string;\n slackAppToken?: string;\n slackSigningSecret?: string;\n slackBotToken?: string;\n slackAppId?: string;\n slackTeamId?: string;\n slackChannelId?: string;\n slackPort?: string;\n githubToken?: string;\n githubWebhookSecret?: string;\n githubRepository?: string;\n githubWebhookPath?: string;\n githubPort?: string;\n githubAutoCreatePr?: boolean;\n hermesCommand?: string;\n hermesProfile?: string;\n hermesProfileTemplate?: string;\n agentProfile?: string;\n agentProfileTemplate?: string;\n binding?: string;\n force?: boolean;\n yes?: boolean;\n start?: boolean;\n};\n\nexport type SetupFlowDependencies = {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n prompts: PromptAdapter;\n scanLarkPersonalAgent(input: { language: CliLanguage }): Promise<RegisteredLarkPersonalAgent>;\n validateLarkCredentials?(input: { appId: string; appSecret: string; domain: LarkDomain }): Promise<{ botOpenId: string; botName: string }>;\n defaults?: SetupDefaults;\n};\n\nfunction parseLarkSetupMethod(value: string): LarkSetupMethod {\n if (value === \"saved\" || value === \"scan\" || value === \"manual\") return value;\n throw new Error(\"Lark setup method must be saved, scan, or manual.\");\n}\n\nfunction parseLarkTenant(value: string): LarkDomain {\n if (value === \"lark\" || value === \"feishu\") return value;\n throw new Error(\"Tenant must be feishu or lark.\");\n}\n\nfunction parseSlackSetupMode(value: string): SlackSetupMode {\n const normalized = value.trim().toLowerCase().replace(/-/g, \"_\");\n if (normalized === \"socket_mode\" || normalized === \"events_api\") return normalized;\n throw new Error(\"Slack mode must be socket_mode or events_api.\");\n}\n\nfunction parseBindingMethod(value: string): BindingMethod {\n if (value === \"default_project\" || value === \"bind_later\") return value;\n throw new Error(\"Binding method must be default_project or bind_later.\");\n}\n\nfunction parseGitHubRepository(value: string): { owner: string; repo: string } {\n const trimmed = value.trim().replace(/^github:/, \"\");\n const match = trimmed.match(/^([^/\\s]+)\\/([^/\\s]+)$/);\n if (!match) {\n throw new Error(\"GitHub repository must use owner/repo.\");\n }\n return {\n owner: match[1]!,\n repo: match[2]!.replace(/\\.git$/, \"\")\n };\n}\n\nfunction parsePortInput(value: string | undefined, label: string): number | undefined {\n return value === undefined ? undefined : parseLocalPort(value, label);\n}\n\nfunction githubRepositoryFromRemote(projectPath: string): string | undefined {\n let remote: string;\n try {\n remote = execFileSync(\"git\", [\"-C\", projectPath, \"remote\", \"get-url\", \"origin\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"]\n }).trim();\n } catch {\n return undefined;\n }\n\n const patterns = [\n /^git@github\\.com:([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/,\n /^https:\\/\\/github\\.com\\/([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/,\n /^ssh:\\/\\/git@github\\.com\\/([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/\n ];\n for (const pattern of patterns) {\n const match = remote.match(pattern);\n if (match) {\n return `${match[1]}/${match[2]}`;\n }\n }\n return undefined;\n}\n\nfunction nonEmpty(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} is required.`);\n }\n return trimmed;\n}\n\nfunction assertExistingPath(path: string): string {\n if (!existsSync(path)) {\n throw new Error(`Path does not exist: ${path}`);\n }\n return path;\n}\n\nfunction optionalTrimmed(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction hasHermesOptions(options: SetupCommandOptions): boolean {\n return Boolean(options.hermesCommand || options.hermesProfile || options.hermesProfileTemplate);\n}\n\nfunction collectHermesSetup(options: SetupCommandOptions, defaults: SetupDefaults, executor: string): HermesSetupInput | undefined {\n if (executor !== \"hermes\") {\n if (hasHermesOptions(options)) {\n throw new Error(\"--hermes-command, --hermes-profile, and --hermes-profile-template can only be used with --executor hermes.\");\n }\n return undefined;\n }\n\n const explicitProfile = optionalTrimmed(options.hermesProfile);\n const explicitProfileTemplate = optionalTrimmed(options.hermesProfileTemplate);\n const command = optionalTrimmed(options.hermesCommand) ?? defaults.hermesCommand;\n const profile = explicitProfileTemplate ? explicitProfile : explicitProfile ?? defaults.hermesProfile;\n const profileTemplate =\n explicitProfileTemplate ??\n (explicitProfile ? undefined : defaults.hermesProfileTemplate) ??\n (profile ? undefined : DEFAULT_HERMES_PROFILE_TEMPLATE);\n\n return {\n ...(command ? { command } : {}),\n ...(profile ? { profile } : {}),\n ...(profileTemplate ? { profileTemplate } : {})\n };\n}\n\nfunction collectAgentSessionProfileSetup(options: SetupCommandOptions, defaults: SetupDefaults) {\n const explicitProfile = optionalTrimmed(options.agentProfile);\n const explicitProfileTemplate = optionalTrimmed(options.agentProfileTemplate);\n const profile = explicitProfileTemplate ? explicitProfile : explicitProfile ?? defaults.agentProfile;\n const profileTemplate = explicitProfileTemplate ?? (explicitProfile ? undefined : defaults.agentProfileTemplate);\n if (!profile && !profileTemplate) return undefined;\n return {\n ...(profile ? { profile } : {}),\n ...(profileTemplate ? { profileTemplate } : {})\n };\n}\n\nfunction generateGitHubWebhookSecret(): string {\n return randomBytes(32).toString(\"hex\");\n}\n\nfunction parseGitHubWebhookPath(value: string): string {\n const trimmed = nonEmpty(value, \"GitHub webhook path\");\n if (!trimmed.startsWith(\"/\")) {\n throw new Error(\"GitHub webhook path must start with /.\");\n }\n return trimmed;\n}\n\nfunction hasManualLarkCredentials(options: SetupCommandOptions): boolean {\n return Boolean(options.larkAppId || options.larkAppSecret || options.larkBotOpenId);\n}\n\nfunction hasCompleteManualLarkCredentials(options: SetupCommandOptions): boolean {\n return Boolean(options.larkAppId && options.larkAppSecret);\n}\n\nfunction assertCompleteManualLarkCredentials(options: SetupCommandOptions): void {\n if (options.larkAppId && !options.larkAppSecret) {\n throw new Error(\"--lark-app-secret is required when --lark-app-id is provided.\");\n }\n if (options.larkAppSecret && !options.larkAppId) {\n throw new Error(\"--lark-app-id is required when --lark-app-secret is provided.\");\n }\n}\n\nfunction assertNoManualLarkCredentialFlags(options: SetupCommandOptions): void {\n if (hasManualLarkCredentials(options)) {\n throw new Error(\"--lark-app-id, --lark-app-secret, and --lark-bot-open-id can only be used with --lark-setup manual.\");\n }\n}\n\nfunction findSavedLarkCredentials(defaults: SetupDefaults, projectPath: string): SavedLarkCredentials | undefined {\n return defaults.savedLarkCredentials ?? readLegacyLarkCredentials(projectPath);\n}\n\nfunction shouldReadSavedLarkCredentials(options: SetupCommandOptions): boolean {\n return !options.larkSetup || parseLarkSetupMethod(options.larkSetup) === \"saved\";\n}\n\nfunction loadDefaultsForSetup(options: SetupCommandOptions, configPath: string): SetupDefaults {\n try {\n return loadSetupDefaults(configPath);\n } catch (error) {\n if (options.force) {\n return {};\n }\n throw error;\n }\n}\n\nfunction defaultLanguage(options: SetupCommandOptions, defaults: SetupDefaults): CliLanguage {\n return options.language ? parseCliLanguage(options.language) : defaults.language ?? \"en\";\n}\n\nfunction formatPlatformStatusForSetup(language: CliLanguage, status: (typeof PLATFORM_CATALOG)[number][\"status\"]): string {\n if (language === \"zh-CN\") {\n switch (status) {\n case \"setup_ready\":\n return \"当前设置向导可配置\";\n case \"setup_pending\":\n return \"适配器已有,设置向导待接入\";\n case \"experimental_setup_pending\":\n return \"实验适配器,设置向导待接入\";\n }\n }\n return formatPlatformStatus(status);\n}\n\nfunction formatPlatformsForSetup(language: CliLanguage): string {\n const lines = PLATFORM_CATALOG.map((platform) => `- ${platform.label}: ${formatPlatformStatusForSetup(language, platform.status)}`);\n if (language === \"zh-CN\") {\n return [\"当前设置向导可配置的平台:\", ...lines].join(\"\\n\");\n }\n return [\"This setup wizard can configure:\", ...lines].join(\"\\n\");\n}\n\nfunction formatExecutorHint(input: {\n language: CliLanguage;\n executor: (typeof EXECUTOR_CATALOG)[number];\n available: boolean;\n current: boolean;\n selectedByDefault: boolean;\n}): string {\n if (input.executor.devOnly) {\n const echoHint = input.language === \"zh-CN\" ? \"开发测试用,不会调用真实编码代理\" : \"dev/test only; no real coding agent\";\n return input.current ? `${input.language === \"zh-CN\" ? \"当前选择,\" : \"current, \"}${echoHint}` : echoHint;\n }\n\n const availability = input.language === \"zh-CN\" ? (input.available ? \"已检测到\" : \"未检测到\") : input.available ? \"available\" : \"not found\";\n const current = input.current ? (input.language === \"zh-CN\" ? \"当前选择,\" : \"current, \") : \"\";\n const recommended = input.selectedByDefault ? (input.language === \"zh-CN\" ? \"推荐,\" : \"recommended, \") : \"\";\n return `${current || recommended}${availability}`;\n}\n\nasync function collectLanguage(options: SetupCommandOptions, defaults: SetupDefaults, prompts: PromptAdapter): Promise<CliLanguage> {\n if (options.language) {\n return parseCliLanguage(options.language);\n }\n return prompts.select({\n message: t(\"en\", \"language\"),\n initialValue: defaultLanguage(options, defaults),\n options: LANGUAGE_OPTIONS.map((language) => ({\n value: language.id,\n label: language.label,\n hint: language.hint\n }))\n });\n}\n\nasync function collectPlatform(options: SetupCommandOptions, defaults: SetupDefaults, prompts: PromptAdapter, language: CliLanguage): Promise<PlatformId> {\n prompts.note(formatPlatformsForSetup(language));\n const selected = options.platform\n ? parsePlatformId(options.platform)\n : await prompts.select({\n message: t(language, \"platform\"),\n initialValue: defaults.platform ?? \"lark\",\n options: PLATFORM_CATALOG.filter((platform) => platform.startable).map((platform) => ({\n value: platform.id,\n label: platform.label,\n hint: formatPlatformStatusForSetup(language, platform.status)\n }))\n });\n const descriptor = platformById(selected);\n if (!descriptor.startable) {\n throw new Error(`${descriptor.label} setup is not available in the OpenTag CLI yet.`);\n }\n const guide = formatPlatformSetupGuide(selected, language);\n if (guide) {\n prompts.note(guide);\n }\n return selected;\n}\n\nasync function collectExecutor(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n env: NodeJS.ProcessEnv | undefined\n): Promise<string> {\n if (options.executor !== undefined) {\n const executor = options.executor.trim();\n if (executor.length === 0) {\n throw new Error(\"Executor id must not be empty.\");\n }\n return executor;\n }\n const detections = detectExecutors(env);\n const normalizedPrevious = defaults.executor?.trim();\n if (normalizedPrevious !== undefined && normalizedPrevious.length === 0) {\n throw new Error(\"Executor id must not be empty.\");\n }\n const previousBuiltIn = normalizedPrevious !== undefined && isExecutorId(normalizedPrevious) ? normalizedPrevious : undefined;\n // A configured custom executor can't be represented by the built-in picker,\n // so surface it as a pre-selected option: the user keeps it by default but\n // can still switch to a built-in, instead of it being silently overwritten\n // (or the prompt being skipped) on an unrelated wizard re-run.\n const customPrevious = normalizedPrevious !== undefined && previousBuiltIn === undefined ? normalizedPrevious : undefined;\n const initialValue =\n customPrevious ??\n defaultExecutorId({\n ...(previousBuiltIn ? { previous: previousBuiltIn } : {}),\n detections\n });\n\n const builtInOptions: Array<PromptOption<string>> = EXECUTOR_CATALOG.map((executor) => {\n const detection = detections.find((entry) => entry.id === executor.id);\n return {\n value: executor.id,\n label: executor.label,\n hint: formatExecutorHint({\n language,\n executor,\n available: detection?.available ?? false,\n current: executor.id === normalizedPrevious,\n selectedByDefault: executor.id === initialValue\n })\n };\n });\n\n return prompts.select({\n message: t(language, \"executor\"),\n initialValue,\n options: customPrevious\n ? [{ value: customPrevious, label: customPrevious, hint: t(language, \"executorCustomHint\") }, ...builtInOptions]\n : builtInOptions\n });\n}\n\nasync function collectProjectPath(options: SetupCommandOptions, defaults: SetupDefaults, prompts: PromptAdapter, language: CliLanguage, cwd: string): Promise<string> {\n if (options.project) {\n return assertExistingPath(options.project);\n }\n const initialValue = defaults.projectPath ?? cwd;\n return prompts.text({\n message: t(language, \"projectPath\"),\n initialValue,\n placeholder: initialValue,\n validate(value) {\n const candidate = value.trim() || initialValue;\n if (!existsSync(candidate)) {\n return `Path does not exist: ${candidate}`;\n }\n return undefined;\n }\n });\n}\n\nasync function collectLarkSetupMethod(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n savedLarkCredentials: SavedLarkCredentials | undefined\n): Promise<LarkSetupMethod> {\n if (options.larkSetup) {\n const setupMethod = parseLarkSetupMethod(options.larkSetup);\n if (setupMethod === \"saved\" && !savedLarkCredentials) {\n throw new Error(\"No saved Lark Personal Agent config was found. Use --lark-setup scan or --lark-setup manual.\");\n }\n if (setupMethod === \"scan\" && options.tenant) {\n throw new Error(\"Tenant is detected during scan setup. Use --lark-setup manual --tenant <feishu|lark> for an existing app.\");\n }\n return setupMethod;\n }\n if (hasManualLarkCredentials(options) || options.tenant) {\n return \"manual\";\n }\n const methods: LarkSetupMethod[] = savedLarkCredentials ? [\"saved\", \"scan\", \"manual\"] : [\"scan\", \"manual\"];\n const previous = defaults.larkSetupMethod && methods.includes(defaults.larkSetupMethod) ? defaults.larkSetupMethod : undefined;\n const defaultSetupMethod = savedLarkCredentials ? \"saved\" : \"scan\";\n return prompts.select({\n message: t(language, \"larkSetup\"),\n initialValue: savedLarkCredentials ? \"saved\" : previous ?? defaultSetupMethod,\n options: methods.map((method) => ({\n value: method,\n label: larkSetupLabel(language, method),\n hint:\n method === \"saved\" && savedLarkCredentials\n ? formatSavedLarkCredentialsHint(savedLarkCredentials, language)\n : larkSetupHint(language, method)\n }))\n });\n}\n\nasync function collectLarkDomain(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n setupMethod: LarkSetupMethod,\n savedLarkCredentials: SavedLarkCredentials | undefined\n): Promise<LarkDomain> {\n if (setupMethod === \"saved\") {\n if (!savedLarkCredentials) {\n throw new Error(\"No saved Lark Personal Agent config was found.\");\n }\n return savedLarkCredentials.domain;\n }\n // Defensive fallback: collectSetupInput skips domain collection for scan,\n // because the platform returns the real tenant after registration.\n if (setupMethod === \"scan\") {\n throw new Error(\"Tenant is detected during scan setup.\");\n }\n if (options.tenant) {\n return parseLarkTenant(options.tenant);\n }\n return prompts.select({\n message: t(language, \"larkDomain\"),\n initialValue: defaults.larkDomain ?? \"feishu\",\n options: [\n { value: \"feishu\", label: \"Feishu\", hint: \"feishu.cn\" },\n { value: \"lark\", label: \"Lark\", hint: \"larksuite.com\" }\n ]\n });\n}\n\nasync function collectLarkCredentials(input: {\n options: SetupCommandOptions;\n prompts: PromptAdapter;\n language: CliLanguage;\n setupMethod: LarkSetupMethod;\n domain?: LarkDomain;\n savedLarkCredentials?: SavedLarkCredentials;\n scanLarkPersonalAgent(input: { language: CliLanguage }): Promise<RegisteredLarkPersonalAgent>;\n validateLarkCredentials(input: { appId: string; appSecret: string; domain: LarkDomain }): Promise<{ botOpenId: string; botName: string }>;\n}): Promise<LarkCredentialInput> {\n if (input.setupMethod === \"saved\") {\n if (!input.savedLarkCredentials) {\n throw new Error(\"No saved Lark Personal Agent config was found.\");\n }\n let botOpenId = input.savedLarkCredentials.botOpenId;\n try {\n const validation = await input.validateLarkCredentials({\n appId: input.savedLarkCredentials.appId,\n appSecret: input.savedLarkCredentials.appSecret,\n domain: input.savedLarkCredentials.domain\n });\n botOpenId = validation.botOpenId;\n } catch {\n input.prompts.note(\n \"Saved Lark / Feishu credentials could not be verified live; using the saved local config.\"\n );\n }\n return {\n appId: input.savedLarkCredentials.appId,\n appSecret: input.savedLarkCredentials.appSecret,\n domain: input.savedLarkCredentials.domain,\n ...(botOpenId ? { botOpenId } : {})\n };\n }\n\n if (input.setupMethod === \"scan\") {\n assertNoManualLarkCredentialFlags(input.options);\n const registered = await input.scanLarkPersonalAgent({ language: input.language });\n return {\n appId: registered.appId,\n appSecret: registered.appSecret,\n domain: registered.domain,\n ...(registered.botOpenId ? { botOpenId: registered.botOpenId } : {})\n };\n }\n\n if (!input.domain) {\n throw new Error(\"Tenant is required for manual setup.\");\n }\n assertCompleteManualLarkCredentials(input.options);\n if (!hasCompleteManualLarkCredentials(input.options)) {\n input.prompts.note(formatLarkManualCredentialHelp(input.language, input.domain));\n }\n const appIdLabel = input.language === \"zh-CN\" ? \"Lark 应用 ID\" : \"Lark App ID\";\n const appSecretLabel = input.language === \"zh-CN\" ? \"Lark 应用密钥\" : \"Lark App Secret\";\n const appId = nonEmpty(input.options.larkAppId ?? (await input.prompts.text({ message: t(input.language, \"larkAppId\") })), appIdLabel);\n const appSecret = nonEmpty(\n input.options.larkAppSecret ??\n (await input.prompts.password({\n message: t(input.language, \"larkAppSecret\"),\n validate(value) {\n if (!value.trim()) return input.language === \"zh-CN\" ? \"Lark 应用密钥不能为空。\" : \"Lark App Secret is required.\";\n return undefined;\n }\n })),\n appSecretLabel\n );\n const botOpenIdInput =\n input.options.larkBotOpenId ??\n (hasCompleteManualLarkCredentials(input.options)\n ? undefined\n : await input.prompts.text({\n message: t(input.language, \"larkBotOpenId\"),\n placeholder: \"ou_...\"\n }));\n const botOpenId = optionalTrimmed(botOpenIdInput);\n const validation = await input.validateLarkCredentials({\n appId,\n appSecret,\n domain: input.domain\n });\n if (botOpenId && botOpenId !== validation.botOpenId) {\n input.prompts.note(\"The provided Lark bot Open ID differed from live validation; using the verified bot Open ID.\");\n }\n return {\n appId,\n appSecret,\n domain: input.domain,\n botOpenId: validation.botOpenId\n };\n}\n\nasync function collectSlackSetup(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage\n): Promise<SlackSetupInput> {\n const derivedMode = options.slackMode\n ? parseSlackSetupMode(options.slackMode)\n : options.slackAppToken && !options.slackSigningSecret\n ? \"socket_mode\"\n : options.slackSigningSecret && !options.slackAppToken\n ? \"events_api\"\n : undefined;\n const selectedMode = derivedMode\n ? derivedMode\n : await prompts.select({\n message: t(language, \"slackMode\"),\n initialValue: defaults.slackMode ?? \"socket_mode\",\n options: ([\"socket_mode\", \"events_api\"] satisfies SlackSetupMode[]).map((candidate) => ({\n value: candidate,\n label: slackModeLabel(language, candidate),\n hint: slackModeHint(language, candidate)\n }))\n });\n\n if (selectedMode === \"socket_mode\" && options.slackPort) {\n throw new Error(\"--slack-port can only be used with --slack-mode events_api.\");\n }\n\n if (\n (selectedMode === \"socket_mode\" && (!options.slackAppToken || !options.slackBotToken)) ||\n (selectedMode === \"events_api\" && (!options.slackSigningSecret || !options.slackBotToken))\n ) {\n prompts.note(formatSlackCredentialHelp(language, selectedMode));\n }\n\n const appToken =\n selectedMode === \"socket_mode\"\n ? nonEmpty(\n options.slackAppToken ?? (await prompts.password({ message: t(language, \"slackAppToken\") })),\n \"Slack App-Level Token\"\n )\n : undefined;\n const signingSecret =\n selectedMode === \"events_api\"\n ? nonEmpty(\n options.slackSigningSecret ?? (await prompts.password({ message: t(language, \"slackSigningSecret\") })),\n \"Slack Signing Secret\"\n )\n : undefined;\n const botToken = nonEmpty(\n options.slackBotToken ?? (await prompts.password({ message: t(language, \"slackBotToken\") })),\n \"Slack Bot User OAuth Token\"\n );\n const appId = optionalTrimmed(\n options.slackAppId ??\n (await prompts.text({\n message: t(language, \"slackAppId\"),\n placeholder: \"A...\"\n }))\n );\n const teamId = nonEmpty(\n options.slackTeamId ??\n (await prompts.text({\n message: t(language, \"slackTeamId\"),\n placeholder: \"T...\",\n ...(defaults.slackTeamId ? { initialValue: defaults.slackTeamId } : {})\n })),\n \"Slack Team ID\"\n );\n const channelId = nonEmpty(\n options.slackChannelId ??\n (await prompts.text({\n message: t(language, \"slackChannelId\"),\n placeholder: \"C...\",\n ...(defaults.slackChannelId ? { initialValue: defaults.slackChannelId } : {})\n })),\n \"Slack Channel ID\"\n );\n const port =\n selectedMode === \"events_api\"\n ? (parsePortInput(options.slackPort, \"Slack Events API port\") ??\n (options.yes\n ? defaults.slackPort ?? DEFAULT_SLACK_EVENTS_PORT\n : parseLocalPort(\n await prompts.text({\n message: t(language, \"slackPort\"),\n initialValue: String(defaults.slackPort ?? DEFAULT_SLACK_EVENTS_PORT),\n placeholder: String(DEFAULT_SLACK_EVENTS_PORT)\n }),\n \"Slack Events API port\"\n )))\n : undefined;\n const bindingMethod = await collectBindingMethod(options, defaults, prompts, language, \"slack\");\n return {\n mode: selectedMode,\n ...(appToken ? { appToken } : {}),\n ...(signingSecret ? { signingSecret } : {}),\n botToken,\n teamId,\n channelId,\n bindingMethod,\n ...(appId ? { appId } : {}),\n ...(port ? { port } : {})\n };\n}\n\nasync function collectGitHubSetup(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n projectPath: string\n): Promise<GitHubSetupInput> {\n const repositoryDefault =\n options.githubRepository ??\n (defaults.githubOwner && defaults.githubRepo ? `${defaults.githubOwner}/${defaults.githubRepo}` : undefined) ??\n githubRepositoryFromRemote(projectPath);\n const repositoryInput = nonEmpty(\n options.githubRepository ??\n (await prompts.text({\n message: t(language, \"githubRepository\"),\n ...(repositoryDefault ? { initialValue: repositoryDefault, placeholder: repositoryDefault } : { placeholder: \"owner/repo\" }),\n validate(value) {\n try {\n parseGitHubRepository(value);\n return undefined;\n } catch (error) {\n return error instanceof Error ? error.message : String(error);\n }\n }\n })),\n \"GitHub repository\"\n );\n const repository = parseGitHubRepository(repositoryInput);\n const autoCreatePullRequest =\n options.githubAutoCreatePr ??\n (options.yes\n ? defaults.githubAutoCreatePullRequest ?? false\n : await prompts.confirm({\n message: t(language, \"githubAutoCreatePr\"),\n initialValue: defaults.githubAutoCreatePullRequest ?? false\n }));\n if (!options.githubToken) {\n prompts.note(formatGitHubTokenHelp(language, { autoCreatePullRequest }));\n }\n const token = nonEmpty(options.githubToken ?? (await prompts.password({ message: t(language, \"githubToken\") })), \"GitHub token\");\n const webhookSecret = options.githubWebhookSecret\n ? nonEmpty(options.githubWebhookSecret, \"GitHub webhook secret\")\n : defaults.githubWebhookSecret ?? generateGitHubWebhookSecret();\n const port =\n parsePortInput(options.githubPort, \"GitHub webhook port\") ??\n (options.yes\n ? defaults.githubPort ?? DEFAULT_GITHUB_WEBHOOK_PORT\n : parseLocalPort(\n await prompts.text({\n message: t(language, \"githubPort\"),\n initialValue: String(defaults.githubPort ?? DEFAULT_GITHUB_WEBHOOK_PORT),\n placeholder: String(DEFAULT_GITHUB_WEBHOOK_PORT)\n }),\n \"GitHub webhook port\"\n ));\n return {\n token,\n webhookSecret,\n owner: repository.owner,\n repo: repository.repo,\n webhookPath: parseGitHubWebhookPath(options.githubWebhookPath ?? defaults.githubWebhookPath ?? \"/github/webhooks\"),\n autoCreatePullRequest,\n port\n };\n}\n\nasync function collectBindingMethod(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n platform: \"lark\" | \"slack\"\n): Promise<BindingMethod> {\n if (options.binding) {\n const binding = parseBindingMethod(options.binding);\n if (platform === \"slack\" && binding === \"bind_later\") {\n throw new Error(\"Slack setup requires a channel binding. Use --binding default_project.\");\n }\n return binding;\n }\n if (platform === \"slack\") {\n return \"default_project\";\n }\n const message =\n t(language, \"bindingMethod\");\n return prompts.select({\n message,\n initialValue: defaults.bindingMethod ?? \"default_project\",\n options: ([\"default_project\", \"bind_later\"] satisfies BindingMethod[]).map((method) => ({\n value: method,\n label: bindingMethodLabel(language, method, platform),\n hint: bindingMethodHint(language, method, platform)\n }))\n });\n}\n\nexport async function collectSetupInput(\n options: SetupCommandOptions,\n configPath: string,\n dependencies: SetupFlowDependencies\n): Promise<OpenTagSetupInput> {\n const defaults = dependencies.defaults ?? loadDefaultsForSetup(options, configPath);\n const prompts = dependencies.prompts;\n const cwd = dependencies.cwd ?? process.cwd();\n\n prompts.intro(t(defaultLanguage(options, defaults), \"intro\"));\n\n const language = await collectLanguage(options, defaults, prompts);\n const platform = await collectPlatform(options, defaults, prompts, language);\n const executor = await collectExecutor(options, defaults, prompts, language, dependencies.env);\n const hermesSetup = collectHermesSetup(options, defaults, executor);\n const agentSessionProfile = collectAgentSessionProfileSetup(options, defaults);\n const projectPath = await collectProjectPath(options, defaults, prompts, language, cwd);\n const resolvedProjectPath = projectPath.trim() || cwd;\n const savedLarkCredentials =\n platform === \"lark\" && shouldReadSavedLarkCredentials(options)\n ? findSavedLarkCredentials(defaults, resolvedProjectPath)\n : undefined;\n const larkSetupMethod =\n platform === \"lark\" ? await collectLarkSetupMethod(options, defaults, prompts, language, savedLarkCredentials) : undefined;\n const larkDomain =\n platform === \"lark\" && larkSetupMethod && larkSetupMethod !== \"scan\"\n ? await collectLarkDomain(options, defaults, prompts, language, larkSetupMethod, savedLarkCredentials)\n : undefined;\n const larkCredentials =\n platform === \"lark\" && larkSetupMethod\n ? await collectLarkCredentials({\n options,\n prompts,\n language,\n setupMethod: larkSetupMethod,\n ...(larkDomain ? { domain: larkDomain } : {}),\n ...(savedLarkCredentials ? { savedLarkCredentials } : {}),\n scanLarkPersonalAgent: dependencies.scanLarkPersonalAgent,\n validateLarkCredentials: dependencies.validateLarkCredentials ?? validateLarkCredentials\n })\n : undefined;\n const larkBindingMethod = platform === \"lark\" ? await collectBindingMethod(options, defaults, prompts, language, \"lark\") : undefined;\n const slackSetup = platform === \"slack\" ? await collectSlackSetup(options, defaults, prompts, language) : undefined;\n const githubSetup = platform === \"github\" ? await collectGitHubSetup(options, defaults, prompts, language, resolvedProjectPath) : undefined;\n const larkPersistedCredentials = larkCredentials\n ? {\n appId: larkCredentials.appId,\n appSecret: larkCredentials.appSecret,\n ...(larkCredentials.botOpenId ? { botOpenId: larkCredentials.botOpenId } : {})\n }\n : undefined;\n\n const setupInput: OpenTagSetupInput = {\n language,\n platform,\n projectPath: resolvedProjectPath,\n executor,\n ...(hermesSetup ? { hermes: hermesSetup } : {}),\n ...(agentSessionProfile ? { agentSessionProfile } : {}),\n ...(larkPersistedCredentials && larkCredentials && larkSetupMethod && larkBindingMethod\n ? {\n lark: {\n ...larkPersistedCredentials,\n domain: larkCredentials.domain,\n setupMethod: larkSetupMethod,\n bindingMethod: larkBindingMethod,\n ...(larkSetupMethod === \"saved\" && savedLarkCredentials ? { savedCredentialsSource: savedLarkCredentials.source } : {})\n }\n }\n : {}),\n ...(slackSetup ? { slack: slackSetup } : {}),\n ...(githubSetup ? { github: githubSetup } : {})\n };\n\n prompts.note(formatSetupReview(setupInput, configPath));\n if (!options.yes) {\n const confirmed = await prompts.confirm({\n message: t(language, \"confirmSetup\"),\n initialValue: true\n });\n if (!confirmed) {\n throw new Error(t(language, \"cancelled\"));\n }\n }\n return setupInput;\n}\n","export type CliLanguage = \"en\" | \"zh-CN\";\n\nexport const LANGUAGE_OPTIONS: Array<{\n id: CliLanguage;\n label: string;\n hint: string;\n}> = [\n { id: \"en\", label: \"English\", hint: \"Default\" },\n { id: \"zh-CN\", label: \"简体中文\", hint: \"Chinese\" }\n];\n\nexport function parseCliLanguage(value: string): CliLanguage {\n if (value === \"en\" || value === \"zh-CN\") {\n return value;\n }\n throw new Error(\"Language must be en or zh-CN.\");\n}\n","import type { LarkDomain } from \"@opentag/lark\";\nimport type { CliLanguage } from \"../../catalogs/languages.js\";\nimport type { SavedLarkCredentials } from \"./saved-config.js\";\n\ntype LarkPersonalAgentSummaryInput = {\n appId: string;\n domain: LarkDomain;\n botOpenId?: string;\n source?: SavedLarkCredentials[\"source\"];\n};\n\nfunction shortId(value: string): string {\n if (value.length <= 16) return value;\n return `${value.slice(0, 6)}...${value.slice(-6)}`;\n}\n\nfunction domainLabel(domain: LarkDomain): string {\n return domain === \"feishu\" ? \"Feishu\" : \"Lark\";\n}\n\nfunction sourceLabel(source: SavedLarkCredentials[\"source\"], language: CliLanguage): string {\n if (language === \"zh-CN\") {\n return source === \"opentag_config\" ? \"OpenTag 配置\" : \"旧 start-lark 配置\";\n }\n return source === \"opentag_config\" ? \"OpenTag config\" : \"legacy start-lark config\";\n}\n\nexport function formatLarkPersonalAgentSummary(input: LarkPersonalAgentSummaryInput, language: CliLanguage): string {\n const parts = [\n domainLabel(input.domain),\n `${language === \"zh-CN\" ? \"应用 ID\" : \"App ID\"} ${shortId(input.appId)}`,\n input.botOpenId ? `${language === \"zh-CN\" ? \"机器人 Open ID\" : \"Bot Open ID\"} ${shortId(input.botOpenId)}` : undefined,\n input.source\n ? language === \"zh-CN\"\n ? `来源: ${sourceLabel(input.source, language)}`\n : `from ${sourceLabel(input.source, language)}`\n : undefined\n ];\n return parts.filter((part): part is string => Boolean(part)).join(\" | \");\n}\n\nexport function formatSavedLarkCredentialsHint(credentials: SavedLarkCredentials, language: CliLanguage): string {\n return formatLarkPersonalAgentSummary(credentials, language);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { z } from \"zod\";\nimport type { LarkDomain } from \"@opentag/lark\";\nimport { assertPrivateConfigFile, type OpenTagCliConfig } from \"../../config.js\";\n\nconst SavedLarkCredentialsSchema = z\n .object({\n appId: z.string().min(1),\n appSecret: z.string().min(1),\n domain: z.enum([\"lark\", \"feishu\"]),\n botOpenId: z.string().min(1).optional()\n })\n .passthrough();\n\nexport type SavedLarkCredentials = {\n appId: string;\n appSecret: string;\n domain: LarkDomain;\n botOpenId?: string;\n source: \"opentag_config\" | \"legacy_start_lark\";\n path?: string;\n};\n\nexport function savedLarkCredentialsFromCliConfig(config: OpenTagCliConfig): SavedLarkCredentials | undefined {\n const lark = config.platforms.lark;\n if (!lark) return undefined;\n return {\n appId: lark.appId,\n appSecret: lark.appSecret,\n domain: lark.domain,\n ...(lark.botOpenId ? { botOpenId: lark.botOpenId } : {}),\n source: \"opentag_config\"\n };\n}\n\nexport function legacyLarkConfigPath(projectPath: string): string {\n return join(projectPath, \".opentag\", \"lark\", \"lark.local.json\");\n}\n\nfunction parseJsonFile(path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, \"utf8\"));\n } catch (error) {\n throw new Error(`Saved Lark config at ${path} is invalid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nexport function readLegacyLarkCredentials(projectPath: string): SavedLarkCredentials | undefined {\n const path = legacyLarkConfigPath(projectPath);\n if (!existsSync(path)) return undefined;\n assertPrivateConfigFile(path);\n\n const parsed = SavedLarkCredentialsSchema.safeParse(parseJsonFile(path));\n if (!parsed.success) {\n throw new Error(`Saved Lark config at ${path} is invalid: ${parsed.error.message}`);\n }\n\n return {\n appId: parsed.data.appId,\n appSecret: parsed.data.appSecret,\n domain: parsed.data.domain,\n ...(parsed.data.botOpenId ? { botOpenId: parsed.data.botOpenId } : {}),\n source: \"legacy_start_lark\",\n path\n };\n}\n","import type { CliLanguage } from \"../catalogs/languages.js\";\nimport type { BindingMethod, LarkSetupMethod, SlackSetupMode } from \"../setup/types.js\";\n\ntype MessageKey =\n | \"intro\"\n | \"language\"\n | \"platform\"\n | \"executor\"\n | \"executorCustomHint\"\n | \"projectPath\"\n | \"larkSetup\"\n | \"larkDomain\"\n | \"larkAppId\"\n | \"larkAppSecret\"\n | \"larkBotOpenId\"\n | \"slackMode\"\n | \"slackAppToken\"\n | \"slackSigningSecret\"\n | \"slackBotToken\"\n | \"slackAppId\"\n | \"slackTeamId\"\n | \"slackChannelId\"\n | \"slackPort\"\n | \"githubRepository\"\n | \"githubToken\"\n | \"githubWebhookSecret\"\n | \"githubPort\"\n | \"githubAutoCreatePr\"\n | \"bindingMethod\"\n | \"confirmSetup\"\n | \"cancelled\"\n | \"complete\";\n\nconst MESSAGES: Record<CliLanguage, Record<MessageKey, string>> = {\n en: {\n intro: \"OpenTag setup\",\n language: \"Language / 语言\",\n platform: \"Where should OpenTag listen?\",\n executor: \"Which coding agent should OpenTag use?\",\n executorCustomHint: \"Currently configured custom executor\",\n projectPath: \"Which project should OpenTag use?\",\n larkSetup: \"How should OpenTag connect to Lark / Feishu?\",\n larkDomain: \"Which Lark / Feishu tenant is this existing app for?\",\n larkAppId: \"Lark App ID\",\n larkAppSecret: \"Lark App Secret\",\n larkBotOpenId: \"Lark Bot Open ID (optional)\",\n slackMode: \"How should OpenTag connect to Slack?\",\n slackAppToken: \"Slack App-Level Token\",\n slackSigningSecret: \"Slack Signing Secret\",\n slackBotToken: \"Slack Bot User OAuth Token\",\n slackAppId: \"Slack App ID (optional)\",\n slackTeamId: \"Slack Team ID\",\n slackChannelId: \"Slack Channel ID\",\n slackPort: \"Local Slack Events API port\",\n githubRepository: \"GitHub repository (owner/repo)\",\n githubToken: \"GitHub token for comments and `apply 1` pull requests\",\n githubWebhookSecret: \"GitHub webhook secret\",\n githubPort: \"Local GitHub webhook port\",\n githubAutoCreatePr: \"Create pull requests immediately after runs? (advanced)\",\n bindingMethod: \"How should Lark chats bind to this project?\",\n confirmSetup: \"Write this OpenTag config?\",\n cancelled: \"OpenTag setup cancelled.\",\n complete: \"OpenTag setup complete.\"\n },\n \"zh-CN\": {\n intro: \"OpenTag 设置\",\n language: \"Language / 语言\",\n platform: \"OpenTag 要监听哪个平台?\",\n executor: \"OpenTag 要使用哪个编码代理?\",\n executorCustomHint: \"当前配置的自定义执行器\",\n projectPath: \"OpenTag 要使用哪个项目?\",\n larkSetup: \"OpenTag 要如何连接 Lark/飞书?\",\n larkDomain: \"这个已有应用属于哪个 Lark/飞书租户?\",\n larkAppId: \"Lark 应用 ID\",\n larkAppSecret: \"Lark 应用密钥\",\n larkBotOpenId: \"Lark 机器人 Open ID(可选)\",\n slackMode: \"OpenTag 要如何连接 Slack?\",\n slackAppToken: \"Slack App-Level Token\",\n slackSigningSecret: \"Slack Signing Secret\",\n slackBotToken: \"Slack Bot User OAuth Token\",\n slackAppId: \"Slack App ID(可选)\",\n slackTeamId: \"Slack Team ID\",\n slackChannelId: \"Slack Channel ID\",\n slackPort: \"本地 Slack Events API 端口\",\n githubRepository: \"GitHub 仓库(owner/repo)\",\n githubToken: \"GitHub token(用于回写评论和 apply 1 创建 PR)\",\n githubWebhookSecret: \"GitHub webhook secret\",\n githubPort: \"本地 GitHub webhook 端口\",\n githubAutoCreatePr: \"run 结束后立刻自动创建 pull request 吗?(高级选项)\",\n bindingMethod: \"Lark 群聊要如何绑定到这个项目?\",\n confirmSetup: \"写入这份 OpenTag 配置?\",\n cancelled: \"OpenTag 设置已取消。\",\n complete: \"OpenTag 设置完成。\"\n }\n};\n\nexport function t(language: CliLanguage, key: MessageKey): string {\n return MESSAGES[language][key];\n}\n\nexport function larkSetupLabel(language: CliLanguage, method: LarkSetupMethod): string {\n if (language === \"zh-CN\") {\n if (method === \"saved\") return \"使用已保存的个人代理应用\";\n return method === \"scan\" ? \"扫码创建个人代理应用(保存平台返回的真实租户)\" : \"手动填写 Lark/飞书应用凭据\";\n }\n if (method === \"saved\") return \"Use saved Personal Agent\";\n return method === \"scan\" ? \"Create Personal Agent by QR (save returned tenant)\" : \"Manual Lark / Feishu credentials\";\n}\n\nexport function larkSetupHint(language: CliLanguage, method: LarkSetupMethod): string {\n if (language === \"zh-CN\") {\n if (method === \"saved\") return \"推荐,不需要重新扫码\";\n return method === \"scan\" ? \"链接可能从飞书 bootstrap 开始,最终保存真实 Lark/飞书租户\" : \"使用已有自建应用,并手动选择租户\";\n }\n if (method === \"saved\") return \"Recommended; no new scan\";\n return method === \"scan\" ? \"May start on Feishu bootstrap; saves the real returned tenant\" : \"Use an existing app and choose its tenant\";\n}\n\nexport function slackModeLabel(language: CliLanguage, mode: SlackSetupMode): string {\n if (language === \"zh-CN\") {\n return mode === \"socket_mode\" ? \"本地 Socket Mode(推荐)\" : \"公网 Events API\";\n }\n return mode === \"socket_mode\" ? \"Local Socket Mode (Recommended)\" : \"Public Events API\";\n}\n\nexport function slackModeHint(language: CliLanguage, mode: SlackSetupMode): string {\n if (language === \"zh-CN\") {\n return mode === \"socket_mode\" ? \"适合本机运行,不需要公网 URL\" : \"适合云端部署或 tunnel 测试\";\n }\n return mode === \"socket_mode\" ? \"Best for this computer; no public URL\" : \"Best for hosted OpenTag or tunnel testing\";\n}\n\nexport function bindingMethodLabel(language: CliLanguage, method: BindingMethod, platform: \"lark\" | \"slack\" = \"lark\"): string {\n if (language === \"zh-CN\") {\n if (method === \"default_project\") return \"默认使用这个项目\";\n return platform === \"slack\" ? \"稍后在 OpenTag 配置里绑定\" : \"稍后在 Lark 里用 /bind 绑定\";\n }\n if (method === \"default_project\") return \"Use this project by default\";\n return platform === \"slack\" ? \"Bind later from OpenTag config\" : \"Bind later from Lark with /bind\";\n}\n\nexport function bindingMethodHint(language: CliLanguage, method: BindingMethod, platform: \"lark\" | \"slack\" = \"lark\"): string {\n if (language === \"zh-CN\") {\n if (method === \"default_project\") return \"推荐,最快跑通\";\n return platform === \"slack\" ? \"适合先只保存 Slack 连接\" : \"适合多个项目\";\n }\n if (method === \"default_project\") return \"Recommended\";\n return platform === \"slack\" ? \"Use when you only want to save the Slack connection first\" : \"Best for multiple projects\";\n}\n","import { existsSync } from \"node:fs\";\nimport { defaultConfigPath, readCliConfig, type OpenTagCliConfig } from \"../config.js\";\nimport { savedLarkCredentialsFromCliConfig } from \"../platforms/lark/saved-config.js\";\nimport type { BindingMethod, SetupDefaults } from \"./types.js\";\n\nfunction defaultBindingMethod(config: OpenTagCliConfig): BindingMethod | undefined {\n const lastSetup = config.preferences?.lastSetup;\n if (lastSetup?.bindingMethod) return lastSetup.bindingMethod;\n if (config.platforms.lark?.defaultProjectBinding === false) return \"bind_later\";\n if (config.platforms.lark) return \"default_project\";\n if (config.platforms.slack?.defaultProjectBinding === false) return \"bind_later\";\n if (config.platforms.slack) return \"default_project\";\n return undefined;\n}\n\nexport function setupDefaultsFromConfig(config: OpenTagCliConfig): SetupDefaults {\n const repository = config.daemon.repositories[0];\n const lark = config.platforms.lark;\n const slack = config.platforms.slack;\n const github = config.platforms.github;\n const hermes = config.daemon.hermes;\n const agentSessionProfile = config.daemon.agentSessionProfile;\n const lastSetup = config.preferences?.lastSetup;\n const savedLarkCredentials = savedLarkCredentialsFromCliConfig(config);\n const bindingMethod = defaultBindingMethod(config);\n\n return {\n ...(config.preferences?.language ? { language: config.preferences.language } : {}),\n ...(lastSetup?.platforms?.[0] ? { platform: lastSetup.platforms[0] } : lark ? { platform: \"lark\" } : slack ? { platform: \"slack\" } : github ? { platform: \"github\" } : {}),\n ...(repository?.checkoutPath ? { projectPath: repository.checkoutPath } : {}),\n ...(repository?.defaultExecutor ? { executor: repository.defaultExecutor } : {}),\n ...(hermes?.command ? { hermesCommand: hermes.command } : {}),\n ...(hermes?.profile ? { hermesProfile: hermes.profile } : {}),\n ...(hermes?.profileTemplate ? { hermesProfileTemplate: hermes.profileTemplate } : {}),\n ...(agentSessionProfile?.profile ? { agentProfile: agentSessionProfile.profile } : {}),\n ...(agentSessionProfile?.profileTemplate ? { agentProfileTemplate: agentSessionProfile.profileTemplate } : {}),\n ...(lastSetup?.larkSetupMethod ? { larkSetupMethod: lastSetup.larkSetupMethod } : {}),\n ...(lastSetup?.larkDomain ? { larkDomain: lastSetup.larkDomain } : lark?.domain ? { larkDomain: lark.domain } : {}),\n ...(bindingMethod ? { bindingMethod } : {}),\n ...(lastSetup?.slackMode ? { slackMode: lastSetup.slackMode } : slack ? { slackMode: slack.mode ?? \"events_api\" } : {}),\n ...(lastSetup?.slackTeamId ? { slackTeamId: lastSetup.slackTeamId } : slack?.teamId ? { slackTeamId: slack.teamId } : {}),\n ...(lastSetup?.slackChannelId ? { slackChannelId: lastSetup.slackChannelId } : slack?.channelId ? { slackChannelId: slack.channelId } : {}),\n ...(lastSetup?.slackPort ? { slackPort: lastSetup.slackPort } : slack?.port ? { slackPort: slack.port } : {}),\n ...(lastSetup?.githubOwner ? { githubOwner: lastSetup.githubOwner } : github?.owner ? { githubOwner: github.owner } : {}),\n ...(lastSetup?.githubRepo ? { githubRepo: lastSetup.githubRepo } : github?.repo ? { githubRepo: github.repo } : {}),\n ...(lastSetup?.githubPort ? { githubPort: lastSetup.githubPort } : github?.port ? { githubPort: github.port } : {}),\n ...(github?.webhookSecret ? { githubWebhookSecret: github.webhookSecret } : {}),\n ...(github?.webhookPath ? { githubWebhookPath: github.webhookPath } : {}),\n ...(lastSetup?.githubAutoCreatePullRequest !== undefined\n ? { githubAutoCreatePullRequest: lastSetup.githubAutoCreatePullRequest }\n : config.daemon.allowAutoCreatePullRequest !== undefined\n ? { githubAutoCreatePullRequest: config.daemon.allowAutoCreatePullRequest }\n : {}),\n ...(savedLarkCredentials ? { savedLarkCredentials } : {})\n };\n}\n\nexport function loadSetupDefaults(path = defaultConfigPath()): SetupDefaults {\n if (!existsSync(path)) {\n return {};\n }\n return setupDefaultsFromConfig(readCliConfig(path));\n}\n","import type { LarkDomain } from \"@opentag/lark\";\nimport type { CliLanguage } from \"../catalogs/languages.js\";\nimport { platformById, platformSetupGuideUrl, type PlatformId } from \"../catalogs/platforms.js\";\nimport type { SlackSetupMode } from \"./types.js\";\n\nexport const OFFICIAL_SETUP_LINKS = {\n githubTokenPage: \"https://github.com/settings/personal-access-tokens/new\",\n githubTokenDocs: \"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens\",\n githubWebhookDocs: \"https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks\",\n slackApps: \"https://api.slack.com/apps\",\n slackSocketModeDocs: \"https://docs.slack.dev/apis/events-api/using-socket-mode/\",\n slackQuickstartDocs: \"https://docs.slack.dev/quickstart/\",\n slackSigningSecretDocs: \"https://docs.slack.dev/authentication/verifying-requests-from-slack/\",\n larkConsole: \"https://open.larksuite.com/app\",\n feishuConsole: \"https://open.feishu.cn/app\",\n larkAppIdDocs: \"https://open.larksuite.com/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-app-id\",\n larkWebSocketDocs: \"https://open.larksuite.com/document/ukTMukTMukTM/uYDNxYjL2QTM24iN0EjN/event-subscription-configure-/use-websocket\",\n feishuWebSocketDocs: \"https://open.feishu.cn/document/server-docs/event-subscription-guide/event-subscription-configure-/use-websocket?lang=zh-CN\"\n} as const;\n\nfunction setupNeeds(platform: PlatformId, language: CliLanguage): string[] {\n if (language === \"zh-CN\") {\n switch (platform) {\n case \"lark\":\n return [\"Lark 推荐手动配置自建应用\", \"飞书可以扫码创建个人代理应用\", \"手动配置时需要应用 ID 和应用密钥\"];\n case \"slack\":\n return [\"推荐本地使用 Socket Mode\", \"Socket Mode 需要 Slack App-Level Token 和 Bot User OAuth Token\", \"Events API 需要 Slack Signing Secret 和公网 Request URL\", \"开启 Interactivity & Shortcuts 以支持 Apply 1 按钮\", \"Slack bot scopes 需要 app_mentions:read、chat:write、reactions:write、channels:history\", \"订阅 bot events: app_mention、message.channels\", \"Slack Team ID\", \"Slack Channel ID\", \"测试前需要把 Slack app 邀请进目标 channel\"];\n case \"github\":\n return [\"GitHub 仓库 owner/repo\", \"GitHub token(用于回写评论;你回复 apply 1 后也用于创建 PR)\", \"OpenTag 会自动生成 webhook secret\", \"本地 webhook 端口,默认 3050\", \"需要一个公网 tunnel 转发 GitHub webhook\"];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n }\n\n switch (platform) {\n case \"lark\":\n return [\"Manual setup is recommended for Lark\", \"Feishu can use QR-created Personal Agent\", \"manual setup needs an App ID and App Secret\"];\n case \"slack\":\n return [\"Socket Mode is recommended for local OpenTag\", \"Socket Mode needs a Slack App-Level Token and Bot User OAuth Token\", \"Events API needs a Slack Signing Secret and public Request URL\", \"Enable Interactivity & Shortcuts for Apply 1 buttons\", \"Slack bot scopes need app_mentions:read, chat:write, reactions:write, channels:history\", \"Subscribe to bot events: app_mention, message.channels\", \"Slack Team ID\", \"Slack Channel ID\", \"Invite the Slack app to the target channel before testing\"];\n case \"github\":\n return [\"GitHub repository owner/repo\", \"GitHub token for comments and PR creation after you reply `apply 1`\", \"OpenTag generates the webhook secret\", \"Local webhook port, default 3050\", \"A public tunnel is required for GitHub webhook delivery\"];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n}\n\nfunction officialSetupLinks(platform: PlatformId, language: CliLanguage): string[] {\n if (language === \"zh-CN\") {\n switch (platform) {\n case \"lark\":\n return [\n `Lark 开发者后台: ${OFFICIAL_SETUP_LINKS.larkConsole}`,\n `飞书开发者后台: ${OFFICIAL_SETUP_LINKS.feishuConsole}`\n ];\n case \"slack\":\n return [\n `Slack App 管理页: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n `Socket Mode 官方文档: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`\n ];\n case \"github\":\n return [\n `GitHub token 创建页: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `Repository webhook 官方文档: ${OFFICIAL_SETUP_LINKS.githubWebhookDocs}`\n ];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n }\n\n switch (platform) {\n case \"lark\":\n return [\n `Lark Developer Console: ${OFFICIAL_SETUP_LINKS.larkConsole}`,\n `Feishu Developer Console: ${OFFICIAL_SETUP_LINKS.feishuConsole}`\n ];\n case \"slack\":\n return [\n `Slack app settings: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n `Socket Mode docs: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`\n ];\n case \"github\":\n return [\n `GitHub token page: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `Repository webhook docs: ${OFFICIAL_SETUP_LINKS.githubWebhookDocs}`\n ];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n}\n\nexport function formatPlatformSetupGuide(platform: PlatformId, language: CliLanguage): string | undefined {\n const url = platformSetupGuideUrl(platform, language);\n if (!url) return undefined;\n\n const descriptor = platformById(platform);\n const needs = setupNeeds(platform, language);\n const officialLinks = officialSetupLinks(platform, language);\n if (language === \"zh-CN\") {\n return [\n `${descriptor.label} 配置教程:`,\n url,\n \"\",\n \"官方入口:\",\n ...officialLinks.map((item) => `- ${item}`),\n \"\",\n \"继续填写前,先打开教程确认这些值在哪里拿:\",\n ...needs.map((item) => `- ${item}`)\n ].join(\"\\n\");\n }\n\n return [\n `${descriptor.label} setup guide:`,\n url,\n \"\",\n \"Official setup pages:\",\n ...officialLinks.map((item) => `- ${item}`),\n \"\",\n \"Open the guide before filling in these values:\",\n ...needs.map((item) => `- ${item}`)\n ].join(\"\\n\");\n}\n\nexport function formatLarkManualCredentialHelp(language: CliLanguage, domain: LarkDomain): string {\n const consoleUrl = domain === \"feishu\" ? OFFICIAL_SETUP_LINKS.feishuConsole : OFFICIAL_SETUP_LINKS.larkConsole;\n const websocketDocs = domain === \"feishu\" ? OFFICIAL_SETUP_LINKS.feishuWebSocketDocs : OFFICIAL_SETUP_LINKS.larkWebSocketDocs;\n if (language === \"zh-CN\") {\n return [\n \"手动 Lark/飞书凭据在哪里拿:\",\n `- 开发者后台: ${consoleUrl}`,\n \"- 应用 ID 和应用密钥: 打开你的应用,进入凭证与基础信息(Credentials & Basic Info)\",\n \"- 事件接收方式: 使用长连接(WebSocket)\",\n `- 长连接官方文档: ${websocketDocs}`,\n \"\",\n \"如果你没有自建应用,建议返回选择扫码创建个人代理应用。\"\n ].join(\"\\n\");\n }\n\n return [\n \"Where to find manual Lark / Feishu credentials:\",\n `- Developer console: ${consoleUrl}`,\n \"- App ID / App Secret: open your app, then go to Credentials & Basic Info\",\n \"- Event delivery mode: use long connection / WebSocket\",\n `- WebSocket docs: ${websocketDocs}`,\n \"\",\n \"If you do not already manage a self-built app, use QR scan instead.\"\n ].join(\"\\n\");\n}\n\nexport function formatSlackCredentialHelp(language: CliLanguage, mode: SlackSetupMode): string {\n if (language === \"zh-CN\") {\n const modeSpecific =\n mode === \"socket_mode\"\n ? [\n `- Socket Mode 官方文档: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`,\n \"- Slack App-Level Token: Basic Information -> App-Level Tokens -> Generate Token and Scopes,scope 选 connections:write\",\n \"- Interactivity & Shortcuts: 打开 Interactivity;Socket Mode 不需要 Request URL\"\n ]\n : [\n `- Signing Secret 官方文档: ${OFFICIAL_SETUP_LINKS.slackSigningSecretDocs}`,\n \"- Slack Signing Secret: Basic Information -> App Credentials\",\n \"- Event Subscriptions Request URL: 填你的公网 tunnel,例如 https://<your-tunnel>/slack/events\",\n \"- Interactivity & Shortcuts Request URL: 填同一个 https://<your-tunnel>/slack/events\"\n ];\n return [\n \"Slack 这些值在哪里拿:\",\n `- Slack App 管理页: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n ...modeSpecific,\n \"- Slack Bot User OAuth Token: OAuth & Permissions -> Bot User OAuth Token\",\n \"- Bot Token Scopes: app_mentions:read, chat:write, reactions:write, channels:history\",\n \"- Bot Events: app_mention, message.channels\",\n \"- Team ID / Channel ID: 用浏览器打开 Slack channel,从地址里复制 T... 和 C...\",\n \"- 测试前在目标 channel 里运行 /invite @你的 App 名称,把 app 邀请进 channel\"\n ].join(\"\\n\");\n }\n\n const modeSpecific =\n mode === \"socket_mode\"\n ? [\n `- Socket Mode docs: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`,\n \"- Slack App-Level Token: Basic Information -> App-Level Tokens -> Generate Token and Scopes, then add connections:write\",\n \"- Interactivity & Shortcuts: turn Interactivity on; Socket Mode does not need a Request URL\"\n ]\n : [\n `- Signing Secret docs: ${OFFICIAL_SETUP_LINKS.slackSigningSecretDocs}`,\n \"- Slack Signing Secret: Basic Information -> App Credentials\",\n \"- Event Subscriptions Request URL: use your public tunnel, for example https://<your-tunnel>/slack/events\",\n \"- Interactivity & Shortcuts Request URL: use the same https://<your-tunnel>/slack/events\"\n ];\n return [\n \"Where to find these Slack values:\",\n `- Slack app settings: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n ...modeSpecific,\n \"- Slack Bot User OAuth Token: OAuth & Permissions -> Bot User OAuth Token\",\n \"- Bot Token Scopes: app_mentions:read, chat:write, reactions:write, channels:history\",\n \"- Bot Events: app_mention, message.channels\",\n \"- Team ID / Channel ID: open the Slack channel in a browser and copy the T... and C... values from the URL\",\n \"- Before testing, run /invite @your app name in the target channel so Slack sends mentions to the app\"\n ].join(\"\\n\");\n}\n\nexport function formatGitHubTokenHelp(language: CliLanguage, input: { autoCreatePullRequest: boolean }): string {\n if (language === \"zh-CN\") {\n const permissions =\n input.autoCreatePullRequest\n ? [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: Read and write\"]\n : [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: 默认 apply 1 流程不需要;run branch 会使用本机 git remote 凭据推送\"];\n return [\n \"GitHub token 在哪里创建:\",\n `- 直接打开: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `- 官方教程: ${OFFICIAL_SETUP_LINKS.githubTokenDocs}`,\n \"\",\n \"推荐创建 fine-grained personal access token,只授权当前仓库。需要权限:\",\n ...permissions,\n \"\",\n \"GitHub 只会展示 token 一次,创建后马上复制并粘贴到下一步。\"\n ].join(\"\\n\");\n }\n\n const permissions =\n input.autoCreatePullRequest\n ? [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: Read and write\"]\n : [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: not needed for the default apply-1 flow; branch push uses your local git remote credentials\"];\n return [\n \"Where to create the GitHub token:\",\n `- Direct token page: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `- Official guide: ${OFFICIAL_SETUP_LINKS.githubTokenDocs}`,\n \"\",\n \"Create a fine-grained personal access token and limit it to this repository. Required permissions:\",\n ...permissions,\n \"\",\n \"GitHub only shows the token once. Copy it immediately, then paste it into the next prompt.\"\n ].join(\"\\n\");\n}\n","import { executorLabel } from \"../catalogs/executors.js\";\nimport { formatConfiguredCapabilities } from \"../catalogs/capabilities.js\";\nimport { platformById } from \"../catalogs/platforms.js\";\nimport type { CliLanguage } from \"../catalogs/languages.js\";\nimport type { OpenTagCliConfig } from \"../config.js\";\nimport { githubLocalWebhookUrl, githubPublicWebhookUrlPlaceholder, githubWebhooksSettingsUrl } from \"../platforms/github/display.js\";\nimport { formatLarkPersonalAgentSummary } from \"../platforms/lark/display.js\";\nimport { DEFAULT_GITHUB_WEBHOOK_PORT, DEFAULT_SLACK_EVENTS_PORT } from \"../platforms/ports.js\";\nimport type { LarkSetupMethod, OpenTagSetupInput } from \"./types.js\";\n\nfunction yesNo(value: boolean, language: CliLanguage): string {\n return language === \"zh-CN\" ? (value ? \"是\" : \"否\") : value ? \"yes\" : \"no\";\n}\n\nfunction larkSetupDescription(method: LarkSetupMethod, language: CliLanguage): string {\n if (language === \"zh-CN\") {\n if (method === \"saved\") return \"使用已保存的个人代理应用\";\n return method === \"scan\" ? \"创建新的个人代理应用\" : \"手动填写\";\n }\n if (method === \"saved\") return \"Saved Personal Agent\";\n return method === \"scan\" ? \"Create new Personal Agent\" : \"Manual credentials\";\n}\n\nexport function formatSetupReview(input: OpenTagSetupInput, configPath: string): string {\n const platform = platformById(input.platform);\n const commonLines =\n input.language === \"zh-CN\"\n ? [\n \"请确认 OpenTag 配置:\",\n `配置文件: ${configPath}`,\n `平台: ${platform.label}`,\n `编码代理: ${executorLabel(input.executor)}`,\n `项目路径: ${input.projectPath}`\n ]\n : [\n \"Review your OpenTag setup:\",\n `Config: ${configPath}`,\n `Platform: ${platform.label}`,\n `Coding agent: ${executorLabel(input.executor)}`,\n `Project path: ${input.projectPath}`\n ];\n\n const platformLines: string[] = [];\n const capabilityLines = formatConfiguredCapabilities({\n platforms: [input.platform],\n executors: [input.executor]\n });\n if (input.lark) {\n const larkPersonalAgent = formatLarkPersonalAgentSummary(\n {\n ...input.lark,\n ...(input.lark.savedCredentialsSource ? { source: input.lark.savedCredentialsSource } : {})\n },\n input.language\n );\n platformLines.push(\n ...(input.language === \"zh-CN\"\n ? [\n `Lark 连接方式: ${larkSetupDescription(input.lark.setupMethod, input.language)}`,\n `个人代理应用: ${larkPersonalAgent}`,\n `Lark/飞书租户: ${input.lark.domain}`,\n `默认绑定当前项目: ${yesNo(input.lark.bindingMethod === \"default_project\", input.language)}`\n ]\n : [\n `Lark setup: ${larkSetupDescription(input.lark.setupMethod, input.language)}`,\n `Personal Agent: ${larkPersonalAgent}`,\n `Lark / Feishu tenant: ${input.lark.domain}`,\n `Default project binding: ${yesNo(input.lark.bindingMethod === \"default_project\", input.language)}`\n ])\n );\n }\n if (input.slack) {\n const slackConnectionLines =\n input.slack.mode === \"socket_mode\"\n ? input.language === \"zh-CN\"\n ? [\"Slack 连接方式: 本地 Socket Mode\", \"Slack 入站: 通过 Slack WebSocket,不需要公网 URL\"]\n : [\"Slack connection: Local Socket Mode\", \"Slack ingress: Slack WebSocket; no public URL required\"]\n : input.language === \"zh-CN\"\n ? [\"Slack 连接方式: 公网 Events API\", `Slack Events URL: http://localhost:${input.slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events`]\n : [\"Slack connection: Public Events API\", `Slack Events URL: http://localhost:${input.slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events`];\n platformLines.push(\n ...(input.language === \"zh-CN\"\n ? [\n ...slackConnectionLines,\n `Slack Team ID: ${input.slack.teamId}`,\n `Slack Channel ID: ${input.slack.channelId}`,\n `默认绑定当前项目: ${yesNo(input.slack.bindingMethod === \"default_project\", input.language)}`\n ]\n : [\n ...slackConnectionLines,\n `Slack Team ID: ${input.slack.teamId}`,\n `Slack Channel ID: ${input.slack.channelId}`,\n `Default project binding: ${yesNo(input.slack.bindingMethod === \"default_project\", input.language)}`\n ])\n );\n }\n if (input.github) {\n const webhookPath = input.github.webhookPath;\n platformLines.push(\n ...(input.language === \"zh-CN\"\n ? [\n `GitHub 仓库: ${input.github.owner}/${input.github.repo}`,\n `GitHub 本地 webhook: ${githubLocalWebhookUrl({ port: input.github.port, webhookPath })}`,\n `GitHub Payload URL: ${githubPublicWebhookUrlPlaceholder(webhookPath)}`,\n \"Webhook secret: OpenTag 会自动生成\",\n \"默认 PR 流程: 回复 apply 1 后创建\",\n `run 后立刻自动创建 PR: ${yesNo(input.github.autoCreatePullRequest, input.language)}`\n ]\n : [\n `GitHub repository: ${input.github.owner}/${input.github.repo}`,\n `GitHub local webhook: ${githubLocalWebhookUrl({ port: input.github.port, webhookPath })}`,\n `GitHub Payload URL: ${githubPublicWebhookUrlPlaceholder(webhookPath)}`,\n \"Webhook secret: generated by OpenTag\",\n \"Default PR flow: create after replying `apply 1`\",\n `Immediate PR after run: ${yesNo(input.github.autoCreatePullRequest, input.language)}`\n ])\n );\n }\n const sessionProfileLines =\n input.agentSessionProfile && (input.agentSessionProfile.profile || input.agentSessionProfile.profileTemplate)\n ? input.language === \"zh-CN\"\n ? [\n input.agentSessionProfile.profile ? `Agent 会话 profile: ${input.agentSessionProfile.profile}` : undefined,\n input.agentSessionProfile.profileTemplate ? `Agent 会话 profile 模板: ${input.agentSessionProfile.profileTemplate}` : undefined\n ]\n : [\n input.agentSessionProfile.profile ? `Agent session profile: ${input.agentSessionProfile.profile}` : undefined,\n input.agentSessionProfile.profileTemplate ? `Agent session profile template: ${input.agentSessionProfile.profileTemplate}` : undefined\n ]\n : [];\n const lines = [...commonLines, ...capabilityLines, ...platformLines, ...sessionProfileLines.filter((line): line is string => Boolean(line))];\n return lines.join(\"\\n\");\n}\n\nexport function formatSetupComplete(config: OpenTagCliConfig, configPath: string): string {\n const repository = config.daemon.repositories[0];\n const language = config.preferences?.language ?? \"en\";\n const github = config.platforms.github;\n const slack = config.platforms.slack;\n const githubPort = github?.port ?? DEFAULT_GITHUB_WEBHOOK_PORT;\n if (language === \"zh-CN\") {\n return [\n \"OpenTag 配置已保存。\",\n `配置文件: ${configPath}`,\n repository ? `项目路径: ${repository.checkoutPath}` : undefined,\n slack ? \"\" : undefined,\n slack ? \"Slack 下一步:\" : undefined,\n slack ? `绑定 channel: ${slack.teamId}/${slack.channelId}` : undefined,\n slack ? \"测试前先在 Slack channel 里运行 /invite @你的 App 名称。\" : undefined,\n slack?.mode === \"socket_mode\" ? \"Socket Mode 不需要公网 URL;直接保持 opentag start 运行即可。\" : undefined,\n slack?.mode !== \"socket_mode\" && slack ? `Events API 本地监听: http://localhost:${slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events` : undefined,\n github ? \"\" : undefined,\n github ? \"GitHub webhook 下一步:\" : undefined,\n github ? `GitHub 设置页: ${githubWebhooksSettingsUrl(github)}` : undefined,\n github ? `Payload URL: ${githubPublicWebhookUrlPlaceholder(github.webhookPath ?? \"/github/webhooks\")}` : undefined,\n github ? `Secret: ${github.webhookSecret}` : undefined,\n github ? \"Content type: application/json\" : undefined,\n github ? \"Events: Issue comments, Pull request review comments\" : undefined,\n github ? `本地监听: ${githubLocalWebhookUrl({ port: github.port, webhookPath: github.webhookPath })}` : undefined,\n github ? `公网 URL 需要由 tunnel 指向本地监听地址,例如 ngrok http ${githubPort}。` : undefined,\n github ? \"当 OpenTag 给出 create_pull_request 建议动作后,在 thread 里回复 apply 1 创建 PR。\" : undefined\n ]\n .filter((line): line is string => Boolean(line))\n .join(\"\\n\");\n }\n return [\n \"OpenTag config saved.\",\n `Config: ${configPath}`,\n repository ? `Project path: ${repository.checkoutPath}` : undefined,\n slack ? \"\" : undefined,\n slack ? \"Slack next steps:\" : undefined,\n slack ? `Bound channel: ${slack.teamId}/${slack.channelId}` : undefined,\n slack ? \"Before testing, run /invite @your app name in that Slack channel.\" : undefined,\n slack?.mode === \"socket_mode\" ? \"Socket Mode does not need a public URL; keep opentag start running.\" : undefined,\n slack?.mode !== \"socket_mode\" && slack ? `Events API local listener: http://localhost:${slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events` : undefined,\n github ? \"\" : undefined,\n github ? \"GitHub webhook next steps:\" : undefined,\n github ? `GitHub settings: ${githubWebhooksSettingsUrl(github)}` : undefined,\n github ? `Payload URL: ${githubPublicWebhookUrlPlaceholder(github.webhookPath ?? \"/github/webhooks\")}` : undefined,\n github ? `Secret: ${github.webhookSecret}` : undefined,\n github ? \"Content type: application/json\" : undefined,\n github ? \"Events: Issue comments, Pull request review comments\" : undefined,\n github ? `Local listener: ${githubLocalWebhookUrl({ port: github.port, webhookPath: github.webhookPath })}` : undefined,\n github ? `Point a public tunnel at the local listener, for example: ngrok http ${githubPort}.` : undefined,\n github ? \"When OpenTag shows a create_pull_request action, reply `apply 1` in the thread to create the PR.\" : undefined\n ]\n .filter((line): line is string => Boolean(line))\n .join(\"\\n\");\n}\n","import * as p from \"@clack/prompts\";\nimport type { PromptAdapter, PromptOption } from \"./prompts.js\";\n\nfunction cancelled(): never {\n p.cancel(\"OpenTag setup cancelled.\");\n process.exit(0);\n}\n\nfunction unwrapPromptResult<Value>(value: Value | symbol): Value {\n if (p.isCancel(value)) {\n cancelled();\n }\n return value;\n}\n\ntype ClackStringOption<Value extends string> = {\n value: Value;\n label: string;\n hint?: string;\n};\n\nfunction clackOptions<Value extends string>(options: Array<PromptOption<Value>>): Array<ClackStringOption<Value>> {\n return options.map((option) => {\n const clackOption: ClackStringOption<Value> = {\n value: option.value,\n label: option.label\n };\n return option.hint ? { ...clackOption, hint: option.hint } : clackOption;\n });\n}\n\nexport function createClackPromptAdapter(): PromptAdapter {\n return {\n intro(message) {\n p.intro(message);\n },\n outro(message) {\n p.outro(message);\n },\n note(message) {\n p.log.message(message);\n },\n async select<Value extends string>(input: {\n message: string;\n options: Array<PromptOption<Value>>;\n initialValue?: Value;\n }): Promise<Value> {\n const selected = unwrapPromptResult(\n await p.select<string>({\n message: input.message,\n options: clackOptions(input.options),\n ...(input.initialValue ? { initialValue: input.initialValue } : {})\n })\n );\n return selected as Value;\n },\n async text(input) {\n return unwrapPromptResult(await p.text(input));\n },\n async password(input) {\n return unwrapPromptResult(await p.password({ ...input, mask: \"*\" }));\n },\n async confirm(input) {\n return unwrapPromptResult(await p.confirm(input));\n }\n };\n}\n","import qrcode from \"qrcode-terminal\";\nimport { registerLarkPersonalAgent, type RegisteredLarkPersonalAgent } from \"@opentag/lark\";\nimport type { CliLanguage } from \"../../catalogs/languages.js\";\n\nexport type ScanLarkPersonalAgentDependencies = {\n output?: Pick<NodeJS.WriteStream, \"write\">;\n register?: typeof registerLarkPersonalAgent;\n showQrCode?: boolean;\n};\n\nexport async function scanLarkPersonalAgent(\n input: { language?: CliLanguage } = {},\n dependencies: ScanLarkPersonalAgentDependencies = {}\n): Promise<RegisteredLarkPersonalAgent> {\n const output = dependencies.output ?? process.stdout;\n const register = dependencies.register ?? registerLarkPersonalAgent;\n const showQrCode = dependencies.showQrCode ?? process.env.OPENTAG_SHOW_QR === \"1\";\n const language = input.language ?? \"en\";\n\n const registered = await register({\n onQrCode(info) {\n output.write(\n language === \"zh-CN\"\n ? \"\\n打开这个链接创建 Lark/飞书个人代理应用:\\n\"\n : \"\\nOpen this URL to create the Lark / Feishu Personal Agent app:\\n\"\n );\n output.write(`URL: ${info.url}\\n`);\n output.write(\n language === \"zh-CN\"\n ? `二维码约 ${Math.ceil(info.expireIn / 60)} 分钟后过期。\\n`\n : `This QR code expires in about ${Math.ceil(info.expireIn / 60)} minute(s).\\n`\n );\n if (showQrCode) {\n output.write(language === \"zh-CN\" ? \"\\n终端二维码:\\n\" : \"\\nTerminal QR code:\\n\");\n qrcode.generate(info.url, { small: true }, (qr) => {\n output.write(`${qr}\\n`);\n });\n } else {\n output.write(\n language === \"zh-CN\"\n ? \"设置链接较长,默认不在终端显示二维码。\\n\"\n : \"Terminal QR codes are hidden by default because setup links are large.\\n\"\n );\n output.write(\n language === \"zh-CN\"\n ? \"如果想扫描终端二维码,可以设置 OPENTAG_SHOW_QR=1。\\n\"\n : \"Set OPENTAG_SHOW_QR=1 if you prefer scanning a terminal QR code.\\n\"\n );\n }\n output.write(\n language === \"zh-CN\"\n ? \"这个链接可能从飞书 bootstrap 页面开始;如果你使用 Lark 国际租户,平台会在扫码后切换。请保持这个终端打开,OpenTag 会保存平台返回的真实 Lark/飞书租户。\\n\\n\"\n : \"This link may start on the Feishu bootstrap page; Lark global tenants can switch after scan. Keep this terminal open. OpenTag will save the real Lark / Feishu tenant returned by the platform.\\n\\n\"\n );\n },\n onStatus(info) {\n if (info.status === \"slow_down\") {\n output.write(\n language === \"zh-CN\"\n ? `Lark 要求降低轮询频率,下次检查将在 ${info.interval ?? \"几\"} 秒后进行。\\n`\n : `Lark asked OpenTag to poll more slowly. Next check in ${info.interval ?? \"a few\"} seconds.\\n`\n );\n } else if (info.status === \"domain_switched\") {\n output.write(\n language === \"zh-CN\"\n ? \"检测到 Lark 租户,将继续使用 larksuite.com 完成注册。\\n\"\n : \"Detected a Lark tenant. Continuing registration on larksuite.com.\\n\"\n );\n }\n },\n onWarning(message) {\n output.write(`${message}\\n`);\n }\n });\n\n output.write(language === \"zh-CN\" ? \"Lark 个人代理应用已连接。\\n\" : \"Lark Personal Agent connected.\\n\");\n output.write(`App ID: ${registered.appId}\\n`);\n output.write(`${language === \"zh-CN\" ? \"租户\" : \"Tenant\"}: ${registered.domain}\\n`);\n if (registered.operatorOpenId) {\n output.write(`${language === \"zh-CN\" ? \"设置用户\" : \"Setup user\"}: ${registered.operatorOpenId}\\n`);\n }\n if (registered.botOpenId) {\n output.write(`${language === \"zh-CN\" ? \"机器人\" : \"Bot\"}: ${registered.botName ?? \"OpenTag\"} (${registered.botOpenId})\\n`);\n }\n output.write(\"\\n\");\n\n return registered;\n}\n"],"mappings":"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","names":["join","createOpenTagClient","formatProjectTargetRef","formatProjectTargetRef","createOpenTagClient","result","renderOpenTagPresentationPlainText","renderOpenTagPresentationPlainText","checks","nonEmpty","createOpenTagClient","z","z","createOpenTagClient","resolve","githubRelayWebhookUrl","existsSync","mkdirSync","readFileSync","rmSync","writeFileSync","homedir","dirname","join","dispatcherRuntimeHardeningInputFromEnv","doctorHasFailures","executorsFromConfig","runDoctor","homedir","join","dirname","dispatcherRuntimeHardeningInputFromEnv","mkdirSync","writeFileSync","existsSync","text","rmSync","readFileSync","configured","runDoctor","executorsFromConfig","doctorHasFailures","existsSync","join","join","execFileSync","randomBytes","existsSync","existsSync","readFileSync","join","z","z","join","readFileSync","existsSync","existsSync","existsSync","modeSpecific","permissions","yesNo","execFileSync","nonEmpty","existsSync","randomBytes","botOpenId","validation","existsSync"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/config.ts","../src/catalogs/capabilities.ts","../src/catalogs/executors.ts","../src/catalogs/platforms.ts","../src/commands/executors.ts","../src/commands/platforms.ts","../src/cancel.ts","../src/status.ts","../src/health.ts","../src/project-target-summary.ts","../src/relay-security.ts","../src/secret-readiness.ts","../src/doctor.ts","../src/ingest.ts","../src/maintenance.ts","../src/start.ts","../src/platforms/ports.ts","../src/platforms/github/display.ts","../src/pair.ts","../src/service.ts","../src/commands/setup.ts","../src/setup/builders.ts","../src/setup/flow.ts","../src/catalogs/languages.ts","../src/platforms/lark/display.ts","../src/platforms/lark/saved-config.ts","../src/ui/messages.ts","../src/setup/defaults.ts","../src/setup/guides.ts","../src/setup/summary.ts","../src/ui/clack.ts","../src/platforms/lark/registration-ui.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport {\n defaultConfigPath,\n formatCliConfigError,\n readRedactedCliConfig\n} from \"./config.js\";\nimport { runExecutorsCommand } from \"./commands/executors.js\";\nimport { runPlatformsCommand } from \"./commands/platforms.js\";\nimport { runCancelCommand } from \"./cancel.js\";\nimport { runDoctorCommand } from \"./doctor.js\";\nimport { runIngestCommand, runIngestTemplateCommand } from \"./ingest.js\";\nimport { runMaintenancePruneSourceDeliveriesCommand } from \"./maintenance.js\";\nimport { runPairCommand } from \"./pair.js\";\nimport {\n runServiceAutostartDisableCommand,\n runServiceAutostartEnableCommand,\n runServiceInstallCommand,\n runServiceLogsCommand,\n runServiceRestartCommand,\n runServiceRunCommand,\n runServiceStartCommand,\n runServiceStatusCommand,\n runServiceStopCommand,\n runServiceUninstallCommand\n} from \"./service.js\";\nimport { runSetupCommand } from \"./commands/setup.js\";\nimport { runStartCommand } from \"./start.js\";\nimport { runStatusCommand } from \"./status.js\";\n\nconst program = new Command();\n\nfunction handleError(error: unknown): never {\n console.error(formatCliConfigError(error));\n process.exit(1);\n}\n\nfunction runCliAction<T extends unknown[]>(handler: (...args: T) => Promise<void> | void): (...args: T) => Promise<void> {\n return async (...args: T) => {\n try {\n await handler(...args);\n } catch (error) {\n handleError(error);\n }\n };\n}\n\nprogram.name(process.env.OPENTAG_CLI_NAME?.trim() || \"opentag\").description(\"OpenTag CLI\");\n\nprogram\n .command(\"setup\")\n .description(\"Create a local OpenTag config\")\n .option(\"--platform <platform>\", \"Platform to configure\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--project <path>\", \"Project checkout path\")\n .option(\"--language <language>\", \"Setup language: en or zh-CN\")\n .option(\"--executor <executor>\", \"Default executor: echo, codex, claude-code, or hermes\")\n .option(\"--hermes-command <command>\", \"Hermes CLI command\")\n .option(\"--hermes-profile <profile>\", \"Hermes profile\")\n .option(\"--hermes-profile-template <template>\", \"Hermes profile template\")\n .option(\"--agent-profile <profile>\", \"Executor-neutral agent session profile\")\n .option(\"--agent-profile-template <template>\", \"Executor-neutral agent session profile template\")\n .option(\"--lark-setup <method>\", \"Lark setup method: saved, scan, or manual\")\n .option(\"--lark-app-id <id>\", \"Lark app id\")\n .option(\"--lark-app-secret <secret>\", \"Lark app secret\")\n .option(\"--tenant <tenant>\", \"Manual Lark / Feishu tenant: feishu or lark\")\n .option(\"--lark-bot-open-id <openId>\", \"Lark bot open id for group mentions\")\n .option(\"--slack-mode <mode>\", \"Slack connection mode: socket_mode or events_api\")\n .option(\"--slack-app-token <token>\", \"Slack app-level token for Socket Mode\")\n .option(\"--slack-signing-secret <secret>\", \"Slack signing secret\")\n .option(\"--slack-bot-token <token>\", \"Slack bot user OAuth token\")\n .option(\"--slack-app-id <id>\", \"Slack app id\")\n .option(\"--slack-team-id <id>\", \"Slack team id\")\n .option(\"--slack-channel-id <id>\", \"Slack channel id\")\n .option(\"--slack-port <port>\", \"Local Slack Events API port\")\n .option(\"--github-token <token>\", \"GitHub token for comments and apply-1 pull requests\")\n .option(\"--github-webhook-secret <secret>\", \"GitHub webhook secret; generated when omitted\")\n .option(\"--github-repository <ownerRepo>\", \"GitHub repository as owner/repo\")\n .option(\"--github-webhook-path <path>\", \"GitHub webhook path\")\n .option(\"--github-port <port>\", \"Local GitHub webhook port\")\n .option(\"--github-auto-create-pr\", \"Create pull requests immediately after runs\")\n .option(\"--no-github-auto-create-pr\", \"Use the default apply-1 pull request flow\")\n .option(\"--binding <method>\", \"Binding method: default_project or bind_later\")\n .option(\"--force\", \"Overwrite an existing config\")\n .option(\"--start\", \"Start OpenTag immediately after setup\")\n .option(\"--no-start\", \"Do not ask to start OpenTag after setup\")\n .option(\"--service\", \"Install and start OpenTag as a background service after setup\")\n .option(\"-y, --yes\", \"Skip setup confirmation\")\n .action(runCliAction(runSetupCommand));\n\nprogram\n .command(\"pair\")\n .description(\"Pair this local runner with a remote relay\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--relay <url>\", \"Remote relay dispatcher URL\")\n .option(\"--no-register\", \"Update config without registering runner and project targets\")\n .action(runCliAction(runPairCommand));\n\nprogram\n .command(\"start\")\n .description(\"Start the local OpenTag stack\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runStartCommand));\n\nprogram\n .command(\"status\")\n .description(\"Show the local OpenTag status\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--run <runId>\", \"Show audit details for one run\")\n .option(\"--channel <provider:account/conversation>\", \"Show active run and queued follow-ups for one source container\")\n .action(runCliAction(runStatusCommand));\n\nprogram\n .command(\"cancel\")\n .description(\"Request cancellation for a run or the active run in a source container\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--run <runId>\", \"Cancel one run by id\")\n .option(\"--channel <provider:account/conversation>\", \"Cancel the active run for one source container\")\n .option(\"--reason <reason>\", \"Audit reason for cancellation\")\n .option(\"--requested-by <actor>\", \"Audit actor requesting cancellation\")\n .action(runCliAction(runCancelCommand));\n\nprogram\n .command(\"doctor\")\n .description(\"Check dispatcher, bindings, checkouts, and executors\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runDoctorCommand));\n\nprogram\n .command(\"ingest\")\n .description(\"Ingest a local external agent progress or completion event\")\n .option(\"--config <path>\", \"Config file path\")\n .requiredOption(\"--run <runId>\", \"OpenTag run id\")\n .requiredOption(\"--event <event>\", \"Event: progress, post_llm_call, before_agent_finalize, agent_end, failed, cancelled, timed_out, or interrupted\")\n .option(\"--source <source>\", \"External agent runtime source label\")\n .option(\"--message <message>\", \"Progress or completion summary\")\n .option(\"--type <type>\", \"Progress event type\")\n .option(\"--idempotency-key <key>\", \"Stable replay-protection key for retrying the same progress event\")\n .option(\"--result-json <json>\", \"Complete run with an OpenTagRunResult JSON object\")\n .option(\"--conclusion <conclusion>\", \"Completion conclusion when --result-json is omitted\")\n .option(\"--summary <summary>\", \"Completion summary when --result-json is omitted\")\n .action(runCliAction(runIngestCommand));\n\nprogram\n .command(\"ingest-template\")\n .description(\"Print a shell template or manifest for local external agent hook ingest\")\n .option(\"--source <source>\", \"External agent runtime source label\")\n .option(\"--command <command>\", \"OpenTag CLI command to use in the template\")\n .option(\"--format <format>\", \"Template format: shell or manifest\")\n .action(runCliAction(runIngestTemplateCommand));\n\nconst serviceCommand = program.command(\"service\").description(\"Install and control the OpenTag background service\");\n\nserviceCommand\n .command(\"install\")\n .description(\"Install the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--max-request-body-bytes <bytes>\", \"Persist dispatcher request body limit in the service definition\")\n .option(\"--rate-limit-window-ms <ms>\", \"Persist dispatcher rate-limit window in the service definition\")\n .option(\"--rate-limit-max-requests <n>\", \"Persist dispatcher rate-limit max requests in the service definition\")\n .option(\"--rate-limit-disabled\", \"Persist an explicit disabled dispatcher rate-limit state in the service definition\")\n .action(runCliAction(runServiceInstallCommand));\n\nserviceCommand\n .command(\"start\")\n .description(\"Start the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceStartCommand));\n\nserviceCommand\n .command(\"stop\")\n .description(\"Stop the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceStopCommand));\n\nserviceCommand\n .command(\"restart\")\n .description(\"Restart the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceRestartCommand));\n\nserviceCommand\n .command(\"status\")\n .description(\"Show the OpenTag background service status\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceStatusCommand));\n\nserviceCommand\n .command(\"logs\")\n .description(\"Show recent OpenTag background service logs\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--lines <n>\", \"Number of lines per log file\")\n .action(runCliAction(runServiceLogsCommand));\n\nserviceCommand\n .command(\"uninstall\")\n .description(\"Uninstall the OpenTag background service\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceUninstallCommand));\n\nconst autostartCommand = serviceCommand.command(\"autostart\").description(\"Control OpenTag service login autostart\");\n\nautostartCommand\n .command(\"enable\")\n .description(\"Enable OpenTag service login autostart\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceAutostartEnableCommand));\n\nautostartCommand\n .command(\"disable\")\n .description(\"Disable OpenTag service login autostart\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction(runServiceAutostartDisableCommand));\n\nserviceCommand\n .command(\"run\", { hidden: true })\n .description(\"Run the OpenTag service payload\")\n .option(\"--config <path>\", \"Config file path\")\n .option(\"--mode <mode>\", \"Service run mode\", \"background\")\n .action(runCliAction(runServiceRunCommand));\n\nprogram\n .command(\"platforms\")\n .description(\"List OpenTag platform setup support and runtime capabilities\")\n .action(() => {\n runPlatformsCommand();\n });\n\nprogram\n .command(\"executors\")\n .description(\"List available coding agents and runtime capabilities\")\n .action(() => {\n runExecutorsCommand();\n });\n\nconst maintenanceCommand = program.command(\"maintenance\").description(\"Run explicit OpenTag maintenance operations\");\n\nmaintenanceCommand\n .command(\"prune-source-deliveries\")\n .description(\"Prune stale source delivery replay keys after their runs are terminal\")\n .option(\"--config <path>\", \"Config file path\")\n .requiredOption(\"--older-than <timestamp>\", \"Prune delivery replay keys created before this ISO timestamp\")\n .option(\"--limit <n>\", \"Maximum delivery replay keys to scan\")\n .action(runCliAction(runMaintenancePruneSourceDeliveriesCommand));\n\nconst configCommand = program.command(\"config\").description(\"Inspect OpenTag config\");\n\nconfigCommand\n .command(\"path\")\n .description(\"Print the OpenTag config path\")\n .action(() => {\n console.log(defaultConfigPath());\n });\n\nconfigCommand\n .command(\"show\")\n .description(\"Print the OpenTag config with secrets redacted\")\n .option(\"--config <path>\", \"Config file path\")\n .action(runCliAction((options) => {\n console.log(JSON.stringify(readRedactedCliConfig(options.config ?? defaultConfigPath()), null, 2));\n }));\n\nawait program.parseAsync(process.argv);\n","import { execFileSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { chmodSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { formatConfigError as formatDaemonConfigError, parseDaemonConfig, type OpenTagDaemonConfig } from \"@opentag/local-runtime\";\nimport { z } from \"zod\";\nimport type { CliLanguage } from \"./catalogs/languages.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\n\n// Executor ids (repository bindings and the last-used preference) accept any\n// trimmed non-empty string so custom executors registered by a standalone runner\n// validate; echo, codex, claude-code, and hermes remain the documented built-ins.\n// Mirrors the daemon config and the open runtime dispatch.\nconst ExecutorIdSchema = z.string().trim().min(1);\nconst KeepWorktreeSchema = z.enum([\"always\", \"on_failure\", \"never\"]);\nconst PositiveIntegerSchema = z.number().int().positive();\nconst CliLanguageSchema = z.enum([\"en\", \"zh-CN\"]);\nconst PlatformSchema = z.enum([\"lark\", \"slack\", \"github\", \"gitlab\", \"telegram\"]);\nconst LarkSetupMethodSchema = z.enum([\"saved\", \"scan\", \"manual\"]);\nconst SlackModeSchema = z.enum([\"socket_mode\", \"events_api\"]);\nconst BindingMethodSchema = z.enum([\"default_project\", \"bind_later\"]);\nconst OptionalPortSchema = z.number().int().min(1).max(65535).optional();\n\nconst SecretRefSchema = z.discriminatedUnion(\"kind\", [\n z\n .object({\n kind: z.literal(\"env\"),\n name: z.string().trim().min(1)\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"file\"),\n path: z.string().trim().min(1)\n })\n .strict(),\n z\n .object({\n kind: z.literal(\"keychain\"),\n service: z.string().trim().min(1),\n account: z.string().trim().min(1)\n })\n .strict()\n]);\n\nexport type SecretRef = z.infer<typeof SecretRefSchema>;\nexport type KeychainSecretRef = Extract<SecretRef, { kind: \"keychain\" }>;\n\ntype ExecFileSyncLike = (file: string, args: readonly string[], options: { encoding: \"utf8\" }) => string | Buffer;\n\nfunction requireResolvedSecret(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`Secret ${label} resolved to an empty value.`);\n }\n return trimmed;\n}\n\nexport function readKeychainSecret(ref: KeychainSecretRef, execFileSyncImpl: ExecFileSyncLike = execFileSync): string {\n let value: string | Buffer;\n try {\n value = execFileSyncImpl(\n \"/usr/bin/security\",\n [\"find-generic-password\", \"-w\", \"-s\", ref.service, \"-a\", ref.account],\n { encoding: \"utf8\" }\n );\n } catch (error) {\n const detail = error instanceof Error && error.message ? ` ${error.message}` : \"\";\n throw new Error(\n `Secret keychain ref ${ref.service}/${ref.account} could not be resolved via macOS Keychain (/usr/bin/security). Keychain SecretRefs are only supported on macOS.${detail}`\n );\n }\n return requireResolvedSecret(String(value), `keychain ref ${ref.service}/${ref.account}`);\n}\n\nfunction resolveSecretRef(ref: SecretRef): string {\n if (ref.kind === \"env\") {\n const value = process.env[ref.name];\n if (!value) {\n throw new Error(`Secret env ref ${ref.name} is not set.`);\n }\n return requireResolvedSecret(value, `env ref ${ref.name}`);\n }\n if (ref.kind === \"file\") {\n let value: string;\n try {\n value = readFileSync(ref.path, \"utf8\");\n } catch {\n throw new Error(`Secret file ref ${ref.path} could not be resolved.`);\n }\n return requireResolvedSecret(value, `file ref ${ref.path}`);\n }\n return readKeychainSecret(ref);\n}\n\nconst SecretStringSchema = z.union([z.string().min(1), SecretRefSchema]).transform((value) => {\n return typeof value === \"string\" ? value : resolveSecretRef(value);\n});\n\nconst RuntimeConfigSchema = z.discriminatedUnion(\"mode\", [\n z\n .object({\n mode: z.literal(\"local\")\n })\n .strict(),\n z\n .object({\n mode: z.literal(\"relay\"),\n relayUrl: z.string().url(),\n relayProvider: z.string().min(1).optional()\n })\n .strict()\n]);\n\nconst RepositoryBindingSchema = z\n .object({\n provider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n checkoutPath: z.string().min(1),\n defaultExecutor: ExecutorIdSchema,\n baseBranch: z.string().min(1),\n pushRemote: z.string().min(1),\n worktreeRoot: z.string().min(1),\n keepWorktree: KeepWorktreeSchema\n })\n .strict();\n\nconst ChannelBindingSchema = z\n .object({\n provider: z.string().min(1),\n accountId: z.string().min(1),\n conversationId: z.string().min(1),\n repoProvider: z.string().min(1),\n owner: z.string().min(1),\n repo: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional()\n })\n .strict();\n\nconst ClaudeCodeSchema = z\n .object({\n command: z.string().min(1).optional(),\n model: z.string().min(1).optional(),\n permissionMode: z.enum([\"acceptEdits\", \"auto\", \"bypassPermissions\", \"default\", \"plan\"]).optional(),\n dangerouslySkipPermissions: z.boolean().optional()\n })\n .strict();\n\nconst HermesSchema = z\n .object({\n command: z.string().trim().min(1).optional(),\n profile: z.string().trim().min(1).optional(),\n profileTemplate: z.string().trim().min(1).optional()\n })\n .strict();\n\nconst AgentSessionProfileSchema = z\n .object({\n profile: z.string().trim().min(1).optional(),\n profileTemplate: z.string().trim().min(1).optional()\n })\n .strict();\n\nconst SecuritySchema = z\n .object({\n mode: z.enum([\"enforce\", \"audit\", \"off\"]).optional(),\n allowedWorkspaceRoot: z.string().min(1).optional(),\n allowUnsafePrompts: z.boolean().optional(),\n extraSafeEnv: z.array(z.string().min(1)).optional()\n })\n .strict();\n\nconst DaemonConfigSchema = z\n .object({\n runnerId: z.string().min(1),\n dispatcherUrl: z.string().url(),\n repositories: z.array(RepositoryBindingSchema).min(1),\n channelBindings: z.array(ChannelBindingSchema).optional(),\n claudeCode: ClaudeCodeSchema.optional(),\n hermes: HermesSchema.optional(),\n agentSessionProfile: AgentSessionProfileSchema.optional(),\n security: SecuritySchema.optional(),\n githubToken: SecretStringSchema.optional(),\n githubApplyToken: SecretStringSchema.nullable().optional(),\n preparePullRequestBranch: z.boolean().optional(),\n allowAutoCreatePullRequest: z.boolean().optional(),\n runnerToken: SecretStringSchema.optional(),\n runnerTokens: z.array(SecretStringSchema).optional(),\n revokedRunnerTokenFingerprints: z.array(z.string().trim().min(1)).optional(),\n pairingToken: SecretStringSchema,\n pollIntervalMs: PositiveIntegerSchema,\n heartbeatIntervalMs: PositiveIntegerSchema,\n runTimeoutMs: PositiveIntegerSchema.optional()\n })\n .strict();\n\nconst LarkPlatformSchema = z\n .object({\n appId: z.string().min(1),\n appSecret: SecretStringSchema,\n domain: z.enum([\"lark\", \"feishu\"]),\n botOpenId: z.string().min(1).optional(),\n defaultProjectBinding: z.boolean().optional()\n })\n .strict();\n\nconst SlackPlatformSchema = z\n .object({\n mode: SlackModeSchema.optional(),\n appToken: SecretStringSchema.optional(),\n signingSecret: SecretStringSchema.optional(),\n botToken: SecretStringSchema,\n teamId: z.string().min(1),\n channelId: z.string().min(1),\n appId: z.string().min(1).optional(),\n defaultProjectBinding: z.boolean().optional(),\n port: OptionalPortSchema\n })\n .strict()\n .superRefine((value, context) => {\n const mode = value.mode ?? \"events_api\";\n if (mode === \"socket_mode\" && !value.appToken) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"appToken\"],\n message: \"Slack Socket Mode requires appToken.\"\n });\n }\n if (mode === \"events_api\" && !value.signingSecret) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"signingSecret\"],\n message: \"Slack Events API requires signingSecret.\"\n });\n }\n });\n\nconst GitHubPlatformSchema = z\n .object({\n webhookSecret: SecretStringSchema,\n owner: z.string().min(1),\n repo: z.string().min(1),\n webhookPath: z.string().min(1).optional(),\n port: OptionalPortSchema\n })\n .strict();\n\nconst PreferencesSchema = z\n .object({\n language: CliLanguageSchema.optional(),\n lastSetup: z\n .object({\n platforms: z.array(PlatformSchema).optional(),\n executor: ExecutorIdSchema.optional(),\n projectPath: z.string().min(1).optional(),\n larkSetupMethod: LarkSetupMethodSchema.optional(),\n larkDomain: z.enum([\"lark\", \"feishu\"]).optional(),\n bindingMethod: BindingMethodSchema.optional(),\n slackMode: SlackModeSchema.optional(),\n slackTeamId: z.string().min(1).optional(),\n slackChannelId: z.string().min(1).optional(),\n slackPort: OptionalPortSchema,\n githubOwner: z.string().min(1).optional(),\n githubRepo: z.string().min(1).optional(),\n githubPort: OptionalPortSchema,\n githubAutoCreatePullRequest: z.boolean().optional()\n })\n .strict()\n .optional()\n })\n .strict();\n\nexport const OpenTagCliConfigSchema = z\n .object({\n schemaVersion: z.literal(1),\n state: z\n .object({\n directory: z.string().min(1),\n databasePath: z.string().min(1),\n worktreeRoot: z.string().min(1)\n })\n .strict(),\n runtime: RuntimeConfigSchema.optional(),\n preferences: PreferencesSchema.optional(),\n daemon: DaemonConfigSchema,\n platforms: z\n .object({\n lark: LarkPlatformSchema.optional(),\n slack: SlackPlatformSchema.optional(),\n github: GitHubPlatformSchema.optional()\n })\n .strict()\n })\n .strict();\n\nexport type OpenTagCliConfig = Omit<z.infer<typeof OpenTagCliConfigSchema>, \"daemon\"> & {\n daemon: OpenTagDaemonConfig;\n};\n\nexport type OpenTagCliPreferences = NonNullable<OpenTagCliConfig[\"preferences\"]>;\nexport type OpenTagCliLastSetup = NonNullable<OpenTagCliPreferences[\"lastSetup\"]>;\nexport type OpenTagCliLanguage = CliLanguage;\nexport type OpenTagCliPlatform = PlatformId;\nexport type OpenTagCliExecutor = string;\nexport type OpenTagRuntimeMode = NonNullable<OpenTagCliConfig[\"runtime\"]>[\"mode\"];\n\nexport type PathEnvironment = Partial<\n Record<\"OPENTAG_CONFIG_PATH\" | \"OPENTAG_CONFIG_HOME\" | \"OPENTAG_STATE_DIR\" | \"XDG_CONFIG_HOME\" | \"XDG_STATE_HOME\", string>\n>;\n\nfunction configHome(env: PathEnvironment, home = homedir()): string {\n if (env.OPENTAG_CONFIG_HOME) return resolve(env.OPENTAG_CONFIG_HOME);\n if (env.XDG_CONFIG_HOME) return resolve(env.XDG_CONFIG_HOME, \"opentag\");\n return join(home, \".config\", \"opentag\");\n}\n\nexport function defaultConfigPath(env: PathEnvironment = process.env, home = homedir()): string {\n if (env.OPENTAG_CONFIG_PATH) return resolve(env.OPENTAG_CONFIG_PATH);\n return join(configHome(env, home), \"config.json\");\n}\n\nexport function defaultStateDirectory(env: PathEnvironment = process.env, home = homedir()): string {\n if (env.OPENTAG_STATE_DIR) return resolve(env.OPENTAG_STATE_DIR);\n if (env.XDG_STATE_HOME) return resolve(env.XDG_STATE_HOME, \"opentag\");\n return join(home, \".local\", \"state\", \"opentag\");\n}\n\nfunction formatPath(path: Array<string | number>): string {\n return path.length ? path.join(\".\") : \"config\";\n}\n\nexport function formatCliConfigError(error: unknown): string {\n if (error instanceof z.ZodError) {\n return error.issues.map((issue) => `${formatPath(issue.path)}: ${issue.message}`).join(\"\\n\");\n }\n return formatDaemonConfigError(error);\n}\n\nexport function parseCliConfig(value: unknown): OpenTagCliConfig {\n const parsed = OpenTagCliConfigSchema.parse(value);\n return {\n ...parsed,\n daemon: parseDaemonConfig(parsed.daemon)\n };\n}\n\nexport function runnerDispatcherToken(config: Pick<OpenTagDaemonConfig, \"runnerToken\" | \"pairingToken\">): string | undefined {\n return config.runnerToken ?? config.pairingToken;\n}\n\nexport function runtimeModeFromConfig(config: OpenTagCliConfig): OpenTagRuntimeMode {\n return config.runtime?.mode ?? \"local\";\n}\n\nexport function relayUrlFromConfig(config: OpenTagCliConfig): string | undefined {\n return config.runtime?.mode === \"relay\" ? config.runtime.relayUrl : undefined;\n}\n\nexport function readCliConfig(path = defaultConfigPath()): OpenTagCliConfig {\n assertPrivateConfigFile(path);\n return parseCliConfig(JSON.parse(readFileSync(path, \"utf8\")));\n}\n\nexport function ensurePrivateDirectory(path: string): void {\n const createdPath = mkdirSync(path, { recursive: true, mode: 0o700 });\n if (createdPath) {\n chmodSync(path, 0o700);\n }\n}\n\nexport function writeCliConfigAtomic(path: string, config: OpenTagCliConfig): void {\n ensurePrivateDirectory(dirname(path));\n const tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeFileSync(tempPath, `${JSON.stringify(config, null, 2)}\\n`, { mode: 0o600, flag: \"wx\" });\n chmodSync(tempPath, 0o600);\n renameSync(tempPath, path);\n chmodSync(path, 0o600);\n } catch (error) {\n rmSync(tempPath, { force: true });\n throw error;\n }\n}\n\nexport function assertPrivateConfigFile(path: string): void {\n if (process.platform === \"win32\") return;\n const mode = statSync(path).mode & 0o777;\n if ((mode & 0o077) !== 0) {\n throw new Error(`OpenTag config contains secrets and must not be readable by group or others: ${path}\\nFix it with: chmod 600 ${path}`);\n }\n}\n\nfunction redactSecretValue(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (value && typeof value === \"object\" && !Array.isArray(value)) {\n const ref = value as { account?: unknown; kind?: unknown; name?: unknown; path?: unknown; service?: unknown };\n if (ref.kind === \"env\" && typeof ref.name === \"string\") {\n return `[env:${ref.name}]`;\n }\n if (ref.kind === \"file\" && typeof ref.path === \"string\") {\n return `[file:${ref.path}]`;\n }\n if (ref.kind === \"keychain\" && typeof ref.service === \"string\" && typeof ref.account === \"string\") {\n return `[keychain:${ref.service}/${ref.account}]`;\n }\n }\n return \"[REDACTED]\";\n}\n\nfunction redactValue(key: string, value: unknown): unknown {\n if (key === \"runnerTokens\" && Array.isArray(value)) {\n return value.map((entry) => redactSecretValue(entry));\n }\n if (\n [\n \"appSecret\",\n \"appToken\",\n \"botToken\",\n \"githubToken\",\n \"githubApplyToken\",\n \"runnerToken\",\n \"runnerTokens\",\n \"pairingToken\",\n \"signingSecret\",\n \"webhookSecret\"\n ].includes(key)\n ) {\n return redactSecretValue(value);\n }\n if (Array.isArray(value)) {\n return value.map((entry) => redactValue(\"\", entry));\n }\n if (value && typeof value === \"object\") {\n return Object.fromEntries(Object.entries(value).map(([entryKey, entryValue]) => [entryKey, redactValue(entryKey, entryValue)]));\n }\n return value;\n}\n\nexport function redactedCliConfig(config: OpenTagCliConfig): unknown {\n return redactValue(\"\", config);\n}\n\nexport function redactedCliConfigValue(value: unknown): unknown {\n return redactValue(\"\", value);\n}\n\nexport function readRedactedCliConfig(path = defaultConfigPath()): unknown {\n assertPrivateConfigFile(path);\n return redactedCliConfigValue(JSON.parse(readFileSync(path, \"utf8\")));\n}\n","import { OPEN_TAG_PLATFORM_CAPABILITIES, type PlatformCapabilityDescriptor } from \"@opentag/core\";\nimport { EXECUTOR_CATALOG, type ExecutorId, isExecutorId } from \"./executors.js\";\nimport { PLATFORM_CATALOG, type PlatformId } from \"./platforms.js\";\n\nexport type ExecutorCapabilityDescriptor = {\n id: string;\n invocation: \"spawn\" | \"hook_ingest\" | \"hybrid\";\n supportsProfile: boolean;\n supportsStreaming: boolean;\n supportsCancel: boolean;\n supportsHookCompletion: boolean;\n progressEvents: \"none\" | \"audit\" | \"human\";\n approvalMode: \"none\" | \"opentag_policy\" | \"executor_managed\";\n contextAccess: Array<\"context_packet\" | \"context_pointers\" | \"workspace\">;\n promptAssembly: \"opentag\" | \"executor_adapter\" | \"external_runtime\";\n writeAccess: \"none\" | \"workspace\" | \"external\";\n conversationAccess: \"none\" | \"request\" | \"thread_transcript\";\n promptMutation: \"none\" | \"append\" | \"replace\";\n rawContextAccess: boolean;\n writeActionAccess: \"none\" | \"propose\" | \"execute\";\n workspaceIsolation: \"none\" | \"branch\" | \"worktree\" | \"external\";\n requiredSecrets: string[];\n completionSignals: Array<\"process_exit\" | \"hook_event\" | \"stream_event\">;\n};\n\nexport const PLATFORM_CAPABILITIES: Record<PlatformId, PlatformCapabilityDescriptor> = OPEN_TAG_PLATFORM_CAPABILITIES;\n\nexport const EXECUTOR_CAPABILITIES: Record<ExecutorId, ExecutorCapabilityDescriptor> = {\n codex: {\n id: \"codex\",\n invocation: \"spawn\",\n supportsProfile: false,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\", \"workspace\"],\n promptAssembly: \"executor_adapter\",\n writeAccess: \"workspace\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"worktree\",\n requiredSecrets: [\"openai_api_key\"],\n completionSignals: [\"process_exit\"]\n },\n \"claude-code\": {\n id: \"claude-code\",\n invocation: \"spawn\",\n supportsProfile: false,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\", \"workspace\"],\n promptAssembly: \"executor_adapter\",\n writeAccess: \"workspace\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"branch\",\n requiredSecrets: [\"anthropic_api_key\"],\n completionSignals: [\"process_exit\"]\n },\n hermes: {\n id: \"hermes\",\n invocation: \"spawn\",\n supportsProfile: true,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\", \"workspace\"],\n promptAssembly: \"executor_adapter\",\n writeAccess: \"workspace\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"branch\",\n requiredSecrets: [],\n completionSignals: [\"process_exit\"]\n },\n echo: {\n id: \"echo\",\n invocation: \"spawn\",\n supportsProfile: false,\n supportsStreaming: false,\n supportsCancel: false,\n supportsHookCompletion: false,\n progressEvents: \"audit\",\n approvalMode: \"opentag_policy\",\n contextAccess: [\"context_packet\", \"context_pointers\"],\n promptAssembly: \"opentag\",\n writeAccess: \"none\",\n conversationAccess: \"request\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n workspaceIsolation: \"none\",\n requiredSecrets: [],\n completionSignals: [\"process_exit\"]\n }\n};\n\nfunction yesNo(value: boolean): \"yes\" | \"no\" {\n return value ? \"yes\" : \"no\";\n}\n\nexport function formatPlatformCapability(id: PlatformId): string {\n const descriptor = PLATFORM_CATALOG.find((platform) => platform.id === id);\n const capability = PLATFORM_CAPABILITIES[id];\n const label = descriptor?.label ?? id;\n return `${label}: events=${yesNo(capability.receivesEvents)}, replies=${yesNo(capability.repliesToSourceThread)}, status_updates=${yesNo(capability.supportsStatusUpdates)}, rich=${yesNo(capability.supportsRichPresentation)}, actions=${yesNo(capability.supportsActionReplies)}, explicit_addressing=${yesNo(capability.requiresExplicitAddressing)}, liveness=${capability.livenessStrategy}`;\n}\n\nexport function formatExecutorCapability(id: string): string {\n const capability = isExecutorId(id) ? EXECUTOR_CAPABILITIES[id] : undefined;\n const label = EXECUTOR_CATALOG.find((executor) => executor.id === id)?.label ?? id;\n if (!capability) {\n return `${label}: custom executor, capability details unknown`;\n }\n const secrets = capability.requiredSecrets.length ? capability.requiredSecrets.join(\",\") : \"none\";\n const completion = capability.completionSignals.length ? capability.completionSignals.join(\",\") : \"none\";\n const context = capability.contextAccess.length ? capability.contextAccess.join(\",\") : \"none\";\n return `${label}: invocation=${capability.invocation}, profile=${yesNo(capability.supportsProfile)}, streaming=${yesNo(capability.supportsStreaming)}, cancel=${yesNo(capability.supportsCancel)}, hook_completion=${yesNo(capability.supportsHookCompletion)}, progress=${capability.progressEvents}, approval=${capability.approvalMode}, context=${context}, prompt=${capability.promptAssembly}, write=${capability.writeAccess}, conversation=${capability.conversationAccess}, prompt_mutation=${capability.promptMutation}, raw_context=${yesNo(capability.rawContextAccess)}, write_actions=${capability.writeActionAccess}, isolation=${capability.workspaceIsolation}, secrets=${secrets}, completion=${completion}`;\n}\n\nexport function formatConfiguredCapabilities(input: { platforms: PlatformId[]; executors: string[] }): string[] {\n const platformLines = input.platforms.map((id) => ` platform ${formatPlatformCapability(id)}`);\n const uniqueExecutors = [...new Set(input.executors)];\n const executorLines = uniqueExecutors.map((id) => ` executor ${formatExecutorCapability(id)}`);\n return [\"Capabilities:\", ...(platformLines.length ? platformLines : [\" platform none\"]), ...(executorLines.length ? executorLines : [\" executor none\"])];\n}\n","import { existsSync } from \"node:fs\";\nimport { delimiter, extname, join } from \"node:path\";\n\nexport type ExecutorId = \"echo\" | \"codex\" | \"claude-code\" | \"hermes\";\n\nexport type ExecutorDescriptor = {\n id: ExecutorId;\n label: string;\n command?: string;\n commandEnv?: string;\n alwaysAvailable?: boolean;\n devOnly?: boolean;\n};\n\nexport type ExecutorDetection = {\n id: ExecutorId;\n available: boolean;\n reason: string;\n};\n\nexport const EXECUTOR_CATALOG: ExecutorDescriptor[] = [\n {\n id: \"codex\",\n label: \"Codex\",\n command: \"codex\"\n },\n {\n id: \"claude-code\",\n label: \"Claude Code\",\n command: \"claude\",\n commandEnv: \"OPENTAG_CLAUDE_COMMAND\"\n },\n {\n id: \"hermes\",\n label: \"Hermes\",\n command: \"hermes\",\n commandEnv: \"OPENTAG_HERMES_COMMAND\"\n },\n {\n id: \"echo\",\n label: \"Echo\",\n alwaysAvailable: true,\n devOnly: true\n }\n];\n\nfunction pathExistsOnPath(command: string, env: NodeJS.ProcessEnv = process.env): boolean {\n if (command.includes(\"/\") || command.includes(\"\\\\\")) return existsSync(command);\n const paths = env.PATH?.split(delimiter).filter(Boolean) ?? [];\n const candidates =\n process.platform === \"win32\" && !extname(command)\n ? [command, ...(env.PATHEXT?.split(delimiter).filter(Boolean) ?? [\".COM\", \".EXE\", \".BAT\", \".CMD\"]).map((extension) => `${command}${extension.toLowerCase()}`)]\n : [command];\n return paths.some((directory) => candidates.some((candidate) => existsSync(join(directory, candidate))));\n}\n\nfunction executorCommand(executor: ExecutorDescriptor, env: NodeJS.ProcessEnv): string | undefined {\n return executor.commandEnv ? env[executor.commandEnv] || executor.command : executor.command;\n}\n\nexport function isExecutorId(value: string): value is ExecutorId {\n return value === \"echo\" || value === \"codex\" || value === \"claude-code\" || value === \"hermes\";\n}\n\nexport function detectExecutors(env: NodeJS.ProcessEnv = process.env): ExecutorDetection[] {\n return EXECUTOR_CATALOG.map((executor) => {\n if (executor.alwaysAvailable) {\n return {\n id: executor.id,\n available: true,\n reason: executor.devOnly ? \"Dev/test only; does not run a real coding agent\" : \"Built in\"\n };\n }\n const command = executorCommand(executor, env);\n const available = command ? pathExistsOnPath(command, env) : false;\n return {\n id: executor.id,\n available,\n reason: available ? `Found ${command} on PATH` : `Could not find ${command} on PATH`\n };\n });\n}\n\nexport function defaultExecutorId(input: {\n previous?: ExecutorId;\n detections?: ExecutorDetection[];\n} = {}): ExecutorId {\n if (input.previous) {\n return input.previous;\n }\n const detections = input.detections ?? detectExecutors();\n if (detections.find((executor) => executor.id === \"codex\")?.available) {\n return \"codex\";\n }\n if (detections.find((executor) => executor.id === \"claude-code\")?.available) {\n return \"claude-code\";\n }\n if (detections.find((executor) => executor.id === \"hermes\")?.available) {\n return \"hermes\";\n }\n return \"echo\";\n}\n\nexport function executorLabel(id: string): string {\n return EXECUTOR_CATALOG.find((executor) => executor.id === id)?.label ?? id;\n}\n\nfunction formatExecutorStatus(executor: ExecutorDescriptor, available: boolean): string {\n if (executor.devOnly) {\n return \"dev/test only\";\n }\n return available ? \"available\" : \"not found\";\n}\n\nexport function formatExecutors(env: NodeJS.ProcessEnv = process.env): string {\n const detections = detectExecutors(env);\n return [\n \"Coding agents:\",\n ...EXECUTOR_CATALOG.map((executor) => {\n const detection = detections.find((entry) => entry.id === executor.id);\n const status = formatExecutorStatus(executor, detection?.available ?? false);\n return ` ${executor.label}: ${status}${detection ? ` (${detection.reason})` : \"\"}`;\n })\n ].join(\"\\n\");\n}\n","import type { CliLanguage } from \"./languages.js\";\n\nexport type PlatformId = \"lark\" | \"slack\" | \"github\" | \"gitlab\" | \"telegram\";\n\nexport type PlatformStatus = \"setup_ready\" | \"setup_pending\" | \"experimental_setup_pending\";\n\nexport type PlatformDescriptor = {\n id: PlatformId;\n label: string;\n status: PlatformStatus;\n startable: boolean;\n};\n\nconst SETUP_GUIDE_BASE_URL = \"https://github.com/amplifthq/opentag/blob/main/docs/platforms\";\n\nconst PLATFORM_SETUP_GUIDE_FILES: Partial<Record<PlatformId, Record<CliLanguage, string>>> = {\n lark: {\n en: \"lark.en.md\",\n \"zh-CN\": \"lark.zh-CN.md\"\n },\n slack: {\n en: \"slack.en.md\",\n \"zh-CN\": \"slack.zh-CN.md\"\n },\n github: {\n en: \"github.en.md\",\n \"zh-CN\": \"github.zh-CN.md\"\n }\n // gitlab deliberately has no setup guide entry until CLI setup wiring lands;\n // the MVP only exposes gitlab through the adapter package, not via `opentag setup`.\n};\n\nexport const PLATFORM_CATALOG: PlatformDescriptor[] = [\n {\n id: \"lark\",\n label: \"Lark / Feishu\",\n status: \"setup_ready\",\n startable: true\n },\n {\n id: \"slack\",\n label: \"Slack\",\n status: \"setup_ready\",\n startable: true\n },\n {\n id: \"github\",\n label: \"GitHub\",\n status: \"setup_ready\",\n startable: true\n },\n {\n id: \"gitlab\",\n label: \"GitLab\",\n status: \"experimental_setup_pending\",\n startable: false\n },\n {\n id: \"telegram\",\n label: \"Telegram\",\n status: \"experimental_setup_pending\",\n startable: false\n }\n];\n\nexport function parsePlatformId(value: string): PlatformId {\n if (value === \"lark\" || value === \"slack\" || value === \"github\" || value === \"gitlab\" || value === \"telegram\") {\n return value;\n }\n throw new Error(\"Platform must be lark, slack, github, gitlab, or telegram.\");\n}\n\nexport function platformById(id: PlatformId): PlatformDescriptor {\n const descriptor = PLATFORM_CATALOG.find((platform) => platform.id === id);\n if (!descriptor) {\n throw new Error(`Unknown platform: ${id}`);\n }\n return descriptor;\n}\n\nexport function platformSetupGuideUrl(id: PlatformId, language: CliLanguage): string | undefined {\n const file = PLATFORM_SETUP_GUIDE_FILES[id]?.[language];\n return file ? `${SETUP_GUIDE_BASE_URL}/${file}` : undefined;\n}\n\nexport function formatPlatformStatus(status: PlatformStatus): string {\n switch (status) {\n case \"setup_ready\":\n return \"Setup wizard ready\";\n case \"setup_pending\":\n return \"Adapter exists; CLI setup pending\";\n case \"experimental_setup_pending\":\n return \"Experimental adapter; CLI setup pending\";\n }\n}\n\nexport function formatPlatforms(): string {\n return [\n \"CLI setup support:\",\n ...PLATFORM_CATALOG.map((platform) => {\n return ` ${platform.label}: ${formatPlatformStatus(platform.status)}`;\n })\n ].join(\"\\n\");\n}\n","import { formatExecutorCapability } from \"../catalogs/capabilities.js\";\nimport { EXECUTOR_CATALOG, formatExecutors } from \"../catalogs/executors.js\";\n\nexport type ExecutorsCommandOptions = {\n env?: NodeJS.ProcessEnv;\n logger?: Pick<typeof console, \"log\">;\n};\n\nexport function formatExecutorCapabilityCatalog(): string {\n return [\"Executor capabilities:\", ...EXECUTOR_CATALOG.map((executor) => ` ${formatExecutorCapability(executor.id)}`)].join(\"\\n\");\n}\n\nexport function formatExecutorsCommandOutput(env: NodeJS.ProcessEnv = process.env): string {\n return [formatExecutors(env), formatExecutorCapabilityCatalog()].join(\"\\n\\n\");\n}\n\nexport function runExecutorsCommand(options: ExecutorsCommandOptions = {}): void {\n const logger = options.logger ?? console;\n logger.log(formatExecutorsCommandOutput(options.env ?? process.env));\n}\n","import { formatPlatformCapability } from \"../catalogs/capabilities.js\";\nimport { formatPlatforms, PLATFORM_CATALOG } from \"../catalogs/platforms.js\";\n\nexport type PlatformsCommandOptions = {\n logger?: Pick<typeof console, \"log\">;\n};\n\nexport function formatPlatformCapabilityCatalog(): string {\n return [\"Platform capabilities:\", ...PLATFORM_CATALOG.map((platform) => ` ${formatPlatformCapability(platform.id)}`)].join(\"\\n\");\n}\n\nexport function formatPlatformsCommandOutput(): string {\n return [formatPlatforms(), formatPlatformCapabilityCatalog()].join(\"\\n\\n\");\n}\n\nexport function runPlatformsCommand(options: PlatformsCommandOptions = {}): void {\n const logger = options.logger ?? console;\n logger.log(formatPlatformsCommandOutput());\n}\n","import { createOpenTagClient } from \"@opentag/client\";\nimport type { OpenTagRun } from \"@opentag/core\";\nimport { defaultConfigPath, readCliConfig, runnerDispatcherToken, type OpenTagCliConfig } from \"./config.js\";\nimport { parseChannelRef } from \"./status.js\";\n\nexport type CancelCommandOptions = {\n config?: string;\n run?: string;\n channel?: string;\n reason?: string;\n requestedBy?: string;\n};\n\nexport type CancelCommandDependencies = {\n fetchImpl?: typeof fetch;\n logger?: Pick<typeof console, \"log\">;\n};\n\nexport type CancelSummary = {\n configPath: string;\n dispatcherUrl: string;\n scope: string;\n run: OpenTagRun;\n};\n\nfunction nonEmpty(value: string | undefined, label: string): string {\n const trimmed = value?.trim();\n if (!trimmed) throw new Error(`${label} is required.`);\n return trimmed;\n}\n\nfunction cancellationReason(options: CancelCommandOptions): string {\n return options.reason?.trim() || \"Cancellation requested from opentag CLI.\";\n}\n\nfunction requestedBy(options: CancelCommandOptions): string {\n return options.requestedBy?.trim() || \"cli:opentag\";\n}\n\nfunction validateCancelTarget(options: CancelCommandOptions): void {\n if (options.run && options.channel) {\n throw new Error(\"Use either --run or --channel, not both.\");\n }\n if (!options.run && !options.channel) {\n throw new Error(\"Provide --run <run_id> or --channel provider:account/conversation.\");\n }\n}\n\nexport async function cancelFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n options: CancelCommandOptions;\n fetchImpl?: typeof fetch;\n}): Promise<CancelSummary> {\n validateCancelTarget(input.options);\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const reason = cancellationReason(input.options);\n const requester = requestedBy(input.options);\n\n if (input.options.channel) {\n const channel = parseChannelRef(input.options.channel);\n const result = await client.cancelActiveChannelRun({\n ...channel,\n reason,\n requestedBy: requester\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n scope: `${channel.provider}:${channel.accountId}/${channel.conversationId}`,\n run: result.run\n };\n }\n\n const runId = nonEmpty(input.options.run, \"--run\");\n const result = await client.cancelRun({\n runId,\n reason,\n requestedBy: requester\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n scope: runId,\n run: result.run\n };\n}\n\nexport function formatCancelSummary(summary: CancelSummary): string {\n const conclusion = summary.run.result?.conclusion;\n return [\n \"Cancellation requested.\",\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n `Scope: ${summary.scope}`,\n `Run: ${summary.run.id}`,\n `Status: ${summary.run.status}${conclusion ? ` (${conclusion})` : \"\"}`,\n \"Stop is not treated as successful completion.\",\n `Inspect audit detail with \\`opentag status --run ${summary.run.id}\\`.`\n ].join(\"\\n\");\n}\n\nexport async function runCancelCommand(options: CancelCommandOptions, dependencies: CancelCommandDependencies = {}): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n const logger = dependencies.logger ?? console;\n logger.log(formatCancelSummary(await cancelFromConfig({ config, configPath, options, ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}) })));\n}\n","import { createOpenTagClient, type ChannelRuntimeStatus, type ControlPlaneAlert, type RunMetrics } from \"@opentag/client\";\nimport {\n createSourceThreadStatusPresentation,\n formatProjectTargetRef,\n platformCapabilityForProvider,\n projectTargetRefFromEvent,\n renderOpenTagPresentationPlainText,\n type OpenTagEvent,\n type OpenTagRun,\n type PlatformLivenessStrategy\n} from \"@opentag/core\";\nimport { DEFAULT_AGENT_SESSION_PROFILE_TEMPLATE } from \"@opentag/local-runtime\";\nimport { formatConfiguredCapabilities } from \"./catalogs/capabilities.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\nimport {\n defaultConfigPath,\n readCliConfig,\n readRedactedCliConfig,\n relayUrlFromConfig,\n redactedCliConfig,\n runnerDispatcherToken,\n runtimeModeFromConfig,\n type OpenTagCliConfig\n} from \"./config.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { formatConfiguredProjectTargetSummary } from \"./project-target-summary.js\";\nimport { formatRelaySecurityChecks, relaySecurityChecksFromConfig } from \"./relay-security.js\";\nimport { formatSecretReadiness } from \"./secret-readiness.js\";\n\nexport type StatusCommandOptions = {\n config?: string;\n run?: string;\n channel?: string;\n};\n\nexport type StatusSummary = {\n configPath: string;\n dispatcher: \"online\" | \"offline\";\n dispatcherUrl: string;\n runtimeMode: \"local\" | \"relay\";\n relayUrl?: string;\n relaySecurity: string[];\n controlPlaneAlerts: ControlPlaneAlert[];\n controlPlaneAlertsError?: string;\n runnerId: string;\n runTimeoutPolicy: string;\n secrets: string[];\n repositories: string[];\n platforms: string[];\n agentSessionProfile: string[];\n capabilities: string[];\n};\n\ntype RunAuditEvent = {\n type?: unknown;\n visibility?: unknown;\n importance?: unknown;\n message?: unknown;\n payload?: unknown;\n createdAt?: unknown;\n};\n\nexport type RunStatusSummary = {\n configPath: string;\n dispatcherUrl: string;\n run: OpenTagRun;\n event: OpenTagEvent;\n metrics: RunMetrics;\n runTimeoutPolicy?: string;\n events: RunAuditEvent[];\n};\n\nexport type ChannelStatusSummary = {\n configPath: string;\n dispatcherUrl: string;\n provider: string;\n accountId: string;\n conversationId: string;\n runTimeoutPolicy: string;\n status: ChannelRuntimeStatus;\n};\n\nexport function parseChannelRef(ref: string): { provider: string; accountId: string; conversationId: string } {\n const trimmed = ref.trim();\n const colon = trimmed.indexOf(\":\");\n const slash = trimmed.indexOf(\"/\", colon + 1);\n if (colon <= 0 || slash <= colon + 1 || slash === trimmed.length - 1) {\n throw new Error(\"--channel must be formatted as provider:account_id/conversation_id.\");\n }\n return {\n provider: trimmed.slice(0, colon),\n accountId: trimmed.slice(colon + 1, slash),\n conversationId: trimmed.slice(slash + 1)\n };\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms % 60_000 === 0) return `${ms / 60_000} minute(s)`;\n if (ms % 1_000 === 0) return `${ms / 1_000} second(s)`;\n return `${ms}ms`;\n}\n\nfunction formatRunTimeoutPolicy(timeoutMs: number | undefined): string {\n return timeoutMs ? `hard timeout after ${formatDurationMs(timeoutMs)}` : \"disabled\";\n}\n\nfunction formatAgentSessionProfile(config: OpenTagCliConfig[\"daemon\"][\"agentSessionProfile\"]): string[] {\n const lines = [\"Agent Session Profile:\"];\n if (config?.profile) {\n lines.push(` fixed profile: ${config.profile}`);\n if (config.profileTemplate) {\n lines.push(` template ignored while fixed profile is set: ${config.profileTemplate}`);\n }\n } else if (config?.profileTemplate) {\n lines.push(` template: ${config.profileTemplate}`);\n } else {\n lines.push(` default template: ${DEFAULT_AGENT_SESSION_PROFILE_TEMPLATE}`);\n }\n lines.push(\" scope: derived from source provider, source container, Project Target, and actor; session identity excludes checkout paths and secrets.\");\n return lines;\n}\n\nexport async function getStatusSummary(input: {\n configPath?: string;\n fetchImpl?: typeof fetch;\n} = {}): Promise<StatusSummary> {\n const configPath = input.configPath ?? defaultConfigPath();\n const secretConfig = readRedactedCliConfig(configPath);\n const config = readCliConfig(configPath);\n return statusFromConfig({ config, configPath, secretConfig, ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}) });\n}\n\nexport async function statusFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n fetchImpl?: typeof fetch;\n healthTimeoutMs?: number;\n secretConfig?: unknown;\n}): Promise<StatusSummary> {\n const relayUrl = relayUrlFromConfig(input.config);\n const dispatcher = (await probeDispatcherHealth({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),\n timeoutMs: input.healthTimeoutMs ?? 1_000\n }))\n ? \"online\"\n : \"offline\";\n const controlPlaneAlertState = await loadControlPlaneAlertState({\n config: input.config,\n dispatcher,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n\n const platforms = Object.entries(input.config.platforms)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key);\n const executors = input.config.daemon.repositories.map((repository) => repository.defaultExecutor);\n return {\n configPath: input.configPath,\n dispatcher,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n runtimeMode: runtimeModeFromConfig(input.config),\n ...(relayUrl ? { relayUrl } : {}),\n relaySecurity: formatRelaySecurityChecks(relaySecurityChecksFromConfig(input.config)),\n controlPlaneAlerts: controlPlaneAlertState.alerts,\n ...(controlPlaneAlertState.error ? { controlPlaneAlertsError: controlPlaneAlertState.error } : {}),\n runnerId: input.config.daemon.runnerId,\n runTimeoutPolicy: formatRunTimeoutPolicy(input.config.daemon.runTimeoutMs),\n secrets: formatSecretReadiness(input.secretConfig ?? redactedCliConfig(input.config)),\n repositories: input.config.daemon.repositories.map((repository) => {\n return formatConfiguredProjectTargetSummary(repository);\n }),\n platforms,\n agentSessionProfile: formatAgentSessionProfile(input.config.daemon.agentSessionProfile),\n capabilities: formatConfiguredCapabilities({\n platforms: platforms as PlatformId[],\n executors\n })\n };\n}\n\nasync function loadControlPlaneAlertState(input: {\n config: OpenTagCliConfig;\n dispatcher: \"online\" | \"offline\";\n fetchImpl?: typeof fetch;\n}): Promise<{ alerts: ControlPlaneAlert[]; error?: string }> {\n if (input.dispatcher !== \"online\") return { alerts: [] };\n try {\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const result = await client.listControlPlaneAlerts({ limit: 5 });\n return { alerts: Array.isArray(result.alerts) ? result.alerts : [] };\n } catch (error) {\n return { alerts: [], error: error instanceof Error ? error.message : String(error) };\n }\n}\n\nexport async function getRunStatusSummary(input: {\n runId: string;\n configPath?: string;\n fetchImpl?: typeof fetch;\n}): Promise<RunStatusSummary> {\n const configPath = input.configPath ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n return runStatusFromConfig({\n config,\n configPath,\n runId: input.runId,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n}\n\nexport async function getChannelStatusSummary(input: {\n channel: string;\n configPath?: string;\n fetchImpl?: typeof fetch;\n}): Promise<ChannelStatusSummary> {\n const configPath = input.configPath ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n return channelStatusFromConfig({\n config,\n configPath,\n channel: input.channel,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n}\n\nexport async function channelStatusFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n channel: string;\n fetchImpl?: typeof fetch;\n}): Promise<ChannelStatusSummary> {\n const channel = parseChannelRef(input.channel);\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n runTimeoutPolicy: formatRunTimeoutPolicy(input.config.daemon.runTimeoutMs),\n ...channel,\n status: await client.getChannelRuntimeStatus(channel)\n };\n}\n\nexport async function runStatusFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n runId: string;\n fetchImpl?: typeof fetch;\n}): Promise<RunStatusSummary> {\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const [claimed, events, metrics] = await Promise.all([\n client.getRun({ runId: input.runId }),\n client.listRunEvents({ runId: input.runId }),\n client.getRunMetrics({ runId: input.runId })\n ]);\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n run: claimed.run,\n event: claimed.event,\n metrics: metrics.metrics,\n runTimeoutPolicy: formatRunTimeoutPolicy(input.config.daemon.runTimeoutMs),\n events: events.events as RunAuditEvent[]\n };\n}\n\nexport function formatStatus(summary: StatusSummary): string {\n return [\n `Config: ${summary.configPath}`,\n `Runtime: ${summary.runtimeMode}`,\n ...(summary.relayUrl ? [`Relay: ${summary.relayUrl}`] : []),\n ...summary.relaySecurity,\n `Dispatcher: ${summary.dispatcher} (${summary.dispatcherUrl})`,\n ...formatControlPlaneAlerts(summary),\n `Runner: ${summary.runnerId}`,\n `Run Timeout: ${summary.runTimeoutPolicy}`,\n ...summary.secrets,\n ...summary.agentSessionProfile,\n `Platforms: ${summary.platforms.length ? summary.platforms.join(\", \") : \"none\"}`,\n ...summary.capabilities,\n \"Project Targets:\",\n ...(summary.repositories.length ? summary.repositories.map((repository) => ` ${repository}`) : [\" none\"])\n ].join(\"\\n\");\n}\n\nfunction formatControlPlaneAlerts(summary: StatusSummary): string[] {\n if (summary.dispatcher !== \"online\") {\n return [\"Control Plane Alerts:\", \" unavailable (dispatcher offline)\"];\n }\n if (summary.controlPlaneAlertsError) {\n return [\"Control Plane Alerts:\", ` WARN unavailable: ${summary.controlPlaneAlertsError}`];\n }\n if (summary.controlPlaneAlerts.length === 0) {\n return [\"Control Plane Alerts:\", \" none\"];\n }\n return [\n \"Control Plane Alerts:\",\n ...summary.controlPlaneAlerts.flatMap((alert) => [\n ` ${alert.severity.toUpperCase()} ${alert.type}: ${alert.subject ?? \"unknown\"} count=${alert.count} threshold=${alert.threshold} last=${alert.lastSeenAt} - ${alert.reason}`,\n ` Next: ${alert.nextAction}`\n ])\n ];\n}\n\nfunction displayValue(value: unknown, fallback = \"unknown\"): string {\n return typeof value === \"string\" && value.length > 0 ? value : fallback;\n}\n\nfunction formatRunEvent(event: RunAuditEvent): string {\n const createdAt = displayValue(event.createdAt);\n const visibility = displayValue(event.visibility);\n const importance = displayValue(event.importance);\n const message = typeof event.message === \"string\" && event.message.length > 0 ? ` - ${event.message}` : \"\";\n return ` ${createdAt} ${visibility}/${importance} ${displayValue(event.type)}${message}`;\n}\n\nfunction recordFromUnknown(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as Record<string, unknown>) : null;\n}\n\nfunction runTerminalSemantics(summary: RunStatusSummary): string[] {\n const terminalEvent = [...summary.events].reverse().find((event) => {\n if (summary.run.status === \"cancelled\") return event.type === \"run.cancel_requested\";\n return false;\n });\n const payload = recordFromUnknown(terminalEvent?.payload);\n const terminalReason = payload?.[\"terminalReason\"];\n const terminalSemantics = payload?.[\"terminalSemantics\"];\n if (typeof terminalReason !== \"string\" || terminalReason.length === 0) return [];\n return [\n `Terminal reason: ${terminalReason}`,\n ...(typeof terminalSemantics === \"string\" && terminalSemantics.length > 0 ? [`Terminal semantics: ${terminalSemantics}`] : [])\n ];\n}\n\nfunction runSpecificTimeoutPolicy(summary: RunStatusSummary): string | undefined {\n for (const event of [...summary.events].reverse()) {\n if (event.type !== \"run.running\") continue;\n const payload = recordFromUnknown(event.payload);\n const runTimeoutMs = payload?.[\"runTimeoutMs\"];\n if (typeof runTimeoutMs === \"number\" && Number.isInteger(runTimeoutMs) && runTimeoutMs > 0) {\n return formatRunTimeoutPolicy(runTimeoutMs);\n }\n }\n return summary.runTimeoutPolicy;\n}\n\nfunction stringFromRecord(record: Record<string, unknown> | null | undefined, keys: string[]): string | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (trimmed.length > 0) return trimmed;\n }\n return undefined;\n}\n\nfunction booleanFromRecord(record: Record<string, unknown> | null | undefined, keys: string[]): boolean | undefined {\n if (!record) return undefined;\n for (const key of keys) {\n const value = record[key];\n if (typeof value === \"boolean\") return value;\n }\n return undefined;\n}\n\nfunction runProvenancePayload(summary: RunStatusSummary): Record<string, unknown> | null {\n const created = summary.events.find((event) => event.type === \"run.created\");\n const createdProvenance = recordFromUnknown(recordFromUnknown(created?.payload)?.[\"provenance\"]);\n if (createdProvenance) return createdProvenance;\n\n for (const event of [...summary.events].reverse()) {\n const provenance = recordFromUnknown(recordFromUnknown(event.payload)?.[\"provenance\"]);\n if (provenance) return provenance;\n }\n return null;\n}\n\nfunction sourceDeliveryIdFromMetadata(metadata: Record<string, unknown> | null): string | undefined {\n return stringFromRecord(metadata, [\n \"sourceDeliveryId\",\n \"webhookDeliveryId\",\n \"deliveryId\",\n \"githubDeliveryId\",\n \"githubDeliveryGuid\",\n \"slackEventId\",\n \"larkEventId\"\n ]);\n}\n\nfunction signatureStateFromMetadata(metadata: Record<string, unknown> | null): string {\n const explicit = stringFromRecord(metadata, [\"signatureState\", \"webhookSignatureState\"]);\n if (explicit === \"verified\" || explicit === \"unverified\" || explicit === \"unknown\") return explicit;\n\n const verified = booleanFromRecord(metadata, [\"signatureVerified\", \"verifiedSignature\", \"webhookSignatureVerified\", \"githubSignatureVerified\"]);\n if (verified === true) return \"verified\";\n if (verified === false) return \"unverified\";\n return \"unknown\";\n}\n\nfunction projectTargetFromProvenance(provenance: Record<string, unknown> | null): string | undefined {\n const target = recordFromUnknown(provenance?.[\"projectTarget\"]);\n return stringFromRecord(target, [\"ref\"]);\n}\n\nfunction projectTargetFromEvent(event: OpenTagEvent): string | undefined {\n const ref = projectTargetRefFromEvent(event);\n return ref ? formatProjectTargetRef(ref) : undefined;\n}\n\nfunction admissionLineFromProvenance(provenance: Record<string, unknown> | null): string {\n const admission = recordFromUnknown(provenance?.[\"admissionDecision\"]);\n const action = stringFromRecord(admission, [\"action\"]) ?? \"unknown\";\n const reasonCode = stringFromRecord(admission, [\"reasonCode\"]);\n const activeRunId = stringFromRecord(admission, [\"activeRunId\"]);\n const eventId = stringFromRecord(admission, [\"eventId\"]);\n return [\n reasonCode ? `${action} (${reasonCode})` : action,\n ...(activeRunId ? [`activeRun=${activeRunId}`] : []),\n ...(eventId ? [`event=${eventId}`] : [])\n ].join(\"; \");\n}\n\nfunction claimedRunnerId(summary: RunStatusSummary): string | undefined {\n if (summary.run.assignedRunnerId) return summary.run.assignedRunnerId;\n for (const event of [...summary.events].reverse()) {\n if (event.type !== \"run.claimed\") continue;\n const runnerId = stringFromRecord(recordFromUnknown(event.payload), [\"runnerId\"]);\n if (runnerId) return runnerId;\n }\n return undefined;\n}\n\nfunction formatRunProvenance(summary: RunStatusSummary): string[] {\n const provenance = runProvenancePayload(summary);\n const metadata = recordFromUnknown(summary.event.metadata);\n const sourceDeliveryId = stringFromRecord(provenance, [\"sourceDeliveryId\"]) ?? sourceDeliveryIdFromMetadata(metadata);\n const signatureState = stringFromRecord(provenance, [\"signatureState\"]) ?? signatureStateFromMetadata(metadata);\n const projectTarget = projectTargetFromProvenance(provenance) ?? projectTargetFromEvent(summary.event);\n const expectedRunnerId = stringFromRecord(provenance, [\"expectedRunnerId\"]);\n return [\n \"Provenance:\",\n ` Source delivery: ${sourceDeliveryId ?? \"unknown\"}`,\n ` Signature: ${signatureState}`,\n ` Project Target: ${projectTarget ?? \"unknown\"}`,\n ` Admission: ${admissionLineFromProvenance(provenance)}`,\n ` Expected runner: ${expectedRunnerId ?? \"unbound\"}`,\n ` Claimed runner: ${claimedRunnerId(summary) ?? \"none\"}`\n ];\n}\n\nfunction livenessGuidance(strategy: PlatformLivenessStrategy | \"default_callback\"): string {\n if (strategy === \"status_update\") return \"source thread can receive concise status/progress callbacks.\";\n if (strategy === \"source_receipt\") return \"source thread uses native receipts first; routine progress stays in audit/status.\";\n if (strategy === \"pull_status\") return \"source thread stays quiet by default; pull detail with /status or this command.\";\n if (strategy === \"thread_reply\") return \"source thread uses concise thread replies for liveness.\";\n return \"callback delivery follows provider default behavior.\";\n}\n\nfunction formatRunLiveness(summary: RunStatusSummary): string[] {\n const provider = summary.event.callback.provider;\n const capability = platformCapabilityForProvider(provider);\n const strategy = capability?.livenessStrategy ?? \"default_callback\";\n const suppressedProgressEvents = summary.events.filter((event) => event.type === \"callback.progress.suppressed\");\n const sourceReceiptDeliveredEvents = summary.events.filter((event) => event.type === \"source_receipt.delivered\");\n const sourceReceiptFailedEvents = summary.events.filter((event) => event.type === \"source_receipt.failed\");\n const suppressedReasons = Array.from(\n new Set(\n suppressedProgressEvents\n .map((event) => {\n const payload = recordFromUnknown(event.payload);\n const reason = payload?.[\"reason\"];\n return typeof reason === \"string\" && reason.length > 0 ? reason : undefined;\n })\n .filter((reason): reason is string => Boolean(reason))\n )\n );\n const sourceReceiptStates = Array.from(\n new Set(\n [...sourceReceiptDeliveredEvents, ...sourceReceiptFailedEvents]\n .map((event) => {\n const payload = recordFromUnknown(event.payload);\n const state = payload?.[\"state\"];\n return typeof state === \"string\" && state.length > 0 ? state : undefined;\n })\n .filter((state): state is string => Boolean(state))\n )\n );\n return [\n \"Liveness:\",\n ` Provider: ${provider} (${strategy})`,\n ` Human callbacks: ${summary.metrics.humanCallbackCount}; thread noise ratio: ${summary.metrics.threadNoiseRatio}`,\n ` Progress delivery: ${livenessGuidance(strategy)}`,\n ...(sourceReceiptDeliveredEvents.length || sourceReceiptFailedEvents.length\n ? [\n ` Source receipts: ${sourceReceiptDeliveredEvents.length} delivered, ${sourceReceiptFailedEvents.length} failed${\n sourceReceiptStates.length ? ` (${sourceReceiptStates.join(\", \")})` : \"\"\n }`\n ]\n : []),\n ...(suppressedProgressEvents.length\n ? [\n ` Suppressed progress callbacks: ${suppressedProgressEvents.length}${\n suppressedReasons.length ? ` (${suppressedReasons.join(\", \")})` : \"\"\n }`\n ]\n : [])\n ];\n}\n\ntype CallbackDeliveryKind = \"acknowledgement\" | \"progress\" | \"final\";\ntype CallbackDeliveryState = \"queued\" | \"delivered\" | \"failed\" | \"duplicate\" | \"suppressed\";\n\nconst callbackKinds: CallbackDeliveryKind[] = [\"acknowledgement\", \"progress\", \"final\"];\nconst callbackStates: CallbackDeliveryState[] = [\"queued\", \"delivered\", \"failed\", \"duplicate\", \"suppressed\"];\n\nfunction emptyCallbackDeliveryCounts(): Record<CallbackDeliveryKind, Record<CallbackDeliveryState, number>> {\n return Object.fromEntries(\n callbackKinds.map((kind) => [\n kind,\n Object.fromEntries(callbackStates.map((state) => [state, 0])) as Record<CallbackDeliveryState, number>\n ])\n ) as Record<CallbackDeliveryKind, Record<CallbackDeliveryState, number>>;\n}\n\nfunction callbackDeliveryEventType(type: unknown): { kind: CallbackDeliveryKind; state: CallbackDeliveryState } | null {\n if (typeof type !== \"string\") return null;\n const match = type.match(/^callback\\.(acknowledgement|progress|final)\\.(queued|delivered|failed|duplicate|suppressed)$/);\n if (!match) return null;\n return {\n kind: match[1] as CallbackDeliveryKind,\n state: match[2] as CallbackDeliveryState\n };\n}\n\nfunction callbackDeliveryLine(kind: CallbackDeliveryKind, counts: Record<CallbackDeliveryState, number>): string | null {\n const parts = callbackStates.filter((state) => counts[state] > 0).map((state) => `${state}=${counts[state]}`);\n return parts.length ? ` ${kind}: ${parts.join(\", \")}` : null;\n}\n\nfunction formatCallbackDelivery(summary: RunStatusSummary): string[] {\n const counts = emptyCallbackDeliveryCounts();\n for (const event of summary.events) {\n const parsed = callbackDeliveryEventType(event.type);\n if (!parsed) continue;\n counts[parsed.kind][parsed.state] += 1;\n }\n\n const lines = callbackKinds\n .map((kind) => callbackDeliveryLine(kind, counts[kind]))\n .filter((line): line is string => Boolean(line));\n if (lines.length === 0) return [\"Callback Delivery:\", \" none\"];\n\n const finalFailed = counts.final.failed;\n const finalSuppressed = counts.final.suppressed;\n return [\n \"Callback Delivery:\",\n ...lines,\n ...(finalFailed || finalSuppressed\n ? [` Attention: final callback has failed=${finalFailed}, suppressed=${finalSuppressed}; inspect audit events before assuming the source thread saw the result.`]\n : [])\n ];\n}\n\nexport function formatRunStatus(summary: RunStatusSummary): string {\n const latestEvents = summary.events.slice(-5);\n const conclusion = summary.run.result?.conclusion;\n const timeoutPolicy = runSpecificTimeoutPolicy(summary);\n return [\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n `Run: ${summary.run.id}`,\n `Status: ${summary.run.status}${conclusion ? ` (${conclusion})` : \"\"}`,\n ...(timeoutPolicy ? [`Run Timeout: ${timeoutPolicy}`] : []),\n ...runTerminalSemantics(summary),\n `Source: ${summary.event.source} (${summary.event.sourceEventId})`,\n ...formatRunProvenance(summary),\n `Command: ${summary.event.command.rawText}`,\n `Updated: ${summary.run.updatedAt}`,\n `Metrics: ${summary.metrics.totalEventCount} events, ${summary.metrics.suggestedChangesCount} suggested action(s), ${summary.metrics.applyPlanCount} apply plan(s), ${summary.metrics.staleIntentCount} stale intent(s)`,\n ...formatRunLiveness(summary),\n ...formatCallbackDelivery(summary),\n \"Recent Events:\",\n ...(latestEvents.length ? latestEvents.map(formatRunEvent) : [\" none\"])\n ].join(\"\\n\");\n}\n\nfunction projectTargetLabel(input: { repoProvider: string; owner: string; repo: string }): string {\n return `${input.repoProvider}:${input.owner}/${input.repo}`;\n}\n\nexport function formatChannelStatus(summary: ChannelStatusSummary): string {\n const activeRun = summary.status.activeRun;\n const runTimeoutPolicy = summary.status.runTimeoutPolicy?.hardTimeoutMs\n ? formatRunTimeoutPolicy(summary.status.runTimeoutPolicy.hardTimeoutMs)\n : summary.runTimeoutPolicy;\n const statusPresentation = createSourceThreadStatusPresentation({\n title: \"OpenTag status:\",\n sourceContainer: `${summary.provider}:${summary.accountId}/${summary.conversationId}`,\n projectTarget: projectTargetLabel(summary.status.binding),\n bindingState: \"bound\",\n ...(activeRun\n ? {\n activeRun: {\n id: activeRun.id,\n status: activeRun.status,\n updatedAt: activeRun.updatedAt\n }\n }\n : {}),\n ...(summary.status.activeEvent?.command.rawText ? { currentCommand: summary.status.activeEvent.command.rawText } : {}),\n queuedFollowUps: summary.status.queuedFollowUps.slice(0, 5).map((followUp) => ({\n id: followUp.id,\n status: followUp.status,\n command: followUp.event.command.rawText\n })),\n queuedFollowUpsTotal: summary.status.queuedFollowUps.length,\n nextAction: activeRun\n ? `wait for the final reply, send a source-thread follow-up, or request cancellation with \\`opentag cancel --run ${activeRun.id}\\` or source-thread /stop.`\n : \"mention the bot in the bound source container to start a run.\",\n stopHint: `cancellation is explicit and is not reported as successful completion; timeout policy: ${runTimeoutPolicy}.`,\n detailHint: activeRun\n ? `use \\`opentag status --run ${activeRun.id}\\` locally for audit events and executor detail.`\n : `use \\`opentag status --channel ${summary.provider}:${summary.accountId}/${summary.conversationId}\\` to refresh this source-container view.`\n });\n return [\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n renderOpenTagPresentationPlainText(statusPresentation)\n ].join(\"\\n\");\n}\n\nexport async function runStatusCommand(options: StatusCommandOptions): Promise<void> {\n if (options.run && options.channel) {\n throw new Error(\"Use either --run or --channel, not both.\");\n }\n if (options.run) {\n console.log(formatRunStatus(await getRunStatusSummary({ runId: options.run, ...(options.config ? { configPath: options.config } : {}) })));\n return;\n }\n if (options.channel) {\n console.log(\n formatChannelStatus(await getChannelStatusSummary({ channel: options.channel, ...(options.config ? { configPath: options.config } : {}) }))\n );\n return;\n }\n console.log(formatStatus(await getStatusSummary({ ...(options.config ? { configPath: options.config } : {}) })));\n}\n","export async function fetchWithTimeout(input: {\n url: string;\n fetchImpl?: typeof fetch;\n timeoutMs: number;\n}): Promise<Response> {\n const fetchImpl = input.fetchImpl ?? fetch;\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n return await fetchImpl(input.url, { signal: controller.signal });\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport async function probeDispatcherHealth(input: {\n dispatcherUrl: string;\n fetchImpl?: typeof fetch;\n timeoutMs: number;\n}): Promise<boolean> {\n const healthUrl = `${input.dispatcherUrl.replace(/\\/$/, \"\")}/healthz`;\n try {\n const response = await fetchWithTimeout({\n url: healthUrl,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),\n timeoutMs: input.timeoutMs\n });\n return response.ok;\n } catch {\n return false;\n }\n}\n","import { formatProjectTargetRef } from \"@opentag/core\";\nimport type { OpenTagCliConfig } from \"./config.js\";\n\ntype ConfiguredRepository = OpenTagCliConfig[\"daemon\"][\"repositories\"][number];\n\nexport function formatConfiguredProjectTargetSummary(repository: ConfiguredRepository): string {\n const target = formatProjectTargetRef({\n provider: repository.provider,\n owner: repository.owner,\n repo: repository.repo\n });\n return `${target} (hasWorkspacePath=${repository.checkoutPath ? \"yes\" : \"no\"})`;\n}\n","import { relayUrlFromConfig, runtimeModeFromConfig, type OpenTagCliConfig } from \"./config.js\";\n\nexport type RelaySecurityCheck = {\n status: \"ok\" | \"warn\" | \"fail\";\n name: string;\n message: string;\n};\n\nexport function isLocalRelayUrl(relayUrl: string): boolean {\n const url = new URL(relayUrl);\n return url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"::1\" || url.hostname.endsWith(\".localhost\");\n}\n\nexport function assertRelayTransportAllowed(relayUrl: string): void {\n const url = new URL(relayUrl);\n if (url.protocol === \"http:\" && !isLocalRelayUrl(relayUrl)) {\n throw new Error(\"Relay URL must use HTTPS unless it points to localhost for local testing.\");\n }\n}\n\nexport function relayTrustWarning(relayUrl: string): string {\n return [\n `Security: only pair with a relay you operate or trust (${relayUrl}).`,\n \"The relay can see run metadata, command text, and progress, and it controls which queued runs this local runner claims.\"\n ].join(\"\\n\");\n}\n\nexport function relaySecurityChecksFromConfig(config: OpenTagCliConfig): RelaySecurityCheck[] {\n if (runtimeModeFromConfig(config) !== \"relay\") return [];\n const relayUrl = relayUrlFromConfig(config) ?? config.daemon.dispatcherUrl;\n let relay: URL;\n try {\n relay = new URL(relayUrl);\n } catch {\n return [{ status: \"fail\", name: \"relay URL\", message: \"Relay URL is malformed; fix runtime.relayUrl or daemon.dispatcherUrl.\" }];\n }\n const checks: RelaySecurityCheck[] = [];\n\n if (relay.protocol === \"https:\") {\n checks.push({ status: \"ok\", name: \"relay transport\", message: \"HTTPS is enabled.\" });\n } else if (relay.protocol === \"http:\" && isLocalRelayUrl(relayUrl)) {\n checks.push({ status: \"ok\", name: \"relay transport\", message: \"HTTP is limited to localhost development.\" });\n } else {\n checks.push({ status: \"fail\", name: \"relay transport\", message: \"Public relay URLs must use HTTPS.\" });\n }\n\n checks.push({\n status: \"warn\",\n name: \"relay trust\",\n message: \"Use only a relay you operate or trust; the relay is the remote control plane for this local runner.\"\n });\n\n checks.push(\n config.daemon.runnerToken\n ? {\n status: \"ok\",\n name: \"relay token scope\",\n message:\n \"Runner calls use daemon.runnerToken instead of the pairing token; keep registration, runner, and webhook credentials independently rotatable.\"\n }\n : {\n status: \"warn\",\n name: \"relay token scope\",\n message:\n \"This self-hosted MVP still uses the daemon pairing token for registration and runner calls; configure daemon.runnerToken before treating relay credentials as beta-ready.\"\n }\n );\n\n if (config.daemon.runnerTokens?.length) {\n checks.push({\n status: config.daemon.runnerToken ? \"ok\" : \"warn\",\n name: \"runner token rotation\",\n message: config.daemon.runnerToken\n ? `${config.daemon.runnerTokens.length} additional runner token(s) configured for the rotation window.`\n : \"Additional runner tokens are configured, but daemon.runnerToken is missing; configure the current runner token before relying on rotation.\"\n });\n }\n\n if (config.daemon.revokedRunnerTokenFingerprints?.length) {\n checks.push({\n status: \"ok\",\n name: \"runner token revocation\",\n message: `${config.daemon.revokedRunnerTokenFingerprints.length} revoked runner token fingerprint(s) configured; revoked tokens fail closed without printing token values.`\n });\n }\n\n checks.push({\n status: \"ok\",\n name: \"Project Target allowlist\",\n message: `${config.daemon.repositories.length} local Project Target(s) configured; the runner refuses unlisted targets before executor startup.`\n });\n\n if (config.platforms.github) {\n checks.push({\n status: \"ok\",\n name: \"GitHub webhook secret\",\n message: \"Configured locally; the relay /github/webhooks endpoint must verify this secret before creating runs.\"\n });\n }\n\n if (config.platforms.slack || config.platforms.lark) {\n const unsupported = [config.platforms.slack ? \"Slack\" : undefined, config.platforms.lark ? \"Lark / Feishu\" : undefined]\n .filter((value): value is string => Boolean(value))\n .join(\", \");\n checks.push({\n status: \"fail\",\n name: \"relay platform support\",\n message: `${unsupported} relay mode is not supported in this MVP; use local mode for those ingress paths.`\n });\n }\n\n if (!config.daemon.security) {\n checks.push({\n status: \"warn\",\n name: \"runner security policy\",\n message: \"No explicit daemon.security policy is configured; consider setting allowedWorkspaceRoot for relay-backed runners.\"\n });\n }\n\n return checks;\n}\n\nexport function formatRelaySecurityChecks(checks: RelaySecurityCheck[]): string[] {\n if (!checks.length) return [];\n return [\"Relay Security:\", ...checks.map((check) => ` ${check.status.toUpperCase()} ${check.name}: ${check.message}`)];\n}\n","type SecretContainer = Record<string, unknown>;\n\nfunction asRecord(value: unknown): SecretContainer | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value) ? (value as SecretContainer) : undefined;\n}\n\nfunction getPath(root: unknown, path: string[]): unknown {\n let current: unknown = root;\n for (const segment of path) {\n const record = asRecord(current);\n if (!record || !(segment in record)) return undefined;\n current = record[segment];\n }\n return current;\n}\n\nfunction formatSecretSource(value: unknown): string {\n if (value === undefined) return \"missing\";\n if (value === null) return \"disabled\";\n if (Array.isArray(value)) {\n if (value.length === 0) return \"none\";\n const sources = [...new Set(value.map(formatSecretSource))];\n return `${value.length} configured (${sources.join(\", \")})`;\n }\n if (typeof value === \"string\") {\n const ref = value.match(/^\\[(env|file|keychain):(.+)]$/);\n if (ref) return `${ref[1]} ref (${ref[2]})`;\n return \"inline (redacted)\";\n }\n return \"configured (redacted)\";\n}\n\nfunction hasPath(root: unknown, path: string[]): boolean {\n return getPath(root, path) !== undefined;\n}\n\nexport function formatSecretReadiness(redactedConfig: unknown): string[] {\n const rows: string[] = [\"Secrets:\"];\n const add = (label: string, path: string[], fallback?: string) => {\n const value = getPath(redactedConfig, path);\n rows.push(` ${label}: ${value === undefined && fallback ? fallback : formatSecretSource(value)}`);\n };\n\n add(\"daemon.pairingToken\", [\"daemon\", \"pairingToken\"]);\n add(\"daemon.runnerToken\", [\"daemon\", \"runnerToken\"], \"daemon.pairingToken fallback\");\n if (hasPath(redactedConfig, [\"daemon\", \"runnerTokens\"])) {\n add(\"daemon.runnerTokens\", [\"daemon\", \"runnerTokens\"]);\n }\n if (hasPath(redactedConfig, [\"daemon\", \"githubToken\"])) {\n add(\"daemon.githubToken\", [\"daemon\", \"githubToken\"]);\n }\n if (hasPath(redactedConfig, [\"daemon\", \"githubApplyToken\"]) || hasPath(redactedConfig, [\"daemon\", \"githubToken\"])) {\n add(\"daemon.githubApplyToken\", [\"daemon\", \"githubApplyToken\"], \"daemon.githubToken fallback\");\n }\n\n if (hasPath(redactedConfig, [\"platforms\", \"lark\"])) {\n add(\"platforms.lark.appSecret\", [\"platforms\", \"lark\", \"appSecret\"]);\n }\n\n if (hasPath(redactedConfig, [\"platforms\", \"slack\"])) {\n add(\"platforms.slack.botToken\", [\"platforms\", \"slack\", \"botToken\"]);\n if (hasPath(redactedConfig, [\"platforms\", \"slack\", \"appToken\"])) {\n add(\"platforms.slack.appToken\", [\"platforms\", \"slack\", \"appToken\"]);\n }\n if (hasPath(redactedConfig, [\"platforms\", \"slack\", \"signingSecret\"])) {\n add(\"platforms.slack.signingSecret\", [\"platforms\", \"slack\", \"signingSecret\"]);\n }\n }\n\n if (hasPath(redactedConfig, [\"platforms\", \"github\"])) {\n add(\"platforms.github.webhookSecret\", [\"platforms\", \"github\", \"webhookSecret\"]);\n }\n\n return rows;\n}\n","import { createDoctorSummaryPresentation, renderOpenTagPresentationPlainText } from \"@opentag/core\";\nimport { doctorHasFailures, executorsFromConfig, runDoctor, type DoctorCheck } from \"@opentag/local-runtime\";\nimport { formatConfiguredCapabilities } from \"./catalogs/capabilities.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\nimport { defaultConfigPath, readCliConfig, readRedactedCliConfig, redactedCliConfig } from \"./config.js\";\nimport { relaySecurityChecksFromConfig } from \"./relay-security.js\";\nimport { formatSecretReadiness } from \"./secret-readiness.js\";\n\nexport type DoctorCommandOptions = {\n config?: string;\n};\n\nfunction credentialSourcesCheck(secretConfig: unknown): DoctorCheck {\n return {\n status: \"ok\",\n name: \"credential sources\",\n message: formatSecretReadiness(secretConfig).slice(1).join(\"; \")\n };\n}\n\nexport function appendCliDoctorChecks(config: ReturnType<typeof readCliConfig>, checks: DoctorCheck[], secretConfig: unknown = redactedCliConfig(config)): DoctorCheck[] {\n const platforms = Object.entries(config.platforms)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key as PlatformId);\n const capabilityLines = formatConfiguredCapabilities({\n platforms,\n executors: config.daemon.repositories.map((repository) => repository.defaultExecutor)\n }).slice(1);\n return [\n ...checks,\n credentialSourcesCheck(secretConfig),\n {\n status: \"ok\",\n name: \"capability catalog\",\n message: capabilityLines.join(\"; \")\n },\n ...relaySecurityChecksFromConfig(config).map((check) => ({\n status: check.status,\n name: check.name,\n message: check.message\n }))\n ];\n}\n\nexport function formatCliDoctorChecks(checks: DoctorCheck[]): string {\n return renderOpenTagPresentationPlainText(\n createDoctorSummaryPresentation({\n title: \"OpenTag doctor\",\n checks\n })\n );\n}\n\nexport async function runDoctorCommand(options: DoctorCommandOptions): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n let config: ReturnType<typeof readCliConfig>;\n let secretConfig: unknown;\n try {\n secretConfig = readRedactedCliConfig(configPath);\n config = readCliConfig(configPath);\n } catch (error) {\n const checks: DoctorCheck[] = [\n {\n status: \"fail\",\n name: \"credential resolution\",\n message: error instanceof Error ? error.message : String(error)\n }\n ];\n if (secretConfig !== undefined) {\n checks.unshift(credentialSourcesCheck(secretConfig));\n }\n console.log(formatCliDoctorChecks(checks));\n process.exitCode = 1;\n return;\n }\n const checks = appendCliDoctorChecks(\n config,\n await runDoctor({\n config: config.daemon,\n executors: executorsFromConfig(config.daemon)\n }),\n secretConfig\n );\n console.log(formatCliDoctorChecks(checks));\n if (doctorHasFailures(checks)) {\n process.exitCode = 1;\n }\n}\n","import { createDispatcherClient, type DispatcherRunnerClient } from \"@opentag/client\";\nimport { OpenTagRunResultSchema, type OpenTagRunResult } from \"@opentag/core\";\nimport { defaultConfigPath, readCliConfig, runnerDispatcherToken } from \"./config.js\";\n\nexport type IngestCommandOptions = {\n config?: string;\n run?: string;\n event?: string;\n source?: string;\n message?: string;\n type?: string;\n idempotencyKey?: string;\n resultJson?: string;\n conclusion?: string;\n summary?: string;\n};\n\nexport type IngestTemplateCommandOptions = {\n source?: string;\n command?: string;\n format?: string;\n};\n\nexport type IngestDependencies = {\n client?: Pick<DispatcherRunnerClient, \"progress\" | \"complete\">;\n now?(): Date;\n fetchImpl?: typeof fetch;\n logger?: Pick<Console, \"log\">;\n};\n\ntype NormalizedIngestEvent = \"progress\" | \"completed\" | \"failed\" | \"cancelled\" | \"interrupted\" | \"timed_out\";\ntype IngestTemplateFormat = \"shell\" | \"manifest\";\n\nexport type IngestHookManifestEvent = {\n externalEvent: string;\n openTagEvent: NormalizedIngestEvent;\n idempotencySuffix: string;\n terminal: boolean;\n visibility: \"audit\";\n conclusion?: OpenTagRunResult[\"conclusion\"];\n description: string;\n};\n\nexport type IngestHookManifest = {\n version: 1;\n kind: \"opentag_hook_ingest_manifest\";\n source: string;\n command: string;\n requiredEnv: string[];\n optionalEnv: string[];\n permissions: {\n conversationAccess: \"none\";\n promptMutation: \"none\";\n rawContextAccess: false;\n writeActionAccess: \"none\";\n sourceThreadProgress: \"audit_only\";\n sourceThreadFinal: \"concise_open_tag_summary\";\n };\n lifecycle: {\n progressVisibility: \"audit\";\n finalAnswerGate: \"before_agent_finalize_is_progress\";\n terminalEventPolicy: \"exactly_one_terminal_event_per_run\";\n };\n events: IngestHookManifestEvent[];\n constraints: string[];\n};\n\nconst INGEST_SOURCE_PATTERN = /^[a-z0-9][a-z0-9_-]{0,63}$/;\n\nfunction nonEmpty(value: string | undefined, label: string): string {\n const trimmed = value?.trim();\n if (!trimmed) throw new Error(`${label} is required.`);\n return trimmed;\n}\n\nfunction normalizeIngestSource(value: string | undefined): string {\n const source = (value?.trim() || \"external\").toLowerCase();\n if (!INGEST_SOURCE_PATTERN.test(source)) {\n throw new Error(\"--source must be a safe label using lowercase letters, numbers, underscores, or hyphens.\");\n }\n return source;\n}\n\nfunction normalizeIngestEventName(value: string | undefined): string {\n return nonEmpty(value, \"--event\").toLowerCase().replace(/[-.]/g, \"_\");\n}\n\nfunction normalizeIngestTemplateFormat(value: string | undefined): IngestTemplateFormat {\n const format = (value?.trim() || \"shell\").toLowerCase();\n if (format === \"shell\" || format === \"manifest\") return format;\n throw new Error(\"--format must be shell or manifest.\");\n}\n\nfunction normalizeIngestEvent(value: string | undefined): NormalizedIngestEvent {\n const event = normalizeIngestEventName(value);\n if (\n event === \"progress\" ||\n event === \"agent_progress\" ||\n event === \"post_llm_call\" ||\n event === \"before_agent_finalize\" ||\n event === \"tool_start\" ||\n event === \"tool_end\"\n ) {\n return \"progress\";\n }\n if (event === \"agent_end\" || event === \"completed\" || event === \"complete\" || event === \"final\") return \"completed\";\n if (event === \"agent_failed\" || event === \"failed\" || event === \"failure\" || event === \"agent_error\" || event === \"error\") return \"failed\";\n if (event === \"agent_cancelled\" || event === \"cancelled\" || event === \"canceled\" || event === \"stop\" || event === \"stopped\") {\n return \"cancelled\";\n }\n if (event === \"timed_out\" || event === \"timeout\" || event === \"agent_timeout\") return \"timed_out\";\n if (event === \"agent_interrupted\" || event === \"interrupted\" || event === \"session_end\" || event === \"on_session_end\") return \"interrupted\";\n throw new Error(\n \"--event must be progress, post_llm_call, before_agent_finalize, agent_end, failed, cancelled, timed_out, or interrupted.\"\n );\n}\n\nfunction clientFromConfig(configPath: string, dependencies: IngestDependencies): Pick<DispatcherRunnerClient, \"progress\" | \"complete\"> {\n if (dependencies.client) return dependencies.client;\n const config = readCliConfig(configPath);\n const token = runnerDispatcherToken(config.daemon);\n return createDispatcherClient({\n dispatcherUrl: config.daemon.dispatcherUrl,\n runnerId: config.daemon.runnerId,\n ...(token ? { pairingToken: token } : {}),\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {})\n });\n}\n\nfunction parseResultJson(value: string): OpenTagRunResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch (error) {\n throw new Error(`--result-json must be valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n return OpenTagRunResultSchema.parse(parsed);\n}\n\nfunction resultFromOptions(options: IngestCommandOptions, event: NormalizedIngestEvent): OpenTagRunResult {\n if (options.resultJson) return parseResultJson(options.resultJson);\n\n const summary = nonEmpty(options.summary ?? options.message, event === \"completed\" ? \"--summary or --message\" : \"--message\");\n if (event === \"completed\") {\n const conclusion = options.conclusion?.trim() || \"success\";\n return OpenTagRunResultSchema.parse({ conclusion, summary });\n }\n if (event === \"cancelled\") {\n return { conclusion: \"cancelled\", summary };\n }\n if (event === \"interrupted\") {\n return { conclusion: \"interrupted\", summary };\n }\n if (event === \"timed_out\") {\n return { conclusion: \"timed_out\", summary };\n }\n return { conclusion: \"failure\", summary };\n}\n\nfunction shellParameterDefault(value: string): string {\n return value.replace(/[\"\\\\$`]/g, \"\\\\$&\");\n}\n\nfunction ingestCommandLine(input: {\n commandVariable?: string;\n event: string;\n idempotencySuffix: string;\n message?: string;\n summary?: string;\n commented?: boolean;\n}): string {\n const prefix = input.commented ? \"# \" : \"\";\n const commandVariable = input.commandVariable ?? \"$OPENTAG_INGEST_COMMAND\";\n const textFlag = input.summary ? `--summary \"${input.summary}\"` : `--message \"${input.message ?? \"\"}\"`;\n return `${prefix}\"${commandVariable}\" ingest --run \"$OPENTAG_RUN_ID\" --source \"$OPENTAG_INGEST_SOURCE\" --event ${input.event} --idempotency-key \"$OPENTAG_INGEST_IDEMPOTENCY_PREFIX:${input.idempotencySuffix}\" ${textFlag}`;\n}\n\nfunction genericIngestTemplateBody(): string[] {\n return [\n ingestCommandLine({ event: \"progress\", idempotencySuffix: \"progress:started\", message: \"External runtime started.\" }),\n ingestCommandLine({ event: \"post_llm_call\", idempotencySuffix: \"progress:post_llm_call\", message: \"LLM call completed.\" }),\n ingestCommandLine({ event: \"before_agent_finalize\", idempotencySuffix: \"progress:before_agent_finalize\", message: \"Final answer is being prepared.\" }),\n \"\",\n \"# Choose exactly one terminal event:\",\n ingestCommandLine({ event: \"agent_end\", idempotencySuffix: \"complete:agent_end\", summary: \"External runtime completed.\" }),\n ingestCommandLine({\n event: \"failed\",\n idempotencySuffix: \"complete:failed\",\n message: \"External runtime failed before finalization.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"on_session_end\",\n idempotencySuffix: \"complete:on_session_end\",\n message: \"External runtime ended before finalization.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"timed_out\",\n idempotencySuffix: \"complete:timed_out\",\n message: \"External runtime exceeded its timeout policy.\",\n commented: true\n })\n ];\n}\n\nfunction hermesIngestTemplateBody(): string[] {\n return [\n \"# Hermes hook placement:\",\n \"# - post_llm_call: audit-visible progress after a successful model call.\",\n \"# - before_agent_finalize: final-answer gate, still progress rather than completion.\",\n \"# - agent_end: natural completion. Use on_session_end for interrupted sessions.\",\n ingestCommandLine({ event: \"progress\", idempotencySuffix: \"progress:started\", message: \"Hermes runtime started.\" }),\n ingestCommandLine({ event: \"post_llm_call\", idempotencySuffix: \"progress:post_llm_call\", message: \"Hermes post_llm_call completed.\" }),\n ingestCommandLine({\n event: \"before_agent_finalize\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n message: \"Hermes finalization gate reached.\"\n }),\n \"\",\n \"# Choose exactly one terminal event:\",\n ingestCommandLine({ event: \"agent_end\", idempotencySuffix: \"complete:agent_end\", summary: \"Hermes session completed.\" }),\n ingestCommandLine({\n event: \"on_session_end\",\n idempotencySuffix: \"complete:on_session_end\",\n message: \"Hermes session ended before a final answer.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_failed\",\n idempotencySuffix: \"complete:agent_failed\",\n message: \"Hermes session failed.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_timeout\",\n idempotencySuffix: \"complete:agent_timeout\",\n message: \"Hermes session exceeded its timeout policy.\",\n commented: true\n })\n ];\n}\n\nfunction openClawIngestTemplateBody(): string[] {\n return [\n \"# OpenClaw hook placement:\",\n \"# - before_agent_finalize: final answer is about to be produced, but the run is not complete yet.\",\n \"# - agent_end: natural completion observation.\",\n \"# - agent_cancelled / agent_interrupted: explicit non-success terminal states.\",\n ingestCommandLine({ event: \"progress\", idempotencySuffix: \"progress:started\", message: \"OpenClaw runtime started.\" }),\n ingestCommandLine({\n event: \"before_agent_finalize\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n message: \"OpenClaw finalization gate reached.\"\n }),\n \"\",\n \"# Choose exactly one terminal event:\",\n ingestCommandLine({ event: \"agent_end\", idempotencySuffix: \"complete:agent_end\", summary: \"OpenClaw agent completed.\" }),\n ingestCommandLine({\n event: \"agent_cancelled\",\n idempotencySuffix: \"complete:agent_cancelled\",\n message: \"OpenClaw agent was cancelled by user request.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_interrupted\",\n idempotencySuffix: \"complete:agent_interrupted\",\n message: \"OpenClaw agent was interrupted before finalization.\",\n commented: true\n }),\n ingestCommandLine({\n event: \"agent_timeout\",\n idempotencySuffix: \"complete:agent_timeout\",\n message: \"OpenClaw agent exceeded its timeout policy.\",\n commented: true\n })\n ];\n}\n\nfunction sourceSpecificIngestTemplateBody(source: string): string[] {\n if (source === \"hermes\") return hermesIngestTemplateBody();\n if (source === \"openclaw\") return openClawIngestTemplateBody();\n return genericIngestTemplateBody();\n}\n\nfunction genericIngestManifestEvents(): IngestHookManifestEvent[] {\n return [\n {\n externalEvent: \"progress\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:started\",\n terminal: false,\n visibility: \"audit\",\n description: \"External runtime started.\"\n },\n {\n externalEvent: \"post_llm_call\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:post_llm_call\",\n terminal: false,\n visibility: \"audit\",\n description: \"Model call completed; this stays in audit/status by default.\"\n },\n {\n externalEvent: \"before_agent_finalize\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n terminal: false,\n visibility: \"audit\",\n description: \"Final answer gate reached; this is not a successful completion signal.\"\n },\n {\n externalEvent: \"agent_end\",\n openTagEvent: \"completed\",\n idempotencySuffix: \"complete:agent_end\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"success\",\n description: \"Natural external runtime completion.\"\n },\n {\n externalEvent: \"failed\",\n openTagEvent: \"failed\",\n idempotencySuffix: \"complete:failed\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"failure\",\n description: \"External runtime failed before finalization.\"\n },\n {\n externalEvent: \"on_session_end\",\n openTagEvent: \"interrupted\",\n idempotencySuffix: \"complete:on_session_end\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"interrupted\",\n description: \"External runtime ended without a normal final answer.\"\n },\n {\n externalEvent: \"timed_out\",\n openTagEvent: \"timed_out\",\n idempotencySuffix: \"complete:timed_out\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"timed_out\",\n description: \"External runtime exceeded its timeout policy.\"\n }\n ];\n}\n\nfunction hermesIngestManifestEvents(): IngestHookManifestEvent[] {\n return genericIngestManifestEvents().map((event) => {\n if (event.externalEvent === \"progress\") return { ...event, description: \"Hermes runtime started.\" };\n if (event.externalEvent === \"post_llm_call\") return { ...event, description: \"Hermes post_llm_call completed.\" };\n if (event.externalEvent === \"before_agent_finalize\") return { ...event, description: \"Hermes finalization gate reached; still progress.\" };\n if (event.externalEvent === \"agent_end\") return { ...event, description: \"Hermes session completed.\" };\n if (event.externalEvent === \"failed\") return { ...event, externalEvent: \"agent_failed\", idempotencySuffix: \"complete:agent_failed\", description: \"Hermes session failed.\" };\n if (event.externalEvent === \"on_session_end\") return { ...event, description: \"Hermes session ended before a final answer.\" };\n if (event.externalEvent === \"timed_out\") return { ...event, externalEvent: \"agent_timeout\", idempotencySuffix: \"complete:agent_timeout\", description: \"Hermes session exceeded its timeout policy.\" };\n return event;\n });\n}\n\nfunction openClawIngestManifestEvents(): IngestHookManifestEvent[] {\n return [\n {\n externalEvent: \"progress\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:started\",\n terminal: false,\n visibility: \"audit\",\n description: \"OpenClaw runtime started.\"\n },\n {\n externalEvent: \"before_agent_finalize\",\n openTagEvent: \"progress\",\n idempotencySuffix: \"progress:before_agent_finalize\",\n terminal: false,\n visibility: \"audit\",\n description: \"OpenClaw finalization gate reached; this is not a completion signal.\"\n },\n {\n externalEvent: \"agent_end\",\n openTagEvent: \"completed\",\n idempotencySuffix: \"complete:agent_end\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"success\",\n description: \"OpenClaw agent completed naturally.\"\n },\n {\n externalEvent: \"agent_cancelled\",\n openTagEvent: \"cancelled\",\n idempotencySuffix: \"complete:agent_cancelled\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"cancelled\",\n description: \"OpenClaw agent was cancelled by user request.\"\n },\n {\n externalEvent: \"agent_interrupted\",\n openTagEvent: \"interrupted\",\n idempotencySuffix: \"complete:agent_interrupted\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"interrupted\",\n description: \"OpenClaw agent was interrupted before finalization.\"\n },\n {\n externalEvent: \"agent_timeout\",\n openTagEvent: \"timed_out\",\n idempotencySuffix: \"complete:agent_timeout\",\n terminal: true,\n visibility: \"audit\",\n conclusion: \"timed_out\",\n description: \"OpenClaw agent exceeded its timeout policy.\"\n }\n ];\n}\n\nfunction sourceSpecificIngestManifestEvents(source: string): IngestHookManifestEvent[] {\n if (source === \"hermes\") return hermesIngestManifestEvents();\n if (source === \"openclaw\") return openClawIngestManifestEvents();\n return genericIngestManifestEvents();\n}\n\nexport function createIngestHookManifest(options: IngestTemplateCommandOptions = {}): IngestHookManifest {\n const source = normalizeIngestSource(options.source);\n const command = options.command?.trim() || \"opentag\";\n return {\n version: 1,\n kind: \"opentag_hook_ingest_manifest\",\n source,\n command,\n requiredEnv: [\"OPENTAG_RUN_ID\"],\n optionalEnv: [\"OPENTAG_INGEST_SOURCE\", \"OPENTAG_INGEST_COMMAND\", \"OPENTAG_INGEST_IDEMPOTENCY_PREFIX\"],\n permissions: {\n conversationAccess: \"none\",\n promptMutation: \"none\",\n rawContextAccess: false,\n writeActionAccess: \"none\",\n sourceThreadProgress: \"audit_only\",\n sourceThreadFinal: \"concise_open_tag_summary\"\n },\n lifecycle: {\n progressVisibility: \"audit\",\n finalAnswerGate: \"before_agent_finalize_is_progress\",\n terminalEventPolicy: \"exactly_one_terminal_event_per_run\"\n },\n events: sourceSpecificIngestManifestEvents(source),\n constraints: [\n \"Do not paste dispatcher tokens, local checkout paths, raw provider payloads, or raw tool logs into source threads.\",\n \"Use stable idempotency keys when retrying the same hook delivery.\",\n \"Report exactly one terminal event per OpenTag run.\",\n \"Keep progress audit-visible by default; source-thread callbacks should remain concise and provider-rendered from OpenTag state.\"\n ]\n };\n}\n\nexport function renderIngestShellTemplate(options: IngestTemplateCommandOptions = {}): string {\n const source = normalizeIngestSource(options.source);\n const command = options.command?.trim() || \"opentag\";\n return [\n \"#!/usr/bin/env sh\",\n \"set -eu\",\n \"\",\n \"# OpenTag local hook ingest template.\",\n \"# Requires a paired local config with runnerId, dispatcherUrl, and runnerToken or legacy pairingToken.\",\n \"# Do not paste dispatcher tokens, local checkout paths, or raw tool logs into source threads.\",\n \": \\\"${OPENTAG_RUN_ID:?Set OPENTAG_RUN_ID to the OpenTag run id}\\\"\",\n `OPENTAG_INGEST_SOURCE=\"\\${OPENTAG_INGEST_SOURCE:-${source}}\"`,\n `OPENTAG_INGEST_COMMAND=\"\\${OPENTAG_INGEST_COMMAND:-${shellParameterDefault(command)}}\"`,\n 'OPENTAG_INGEST_IDEMPOTENCY_PREFIX=\"${OPENTAG_INGEST_IDEMPOTENCY_PREFIX:-$OPENTAG_INGEST_SOURCE:$OPENTAG_RUN_ID}\"',\n \"\",\n ...sourceSpecificIngestTemplateBody(source)\n ].join(\"\\n\");\n}\n\nexport function renderIngestTemplate(options: IngestTemplateCommandOptions = {}): string {\n const format = normalizeIngestTemplateFormat(options.format);\n if (format === \"manifest\") {\n return JSON.stringify(createIngestHookManifest(options), null, 2);\n }\n return renderIngestShellTemplate(options);\n}\n\nexport async function runIngestCommand(options: IngestCommandOptions, dependencies: IngestDependencies = {}): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n const runId = nonEmpty(options.run, \"--run\");\n const source = normalizeIngestSource(options.source);\n const rawEventName = normalizeIngestEventName(options.event);\n const event = normalizeIngestEvent(options.event);\n const client = clientFromConfig(configPath, dependencies);\n const logger = dependencies.logger ?? console;\n\n if (event === \"progress\") {\n const message = nonEmpty(options.message, \"--message\");\n await client.progress(runId, {\n type: options.type?.trim() || `ingest.${source}.${rawEventName}`,\n message,\n at: (dependencies.now?.() ?? new Date()).toISOString(),\n visibility: \"audit\",\n ...(options.idempotencyKey?.trim() ? { idempotencyKey: options.idempotencyKey.trim() } : {})\n });\n logger.log(`Ingested progress for ${runId}.`);\n return;\n }\n\n const result = resultFromOptions(options, event);\n const idempotencyKey = options.idempotencyKey?.trim();\n if (idempotencyKey) {\n await client.complete(runId, result, { idempotencyKey });\n } else {\n await client.complete(runId, result);\n }\n logger.log(`Ingested ${event} result for ${runId}.`);\n}\n\nexport async function runIngestTemplateCommand(\n options: IngestTemplateCommandOptions,\n dependencies: Pick<IngestDependencies, \"logger\"> = {}\n): Promise<void> {\n const logger = dependencies.logger ?? console;\n logger.log(renderIngestTemplate(options));\n}\n","import { createOpenTagClient, type SourceDeliveryPruneResult } from \"@opentag/client\";\nimport { z } from \"zod\";\nimport { defaultConfigPath, readCliConfig, runnerDispatcherToken, type OpenTagCliConfig } from \"./config.js\";\n\nexport type MaintenancePruneSourceDeliveriesOptions = {\n config?: string;\n olderThan?: string;\n limit?: string | number;\n};\n\nexport type PruneSourceDeliveriesSummary = {\n configPath: string;\n dispatcherUrl: string;\n olderThan: string;\n limit?: number;\n result: SourceDeliveryPruneResult;\n};\n\nfunction parsePositiveInteger(name: string, value: string | number | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = typeof value === \"number\" ? value : Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`${name} must be a positive integer.`);\n }\n return parsed;\n}\n\nexport function parsePruneSourceDeliveriesOptions(options: MaintenancePruneSourceDeliveriesOptions): {\n olderThan: string;\n limit?: number;\n} {\n const olderThan = options.olderThan?.trim();\n if (!olderThan) {\n throw new Error(\"--older-than is required.\");\n }\n if (!z.string().datetime().safeParse(olderThan).success) {\n throw new Error(\"--older-than must be a valid ISO timestamp.\");\n }\n const limit = parsePositiveInteger(\"--limit\", options.limit);\n return {\n olderThan,\n ...(limit ? { limit } : {})\n };\n}\n\nexport async function pruneSourceDeliveriesFromConfig(input: {\n config: OpenTagCliConfig;\n configPath: string;\n olderThan: string;\n limit?: number;\n fetchImpl?: typeof fetch;\n}): Promise<PruneSourceDeliveriesSummary> {\n const token = runnerDispatcherToken(input.config.daemon);\n const client = createOpenTagClient({\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n ...(token ? { pairingToken: token } : {}),\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {})\n });\n const result = await client.pruneSourceDeliveries({\n olderThan: input.olderThan,\n ...(input.limit !== undefined ? { limit: input.limit } : {})\n });\n return {\n configPath: input.configPath,\n dispatcherUrl: input.config.daemon.dispatcherUrl,\n olderThan: input.olderThan,\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n result\n };\n}\n\nexport function formatPruneSourceDeliveriesSummary(summary: PruneSourceDeliveriesSummary): string {\n return [\n \"Source delivery replay-key prune:\",\n `Config: ${summary.configPath}`,\n `Dispatcher: ${summary.dispatcherUrl}`,\n `Older than: ${summary.olderThan}`,\n `Limit: ${summary.limit ?? \"default\"}`,\n `Scanned: ${summary.result.scanned}`,\n `Pruned: ${summary.result.pruned}`,\n `Retained active: ${summary.result.retainedActive}`\n ].join(\"\\n\");\n}\n\nexport async function runMaintenancePruneSourceDeliveriesCommand(options: MaintenancePruneSourceDeliveriesOptions): Promise<void> {\n const parsed = parsePruneSourceDeliveriesOptions(options);\n const configPath = options.config ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n const summary = await pruneSourceDeliveriesFromConfig({\n config,\n configPath,\n ...parsed\n });\n console.log(formatPruneSourceDeliveriesSummary(summary));\n}\n","import { createServer } from \"node:net\";\nimport { createDispatcherAdminClient, type ChannelBindingInput, type RepositoryBindingConfig } from \"@opentag/client\";\nimport { startGitHubIngress, type GitHubIngressConfig, type GitHubIngressHandle } from \"@opentag/github\";\nimport { DEFAULT_AGENT_ID, startLarkIngress, type LarkIngressConfig, type LarkIngressHandle } from \"@opentag/lark\";\nimport {\n createDaemonRuntimeInput,\n dispatcherRuntimeHardeningInputFromEnv,\n normalizeChannelBindings,\n serveDaemon,\n startDispatcher,\n type LocalDispatcherRuntimeInput\n} from \"@opentag/local-runtime\";\nimport {\n startSlackIngress,\n startSlackSocketModeIngress,\n type SlackEventsApiIngressConfig,\n type SlackIngressHandle,\n type SlackSocketModeIngressConfig,\n type SlackSocketModeIngressHandle\n} from \"@opentag/slack\";\nimport {\n defaultConfigPath,\n ensurePrivateDirectory,\n readCliConfig,\n relayUrlFromConfig,\n runtimeModeFromConfig,\n type OpenTagCliConfig\n} from \"./config.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { githubLocalWebhookUrl, githubPublicWebhookUrlPlaceholder, githubWebhooksSettingsUrl } from \"./platforms/github/display.js\";\nimport { DEFAULT_GITHUB_WEBHOOK_PORT, DEFAULT_SLACK_EVENTS_PORT } from \"./platforms/ports.js\";\nimport { assertRelayTransportAllowed, relayTrustWarning } from \"./relay-security.js\";\n\nexport type StartCommandOptions = {\n config?: string;\n background?: boolean;\n};\n\ntype Logger = Pick<Console, \"log\">;\n\nexport type StartRuntimeDependencies = {\n assertStartPortsAvailable?: typeof assertStartPortsAvailable;\n bootstrapDispatcher?: typeof bootstrapLocalDispatcher;\n env?: NodeJS.ProcessEnv;\n logger?: Logger;\n serveDaemon?: typeof serveDaemon;\n startDispatcher?: typeof startDispatcher;\n startGitHubIngress?: typeof startGitHubIngress;\n startLarkIngress?: typeof startLarkIngress;\n startSlackIngress?: typeof startSlackIngress;\n startSlackSocketModeIngress?: typeof startSlackSocketModeIngress;\n waitForDispatcher?: typeof waitForDispatcher;\n};\n\nexport type StartFromConfigInput = {\n config: OpenTagCliConfig;\n configPath: string;\n dependencies?: StartRuntimeDependencies;\n listenForProcessSignals?: boolean;\n signal?: AbortSignal;\n};\n\nexport type BootstrapClient = {\n registerRunner(name?: string): Promise<void>;\n bindRepository(binding: RepositoryBindingConfig): Promise<void>;\n bindChannel(binding: ChannelBindingInput): Promise<void>;\n};\n\ntype PlatformIngressHandle =\n | { platform: \"lark\"; url?: string; handle: LarkIngressHandle }\n | { platform: \"slack\"; mode: \"events_api\"; url: string; handle: SlackIngressHandle }\n | { platform: \"slack\"; mode: \"socket_mode\"; handle: SlackSocketModeIngressHandle }\n | { platform: \"github\"; url: string; webhookPath: string; handle: GitHubIngressHandle };\n\nfunction dispatcherPortFromUrl(dispatcherUrl: string): number {\n const url = new URL(dispatcherUrl);\n if (url.protocol !== \"http:\" || (url.hostname !== \"localhost\" && url.hostname !== \"127.0.0.1\")) {\n throw new Error(\"opentag start currently supports only local http dispatcher URLs.\");\n }\n if (url.pathname !== \"/\" || url.search || url.hash) {\n throw new Error(\"Dispatcher URL must not include a path, query, or hash.\");\n }\n const port = url.port ? Number(url.port) : 80;\n if (!Number.isInteger(port) || port <= 0) {\n throw new Error(`Dispatcher URL has an invalid port: ${dispatcherUrl}`);\n }\n return port;\n}\n\nfunction requireLarkConfig(config: OpenTagCliConfig): NonNullable<OpenTagCliConfig[\"platforms\"][\"lark\"]> {\n const lark = config.platforms.lark;\n if (!lark) {\n throw new Error(\"This config has no Lark platform config.\");\n }\n return lark;\n}\n\nfunction requireSlackConfig(config: OpenTagCliConfig): NonNullable<OpenTagCliConfig[\"platforms\"][\"slack\"]> {\n const slack = config.platforms.slack;\n if (!slack) {\n throw new Error(\"This config has no Slack platform config.\");\n }\n return slack;\n}\n\nfunction requireGitHubConfig(config: OpenTagCliConfig): NonNullable<OpenTagCliConfig[\"platforms\"][\"github\"]> {\n const github = config.platforms.github;\n if (!github) {\n throw new Error(\"This config has no GitHub platform config.\");\n }\n return github;\n}\n\nfunction hasStartablePlatform(config: OpenTagCliConfig): boolean {\n return Boolean(config.platforms.lark || config.platforms.slack || config.platforms.github);\n}\n\nfunction positiveIntegerFromEnv(name: string, value: string | undefined): number | undefined {\n if (!value) return undefined;\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`${name} must be a positive integer`);\n }\n return parsed;\n}\n\nfunction maxRequestBodyBytesFromEnv(env?: NodeJS.ProcessEnv): number | undefined {\n return positiveIntegerFromEnv(\"OPENTAG_MAX_REQUEST_BODY_BYTES\", env?.OPENTAG_MAX_REQUEST_BODY_BYTES);\n}\n\ntype LocalPortCheck = {\n label: string;\n port: number;\n fix: string;\n};\n\nfunction localStartPortChecks(config: OpenTagCliConfig): LocalPortCheck[] {\n const checks: LocalPortCheck[] = [\n {\n label: \"dispatcher\",\n port: dispatcherPortFromUrl(config.daemon.dispatcherUrl),\n fix: \"Change daemon.dispatcherUrl in the OpenTag config.\"\n }\n ];\n const slack = config.platforms.slack;\n if (slack && slackModeFromCliConfig(config) === \"events_api\") {\n checks.push({\n label: \"Slack Events API\",\n port: slack.port ?? DEFAULT_SLACK_EVENTS_PORT,\n fix: \"Run `opentag setup --platform slack --slack-mode events_api --slack-port <port> --force`, or edit platforms.slack.port in the OpenTag config.\"\n });\n }\n const github = config.platforms.github;\n if (github) {\n checks.push({\n label: \"GitHub local webhook\",\n port: github.port ?? DEFAULT_GITHUB_WEBHOOK_PORT,\n fix: \"Run `opentag setup --platform github --github-port <port> --force`, or edit platforms.github.port in the OpenTag config.\"\n });\n }\n return checks;\n}\n\nasync function assertPortAvailable(check: LocalPortCheck): Promise<void> {\n const server = createServer();\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EADDRINUSE\") {\n reject(\n new Error(\n [\n `OpenTag cannot start ${check.label} because port ${check.port} is already in use.`,\n check.fix,\n `To inspect the current process: lsof -nP -iTCP:${check.port} -sTCP:LISTEN`\n ].join(\"\\n\")\n )\n );\n return;\n }\n reject(\n new Error(\n [`OpenTag cannot start ${check.label} on port ${check.port}: ${error.message}`, check.fix].join(\"\\n\")\n )\n );\n });\n // Tunnels commonly forward to localhost/127.0.0.1; this catches the real\n // collision even when another address family would still let Node listen.\n server.listen(check.port, \"127.0.0.1\", () => {\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n });\n}\n\nexport async function assertStartPortsAvailable(config: OpenTagCliConfig): Promise<void> {\n const checks = localStartPortChecks(config);\n const seen = new Map<number, LocalPortCheck>();\n for (const check of checks) {\n const existing = seen.get(check.port);\n if (existing) {\n throw new Error(\n [\n `OpenTag cannot start because ${existing.label} and ${check.label} both use port ${check.port}.`,\n `${existing.label}: ${existing.fix}`,\n `${check.label}: ${check.fix}`\n ].join(\"\\n\")\n );\n }\n seen.set(check.port, check);\n }\n for (const check of checks) {\n await assertPortAvailable(check);\n }\n}\n\nexport function dispatcherRuntimeInputFromCliConfig(\n config: OpenTagCliConfig,\n input: { env?: NodeJS.ProcessEnv } = {}\n): LocalDispatcherRuntimeInput {\n if (!hasStartablePlatform(config)) {\n throw new Error(\"This config has no startable platform. Run `opentag setup` and choose Lark, Slack, or GitHub.\");\n }\n const lark = config.platforms.lark;\n const slack = config.platforms.slack;\n const github = config.platforms.github;\n if (github && !config.daemon.githubToken) {\n throw new Error(\"GitHub platform requires daemon.githubToken for callbacks.\");\n }\n if (github && !config.daemon.preparePullRequestBranch && !config.daemon.allowAutoCreatePullRequest) {\n throw new Error(\n \"GitHub platform requires daemon.preparePullRequestBranch=true unless legacy daemon.allowAutoCreatePullRequest is enabled. Run `opentag setup` and choose GitHub to update this config.\"\n );\n }\n return {\n port: dispatcherPortFromUrl(config.daemon.dispatcherUrl),\n databasePath: config.state.databasePath,\n ...dispatcherRuntimeHardeningInputFromEnv(input.env ?? process.env),\n ...(config.daemon.pairingToken ? { pairingToken: config.daemon.pairingToken } : {}),\n ...(config.daemon.runnerToken ? { runnerToken: config.daemon.runnerToken } : {}),\n ...(config.daemon.runnerTokens ? { runnerTokens: config.daemon.runnerTokens } : {}),\n ...(config.daemon.revokedRunnerTokenFingerprints\n ? { revokedRunnerTokenFingerprints: config.daemon.revokedRunnerTokenFingerprints }\n : {}),\n ...(config.daemon.githubToken ? { githubToken: config.daemon.githubToken } : {}),\n ...(config.daemon.githubToken ? { githubCallbackToken: config.daemon.githubToken } : {}),\n ...(config.daemon.githubApplyToken !== undefined\n ? { githubApplyToken: config.daemon.githubApplyToken }\n : config.daemon.githubToken\n ? { githubApplyToken: config.daemon.githubToken }\n : {}),\n ...(lark\n ? {\n lark: {\n appId: lark.appId,\n appSecret: lark.appSecret,\n domain: lark.domain\n }\n }\n : {}),\n ...(slack ? { slackBotToken: slack.botToken } : {})\n };\n}\n\nfunction defaultRepoBindingFromConfig(config: OpenTagCliConfig): LarkIngressConfig[\"defaultRepoBinding\"] {\n if (config.platforms.lark?.defaultProjectBinding === false) return undefined;\n if (config.daemon.repositories.length !== 1) return undefined;\n const repository = config.daemon.repositories[0];\n if (!repository) return undefined;\n return {\n repoProvider: repository.provider,\n owner: repository.owner,\n repo: repository.repo\n };\n}\n\nexport function larkIngressConfigFromCliConfig(config: OpenTagCliConfig): LarkIngressConfig {\n const lark = requireLarkConfig(config);\n const defaultRepoBinding = defaultRepoBindingFromConfig(config);\n return {\n appId: lark.appId,\n appSecret: lark.appSecret,\n dispatcherUrl: config.daemon.dispatcherUrl,\n domain: lark.domain,\n agentId: DEFAULT_AGENT_ID,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n ...(lark.botOpenId ? { botOpenId: lark.botOpenId } : {}),\n ...(config.daemon.runTimeoutMs ? { runTimeoutMs: config.daemon.runTimeoutMs } : {}),\n ...(defaultRepoBinding ? { defaultRepoBinding } : {})\n };\n}\n\nfunction slackModeFromCliConfig(config: OpenTagCliConfig): \"socket_mode\" | \"events_api\" {\n const slack = requireSlackConfig(config);\n return slack.mode ?? \"events_api\";\n}\n\nexport function slackIngressConfigFromCliConfig(\n config: OpenTagCliConfig,\n input: { env?: NodeJS.ProcessEnv } = {}\n): SlackEventsApiIngressConfig {\n const slack = requireSlackConfig(config);\n if (!slack.signingSecret) {\n throw new Error(\"Slack Events API mode requires platforms.slack.signingSecret.\");\n }\n const maxRequestBodyBytes = maxRequestBodyBytesFromEnv(input.env);\n return {\n signingSecret: slack.signingSecret,\n dispatcherUrl: config.daemon.dispatcherUrl,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n botToken: slack.botToken,\n ...(slack.appId ? { appId: slack.appId } : {}),\n ...(config.daemon.runTimeoutMs ? { runTimeoutMs: config.daemon.runTimeoutMs } : {}),\n ...(maxRequestBodyBytes ? { maxRequestBodyBytes } : {}),\n ...(slack.port ? { port: slack.port } : {})\n };\n}\n\nexport function slackSocketModeIngressConfigFromCliConfig(config: OpenTagCliConfig): SlackSocketModeIngressConfig {\n const slack = requireSlackConfig(config);\n if (!slack.appToken) {\n throw new Error(\"Slack Socket Mode requires platforms.slack.appToken.\");\n }\n return {\n appToken: slack.appToken,\n dispatcherUrl: config.daemon.dispatcherUrl,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n botToken: slack.botToken,\n ...(config.daemon.runTimeoutMs ? { runTimeoutMs: config.daemon.runTimeoutMs } : {}),\n ...(slack.appId ? { appId: slack.appId } : {})\n };\n}\n\nexport function githubIngressConfigFromCliConfig(\n config: OpenTagCliConfig,\n input: { env?: NodeJS.ProcessEnv } = {}\n): GitHubIngressConfig {\n const github = requireGitHubConfig(config);\n const maxRequestBodyBytes = maxRequestBodyBytesFromEnv(input.env);\n return {\n webhookSecret: github.webhookSecret,\n dispatcherUrl: config.daemon.dispatcherUrl,\n ...(config.daemon.pairingToken ? { dispatcherToken: config.daemon.pairingToken } : {}),\n ...(maxRequestBodyBytes ? { maxRequestBodyBytes } : {}),\n port: github.port ?? DEFAULT_GITHUB_WEBHOOK_PORT,\n ...(github.webhookPath ? { webhookPath: github.webhookPath } : {})\n };\n}\n\nexport async function bootstrapLocalDispatcher(config: OpenTagCliConfig, client?: BootstrapClient): Promise<void> {\n const admin =\n client ??\n createDispatcherAdminClient({\n dispatcherUrl: config.daemon.dispatcherUrl,\n runnerId: config.daemon.runnerId,\n ...(config.daemon.pairingToken ? { pairingToken: config.daemon.pairingToken } : {})\n });\n\n await admin.registerRunner(config.daemon.runnerId);\n for (const repository of config.daemon.repositories) {\n await admin.bindRepository({\n provider: repository.provider,\n owner: repository.owner,\n repo: repository.repo,\n checkoutPath: repository.checkoutPath,\n ...(repository.defaultExecutor ? { defaultExecutor: repository.defaultExecutor } : {}),\n ...(repository.baseBranch ? { baseBranch: repository.baseBranch } : {}),\n ...(repository.pushRemote ? { pushRemote: repository.pushRemote } : {}),\n ...(repository.worktreeRoot ? { worktreeRoot: repository.worktreeRoot } : {}),\n ...(repository.keepWorktree ? { keepWorktree: repository.keepWorktree } : {})\n });\n }\n for (const binding of normalizeChannelBindings(config.daemon)) {\n await admin.bindChannel({\n provider: binding.provider,\n accountId: binding.accountId,\n conversationId: binding.conversationId,\n repoProvider: binding.repoProvider,\n owner: binding.owner,\n repo: binding.repo,\n ...(binding.metadata ? { metadata: binding.metadata } : {})\n });\n }\n}\n\nexport async function waitForDispatcher(input: {\n dispatcherUrl: string;\n fetchImpl?: typeof fetch;\n attempts?: number;\n delayMs?: number;\n timeoutMs?: number;\n}): Promise<void> {\n const attempts = input.attempts ?? 60;\n const delayMs = input.delayMs ?? 500;\n const timeoutMs = input.timeoutMs ?? 1_000;\n const healthUrl = `${input.dispatcherUrl.replace(/\\/$/, \"\")}/healthz`;\n\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n const healthy = await probeDispatcherHealth({\n dispatcherUrl: input.dispatcherUrl,\n ...(input.fetchImpl ? { fetchImpl: input.fetchImpl } : {}),\n timeoutMs\n });\n if (healthy) return;\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n\n throw new Error(`Dispatcher did not become healthy at ${healthUrl}.`);\n}\n\nfunction waitForAbort(signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n signal.addEventListener(\"abort\", () => resolve(), { once: true });\n });\n}\n\nexport function shouldRethrowAbortReason(input: { shutdownRequested: boolean; reason: unknown }): boolean {\n return !input.shutdownRequested && input.reason instanceof Error;\n}\n\nfunction defaultStartDependencies(dependencies: StartRuntimeDependencies = {}) {\n return {\n assertStartPortsAvailable: dependencies.assertStartPortsAvailable ?? assertStartPortsAvailable,\n bootstrapDispatcher: dependencies.bootstrapDispatcher ?? bootstrapLocalDispatcher,\n env: dependencies.env ?? process.env,\n logger: dependencies.logger ?? console,\n serveDaemon: dependencies.serveDaemon ?? serveDaemon,\n startDispatcher: dependencies.startDispatcher ?? startDispatcher,\n startGitHubIngress: dependencies.startGitHubIngress ?? startGitHubIngress,\n startLarkIngress: dependencies.startLarkIngress ?? startLarkIngress,\n startSlackIngress: dependencies.startSlackIngress ?? startSlackIngress,\n startSlackSocketModeIngress: dependencies.startSlackSocketModeIngress ?? startSlackSocketModeIngress,\n waitForDispatcher: dependencies.waitForDispatcher ?? waitForDispatcher\n };\n}\n\nfunction addAbortHandlers(input: StartFromConfigInput, abortController: AbortController): {\n shutdownRequested(): boolean;\n dispose(): void;\n} {\n let shutdownRequested = false;\n const abortGracefully = (reason?: unknown) => {\n shutdownRequested = true;\n if (!abortController.signal.aborted) {\n abortController.abort(reason);\n }\n };\n\n const onProcessSignal = () => abortGracefully();\n const onExternalAbort = () => abortGracefully(input.signal?.reason);\n\n if (input.listenForProcessSignals !== false) {\n process.once(\"SIGINT\", onProcessSignal);\n process.once(\"SIGTERM\", onProcessSignal);\n }\n if (input.signal) {\n if (input.signal.aborted) {\n onExternalAbort();\n } else {\n input.signal.addEventListener(\"abort\", onExternalAbort, { once: true });\n }\n }\n\n return {\n shutdownRequested: () => shutdownRequested,\n dispose() {\n if (input.listenForProcessSignals !== false) {\n process.off(\"SIGINT\", onProcessSignal);\n process.off(\"SIGTERM\", onProcessSignal);\n }\n input.signal?.removeEventListener(\"abort\", onExternalAbort);\n }\n };\n}\n\nfunction abortOnSubsystemFailure(promise: Promise<void>, abortController: AbortController): void {\n promise.catch((error: unknown) => {\n if (!abortController.signal.aborted) {\n abortController.abort(error);\n }\n });\n}\n\nfunction assertRelayModePlatformsSupported(config: OpenTagCliConfig): void {\n const unsupported = [\n ...(config.platforms.lark ? [\"Lark / Feishu\"] : []),\n ...(config.platforms.slack ? [\"Slack\"] : [])\n ];\n if (unsupported.length > 0) {\n throw new Error(\n `Relay mode currently supports GitHub-backed ingress only. ${unsupported.join(\", \")} configs still require local mode.`\n );\n }\n}\n\nexport function githubRelayWebhookUrl(config: OpenTagCliConfig): string {\n const relayUrl = relayUrlFromConfig(config) ?? config.daemon.dispatcherUrl;\n return `${relayUrl.replace(/\\/$/, \"\")}/github/webhooks`;\n}\n\nasync function startLocalMode(input: StartFromConfigInput, abortController: AbortController, shutdownRequested: () => boolean): Promise<void> {\n const dependencies = defaultStartDependencies(input.dependencies);\n const logger = dependencies.logger;\n const config = input.config;\n const env = dependencies.env ?? process.env;\n const ingresses: PlatformIngressHandle[] = [];\n const dispatcher = dependencies.startDispatcher(dispatcherRuntimeInputFromCliConfig(config, { env }));\n let originalError: unknown;\n\n try {\n await dependencies.waitForDispatcher({ dispatcherUrl: config.daemon.dispatcherUrl });\n await dependencies.bootstrapDispatcher(config);\n\n const daemonPromise = dependencies.serveDaemon({\n ...createDaemonRuntimeInput(config.daemon),\n signal: abortController.signal\n });\n abortOnSubsystemFailure(daemonPromise, abortController);\n\n if (config.platforms.lark) {\n const handle = dependencies.startLarkIngress(larkIngressConfigFromCliConfig(config));\n ingresses.push({ platform: \"lark\", handle });\n abortOnSubsystemFailure(handle.startPromise, abortController);\n }\n if (config.platforms.slack) {\n if (slackModeFromCliConfig(config) === \"socket_mode\") {\n const handle = dependencies.startSlackSocketModeIngress(slackSocketModeIngressConfigFromCliConfig(config));\n ingresses.push({ platform: \"slack\", mode: \"socket_mode\", handle });\n abortOnSubsystemFailure(handle.startPromise, abortController);\n } else {\n const handle = dependencies.startSlackIngress(slackIngressConfigFromCliConfig(config, { env }));\n ingresses.push({ platform: \"slack\", mode: \"events_api\", url: handle.url, handle });\n }\n }\n if (config.platforms.github) {\n const handle = dependencies.startGitHubIngress(githubIngressConfigFromCliConfig(config, { env }));\n ingresses.push({ platform: \"github\", url: handle.url, webhookPath: handle.webhookPath, handle });\n }\n\n logger.log(\"OpenTag is running.\");\n logger.log(`Config: ${input.configPath}`);\n logger.log(`Dispatcher: ${config.daemon.dispatcherUrl}`);\n for (const ingress of ingresses) {\n if (ingress.platform === \"slack\") {\n const slack = config.platforms.slack!;\n if (ingress.mode === \"socket_mode\") {\n logger.log(\"Slack: using Socket Mode\");\n logger.log(`Slack channel binding: ${slack.teamId}/${slack.channelId}`);\n logger.log(\"Before testing, invite the Slack app to that channel with /invite @your app name.\");\n } else {\n logger.log(`Slack Events: ${ingress.url}/slack/events`);\n logger.log(`Slack channel binding: ${slack.teamId}/${slack.channelId}`);\n logger.log(\"Before testing, invite the Slack app to that channel with /invite @your app name.\");\n }\n } else if (ingress.platform === \"github\") {\n const github = config.platforms.github!;\n logger.log(`GitHub local webhook: ${githubLocalWebhookUrl({ port: github.port, webhookPath: ingress.webhookPath })}`);\n logger.log(`GitHub Payload URL: ${githubPublicWebhookUrlPlaceholder(ingress.webhookPath)}`);\n logger.log(`GitHub settings: ${githubWebhooksSettingsUrl(github)}`);\n logger.log(`Tunnel example: ngrok http ${github.port ?? DEFAULT_GITHUB_WEBHOOK_PORT}`);\n } else {\n logger.log(\"Lark / Feishu: connected through Personal Agent long connection\");\n }\n }\n logger.log(\"Press Ctrl-C to stop.\");\n\n await waitForAbort(abortController.signal);\n const reason = abortController.signal.reason;\n if (shouldRethrowAbortReason({ shutdownRequested: shutdownRequested(), reason })) {\n throw reason;\n }\n } catch (error) {\n originalError = error;\n throw error;\n } finally {\n abortController.abort();\n await Promise.allSettled([...ingresses].reverse().map((ingress) => ingress.handle.close()));\n try {\n await dispatcher.close();\n } catch (error) {\n if (originalError !== undefined) {\n logger.log(`OpenTag dispatcher close failed during shutdown: ${error instanceof Error ? error.message : String(error)}`);\n } else {\n throw error;\n }\n }\n }\n}\n\nasync function startRelayMode(input: StartFromConfigInput, abortController: AbortController, shutdownRequested: () => boolean): Promise<void> {\n const dependencies = defaultStartDependencies(input.dependencies);\n const logger = dependencies.logger;\n const config = input.config;\n assertRelayModePlatformsSupported(config);\n const relayUrl = relayUrlFromConfig(config) ?? config.daemon.dispatcherUrl;\n assertRelayTransportAllowed(relayUrl);\n\n await dependencies.waitForDispatcher({ dispatcherUrl: config.daemon.dispatcherUrl });\n await dependencies.bootstrapDispatcher(config);\n\n try {\n const daemonPromise = dependencies.serveDaemon({\n ...createDaemonRuntimeInput(config.daemon),\n signal: abortController.signal\n });\n abortOnSubsystemFailure(daemonPromise, abortController);\n\n logger.log(\"OpenTag is running in relay mode.\");\n logger.log(`Config: ${input.configPath}`);\n logger.log(`Relay: ${relayUrl}`);\n logger.log(relayTrustWarning(relayUrl));\n logger.log(\"Local dispatcher: disabled\");\n logger.log(`Runner: ${config.daemon.runnerId}`);\n if (config.platforms.github) {\n logger.log(`GitHub webhook URL: ${githubRelayWebhookUrl(config)}`);\n logger.log(\"GitHub webhook secret: the relay must verify the configured secret before creating runs.\");\n }\n logger.log(\"Press Ctrl-C to stop.\");\n\n await waitForAbort(abortController.signal);\n const reason = abortController.signal.reason;\n if (shouldRethrowAbortReason({ shutdownRequested: shutdownRequested(), reason })) {\n throw reason;\n }\n } finally {\n abortController.abort();\n }\n}\n\nexport async function startFromConfig(input: StartFromConfigInput): Promise<void> {\n ensurePrivateDirectory(input.config.state.directory);\n ensurePrivateDirectory(input.config.state.worktreeRoot);\n\n const dependencies = defaultStartDependencies(input.dependencies);\n if (runtimeModeFromConfig(input.config) === \"local\") {\n await dependencies.assertStartPortsAvailable(input.config);\n }\n\n const abortController = new AbortController();\n const abortHandlers = addAbortHandlers(input, abortController);\n try {\n if (runtimeModeFromConfig(input.config) === \"relay\") {\n await startRelayMode(input, abortController, abortHandlers.shutdownRequested);\n return;\n }\n await startLocalMode(input, abortController, abortHandlers.shutdownRequested);\n } finally {\n abortHandlers.dispose();\n }\n}\n\nexport async function runStartCommand(options: StartCommandOptions): Promise<void> {\n const configPath = options.config ?? defaultConfigPath();\n const config = readCliConfig(configPath);\n await startFromConfig({ config, configPath });\n}\n","export const DEFAULT_SLACK_EVENTS_PORT = 3040;\nexport const DEFAULT_GITHUB_WEBHOOK_PORT = 3050;\nexport const DEFAULT_GITLAB_WEBHOOK_PORT = 3060;\n\nexport function parseLocalPort(value: string | number, label: string): number {\n const port = typeof value === \"number\" ? value : Number(value.trim());\n if (!Number.isInteger(port) || port < 1 || port > 65535) {\n throw new Error(`${label} must be an integer from 1 to 65535.`);\n }\n return port;\n}\n","import { DEFAULT_GITHUB_WEBHOOK_PORT } from \"../ports.js\";\n\nexport function githubLocalWebhookUrl(input: { port?: number | undefined; webhookPath?: string | undefined }): string {\n return `http://127.0.0.1:${input.port ?? DEFAULT_GITHUB_WEBHOOK_PORT}${input.webhookPath ?? \"/github/webhooks\"}`;\n}\n\nexport function githubPublicWebhookUrlPlaceholder(webhookPath = \"/github/webhooks\"): string {\n return `https://<your-tunnel-host>${webhookPath}`;\n}\n\nexport function githubWebhooksSettingsUrl(input: { owner: string; repo: string }): string {\n return `https://github.com/${input.owner}/${input.repo}/settings/hooks`;\n}\n","import { defaultConfigPath, readCliConfig, writeCliConfigAtomic, type OpenTagCliConfig } from \"./config.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { formatConfiguredProjectTargetSummary } from \"./project-target-summary.js\";\nimport { assertRelayTransportAllowed, relayTrustWarning } from \"./relay-security.js\";\nimport { bootstrapLocalDispatcher, type BootstrapClient } from \"./start.js\";\n\nexport type PairCommandOptions = {\n config?: string;\n relay?: string;\n register?: boolean;\n};\n\nexport type PairRelayDependencies = {\n fetchImpl?: typeof fetch;\n bootstrapClient?: BootstrapClient;\n logger?: Pick<Console, \"log\" | \"warn\">;\n healthTimeoutMs?: number;\n};\n\ntype PairRelaySummaryInput = {\n configPath: string;\n config: OpenTagCliConfig;\n relayUrl: string;\n registered: boolean;\n};\n\nfunction stripTrailingSlash(value: string): string {\n return value.endsWith(\"/\") ? value.slice(0, -1) : value;\n}\n\nexport function normalizeRelayUrl(rawRelayUrl: string): string {\n const raw = rawRelayUrl.trim();\n if (!raw) {\n throw new Error(\"Relay URL must not be empty.\");\n }\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new Error(`Relay URL must be a valid http or https URL: ${rawRelayUrl}`);\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"Relay URL must use http or https.\");\n }\n if (url.username || url.password) {\n throw new Error(\"Relay URL must not include credentials.\");\n }\n if (url.search || url.hash) {\n throw new Error(\"Relay URL must not include a query string or fragment.\");\n }\n return stripTrailingSlash(url.toString());\n}\n\nexport function inferRelayProvider(relayUrl: string): string {\n const hostname = new URL(relayUrl).hostname.toLowerCase();\n return hostname.includes(\"railway\") ? \"railway\" : \"custom\";\n}\n\nexport function relayConfigFrom(input: { config: OpenTagCliConfig; relayUrl: string }): OpenTagCliConfig {\n const relayProvider = inferRelayProvider(input.relayUrl);\n return {\n ...input.config,\n runtime: {\n mode: \"relay\",\n relayUrl: input.relayUrl,\n relayProvider\n },\n daemon: {\n ...input.config.daemon,\n dispatcherUrl: input.relayUrl\n }\n };\n}\n\nfunction githubRelayWebhookUrl(relayUrl: string): string {\n return `${stripTrailingSlash(relayUrl)}/github/webhooks`;\n}\n\nexport function formatPairRelaySummary(input: PairRelaySummaryInput): string {\n const projectTargets = input.config.daemon.repositories.map((repository) => {\n return ` ${formatConfiguredProjectTargetSummary(repository)}`;\n });\n return [\n \"OpenTag relay pairing updated.\",\n `Config: ${input.configPath}`,\n `Relay: ${input.relayUrl}`,\n `Runner: ${input.config.daemon.runnerId}`,\n `Registration: ${input.registered ? \"completed\" : \"skipped\"}`,\n relayTrustWarning(input.relayUrl),\n \"Project Targets:\",\n ...(projectTargets.length ? projectTargets : [\" none\"]),\n ...(input.config.platforms.github ? [`GitHub webhook URL: ${githubRelayWebhookUrl(input.relayUrl)}`] : []),\n \"Next steps:\",\n ` opentag start --config ${input.configPath}`,\n \" opentag service start\"\n ].join(\"\\n\");\n}\n\nexport async function runPairCommand(options: PairCommandOptions, dependencies: PairRelayDependencies = {}): Promise<void> {\n if (!options.relay) {\n throw new Error(\"opentag pair currently requires --relay <url>.\");\n }\n\n const logger = dependencies.logger ?? console;\n const configPath = options.config ?? defaultConfigPath();\n const relayUrl = normalizeRelayUrl(options.relay);\n assertRelayTransportAllowed(relayUrl);\n const config = readCliConfig(configPath);\n\n const healthy = await probeDispatcherHealth({\n dispatcherUrl: relayUrl,\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}),\n timeoutMs: dependencies.healthTimeoutMs ?? 5_000\n });\n if (!healthy) {\n throw new Error(`Relay health check failed at ${relayUrl}/healthz.`);\n }\n\n const updated = relayConfigFrom({ config, relayUrl });\n\n const shouldRegister = options.register !== false;\n if (shouldRegister) {\n await bootstrapLocalDispatcher(updated, dependencies.bootstrapClient);\n }\n\n writeCliConfigAtomic(configPath, updated);\n\n logger.log(\n formatPairRelaySummary({\n configPath,\n config: updated,\n relayUrl,\n registered: shouldRegister\n })\n );\n}\n","import { spawnSync } from \"node:child_process\";\nimport { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, rmSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport {\n defaultConfigPath,\n defaultStateDirectory,\n ensurePrivateDirectory,\n readCliConfig,\n readRedactedCliConfig,\n relayUrlFromConfig,\n runtimeModeFromConfig,\n type OpenTagCliConfig,\n type PathEnvironment\n} from \"./config.js\";\nimport {\n dispatcherRuntimeHardeningInputFromEnv,\n doctorHasFailures,\n executorsFromConfig,\n runDoctor,\n type DoctorCheck\n} from \"@opentag/local-runtime\";\nimport type { CommandRunner } from \"@opentag/runner\";\nimport { formatConfiguredCapabilities } from \"./catalogs/capabilities.js\";\nimport type { PlatformId } from \"./catalogs/platforms.js\";\nimport { formatRelaySecurityChecks, relaySecurityChecksFromConfig } from \"./relay-security.js\";\nimport { formatSecretReadiness } from \"./secret-readiness.js\";\nimport { probeDispatcherHealth } from \"./health.js\";\nimport { runStartCommand } from \"./start.js\";\n\nexport const SERVICE_LABEL = \"im.opentag.agent\";\n\nexport type ServiceCommandOptions = {\n config?: string;\n lines?: string | number;\n maxRequestBodyBytes?: string | number;\n mode?: string;\n rateLimitDisabled?: boolean;\n rateLimitMaxRequests?: string | number;\n rateLimitWindowMs?: string | number;\n};\n\nexport type CommandResult = {\n status: number;\n stdout: string;\n stderr: string;\n};\n\nexport type ServiceDependencies = {\n cliEntry?: string;\n codexConfigPath?: string;\n commandRunner?: CommandRunner;\n env?: PathEnvironment;\n fetchImpl?: typeof fetch;\n healthTimeoutMs?: number;\n homeDir?: string;\n launchctl?: (args: string[]) => CommandResult;\n logger?: Pick<Console, \"log\">;\n nodePath?: string;\n platform?: NodeJS.Platform;\n sleep?: (ms: number) => Promise<void>;\n systemctl?: (args: string[]) => CommandResult;\n uid?: number;\n};\n\nexport type ServicePaths = {\n configPath: string;\n label: string;\n logsDir: string;\n plistPath: string;\n stderrPath: string;\n stdoutPath: string;\n unitPath: string;\n};\n\nexport type ServiceController = \"launchd\" | \"systemd\" | \"unsupported\";\n\nexport type ServiceStatusSummary = ServicePaths & {\n autostart: \"enabled\" | \"disabled\" | \"unknown\";\n controller: ServiceController;\n installed: boolean;\n relayUrl?: string;\n relaySecurity: string[];\n running: \"running\" | \"stopped\" | \"unknown\";\n runtimeMode: \"local\" | \"relay\" | \"unknown\";\n runtimeReadiness: \"ready\" | \"starting\" | \"degraded\" | \"stale_heartbeat\" | \"unreachable\" | \"unverified\" | \"stopped\" | \"unknown\";\n runtimeReadinessDetail?: string;\n runtimeDiagnostics?: string[];\n connectors: string[];\n secrets: string[];\n capabilities: string[];\n serviceHardening: string[];\n};\n\nconst serviceHardeningEnvKeys = [\n \"OPENTAG_MAX_REQUEST_BODY_BYTES\",\n \"OPENTAG_RATE_LIMIT_WINDOW_MS\",\n \"OPENTAG_RATE_LIMIT_MAX_REQUESTS\",\n \"OPENTAG_RATE_LIMIT_DISABLED\"\n] as const;\n\nconst launchAgentCliPath = [\n \"/opt/homebrew/bin\",\n \"/opt/homebrew/sbin\",\n \"/usr/local/bin\",\n \"/usr/bin\",\n \"/bin\",\n \"/usr/sbin\",\n \"/sbin\"\n].join(\":\");\n\nfunction linuxServiceCliPath(home: string): string {\n return [\n join(home, \".local\", \"bin\"),\n join(home, \".npm-global\", \"bin\"),\n join(home, \".bun\", \"bin\"),\n \"/usr/local/bin\",\n \"/usr/bin\",\n \"/bin\",\n \"/usr/local/sbin\",\n \"/usr/sbin\",\n \"/sbin\"\n ].join(\":\");\n}\n\nfunction loggerFrom(dependencies: ServiceDependencies): Pick<Console, \"log\"> {\n return dependencies.logger ?? console;\n}\n\nfunction platformFrom(dependencies: ServiceDependencies): NodeJS.Platform {\n return dependencies.platform ?? process.platform;\n}\n\nfunction homeFrom(dependencies: ServiceDependencies): string {\n return dependencies.homeDir ?? homedir();\n}\n\nfunction uidFrom(dependencies: ServiceDependencies): number {\n return dependencies.uid ?? (typeof process.getuid === \"function\" ? process.getuid() : 0);\n}\n\nexport function serviceControllerForPlatform(platform: NodeJS.Platform = process.platform): ServiceController {\n if (platform === \"darwin\") return \"launchd\";\n if (platform === \"linux\") return \"systemd\";\n return \"unsupported\";\n}\n\nfunction serviceControllerFrom(dependencies: ServiceDependencies): ServiceController {\n return serviceControllerForPlatform(platformFrom(dependencies));\n}\n\nexport function servicePaths(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const home = homeFrom(dependencies);\n const env = dependencies.env ?? process.env;\n const configPath = options.config ?? defaultConfigPath(env, home);\n const stateDirectory = defaultStateDirectory(env, home);\n const logsDir = join(stateDirectory, \"logs\");\n return {\n configPath,\n label: SERVICE_LABEL,\n logsDir,\n plistPath: join(home, \"Library\", \"LaunchAgents\", `${SERVICE_LABEL}.plist`),\n stdoutPath: join(logsDir, \"opentag.log\"),\n stderrPath: join(logsDir, \"opentag.err.log\"),\n unitPath: join(home, \".config\", \"systemd\", \"user\", `${SERVICE_LABEL}.service`)\n };\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\");\n}\n\nfunction unescapeXml(value: string): string {\n return value\n .replaceAll(\"&apos;\", \"'\")\n .replaceAll(\"&quot;\", '\"')\n .replaceAll(\"&gt;\", \">\")\n .replaceAll(\"&lt;\", \"<\")\n .replaceAll(\"&amp;\", \"&\");\n}\n\nfunction plistStringArray(values: string[]): string {\n return values.map((value) => ` <string>${escapeXml(value)}</string>`).join(\"\\n\");\n}\n\nexport function buildLaunchAgentPlist(input: {\n environment?: Record<string, string>;\n keepAlive: boolean;\n label: string;\n programArguments: string[];\n runAtLoad: boolean;\n stderrPath: string;\n stdoutPath: string;\n workingDirectory: string;\n}): string {\n const environmentEntries = Object.entries(input.environment ?? {});\n const environment =\n environmentEntries.length > 0\n ? [\n \" <key>EnvironmentVariables</key>\",\n \" <dict>\",\n ...environmentEntries.flatMap(([key, value]) => [\n ` <key>${escapeXml(key)}</key>`,\n ` <string>${escapeXml(value)}</string>`\n ]),\n \" </dict>\"\n ]\n : [];\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n '<plist version=\"1.0\">',\n \"<dict>\",\n \" <key>Label</key>\",\n ` <string>${escapeXml(input.label)}</string>`,\n \" <key>ProgramArguments</key>\",\n \" <array>\",\n plistStringArray(input.programArguments),\n \" </array>\",\n \" <key>RunAtLoad</key>\",\n ` <${input.runAtLoad ? \"true\" : \"false\"}/>`,\n \" <key>KeepAlive</key>\",\n ` <${input.keepAlive ? \"true\" : \"false\"}/>`,\n \" <key>StandardOutPath</key>\",\n ` <string>${escapeXml(input.stdoutPath)}</string>`,\n \" <key>StandardErrorPath</key>\",\n ` <string>${escapeXml(input.stderrPath)}</string>`,\n \" <key>WorkingDirectory</key>\",\n ` <string>${escapeXml(input.workingDirectory)}</string>`,\n ...environment,\n \"</dict>\",\n \"</plist>\",\n \"\"\n ].join(\"\\n\");\n}\n\nfunction systemdQuote(value: string): string {\n return `\"${value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll('\"', '\\\\\"').replaceAll(\"$\", \"\\\\$\").replaceAll(\"%\", \"%%\")}\"`;\n}\n\nfunction systemdPathValue(value: string): string {\n return value.replaceAll(\"%\", \"%%\");\n}\n\nexport function buildSystemdUserService(input: {\n environment?: Record<string, string>;\n execStart: string[];\n label: string;\n stderrPath: string;\n stdoutPath: string;\n workingDirectory: string;\n}): string {\n const environment = Object.entries(input.environment ?? {}).map(\n ([key, value]) => `Environment=${systemdQuote(`${key}=${value}`)}`\n );\n return [\n \"[Unit]\",\n \"Description=OpenTag local agent\",\n \"After=network.target\",\n \"\",\n \"[Service]\",\n \"Type=simple\",\n `WorkingDirectory=${systemdQuote(input.workingDirectory)}`,\n ...environment,\n `ExecStart=${input.execStart.map(systemdQuote).join(\" \")}`,\n \"Restart=always\",\n \"RestartSec=3\",\n `StandardOutput=append:${systemdPathValue(input.stdoutPath)}`,\n `StandardError=append:${systemdPathValue(input.stderrPath)}`,\n \"\",\n \"[Install]\",\n \"WantedBy=default.target\",\n \"\"\n ].join(\"\\n\");\n}\n\nfunction launchctlRunner(dependencies: ServiceDependencies): (args: string[]) => CommandResult {\n if (dependencies.launchctl) return dependencies.launchctl;\n return (args: string[]) => {\n const result = spawnSync(\"launchctl\", args, { encoding: \"utf8\" });\n return {\n status: result.status ?? 1,\n stdout: result.stdout ?? \"\",\n stderr: result.stderr ?? \"\"\n };\n };\n}\n\nfunction systemctlRunner(dependencies: ServiceDependencies): (args: string[]) => CommandResult {\n if (dependencies.systemctl) return dependencies.systemctl;\n return (args: string[]) => {\n const result = spawnSync(\"systemctl\", [\"--user\", ...args], { encoding: \"utf8\" });\n return {\n status: result.status ?? 1,\n stdout: result.stdout ?? \"\",\n stderr: result.stderr ?? \"\"\n };\n };\n}\n\nfunction launchdDomain(dependencies: ServiceDependencies): string {\n return `gui/${uidFrom(dependencies)}`;\n}\n\nfunction launchdServiceTarget(dependencies: ServiceDependencies): string {\n return `${launchdDomain(dependencies)}/${SERVICE_LABEL}`;\n}\n\nfunction unsupportedMessage(): string {\n return \"OpenTag service management is supported on macOS and Linux only. Use `opentag start` in the foreground on this platform.\";\n}\n\nfunction assertSupportedServiceController(dependencies: ServiceDependencies): ServiceController {\n const controller = serviceControllerFrom(dependencies);\n if (controller === \"unsupported\") {\n throw new Error(unsupportedMessage());\n }\n return controller;\n}\n\nfunction runLaunchctlOrThrow(dependencies: ServiceDependencies, args: string[], action: string): CommandResult {\n const result = launchctlRunner(dependencies)(args);\n if (result.status !== 0) {\n const detail = launchctlDetail(result);\n throw new Error(`${action} failed${detail ? `: ${detail}` : \".\"}`);\n }\n return result;\n}\n\nfunction launchctlDetail(result: CommandResult): string {\n return [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join(\"\\n\");\n}\n\nfunction systemctlDetail(result: CommandResult): string {\n return [result.stderr.trim(), result.stdout.trim()].filter(Boolean).join(\"\\n\");\n}\n\nfunction runSystemctlOrThrow(dependencies: ServiceDependencies, args: string[], action: string): CommandResult {\n const result = systemctlRunner(dependencies)(args);\n if (result.status !== 0) {\n const detail = systemctlDetail(result);\n throw new Error(`${action} failed${detail ? `: ${detail}` : \".\"}`);\n }\n return result;\n}\n\nfunction printLaunchdService(dependencies: ServiceDependencies): CommandResult {\n return launchctlRunner(dependencies)([\"print\", launchdServiceTarget(dependencies)]);\n}\n\nfunction systemdUnitName(): string {\n return `${SERVICE_LABEL}.service`;\n}\n\nfunction printSystemdService(dependencies: ServiceDependencies): CommandResult {\n return systemctlRunner(dependencies)([\"is-active\", systemdUnitName()]);\n}\n\nfunction sleepFrom(dependencies: ServiceDependencies): (ms: number) => Promise<void> {\n return dependencies.sleep ?? ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n}\n\nasync function waitForLaunchdLoaded(\n dependencies: ServiceDependencies,\n input: { intervalMs?: number; timeoutMs?: number } = {}\n): Promise<boolean> {\n const intervalMs = input.intervalMs ?? 100;\n const deadline = Date.now() + (input.timeoutMs ?? 1_500);\n while (true) {\n if (printLaunchdService(dependencies).status === 0) return true;\n if (Date.now() >= deadline) return false;\n await sleepFrom(dependencies)(intervalMs);\n }\n}\n\nasync function waitForLaunchdUnloaded(\n dependencies: ServiceDependencies,\n input: { intervalMs?: number; timeoutMs?: number } = {}\n): Promise<boolean> {\n const intervalMs = input.intervalMs ?? 100;\n const deadline = Date.now() + (input.timeoutMs ?? 1_500);\n while (true) {\n if (printLaunchdService(dependencies).status !== 0) return true;\n if (Date.now() >= deadline) return false;\n await sleepFrom(dependencies)(intervalMs);\n }\n}\n\nasync function waitForSystemdActive(\n dependencies: ServiceDependencies,\n input: { intervalMs?: number; timeoutMs?: number } = {}\n): Promise<boolean> {\n const intervalMs = input.intervalMs ?? 100;\n const deadline = Date.now() + (input.timeoutMs ?? 1_500);\n while (true) {\n const result = printSystemdService(dependencies);\n if (result.status === 0 && result.stdout.trim() === \"active\") return true;\n if (Date.now() >= deadline) return false;\n await sleepFrom(dependencies)(intervalMs);\n }\n}\n\nasync function waitForSystemdInactive(\n dependencies: ServiceDependencies,\n input: { intervalMs?: number; timeoutMs?: number } = {}\n): Promise<boolean> {\n const intervalMs = input.intervalMs ?? 100;\n const deadline = Date.now() + (input.timeoutMs ?? 1_500);\n while (true) {\n const result = printSystemdService(dependencies);\n if (result.status !== 0 || result.stdout.trim() !== \"active\") return true;\n if (Date.now() >= deadline) return false;\n await sleepFrom(dependencies)(intervalMs);\n }\n}\n\nasync function waitForServiceLoaded(\n dependencies: ServiceDependencies,\n input: { intervalMs?: number; timeoutMs?: number } = {}\n): Promise<boolean> {\n const controller = serviceControllerFrom(dependencies);\n if (controller === \"launchd\") return waitForLaunchdLoaded(dependencies, input);\n if (controller === \"systemd\") return waitForSystemdActive(dependencies, input);\n return false;\n}\n\nasync function waitForServiceUnloaded(\n dependencies: ServiceDependencies,\n input: { intervalMs?: number; timeoutMs?: number } = {}\n): Promise<boolean> {\n const controller = serviceControllerFrom(dependencies);\n if (controller === \"launchd\") return waitForLaunchdUnloaded(dependencies, input);\n if (controller === \"systemd\") return waitForSystemdInactive(dependencies, input);\n return true;\n}\n\nfunction serviceWorkingDirectory(configPath: string): string {\n const config = readCliConfig(configPath);\n return config.daemon.repositories[0]?.checkoutPath ?? dirname(configPath);\n}\n\nfunction serviceProgramArguments(options: ServiceCommandOptions, dependencies: ServiceDependencies): string[] {\n const paths = servicePaths(options, dependencies);\n return [\n dependencies.nodePath ?? process.execPath,\n dependencies.cliEntry ?? process.argv[1] ?? \"opentag\",\n \"service\",\n \"run\",\n \"--mode\",\n \"background\",\n \"--config\",\n paths.configPath\n ];\n}\n\nfunction positiveIntegerOption(flag: string, value: string | number | undefined): string | undefined {\n if (value === undefined || value === \"\") return undefined;\n const parsed = typeof value === \"number\" ? value : Number(String(value).trim());\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`${flag} must be a positive integer, received ${value}`);\n }\n return String(parsed);\n}\n\nfunction serviceHardeningEnvironment(options: ServiceCommandOptions): Record<string, string> {\n const maxRequestBodyBytes = positiveIntegerOption(\"--max-request-body-bytes\", options.maxRequestBodyBytes);\n const rateLimitWindowMs = positiveIntegerOption(\"--rate-limit-window-ms\", options.rateLimitWindowMs);\n const rateLimitMaxRequests = positiveIntegerOption(\"--rate-limit-max-requests\", options.rateLimitMaxRequests);\n const environment: Record<string, string> = {\n ...(maxRequestBodyBytes ? { OPENTAG_MAX_REQUEST_BODY_BYTES: maxRequestBodyBytes } : {}),\n ...(rateLimitWindowMs ? { OPENTAG_RATE_LIMIT_WINDOW_MS: rateLimitWindowMs } : {}),\n ...(rateLimitMaxRequests ? { OPENTAG_RATE_LIMIT_MAX_REQUESTS: rateLimitMaxRequests } : {}),\n ...(options.rateLimitDisabled ? { OPENTAG_RATE_LIMIT_DISABLED: \"true\" } : {})\n };\n dispatcherRuntimeHardeningInputFromEnv(environment);\n return environment;\n}\n\nfunction configured(value: unknown): boolean {\n return typeof value === \"string\" && value.length > 0;\n}\n\nfunction connectorStatus(ready: boolean, detail: string): string {\n return ready ? `ready (${detail})` : `missing (${detail})`;\n}\n\nfunction formatConnectorReadiness(config: OpenTagCliConfig): string[] {\n const lines = [\"Connectors:\"];\n const github = config.platforms.github;\n if (github) {\n const callbackReady = configured(config.daemon.githubToken);\n const applyReady = config.daemon.githubApplyToken === null ? \"disabled\" : configured(config.daemon.githubApplyToken ?? config.daemon.githubToken) ? \"ready\" : \"missing\";\n lines.push(\n ` github: ingress=repository_webhook path=${github.webhookPath ?? \"/github/webhooks\"} port=${github.port ?? \"default\"}, callback=${connectorStatus(callbackReady, \"daemon.githubToken\")}, apply=${applyReady}, target=github:${github.owner}/${github.repo}`\n );\n }\n\n const slack = config.platforms.slack;\n if (slack) {\n const mode = slack.mode ?? \"events_api\";\n const ingressReady = mode === \"socket_mode\" ? configured(slack.appToken) : configured(slack.signingSecret);\n const ingressDetail = mode === \"socket_mode\" ? \"appToken\" : `signingSecret port=${slack.port ?? \"default\"}`;\n lines.push(\n ` slack: ingress=${mode} ${connectorStatus(ingressReady, ingressDetail)}, callback=${connectorStatus(configured(slack.botToken), \"botToken\")}, source=${slack.teamId}/${slack.channelId}`\n );\n }\n\n const lark = config.platforms.lark;\n if (lark) {\n const credentialsReady = configured(lark.appId) && configured(lark.appSecret);\n const addressing = lark.botOpenId ? \"bot_open_id configured\" : \"bot identity may need discovery\";\n lines.push(\n ` lark: ingress=long_connection tenant=${lark.domain} ${connectorStatus(credentialsReady, \"appId/appSecret\")}, callback=${connectorStatus(credentialsReady, \"appId/appSecret\")}, addressing=${addressing}`\n );\n }\n\n return lines.length > 1 ? lines : [...lines, \" none configured\"];\n}\n\nfunction serviceCliPath(dependencies: ServiceDependencies): string {\n const controller = serviceControllerFrom(dependencies);\n return controller === \"systemd\" ? linuxServiceCliPath(homeFrom(dependencies)) : launchAgentCliPath;\n}\n\nfunction serviceEnvironment(options: ServiceCommandOptions, paths: ServicePaths, dependencies: ServiceDependencies): Record<string, string> {\n return {\n OPENTAG_CONFIG_PATH: paths.configPath,\n PATH: serviceCliPath(dependencies),\n ...serviceHardeningEnvironment(options)\n };\n}\n\nexport function installService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const controller = assertSupportedServiceController(dependencies);\n const paths = servicePaths(options, dependencies);\n const workingDirectory = serviceWorkingDirectory(paths.configPath);\n ensurePrivateDirectory(paths.logsDir);\n if (controller === \"launchd\") {\n mkdirSync(dirname(paths.plistPath), { recursive: true });\n const plist = buildLaunchAgentPlist({\n label: paths.label,\n programArguments: serviceProgramArguments(options, dependencies),\n runAtLoad: true,\n keepAlive: true,\n stdoutPath: paths.stdoutPath,\n stderrPath: paths.stderrPath,\n workingDirectory,\n environment: serviceEnvironment(options, paths, dependencies)\n });\n writeFileSync(paths.plistPath, plist, { mode: 0o644 });\n return paths;\n }\n mkdirSync(dirname(paths.unitPath), { recursive: true });\n const unit = buildSystemdUserService({\n label: paths.label,\n execStart: serviceProgramArguments(options, dependencies),\n stdoutPath: paths.stdoutPath,\n stderrPath: paths.stderrPath,\n workingDirectory,\n environment: serviceEnvironment(options, paths, dependencies)\n });\n writeFileSync(paths.unitPath, unit, { mode: 0o644 });\n runSystemctlOrThrow(dependencies, [\"daemon-reload\"], \"systemctl --user daemon-reload\");\n runSystemctlOrThrow(dependencies, [\"enable\", systemdUnitName()], \"systemctl --user enable\");\n return paths;\n}\n\nfunction installed(paths: ServicePaths, controller: ServiceController): boolean {\n if (controller === \"launchd\") return existsSync(paths.plistPath);\n if (controller === \"systemd\") return existsSync(paths.unitPath);\n return false;\n}\n\nfunction isNotLoaded(result: CommandResult): boolean {\n const text = `${result.stderr}\\n${result.stdout}`.toLowerCase();\n return text.includes(\"no such process\") || text.includes(\"could not find service\") || text.includes(\"service is not loaded\");\n}\n\nfunction isSystemdNotLoaded(result: CommandResult): boolean {\n const text = `${result.stderr}\\n${result.stdout}`.toLowerCase();\n return text.includes(\"could not be found\") || text.includes(\"not loaded\") || text.includes(\"not-found\") || text.includes(\"no such\");\n}\n\nexport function startService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const controller = assertSupportedServiceController(dependencies);\n const paths = servicePaths(options, dependencies);\n if (!installed(paths, controller)) {\n throw new Error(`OpenTag service is not installed. Run \\`opentag service install --config ${paths.configPath}\\` first.`);\n }\n if (controller === \"systemd\") {\n runSystemctlOrThrow(dependencies, [\"daemon-reload\"], \"systemctl --user daemon-reload\");\n runSystemctlOrThrow(dependencies, [\"start\", systemdUnitName()], \"systemctl --user start\");\n return paths;\n }\n const launchctl = launchctlRunner(dependencies);\n const bootstrap = launchctl([\"bootstrap\", launchdDomain(dependencies), paths.plistPath]);\n if (bootstrap.status !== 0) {\n const print = printLaunchdService(dependencies);\n if (print.status !== 0) {\n const detail = launchctlDetail(bootstrap);\n throw new Error(`launchctl bootstrap failed${detail ? `: ${detail}` : \".\"}`);\n }\n }\n const kickstart = launchctl([\"kickstart\", \"-k\", launchdServiceTarget(dependencies)]);\n if (kickstart.status !== 0 && printLaunchdService(dependencies).status !== 0) {\n const detail = launchctlDetail(kickstart);\n throw new Error(`launchctl kickstart failed${detail ? `: ${detail}` : \".\"}`);\n }\n return paths;\n}\n\nexport function stopService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const controller = assertSupportedServiceController(dependencies);\n const paths = servicePaths(options, dependencies);\n if (!installed(paths, controller)) return paths;\n if (controller === \"systemd\") {\n const result = systemctlRunner(dependencies)([\"stop\", systemdUnitName()]);\n if (result.status !== 0 && !isSystemdNotLoaded(result)) {\n const detail = systemctlDetail(result);\n throw new Error(`systemctl --user stop failed${detail ? `: ${detail}` : \".\"}`);\n }\n return paths;\n }\n const launchctl = launchctlRunner(dependencies);\n const first = launchctl([\"bootout\", launchdServiceTarget(dependencies)]);\n if (first.status !== 0) {\n const second = launchctl([\"bootout\", launchdDomain(dependencies), paths.plistPath]);\n if (second.status !== 0 && !isNotLoaded(second)) {\n const firstDetail = isNotLoaded(first) ? \"\" : launchctlDetail(first);\n const detail = [launchctlDetail(second), firstDetail].filter(Boolean).join(\"\\n\");\n throw new Error(`launchctl bootout failed${detail ? `: ${detail}` : \".\"}`);\n }\n }\n return paths;\n}\n\nexport function uninstallService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const controller = assertSupportedServiceController(dependencies);\n const paths = stopService(options, dependencies);\n if (controller === \"launchd\") {\n rmSync(paths.plistPath, { force: true });\n return paths;\n }\n const disabled = systemctlRunner(dependencies)([\"disable\", systemdUnitName()]);\n if (disabled.status !== 0 && !isSystemdNotLoaded(disabled)) {\n const detail = systemctlDetail(disabled);\n throw new Error(`systemctl --user disable failed${detail ? `: ${detail}` : \".\"}`);\n }\n rmSync(paths.unitPath, { force: true });\n runSystemctlOrThrow(dependencies, [\"daemon-reload\"], \"systemctl --user daemon-reload\");\n return paths;\n}\n\nexport function enableServiceAutostart(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const controller = assertSupportedServiceController(dependencies);\n const candidate = servicePaths(options, dependencies);\n const paths = installed(candidate, controller) ? candidate : installService(options, dependencies);\n if (controller === \"systemd\") {\n runSystemctlOrThrow(dependencies, [\"enable\", systemdUnitName()], \"systemctl --user enable\");\n return paths;\n }\n runLaunchctlOrThrow(dependencies, [\"enable\", launchdServiceTarget(dependencies)], \"launchctl enable\");\n return paths;\n}\n\nexport function disableServiceAutostart(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServicePaths {\n const controller = assertSupportedServiceController(dependencies);\n const paths = servicePaths(options, dependencies);\n if (installed(paths, controller)) {\n if (controller === \"systemd\") {\n runSystemctlOrThrow(dependencies, [\"disable\", systemdUnitName()], \"systemctl --user disable\");\n return paths;\n }\n runLaunchctlOrThrow(dependencies, [\"disable\", launchdServiceTarget(dependencies)], \"launchctl disable\");\n }\n return paths;\n}\n\nfunction serviceAutostart(paths: ServicePaths, dependencies: ServiceDependencies, isInstalled: boolean): ServiceStatusSummary[\"autostart\"] {\n if (!isInstalled) return \"disabled\";\n const controller = serviceControllerFrom(dependencies);\n if (controller === \"systemd\") {\n const result = systemctlRunner(dependencies)([\"is-enabled\", systemdUnitName()]);\n const text = `${result.stdout}\\n${result.stderr}`.trim().toLowerCase();\n if (result.status === 0 && text.includes(\"enabled\")) return \"enabled\";\n if (text.includes(\"disabled\") || text.includes(\"not-found\") || text.includes(\"could not be found\")) return \"disabled\";\n return \"unknown\";\n }\n if (controller !== \"launchd\") return \"unknown\";\n const result = launchctlRunner(dependencies)([\"print-disabled\", launchdDomain(dependencies)]);\n if (result.status !== 0) return \"unknown\";\n const escapedLabel = SERVICE_LABEL.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n const disabledEntry = new RegExp(`\"${escapedLabel}\"\\\\s*=>\\\\s*(true|disabled)`).test(result.stdout);\n if (disabledEntry) return \"disabled\";\n const enabledEntry = new RegExp(`\"${escapedLabel}\"\\\\s*=>\\\\s*(false|enabled)`).test(result.stdout);\n if (enabledEntry) return \"enabled\";\n return \"enabled\";\n}\n\nexport function getServiceStatus(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): ServiceStatusSummary {\n const paths = servicePaths(options, dependencies);\n const controller = serviceControllerFrom(dependencies);\n const isInstalled = installed(paths, controller);\n let running: ServiceStatusSummary[\"running\"] = isInstalled ? \"stopped\" : \"unknown\";\n if (controller === \"launchd\" && isInstalled) {\n const result = launchctlRunner(dependencies)([\"print\", launchdServiceTarget(dependencies)]);\n running = result.status === 0 ? \"running\" : \"stopped\";\n } else if (controller === \"systemd\" && isInstalled) {\n const result = systemctlRunner(dependencies)([\"is-active\", systemdUnitName()]);\n running = result.status === 0 && result.stdout.trim() === \"active\" ? \"running\" : \"stopped\";\n }\n\n let runtimeMode: ServiceStatusSummary[\"runtimeMode\"] = \"unknown\";\n let relayUrl: string | undefined;\n let relaySecurity: string[] = [];\n let connectors: string[] = [\"Connectors:\", \" unavailable (config missing)\"];\n let secrets: string[] = [\"Secrets:\", \" unavailable (config missing)\"];\n let capabilities: string[] = [\"Capabilities:\", \" platform unknown\", \" executor unknown\"];\n if (existsSync(paths.configPath)) {\n const config = readCliConfig(paths.configPath);\n runtimeMode = runtimeModeFromConfig(config);\n relayUrl = relayUrlFromConfig(config);\n relaySecurity = formatRelaySecurityChecks(relaySecurityChecksFromConfig(config));\n connectors = formatConnectorReadiness(config);\n secrets = formatSecretReadiness(readRedactedCliConfig(paths.configPath));\n const platforms = Object.entries(config.platforms)\n .filter(([, value]) => value !== undefined)\n .map(([key]) => key as PlatformId);\n capabilities = formatConfiguredCapabilities({\n platforms,\n executors: config.daemon.repositories.map((repository) => repository.defaultExecutor)\n });\n }\n\n return {\n ...paths,\n controller,\n installed: isInstalled,\n running,\n runtimeMode,\n runtimeReadiness: running === \"running\" ? \"unverified\" : running === \"stopped\" ? \"stopped\" : \"unknown\",\n ...(relayUrl ? { relayUrl } : {}),\n relaySecurity,\n connectors,\n secrets,\n capabilities,\n serviceHardening: formatServiceHardening(paths),\n autostart: serviceAutostart(paths, dependencies, isInstalled)\n };\n}\n\nfunction readLaunchAgentEnvironment(paths: ServicePaths): Record<string, string> {\n if (!existsSync(paths.plistPath)) return {};\n const plist = readFileSync(paths.plistPath, \"utf8\");\n const environmentBlock = plist.match(/<key>EnvironmentVariables<\\/key>\\s*<dict>([\\s\\S]*?)<\\/dict>/);\n const body = environmentBlock?.[1];\n if (!body) return {};\n return Object.fromEntries(\n Array.from(body.matchAll(/<key>([\\s\\S]*?)<\\/key>\\s*<string>([\\s\\S]*?)<\\/string>/g)).flatMap((match) => {\n const key = match[1];\n const value = match[2];\n return key !== undefined && value !== undefined ? [[unescapeXml(key), unescapeXml(value)]] : [];\n })\n );\n}\n\nfunction unescapeSystemdQuotedValue(value: string): string {\n return value\n .replaceAll(\"%%\", \"%\")\n .replaceAll('\\\\\"', '\"')\n .replaceAll(\"\\\\$\", \"$\")\n .replaceAll(\"\\\\\\\\\", \"\\\\\");\n}\n\nfunction readSystemdEnvironment(paths: ServicePaths): Record<string, string> {\n if (!existsSync(paths.unitPath)) return {};\n const unit = readFileSync(paths.unitPath, \"utf8\");\n return Object.fromEntries(\n unit.split(/\\r?\\n/).flatMap((line) => {\n const match = line.match(/^Environment=(?:\"((?:\\\\.|[^\"])*)\"|(.+))$/);\n const raw = match?.[1] ?? match?.[2];\n if (!raw) return [];\n const value = unescapeSystemdQuotedValue(raw);\n const separator = value.indexOf(\"=\");\n if (separator <= 0) return [];\n return [[value.slice(0, separator), value.slice(separator + 1)]];\n })\n );\n}\n\nfunction readServiceEnvironment(paths: ServicePaths): Record<string, string> {\n return {\n ...readLaunchAgentEnvironment(paths),\n ...readSystemdEnvironment(paths)\n };\n}\n\nfunction formatServiceHardening(paths: ServicePaths): string[] {\n const environment = readServiceEnvironment(paths);\n const configured = serviceHardeningEnvKeys\n .filter((key) => environment[key])\n .map((key) => ` ${key}=${environment[key]}`);\n return [\"Service Hardening:\", ...(configured.length ? configured : [\" dispatcher hardening env not configured in service definition\"])];\n}\n\nfunction doctorCounts(checks: DoctorCheck[]): { fail: number; warn: number } {\n return {\n fail: checks.filter((check) => check.status === \"fail\").length,\n warn: checks.filter((check) => check.status === \"warn\").length\n };\n}\n\nfunction formatRuntimeDiagnostic(check: DoctorCheck): string {\n return `${check.status.toUpperCase()} ${check.name}: ${check.message}`;\n}\n\nfunction runtimeReadinessFromHeartbeatChecks(checks: DoctorCheck[]): Pick<ServiceStatusSummary, \"runtimeReadiness\" | \"runtimeReadinessDetail\"> | null {\n if (checks.some((check) => check.status === \"fail\")) return null;\n const heartbeat = checks.find((check) => check.name === \"runner heartbeat\" && check.status === \"warn\");\n if (!heartbeat) return null;\n if (heartbeat.message.startsWith(\"stale;\")) {\n return {\n runtimeReadiness: \"stale_heartbeat\",\n runtimeReadinessDetail: heartbeat.message\n };\n }\n if (heartbeat.message.startsWith(\"no heartbeat observed\")) {\n return {\n runtimeReadiness: \"starting\",\n runtimeReadinessDetail: heartbeat.message\n };\n }\n return null;\n}\n\nexport async function getServiceStatusWithRuntimeReadiness(\n options: ServiceCommandOptions = {},\n dependencies: ServiceDependencies = {}\n): Promise<ServiceStatusSummary> {\n const summary = getServiceStatus(options, dependencies);\n if (summary.running !== \"running\" || !existsSync(summary.configPath) || summary.controller === \"unsupported\") {\n return summary;\n }\n\n const config = readCliConfig(summary.configPath);\n const dispatcherUrl = config.daemon.dispatcherUrl;\n const ready = await probeDispatcherHealth({\n dispatcherUrl,\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}),\n timeoutMs: dependencies.healthTimeoutMs ?? 1_000\n });\n if (!ready) {\n return {\n ...summary,\n runtimeReadiness: \"unreachable\",\n runtimeReadinessDetail: `dispatcher healthz failed (${dispatcherUrl})`\n };\n }\n\n try {\n const checks = await runDoctor({\n config: config.daemon,\n executors: executorsFromConfig(config.daemon),\n ...(dependencies.fetchImpl ? { fetchImpl: dependencies.fetchImpl } : {}),\n ...(dependencies.commandRunner ? { commandRunner: dependencies.commandRunner } : {}),\n ...(dependencies.codexConfigPath ? { codexConfigPath: dependencies.codexConfigPath } : {})\n });\n const counts = doctorCounts(checks);\n const diagnostics = checks.filter((check) => check.status !== \"ok\").map(formatRuntimeDiagnostic);\n const heartbeatReadiness = runtimeReadinessFromHeartbeatChecks(checks);\n if (heartbeatReadiness) {\n return {\n ...summary,\n ...heartbeatReadiness,\n ...(diagnostics.length ? { runtimeDiagnostics: diagnostics } : {})\n };\n }\n if (doctorHasFailures(checks) || counts.warn > 0) {\n return {\n ...summary,\n runtimeReadiness: \"degraded\",\n runtimeReadinessDetail: `doctor checks degraded (${counts.fail} fail, ${counts.warn} warn)`,\n runtimeDiagnostics: diagnostics\n };\n }\n return {\n ...summary,\n runtimeReadiness: \"ready\",\n runtimeReadinessDetail: `dispatcher healthz ok; doctor checks ok (${checks.length} checks)`\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n ...summary,\n runtimeReadiness: \"degraded\",\n runtimeReadinessDetail: `doctor checks failed: ${message}`,\n runtimeDiagnostics: [`FAIL doctor checks: ${message}`]\n };\n }\n}\n\nexport function formatServiceStatus(summary: ServiceStatusSummary): string {\n const definitionLine =\n summary.controller === \"launchd\"\n ? `LaunchAgent: ${summary.plistPath}`\n : summary.controller === \"systemd\"\n ? `Systemd unit: ${summary.unitPath}`\n : undefined;\n return [\n `Controller: ${summary.controller}`,\n `Installed: ${summary.installed ? \"yes\" : \"no\"}`,\n `Running: ${summary.running}`,\n `Autostart: ${summary.autostart}`,\n `Config: ${summary.configPath}`,\n `Runtime: ${summary.runtimeMode}`,\n `OpenTag runtime: ${summary.runtimeReadiness}${summary.runtimeReadinessDetail ? ` (${summary.runtimeReadinessDetail})` : \"\"}`,\n ...(summary.runtimeDiagnostics?.length ? [\"Runtime Checks:\", ...summary.runtimeDiagnostics.map((diagnostic) => ` ${diagnostic}`)] : []),\n ...(summary.relayUrl ? [`Relay: ${summary.relayUrl}`] : []),\n ...summary.relaySecurity,\n ...summary.connectors,\n ...summary.secrets,\n ...summary.capabilities,\n ...summary.serviceHardening,\n ...(definitionLine ? [definitionLine] : []),\n `Stdout log: ${summary.stdoutPath}`,\n `Stderr log: ${summary.stderrPath}`,\n ...(summary.controller === \"unsupported\" ? [unsupportedMessage()] : [])\n ].join(\"\\n\");\n}\n\nfunction parseLines(value: string | number | undefined): number {\n if (value === undefined) return 80;\n const parsed = typeof value === \"number\" ? value : Number(value);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new Error(`--lines must be a positive integer, received ${value}`);\n }\n return parsed;\n}\n\nfunction tailFile(path: string, lines: number): string {\n if (!existsSync(path)) {\n return \"(log file does not exist yet)\";\n }\n const maxReadBytes = 1024 * 1024;\n const fd = openSync(path, \"r\");\n let content = \"\";\n try {\n const stats = fstatSync(fd);\n const bytesToRead = Math.min(stats.size, maxReadBytes);\n const position = stats.size - bytesToRead;\n const buffer = Buffer.alloc(bytesToRead);\n const bytesRead = readSync(fd, buffer, 0, bytesToRead, position);\n content = buffer.subarray(0, bytesRead).toString(\"utf8\");\n const entries = content.split(/\\r?\\n/);\n if (entries.at(-1) === \"\") entries.pop();\n if (position > 0 && entries.length > 1) {\n entries.shift();\n }\n return entries.slice(-lines).join(\"\\n\") || \"(log file is empty)\";\n } finally {\n closeSync(fd);\n }\n}\n\nexport function formatServiceLogs(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): string {\n const paths = servicePaths(options, dependencies);\n const lines = parseLines(options.lines);\n return [\n `== ${paths.stdoutPath} ==`,\n tailFile(paths.stdoutPath, lines),\n `== ${paths.stderrPath} ==`,\n tailFile(paths.stderrPath, lines)\n ].join(\"\\n\");\n}\n\nexport async function runServiceInstallCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = installService(options, dependencies);\n const controller = serviceControllerFrom(dependencies);\n loggerFrom(dependencies).log(`OpenTag service installed: ${controller === \"systemd\" ? paths.unitPath : paths.plistPath}`);\n loggerFrom(dependencies).log(\"It will start at login. Run `opentag service start` to start it now.\");\n}\n\nexport async function installAndStartService(options: ServiceCommandOptions = {}, dependencies: ServiceDependencies = {}): Promise<ServicePaths> {\n installService(options, dependencies);\n const paths = startService(options, dependencies);\n if (!(await waitForServiceLoaded(dependencies))) {\n throw new Error(\"OpenTag service start did not leave the service manager running. Run `opentag service status` and `opentag service logs` for details.\");\n }\n return paths;\n}\n\nexport async function runServiceStartCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = startService(options, dependencies);\n if (!(await waitForServiceLoaded(dependencies))) {\n throw new Error(\"OpenTag service start did not leave the service manager running. Run `opentag service status` and `opentag service logs` for details.\");\n }\n loggerFrom(dependencies).log(`OpenTag service started: ${paths.label}`);\n}\n\nexport async function runServiceStopCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = stopService(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service stopped: ${paths.label}`);\n}\n\nexport async function runServiceRestartCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n stopService(options, dependencies);\n await waitForServiceUnloaded(dependencies, { timeoutMs: 1_000 });\n let paths = startService(options, dependencies);\n let loaded = await waitForServiceLoaded(dependencies, { timeoutMs: 500 });\n if (!loaded) {\n paths = startService(options, dependencies);\n loaded = await waitForServiceLoaded(dependencies);\n }\n if (!loaded) {\n throw new Error(\"OpenTag service restart did not leave the service manager running. Run `opentag service status` and `opentag service logs` for details.\");\n }\n loggerFrom(dependencies).log(`OpenTag service restarted: ${paths.label}`);\n}\n\nexport async function runServiceUninstallCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = uninstallService(options, dependencies);\n const controller = serviceControllerFrom(dependencies);\n loggerFrom(dependencies).log(`OpenTag service uninstalled: ${controller === \"systemd\" ? paths.unitPath : paths.plistPath}`);\n}\n\nexport async function runServiceStatusCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const summary = await getServiceStatusWithRuntimeReadiness(options, dependencies);\n loggerFrom(dependencies).log(formatServiceStatus(summary));\n if (summary.controller === \"unsupported\") {\n process.exitCode = 1;\n }\n}\n\nexport async function runServiceLogsCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n loggerFrom(dependencies).log(formatServiceLogs(options, dependencies));\n}\n\nexport async function runServiceAutostartEnableCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = enableServiceAutostart(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service autostart enabled: ${paths.label}`);\n}\n\nexport async function runServiceAutostartDisableCommand(options: ServiceCommandOptions, dependencies: ServiceDependencies = {}): Promise<void> {\n const paths = disableServiceAutostart(options, dependencies);\n loggerFrom(dependencies).log(`OpenTag service autostart disabled: ${paths.label}`);\n}\n\nexport async function runServiceRunCommand(options: ServiceCommandOptions): Promise<void> {\n if (options.mode && options.mode !== \"background\") {\n throw new Error(`Unsupported service run mode: ${options.mode}`);\n }\n await runStartCommand({ ...(options.config ? { config: options.config } : {}), background: true });\n}\n","import { existsSync } from \"node:fs\";\nimport {\n defaultConfigPath,\n ensurePrivateDirectory,\n writeCliConfigAtomic\n} from \"../config.js\";\nimport { createSetupConfig } from \"../setup/builders.js\";\nimport { collectSetupInput, type SetupCommandOptions, type SetupFlowDependencies } from \"../setup/flow.js\";\nimport { formatSetupComplete } from \"../setup/summary.js\";\nimport { createClackPromptAdapter } from \"../ui/clack.js\";\nimport { scanLarkPersonalAgent } from \"../platforms/lark/registration-ui.js\";\nimport { runStartCommand, type StartCommandOptions } from \"../start.js\";\nimport { installAndStartService, serviceControllerForPlatform, type ServiceCommandOptions } from \"../service.js\";\n\nexport type { SetupCommandOptions };\n\nexport type SetupCommandDependencies = Partial<Omit<SetupFlowDependencies, \"prompts\" | \"scanLarkPersonalAgent\">> & {\n platform?: NodeJS.Platform;\n prompts?: SetupFlowDependencies[\"prompts\"];\n scanLarkPersonalAgent?: SetupFlowDependencies[\"scanLarkPersonalAgent\"];\n validateLarkCredentials?: SetupFlowDependencies[\"validateLarkCredentials\"];\n startOpenTag?(options: StartCommandOptions): Promise<void>;\n startOpenTagService?(options: ServiceCommandOptions): Promise<void>;\n};\n\ntype SetupRunMode = \"service\" | \"terminal\" | \"later\";\n\nfunction setupCompleteMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"OpenTag 设置完成。\" : \"OpenTag setup complete.\";\n}\n\nfunction startingMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"正在启动 OpenTag...\" : \"Starting OpenTag...\";\n}\n\nfunction serviceStartingMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"正在安装并启动 OpenTag 后台服务...\" : \"Installing and starting the OpenTag background service...\";\n}\n\nfunction serviceStartedMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"OpenTag 设置完成,后台服务已启动。\" : \"OpenTag setup complete. The background service is running.\";\n}\n\nfunction runModePromptMessage(language: string | undefined): string {\n return language === \"zh-CN\" ? \"OpenTag 要如何运行?\" : \"How should OpenTag run?\";\n}\n\nfunction runModeOptions(language: string | undefined, serviceSupported: boolean) {\n if (language === \"zh-CN\") {\n return [\n ...(serviceSupported ? [{ value: \"service\" as const, label: \"关闭这个终端后继续运行(推荐)\" }] : []),\n { value: \"terminal\" as const, label: \"只在当前终端里运行\" },\n { value: \"later\" as const, label: \"暂时不启动\" }\n ];\n }\n return [\n ...(serviceSupported ? [{ value: \"service\" as const, label: \"Keep running after I close this terminal (recommended)\" }] : []),\n { value: \"terminal\" as const, label: \"Run only in this terminal\" },\n { value: \"later\" as const, label: \"Do not start now\" }\n ];\n}\n\nasync function collectRunMode(\n options: SetupCommandOptions,\n prompts: SetupFlowDependencies[\"prompts\"],\n language: string | undefined,\n platform: NodeJS.Platform\n): Promise<SetupRunMode> {\n if (options.service) return \"service\";\n if (options.start === true) return \"terminal\";\n if (options.start === false || options.yes) return \"later\";\n const serviceSupported = serviceControllerForPlatform(platform) !== \"unsupported\";\n return prompts.select({\n message: runModePromptMessage(language),\n initialValue: serviceSupported ? \"service\" : \"terminal\",\n options: runModeOptions(language, serviceSupported)\n });\n}\n\nexport async function runSetupCommand(options: SetupCommandOptions, dependencies: SetupCommandDependencies = {}): Promise<void> {\n if (options.service && options.start !== undefined) {\n throw new Error(\"--service cannot be combined with --start or --no-start.\");\n }\n const platform = dependencies.platform ?? process.platform;\n if (options.service && serviceControllerForPlatform(platform) === \"unsupported\") {\n throw new Error(\"OpenTag background service is not supported on this platform. Use `opentag start` to run OpenTag in this terminal.\");\n }\n\n const env = dependencies.env ?? process.env;\n const configPath = options.config ?? defaultConfigPath(env);\n if (options.yes && existsSync(configPath) && !options.force) {\n throw new Error(`OpenTag config already exists at ${configPath}. Use --force with --yes to overwrite it.`);\n }\n\n const prompts = dependencies.prompts ?? createClackPromptAdapter();\n const setupInput = await collectSetupInput(options, configPath, {\n prompts,\n scanLarkPersonalAgent: dependencies.scanLarkPersonalAgent ?? scanLarkPersonalAgent,\n ...(dependencies.validateLarkCredentials ? { validateLarkCredentials: dependencies.validateLarkCredentials } : {}),\n ...(dependencies.cwd ? { cwd: dependencies.cwd } : {}),\n ...(dependencies.env ? { env: dependencies.env } : {}),\n ...(dependencies.defaults ? { defaults: dependencies.defaults } : {})\n });\n const config = createSetupConfig(setupInput, env);\n ensurePrivateDirectory(config.state.directory);\n ensurePrivateDirectory(config.state.worktreeRoot);\n writeCliConfigAtomic(configPath, config);\n\n prompts.note(formatSetupComplete(config, configPath));\n\n const runMode = await collectRunMode(options, prompts, config.preferences?.language, platform);\n\n if (runMode === \"service\") {\n prompts.note(serviceStartingMessage(config.preferences?.language));\n await (dependencies.startOpenTagService ?? installAndStartService)({ config: configPath });\n prompts.outro(serviceStartedMessage(config.preferences?.language));\n return;\n }\n\n if (runMode === \"terminal\") {\n prompts.outro(startingMessage(config.preferences?.language));\n await (dependencies.startOpenTag ?? runStartCommand)({ config: configPath });\n } else {\n prompts.outro(setupCompleteMessage(config.preferences?.language));\n }\n}\n","import { randomBytes } from \"node:crypto\";\nimport { realpathSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { projectTargetRefFromLocalPath } from \"@opentag/core\";\nimport {\n defaultStateDirectory,\n type OpenTagCliConfig,\n type PathEnvironment\n} from \"../config.js\";\nimport type { OpenTagSetupInput } from \"./types.js\";\n\nfunction pairingToken(): string {\n return randomBytes(32).toString(\"hex\");\n}\n\nexport function createSetupConfig(input: OpenTagSetupInput, env: PathEnvironment = process.env): OpenTagCliConfig {\n const checkoutPath = realpathSync.native(input.projectPath);\n const target = projectTargetRefFromLocalPath(checkoutPath);\n const stateDirectory = input.stateDirectory ?? defaultStateDirectory(env);\n const worktreeRoot = join(stateDirectory, \"worktrees\");\n const databasePath = join(stateDirectory, \"opentag.db\");\n const repositoryBindings = [\n {\n provider: target.provider,\n owner: target.owner,\n repo: target.repo,\n checkoutPath,\n defaultExecutor: input.executor,\n baseBranch: \"main\",\n pushRemote: \"origin\",\n worktreeRoot,\n keepWorktree: \"on_failure\" as const\n },\n ...(input.github\n ? [\n {\n provider: \"github\",\n owner: input.github.owner,\n repo: input.github.repo,\n checkoutPath,\n defaultExecutor: input.executor,\n baseBranch: \"main\",\n pushRemote: \"origin\",\n worktreeRoot,\n keepWorktree: \"on_failure\" as const\n }\n ]\n : [])\n ].filter((binding, index, bindings) => {\n return bindings.findIndex((candidate) => candidate.provider === binding.provider && candidate.owner === binding.owner && candidate.repo === binding.repo) === index;\n });\n\n const channelBindings = [\n ...(input.slack && input.slack.bindingMethod === \"default_project\"\n ? [\n {\n provider: \"slack\",\n accountId: input.slack.teamId,\n conversationId: input.slack.channelId,\n repoProvider: target.provider,\n owner: target.owner,\n repo: target.repo\n }\n ]\n : [])\n ];\n\n return {\n schemaVersion: 1,\n preferences: {\n language: input.language,\n lastSetup: {\n platforms: [input.platform],\n executor: input.executor,\n projectPath: checkoutPath,\n ...(input.lark\n ? {\n larkSetupMethod: input.lark.setupMethod,\n larkDomain: input.lark.domain,\n bindingMethod: input.lark.bindingMethod\n }\n : {}),\n ...(input.slack\n ? {\n bindingMethod: input.slack.bindingMethod,\n slackMode: input.slack.mode,\n slackTeamId: input.slack.teamId,\n slackChannelId: input.slack.channelId,\n ...(input.slack.port ? { slackPort: input.slack.port } : {})\n }\n : {}),\n ...(input.github\n ? {\n githubOwner: input.github.owner,\n githubRepo: input.github.repo,\n githubPort: input.github.port,\n githubAutoCreatePullRequest: input.github.autoCreatePullRequest\n }\n : {})\n }\n },\n state: {\n directory: stateDirectory,\n databasePath,\n worktreeRoot\n },\n runtime: {\n mode: \"local\"\n },\n daemon: {\n runnerId: \"runner_local\",\n dispatcherUrl: \"http://localhost:3030\",\n pairingToken: pairingToken(),\n repositories: repositoryBindings,\n ...(input.hermes\n ? {\n hermes: {\n ...(input.hermes.command ? { command: input.hermes.command } : {}),\n ...(input.hermes.profile ? { profile: input.hermes.profile } : {}),\n ...(input.hermes.profileTemplate ? { profileTemplate: input.hermes.profileTemplate } : {})\n }\n }\n : {}),\n ...(input.agentSessionProfile\n ? {\n agentSessionProfile: {\n ...(input.agentSessionProfile.profile ? { profile: input.agentSessionProfile.profile } : {}),\n ...(input.agentSessionProfile.profileTemplate ? { profileTemplate: input.agentSessionProfile.profileTemplate } : {})\n }\n }\n : {}),\n ...(channelBindings.length > 0 ? { channelBindings } : {}),\n ...(input.github ? { githubToken: input.github.token } : {}),\n ...(input.github ? { preparePullRequestBranch: true } : {}),\n ...(input.github ? { allowAutoCreatePullRequest: input.github.autoCreatePullRequest } : {}),\n pollIntervalMs: 5000,\n heartbeatIntervalMs: 15000\n },\n platforms: {\n ...(input.lark\n ? {\n lark: {\n appId: input.lark.appId,\n appSecret: input.lark.appSecret,\n domain: input.lark.domain,\n defaultProjectBinding: input.lark.bindingMethod === \"default_project\",\n ...(input.lark.botOpenId ? { botOpenId: input.lark.botOpenId } : {})\n }\n }\n : {}),\n ...(input.slack\n ? {\n slack: {\n mode: input.slack.mode,\n ...(input.slack.appToken ? { appToken: input.slack.appToken } : {}),\n ...(input.slack.signingSecret ? { signingSecret: input.slack.signingSecret } : {}),\n botToken: input.slack.botToken,\n teamId: input.slack.teamId,\n channelId: input.slack.channelId,\n defaultProjectBinding: input.slack.bindingMethod === \"default_project\",\n ...(input.slack.appId ? { appId: input.slack.appId } : {}),\n ...(input.slack.port ? { port: input.slack.port } : {})\n }\n }\n : {}),\n ...(input.github\n ? {\n github: {\n webhookSecret: input.github.webhookSecret,\n owner: input.github.owner,\n repo: input.github.repo,\n webhookPath: input.github.webhookPath,\n port: input.github.port\n }\n }\n : {})\n }\n };\n}\n","import { execFileSync } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { validateLarkCredentials, type LarkDomain, type RegisteredLarkPersonalAgent } from \"@opentag/lark\";\nimport {\n defaultExecutorId,\n detectExecutors,\n EXECUTOR_CATALOG,\n executorLabel,\n isExecutorId\n} from \"../catalogs/executors.js\";\nimport { LANGUAGE_OPTIONS, parseCliLanguage, type CliLanguage } from \"../catalogs/languages.js\";\nimport { formatPlatformStatus, PLATFORM_CATALOG, parsePlatformId, platformById, type PlatformId } from \"../catalogs/platforms.js\";\nimport { formatSavedLarkCredentialsHint } from \"../platforms/lark/display.js\";\nimport { readLegacyLarkCredentials, type SavedLarkCredentials } from \"../platforms/lark/saved-config.js\";\nimport { DEFAULT_GITHUB_WEBHOOK_PORT, DEFAULT_SLACK_EVENTS_PORT, parseLocalPort } from \"../platforms/ports.js\";\nimport type { PromptAdapter, PromptOption } from \"../ui/prompts.js\";\nimport { bindingMethodHint, bindingMethodLabel, larkSetupHint, larkSetupLabel, slackModeHint, slackModeLabel, t } from \"../ui/messages.js\";\nimport { loadSetupDefaults } from \"./defaults.js\";\nimport { formatGitHubTokenHelp, formatLarkManualCredentialHelp, formatPlatformSetupGuide, formatSlackCredentialHelp } from \"./guides.js\";\nimport { formatSetupReview } from \"./summary.js\";\nimport type { BindingMethod, GitHubSetupInput, HermesSetupInput, LarkSetupMethod, OpenTagSetupInput, SetupDefaults, SlackSetupInput, SlackSetupMode } from \"./types.js\";\n\nconst DEFAULT_HERMES_PROFILE_TEMPLATE =\n \"opentag-{provider}-{accountId}-{conversationId}-{owner}-{repo}-i{issueNumber}-pr{pullRequestNumber}\";\n\ntype LarkCredentialInput = {\n appId: string;\n appSecret: string;\n botOpenId?: string;\n domain: LarkDomain;\n};\n\nexport type SetupCommandOptions = {\n platform?: string;\n config?: string;\n project?: string;\n executor?: string;\n language?: string;\n larkSetup?: string;\n larkAppId?: string;\n larkAppSecret?: string;\n tenant?: string;\n larkBotOpenId?: string;\n slackMode?: string;\n slackAppToken?: string;\n slackSigningSecret?: string;\n slackBotToken?: string;\n slackAppId?: string;\n slackTeamId?: string;\n slackChannelId?: string;\n slackPort?: string;\n githubToken?: string;\n githubWebhookSecret?: string;\n githubRepository?: string;\n githubWebhookPath?: string;\n githubPort?: string;\n githubAutoCreatePr?: boolean;\n hermesCommand?: string;\n hermesProfile?: string;\n hermesProfileTemplate?: string;\n agentProfile?: string;\n agentProfileTemplate?: string;\n binding?: string;\n force?: boolean;\n yes?: boolean;\n start?: boolean;\n service?: boolean;\n};\n\nexport type SetupFlowDependencies = {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n prompts: PromptAdapter;\n scanLarkPersonalAgent(input: { language: CliLanguage }): Promise<RegisteredLarkPersonalAgent>;\n validateLarkCredentials?(input: { appId: string; appSecret: string; domain: LarkDomain }): Promise<{ botOpenId: string; botName: string }>;\n defaults?: SetupDefaults;\n};\n\nfunction parseLarkSetupMethod(value: string): LarkSetupMethod {\n if (value === \"saved\" || value === \"scan\" || value === \"manual\") return value;\n throw new Error(\"Lark setup method must be saved, scan, or manual.\");\n}\n\nfunction parseLarkTenant(value: string): LarkDomain {\n if (value === \"lark\" || value === \"feishu\") return value;\n throw new Error(\"Tenant must be feishu or lark.\");\n}\n\nfunction parseSlackSetupMode(value: string): SlackSetupMode {\n const normalized = value.trim().toLowerCase().replace(/-/g, \"_\");\n if (normalized === \"socket_mode\" || normalized === \"events_api\") return normalized;\n throw new Error(\"Slack mode must be socket_mode or events_api.\");\n}\n\nfunction parseBindingMethod(value: string): BindingMethod {\n if (value === \"default_project\" || value === \"bind_later\") return value;\n throw new Error(\"Binding method must be default_project or bind_later.\");\n}\n\nfunction parseGitHubRepository(value: string): { owner: string; repo: string } {\n const trimmed = value.trim().replace(/^github:/, \"\");\n const match = trimmed.match(/^([^/\\s]+)\\/([^/\\s]+)$/);\n if (!match) {\n throw new Error(\"GitHub repository must use owner/repo.\");\n }\n return {\n owner: match[1]!,\n repo: match[2]!.replace(/\\.git$/, \"\")\n };\n}\n\nfunction parsePortInput(value: string | undefined, label: string): number | undefined {\n return value === undefined ? undefined : parseLocalPort(value, label);\n}\n\nfunction githubRepositoryFromRemote(projectPath: string): string | undefined {\n let remote: string;\n try {\n remote = execFileSync(\"git\", [\"-C\", projectPath, \"remote\", \"get-url\", \"origin\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"]\n }).trim();\n } catch {\n return undefined;\n }\n\n const patterns = [\n /^git@github\\.com:([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/,\n /^https:\\/\\/github\\.com\\/([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/,\n /^ssh:\\/\\/git@github\\.com\\/([^/\\s]+)\\/([^/\\s]+?)(?:\\.git)?$/\n ];\n for (const pattern of patterns) {\n const match = remote.match(pattern);\n if (match) {\n return `${match[1]}/${match[2]}`;\n }\n }\n return undefined;\n}\n\nfunction nonEmpty(value: string, label: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`${label} is required.`);\n }\n return trimmed;\n}\n\nfunction assertExistingPath(path: string): string {\n if (!existsSync(path)) {\n throw new Error(`Path does not exist: ${path}`);\n }\n return path;\n}\n\nfunction optionalTrimmed(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction hasHermesOptions(options: SetupCommandOptions): boolean {\n return Boolean(options.hermesCommand || options.hermesProfile || options.hermesProfileTemplate);\n}\n\nfunction collectHermesSetup(options: SetupCommandOptions, defaults: SetupDefaults, executor: string): HermesSetupInput | undefined {\n if (executor !== \"hermes\") {\n if (hasHermesOptions(options)) {\n throw new Error(\"--hermes-command, --hermes-profile, and --hermes-profile-template can only be used with --executor hermes.\");\n }\n return undefined;\n }\n\n const explicitProfile = optionalTrimmed(options.hermesProfile);\n const explicitProfileTemplate = optionalTrimmed(options.hermesProfileTemplate);\n const command = optionalTrimmed(options.hermesCommand) ?? defaults.hermesCommand;\n const profile = explicitProfileTemplate ? explicitProfile : explicitProfile ?? defaults.hermesProfile;\n const profileTemplate =\n explicitProfileTemplate ??\n (explicitProfile ? undefined : defaults.hermesProfileTemplate) ??\n (profile ? undefined : DEFAULT_HERMES_PROFILE_TEMPLATE);\n\n return {\n ...(command ? { command } : {}),\n ...(profile ? { profile } : {}),\n ...(profileTemplate ? { profileTemplate } : {})\n };\n}\n\nfunction collectAgentSessionProfileSetup(options: SetupCommandOptions, defaults: SetupDefaults) {\n const explicitProfile = optionalTrimmed(options.agentProfile);\n const explicitProfileTemplate = optionalTrimmed(options.agentProfileTemplate);\n const profile = explicitProfileTemplate ? explicitProfile : explicitProfile ?? defaults.agentProfile;\n const profileTemplate = explicitProfileTemplate ?? (explicitProfile ? undefined : defaults.agentProfileTemplate);\n if (!profile && !profileTemplate) return undefined;\n return {\n ...(profile ? { profile } : {}),\n ...(profileTemplate ? { profileTemplate } : {})\n };\n}\n\nfunction generateGitHubWebhookSecret(): string {\n return randomBytes(32).toString(\"hex\");\n}\n\nfunction parseGitHubWebhookPath(value: string): string {\n const trimmed = nonEmpty(value, \"GitHub webhook path\");\n if (!trimmed.startsWith(\"/\")) {\n throw new Error(\"GitHub webhook path must start with /.\");\n }\n return trimmed;\n}\n\nfunction hasManualLarkCredentials(options: SetupCommandOptions): boolean {\n return Boolean(options.larkAppId || options.larkAppSecret || options.larkBotOpenId);\n}\n\nfunction hasCompleteManualLarkCredentials(options: SetupCommandOptions): boolean {\n return Boolean(options.larkAppId && options.larkAppSecret);\n}\n\nfunction assertCompleteManualLarkCredentials(options: SetupCommandOptions): void {\n if (options.larkAppId && !options.larkAppSecret) {\n throw new Error(\"--lark-app-secret is required when --lark-app-id is provided.\");\n }\n if (options.larkAppSecret && !options.larkAppId) {\n throw new Error(\"--lark-app-id is required when --lark-app-secret is provided.\");\n }\n}\n\nfunction assertNoManualLarkCredentialFlags(options: SetupCommandOptions): void {\n if (hasManualLarkCredentials(options)) {\n throw new Error(\"--lark-app-id, --lark-app-secret, and --lark-bot-open-id can only be used with --lark-setup manual.\");\n }\n}\n\nfunction findSavedLarkCredentials(defaults: SetupDefaults, projectPath: string): SavedLarkCredentials | undefined {\n return defaults.savedLarkCredentials ?? readLegacyLarkCredentials(projectPath);\n}\n\nfunction shouldReadSavedLarkCredentials(options: SetupCommandOptions): boolean {\n return !options.larkSetup || parseLarkSetupMethod(options.larkSetup) === \"saved\";\n}\n\nfunction loadDefaultsForSetup(options: SetupCommandOptions, configPath: string): SetupDefaults {\n try {\n return loadSetupDefaults(configPath);\n } catch (error) {\n if (options.force) {\n return {};\n }\n throw error;\n }\n}\n\nfunction defaultLanguage(options: SetupCommandOptions, defaults: SetupDefaults): CliLanguage {\n return options.language ? parseCliLanguage(options.language) : defaults.language ?? \"en\";\n}\n\nfunction formatPlatformStatusForSetup(language: CliLanguage, status: (typeof PLATFORM_CATALOG)[number][\"status\"]): string {\n if (language === \"zh-CN\") {\n switch (status) {\n case \"setup_ready\":\n return \"当前设置向导可配置\";\n case \"setup_pending\":\n return \"适配器已有,设置向导待接入\";\n case \"experimental_setup_pending\":\n return \"实验适配器,设置向导待接入\";\n }\n }\n return formatPlatformStatus(status);\n}\n\nfunction formatPlatformsForSetup(language: CliLanguage): string {\n const lines = PLATFORM_CATALOG.map((platform) => `- ${platform.label}: ${formatPlatformStatusForSetup(language, platform.status)}`);\n if (language === \"zh-CN\") {\n return [\"当前设置向导可配置的平台:\", ...lines].join(\"\\n\");\n }\n return [\"This setup wizard can configure:\", ...lines].join(\"\\n\");\n}\n\nfunction formatExecutorHint(input: {\n language: CliLanguage;\n executor: (typeof EXECUTOR_CATALOG)[number];\n available: boolean;\n current: boolean;\n selectedByDefault: boolean;\n}): string {\n if (input.executor.devOnly) {\n const echoHint = input.language === \"zh-CN\" ? \"开发测试用,不会调用真实编码代理\" : \"dev/test only; no real coding agent\";\n return input.current ? `${input.language === \"zh-CN\" ? \"当前选择,\" : \"current, \"}${echoHint}` : echoHint;\n }\n\n const availability = input.language === \"zh-CN\" ? (input.available ? \"已检测到\" : \"未检测到\") : input.available ? \"available\" : \"not found\";\n const current = input.current ? (input.language === \"zh-CN\" ? \"当前选择,\" : \"current, \") : \"\";\n const recommended = input.selectedByDefault ? (input.language === \"zh-CN\" ? \"推荐,\" : \"recommended, \") : \"\";\n return `${current || recommended}${availability}`;\n}\n\nasync function collectLanguage(options: SetupCommandOptions, defaults: SetupDefaults, prompts: PromptAdapter): Promise<CliLanguage> {\n if (options.language) {\n return parseCliLanguage(options.language);\n }\n return prompts.select({\n message: t(\"en\", \"language\"),\n initialValue: defaultLanguage(options, defaults),\n options: LANGUAGE_OPTIONS.map((language) => ({\n value: language.id,\n label: language.label,\n hint: language.hint\n }))\n });\n}\n\nasync function collectPlatform(options: SetupCommandOptions, defaults: SetupDefaults, prompts: PromptAdapter, language: CliLanguage): Promise<PlatformId> {\n prompts.note(formatPlatformsForSetup(language));\n const selected = options.platform\n ? parsePlatformId(options.platform)\n : await prompts.select({\n message: t(language, \"platform\"),\n initialValue: defaults.platform ?? \"lark\",\n options: PLATFORM_CATALOG.filter((platform) => platform.startable).map((platform) => ({\n value: platform.id,\n label: platform.label,\n hint: formatPlatformStatusForSetup(language, platform.status)\n }))\n });\n const descriptor = platformById(selected);\n if (!descriptor.startable) {\n throw new Error(`${descriptor.label} setup is not available in the OpenTag CLI yet.`);\n }\n const guide = formatPlatformSetupGuide(selected, language);\n if (guide) {\n prompts.note(guide);\n }\n return selected;\n}\n\nasync function collectExecutor(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n env: NodeJS.ProcessEnv | undefined\n): Promise<string> {\n if (options.executor !== undefined) {\n const executor = options.executor.trim();\n if (executor.length === 0) {\n throw new Error(\"Executor id must not be empty.\");\n }\n return executor;\n }\n const detections = detectExecutors(env);\n const normalizedPrevious = defaults.executor?.trim();\n if (normalizedPrevious !== undefined && normalizedPrevious.length === 0) {\n throw new Error(\"Executor id must not be empty.\");\n }\n const previousBuiltIn = normalizedPrevious !== undefined && isExecutorId(normalizedPrevious) ? normalizedPrevious : undefined;\n // A configured custom executor can't be represented by the built-in picker,\n // so surface it as a pre-selected option: the user keeps it by default but\n // can still switch to a built-in, instead of it being silently overwritten\n // (or the prompt being skipped) on an unrelated wizard re-run.\n const customPrevious = normalizedPrevious !== undefined && previousBuiltIn === undefined ? normalizedPrevious : undefined;\n const initialValue =\n customPrevious ??\n defaultExecutorId({\n ...(previousBuiltIn ? { previous: previousBuiltIn } : {}),\n detections\n });\n\n const builtInOptions: Array<PromptOption<string>> = EXECUTOR_CATALOG.map((executor) => {\n const detection = detections.find((entry) => entry.id === executor.id);\n return {\n value: executor.id,\n label: executor.label,\n hint: formatExecutorHint({\n language,\n executor,\n available: detection?.available ?? false,\n current: executor.id === normalizedPrevious,\n selectedByDefault: executor.id === initialValue\n })\n };\n });\n\n return prompts.select({\n message: t(language, \"executor\"),\n initialValue,\n options: customPrevious\n ? [{ value: customPrevious, label: customPrevious, hint: t(language, \"executorCustomHint\") }, ...builtInOptions]\n : builtInOptions\n });\n}\n\nasync function collectProjectPath(options: SetupCommandOptions, defaults: SetupDefaults, prompts: PromptAdapter, language: CliLanguage, cwd: string): Promise<string> {\n if (options.project) {\n return assertExistingPath(options.project);\n }\n const initialValue = defaults.projectPath ?? cwd;\n return prompts.text({\n message: t(language, \"projectPath\"),\n initialValue,\n placeholder: initialValue,\n validate(value) {\n const candidate = value.trim() || initialValue;\n if (!existsSync(candidate)) {\n return `Path does not exist: ${candidate}`;\n }\n return undefined;\n }\n });\n}\n\nasync function collectLarkSetupMethod(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n savedLarkCredentials: SavedLarkCredentials | undefined\n): Promise<LarkSetupMethod> {\n if (options.larkSetup) {\n const setupMethod = parseLarkSetupMethod(options.larkSetup);\n if (setupMethod === \"saved\" && !savedLarkCredentials) {\n throw new Error(\"No saved Lark Personal Agent config was found. Use --lark-setup scan or --lark-setup manual.\");\n }\n if (setupMethod === \"scan\" && options.tenant) {\n throw new Error(\"Tenant is detected during scan setup. Use --lark-setup manual --tenant <feishu|lark> for an existing app.\");\n }\n return setupMethod;\n }\n if (hasManualLarkCredentials(options) || options.tenant) {\n return \"manual\";\n }\n const methods: LarkSetupMethod[] = savedLarkCredentials ? [\"saved\", \"scan\", \"manual\"] : [\"scan\", \"manual\"];\n const previous = defaults.larkSetupMethod && methods.includes(defaults.larkSetupMethod) ? defaults.larkSetupMethod : undefined;\n const defaultSetupMethod = savedLarkCredentials ? \"saved\" : \"scan\";\n return prompts.select({\n message: t(language, \"larkSetup\"),\n initialValue: savedLarkCredentials ? \"saved\" : previous ?? defaultSetupMethod,\n options: methods.map((method) => ({\n value: method,\n label: larkSetupLabel(language, method),\n hint:\n method === \"saved\" && savedLarkCredentials\n ? formatSavedLarkCredentialsHint(savedLarkCredentials, language)\n : larkSetupHint(language, method)\n }))\n });\n}\n\nasync function collectLarkDomain(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n setupMethod: LarkSetupMethod,\n savedLarkCredentials: SavedLarkCredentials | undefined\n): Promise<LarkDomain> {\n if (setupMethod === \"saved\") {\n if (!savedLarkCredentials) {\n throw new Error(\"No saved Lark Personal Agent config was found.\");\n }\n return savedLarkCredentials.domain;\n }\n // Defensive fallback: collectSetupInput skips domain collection for scan,\n // because the platform returns the real tenant after registration.\n if (setupMethod === \"scan\") {\n throw new Error(\"Tenant is detected during scan setup.\");\n }\n if (options.tenant) {\n return parseLarkTenant(options.tenant);\n }\n return prompts.select({\n message: t(language, \"larkDomain\"),\n initialValue: defaults.larkDomain ?? \"feishu\",\n options: [\n { value: \"feishu\", label: \"Feishu\", hint: \"feishu.cn\" },\n { value: \"lark\", label: \"Lark\", hint: \"larksuite.com\" }\n ]\n });\n}\n\nasync function collectLarkCredentials(input: {\n options: SetupCommandOptions;\n prompts: PromptAdapter;\n language: CliLanguage;\n setupMethod: LarkSetupMethod;\n domain?: LarkDomain;\n savedLarkCredentials?: SavedLarkCredentials;\n scanLarkPersonalAgent(input: { language: CliLanguage }): Promise<RegisteredLarkPersonalAgent>;\n validateLarkCredentials(input: { appId: string; appSecret: string; domain: LarkDomain }): Promise<{ botOpenId: string; botName: string }>;\n}): Promise<LarkCredentialInput> {\n if (input.setupMethod === \"saved\") {\n if (!input.savedLarkCredentials) {\n throw new Error(\"No saved Lark Personal Agent config was found.\");\n }\n let botOpenId = input.savedLarkCredentials.botOpenId;\n try {\n const validation = await input.validateLarkCredentials({\n appId: input.savedLarkCredentials.appId,\n appSecret: input.savedLarkCredentials.appSecret,\n domain: input.savedLarkCredentials.domain\n });\n botOpenId = validation.botOpenId;\n } catch {\n input.prompts.note(\n \"Saved Lark / Feishu credentials could not be verified live; using the saved local config.\"\n );\n }\n return {\n appId: input.savedLarkCredentials.appId,\n appSecret: input.savedLarkCredentials.appSecret,\n domain: input.savedLarkCredentials.domain,\n ...(botOpenId ? { botOpenId } : {})\n };\n }\n\n if (input.setupMethod === \"scan\") {\n assertNoManualLarkCredentialFlags(input.options);\n const registered = await input.scanLarkPersonalAgent({ language: input.language });\n return {\n appId: registered.appId,\n appSecret: registered.appSecret,\n domain: registered.domain,\n ...(registered.botOpenId ? { botOpenId: registered.botOpenId } : {})\n };\n }\n\n if (!input.domain) {\n throw new Error(\"Tenant is required for manual setup.\");\n }\n assertCompleteManualLarkCredentials(input.options);\n if (!hasCompleteManualLarkCredentials(input.options)) {\n input.prompts.note(formatLarkManualCredentialHelp(input.language, input.domain));\n }\n const appIdLabel = input.language === \"zh-CN\" ? \"Lark 应用 ID\" : \"Lark App ID\";\n const appSecretLabel = input.language === \"zh-CN\" ? \"Lark 应用密钥\" : \"Lark App Secret\";\n const appId = nonEmpty(input.options.larkAppId ?? (await input.prompts.text({ message: t(input.language, \"larkAppId\") })), appIdLabel);\n const appSecret = nonEmpty(\n input.options.larkAppSecret ??\n (await input.prompts.password({\n message: t(input.language, \"larkAppSecret\"),\n validate(value) {\n if (!value.trim()) return input.language === \"zh-CN\" ? \"Lark 应用密钥不能为空。\" : \"Lark App Secret is required.\";\n return undefined;\n }\n })),\n appSecretLabel\n );\n const botOpenIdInput =\n input.options.larkBotOpenId ??\n (hasCompleteManualLarkCredentials(input.options)\n ? undefined\n : await input.prompts.text({\n message: t(input.language, \"larkBotOpenId\"),\n placeholder: \"ou_...\"\n }));\n const botOpenId = optionalTrimmed(botOpenIdInput);\n const validation = await input.validateLarkCredentials({\n appId,\n appSecret,\n domain: input.domain\n });\n if (botOpenId && botOpenId !== validation.botOpenId) {\n input.prompts.note(\"The provided Lark bot Open ID differed from live validation; using the verified bot Open ID.\");\n }\n return {\n appId,\n appSecret,\n domain: input.domain,\n botOpenId: validation.botOpenId\n };\n}\n\nasync function collectSlackSetup(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage\n): Promise<SlackSetupInput> {\n const derivedMode = options.slackMode\n ? parseSlackSetupMode(options.slackMode)\n : options.slackAppToken && !options.slackSigningSecret\n ? \"socket_mode\"\n : options.slackSigningSecret && !options.slackAppToken\n ? \"events_api\"\n : undefined;\n const selectedMode = derivedMode\n ? derivedMode\n : await prompts.select({\n message: t(language, \"slackMode\"),\n initialValue: defaults.slackMode ?? \"socket_mode\",\n options: ([\"socket_mode\", \"events_api\"] satisfies SlackSetupMode[]).map((candidate) => ({\n value: candidate,\n label: slackModeLabel(language, candidate),\n hint: slackModeHint(language, candidate)\n }))\n });\n\n if (selectedMode === \"socket_mode\" && options.slackPort) {\n throw new Error(\"--slack-port can only be used with --slack-mode events_api.\");\n }\n\n if (\n (selectedMode === \"socket_mode\" && (!options.slackAppToken || !options.slackBotToken)) ||\n (selectedMode === \"events_api\" && (!options.slackSigningSecret || !options.slackBotToken))\n ) {\n prompts.note(formatSlackCredentialHelp(language, selectedMode));\n }\n\n const appToken =\n selectedMode === \"socket_mode\"\n ? nonEmpty(\n options.slackAppToken ?? (await prompts.password({ message: t(language, \"slackAppToken\") })),\n \"Slack App-Level Token\"\n )\n : undefined;\n const signingSecret =\n selectedMode === \"events_api\"\n ? nonEmpty(\n options.slackSigningSecret ?? (await prompts.password({ message: t(language, \"slackSigningSecret\") })),\n \"Slack Signing Secret\"\n )\n : undefined;\n const botToken = nonEmpty(\n options.slackBotToken ?? (await prompts.password({ message: t(language, \"slackBotToken\") })),\n \"Slack Bot User OAuth Token\"\n );\n const appId = optionalTrimmed(\n options.slackAppId ??\n (await prompts.text({\n message: t(language, \"slackAppId\"),\n placeholder: \"A...\"\n }))\n );\n const teamId = nonEmpty(\n options.slackTeamId ??\n (await prompts.text({\n message: t(language, \"slackTeamId\"),\n placeholder: \"T...\",\n ...(defaults.slackTeamId ? { initialValue: defaults.slackTeamId } : {})\n })),\n \"Slack Team ID\"\n );\n const channelId = nonEmpty(\n options.slackChannelId ??\n (await prompts.text({\n message: t(language, \"slackChannelId\"),\n placeholder: \"C...\",\n ...(defaults.slackChannelId ? { initialValue: defaults.slackChannelId } : {})\n })),\n \"Slack Channel ID\"\n );\n const port =\n selectedMode === \"events_api\"\n ? (parsePortInput(options.slackPort, \"Slack Events API port\") ??\n (options.yes\n ? defaults.slackPort ?? DEFAULT_SLACK_EVENTS_PORT\n : parseLocalPort(\n await prompts.text({\n message: t(language, \"slackPort\"),\n initialValue: String(defaults.slackPort ?? DEFAULT_SLACK_EVENTS_PORT),\n placeholder: String(DEFAULT_SLACK_EVENTS_PORT)\n }),\n \"Slack Events API port\"\n )))\n : undefined;\n const bindingMethod = await collectBindingMethod(options, defaults, prompts, language, \"slack\");\n return {\n mode: selectedMode,\n ...(appToken ? { appToken } : {}),\n ...(signingSecret ? { signingSecret } : {}),\n botToken,\n teamId,\n channelId,\n bindingMethod,\n ...(appId ? { appId } : {}),\n ...(port ? { port } : {})\n };\n}\n\nasync function collectGitHubSetup(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n projectPath: string\n): Promise<GitHubSetupInput> {\n const repositoryDefault =\n options.githubRepository ??\n (defaults.githubOwner && defaults.githubRepo ? `${defaults.githubOwner}/${defaults.githubRepo}` : undefined) ??\n githubRepositoryFromRemote(projectPath);\n const repositoryInput = nonEmpty(\n options.githubRepository ??\n (await prompts.text({\n message: t(language, \"githubRepository\"),\n ...(repositoryDefault ? { initialValue: repositoryDefault, placeholder: repositoryDefault } : { placeholder: \"owner/repo\" }),\n validate(value) {\n try {\n parseGitHubRepository(value);\n return undefined;\n } catch (error) {\n return error instanceof Error ? error.message : String(error);\n }\n }\n })),\n \"GitHub repository\"\n );\n const repository = parseGitHubRepository(repositoryInput);\n const autoCreatePullRequest =\n options.githubAutoCreatePr ??\n (options.yes\n ? defaults.githubAutoCreatePullRequest ?? false\n : await prompts.confirm({\n message: t(language, \"githubAutoCreatePr\"),\n initialValue: defaults.githubAutoCreatePullRequest ?? false\n }));\n if (!options.githubToken) {\n prompts.note(formatGitHubTokenHelp(language, { autoCreatePullRequest }));\n }\n const token = nonEmpty(options.githubToken ?? (await prompts.password({ message: t(language, \"githubToken\") })), \"GitHub token\");\n const webhookSecret = options.githubWebhookSecret\n ? nonEmpty(options.githubWebhookSecret, \"GitHub webhook secret\")\n : defaults.githubWebhookSecret ?? generateGitHubWebhookSecret();\n const port =\n parsePortInput(options.githubPort, \"GitHub webhook port\") ??\n (options.yes\n ? defaults.githubPort ?? DEFAULT_GITHUB_WEBHOOK_PORT\n : parseLocalPort(\n await prompts.text({\n message: t(language, \"githubPort\"),\n initialValue: String(defaults.githubPort ?? DEFAULT_GITHUB_WEBHOOK_PORT),\n placeholder: String(DEFAULT_GITHUB_WEBHOOK_PORT)\n }),\n \"GitHub webhook port\"\n ));\n return {\n token,\n webhookSecret,\n owner: repository.owner,\n repo: repository.repo,\n webhookPath: parseGitHubWebhookPath(options.githubWebhookPath ?? defaults.githubWebhookPath ?? \"/github/webhooks\"),\n autoCreatePullRequest,\n port\n };\n}\n\nasync function collectBindingMethod(\n options: SetupCommandOptions,\n defaults: SetupDefaults,\n prompts: PromptAdapter,\n language: CliLanguage,\n platform: \"lark\" | \"slack\"\n): Promise<BindingMethod> {\n if (options.binding) {\n const binding = parseBindingMethod(options.binding);\n if (platform === \"slack\" && binding === \"bind_later\") {\n throw new Error(\"Slack setup requires a channel binding. Use --binding default_project.\");\n }\n return binding;\n }\n if (platform === \"slack\") {\n return \"default_project\";\n }\n const message =\n t(language, \"bindingMethod\");\n return prompts.select({\n message,\n initialValue: defaults.bindingMethod ?? \"default_project\",\n options: ([\"default_project\", \"bind_later\"] satisfies BindingMethod[]).map((method) => ({\n value: method,\n label: bindingMethodLabel(language, method, platform),\n hint: bindingMethodHint(language, method, platform)\n }))\n });\n}\n\nexport async function collectSetupInput(\n options: SetupCommandOptions,\n configPath: string,\n dependencies: SetupFlowDependencies\n): Promise<OpenTagSetupInput> {\n const defaults = dependencies.defaults ?? loadDefaultsForSetup(options, configPath);\n const prompts = dependencies.prompts;\n const cwd = dependencies.cwd ?? process.cwd();\n\n prompts.intro(t(defaultLanguage(options, defaults), \"intro\"));\n\n const language = await collectLanguage(options, defaults, prompts);\n const platform = await collectPlatform(options, defaults, prompts, language);\n const executor = await collectExecutor(options, defaults, prompts, language, dependencies.env);\n const hermesSetup = collectHermesSetup(options, defaults, executor);\n const agentSessionProfile = collectAgentSessionProfileSetup(options, defaults);\n const projectPath = await collectProjectPath(options, defaults, prompts, language, cwd);\n const resolvedProjectPath = projectPath.trim() || cwd;\n const savedLarkCredentials =\n platform === \"lark\" && shouldReadSavedLarkCredentials(options)\n ? findSavedLarkCredentials(defaults, resolvedProjectPath)\n : undefined;\n const larkSetupMethod =\n platform === \"lark\" ? await collectLarkSetupMethod(options, defaults, prompts, language, savedLarkCredentials) : undefined;\n const larkDomain =\n platform === \"lark\" && larkSetupMethod && larkSetupMethod !== \"scan\"\n ? await collectLarkDomain(options, defaults, prompts, language, larkSetupMethod, savedLarkCredentials)\n : undefined;\n const larkCredentials =\n platform === \"lark\" && larkSetupMethod\n ? await collectLarkCredentials({\n options,\n prompts,\n language,\n setupMethod: larkSetupMethod,\n ...(larkDomain ? { domain: larkDomain } : {}),\n ...(savedLarkCredentials ? { savedLarkCredentials } : {}),\n scanLarkPersonalAgent: dependencies.scanLarkPersonalAgent,\n validateLarkCredentials: dependencies.validateLarkCredentials ?? validateLarkCredentials\n })\n : undefined;\n const larkBindingMethod = platform === \"lark\" ? await collectBindingMethod(options, defaults, prompts, language, \"lark\") : undefined;\n const slackSetup = platform === \"slack\" ? await collectSlackSetup(options, defaults, prompts, language) : undefined;\n const githubSetup = platform === \"github\" ? await collectGitHubSetup(options, defaults, prompts, language, resolvedProjectPath) : undefined;\n const larkPersistedCredentials = larkCredentials\n ? {\n appId: larkCredentials.appId,\n appSecret: larkCredentials.appSecret,\n ...(larkCredentials.botOpenId ? { botOpenId: larkCredentials.botOpenId } : {})\n }\n : undefined;\n\n const setupInput: OpenTagSetupInput = {\n language,\n platform,\n projectPath: resolvedProjectPath,\n executor,\n ...(hermesSetup ? { hermes: hermesSetup } : {}),\n ...(agentSessionProfile ? { agentSessionProfile } : {}),\n ...(larkPersistedCredentials && larkCredentials && larkSetupMethod && larkBindingMethod\n ? {\n lark: {\n ...larkPersistedCredentials,\n domain: larkCredentials.domain,\n setupMethod: larkSetupMethod,\n bindingMethod: larkBindingMethod,\n ...(larkSetupMethod === \"saved\" && savedLarkCredentials ? { savedCredentialsSource: savedLarkCredentials.source } : {})\n }\n }\n : {}),\n ...(slackSetup ? { slack: slackSetup } : {}),\n ...(githubSetup ? { github: githubSetup } : {})\n };\n\n prompts.note(formatSetupReview(setupInput, configPath));\n if (!options.yes) {\n const confirmed = await prompts.confirm({\n message: t(language, \"confirmSetup\"),\n initialValue: true\n });\n if (!confirmed) {\n throw new Error(t(language, \"cancelled\"));\n }\n }\n return setupInput;\n}\n","export type CliLanguage = \"en\" | \"zh-CN\";\n\nexport const LANGUAGE_OPTIONS: Array<{\n id: CliLanguage;\n label: string;\n hint: string;\n}> = [\n { id: \"en\", label: \"English\", hint: \"Default\" },\n { id: \"zh-CN\", label: \"简体中文\", hint: \"Chinese\" }\n];\n\nexport function parseCliLanguage(value: string): CliLanguage {\n if (value === \"en\" || value === \"zh-CN\") {\n return value;\n }\n throw new Error(\"Language must be en or zh-CN.\");\n}\n","import type { LarkDomain } from \"@opentag/lark\";\nimport type { CliLanguage } from \"../../catalogs/languages.js\";\nimport type { SavedLarkCredentials } from \"./saved-config.js\";\n\ntype LarkPersonalAgentSummaryInput = {\n appId: string;\n domain: LarkDomain;\n botOpenId?: string;\n source?: SavedLarkCredentials[\"source\"];\n};\n\nfunction shortId(value: string): string {\n if (value.length <= 16) return value;\n return `${value.slice(0, 6)}...${value.slice(-6)}`;\n}\n\nfunction domainLabel(domain: LarkDomain): string {\n return domain === \"feishu\" ? \"Feishu\" : \"Lark\";\n}\n\nfunction sourceLabel(source: SavedLarkCredentials[\"source\"], language: CliLanguage): string {\n if (language === \"zh-CN\") {\n return source === \"opentag_config\" ? \"OpenTag 配置\" : \"旧 start-lark 配置\";\n }\n return source === \"opentag_config\" ? \"OpenTag config\" : \"legacy start-lark config\";\n}\n\nexport function formatLarkPersonalAgentSummary(input: LarkPersonalAgentSummaryInput, language: CliLanguage): string {\n const parts = [\n domainLabel(input.domain),\n `${language === \"zh-CN\" ? \"应用 ID\" : \"App ID\"} ${shortId(input.appId)}`,\n input.botOpenId ? `${language === \"zh-CN\" ? \"机器人 Open ID\" : \"Bot Open ID\"} ${shortId(input.botOpenId)}` : undefined,\n input.source\n ? language === \"zh-CN\"\n ? `来源: ${sourceLabel(input.source, language)}`\n : `from ${sourceLabel(input.source, language)}`\n : undefined\n ];\n return parts.filter((part): part is string => Boolean(part)).join(\" | \");\n}\n\nexport function formatSavedLarkCredentialsHint(credentials: SavedLarkCredentials, language: CliLanguage): string {\n return formatLarkPersonalAgentSummary(credentials, language);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { z } from \"zod\";\nimport type { LarkDomain } from \"@opentag/lark\";\nimport { assertPrivateConfigFile, type OpenTagCliConfig } from \"../../config.js\";\n\nconst SavedLarkCredentialsSchema = z\n .object({\n appId: z.string().min(1),\n appSecret: z.string().min(1),\n domain: z.enum([\"lark\", \"feishu\"]),\n botOpenId: z.string().min(1).optional()\n })\n .passthrough();\n\nexport type SavedLarkCredentials = {\n appId: string;\n appSecret: string;\n domain: LarkDomain;\n botOpenId?: string;\n source: \"opentag_config\" | \"legacy_start_lark\";\n path?: string;\n};\n\nexport function savedLarkCredentialsFromCliConfig(config: OpenTagCliConfig): SavedLarkCredentials | undefined {\n const lark = config.platforms.lark;\n if (!lark) return undefined;\n return {\n appId: lark.appId,\n appSecret: lark.appSecret,\n domain: lark.domain,\n ...(lark.botOpenId ? { botOpenId: lark.botOpenId } : {}),\n source: \"opentag_config\"\n };\n}\n\nexport function legacyLarkConfigPath(projectPath: string): string {\n return join(projectPath, \".opentag\", \"lark\", \"lark.local.json\");\n}\n\nfunction parseJsonFile(path: string): unknown {\n try {\n return JSON.parse(readFileSync(path, \"utf8\"));\n } catch (error) {\n throw new Error(`Saved Lark config at ${path} is invalid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nexport function readLegacyLarkCredentials(projectPath: string): SavedLarkCredentials | undefined {\n const path = legacyLarkConfigPath(projectPath);\n if (!existsSync(path)) return undefined;\n assertPrivateConfigFile(path);\n\n const parsed = SavedLarkCredentialsSchema.safeParse(parseJsonFile(path));\n if (!parsed.success) {\n throw new Error(`Saved Lark config at ${path} is invalid: ${parsed.error.message}`);\n }\n\n return {\n appId: parsed.data.appId,\n appSecret: parsed.data.appSecret,\n domain: parsed.data.domain,\n ...(parsed.data.botOpenId ? { botOpenId: parsed.data.botOpenId } : {}),\n source: \"legacy_start_lark\",\n path\n };\n}\n","import type { CliLanguage } from \"../catalogs/languages.js\";\nimport type { BindingMethod, LarkSetupMethod, SlackSetupMode } from \"../setup/types.js\";\n\ntype MessageKey =\n | \"intro\"\n | \"language\"\n | \"platform\"\n | \"executor\"\n | \"executorCustomHint\"\n | \"projectPath\"\n | \"larkSetup\"\n | \"larkDomain\"\n | \"larkAppId\"\n | \"larkAppSecret\"\n | \"larkBotOpenId\"\n | \"slackMode\"\n | \"slackAppToken\"\n | \"slackSigningSecret\"\n | \"slackBotToken\"\n | \"slackAppId\"\n | \"slackTeamId\"\n | \"slackChannelId\"\n | \"slackPort\"\n | \"githubRepository\"\n | \"githubToken\"\n | \"githubWebhookSecret\"\n | \"githubPort\"\n | \"githubAutoCreatePr\"\n | \"bindingMethod\"\n | \"confirmSetup\"\n | \"cancelled\"\n | \"complete\";\n\nconst MESSAGES: Record<CliLanguage, Record<MessageKey, string>> = {\n en: {\n intro: \"OpenTag setup\",\n language: \"Language / 语言\",\n platform: \"Where should OpenTag listen?\",\n executor: \"Which coding agent should OpenTag use?\",\n executorCustomHint: \"Currently configured custom executor\",\n projectPath: \"Which project should OpenTag use?\",\n larkSetup: \"How should OpenTag connect to Lark / Feishu?\",\n larkDomain: \"Which Lark / Feishu tenant is this existing app for?\",\n larkAppId: \"Lark App ID\",\n larkAppSecret: \"Lark App Secret\",\n larkBotOpenId: \"Lark Bot Open ID (optional)\",\n slackMode: \"How should OpenTag connect to Slack?\",\n slackAppToken: \"Slack App-Level Token\",\n slackSigningSecret: \"Slack Signing Secret\",\n slackBotToken: \"Slack Bot User OAuth Token\",\n slackAppId: \"Slack App ID (optional)\",\n slackTeamId: \"Slack Team ID\",\n slackChannelId: \"Slack Channel ID\",\n slackPort: \"Local Slack Events API port\",\n githubRepository: \"GitHub repository (owner/repo)\",\n githubToken: \"GitHub token for comments and `apply 1` pull requests\",\n githubWebhookSecret: \"GitHub webhook secret\",\n githubPort: \"Local GitHub webhook port\",\n githubAutoCreatePr: \"Create pull requests immediately after runs? (advanced)\",\n bindingMethod: \"How should Lark chats bind to this project?\",\n confirmSetup: \"Write this OpenTag config?\",\n cancelled: \"OpenTag setup cancelled.\",\n complete: \"OpenTag setup complete.\"\n },\n \"zh-CN\": {\n intro: \"OpenTag 设置\",\n language: \"Language / 语言\",\n platform: \"OpenTag 要监听哪个平台?\",\n executor: \"OpenTag 要使用哪个编码代理?\",\n executorCustomHint: \"当前配置的自定义执行器\",\n projectPath: \"OpenTag 要使用哪个项目?\",\n larkSetup: \"OpenTag 要如何连接 Lark/飞书?\",\n larkDomain: \"这个已有应用属于哪个 Lark/飞书租户?\",\n larkAppId: \"Lark 应用 ID\",\n larkAppSecret: \"Lark 应用密钥\",\n larkBotOpenId: \"Lark 机器人 Open ID(可选)\",\n slackMode: \"OpenTag 要如何连接 Slack?\",\n slackAppToken: \"Slack App-Level Token\",\n slackSigningSecret: \"Slack Signing Secret\",\n slackBotToken: \"Slack Bot User OAuth Token\",\n slackAppId: \"Slack App ID(可选)\",\n slackTeamId: \"Slack Team ID\",\n slackChannelId: \"Slack Channel ID\",\n slackPort: \"本地 Slack Events API 端口\",\n githubRepository: \"GitHub 仓库(owner/repo)\",\n githubToken: \"GitHub token(用于回写评论和 apply 1 创建 PR)\",\n githubWebhookSecret: \"GitHub webhook secret\",\n githubPort: \"本地 GitHub webhook 端口\",\n githubAutoCreatePr: \"run 结束后立刻自动创建 pull request 吗?(高级选项)\",\n bindingMethod: \"Lark 群聊要如何绑定到这个项目?\",\n confirmSetup: \"写入这份 OpenTag 配置?\",\n cancelled: \"OpenTag 设置已取消。\",\n complete: \"OpenTag 设置完成。\"\n }\n};\n\nexport function t(language: CliLanguage, key: MessageKey): string {\n return MESSAGES[language][key];\n}\n\nexport function larkSetupLabel(language: CliLanguage, method: LarkSetupMethod): string {\n if (language === \"zh-CN\") {\n if (method === \"saved\") return \"使用已保存的个人代理应用\";\n return method === \"scan\" ? \"扫码创建个人代理应用(保存平台返回的真实租户)\" : \"手动填写 Lark/飞书应用凭据\";\n }\n if (method === \"saved\") return \"Use saved Personal Agent\";\n return method === \"scan\" ? \"Create Personal Agent by QR (save returned tenant)\" : \"Manual Lark / Feishu credentials\";\n}\n\nexport function larkSetupHint(language: CliLanguage, method: LarkSetupMethod): string {\n if (language === \"zh-CN\") {\n if (method === \"saved\") return \"推荐,不需要重新扫码\";\n return method === \"scan\" ? \"链接可能从飞书 bootstrap 开始,最终保存真实 Lark/飞书租户\" : \"使用已有自建应用,并手动选择租户\";\n }\n if (method === \"saved\") return \"Recommended; no new scan\";\n return method === \"scan\" ? \"May start on Feishu bootstrap; saves the real returned tenant\" : \"Use an existing app and choose its tenant\";\n}\n\nexport function slackModeLabel(language: CliLanguage, mode: SlackSetupMode): string {\n if (language === \"zh-CN\") {\n return mode === \"socket_mode\" ? \"本地 Socket Mode(推荐)\" : \"公网 Events API\";\n }\n return mode === \"socket_mode\" ? \"Local Socket Mode (Recommended)\" : \"Public Events API\";\n}\n\nexport function slackModeHint(language: CliLanguage, mode: SlackSetupMode): string {\n if (language === \"zh-CN\") {\n return mode === \"socket_mode\" ? \"适合本机运行,不需要公网 URL\" : \"适合云端部署或 tunnel 测试\";\n }\n return mode === \"socket_mode\" ? \"Best for this computer; no public URL\" : \"Best for hosted OpenTag or tunnel testing\";\n}\n\nexport function bindingMethodLabel(language: CliLanguage, method: BindingMethod, platform: \"lark\" | \"slack\" = \"lark\"): string {\n if (language === \"zh-CN\") {\n if (method === \"default_project\") return \"默认使用这个项目\";\n return platform === \"slack\" ? \"稍后在 OpenTag 配置里绑定\" : \"稍后在 Lark 里用 /bind 绑定\";\n }\n if (method === \"default_project\") return \"Use this project by default\";\n return platform === \"slack\" ? \"Bind later from OpenTag config\" : \"Bind later from Lark with /bind\";\n}\n\nexport function bindingMethodHint(language: CliLanguage, method: BindingMethod, platform: \"lark\" | \"slack\" = \"lark\"): string {\n if (language === \"zh-CN\") {\n if (method === \"default_project\") return \"推荐,最快跑通\";\n return platform === \"slack\" ? \"适合先只保存 Slack 连接\" : \"适合多个项目\";\n }\n if (method === \"default_project\") return \"Recommended\";\n return platform === \"slack\" ? \"Use when you only want to save the Slack connection first\" : \"Best for multiple projects\";\n}\n","import { existsSync } from \"node:fs\";\nimport { defaultConfigPath, readCliConfig, type OpenTagCliConfig } from \"../config.js\";\nimport { savedLarkCredentialsFromCliConfig } from \"../platforms/lark/saved-config.js\";\nimport type { BindingMethod, SetupDefaults } from \"./types.js\";\n\nfunction defaultBindingMethod(config: OpenTagCliConfig): BindingMethod | undefined {\n const lastSetup = config.preferences?.lastSetup;\n if (lastSetup?.bindingMethod) return lastSetup.bindingMethod;\n if (config.platforms.lark?.defaultProjectBinding === false) return \"bind_later\";\n if (config.platforms.lark) return \"default_project\";\n if (config.platforms.slack?.defaultProjectBinding === false) return \"bind_later\";\n if (config.platforms.slack) return \"default_project\";\n return undefined;\n}\n\nexport function setupDefaultsFromConfig(config: OpenTagCliConfig): SetupDefaults {\n const repository = config.daemon.repositories[0];\n const lark = config.platforms.lark;\n const slack = config.platforms.slack;\n const github = config.platforms.github;\n const hermes = config.daemon.hermes;\n const agentSessionProfile = config.daemon.agentSessionProfile;\n const lastSetup = config.preferences?.lastSetup;\n const savedLarkCredentials = savedLarkCredentialsFromCliConfig(config);\n const bindingMethod = defaultBindingMethod(config);\n\n return {\n ...(config.preferences?.language ? { language: config.preferences.language } : {}),\n ...(lastSetup?.platforms?.[0] ? { platform: lastSetup.platforms[0] } : lark ? { platform: \"lark\" } : slack ? { platform: \"slack\" } : github ? { platform: \"github\" } : {}),\n ...(repository?.checkoutPath ? { projectPath: repository.checkoutPath } : {}),\n ...(repository?.defaultExecutor ? { executor: repository.defaultExecutor } : {}),\n ...(hermes?.command ? { hermesCommand: hermes.command } : {}),\n ...(hermes?.profile ? { hermesProfile: hermes.profile } : {}),\n ...(hermes?.profileTemplate ? { hermesProfileTemplate: hermes.profileTemplate } : {}),\n ...(agentSessionProfile?.profile ? { agentProfile: agentSessionProfile.profile } : {}),\n ...(agentSessionProfile?.profileTemplate ? { agentProfileTemplate: agentSessionProfile.profileTemplate } : {}),\n ...(lastSetup?.larkSetupMethod ? { larkSetupMethod: lastSetup.larkSetupMethod } : {}),\n ...(lastSetup?.larkDomain ? { larkDomain: lastSetup.larkDomain } : lark?.domain ? { larkDomain: lark.domain } : {}),\n ...(bindingMethod ? { bindingMethod } : {}),\n ...(lastSetup?.slackMode ? { slackMode: lastSetup.slackMode } : slack ? { slackMode: slack.mode ?? \"events_api\" } : {}),\n ...(lastSetup?.slackTeamId ? { slackTeamId: lastSetup.slackTeamId } : slack?.teamId ? { slackTeamId: slack.teamId } : {}),\n ...(lastSetup?.slackChannelId ? { slackChannelId: lastSetup.slackChannelId } : slack?.channelId ? { slackChannelId: slack.channelId } : {}),\n ...(lastSetup?.slackPort ? { slackPort: lastSetup.slackPort } : slack?.port ? { slackPort: slack.port } : {}),\n ...(lastSetup?.githubOwner ? { githubOwner: lastSetup.githubOwner } : github?.owner ? { githubOwner: github.owner } : {}),\n ...(lastSetup?.githubRepo ? { githubRepo: lastSetup.githubRepo } : github?.repo ? { githubRepo: github.repo } : {}),\n ...(lastSetup?.githubPort ? { githubPort: lastSetup.githubPort } : github?.port ? { githubPort: github.port } : {}),\n ...(github?.webhookSecret ? { githubWebhookSecret: github.webhookSecret } : {}),\n ...(github?.webhookPath ? { githubWebhookPath: github.webhookPath } : {}),\n ...(lastSetup?.githubAutoCreatePullRequest !== undefined\n ? { githubAutoCreatePullRequest: lastSetup.githubAutoCreatePullRequest }\n : config.daemon.allowAutoCreatePullRequest !== undefined\n ? { githubAutoCreatePullRequest: config.daemon.allowAutoCreatePullRequest }\n : {}),\n ...(savedLarkCredentials ? { savedLarkCredentials } : {})\n };\n}\n\nexport function loadSetupDefaults(path = defaultConfigPath()): SetupDefaults {\n if (!existsSync(path)) {\n return {};\n }\n return setupDefaultsFromConfig(readCliConfig(path));\n}\n","import type { LarkDomain } from \"@opentag/lark\";\nimport type { CliLanguage } from \"../catalogs/languages.js\";\nimport { platformById, platformSetupGuideUrl, type PlatformId } from \"../catalogs/platforms.js\";\nimport type { SlackSetupMode } from \"./types.js\";\n\nexport const OFFICIAL_SETUP_LINKS = {\n githubTokenPage: \"https://github.com/settings/personal-access-tokens/new\",\n githubTokenDocs: \"https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens\",\n githubWebhookDocs: \"https://docs.github.com/en/webhooks/using-webhooks/creating-webhooks\",\n slackApps: \"https://api.slack.com/apps\",\n slackSocketModeDocs: \"https://docs.slack.dev/apis/events-api/using-socket-mode/\",\n slackQuickstartDocs: \"https://docs.slack.dev/quickstart/\",\n slackSigningSecretDocs: \"https://docs.slack.dev/authentication/verifying-requests-from-slack/\",\n larkConsole: \"https://open.larksuite.com/app\",\n feishuConsole: \"https://open.feishu.cn/app\",\n larkAppIdDocs: \"https://open.larksuite.com/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-app-id\",\n larkWebSocketDocs: \"https://open.larksuite.com/document/ukTMukTMukTM/uYDNxYjL2QTM24iN0EjN/event-subscription-configure-/use-websocket\",\n feishuWebSocketDocs: \"https://open.feishu.cn/document/server-docs/event-subscription-guide/event-subscription-configure-/use-websocket?lang=zh-CN\"\n} as const;\n\nfunction setupNeeds(platform: PlatformId, language: CliLanguage): string[] {\n if (language === \"zh-CN\") {\n switch (platform) {\n case \"lark\":\n return [\"Lark 推荐手动配置自建应用\", \"飞书可以扫码创建个人代理应用\", \"手动配置时需要应用 ID 和应用密钥\"];\n case \"slack\":\n return [\"推荐本地使用 Socket Mode\", \"Socket Mode 需要 Slack App-Level Token 和 Bot User OAuth Token\", \"Events API 需要 Slack Signing Secret 和公网 Request URL\", \"开启 Interactivity & Shortcuts 以支持 Apply 1 按钮\", \"Slack bot scopes 需要 app_mentions:read、chat:write、reactions:write、channels:history\", \"订阅 bot events: app_mention、message.channels\", \"Slack Team ID\", \"Slack Channel ID\", \"测试前需要把 Slack app 邀请进目标 channel\"];\n case \"github\":\n return [\"GitHub 仓库 owner/repo\", \"GitHub token(用于回写评论;你回复 apply 1 后也用于创建 PR)\", \"OpenTag 会自动生成 webhook secret\", \"本地 webhook 端口,默认 3050\", \"需要一个公网 tunnel 转发 GitHub webhook\"];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n }\n\n switch (platform) {\n case \"lark\":\n return [\"Manual setup is recommended for Lark\", \"Feishu can use QR-created Personal Agent\", \"manual setup needs an App ID and App Secret\"];\n case \"slack\":\n return [\"Socket Mode is recommended for local OpenTag\", \"Socket Mode needs a Slack App-Level Token and Bot User OAuth Token\", \"Events API needs a Slack Signing Secret and public Request URL\", \"Enable Interactivity & Shortcuts for Apply 1 buttons\", \"Slack bot scopes need app_mentions:read, chat:write, reactions:write, channels:history\", \"Subscribe to bot events: app_mention, message.channels\", \"Slack Team ID\", \"Slack Channel ID\", \"Invite the Slack app to the target channel before testing\"];\n case \"github\":\n return [\"GitHub repository owner/repo\", \"GitHub token for comments and PR creation after you reply `apply 1`\", \"OpenTag generates the webhook secret\", \"Local webhook port, default 3050\", \"A public tunnel is required for GitHub webhook delivery\"];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n}\n\nfunction officialSetupLinks(platform: PlatformId, language: CliLanguage): string[] {\n if (language === \"zh-CN\") {\n switch (platform) {\n case \"lark\":\n return [\n `Lark 开发者后台: ${OFFICIAL_SETUP_LINKS.larkConsole}`,\n `飞书开发者后台: ${OFFICIAL_SETUP_LINKS.feishuConsole}`\n ];\n case \"slack\":\n return [\n `Slack App 管理页: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n `Socket Mode 官方文档: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`\n ];\n case \"github\":\n return [\n `GitHub token 创建页: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `Repository webhook 官方文档: ${OFFICIAL_SETUP_LINKS.githubWebhookDocs}`\n ];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n }\n\n switch (platform) {\n case \"lark\":\n return [\n `Lark Developer Console: ${OFFICIAL_SETUP_LINKS.larkConsole}`,\n `Feishu Developer Console: ${OFFICIAL_SETUP_LINKS.feishuConsole}`\n ];\n case \"slack\":\n return [\n `Slack app settings: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n `Socket Mode docs: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`\n ];\n case \"github\":\n return [\n `GitHub token page: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `Repository webhook docs: ${OFFICIAL_SETUP_LINKS.githubWebhookDocs}`\n ];\n case \"gitlab\":\n return [];\n case \"telegram\":\n return [];\n }\n}\n\nexport function formatPlatformSetupGuide(platform: PlatformId, language: CliLanguage): string | undefined {\n const url = platformSetupGuideUrl(platform, language);\n if (!url) return undefined;\n\n const descriptor = platformById(platform);\n const needs = setupNeeds(platform, language);\n const officialLinks = officialSetupLinks(platform, language);\n if (language === \"zh-CN\") {\n return [\n `${descriptor.label} 配置教程:`,\n url,\n \"\",\n \"官方入口:\",\n ...officialLinks.map((item) => `- ${item}`),\n \"\",\n \"继续填写前,先打开教程确认这些值在哪里拿:\",\n ...needs.map((item) => `- ${item}`)\n ].join(\"\\n\");\n }\n\n return [\n `${descriptor.label} setup guide:`,\n url,\n \"\",\n \"Official setup pages:\",\n ...officialLinks.map((item) => `- ${item}`),\n \"\",\n \"Open the guide before filling in these values:\",\n ...needs.map((item) => `- ${item}`)\n ].join(\"\\n\");\n}\n\nexport function formatLarkManualCredentialHelp(language: CliLanguage, domain: LarkDomain): string {\n const consoleUrl = domain === \"feishu\" ? OFFICIAL_SETUP_LINKS.feishuConsole : OFFICIAL_SETUP_LINKS.larkConsole;\n const websocketDocs = domain === \"feishu\" ? OFFICIAL_SETUP_LINKS.feishuWebSocketDocs : OFFICIAL_SETUP_LINKS.larkWebSocketDocs;\n if (language === \"zh-CN\") {\n return [\n \"手动 Lark/飞书凭据在哪里拿:\",\n `- 开发者后台: ${consoleUrl}`,\n \"- 应用 ID 和应用密钥: 打开你的应用,进入凭证与基础信息(Credentials & Basic Info)\",\n \"- 事件接收方式: 使用长连接(WebSocket)\",\n `- 长连接官方文档: ${websocketDocs}`,\n \"\",\n \"如果你没有自建应用,建议返回选择扫码创建个人代理应用。\"\n ].join(\"\\n\");\n }\n\n return [\n \"Where to find manual Lark / Feishu credentials:\",\n `- Developer console: ${consoleUrl}`,\n \"- App ID / App Secret: open your app, then go to Credentials & Basic Info\",\n \"- Event delivery mode: use long connection / WebSocket\",\n `- WebSocket docs: ${websocketDocs}`,\n \"\",\n \"If you do not already manage a self-built app, use QR scan instead.\"\n ].join(\"\\n\");\n}\n\nexport function formatSlackCredentialHelp(language: CliLanguage, mode: SlackSetupMode): string {\n if (language === \"zh-CN\") {\n const modeSpecific =\n mode === \"socket_mode\"\n ? [\n `- Socket Mode 官方文档: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`,\n \"- Slack App-Level Token: Basic Information -> App-Level Tokens -> Generate Token and Scopes,scope 选 connections:write\",\n \"- Interactivity & Shortcuts: 打开 Interactivity;Socket Mode 不需要 Request URL\"\n ]\n : [\n `- Signing Secret 官方文档: ${OFFICIAL_SETUP_LINKS.slackSigningSecretDocs}`,\n \"- Slack Signing Secret: Basic Information -> App Credentials\",\n \"- Event Subscriptions Request URL: 填你的公网 tunnel,例如 https://<your-tunnel>/slack/events\",\n \"- Interactivity & Shortcuts Request URL: 填同一个 https://<your-tunnel>/slack/events\"\n ];\n return [\n \"Slack 这些值在哪里拿:\",\n `- Slack App 管理页: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n ...modeSpecific,\n \"- Slack Bot User OAuth Token: OAuth & Permissions -> Bot User OAuth Token\",\n \"- Bot Token Scopes: app_mentions:read, chat:write, reactions:write, channels:history\",\n \"- Bot Events: app_mention, message.channels\",\n \"- Team ID / Channel ID: 用浏览器打开 Slack channel,从地址里复制 T... 和 C...\",\n \"- 测试前在目标 channel 里运行 /invite @你的 App 名称,把 app 邀请进 channel\"\n ].join(\"\\n\");\n }\n\n const modeSpecific =\n mode === \"socket_mode\"\n ? [\n `- Socket Mode docs: ${OFFICIAL_SETUP_LINKS.slackSocketModeDocs}`,\n \"- Slack App-Level Token: Basic Information -> App-Level Tokens -> Generate Token and Scopes, then add connections:write\",\n \"- Interactivity & Shortcuts: turn Interactivity on; Socket Mode does not need a Request URL\"\n ]\n : [\n `- Signing Secret docs: ${OFFICIAL_SETUP_LINKS.slackSigningSecretDocs}`,\n \"- Slack Signing Secret: Basic Information -> App Credentials\",\n \"- Event Subscriptions Request URL: use your public tunnel, for example https://<your-tunnel>/slack/events\",\n \"- Interactivity & Shortcuts Request URL: use the same https://<your-tunnel>/slack/events\"\n ];\n return [\n \"Where to find these Slack values:\",\n `- Slack app settings: ${OFFICIAL_SETUP_LINKS.slackApps}`,\n ...modeSpecific,\n \"- Slack Bot User OAuth Token: OAuth & Permissions -> Bot User OAuth Token\",\n \"- Bot Token Scopes: app_mentions:read, chat:write, reactions:write, channels:history\",\n \"- Bot Events: app_mention, message.channels\",\n \"- Team ID / Channel ID: open the Slack channel in a browser and copy the T... and C... values from the URL\",\n \"- Before testing, run /invite @your app name in the target channel so Slack sends mentions to the app\"\n ].join(\"\\n\");\n}\n\nexport function formatGitHubTokenHelp(language: CliLanguage, input: { autoCreatePullRequest: boolean }): string {\n if (language === \"zh-CN\") {\n const permissions =\n input.autoCreatePullRequest\n ? [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: Read and write\"]\n : [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: 默认 apply 1 流程不需要;run branch 会使用本机 git remote 凭据推送\"];\n return [\n \"GitHub token 在哪里创建:\",\n `- 直接打开: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `- 官方教程: ${OFFICIAL_SETUP_LINKS.githubTokenDocs}`,\n \"\",\n \"推荐创建 fine-grained personal access token,只授权当前仓库。需要权限:\",\n ...permissions,\n \"\",\n \"GitHub 只会展示 token 一次,创建后马上复制并粘贴到下一步。\"\n ].join(\"\\n\");\n }\n\n const permissions =\n input.autoCreatePullRequest\n ? [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: Read and write\"]\n : [\"- Issues: Read and write\", \"- Pull requests: Read and write\", \"- Contents: not needed for the default apply-1 flow; branch push uses your local git remote credentials\"];\n return [\n \"Where to create the GitHub token:\",\n `- Direct token page: ${OFFICIAL_SETUP_LINKS.githubTokenPage}`,\n `- Official guide: ${OFFICIAL_SETUP_LINKS.githubTokenDocs}`,\n \"\",\n \"Create a fine-grained personal access token and limit it to this repository. Required permissions:\",\n ...permissions,\n \"\",\n \"GitHub only shows the token once. Copy it immediately, then paste it into the next prompt.\"\n ].join(\"\\n\");\n}\n","import { executorLabel } from \"../catalogs/executors.js\";\nimport { formatConfiguredCapabilities } from \"../catalogs/capabilities.js\";\nimport { platformById } from \"../catalogs/platforms.js\";\nimport type { CliLanguage } from \"../catalogs/languages.js\";\nimport type { OpenTagCliConfig } from \"../config.js\";\nimport { githubLocalWebhookUrl, githubPublicWebhookUrlPlaceholder, githubWebhooksSettingsUrl } from \"../platforms/github/display.js\";\nimport { formatLarkPersonalAgentSummary } from \"../platforms/lark/display.js\";\nimport { DEFAULT_GITHUB_WEBHOOK_PORT, DEFAULT_SLACK_EVENTS_PORT } from \"../platforms/ports.js\";\nimport type { LarkSetupMethod, OpenTagSetupInput } from \"./types.js\";\n\nfunction yesNo(value: boolean, language: CliLanguage): string {\n return language === \"zh-CN\" ? (value ? \"是\" : \"否\") : value ? \"yes\" : \"no\";\n}\n\nfunction larkSetupDescription(method: LarkSetupMethod, language: CliLanguage): string {\n if (language === \"zh-CN\") {\n if (method === \"saved\") return \"使用已保存的个人代理应用\";\n return method === \"scan\" ? \"创建新的个人代理应用\" : \"手动填写\";\n }\n if (method === \"saved\") return \"Saved Personal Agent\";\n return method === \"scan\" ? \"Create new Personal Agent\" : \"Manual credentials\";\n}\n\nexport function formatSetupReview(input: OpenTagSetupInput, configPath: string): string {\n const platform = platformById(input.platform);\n const commonLines =\n input.language === \"zh-CN\"\n ? [\n \"请确认 OpenTag 配置:\",\n `配置文件: ${configPath}`,\n `平台: ${platform.label}`,\n `编码代理: ${executorLabel(input.executor)}`,\n `项目路径: ${input.projectPath}`\n ]\n : [\n \"Review your OpenTag setup:\",\n `Config: ${configPath}`,\n `Platform: ${platform.label}`,\n `Coding agent: ${executorLabel(input.executor)}`,\n `Project path: ${input.projectPath}`\n ];\n\n const platformLines: string[] = [];\n const capabilityLines = formatConfiguredCapabilities({\n platforms: [input.platform],\n executors: [input.executor]\n });\n if (input.lark) {\n const larkPersonalAgent = formatLarkPersonalAgentSummary(\n {\n ...input.lark,\n ...(input.lark.savedCredentialsSource ? { source: input.lark.savedCredentialsSource } : {})\n },\n input.language\n );\n platformLines.push(\n ...(input.language === \"zh-CN\"\n ? [\n `Lark 连接方式: ${larkSetupDescription(input.lark.setupMethod, input.language)}`,\n `个人代理应用: ${larkPersonalAgent}`,\n `Lark/飞书租户: ${input.lark.domain}`,\n `默认绑定当前项目: ${yesNo(input.lark.bindingMethod === \"default_project\", input.language)}`\n ]\n : [\n `Lark setup: ${larkSetupDescription(input.lark.setupMethod, input.language)}`,\n `Personal Agent: ${larkPersonalAgent}`,\n `Lark / Feishu tenant: ${input.lark.domain}`,\n `Default project binding: ${yesNo(input.lark.bindingMethod === \"default_project\", input.language)}`\n ])\n );\n }\n if (input.slack) {\n const slackConnectionLines =\n input.slack.mode === \"socket_mode\"\n ? input.language === \"zh-CN\"\n ? [\"Slack 连接方式: 本地 Socket Mode\", \"Slack 入站: 通过 Slack WebSocket,不需要公网 URL\"]\n : [\"Slack connection: Local Socket Mode\", \"Slack ingress: Slack WebSocket; no public URL required\"]\n : input.language === \"zh-CN\"\n ? [\"Slack 连接方式: 公网 Events API\", `Slack Events URL: http://localhost:${input.slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events`]\n : [\"Slack connection: Public Events API\", `Slack Events URL: http://localhost:${input.slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events`];\n platformLines.push(\n ...(input.language === \"zh-CN\"\n ? [\n ...slackConnectionLines,\n `Slack Team ID: ${input.slack.teamId}`,\n `Slack Channel ID: ${input.slack.channelId}`,\n `默认绑定当前项目: ${yesNo(input.slack.bindingMethod === \"default_project\", input.language)}`\n ]\n : [\n ...slackConnectionLines,\n `Slack Team ID: ${input.slack.teamId}`,\n `Slack Channel ID: ${input.slack.channelId}`,\n `Default project binding: ${yesNo(input.slack.bindingMethod === \"default_project\", input.language)}`\n ])\n );\n }\n if (input.github) {\n const webhookPath = input.github.webhookPath;\n platformLines.push(\n ...(input.language === \"zh-CN\"\n ? [\n `GitHub 仓库: ${input.github.owner}/${input.github.repo}`,\n `GitHub 本地 webhook: ${githubLocalWebhookUrl({ port: input.github.port, webhookPath })}`,\n `GitHub Payload URL: ${githubPublicWebhookUrlPlaceholder(webhookPath)}`,\n \"Webhook secret: OpenTag 会自动生成\",\n \"默认 PR 流程: 回复 apply 1 后创建\",\n `run 后立刻自动创建 PR: ${yesNo(input.github.autoCreatePullRequest, input.language)}`\n ]\n : [\n `GitHub repository: ${input.github.owner}/${input.github.repo}`,\n `GitHub local webhook: ${githubLocalWebhookUrl({ port: input.github.port, webhookPath })}`,\n `GitHub Payload URL: ${githubPublicWebhookUrlPlaceholder(webhookPath)}`,\n \"Webhook secret: generated by OpenTag\",\n \"Default PR flow: create after replying `apply 1`\",\n `Immediate PR after run: ${yesNo(input.github.autoCreatePullRequest, input.language)}`\n ])\n );\n }\n const sessionProfileLines =\n input.agentSessionProfile && (input.agentSessionProfile.profile || input.agentSessionProfile.profileTemplate)\n ? input.language === \"zh-CN\"\n ? [\n input.agentSessionProfile.profile ? `Agent 会话 profile: ${input.agentSessionProfile.profile}` : undefined,\n input.agentSessionProfile.profileTemplate ? `Agent 会话 profile 模板: ${input.agentSessionProfile.profileTemplate}` : undefined\n ]\n : [\n input.agentSessionProfile.profile ? `Agent session profile: ${input.agentSessionProfile.profile}` : undefined,\n input.agentSessionProfile.profileTemplate ? `Agent session profile template: ${input.agentSessionProfile.profileTemplate}` : undefined\n ]\n : [];\n const lines = [...commonLines, ...capabilityLines, ...platformLines, ...sessionProfileLines.filter((line): line is string => Boolean(line))];\n return lines.join(\"\\n\");\n}\n\nexport function formatSetupComplete(config: OpenTagCliConfig, configPath: string): string {\n const repository = config.daemon.repositories[0];\n const language = config.preferences?.language ?? \"en\";\n const github = config.platforms.github;\n const slack = config.platforms.slack;\n const githubPort = github?.port ?? DEFAULT_GITHUB_WEBHOOK_PORT;\n if (language === \"zh-CN\") {\n return [\n \"OpenTag 配置已保存。\",\n `配置文件: ${configPath}`,\n repository ? `项目路径: ${repository.checkoutPath}` : undefined,\n slack ? \"\" : undefined,\n slack ? \"Slack 下一步:\" : undefined,\n slack ? `绑定 channel: ${slack.teamId}/${slack.channelId}` : undefined,\n slack ? \"测试前先在 Slack channel 里运行 /invite @你的 App 名称。\" : undefined,\n slack?.mode === \"socket_mode\" ? \"Socket Mode 不需要公网 URL;直接保持 opentag start 运行即可。\" : undefined,\n slack?.mode !== \"socket_mode\" && slack ? `Events API 本地监听: http://localhost:${slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events` : undefined,\n github ? \"\" : undefined,\n github ? \"GitHub webhook 下一步:\" : undefined,\n github ? `GitHub 设置页: ${githubWebhooksSettingsUrl(github)}` : undefined,\n github ? `Payload URL: ${githubPublicWebhookUrlPlaceholder(github.webhookPath ?? \"/github/webhooks\")}` : undefined,\n github ? `Secret: ${github.webhookSecret}` : undefined,\n github ? \"Content type: application/json\" : undefined,\n github ? \"Events: Issue comments, Pull request review comments\" : undefined,\n github ? `本地监听: ${githubLocalWebhookUrl({ port: github.port, webhookPath: github.webhookPath })}` : undefined,\n github ? `公网 URL 需要由 tunnel 指向本地监听地址,例如 ngrok http ${githubPort}。` : undefined,\n github ? \"当 OpenTag 给出 create_pull_request 建议动作后,在 thread 里回复 apply 1 创建 PR。\" : undefined\n ]\n .filter((line): line is string => Boolean(line))\n .join(\"\\n\");\n }\n return [\n \"OpenTag config saved.\",\n `Config: ${configPath}`,\n repository ? `Project path: ${repository.checkoutPath}` : undefined,\n slack ? \"\" : undefined,\n slack ? \"Slack next steps:\" : undefined,\n slack ? `Bound channel: ${slack.teamId}/${slack.channelId}` : undefined,\n slack ? \"Before testing, run /invite @your app name in that Slack channel.\" : undefined,\n slack?.mode === \"socket_mode\" ? \"Socket Mode does not need a public URL; keep opentag start running.\" : undefined,\n slack?.mode !== \"socket_mode\" && slack ? `Events API local listener: http://localhost:${slack.port ?? DEFAULT_SLACK_EVENTS_PORT}/slack/events` : undefined,\n github ? \"\" : undefined,\n github ? \"GitHub webhook next steps:\" : undefined,\n github ? `GitHub settings: ${githubWebhooksSettingsUrl(github)}` : undefined,\n github ? `Payload URL: ${githubPublicWebhookUrlPlaceholder(github.webhookPath ?? \"/github/webhooks\")}` : undefined,\n github ? `Secret: ${github.webhookSecret}` : undefined,\n github ? \"Content type: application/json\" : undefined,\n github ? \"Events: Issue comments, Pull request review comments\" : undefined,\n github ? `Local listener: ${githubLocalWebhookUrl({ port: github.port, webhookPath: github.webhookPath })}` : undefined,\n github ? `Point a public tunnel at the local listener, for example: ngrok http ${githubPort}.` : undefined,\n github ? \"When OpenTag shows a create_pull_request action, reply `apply 1` in the thread to create the PR.\" : undefined\n ]\n .filter((line): line is string => Boolean(line))\n .join(\"\\n\");\n}\n","import * as p from \"@clack/prompts\";\nimport type { PromptAdapter, PromptOption } from \"./prompts.js\";\n\nfunction cancelled(): never {\n p.cancel(\"OpenTag setup cancelled.\");\n process.exit(0);\n}\n\nfunction unwrapPromptResult<Value>(value: Value | symbol): Value {\n if (p.isCancel(value)) {\n cancelled();\n }\n return value;\n}\n\ntype ClackStringOption<Value extends string> = {\n value: Value;\n label: string;\n hint?: string;\n};\n\nfunction clackOptions<Value extends string>(options: Array<PromptOption<Value>>): Array<ClackStringOption<Value>> {\n return options.map((option) => {\n const clackOption: ClackStringOption<Value> = {\n value: option.value,\n label: option.label\n };\n return option.hint ? { ...clackOption, hint: option.hint } : clackOption;\n });\n}\n\nexport function createClackPromptAdapter(): PromptAdapter {\n return {\n intro(message) {\n p.intro(message);\n },\n outro(message) {\n p.outro(message);\n },\n note(message) {\n p.log.message(message);\n },\n async select<Value extends string>(input: {\n message: string;\n options: Array<PromptOption<Value>>;\n initialValue?: Value;\n }): Promise<Value> {\n const selected = unwrapPromptResult(\n await p.select<string>({\n message: input.message,\n options: clackOptions(input.options),\n ...(input.initialValue ? { initialValue: input.initialValue } : {})\n })\n );\n return selected as Value;\n },\n async text(input) {\n return unwrapPromptResult(await p.text(input));\n },\n async password(input) {\n return unwrapPromptResult(await p.password({ ...input, mask: \"*\" }));\n },\n async confirm(input) {\n return unwrapPromptResult(await p.confirm(input));\n }\n };\n}\n","import qrcode from \"qrcode-terminal\";\nimport { registerLarkPersonalAgent, type RegisteredLarkPersonalAgent } from \"@opentag/lark\";\nimport type { CliLanguage } from \"../../catalogs/languages.js\";\n\nexport type ScanLarkPersonalAgentDependencies = {\n output?: Pick<NodeJS.WriteStream, \"write\">;\n register?: typeof registerLarkPersonalAgent;\n showQrCode?: boolean;\n};\n\nexport async function scanLarkPersonalAgent(\n input: { language?: CliLanguage } = {},\n dependencies: ScanLarkPersonalAgentDependencies = {}\n): Promise<RegisteredLarkPersonalAgent> {\n const output = dependencies.output ?? process.stdout;\n const register = dependencies.register ?? registerLarkPersonalAgent;\n const showQrCode = dependencies.showQrCode ?? process.env.OPENTAG_SHOW_QR === \"1\";\n const language = input.language ?? \"en\";\n\n const registered = await register({\n onQrCode(info) {\n output.write(\n language === \"zh-CN\"\n ? \"\\n打开这个链接创建 Lark/飞书个人代理应用:\\n\"\n : \"\\nOpen this URL to create the Lark / Feishu Personal Agent app:\\n\"\n );\n output.write(`URL: ${info.url}\\n`);\n output.write(\n language === \"zh-CN\"\n ? `二维码约 ${Math.ceil(info.expireIn / 60)} 分钟后过期。\\n`\n : `This QR code expires in about ${Math.ceil(info.expireIn / 60)} minute(s).\\n`\n );\n if (showQrCode) {\n output.write(language === \"zh-CN\" ? \"\\n终端二维码:\\n\" : \"\\nTerminal QR code:\\n\");\n qrcode.generate(info.url, { small: true }, (qr) => {\n output.write(`${qr}\\n`);\n });\n } else {\n output.write(\n language === \"zh-CN\"\n ? \"设置链接较长,默认不在终端显示二维码。\\n\"\n : \"Terminal QR codes are hidden by default because setup links are large.\\n\"\n );\n output.write(\n language === \"zh-CN\"\n ? \"如果想扫描终端二维码,可以设置 OPENTAG_SHOW_QR=1。\\n\"\n : \"Set OPENTAG_SHOW_QR=1 if you prefer scanning a terminal QR code.\\n\"\n );\n }\n output.write(\n language === \"zh-CN\"\n ? \"这个链接可能从飞书 bootstrap 页面开始;如果你使用 Lark 国际租户,平台会在扫码后切换。请保持这个终端打开,OpenTag 会保存平台返回的真实 Lark/飞书租户。\\n\\n\"\n : \"This link may start on the Feishu bootstrap page; Lark global tenants can switch after scan. Keep this terminal open. OpenTag will save the real Lark / Feishu tenant returned by the platform.\\n\\n\"\n );\n },\n onStatus(info) {\n if (info.status === \"slow_down\") {\n output.write(\n language === \"zh-CN\"\n ? `Lark 要求降低轮询频率,下次检查将在 ${info.interval ?? \"几\"} 秒后进行。\\n`\n : `Lark asked OpenTag to poll more slowly. Next check in ${info.interval ?? \"a few\"} seconds.\\n`\n );\n } else if (info.status === \"domain_switched\") {\n output.write(\n language === \"zh-CN\"\n ? \"检测到 Lark 租户,将继续使用 larksuite.com 完成注册。\\n\"\n : \"Detected a Lark tenant. Continuing registration on larksuite.com.\\n\"\n );\n }\n },\n onWarning(message) {\n output.write(`${message}\\n`);\n }\n });\n\n output.write(language === \"zh-CN\" ? \"Lark 个人代理应用已连接。\\n\" : \"Lark Personal Agent connected.\\n\");\n output.write(`App ID: ${registered.appId}\\n`);\n output.write(`${language === \"zh-CN\" ? \"租户\" : \"Tenant\"}: ${registered.domain}\\n`);\n if (registered.operatorOpenId) {\n output.write(`${language === \"zh-CN\" ? \"设置用户\" : \"Setup user\"}: ${registered.operatorOpenId}\\n`);\n }\n if (registered.botOpenId) {\n output.write(`${language === \"zh-CN\" ? \"机器人\" : \"Bot\"}: ${registered.botName ?? \"OpenTag\"} (${registered.botOpenId})\\n`);\n }\n output.write(\"\\n\");\n\n return registered;\n}\n"],"mappings":";;;AACA,SAAS,eAAe;;;ACDxB,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,WAAW,WAAW,cAAc,YAAY,QAAQ,UAAU,qBAAqB;AAChG,SAAS,eAAe;AACxB,SAAS,SAAS,MAAM,eAAe;AACvC,SAAS,qBAAqB,yBAAyB,yBAAmD;AAC1G,SAAS,SAAS;AAQlB,IAAM,mBAAmB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAChD,IAAM,qBAAqB,EAAE,KAAK,CAAC,UAAU,cAAc,OAAO,CAAC;AACnE,IAAM,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACxD,IAAM,oBAAoB,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC;AAChD,IAAM,iBAAiB,EAAE,KAAK,CAAC,QAAQ,SAAS,UAAU,UAAU,UAAU,CAAC;AAC/E,IAAM,wBAAwB,EAAE,KAAK,CAAC,SAAS,QAAQ,QAAQ,CAAC;AAChE,IAAM,kBAAkB,EAAE,KAAK,CAAC,eAAe,YAAY,CAAC;AAC5D,IAAM,sBAAsB,EAAE,KAAK,CAAC,mBAAmB,YAAY,CAAC;AACpE,IAAM,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,SAAS;AAEvE,IAAM,kBAAkB,EAAE,mBAAmB,QAAQ;AAAA,EACnD,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,KAAK;AAAA,IACrB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,EAC/B,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,MAAM;AAAA,IACtB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,EAC/B,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,UAAU;AAAA,IAC1B,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,IAChC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,EAClC,CAAC,EACA,OAAO;AACZ,CAAC;AAOD,SAAS,sBAAsB,OAAe,OAAuB;AACnE,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,UAAU,KAAK,8BAA8B;AAAA,EAC/D;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,KAAwB,mBAAqC,cAAsB;AACpH,MAAI;AACJ,MAAI;AACF,YAAQ;AAAA,MACN;AAAA,MACA,CAAC,yBAAyB,MAAM,MAAM,IAAI,SAAS,MAAM,IAAI,OAAO;AAAA,MACpE,EAAE,UAAU,OAAO;AAAA,IACrB;AAAA,EACF,SAAS,OAAO;AACd,UAAM,SAAS,iBAAiB,SAAS,MAAM,UAAU,IAAI,MAAM,OAAO,KAAK;AAC/E,UAAM,IAAI;AAAA,MACR,uBAAuB,IAAI,OAAO,IAAI,IAAI,OAAO,kHAAkH,MAAM;AAAA,IAC3K;AAAA,EACF;AACA,SAAO,sBAAsB,OAAO,KAAK,GAAG,gBAAgB,IAAI,OAAO,IAAI,IAAI,OAAO,EAAE;AAC1F;AAEA,SAAS,iBAAiB,KAAwB;AAChD,MAAI,IAAI,SAAS,OAAO;AACtB,UAAM,QAAQ,QAAQ,IAAI,IAAI,IAAI;AAClC,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,kBAAkB,IAAI,IAAI,cAAc;AAAA,IAC1D;AACA,WAAO,sBAAsB,OAAO,WAAW,IAAI,IAAI,EAAE;AAAA,EAC3D;AACA,MAAI,IAAI,SAAS,QAAQ;AACvB,QAAI;AACJ,QAAI;AACF,cAAQ,aAAa,IAAI,MAAM,MAAM;AAAA,IACvC,QAAQ;AACN,YAAM,IAAI,MAAM,mBAAmB,IAAI,IAAI,yBAAyB;AAAA,IACtE;AACA,WAAO,sBAAsB,OAAO,YAAY,IAAI,IAAI,EAAE;AAAA,EAC5D;AACA,SAAO,mBAAmB,GAAG;AAC/B;AAEA,IAAM,qBAAqB,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,eAAe,CAAC,EAAE,UAAU,CAAC,UAAU;AAC5F,SAAO,OAAO,UAAU,WAAW,QAAQ,iBAAiB,KAAK;AACnE,CAAC;AAED,IAAM,sBAAsB,EAAE,mBAAmB,QAAQ;AAAA,EACvD,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,OAAO;AAAA,EACzB,CAAC,EACA,OAAO;AAAA,EACV,EACG,OAAO;AAAA,IACN,MAAM,EAAE,QAAQ,OAAO;AAAA,IACvB,UAAU,EAAE,OAAO,EAAE,IAAI;AAAA,IACzB,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC5C,CAAC,EACA,OAAO;AACZ,CAAC;AAED,IAAM,0BAA0B,EAC7B,OAAO;AAAA,EACN,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,iBAAiB;AAAA,EACjB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,cAAc;AAChB,CAAC,EACA,OAAO;AAEV,IAAM,uBAAuB,EAC1B,OAAO;AAAA,EACN,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAChC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AACvD,CAAC,EACA,OAAO;AAEV,IAAM,mBAAmB,EACtB,OAAO;AAAA,EACN,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACpC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClC,gBAAgB,EAAE,KAAK,CAAC,eAAe,QAAQ,qBAAqB,WAAW,MAAM,CAAC,EAAE,SAAS;AAAA,EACjG,4BAA4B,EAAE,QAAQ,EAAE,SAAS;AACnD,CAAC,EACA,OAAO;AAEV,IAAM,eAAe,EAClB,OAAO;AAAA,EACN,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS;AACrD,CAAC,EACA,OAAO;AAEV,IAAM,4BAA4B,EAC/B,OAAO;AAAA,EACN,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS;AACrD,CAAC,EACA,OAAO;AAEV,IAAM,iBAAiB,EACpB,OAAO;AAAA,EACN,MAAM,EAAE,KAAK,CAAC,WAAW,SAAS,KAAK,CAAC,EAAE,SAAS;AAAA,EACnD,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACjD,oBAAoB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AACpD,CAAC,EACA,OAAO;AAEV,IAAM,qBAAqB,EACxB,OAAO;AAAA,EACN,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC1B,eAAe,EAAE,OAAO,EAAE,IAAI;AAAA,EAC9B,cAAc,EAAE,MAAM,uBAAuB,EAAE,IAAI,CAAC;AAAA,EACpD,iBAAiB,EAAE,MAAM,oBAAoB,EAAE,SAAS;AAAA,EACxD,YAAY,iBAAiB,SAAS;AAAA,EACtC,QAAQ,aAAa,SAAS;AAAA,EAC9B,qBAAqB,0BAA0B,SAAS;AAAA,EACxD,UAAU,eAAe,SAAS;AAAA,EAClC,aAAa,mBAAmB,SAAS;AAAA,EACzC,kBAAkB,mBAAmB,SAAS,EAAE,SAAS;AAAA,EACzD,0BAA0B,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC/C,4BAA4B,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,aAAa,mBAAmB,SAAS;AAAA,EACzC,cAAc,EAAE,MAAM,kBAAkB,EAAE,SAAS;AAAA,EACnD,gCAAgC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;AAAA,EAC3E,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,cAAc,sBAAsB,SAAS;AAC/C,CAAC,EACA,OAAO;AAEV,IAAM,qBAAqB,EACxB,OAAO;AAAA,EACN,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,WAAW;AAAA,EACX,QAAQ,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC;AAAA,EACjC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACtC,uBAAuB,EAAE,QAAQ,EAAE,SAAS;AAC9C,CAAC,EACA,OAAO;AAEV,IAAM,sBAAsB,EACzB,OAAO;AAAA,EACN,MAAM,gBAAgB,SAAS;AAAA,EAC/B,UAAU,mBAAmB,SAAS;AAAA,EACtC,eAAe,mBAAmB,SAAS;AAAA,EAC3C,UAAU;AAAA,EACV,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACxB,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAClC,uBAAuB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5C,MAAM;AACR,CAAC,EACA,OAAO,EACP,YAAY,CAAC,OAAO,YAAY;AAC/B,QAAM,OAAO,MAAM,QAAQ;AAC3B,MAAI,SAAS,iBAAiB,CAAC,MAAM,UAAU;AAC7C,YAAQ,SAAS;AAAA,MACf,MAAM,EAAE,aAAa;AAAA,MACrB,MAAM,CAAC,UAAU;AAAA,MACjB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACA,MAAI,SAAS,gBAAgB,CAAC,MAAM,eAAe;AACjD,YAAQ,SAAS;AAAA,MACf,MAAM,EAAE,aAAa;AAAA,MACrB,MAAM,CAAC,eAAe;AAAA,MACtB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF,CAAC;AAEH,IAAM,uBAAuB,EAC1B,OAAO;AAAA,EACN,eAAe;AAAA,EACf,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxC,MAAM;AACR,CAAC,EACA,OAAO;AAEV,IAAM,oBAAoB,EACvB,OAAO;AAAA,EACN,UAAU,kBAAkB,SAAS;AAAA,EACrC,WAAW,EACR,OAAO;AAAA,IACN,WAAW,EAAE,MAAM,cAAc,EAAE,SAAS;AAAA,IAC5C,UAAU,iBAAiB,SAAS;AAAA,IACpC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACxC,iBAAiB,sBAAsB,SAAS;AAAA,IAChD,YAAY,EAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC,EAAE,SAAS;AAAA,IAChD,eAAe,oBAAoB,SAAS;AAAA,IAC5C,WAAW,gBAAgB,SAAS;AAAA,IACpC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACxC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IAC3C,WAAW;AAAA,IACX,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACxC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,IACvC,YAAY;AAAA,IACZ,6BAA6B,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpD,CAAC,EACA,OAAO,EACP,SAAS;AACd,CAAC,EACA,OAAO;AAEH,IAAM,yBAAyB,EACnC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,OAAO,EACJ,OAAO;AAAA,IACN,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC3B,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,IAC9B,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAChC,CAAC,EACA,OAAO;AAAA,EACV,SAAS,oBAAoB,SAAS;AAAA,EACtC,aAAa,kBAAkB,SAAS;AAAA,EACxC,QAAQ;AAAA,EACR,WAAW,EACR,OAAO;AAAA,IACN,MAAM,mBAAmB,SAAS;AAAA,IAClC,OAAO,oBAAoB,SAAS;AAAA,IACpC,QAAQ,qBAAqB,SAAS;AAAA,EACxC,CAAC,EACA,OAAO;AACZ,CAAC,EACA,OAAO;AAiBV,SAAS,WAAW,KAAsB,OAAO,QAAQ,GAAW;AAClE,MAAI,IAAI,oBAAqB,QAAO,QAAQ,IAAI,mBAAmB;AACnE,MAAI,IAAI,gBAAiB,QAAO,QAAQ,IAAI,iBAAiB,SAAS;AACtE,SAAO,KAAK,MAAM,WAAW,SAAS;AACxC;AAEO,SAAS,kBAAkB,MAAuB,QAAQ,KAAK,OAAO,QAAQ,GAAW;AAC9F,MAAI,IAAI,oBAAqB,QAAO,QAAQ,IAAI,mBAAmB;AACnE,SAAO,KAAK,WAAW,KAAK,IAAI,GAAG,aAAa;AAClD;AAEO,SAAS,sBAAsB,MAAuB,QAAQ,KAAK,OAAO,QAAQ,GAAW;AAClG,MAAI,IAAI,kBAAmB,QAAO,QAAQ,IAAI,iBAAiB;AAC/D,MAAI,IAAI,eAAgB,QAAO,QAAQ,IAAI,gBAAgB,SAAS;AACpE,SAAO,KAAK,MAAM,UAAU,SAAS,SAAS;AAChD;AAEA,SAAS,WAAW,MAAsC;AACxD,SAAO,KAAK,SAAS,KAAK,KAAK,GAAG,IAAI;AACxC;AAEO,SAAS,qBAAqB,OAAwB;AAC3D,MAAI,iBAAiB,EAAE,UAAU;AAC/B,WAAO,MAAM,OAAO,IAAI,CAAC,UAAU,GAAG,WAAW,MAAM,IAAI,CAAC,KAAK,MAAM,OAAO,EAAE,EAAE,KAAK,IAAI;AAAA,EAC7F;AACA,SAAO,wBAAwB,KAAK;AACtC;AAEO,SAAS,eAAe,OAAkC;AAC/D,QAAM,SAAS,uBAAuB,MAAM,KAAK;AACjD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ,kBAAkB,OAAO,MAAM;AAAA,EACzC;AACF;AAEO,SAAS,sBAAsB,QAAuF;AAC3H,SAAO,OAAO,eAAe,OAAO;AACtC;AAEO,SAAS,sBAAsB,QAA8C;AAClF,SAAO,OAAO,SAAS,QAAQ;AACjC;AAEO,SAAS,mBAAmB,QAA8C;AAC/E,SAAO,OAAO,SAAS,SAAS,UAAU,OAAO,QAAQ,WAAW;AACtE;AAEO,SAAS,cAAc,OAAO,kBAAkB,GAAqB;AAC1E,0BAAwB,IAAI;AAC5B,SAAO,eAAe,KAAK,MAAM,aAAa,MAAM,MAAM,CAAC,CAAC;AAC9D;AAEO,SAAS,uBAAuB,MAAoB;AACzD,QAAM,cAAc,UAAU,MAAM,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACpE,MAAI,aAAa;AACf,cAAU,MAAM,GAAK;AAAA,EACvB;AACF;AAEO,SAAS,qBAAqB,MAAc,QAAgC;AACjF,yBAAuB,QAAQ,IAAI,CAAC;AACpC,QAAM,WAAW,GAAG,IAAI,IAAI,QAAQ,GAAG,IAAI,WAAW,CAAC;AACvD,MAAI;AACF,kBAAc,UAAU,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,GAAM,EAAE,MAAM,KAAO,MAAM,KAAK,CAAC;AAC3F,cAAU,UAAU,GAAK;AACzB,eAAW,UAAU,IAAI;AACzB,cAAU,MAAM,GAAK;AAAA,EACvB,SAAS,OAAO;AACd,WAAO,UAAU,EAAE,OAAO,KAAK,CAAC;AAChC,UAAM;AAAA,EACR;AACF;AAEO,SAAS,wBAAwB,MAAoB;AAC1D,MAAI,QAAQ,aAAa,QAAS;AAClC,QAAM,OAAO,SAAS,IAAI,EAAE,OAAO;AACnC,OAAK,OAAO,QAAW,GAAG;AACxB,UAAM,IAAI,MAAM,gFAAgF,IAAI;AAAA,yBAA4B,IAAI,EAAE;AAAA,EACxI;AACF;AAEA,SAAS,kBAAkB,OAAyB;AAClD,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO;AAClD,MAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,MAAM;AACZ,QAAI,IAAI,SAAS,SAAS,OAAO,IAAI,SAAS,UAAU;AACtD,aAAO,QAAQ,IAAI,IAAI;AAAA,IACzB;AACA,QAAI,IAAI,SAAS,UAAU,OAAO,IAAI,SAAS,UAAU;AACvD,aAAO,SAAS,IAAI,IAAI;AAAA,IAC1B;AACA,QAAI,IAAI,SAAS,cAAc,OAAO,IAAI,YAAY,YAAY,OAAO,IAAI,YAAY,UAAU;AACjG,aAAO,aAAa,IAAI,OAAO,IAAI,IAAI,OAAO;AAAA,IAChD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,KAAa,OAAyB;AACzD,MAAI,QAAQ,kBAAkB,MAAM,QAAQ,KAAK,GAAG;AAClD,WAAO,MAAM,IAAI,CAAC,UAAU,kBAAkB,KAAK,CAAC;AAAA,EACtD;AACA,MACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,GAAG,GACd;AACA,WAAO,kBAAkB,KAAK;AAAA,EAChC;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,UAAU,YAAY,IAAI,KAAK,CAAC;AAAA,EACpD;AACA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,WAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,UAAU,MAAM,CAAC,UAAU,YAAY,UAAU,UAAU,CAAC,CAAC,CAAC;AAAA,EAChI;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,QAAmC;AACnE,SAAO,YAAY,IAAI,MAAM;AAC/B;AAEO,SAAS,uBAAuB,OAAyB;AAC9D,SAAO,YAAY,IAAI,KAAK;AAC9B;AAEO,SAAS,sBAAsB,OAAO,kBAAkB,GAAY;AACzE,0BAAwB,IAAI;AAC5B,SAAO,uBAAuB,KAAK,MAAM,aAAa,MAAM,MAAM,CAAC,CAAC;AACtE;;;ACncA,SAAS,sCAAyE;;;ACAlF,SAAS,kBAAkB;AAC3B,SAAS,WAAW,SAAS,QAAAA,aAAY;AAmBlC,IAAM,mBAAyC;AAAA,EACpD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,SAAS;AAAA,EACX;AACF;AAEA,SAAS,iBAAiB,SAAiB,MAAyB,QAAQ,KAAc;AACxF,MAAI,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,IAAI,EAAG,QAAO,WAAW,OAAO;AAC9E,QAAM,QAAQ,IAAI,MAAM,MAAM,SAAS,EAAE,OAAO,OAAO,KAAK,CAAC;AAC7D,QAAM,aACJ,QAAQ,aAAa,WAAW,CAAC,QAAQ,OAAO,IAC5C,CAAC,SAAS,IAAI,IAAI,SAAS,MAAM,SAAS,EAAE,OAAO,OAAO,KAAK,CAAC,QAAQ,QAAQ,QAAQ,MAAM,GAAG,IAAI,CAAC,cAAc,GAAG,OAAO,GAAG,UAAU,YAAY,CAAC,EAAE,CAAC,IAC3J,CAAC,OAAO;AACd,SAAO,MAAM,KAAK,CAAC,cAAc,WAAW,KAAK,CAAC,cAAc,WAAWA,MAAK,WAAW,SAAS,CAAC,CAAC,CAAC;AACzG;AAEA,SAAS,gBAAgB,UAA8B,KAA4C;AACjG,SAAO,SAAS,aAAa,IAAI,SAAS,UAAU,KAAK,SAAS,UAAU,SAAS;AACvF;AAEO,SAAS,aAAa,OAAoC;AAC/D,SAAO,UAAU,UAAU,UAAU,WAAW,UAAU,iBAAiB,UAAU;AACvF;AAEO,SAAS,gBAAgB,MAAyB,QAAQ,KAA0B;AACzF,SAAO,iBAAiB,IAAI,CAAC,aAAa;AACxC,QAAI,SAAS,iBAAiB;AAC5B,aAAO;AAAA,QACL,IAAI,SAAS;AAAA,QACb,WAAW;AAAA,QACX,QAAQ,SAAS,UAAU,oDAAoD;AAAA,MACjF;AAAA,IACF;AACA,UAAM,UAAU,gBAAgB,UAAU,GAAG;AAC7C,UAAM,YAAY,UAAU,iBAAiB,SAAS,GAAG,IAAI;AAC7D,WAAO;AAAA,MACL,IAAI,SAAS;AAAA,MACb;AAAA,MACA,QAAQ,YAAY,SAAS,OAAO,aAAa,kBAAkB,OAAO;AAAA,IAC5E;AAAA,EACF,CAAC;AACH;AAEO,SAAS,kBAAkB,QAG9B,CAAC,GAAe;AAClB,MAAI,MAAM,UAAU;AAClB,WAAO,MAAM;AAAA,EACf;AACA,QAAM,aAAa,MAAM,cAAc,gBAAgB;AACvD,MAAI,WAAW,KAAK,CAAC,aAAa,SAAS,OAAO,OAAO,GAAG,WAAW;AACrE,WAAO;AAAA,EACT;AACA,MAAI,WAAW,KAAK,CAAC,aAAa,SAAS,OAAO,aAAa,GAAG,WAAW;AAC3E,WAAO;AAAA,EACT;AACA,MAAI,WAAW,KAAK,CAAC,aAAa,SAAS,OAAO,QAAQ,GAAG,WAAW;AACtE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,cAAc,IAAoB;AAChD,SAAO,iBAAiB,KAAK,CAAC,aAAa,SAAS,OAAO,EAAE,GAAG,SAAS;AAC3E;AAEA,SAAS,qBAAqB,UAA8B,WAA4B;AACtF,MAAI,SAAS,SAAS;AACpB,WAAO;AAAA,EACT;AACA,SAAO,YAAY,cAAc;AACnC;AAEO,SAAS,gBAAgB,MAAyB,QAAQ,KAAa;AAC5E,QAAM,aAAa,gBAAgB,GAAG;AACtC,SAAO;AAAA,IACL;AAAA,IACA,GAAG,iBAAiB,IAAI,CAAC,aAAa;AACpC,YAAM,YAAY,WAAW,KAAK,CAAC,UAAU,MAAM,OAAO,SAAS,EAAE;AACrE,YAAM,SAAS,qBAAqB,UAAU,WAAW,aAAa,KAAK;AAC3E,aAAO,KAAK,SAAS,KAAK,KAAK,MAAM,GAAG,YAAY,KAAK,UAAU,MAAM,MAAM,EAAE;AAAA,IACnF,CAAC;AAAA,EACH,EAAE,KAAK,IAAI;AACb;;;AC/GA,IAAM,uBAAuB;AAE7B,IAAM,6BAAuF;AAAA,EAC3F,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,SAAS;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,SAAS;AAAA,EACX;AAAA;AAAA;AAGF;AAEO,IAAM,mBAAyC;AAAA,EACpD;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AACF;AAEO,SAAS,gBAAgB,OAA2B;AACzD,MAAI,UAAU,UAAU,UAAU,WAAW,UAAU,YAAY,UAAU,YAAY,UAAU,YAAY;AAC7G,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,4DAA4D;AAC9E;AAEO,SAAS,aAAa,IAAoC;AAC/D,QAAM,aAAa,iBAAiB,KAAK,CAAC,aAAa,SAAS,OAAO,EAAE;AACzE,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,qBAAqB,EAAE,EAAE;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,IAAgB,UAA2C;AAC/F,QAAM,OAAO,2BAA2B,EAAE,IAAI,QAAQ;AACtD,SAAO,OAAO,GAAG,oBAAoB,IAAI,IAAI,KAAK;AACpD;AAEO,SAAS,qBAAqB,QAAgC;AACnE,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,EACX;AACF;AAEO,SAAS,kBAA0B;AACxC,SAAO;AAAA,IACL;AAAA,IACA,GAAG,iBAAiB,IAAI,CAAC,aAAa;AACpC,aAAO,KAAK,SAAS,KAAK,KAAK,qBAAqB,SAAS,MAAM,CAAC;AAAA,IACtE,CAAC;AAAA,EACH,EAAE,KAAK,IAAI;AACb;;;AF9EO,IAAM,wBAA0E;AAEhF,IAAM,wBAA0E;AAAA,EACrF,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe,CAAC,kBAAkB,oBAAoB,WAAW;AAAA,IACjE,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,iBAAiB,CAAC,gBAAgB;AAAA,IAClC,mBAAmB,CAAC,cAAc;AAAA,EACpC;AAAA,EACA,eAAe;AAAA,IACb,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe,CAAC,kBAAkB,oBAAoB,WAAW;AAAA,IACjE,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,iBAAiB,CAAC,mBAAmB;AAAA,IACrC,mBAAmB,CAAC,cAAc;AAAA,EACpC;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe,CAAC,kBAAkB,oBAAoB,WAAW;AAAA,IACjE,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,iBAAiB,CAAC;AAAA,IAClB,mBAAmB,CAAC,cAAc;AAAA,EACpC;AAAA,EACA,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,wBAAwB;AAAA,IACxB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,eAAe,CAAC,kBAAkB,kBAAkB;AAAA,IACpD,gBAAgB;AAAA,IAChB,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,iBAAiB,CAAC;AAAA,IAClB,mBAAmB,CAAC,cAAc;AAAA,EACpC;AACF;AAEA,SAAS,MAAM,OAA8B;AAC3C,SAAO,QAAQ,QAAQ;AACzB;AAEO,SAAS,yBAAyB,IAAwB;AAC/D,QAAM,aAAa,iBAAiB,KAAK,CAAC,aAAa,SAAS,OAAO,EAAE;AACzE,QAAM,aAAa,sBAAsB,EAAE;AAC3C,QAAM,QAAQ,YAAY,SAAS;AACnC,SAAO,GAAG,KAAK,YAAY,MAAM,WAAW,cAAc,CAAC,aAAa,MAAM,WAAW,qBAAqB,CAAC,oBAAoB,MAAM,WAAW,qBAAqB,CAAC,UAAU,MAAM,WAAW,wBAAwB,CAAC,aAAa,MAAM,WAAW,qBAAqB,CAAC,yBAAyB,MAAM,WAAW,0BAA0B,CAAC,cAAc,WAAW,gBAAgB;AAClY;AAEO,SAAS,yBAAyB,IAAoB;AAC3D,QAAM,aAAa,aAAa,EAAE,IAAI,sBAAsB,EAAE,IAAI;AAClE,QAAM,QAAQ,iBAAiB,KAAK,CAAC,aAAa,SAAS,OAAO,EAAE,GAAG,SAAS;AAChF,MAAI,CAAC,YAAY;AACf,WAAO,GAAG,KAAK;AAAA,EACjB;AACA,QAAM,UAAU,WAAW,gBAAgB,SAAS,WAAW,gBAAgB,KAAK,GAAG,IAAI;AAC3F,QAAM,aAAa,WAAW,kBAAkB,SAAS,WAAW,kBAAkB,KAAK,GAAG,IAAI;AAClG,QAAM,UAAU,WAAW,cAAc,SAAS,WAAW,cAAc,KAAK,GAAG,IAAI;AACvF,SAAO,GAAG,KAAK,gBAAgB,WAAW,UAAU,aAAa,MAAM,WAAW,eAAe,CAAC,eAAe,MAAM,WAAW,iBAAiB,CAAC,YAAY,MAAM,WAAW,cAAc,CAAC,qBAAqB,MAAM,WAAW,sBAAsB,CAAC,cAAc,WAAW,cAAc,cAAc,WAAW,YAAY,aAAa,OAAO,YAAY,WAAW,cAAc,WAAW,WAAW,WAAW,kBAAkB,WAAW,kBAAkB,qBAAqB,WAAW,cAAc,iBAAiB,MAAM,WAAW,gBAAgB,CAAC,mBAAmB,WAAW,iBAAiB,eAAe,WAAW,kBAAkB,aAAa,OAAO,gBAAgB,UAAU;AAC9rB;AAEO,SAAS,6BAA6B,OAAmE;AAC9G,QAAM,gBAAgB,MAAM,UAAU,IAAI,CAAC,OAAO,cAAc,yBAAyB,EAAE,CAAC,EAAE;AAC9F,QAAM,kBAAkB,CAAC,GAAG,IAAI,IAAI,MAAM,SAAS,CAAC;AACpD,QAAM,gBAAgB,gBAAgB,IAAI,CAAC,OAAO,cAAc,yBAAyB,EAAE,CAAC,EAAE;AAC9F,SAAO,CAAC,iBAAiB,GAAI,cAAc,SAAS,gBAAgB,CAAC,iBAAiB,GAAI,GAAI,cAAc,SAAS,gBAAgB,CAAC,iBAAiB,CAAE;AAC3J;;;AGlIO,SAAS,kCAA0C;AACxD,SAAO,CAAC,0BAA0B,GAAG,iBAAiB,IAAI,CAAC,aAAa,KAAK,yBAAyB,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI;AAClI;AAEO,SAAS,6BAA6B,MAAyB,QAAQ,KAAa;AACzF,SAAO,CAAC,gBAAgB,GAAG,GAAG,gCAAgC,CAAC,EAAE,KAAK,MAAM;AAC9E;AAEO,SAAS,oBAAoB,UAAmC,CAAC,GAAS;AAC/E,QAAM,SAAS,QAAQ,UAAU;AACjC,SAAO,IAAI,6BAA6B,QAAQ,OAAO,QAAQ,GAAG,CAAC;AACrE;;;ACZO,SAAS,kCAA0C;AACxD,SAAO,CAAC,0BAA0B,GAAG,iBAAiB,IAAI,CAAC,aAAa,KAAK,yBAAyB,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI;AAClI;AAEO,SAAS,+BAAuC;AACrD,SAAO,CAAC,gBAAgB,GAAG,gCAAgC,CAAC,EAAE,KAAK,MAAM;AAC3E;AAEO,SAAS,oBAAoB,UAAmC,CAAC,GAAS;AAC/E,QAAM,SAAS,QAAQ,UAAU;AACjC,SAAO,IAAI,6BAA6B,CAAC;AAC3C;;;AClBA,SAAS,uBAAAC,4BAA2B;;;ACApC,SAAS,2BAA+F;AACxG;AAAA,EACE;AAAA,EACA,0BAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AACP,SAAS,8CAA8C;;;ACXvD,eAAsB,iBAAiB,OAIjB;AACpB,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,MAAM,SAAS;AACpE,MAAI;AACF,WAAO,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,WAAW,OAAO,CAAC;AAAA,EACjE,UAAE;AACA,iBAAa,OAAO;AAAA,EACtB;AACF;AAEA,eAAsB,sBAAsB,OAIvB;AACnB,QAAM,YAAY,GAAG,MAAM,cAAc,QAAQ,OAAO,EAAE,CAAC;AAC3D,MAAI;AACF,UAAM,WAAW,MAAM,iBAAiB;AAAA,MACtC,KAAK;AAAA,MACL,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,MACxD,WAAW,MAAM;AAAA,IACnB,CAAC;AACD,WAAO,SAAS;AAAA,EAClB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AC/BA,SAAS,8BAA8B;AAKhC,SAAS,qCAAqC,YAA0C;AAC7F,QAAM,SAAS,uBAAuB;AAAA,IACpC,UAAU,WAAW;AAAA,IACrB,OAAO,WAAW;AAAA,IAClB,MAAM,WAAW;AAAA,EACnB,CAAC;AACD,SAAO,GAAG,MAAM,sBAAsB,WAAW,eAAe,QAAQ,IAAI;AAC9E;;;ACJO,SAAS,gBAAgB,UAA2B;AACzD,QAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,SAAO,IAAI,aAAa,eAAe,IAAI,aAAa,eAAe,IAAI,aAAa,SAAS,IAAI,SAAS,SAAS,YAAY;AACrI;AAEO,SAAS,4BAA4B,UAAwB;AAClE,QAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,MAAI,IAAI,aAAa,WAAW,CAAC,gBAAgB,QAAQ,GAAG;AAC1D,UAAM,IAAI,MAAM,2EAA2E;AAAA,EAC7F;AACF;AAEO,SAAS,kBAAkB,UAA0B;AAC1D,SAAO;AAAA,IACL,0DAA0D,QAAQ;AAAA,IAClE;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,8BAA8B,QAAgD;AAC5F,MAAI,sBAAsB,MAAM,MAAM,QAAS,QAAO,CAAC;AACvD,QAAM,WAAW,mBAAmB,MAAM,KAAK,OAAO,OAAO;AAC7D,MAAI;AACJ,MAAI;AACF,YAAQ,IAAI,IAAI,QAAQ;AAAA,EAC1B,QAAQ;AACN,WAAO,CAAC,EAAE,QAAQ,QAAQ,MAAM,aAAa,SAAS,wEAAwE,CAAC;AAAA,EACjI;AACA,QAAM,SAA+B,CAAC;AAEtC,MAAI,MAAM,aAAa,UAAU;AAC/B,WAAO,KAAK,EAAE,QAAQ,MAAM,MAAM,mBAAmB,SAAS,oBAAoB,CAAC;AAAA,EACrF,WAAW,MAAM,aAAa,WAAW,gBAAgB,QAAQ,GAAG;AAClE,WAAO,KAAK,EAAE,QAAQ,MAAM,MAAM,mBAAmB,SAAS,4CAA4C,CAAC;AAAA,EAC7G,OAAO;AACL,WAAO,KAAK,EAAE,QAAQ,QAAQ,MAAM,mBAAmB,SAAS,oCAAoC,CAAC;AAAA,EACvG;AAEA,SAAO,KAAK;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,EACX,CAAC;AAED,SAAO;AAAA,IACL,OAAO,OAAO,cACV;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SACE;AAAA,IACJ,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SACE;AAAA,IACJ;AAAA,EACN;AAEA,MAAI,OAAO,OAAO,cAAc,QAAQ;AACtC,WAAO,KAAK;AAAA,MACV,QAAQ,OAAO,OAAO,cAAc,OAAO;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS,OAAO,OAAO,cACnB,GAAG,OAAO,OAAO,aAAa,MAAM,oEACpC;AAAA,IACN,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,OAAO,gCAAgC,QAAQ;AACxD,WAAO,KAAK;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS,GAAG,OAAO,OAAO,+BAA+B,MAAM;AAAA,IACjE,CAAC;AAAA,EACH;AAEA,SAAO,KAAK;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS,GAAG,OAAO,OAAO,aAAa,MAAM;AAAA,EAC/C,CAAC;AAED,MAAI,OAAO,UAAU,QAAQ;AAC3B,WAAO,KAAK;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,MAAI,OAAO,UAAU,SAAS,OAAO,UAAU,MAAM;AACnD,UAAM,cAAc,CAAC,OAAO,UAAU,QAAQ,UAAU,QAAW,OAAO,UAAU,OAAO,kBAAkB,MAAS,EACnH,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC,EACjD,KAAK,IAAI;AACZ,WAAO,KAAK;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS,GAAG,WAAW;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,MAAI,CAAC,OAAO,OAAO,UAAU;AAC3B,WAAO,KAAK;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,0BAA0B,QAAwC;AAChF,MAAI,CAAC,OAAO,OAAQ,QAAO,CAAC;AAC5B,SAAO,CAAC,mBAAmB,GAAG,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,OAAO,YAAY,CAAC,IAAI,MAAM,IAAI,KAAK,MAAM,OAAO,EAAE,CAAC;AACxH;;;AC3HA,SAAS,SAAS,OAA6C;AAC7D,SAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAK,QAA4B;AACpG;AAEA,SAAS,QAAQ,MAAe,MAAyB;AACvD,MAAI,UAAmB;AACvB,aAAW,WAAW,MAAM;AAC1B,UAAM,SAAS,SAAS,OAAO;AAC/B,QAAI,CAAC,UAAU,EAAE,WAAW,QAAS,QAAO;AAC5C,cAAU,OAAO,OAAO;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAwB;AAClD,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,UAAU,KAAM,QAAO;AAC3B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,QAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,UAAM,UAAU,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,kBAAkB,CAAC,CAAC;AAC1D,WAAO,GAAG,MAAM,MAAM,gBAAgB,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC1D;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,MAAM,MAAM,MAAM,+BAA+B;AACvD,QAAI,IAAK,QAAO,GAAG,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;AACxC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,QAAQ,MAAe,MAAyB;AACvD,SAAO,QAAQ,MAAM,IAAI,MAAM;AACjC;AAEO,SAAS,sBAAsB,gBAAmC;AACvE,QAAM,OAAiB,CAAC,UAAU;AAClC,QAAM,MAAM,CAAC,OAAe,MAAgB,aAAsB;AAChE,UAAM,QAAQ,QAAQ,gBAAgB,IAAI;AAC1C,SAAK,KAAK,KAAK,KAAK,KAAK,UAAU,UAAa,WAAW,WAAW,mBAAmB,KAAK,CAAC,EAAE;AAAA,EACnG;AAEA,MAAI,uBAAuB,CAAC,UAAU,cAAc,CAAC;AACrD,MAAI,sBAAsB,CAAC,UAAU,aAAa,GAAG,8BAA8B;AACnF,MAAI,QAAQ,gBAAgB,CAAC,UAAU,cAAc,CAAC,GAAG;AACvD,QAAI,uBAAuB,CAAC,UAAU,cAAc,CAAC;AAAA,EACvD;AACA,MAAI,QAAQ,gBAAgB,CAAC,UAAU,aAAa,CAAC,GAAG;AACtD,QAAI,sBAAsB,CAAC,UAAU,aAAa,CAAC;AAAA,EACrD;AACA,MAAI,QAAQ,gBAAgB,CAAC,UAAU,kBAAkB,CAAC,KAAK,QAAQ,gBAAgB,CAAC,UAAU,aAAa,CAAC,GAAG;AACjH,QAAI,2BAA2B,CAAC,UAAU,kBAAkB,GAAG,6BAA6B;AAAA,EAC9F;AAEA,MAAI,QAAQ,gBAAgB,CAAC,aAAa,MAAM,CAAC,GAAG;AAClD,QAAI,4BAA4B,CAAC,aAAa,QAAQ,WAAW,CAAC;AAAA,EACpE;AAEA,MAAI,QAAQ,gBAAgB,CAAC,aAAa,OAAO,CAAC,GAAG;AACnD,QAAI,4BAA4B,CAAC,aAAa,SAAS,UAAU,CAAC;AAClE,QAAI,QAAQ,gBAAgB,CAAC,aAAa,SAAS,UAAU,CAAC,GAAG;AAC/D,UAAI,4BAA4B,CAAC,aAAa,SAAS,UAAU,CAAC;AAAA,IACpE;AACA,QAAI,QAAQ,gBAAgB,CAAC,aAAa,SAAS,eAAe,CAAC,GAAG;AACpE,UAAI,iCAAiC,CAAC,aAAa,SAAS,eAAe,CAAC;AAAA,IAC9E;AAAA,EACF;AAEA,MAAI,QAAQ,gBAAgB,CAAC,aAAa,QAAQ,CAAC,GAAG;AACpD,QAAI,kCAAkC,CAAC,aAAa,UAAU,eAAe,CAAC;AAAA,EAChF;AAEA,SAAO;AACT;;;AJQO,SAAS,gBAAgB,KAA8E;AAC5G,QAAM,UAAU,IAAI,KAAK;AACzB,QAAM,QAAQ,QAAQ,QAAQ,GAAG;AACjC,QAAM,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,CAAC;AAC5C,MAAI,SAAS,KAAK,SAAS,QAAQ,KAAK,UAAU,QAAQ,SAAS,GAAG;AACpE,UAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AACA,SAAO;AAAA,IACL,UAAU,QAAQ,MAAM,GAAG,KAAK;AAAA,IAChC,WAAW,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAAA,IACzC,gBAAgB,QAAQ,MAAM,QAAQ,CAAC;AAAA,EACzC;AACF;AAEA,SAAS,iBAAiB,IAAoB;AAC5C,MAAI,KAAK,QAAW,EAAG,QAAO,GAAG,KAAK,GAAM;AAC5C,MAAI,KAAK,QAAU,EAAG,QAAO,GAAG,KAAK,GAAK;AAC1C,SAAO,GAAG,EAAE;AACd;AAEA,SAAS,uBAAuB,WAAuC;AACrE,SAAO,YAAY,sBAAsB,iBAAiB,SAAS,CAAC,KAAK;AAC3E;AAEA,SAAS,0BAA0B,QAAqE;AACtG,QAAM,QAAQ,CAAC,wBAAwB;AACvC,MAAI,QAAQ,SAAS;AACnB,UAAM,KAAK,oBAAoB,OAAO,OAAO,EAAE;AAC/C,QAAI,OAAO,iBAAiB;AAC1B,YAAM,KAAK,kDAAkD,OAAO,eAAe,EAAE;AAAA,IACvF;AAAA,EACF,WAAW,QAAQ,iBAAiB;AAClC,UAAM,KAAK,eAAe,OAAO,eAAe,EAAE;AAAA,EACpD,OAAO;AACL,UAAM,KAAK,uBAAuB,sCAAsC,EAAE;AAAA,EAC5E;AACA,QAAM,KAAK,2IAA2I;AACtJ,SAAO;AACT;AAEA,eAAsB,iBAAiB,QAGnC,CAAC,GAA2B;AAC9B,QAAM,aAAa,MAAM,cAAc,kBAAkB;AACzD,QAAM,eAAe,sBAAsB,UAAU;AACrD,QAAM,SAAS,cAAc,UAAU;AACvC,SAAO,iBAAiB,EAAE,QAAQ,YAAY,cAAc,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC,EAAG,CAAC;AAC1H;AAEA,eAAsB,iBAAiB,OAMZ;AACzB,QAAM,WAAW,mBAAmB,MAAM,MAAM;AAChD,QAAM,aAAc,MAAM,sBAAsB;AAAA,IAC9C,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,IACxD,WAAW,MAAM,mBAAmB;AAAA,EACtC,CAAC,IACG,WACA;AACJ,QAAM,yBAAyB,MAAM,2BAA2B;AAAA,IAC9D,QAAQ,MAAM;AAAA,IACd;AAAA,IACA,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AAED,QAAM,YAAY,OAAO,QAAQ,MAAM,OAAO,SAAS,EACpD,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG;AACrB,QAAM,YAAY,MAAM,OAAO,OAAO,aAAa,IAAI,CAAC,eAAe,WAAW,eAAe;AACjG,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB;AAAA,IACA,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,aAAa,sBAAsB,MAAM,MAAM;AAAA,IAC/C,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B,eAAe,0BAA0B,8BAA8B,MAAM,MAAM,CAAC;AAAA,IACpF,oBAAoB,uBAAuB;AAAA,IAC3C,GAAI,uBAAuB,QAAQ,EAAE,yBAAyB,uBAAuB,MAAM,IAAI,CAAC;AAAA,IAChG,UAAU,MAAM,OAAO,OAAO;AAAA,IAC9B,kBAAkB,uBAAuB,MAAM,OAAO,OAAO,YAAY;AAAA,IACzE,SAAS,sBAAsB,MAAM,gBAAgB,kBAAkB,MAAM,MAAM,CAAC;AAAA,IACpF,cAAc,MAAM,OAAO,OAAO,aAAa,IAAI,CAAC,eAAe;AACjE,aAAO,qCAAqC,UAAU;AAAA,IACxD,CAAC;AAAA,IACD;AAAA,IACA,qBAAqB,0BAA0B,MAAM,OAAO,OAAO,mBAAmB;AAAA,IACtF,cAAc,6BAA6B;AAAA,MACzC;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,eAAe,2BAA2B,OAImB;AAC3D,MAAI,MAAM,eAAe,SAAU,QAAO,EAAE,QAAQ,CAAC,EAAE;AACvD,MAAI;AACF,UAAM,QAAQ,sBAAsB,MAAM,OAAO,MAAM;AACvD,UAAM,SAAS,oBAAoB;AAAA,MACjC,eAAe,MAAM,OAAO,OAAO;AAAA,MACnC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,MACvC,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,IAC1D,CAAC;AACD,UAAM,SAAS,MAAM,OAAO,uBAAuB,EAAE,OAAO,EAAE,CAAC;AAC/D,WAAO,EAAE,QAAQ,MAAM,QAAQ,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC,EAAE;AAAA,EACrE,SAAS,OAAO;AACd,WAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE;AAAA,EACrF;AACF;AAEA,eAAsB,oBAAoB,OAIZ;AAC5B,QAAM,aAAa,MAAM,cAAc,kBAAkB;AACzD,QAAM,SAAS,cAAc,UAAU;AACvC,SAAO,oBAAoB;AAAA,IACzB;AAAA,IACA;AAAA,IACA,OAAO,MAAM;AAAA,IACb,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AACH;AAEA,eAAsB,wBAAwB,OAIZ;AAChC,QAAM,aAAa,MAAM,cAAc,kBAAkB;AACzD,QAAM,SAAS,cAAc,UAAU;AACvC,SAAO,wBAAwB;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,SAAS,MAAM;AAAA,IACf,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AACH;AAEA,eAAsB,wBAAwB,OAKZ;AAChC,QAAM,UAAU,gBAAgB,MAAM,OAAO;AAC7C,QAAM,QAAQ,sBAAsB,MAAM,OAAO,MAAM;AACvD,QAAM,SAAS,oBAAoB;AAAA,IACjC,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AACD,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,kBAAkB,uBAAuB,MAAM,OAAO,OAAO,YAAY;AAAA,IACzE,GAAG;AAAA,IACH,QAAQ,MAAM,OAAO,wBAAwB,OAAO;AAAA,EACtD;AACF;AAEA,eAAsB,oBAAoB,OAKZ;AAC5B,QAAM,QAAQ,sBAAsB,MAAM,OAAO,MAAM;AACvD,QAAM,SAAS,oBAAoB;AAAA,IACjC,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AACD,QAAM,CAAC,SAAS,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,IACnD,OAAO,OAAO,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,IACpC,OAAO,cAAc,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,IAC3C,OAAO,cAAc,EAAE,OAAO,MAAM,MAAM,CAAC;AAAA,EAC7C,CAAC;AACD,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,IACf,SAAS,QAAQ;AAAA,IACjB,kBAAkB,uBAAuB,MAAM,OAAO,OAAO,YAAY;AAAA,IACzE,QAAQ,OAAO;AAAA,EACjB;AACF;AAEO,SAAS,aAAa,SAAgC;AAC3D,SAAO;AAAA,IACL,WAAW,QAAQ,UAAU;AAAA,IAC7B,YAAY,QAAQ,WAAW;AAAA,IAC/B,GAAI,QAAQ,WAAW,CAAC,UAAU,QAAQ,QAAQ,EAAE,IAAI,CAAC;AAAA,IACzD,GAAG,QAAQ;AAAA,IACX,eAAe,QAAQ,UAAU,KAAK,QAAQ,aAAa;AAAA,IAC3D,GAAG,yBAAyB,OAAO;AAAA,IACnC,WAAW,QAAQ,QAAQ;AAAA,IAC3B,gBAAgB,QAAQ,gBAAgB;AAAA,IACxC,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,cAAc,QAAQ,UAAU,SAAS,QAAQ,UAAU,KAAK,IAAI,IAAI,MAAM;AAAA,IAC9E,GAAG,QAAQ;AAAA,IACX;AAAA,IACA,GAAI,QAAQ,aAAa,SAAS,QAAQ,aAAa,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,IAAI,CAAC,QAAQ;AAAA,EAC3G,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,yBAAyB,SAAkC;AAClE,MAAI,QAAQ,eAAe,UAAU;AACnC,WAAO,CAAC,yBAAyB,oCAAoC;AAAA,EACvE;AACA,MAAI,QAAQ,yBAAyB;AACnC,WAAO,CAAC,yBAAyB,uBAAuB,QAAQ,uBAAuB,EAAE;AAAA,EAC3F;AACA,MAAI,QAAQ,mBAAmB,WAAW,GAAG;AAC3C,WAAO,CAAC,yBAAyB,QAAQ;AAAA,EAC3C;AACA,SAAO;AAAA,IACL;AAAA,IACA,GAAG,QAAQ,mBAAmB,QAAQ,CAAC,UAAU;AAAA,MAC/C,KAAK,MAAM,SAAS,YAAY,CAAC,IAAI,MAAM,IAAI,KAAK,MAAM,WAAW,SAAS,UAAU,MAAM,KAAK,cAAc,MAAM,SAAS,SAAS,MAAM,UAAU,MAAM,MAAM,MAAM;AAAA,MAC3K,aAAa,MAAM,UAAU;AAAA,IAC/B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,aAAa,OAAgB,WAAW,WAAmB;AAClE,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AACjE;AAEA,SAAS,eAAe,OAA8B;AACpD,QAAM,YAAY,aAAa,MAAM,SAAS;AAC9C,QAAM,aAAa,aAAa,MAAM,UAAU;AAChD,QAAM,aAAa,aAAa,MAAM,UAAU;AAChD,QAAM,UAAU,OAAO,MAAM,YAAY,YAAY,MAAM,QAAQ,SAAS,IAAI,MAAM,MAAM,OAAO,KAAK;AACxG,SAAO,KAAK,SAAS,IAAI,UAAU,IAAI,UAAU,IAAI,aAAa,MAAM,IAAI,CAAC,GAAG,OAAO;AACzF;AAEA,SAAS,kBAAkB,OAAgD;AACzE,SAAO,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAK,QAAoC;AAC5G;AAEA,SAAS,qBAAqB,SAAqC;AACjE,QAAM,gBAAgB,CAAC,GAAG,QAAQ,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,UAAU;AAClE,QAAI,QAAQ,IAAI,WAAW,YAAa,QAAO,MAAM,SAAS;AAC9D,WAAO;AAAA,EACT,CAAC;AACD,QAAM,UAAU,kBAAkB,eAAe,OAAO;AACxD,QAAM,iBAAiB,UAAU,gBAAgB;AACjD,QAAM,oBAAoB,UAAU,mBAAmB;AACvD,MAAI,OAAO,mBAAmB,YAAY,eAAe,WAAW,EAAG,QAAO,CAAC;AAC/E,SAAO;AAAA,IACL,oBAAoB,cAAc;AAAA,IAClC,GAAI,OAAO,sBAAsB,YAAY,kBAAkB,SAAS,IAAI,CAAC,uBAAuB,iBAAiB,EAAE,IAAI,CAAC;AAAA,EAC9H;AACF;AAEA,SAAS,yBAAyB,SAA+C;AAC/E,aAAW,SAAS,CAAC,GAAG,QAAQ,MAAM,EAAE,QAAQ,GAAG;AACjD,QAAI,MAAM,SAAS,cAAe;AAClC,UAAM,UAAU,kBAAkB,MAAM,OAAO;AAC/C,UAAM,eAAe,UAAU,cAAc;AAC7C,QAAI,OAAO,iBAAiB,YAAY,OAAO,UAAU,YAAY,KAAK,eAAe,GAAG;AAC1F,aAAO,uBAAuB,YAAY;AAAA,IAC5C;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEA,SAAS,iBAAiB,QAAoD,MAAoC;AAChH,MAAI,CAAC,OAAQ,QAAO;AACpB,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,OAAO,UAAU,SAAU;AAC/B,UAAM,UAAU,MAAM,KAAK;AAC3B,QAAI,QAAQ,SAAS,EAAG,QAAO;AAAA,EACjC;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAAoD,MAAqC;AAClH,MAAI,CAAC,OAAQ,QAAO;AACpB,aAAW,OAAO,MAAM;AACtB,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,OAAO,UAAU,UAAW,QAAO;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,SAA2D;AACvF,QAAM,UAAU,QAAQ,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,aAAa;AAC3E,QAAM,oBAAoB,kBAAkB,kBAAkB,SAAS,OAAO,IAAI,YAAY,CAAC;AAC/F,MAAI,kBAAmB,QAAO;AAE9B,aAAW,SAAS,CAAC,GAAG,QAAQ,MAAM,EAAE,QAAQ,GAAG;AACjD,UAAM,aAAa,kBAAkB,kBAAkB,MAAM,OAAO,IAAI,YAAY,CAAC;AACrF,QAAI,WAAY,QAAO;AAAA,EACzB;AACA,SAAO;AACT;AAEA,SAAS,6BAA6B,UAA8D;AAClG,SAAO,iBAAiB,UAAU;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,2BAA2B,UAAkD;AACpF,QAAM,WAAW,iBAAiB,UAAU,CAAC,kBAAkB,uBAAuB,CAAC;AACvF,MAAI,aAAa,cAAc,aAAa,gBAAgB,aAAa,UAAW,QAAO;AAE3F,QAAM,WAAW,kBAAkB,UAAU,CAAC,qBAAqB,qBAAqB,4BAA4B,yBAAyB,CAAC;AAC9I,MAAI,aAAa,KAAM,QAAO;AAC9B,MAAI,aAAa,MAAO,QAAO;AAC/B,SAAO;AACT;AAEA,SAAS,4BAA4B,YAAgE;AACnG,QAAM,SAAS,kBAAkB,aAAa,eAAe,CAAC;AAC9D,SAAO,iBAAiB,QAAQ,CAAC,KAAK,CAAC;AACzC;AAEA,SAAS,uBAAuB,OAAyC;AACvE,QAAM,MAAM,0BAA0B,KAAK;AAC3C,SAAO,MAAMC,wBAAuB,GAAG,IAAI;AAC7C;AAEA,SAAS,4BAA4B,YAAoD;AACvF,QAAM,YAAY,kBAAkB,aAAa,mBAAmB,CAAC;AACrE,QAAM,SAAS,iBAAiB,WAAW,CAAC,QAAQ,CAAC,KAAK;AAC1D,QAAM,aAAa,iBAAiB,WAAW,CAAC,YAAY,CAAC;AAC7D,QAAM,cAAc,iBAAiB,WAAW,CAAC,aAAa,CAAC;AAC/D,QAAM,UAAU,iBAAiB,WAAW,CAAC,SAAS,CAAC;AACvD,SAAO;AAAA,IACL,aAAa,GAAG,MAAM,KAAK,UAAU,MAAM;AAAA,IAC3C,GAAI,cAAc,CAAC,aAAa,WAAW,EAAE,IAAI,CAAC;AAAA,IAClD,GAAI,UAAU,CAAC,SAAS,OAAO,EAAE,IAAI,CAAC;AAAA,EACxC,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,gBAAgB,SAA+C;AACtE,MAAI,QAAQ,IAAI,iBAAkB,QAAO,QAAQ,IAAI;AACrD,aAAW,SAAS,CAAC,GAAG,QAAQ,MAAM,EAAE,QAAQ,GAAG;AACjD,QAAI,MAAM,SAAS,cAAe;AAClC,UAAM,WAAW,iBAAiB,kBAAkB,MAAM,OAAO,GAAG,CAAC,UAAU,CAAC;AAChF,QAAI,SAAU,QAAO;AAAA,EACvB;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,SAAqC;AAChE,QAAM,aAAa,qBAAqB,OAAO;AAC/C,QAAM,WAAW,kBAAkB,QAAQ,MAAM,QAAQ;AACzD,QAAM,mBAAmB,iBAAiB,YAAY,CAAC,kBAAkB,CAAC,KAAK,6BAA6B,QAAQ;AACpH,QAAM,iBAAiB,iBAAiB,YAAY,CAAC,gBAAgB,CAAC,KAAK,2BAA2B,QAAQ;AAC9G,QAAM,gBAAgB,4BAA4B,UAAU,KAAK,uBAAuB,QAAQ,KAAK;AACrG,QAAM,mBAAmB,iBAAiB,YAAY,CAAC,kBAAkB,CAAC;AAC1E,SAAO;AAAA,IACL;AAAA,IACA,sBAAsB,oBAAoB,SAAS;AAAA,IACnD,gBAAgB,cAAc;AAAA,IAC9B,qBAAqB,iBAAiB,SAAS;AAAA,IAC/C,gBAAgB,4BAA4B,UAAU,CAAC;AAAA,IACvD,sBAAsB,oBAAoB,SAAS;AAAA,IACnD,qBAAqB,gBAAgB,OAAO,KAAK,MAAM;AAAA,EACzD;AACF;AAEA,SAAS,iBAAiB,UAAiE;AACzF,MAAI,aAAa,gBAAiB,QAAO;AACzC,MAAI,aAAa,iBAAkB,QAAO;AAC1C,MAAI,aAAa,cAAe,QAAO;AACvC,MAAI,aAAa,eAAgB,QAAO;AACxC,SAAO;AACT;AAEA,SAAS,kBAAkB,SAAqC;AAC9D,QAAM,WAAW,QAAQ,MAAM,SAAS;AACxC,QAAM,aAAa,8BAA8B,QAAQ;AACzD,QAAM,WAAW,YAAY,oBAAoB;AACjD,QAAM,2BAA2B,QAAQ,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,8BAA8B;AAC/G,QAAM,+BAA+B,QAAQ,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,0BAA0B;AAC/G,QAAM,4BAA4B,QAAQ,OAAO,OAAO,CAAC,UAAU,MAAM,SAAS,uBAAuB;AACzG,QAAM,oBAAoB,MAAM;AAAA,IAC9B,IAAI;AAAA,MACF,yBACG,IAAI,CAAC,UAAU;AACd,cAAM,UAAU,kBAAkB,MAAM,OAAO;AAC/C,cAAM,SAAS,UAAU,QAAQ;AACjC,eAAO,OAAO,WAAW,YAAY,OAAO,SAAS,IAAI,SAAS;AAAA,MACpE,CAAC,EACA,OAAO,CAAC,WAA6B,QAAQ,MAAM,CAAC;AAAA,IACzD;AAAA,EACF;AACA,QAAM,sBAAsB,MAAM;AAAA,IAChC,IAAI;AAAA,MACF,CAAC,GAAG,8BAA8B,GAAG,yBAAyB,EAC3D,IAAI,CAAC,UAAU;AACd,cAAM,UAAU,kBAAkB,MAAM,OAAO;AAC/C,cAAM,QAAQ,UAAU,OAAO;AAC/B,eAAO,OAAO,UAAU,YAAY,MAAM,SAAS,IAAI,QAAQ;AAAA,MACjE,CAAC,EACA,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC;AAAA,IACtD;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IACA,eAAe,QAAQ,KAAK,QAAQ;AAAA,IACpC,sBAAsB,QAAQ,QAAQ,kBAAkB,yBAAyB,QAAQ,QAAQ,gBAAgB;AAAA,IACjH,wBAAwB,iBAAiB,QAAQ,CAAC;AAAA,IAClD,GAAI,6BAA6B,UAAU,0BAA0B,SACjE;AAAA,MACE,sBAAsB,6BAA6B,MAAM,eAAe,0BAA0B,MAAM,UACtG,oBAAoB,SAAS,KAAK,oBAAoB,KAAK,IAAI,CAAC,MAAM,EACxE;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,yBAAyB,SACzB;AAAA,MACE,oCAAoC,yBAAyB,MAAM,GACjE,kBAAkB,SAAS,KAAK,kBAAkB,KAAK,IAAI,CAAC,MAAM,EACpE;AAAA,IACF,IACA,CAAC;AAAA,EACP;AACF;AAKA,IAAM,gBAAwC,CAAC,mBAAmB,YAAY,OAAO;AACrF,IAAM,iBAA0C,CAAC,UAAU,aAAa,UAAU,aAAa,YAAY;AAE3G,SAAS,8BAAmG;AAC1G,SAAO,OAAO;AAAA,IACZ,cAAc,IAAI,CAAC,SAAS;AAAA,MAC1B;AAAA,MACA,OAAO,YAAY,eAAe,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAAA,IAC9D,CAAC;AAAA,EACH;AACF;AAEA,SAAS,0BAA0B,MAAoF;AACrH,MAAI,OAAO,SAAS,SAAU,QAAO;AACrC,QAAM,QAAQ,KAAK,MAAM,8FAA8F;AACvH,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,MAAM,MAAM,CAAC;AAAA,IACb,OAAO,MAAM,CAAC;AAAA,EAChB;AACF;AAEA,SAAS,qBAAqB,MAA4B,QAA8D;AACtH,QAAM,QAAQ,eAAe,OAAO,CAAC,UAAU,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE;AAC5G,SAAO,MAAM,SAAS,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,KAAK;AAC3D;AAEA,SAAS,uBAAuB,SAAqC;AACnE,QAAM,SAAS,4BAA4B;AAC3C,aAAW,SAAS,QAAQ,QAAQ;AAClC,UAAM,SAAS,0BAA0B,MAAM,IAAI;AACnD,QAAI,CAAC,OAAQ;AACb,WAAO,OAAO,IAAI,EAAE,OAAO,KAAK,KAAK;AAAA,EACvC;AAEA,QAAM,QAAQ,cACX,IAAI,CAAC,SAAS,qBAAqB,MAAM,OAAO,IAAI,CAAC,CAAC,EACtD,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC;AACjD,MAAI,MAAM,WAAW,EAAG,QAAO,CAAC,sBAAsB,QAAQ;AAE9D,QAAM,cAAc,OAAO,MAAM;AACjC,QAAM,kBAAkB,OAAO,MAAM;AACrC,SAAO;AAAA,IACL;AAAA,IACA,GAAG;AAAA,IACH,GAAI,eAAe,kBACf,CAAC,0CAA0C,WAAW,gBAAgB,eAAe,0EAA0E,IAC/J,CAAC;AAAA,EACP;AACF;AAEO,SAAS,gBAAgB,SAAmC;AACjE,QAAM,eAAe,QAAQ,OAAO,MAAM,EAAE;AAC5C,QAAM,aAAa,QAAQ,IAAI,QAAQ;AACvC,QAAM,gBAAgB,yBAAyB,OAAO;AACtD,SAAO;AAAA,IACL,WAAW,QAAQ,UAAU;AAAA,IAC7B,eAAe,QAAQ,aAAa;AAAA,IACpC,QAAQ,QAAQ,IAAI,EAAE;AAAA,IACtB,WAAW,QAAQ,IAAI,MAAM,GAAG,aAAa,KAAK,UAAU,MAAM,EAAE;AAAA,IACpE,GAAI,gBAAgB,CAAC,gBAAgB,aAAa,EAAE,IAAI,CAAC;AAAA,IACzD,GAAG,qBAAqB,OAAO;AAAA,IAC/B,WAAW,QAAQ,MAAM,MAAM,KAAK,QAAQ,MAAM,aAAa;AAAA,IAC/D,GAAG,oBAAoB,OAAO;AAAA,IAC9B,YAAY,QAAQ,MAAM,QAAQ,OAAO;AAAA,IACzC,YAAY,QAAQ,IAAI,SAAS;AAAA,IACjC,YAAY,QAAQ,QAAQ,eAAe,YAAY,QAAQ,QAAQ,qBAAqB,yBAAyB,QAAQ,QAAQ,cAAc,mBAAmB,QAAQ,QAAQ,gBAAgB;AAAA,IACtM,GAAG,kBAAkB,OAAO;AAAA,IAC5B,GAAG,uBAAuB,OAAO;AAAA,IACjC;AAAA,IACA,GAAI,aAAa,SAAS,aAAa,IAAI,cAAc,IAAI,CAAC,QAAQ;AAAA,EACxE,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,mBAAmB,OAAsE;AAChG,SAAO,GAAG,MAAM,YAAY,IAAI,MAAM,KAAK,IAAI,MAAM,IAAI;AAC3D;AAEO,SAAS,oBAAoB,SAAuC;AACzE,QAAM,YAAY,QAAQ,OAAO;AACjC,QAAM,mBAAmB,QAAQ,OAAO,kBAAkB,gBACtD,uBAAuB,QAAQ,OAAO,iBAAiB,aAAa,IACpE,QAAQ;AACZ,QAAM,qBAAqB,qCAAqC;AAAA,IAC9D,OAAO;AAAA,IACP,iBAAiB,GAAG,QAAQ,QAAQ,IAAI,QAAQ,SAAS,IAAI,QAAQ,cAAc;AAAA,IACnF,eAAe,mBAAmB,QAAQ,OAAO,OAAO;AAAA,IACxD,cAAc;AAAA,IACd,GAAI,YACA;AAAA,MACE,WAAW;AAAA,QACT,IAAI,UAAU;AAAA,QACd,QAAQ,UAAU;AAAA,QAClB,WAAW,UAAU;AAAA,MACvB;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,QAAQ,OAAO,aAAa,QAAQ,UAAU,EAAE,gBAAgB,QAAQ,OAAO,YAAY,QAAQ,QAAQ,IAAI,CAAC;AAAA,IACpH,iBAAiB,QAAQ,OAAO,gBAAgB,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc;AAAA,MAC7E,IAAI,SAAS;AAAA,MACb,QAAQ,SAAS;AAAA,MACjB,SAAS,SAAS,MAAM,QAAQ;AAAA,IAClC,EAAE;AAAA,IACF,sBAAsB,QAAQ,OAAO,gBAAgB;AAAA,IACrD,YAAY,YACR,iHAAiH,UAAU,EAAE,+BAC7H;AAAA,IACJ,UAAU,0FAA0F,gBAAgB;AAAA,IACpH,YAAY,YACR,8BAA8B,UAAU,EAAE,qDAC1C,kCAAkC,QAAQ,QAAQ,IAAI,QAAQ,SAAS,IAAI,QAAQ,cAAc;AAAA,EACvG,CAAC;AACD,SAAO;AAAA,IACL,WAAW,QAAQ,UAAU;AAAA,IAC7B,eAAe,QAAQ,aAAa;AAAA,IACpC,mCAAmC,kBAAkB;AAAA,EACvD,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,iBAAiB,SAA8C;AACnF,MAAI,QAAQ,OAAO,QAAQ,SAAS;AAClC,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,MAAI,QAAQ,KAAK;AACf,YAAQ,IAAI,gBAAgB,MAAM,oBAAoB,EAAE,OAAO,QAAQ,KAAK,GAAI,QAAQ,SAAS,EAAE,YAAY,QAAQ,OAAO,IAAI,CAAC,EAAG,CAAC,CAAC,CAAC;AACzI;AAAA,EACF;AACA,MAAI,QAAQ,SAAS;AACnB,YAAQ;AAAA,MACN,oBAAoB,MAAM,wBAAwB,EAAE,SAAS,QAAQ,SAAS,GAAI,QAAQ,SAAS,EAAE,YAAY,QAAQ,OAAO,IAAI,CAAC,EAAG,CAAC,CAAC;AAAA,IAC5I;AACA;AAAA,EACF;AACA,UAAQ,IAAI,aAAa,MAAM,iBAAiB,EAAE,GAAI,QAAQ,SAAS,EAAE,YAAY,QAAQ,OAAO,IAAI,CAAC,EAAG,CAAC,CAAC,CAAC;AACjH;;;AD9nBA,SAAS,SAAS,OAA2B,OAAuB;AAClE,QAAM,UAAU,OAAO,KAAK;AAC5B,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,GAAG,KAAK,eAAe;AACrD,SAAO;AACT;AAEA,SAAS,mBAAmB,SAAuC;AACjE,SAAO,QAAQ,QAAQ,KAAK,KAAK;AACnC;AAEA,SAAS,YAAY,SAAuC;AAC1D,SAAO,QAAQ,aAAa,KAAK,KAAK;AACxC;AAEA,SAAS,qBAAqB,SAAqC;AACjE,MAAI,QAAQ,OAAO,QAAQ,SAAS;AAClC,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,MAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,SAAS;AACpC,UAAM,IAAI,MAAM,oEAAoE;AAAA,EACtF;AACF;AAEA,eAAsB,iBAAiB,OAKZ;AACzB,uBAAqB,MAAM,OAAO;AAClC,QAAM,QAAQ,sBAAsB,MAAM,OAAO,MAAM;AACvD,QAAM,SAASC,qBAAoB;AAAA,IACjC,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AACD,QAAM,SAAS,mBAAmB,MAAM,OAAO;AAC/C,QAAM,YAAY,YAAY,MAAM,OAAO;AAE3C,MAAI,MAAM,QAAQ,SAAS;AACzB,UAAM,UAAU,gBAAgB,MAAM,QAAQ,OAAO;AACrD,UAAMC,UAAS,MAAM,OAAO,uBAAuB;AAAA,MACjD,GAAG;AAAA,MACH;AAAA,MACA,aAAa;AAAA,IACf,CAAC;AACD,WAAO;AAAA,MACL,YAAY,MAAM;AAAA,MAClB,eAAe,MAAM,OAAO,OAAO;AAAA,MACnC,OAAO,GAAG,QAAQ,QAAQ,IAAI,QAAQ,SAAS,IAAI,QAAQ,cAAc;AAAA,MACzE,KAAKA,QAAO;AAAA,IACd;AAAA,EACF;AAEA,QAAM,QAAQ,SAAS,MAAM,QAAQ,KAAK,OAAO;AACjD,QAAM,SAAS,MAAM,OAAO,UAAU;AAAA,IACpC;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf,CAAC;AACD,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,OAAO;AAAA,IACP,KAAK,OAAO;AAAA,EACd;AACF;AAEO,SAAS,oBAAoB,SAAgC;AAClE,QAAM,aAAa,QAAQ,IAAI,QAAQ;AACvC,SAAO;AAAA,IACL;AAAA,IACA,WAAW,QAAQ,UAAU;AAAA,IAC7B,eAAe,QAAQ,aAAa;AAAA,IACpC,UAAU,QAAQ,KAAK;AAAA,IACvB,QAAQ,QAAQ,IAAI,EAAE;AAAA,IACtB,WAAW,QAAQ,IAAI,MAAM,GAAG,aAAa,KAAK,UAAU,MAAM,EAAE;AAAA,IACpE;AAAA,IACA,oDAAoD,QAAQ,IAAI,EAAE;AAAA,EACpE,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,iBAAiB,SAA+B,eAA0C,CAAC,GAAkB;AACjI,QAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,SAAS,aAAa,UAAU;AACtC,SAAO,IAAI,oBAAoB,MAAM,iBAAiB,EAAE,QAAQ,YAAY,SAAS,GAAI,aAAa,YAAY,EAAE,WAAW,aAAa,UAAU,IAAI,CAAC,EAAG,CAAC,CAAC,CAAC;AACnK;;;AMhHA,SAAS,iCAAiC,sCAAAC,2CAA0C;AACpF,SAAS,mBAAmB,qBAAqB,iBAAmC;AAWpF,SAAS,uBAAuB,cAAoC;AAClE,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS,sBAAsB,YAAY,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI;AAAA,EACjE;AACF;AAEO,SAAS,sBAAsB,QAA0C,QAAuB,eAAwB,kBAAkB,MAAM,GAAkB;AACvK,QAAM,YAAY,OAAO,QAAQ,OAAO,SAAS,EAC9C,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAiB;AACnC,QAAM,kBAAkB,6BAA6B;AAAA,IACnD;AAAA,IACA,WAAW,OAAO,OAAO,aAAa,IAAI,CAAC,eAAe,WAAW,eAAe;AAAA,EACtF,CAAC,EAAE,MAAM,CAAC;AACV,SAAO;AAAA,IACL,GAAG;AAAA,IACH,uBAAuB,YAAY;AAAA,IACnC;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS,gBAAgB,KAAK,IAAI;AAAA,IACpC;AAAA,IACA,GAAG,8BAA8B,MAAM,EAAE,IAAI,CAAC,WAAW;AAAA,MACvD,QAAQ,MAAM;AAAA,MACd,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,IACjB,EAAE;AAAA,EACJ;AACF;AAEO,SAAS,sBAAsB,QAA+B;AACnE,SAAOC;AAAA,IACL,gCAAgC;AAAA,MAC9B,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,iBAAiB,SAA8C;AACnF,QAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,MAAI;AACJ,MAAI;AACJ,MAAI;AACF,mBAAe,sBAAsB,UAAU;AAC/C,aAAS,cAAc,UAAU;AAAA,EACnC,SAAS,OAAO;AACd,UAAMC,UAAwB;AAAA,MAC5B;AAAA,QACE,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAChE;AAAA,IACF;AACA,QAAI,iBAAiB,QAAW;AAC9B,MAAAA,QAAO,QAAQ,uBAAuB,YAAY,CAAC;AAAA,IACrD;AACA,YAAQ,IAAI,sBAAsBA,OAAM,CAAC;AACzC,YAAQ,WAAW;AACnB;AAAA,EACF;AACA,QAAM,SAAS;AAAA,IACb;AAAA,IACA,MAAM,UAAU;AAAA,MACd,QAAQ,OAAO;AAAA,MACf,WAAW,oBAAoB,OAAO,MAAM;AAAA,IAC9C,CAAC;AAAA,IACD;AAAA,EACF;AACA,UAAQ,IAAI,sBAAsB,MAAM,CAAC;AACzC,MAAI,kBAAkB,MAAM,GAAG;AAC7B,YAAQ,WAAW;AAAA,EACrB;AACF;;;ACvFA,SAAS,8BAA2D;AACpE,SAAS,8BAAqD;AAkE9D,IAAM,wBAAwB;AAE9B,SAASC,UAAS,OAA2B,OAAuB;AAClE,QAAM,UAAU,OAAO,KAAK;AAC5B,MAAI,CAAC,QAAS,OAAM,IAAI,MAAM,GAAG,KAAK,eAAe;AACrD,SAAO;AACT;AAEA,SAAS,sBAAsB,OAAmC;AAChE,QAAM,UAAU,OAAO,KAAK,KAAK,YAAY,YAAY;AACzD,MAAI,CAAC,sBAAsB,KAAK,MAAM,GAAG;AACvC,UAAM,IAAI,MAAM,0FAA0F;AAAA,EAC5G;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,OAAmC;AACnE,SAAOA,UAAS,OAAO,SAAS,EAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AACtE;AAEA,SAAS,8BAA8B,OAAiD;AACtF,QAAM,UAAU,OAAO,KAAK,KAAK,SAAS,YAAY;AACtD,MAAI,WAAW,WAAW,WAAW,WAAY,QAAO;AACxD,QAAM,IAAI,MAAM,qCAAqC;AACvD;AAEA,SAAS,qBAAqB,OAAkD;AAC9E,QAAM,QAAQ,yBAAyB,KAAK;AAC5C,MACE,UAAU,cACV,UAAU,oBACV,UAAU,mBACV,UAAU,2BACV,UAAU,gBACV,UAAU,YACV;AACA,WAAO;AAAA,EACT;AACA,MAAI,UAAU,eAAe,UAAU,eAAe,UAAU,cAAc,UAAU,QAAS,QAAO;AACxG,MAAI,UAAU,kBAAkB,UAAU,YAAY,UAAU,aAAa,UAAU,iBAAiB,UAAU,QAAS,QAAO;AAClI,MAAI,UAAU,qBAAqB,UAAU,eAAe,UAAU,cAAc,UAAU,UAAU,UAAU,WAAW;AAC3H,WAAO;AAAA,EACT;AACA,MAAI,UAAU,eAAe,UAAU,aAAa,UAAU,gBAAiB,QAAO;AACtF,MAAI,UAAU,uBAAuB,UAAU,iBAAiB,UAAU,iBAAiB,UAAU,iBAAkB,QAAO;AAC9H,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,YAAoB,cAAyF;AACrI,MAAI,aAAa,OAAQ,QAAO,aAAa;AAC7C,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,QAAQ,sBAAsB,OAAO,MAAM;AACjD,SAAO,uBAAuB;AAAA,IAC5B,eAAe,OAAO,OAAO;AAAA,IAC7B,UAAU,OAAO,OAAO;AAAA,IACxB,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,aAAa,YAAY,EAAE,WAAW,aAAa,UAAU,IAAI,CAAC;AAAA,EACxE,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAiC;AACxD,MAAI;AACJ,MAAI;AACF,aAAS,KAAK,MAAM,KAAK;AAAA,EAC3B,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,qCAAqC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EAC/G;AACA,SAAO,uBAAuB,MAAM,MAAM;AAC5C;AAEA,SAAS,kBAAkB,SAA+B,OAAgD;AACxG,MAAI,QAAQ,WAAY,QAAO,gBAAgB,QAAQ,UAAU;AAEjE,QAAM,UAAUA,UAAS,QAAQ,WAAW,QAAQ,SAAS,UAAU,cAAc,2BAA2B,WAAW;AAC3H,MAAI,UAAU,aAAa;AACzB,UAAM,aAAa,QAAQ,YAAY,KAAK,KAAK;AACjD,WAAO,uBAAuB,MAAM,EAAE,YAAY,QAAQ,CAAC;AAAA,EAC7D;AACA,MAAI,UAAU,aAAa;AACzB,WAAO,EAAE,YAAY,aAAa,QAAQ;AAAA,EAC5C;AACA,MAAI,UAAU,eAAe;AAC3B,WAAO,EAAE,YAAY,eAAe,QAAQ;AAAA,EAC9C;AACA,MAAI,UAAU,aAAa;AACzB,WAAO,EAAE,YAAY,aAAa,QAAQ;AAAA,EAC5C;AACA,SAAO,EAAE,YAAY,WAAW,QAAQ;AAC1C;AAEA,SAAS,sBAAsB,OAAuB;AACpD,SAAO,MAAM,QAAQ,YAAY,MAAM;AACzC;AAEA,SAAS,kBAAkB,OAOhB;AACT,QAAM,SAAS,MAAM,YAAY,OAAO;AACxC,QAAM,kBAAkB,MAAM,mBAAmB;AACjD,QAAM,WAAW,MAAM,UAAU,cAAc,MAAM,OAAO,MAAM,cAAc,MAAM,WAAW,EAAE;AACnG,SAAO,GAAG,MAAM,IAAI,eAAe,8EAA8E,MAAM,KAAK,0DAA0D,MAAM,iBAAiB,KAAK,QAAQ;AAC5N;AAEA,SAAS,4BAAsC;AAC7C,SAAO;AAAA,IACL,kBAAkB,EAAE,OAAO,YAAY,mBAAmB,oBAAoB,SAAS,4BAA4B,CAAC;AAAA,IACpH,kBAAkB,EAAE,OAAO,iBAAiB,mBAAmB,0BAA0B,SAAS,sBAAsB,CAAC;AAAA,IACzH,kBAAkB,EAAE,OAAO,yBAAyB,mBAAmB,kCAAkC,SAAS,kCAAkC,CAAC;AAAA,IACrJ;AAAA,IACA;AAAA,IACA,kBAAkB,EAAE,OAAO,aAAa,mBAAmB,sBAAsB,SAAS,8BAA8B,CAAC;AAAA,IACzH,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,IACD,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,IACD,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACF;AAEA,SAAS,2BAAqC;AAC5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB,EAAE,OAAO,YAAY,mBAAmB,oBAAoB,SAAS,0BAA0B,CAAC;AAAA,IAClH,kBAAkB,EAAE,OAAO,iBAAiB,mBAAmB,0BAA0B,SAAS,kCAAkC,CAAC;AAAA,IACrI,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA,kBAAkB,EAAE,OAAO,aAAa,mBAAmB,sBAAsB,SAAS,4BAA4B,CAAC;AAAA,IACvH,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,IACD,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,IACD,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACF;AAEA,SAAS,6BAAuC;AAC9C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB,EAAE,OAAO,YAAY,mBAAmB,oBAAoB,SAAS,4BAA4B,CAAC;AAAA,IACpH,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,IACX,CAAC;AAAA,IACD;AAAA,IACA;AAAA,IACA,kBAAkB,EAAE,OAAO,aAAa,mBAAmB,sBAAsB,SAAS,4BAA4B,CAAC;AAAA,IACvH,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,IACD,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,IACD,kBAAkB;AAAA,MAChB,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACF;AAEA,SAAS,iCAAiC,QAA0B;AAClE,MAAI,WAAW,SAAU,QAAO,yBAAyB;AACzD,MAAI,WAAW,WAAY,QAAO,2BAA2B;AAC7D,SAAO,0BAA0B;AACnC;AAEA,SAAS,8BAAyD;AAChE,SAAO;AAAA,IACL;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,6BAAwD;AAC/D,SAAO,4BAA4B,EAAE,IAAI,CAAC,UAAU;AAClD,QAAI,MAAM,kBAAkB,WAAY,QAAO,EAAE,GAAG,OAAO,aAAa,0BAA0B;AAClG,QAAI,MAAM,kBAAkB,gBAAiB,QAAO,EAAE,GAAG,OAAO,aAAa,kCAAkC;AAC/G,QAAI,MAAM,kBAAkB,wBAAyB,QAAO,EAAE,GAAG,OAAO,aAAa,oDAAoD;AACzI,QAAI,MAAM,kBAAkB,YAAa,QAAO,EAAE,GAAG,OAAO,aAAa,4BAA4B;AACrG,QAAI,MAAM,kBAAkB,SAAU,QAAO,EAAE,GAAG,OAAO,eAAe,gBAAgB,mBAAmB,yBAAyB,aAAa,yBAAyB;AAC1K,QAAI,MAAM,kBAAkB,iBAAkB,QAAO,EAAE,GAAG,OAAO,aAAa,8CAA8C;AAC5H,QAAI,MAAM,kBAAkB,YAAa,QAAO,EAAE,GAAG,OAAO,eAAe,iBAAiB,mBAAmB,0BAA0B,aAAa,8CAA8C;AACpM,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,+BAA0D;AACjE,SAAO;AAAA,IACL;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,EACF;AACF;AAEA,SAAS,mCAAmC,QAA2C;AACrF,MAAI,WAAW,SAAU,QAAO,2BAA2B;AAC3D,MAAI,WAAW,WAAY,QAAO,6BAA6B;AAC/D,SAAO,4BAA4B;AACrC;AAEO,SAAS,yBAAyB,UAAwC,CAAC,GAAuB;AACvG,QAAM,SAAS,sBAAsB,QAAQ,MAAM;AACnD,QAAM,UAAU,QAAQ,SAAS,KAAK,KAAK;AAC3C,SAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa,CAAC,gBAAgB;AAAA,IAC9B,aAAa,CAAC,yBAAyB,0BAA0B,mCAAmC;AAAA,IACpG,aAAa;AAAA,MACX,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,sBAAsB;AAAA,MACtB,mBAAmB;AAAA,IACrB;AAAA,IACA,WAAW;AAAA,MACT,oBAAoB;AAAA,MACpB,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,IACvB;AAAA,IACA,QAAQ,mCAAmC,MAAM;AAAA,IACjD,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,0BAA0B,UAAwC,CAAC,GAAW;AAC5F,QAAM,SAAS,sBAAsB,QAAQ,MAAM;AACnD,QAAM,UAAU,QAAQ,SAAS,KAAK,KAAK;AAC3C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oDAAoD,MAAM;AAAA,IAC1D,sDAAsD,sBAAsB,OAAO,CAAC;AAAA,IACpF;AAAA,IACA;AAAA,IACA,GAAG,iCAAiC,MAAM;AAAA,EAC5C,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,qBAAqB,UAAwC,CAAC,GAAW;AACvF,QAAM,SAAS,8BAA8B,QAAQ,MAAM;AAC3D,MAAI,WAAW,YAAY;AACzB,WAAO,KAAK,UAAU,yBAAyB,OAAO,GAAG,MAAM,CAAC;AAAA,EAClE;AACA,SAAO,0BAA0B,OAAO;AAC1C;AAEA,eAAsB,iBAAiB,SAA+B,eAAmC,CAAC,GAAkB;AAC1H,QAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,QAAM,QAAQA,UAAS,QAAQ,KAAK,OAAO;AAC3C,QAAM,SAAS,sBAAsB,QAAQ,MAAM;AACnD,QAAM,eAAe,yBAAyB,QAAQ,KAAK;AAC3D,QAAM,QAAQ,qBAAqB,QAAQ,KAAK;AAChD,QAAM,SAAS,iBAAiB,YAAY,YAAY;AACxD,QAAM,SAAS,aAAa,UAAU;AAEtC,MAAI,UAAU,YAAY;AACxB,UAAM,UAAUA,UAAS,QAAQ,SAAS,WAAW;AACrD,UAAM,OAAO,SAAS,OAAO;AAAA,MAC3B,MAAM,QAAQ,MAAM,KAAK,KAAK,UAAU,MAAM,IAAI,YAAY;AAAA,MAC9D;AAAA,MACA,KAAK,aAAa,MAAM,KAAK,oBAAI,KAAK,GAAG,YAAY;AAAA,MACrD,YAAY;AAAA,MACZ,GAAI,QAAQ,gBAAgB,KAAK,IAAI,EAAE,gBAAgB,QAAQ,eAAe,KAAK,EAAE,IAAI,CAAC;AAAA,IAC5F,CAAC;AACD,WAAO,IAAI,yBAAyB,KAAK,GAAG;AAC5C;AAAA,EACF;AAEA,QAAM,SAAS,kBAAkB,SAAS,KAAK;AAC/C,QAAM,iBAAiB,QAAQ,gBAAgB,KAAK;AACpD,MAAI,gBAAgB;AAClB,UAAM,OAAO,SAAS,OAAO,QAAQ,EAAE,eAAe,CAAC;AAAA,EACzD,OAAO;AACL,UAAM,OAAO,SAAS,OAAO,MAAM;AAAA,EACrC;AACA,SAAO,IAAI,YAAY,KAAK,eAAe,KAAK,GAAG;AACrD;AAEA,eAAsB,yBACpB,SACA,eAAmD,CAAC,GACrC;AACf,QAAM,SAAS,aAAa,UAAU;AACtC,SAAO,IAAI,qBAAqB,OAAO,CAAC;AAC1C;;;AC5gBA,SAAS,uBAAAC,4BAA2D;AACpE,SAAS,KAAAC,UAAS;AAiBlB,SAAS,qBAAqB,MAAc,OAAwD;AAClG,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAC/D,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,MAAM,GAAG,IAAI,8BAA8B;AAAA,EACvD;AACA,SAAO;AACT;AAEO,SAAS,kCAAkC,SAGhD;AACA,QAAM,YAAY,QAAQ,WAAW,KAAK;AAC1C,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACA,MAAI,CAACC,GAAE,OAAO,EAAE,SAAS,EAAE,UAAU,SAAS,EAAE,SAAS;AACvD,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,QAAM,QAAQ,qBAAqB,WAAW,QAAQ,KAAK;AAC3D,SAAO;AAAA,IACL;AAAA,IACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC3B;AACF;AAEA,eAAsB,gCAAgC,OAMZ;AACxC,QAAM,QAAQ,sBAAsB,MAAM,OAAO,MAAM;AACvD,QAAM,SAASC,qBAAoB;AAAA,IACjC,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,GAAI,QAAQ,EAAE,cAAc,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,EAC1D,CAAC;AACD,QAAM,SAAS,MAAM,OAAO,sBAAsB;AAAA,IAChD,WAAW,MAAM;AAAA,IACjB,GAAI,MAAM,UAAU,SAAY,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EAC5D,CAAC;AACD,SAAO;AAAA,IACL,YAAY,MAAM;AAAA,IAClB,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,WAAW,MAAM;AAAA,IACjB,GAAI,MAAM,UAAU,SAAY,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,IAC1D;AAAA,EACF;AACF;AAEO,SAAS,mCAAmC,SAA+C;AAChG,SAAO;AAAA,IACL;AAAA,IACA,WAAW,QAAQ,UAAU;AAAA,IAC7B,eAAe,QAAQ,aAAa;AAAA,IACpC,eAAe,QAAQ,SAAS;AAAA,IAChC,UAAU,QAAQ,SAAS,SAAS;AAAA,IACpC,YAAY,QAAQ,OAAO,OAAO;AAAA,IAClC,WAAW,QAAQ,OAAO,MAAM;AAAA,IAChC,oBAAoB,QAAQ,OAAO,cAAc;AAAA,EACnD,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,2CAA2C,SAAiE;AAChI,QAAM,SAAS,kCAAkC,OAAO;AACxD,QAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,UAAU,MAAM,gCAAgC;AAAA,IACpD;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,CAAC;AACD,UAAQ,IAAI,mCAAmC,OAAO,CAAC;AACzD;;;AC9FA,SAAS,oBAAoB;AAC7B,SAAS,mCAA2F;AACpG,SAAS,0BAA8E;AACvF,SAAS,kBAAkB,wBAAwE;AACnG;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAKK;;;ACnBA,IAAM,4BAA4B;AAClC,IAAM,8BAA8B;AAGpC,SAAS,eAAe,OAAwB,OAAuB;AAC5E,QAAM,OAAO,OAAO,UAAU,WAAW,QAAQ,OAAO,MAAM,KAAK,CAAC;AACpE,MAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,OAAO;AACvD,UAAM,IAAI,MAAM,GAAG,KAAK,sCAAsC;AAAA,EAChE;AACA,SAAO;AACT;;;ACRO,SAAS,sBAAsB,OAAgF;AACpH,SAAO,oBAAoB,MAAM,QAAQ,2BAA2B,GAAG,MAAM,eAAe,kBAAkB;AAChH;AAEO,SAAS,kCAAkC,cAAc,oBAA4B;AAC1F,SAAO,6BAA6B,WAAW;AACjD;AAEO,SAAS,0BAA0B,OAAgD;AACxF,SAAO,sBAAsB,MAAM,KAAK,IAAI,MAAM,IAAI;AACxD;;;AF8DA,SAAS,sBAAsB,eAA+B;AAC5D,QAAM,MAAM,IAAI,IAAI,aAAa;AACjC,MAAI,IAAI,aAAa,WAAY,IAAI,aAAa,eAAe,IAAI,aAAa,aAAc;AAC9F,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,MAAI,IAAI,aAAa,OAAO,IAAI,UAAU,IAAI,MAAM;AAClD,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,QAAM,OAAO,IAAI,OAAO,OAAO,IAAI,IAAI,IAAI;AAC3C,MAAI,CAAC,OAAO,UAAU,IAAI,KAAK,QAAQ,GAAG;AACxC,UAAM,IAAI,MAAM,uCAAuC,aAAa,EAAE;AAAA,EACxE;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,QAA8E;AACvG,QAAM,OAAO,OAAO,UAAU;AAC9B,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,QAA+E;AACzG,QAAM,QAAQ,OAAO,UAAU;AAC/B,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,QAAgF;AAC3G,QAAM,SAAS,OAAO,UAAU;AAChC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,SAAO;AACT;AAEA,SAAS,qBAAqB,QAAmC;AAC/D,SAAO,QAAQ,OAAO,UAAU,QAAQ,OAAO,UAAU,SAAS,OAAO,UAAU,MAAM;AAC3F;AAEA,SAAS,uBAAuB,MAAc,OAA+C;AAC3F,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,OAAO,KAAK;AAC3B,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,MAAM,GAAG,IAAI,6BAA6B;AAAA,EACtD;AACA,SAAO;AACT;AAEA,SAAS,2BAA2B,KAA6C;AAC/E,SAAO,uBAAuB,kCAAkC,KAAK,8BAA8B;AACrG;AAQA,SAAS,qBAAqB,QAA4C;AACxE,QAAM,SAA2B;AAAA,IAC/B;AAAA,MACE,OAAO;AAAA,MACP,MAAM,sBAAsB,OAAO,OAAO,aAAa;AAAA,MACvD,KAAK;AAAA,IACP;AAAA,EACF;AACA,QAAM,QAAQ,OAAO,UAAU;AAC/B,MAAI,SAAS,uBAAuB,MAAM,MAAM,cAAc;AAC5D,WAAO,KAAK;AAAA,MACV,OAAO;AAAA,MACP,MAAM,MAAM,QAAQ;AAAA,MACpB,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AACA,QAAM,SAAS,OAAO,UAAU;AAChC,MAAI,QAAQ;AACV,WAAO,KAAK;AAAA,MACV,OAAO;AAAA,MACP,MAAM,OAAO,QAAQ;AAAA,MACrB,KAAK;AAAA,IACP,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEA,eAAe,oBAAoB,OAAsC;AACvE,QAAM,SAAS,aAAa;AAC5B,QAAM,IAAI,QAAc,CAACC,UAAS,WAAW;AAC3C,WAAO,KAAK,SAAS,CAAC,UAAiC;AACrD,UAAI,MAAM,SAAS,cAAc;AAC/B;AAAA,UACE,IAAI;AAAA,YACF;AAAA,cACE,wBAAwB,MAAM,KAAK,iBAAiB,MAAM,IAAI;AAAA,cAC9D,MAAM;AAAA,cACN,kDAAkD,MAAM,IAAI;AAAA,YAC9D,EAAE,KAAK,IAAI;AAAA,UACb;AAAA,QACF;AACA;AAAA,MACF;AACA;AAAA,QACE,IAAI;AAAA,UACF,CAAC,wBAAwB,MAAM,KAAK,YAAY,MAAM,IAAI,KAAK,MAAM,OAAO,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAAA,QACtG;AAAA,MACF;AAAA,IACF,CAAC;AAGD,WAAO,OAAO,MAAM,MAAM,aAAa,MAAM;AAC3C,aAAO,MAAM,CAAC,UAAU;AACtB,YAAI,OAAO;AACT,iBAAO,KAAK;AACZ;AAAA,QACF;AACA,QAAAA,SAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AAEA,eAAsB,0BAA0B,QAAyC;AACvF,QAAM,SAAS,qBAAqB,MAAM;AAC1C,QAAM,OAAO,oBAAI,IAA4B;AAC7C,aAAW,SAAS,QAAQ;AAC1B,UAAM,WAAW,KAAK,IAAI,MAAM,IAAI;AACpC,QAAI,UAAU;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,UACE,gCAAgC,SAAS,KAAK,QAAQ,MAAM,KAAK,kBAAkB,MAAM,IAAI;AAAA,UAC7F,GAAG,SAAS,KAAK,KAAK,SAAS,GAAG;AAAA,UAClC,GAAG,MAAM,KAAK,KAAK,MAAM,GAAG;AAAA,QAC9B,EAAE,KAAK,IAAI;AAAA,MACb;AAAA,IACF;AACA,SAAK,IAAI,MAAM,MAAM,KAAK;AAAA,EAC5B;AACA,aAAW,SAAS,QAAQ;AAC1B,UAAM,oBAAoB,KAAK;AAAA,EACjC;AACF;AAEO,SAAS,oCACd,QACA,QAAqC,CAAC,GACT;AAC7B,MAAI,CAAC,qBAAqB,MAAM,GAAG;AACjC,UAAM,IAAI,MAAM,+FAA+F;AAAA,EACjH;AACA,QAAM,OAAO,OAAO,UAAU;AAC9B,QAAM,QAAQ,OAAO,UAAU;AAC/B,QAAM,SAAS,OAAO,UAAU;AAChC,MAAI,UAAU,CAAC,OAAO,OAAO,aAAa;AACxC,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,MAAI,UAAU,CAAC,OAAO,OAAO,4BAA4B,CAAC,OAAO,OAAO,4BAA4B;AAClG,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,MAAM,sBAAsB,OAAO,OAAO,aAAa;AAAA,IACvD,cAAc,OAAO,MAAM;AAAA,IAC3B,GAAG,uCAAuC,MAAM,OAAO,QAAQ,GAAG;AAAA,IAClE,GAAI,OAAO,OAAO,eAAe,EAAE,cAAc,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,OAAO,OAAO,cAAc,EAAE,aAAa,OAAO,OAAO,YAAY,IAAI,CAAC;AAAA,IAC9E,GAAI,OAAO,OAAO,eAAe,EAAE,cAAc,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,OAAO,OAAO,iCACd,EAAE,gCAAgC,OAAO,OAAO,+BAA+B,IAC/E,CAAC;AAAA,IACL,GAAI,OAAO,OAAO,cAAc,EAAE,aAAa,OAAO,OAAO,YAAY,IAAI,CAAC;AAAA,IAC9E,GAAI,OAAO,OAAO,cAAc,EAAE,qBAAqB,OAAO,OAAO,YAAY,IAAI,CAAC;AAAA,IACtF,GAAI,OAAO,OAAO,qBAAqB,SACnC,EAAE,kBAAkB,OAAO,OAAO,iBAAiB,IACnD,OAAO,OAAO,cACZ,EAAE,kBAAkB,OAAO,OAAO,YAAY,IAC9C,CAAC;AAAA,IACP,GAAI,OACA;AAAA,MACE,MAAM;AAAA,QACJ,OAAO,KAAK;AAAA,QACZ,WAAW,KAAK;AAAA,QAChB,QAAQ,KAAK;AAAA,MACf;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,QAAQ,EAAE,eAAe,MAAM,SAAS,IAAI,CAAC;AAAA,EACnD;AACF;AAEA,SAAS,6BAA6B,QAAmE;AACvG,MAAI,OAAO,UAAU,MAAM,0BAA0B,MAAO,QAAO;AACnE,MAAI,OAAO,OAAO,aAAa,WAAW,EAAG,QAAO;AACpD,QAAM,aAAa,OAAO,OAAO,aAAa,CAAC;AAC/C,MAAI,CAAC,WAAY,QAAO;AACxB,SAAO;AAAA,IACL,cAAc,WAAW;AAAA,IACzB,OAAO,WAAW;AAAA,IAClB,MAAM,WAAW;AAAA,EACnB;AACF;AAEO,SAAS,+BAA+B,QAA6C;AAC1F,QAAM,OAAO,kBAAkB,MAAM;AACrC,QAAM,qBAAqB,6BAA6B,MAAM;AAC9D,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,WAAW,KAAK;AAAA,IAChB,eAAe,OAAO,OAAO;AAAA,IAC7B,QAAQ,KAAK;AAAA,IACb,SAAS;AAAA,IACT,GAAI,OAAO,OAAO,eAAe,EAAE,iBAAiB,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACpF,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,IACtD,GAAI,OAAO,OAAO,eAAe,EAAE,cAAc,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,qBAAqB,EAAE,mBAAmB,IAAI,CAAC;AAAA,EACrD;AACF;AAEA,SAAS,uBAAuB,QAAwD;AACtF,QAAM,QAAQ,mBAAmB,MAAM;AACvC,SAAO,MAAM,QAAQ;AACvB;AAEO,SAAS,gCACd,QACA,QAAqC,CAAC,GACT;AAC7B,QAAM,QAAQ,mBAAmB,MAAM;AACvC,MAAI,CAAC,MAAM,eAAe;AACxB,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,QAAM,sBAAsB,2BAA2B,MAAM,GAAG;AAChE,SAAO;AAAA,IACL,eAAe,MAAM;AAAA,IACrB,eAAe,OAAO,OAAO;AAAA,IAC7B,GAAI,OAAO,OAAO,eAAe,EAAE,iBAAiB,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACpF,UAAU,MAAM;AAAA,IAChB,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,IAC5C,GAAI,OAAO,OAAO,eAAe,EAAE,cAAc,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,sBAAsB,EAAE,oBAAoB,IAAI,CAAC;AAAA,IACrD,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,EAC3C;AACF;AAEO,SAAS,0CAA0C,QAAwD;AAChH,QAAM,QAAQ,mBAAmB,MAAM;AACvC,MAAI,CAAC,MAAM,UAAU;AACnB,UAAM,IAAI,MAAM,sDAAsD;AAAA,EACxE;AACA,SAAO;AAAA,IACL,UAAU,MAAM;AAAA,IAChB,eAAe,OAAO,OAAO;AAAA,IAC7B,GAAI,OAAO,OAAO,eAAe,EAAE,iBAAiB,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACpF,UAAU,MAAM;AAAA,IAChB,GAAI,OAAO,OAAO,eAAe,EAAE,cAAc,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACjF,GAAI,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,EAC9C;AACF;AAEO,SAAS,iCACd,QACA,QAAqC,CAAC,GACjB;AACrB,QAAM,SAAS,oBAAoB,MAAM;AACzC,QAAM,sBAAsB,2BAA2B,MAAM,GAAG;AAChE,SAAO;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,eAAe,OAAO,OAAO;AAAA,IAC7B,GAAI,OAAO,OAAO,eAAe,EAAE,iBAAiB,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,IACpF,GAAI,sBAAsB,EAAE,oBAAoB,IAAI,CAAC;AAAA,IACrD,MAAM,OAAO,QAAQ;AAAA,IACrB,GAAI,OAAO,cAAc,EAAE,aAAa,OAAO,YAAY,IAAI,CAAC;AAAA,EAClE;AACF;AAEA,eAAsB,yBAAyB,QAA0B,QAAyC;AAChH,QAAM,QACJ,UACA,4BAA4B;AAAA,IAC1B,eAAe,OAAO,OAAO;AAAA,IAC7B,UAAU,OAAO,OAAO;AAAA,IACxB,GAAI,OAAO,OAAO,eAAe,EAAE,cAAc,OAAO,OAAO,aAAa,IAAI,CAAC;AAAA,EACnF,CAAC;AAEH,QAAM,MAAM,eAAe,OAAO,OAAO,QAAQ;AACjD,aAAW,cAAc,OAAO,OAAO,cAAc;AACnD,UAAM,MAAM,eAAe;AAAA,MACzB,UAAU,WAAW;AAAA,MACrB,OAAO,WAAW;AAAA,MAClB,MAAM,WAAW;AAAA,MACjB,cAAc,WAAW;AAAA,MACzB,GAAI,WAAW,kBAAkB,EAAE,iBAAiB,WAAW,gBAAgB,IAAI,CAAC;AAAA,MACpF,GAAI,WAAW,aAAa,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,MACrE,GAAI,WAAW,aAAa,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,MACrE,GAAI,WAAW,eAAe,EAAE,cAAc,WAAW,aAAa,IAAI,CAAC;AAAA,MAC3E,GAAI,WAAW,eAAe,EAAE,cAAc,WAAW,aAAa,IAAI,CAAC;AAAA,IAC7E,CAAC;AAAA,EACH;AACA,aAAW,WAAW,yBAAyB,OAAO,MAAM,GAAG;AAC7D,UAAM,MAAM,YAAY;AAAA,MACtB,UAAU,QAAQ;AAAA,MAClB,WAAW,QAAQ;AAAA,MACnB,gBAAgB,QAAQ;AAAA,MACxB,cAAc,QAAQ;AAAA,MACtB,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MACd,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC;AAAA,IAC3D,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,kBAAkB,OAMtB;AAChB,QAAM,WAAW,MAAM,YAAY;AACnC,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,YAAY,MAAM,aAAa;AACrC,QAAM,YAAY,GAAG,MAAM,cAAc,QAAQ,OAAO,EAAE,CAAC;AAE3D,WAAS,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG;AACvD,UAAM,UAAU,MAAM,sBAAsB;AAAA,MAC1C,eAAe,MAAM;AAAA,MACrB,GAAI,MAAM,YAAY,EAAE,WAAW,MAAM,UAAU,IAAI,CAAC;AAAA,MACxD;AAAA,IACF,CAAC;AACD,QAAI,QAAS;AACb,UAAM,IAAI,QAAQ,CAACA,aAAY,WAAWA,UAAS,OAAO,CAAC;AAAA,EAC7D;AAEA,QAAM,IAAI,MAAM,wCAAwC,SAAS,GAAG;AACtE;AAEA,SAAS,aAAa,QAAoC;AACxD,MAAI,OAAO,QAAS,QAAO,QAAQ,QAAQ;AAC3C,SAAO,IAAI,QAAQ,CAACA,aAAY;AAC9B,WAAO,iBAAiB,SAAS,MAAMA,SAAQ,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,EAClE,CAAC;AACH;AAEO,SAAS,yBAAyB,OAAiE;AACxG,SAAO,CAAC,MAAM,qBAAqB,MAAM,kBAAkB;AAC7D;AAEA,SAAS,yBAAyB,eAAyC,CAAC,GAAG;AAC7E,SAAO;AAAA,IACL,2BAA2B,aAAa,6BAA6B;AAAA,IACrE,qBAAqB,aAAa,uBAAuB;AAAA,IACzD,KAAK,aAAa,OAAO,QAAQ;AAAA,IACjC,QAAQ,aAAa,UAAU;AAAA,IAC/B,aAAa,aAAa,eAAe;AAAA,IACzC,iBAAiB,aAAa,mBAAmB;AAAA,IACjD,oBAAoB,aAAa,sBAAsB;AAAA,IACvD,kBAAkB,aAAa,oBAAoB;AAAA,IACnD,mBAAmB,aAAa,qBAAqB;AAAA,IACrD,6BAA6B,aAAa,+BAA+B;AAAA,IACzE,mBAAmB,aAAa,qBAAqB;AAAA,EACvD;AACF;AAEA,SAAS,iBAAiB,OAA6B,iBAGrD;AACA,MAAI,oBAAoB;AACxB,QAAM,kBAAkB,CAAC,WAAqB;AAC5C,wBAAoB;AACpB,QAAI,CAAC,gBAAgB,OAAO,SAAS;AACnC,sBAAgB,MAAM,MAAM;AAAA,IAC9B;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM,gBAAgB;AAC9C,QAAM,kBAAkB,MAAM,gBAAgB,MAAM,QAAQ,MAAM;AAElE,MAAI,MAAM,4BAA4B,OAAO;AAC3C,YAAQ,KAAK,UAAU,eAAe;AACtC,YAAQ,KAAK,WAAW,eAAe;AAAA,EACzC;AACA,MAAI,MAAM,QAAQ;AAChB,QAAI,MAAM,OAAO,SAAS;AACxB,sBAAgB;AAAA,IAClB,OAAO;AACL,YAAM,OAAO,iBAAiB,SAAS,iBAAiB,EAAE,MAAM,KAAK,CAAC;AAAA,IACxE;AAAA,EACF;AAEA,SAAO;AAAA,IACL,mBAAmB,MAAM;AAAA,IACzB,UAAU;AACR,UAAI,MAAM,4BAA4B,OAAO;AAC3C,gBAAQ,IAAI,UAAU,eAAe;AACrC,gBAAQ,IAAI,WAAW,eAAe;AAAA,MACxC;AACA,YAAM,QAAQ,oBAAoB,SAAS,eAAe;AAAA,IAC5D;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,SAAwB,iBAAwC;AAC/F,UAAQ,MAAM,CAAC,UAAmB;AAChC,QAAI,CAAC,gBAAgB,OAAO,SAAS;AACnC,sBAAgB,MAAM,KAAK;AAAA,IAC7B;AAAA,EACF,CAAC;AACH;AAEA,SAAS,kCAAkC,QAAgC;AACzE,QAAM,cAAc;AAAA,IAClB,GAAI,OAAO,UAAU,OAAO,CAAC,eAAe,IAAI,CAAC;AAAA,IACjD,GAAI,OAAO,UAAU,QAAQ,CAAC,OAAO,IAAI,CAAC;AAAA,EAC5C;AACA,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,6DAA6D,YAAY,KAAK,IAAI,CAAC;AAAA,IACrF;AAAA,EACF;AACF;AAEO,SAAS,sBAAsB,QAAkC;AACtE,QAAM,WAAW,mBAAmB,MAAM,KAAK,OAAO,OAAO;AAC7D,SAAO,GAAG,SAAS,QAAQ,OAAO,EAAE,CAAC;AACvC;AAEA,eAAe,eAAe,OAA6B,iBAAkC,mBAAiD;AAC5I,QAAM,eAAe,yBAAyB,MAAM,YAAY;AAChE,QAAM,SAAS,aAAa;AAC5B,QAAM,SAAS,MAAM;AACrB,QAAM,MAAM,aAAa,OAAO,QAAQ;AACxC,QAAM,YAAqC,CAAC;AAC5C,QAAM,aAAa,aAAa,gBAAgB,oCAAoC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpG,MAAI;AAEJ,MAAI;AACF,UAAM,aAAa,kBAAkB,EAAE,eAAe,OAAO,OAAO,cAAc,CAAC;AACnF,UAAM,aAAa,oBAAoB,MAAM;AAE7C,UAAM,gBAAgB,aAAa,YAAY;AAAA,MAC7C,GAAG,yBAAyB,OAAO,MAAM;AAAA,MACzC,QAAQ,gBAAgB;AAAA,IAC1B,CAAC;AACD,4BAAwB,eAAe,eAAe;AAEtD,QAAI,OAAO,UAAU,MAAM;AACzB,YAAM,SAAS,aAAa,iBAAiB,+BAA+B,MAAM,CAAC;AACnF,gBAAU,KAAK,EAAE,UAAU,QAAQ,OAAO,CAAC;AAC3C,8BAAwB,OAAO,cAAc,eAAe;AAAA,IAC9D;AACA,QAAI,OAAO,UAAU,OAAO;AAC1B,UAAI,uBAAuB,MAAM,MAAM,eAAe;AACpD,cAAM,SAAS,aAAa,4BAA4B,0CAA0C,MAAM,CAAC;AACzG,kBAAU,KAAK,EAAE,UAAU,SAAS,MAAM,eAAe,OAAO,CAAC;AACjE,gCAAwB,OAAO,cAAc,eAAe;AAAA,MAC9D,OAAO;AACL,cAAM,SAAS,aAAa,kBAAkB,gCAAgC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9F,kBAAU,KAAK,EAAE,UAAU,SAAS,MAAM,cAAc,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,MACnF;AAAA,IACF;AACA,QAAI,OAAO,UAAU,QAAQ;AAC3B,YAAM,SAAS,aAAa,mBAAmB,iCAAiC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAChG,gBAAU,KAAK,EAAE,UAAU,UAAU,KAAK,OAAO,KAAK,aAAa,OAAO,aAAa,OAAO,CAAC;AAAA,IACjG;AAEA,WAAO,IAAI,qBAAqB;AAChC,WAAO,IAAI,WAAW,MAAM,UAAU,EAAE;AACxC,WAAO,IAAI,eAAe,OAAO,OAAO,aAAa,EAAE;AACvD,eAAW,WAAW,WAAW;AAC/B,UAAI,QAAQ,aAAa,SAAS;AAChC,cAAM,QAAQ,OAAO,UAAU;AAC/B,YAAI,QAAQ,SAAS,eAAe;AAClC,iBAAO,IAAI,0BAA0B;AACrC,iBAAO,IAAI,0BAA0B,MAAM,MAAM,IAAI,MAAM,SAAS,EAAE;AACtE,iBAAO,IAAI,mFAAmF;AAAA,QAChG,OAAO;AACL,iBAAO,IAAI,iBAAiB,QAAQ,GAAG,eAAe;AACtD,iBAAO,IAAI,0BAA0B,MAAM,MAAM,IAAI,MAAM,SAAS,EAAE;AACtE,iBAAO,IAAI,mFAAmF;AAAA,QAChG;AAAA,MACF,WAAW,QAAQ,aAAa,UAAU;AACxC,cAAM,SAAS,OAAO,UAAU;AAChC,eAAO,IAAI,yBAAyB,sBAAsB,EAAE,MAAM,OAAO,MAAM,aAAa,QAAQ,YAAY,CAAC,CAAC,EAAE;AACpH,eAAO,IAAI,uBAAuB,kCAAkC,QAAQ,WAAW,CAAC,EAAE;AAC1F,eAAO,IAAI,oBAAoB,0BAA0B,MAAM,CAAC,EAAE;AAClE,eAAO,IAAI,8BAA8B,OAAO,QAAQ,2BAA2B,EAAE;AAAA,MACvF,OAAO;AACL,eAAO,IAAI,iEAAiE;AAAA,MAC9E;AAAA,IACF;AACA,WAAO,IAAI,uBAAuB;AAElC,UAAM,aAAa,gBAAgB,MAAM;AACzC,UAAM,SAAS,gBAAgB,OAAO;AACtC,QAAI,yBAAyB,EAAE,mBAAmB,kBAAkB,GAAG,OAAO,CAAC,GAAG;AAChF,YAAM;AAAA,IACR;AAAA,EACF,SAAS,OAAO;AACd,oBAAgB;AAChB,UAAM;AAAA,EACR,UAAE;AACA,oBAAgB,MAAM;AACtB,UAAM,QAAQ,WAAW,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC1F,QAAI;AACF,YAAM,WAAW,MAAM;AAAA,IACzB,SAAS,OAAO;AACd,UAAI,kBAAkB,QAAW;AAC/B,eAAO,IAAI,oDAAoD,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,MACzH,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,eAAe,OAA6B,iBAAkC,mBAAiD;AAC5I,QAAM,eAAe,yBAAyB,MAAM,YAAY;AAChE,QAAM,SAAS,aAAa;AAC5B,QAAM,SAAS,MAAM;AACrB,oCAAkC,MAAM;AACxC,QAAM,WAAW,mBAAmB,MAAM,KAAK,OAAO,OAAO;AAC7D,8BAA4B,QAAQ;AAEpC,QAAM,aAAa,kBAAkB,EAAE,eAAe,OAAO,OAAO,cAAc,CAAC;AACnF,QAAM,aAAa,oBAAoB,MAAM;AAE7C,MAAI;AACF,UAAM,gBAAgB,aAAa,YAAY;AAAA,MAC7C,GAAG,yBAAyB,OAAO,MAAM;AAAA,MACzC,QAAQ,gBAAgB;AAAA,IAC1B,CAAC;AACD,4BAAwB,eAAe,eAAe;AAEtD,WAAO,IAAI,mCAAmC;AAC9C,WAAO,IAAI,WAAW,MAAM,UAAU,EAAE;AACxC,WAAO,IAAI,UAAU,QAAQ,EAAE;AAC/B,WAAO,IAAI,kBAAkB,QAAQ,CAAC;AACtC,WAAO,IAAI,4BAA4B;AACvC,WAAO,IAAI,WAAW,OAAO,OAAO,QAAQ,EAAE;AAC9C,QAAI,OAAO,UAAU,QAAQ;AAC3B,aAAO,IAAI,uBAAuB,sBAAsB,MAAM,CAAC,EAAE;AACjE,aAAO,IAAI,0FAA0F;AAAA,IACvG;AACA,WAAO,IAAI,uBAAuB;AAElC,UAAM,aAAa,gBAAgB,MAAM;AACzC,UAAM,SAAS,gBAAgB,OAAO;AACtC,QAAI,yBAAyB,EAAE,mBAAmB,kBAAkB,GAAG,OAAO,CAAC,GAAG;AAChF,YAAM;AAAA,IACR;AAAA,EACF,UAAE;AACA,oBAAgB,MAAM;AAAA,EACxB;AACF;AAEA,eAAsB,gBAAgB,OAA4C;AAChF,yBAAuB,MAAM,OAAO,MAAM,SAAS;AACnD,yBAAuB,MAAM,OAAO,MAAM,YAAY;AAEtD,QAAM,eAAe,yBAAyB,MAAM,YAAY;AAChE,MAAI,sBAAsB,MAAM,MAAM,MAAM,SAAS;AACnD,UAAM,aAAa,0BAA0B,MAAM,MAAM;AAAA,EAC3D;AAEA,QAAM,kBAAkB,IAAI,gBAAgB;AAC5C,QAAM,gBAAgB,iBAAiB,OAAO,eAAe;AAC7D,MAAI;AACF,QAAI,sBAAsB,MAAM,MAAM,MAAM,SAAS;AACnD,YAAM,eAAe,OAAO,iBAAiB,cAAc,iBAAiB;AAC5E;AAAA,IACF;AACA,UAAM,eAAe,OAAO,iBAAiB,cAAc,iBAAiB;AAAA,EAC9E,UAAE;AACA,kBAAc,QAAQ;AAAA,EACxB;AACF;AAEA,eAAsB,gBAAgB,SAA6C;AACjF,QAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,gBAAgB,EAAE,QAAQ,WAAW,CAAC;AAC9C;;;AG1nBA,SAAS,mBAAmB,OAAuB;AACjD,SAAO,MAAM,SAAS,GAAG,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI;AACpD;AAEO,SAAS,kBAAkB,aAA6B;AAC7D,QAAM,MAAM,YAAY,KAAK;AAC7B,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AACA,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,IAAI,GAAG;AAAA,EACnB,QAAQ;AACN,UAAM,IAAI,MAAM,gDAAgD,WAAW,EAAE;AAAA,EAC/E;AACA,MAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AACzD,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,MAAI,IAAI,YAAY,IAAI,UAAU;AAChC,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,MAAI,IAAI,UAAU,IAAI,MAAM;AAC1B,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AACA,SAAO,mBAAmB,IAAI,SAAS,CAAC;AAC1C;AAEO,SAAS,mBAAmB,UAA0B;AAC3D,QAAM,WAAW,IAAI,IAAI,QAAQ,EAAE,SAAS,YAAY;AACxD,SAAO,SAAS,SAAS,SAAS,IAAI,YAAY;AACpD;AAEO,SAAS,gBAAgB,OAAyE;AACvG,QAAM,gBAAgB,mBAAmB,MAAM,QAAQ;AACvD,SAAO;AAAA,IACL,GAAG,MAAM;AAAA,IACT,SAAS;AAAA,MACP,MAAM;AAAA,MACN,UAAU,MAAM;AAAA,MAChB;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,GAAG,MAAM,OAAO;AAAA,MAChB,eAAe,MAAM;AAAA,IACvB;AAAA,EACF;AACF;AAEA,SAASC,uBAAsB,UAA0B;AACvD,SAAO,GAAG,mBAAmB,QAAQ,CAAC;AACxC;AAEO,SAAS,uBAAuB,OAAsC;AAC3E,QAAM,iBAAiB,MAAM,OAAO,OAAO,aAAa,IAAI,CAAC,eAAe;AAC1E,WAAO,KAAK,qCAAqC,UAAU,CAAC;AAAA,EAC9D,CAAC;AACD,SAAO;AAAA,IACL;AAAA,IACA,WAAW,MAAM,UAAU;AAAA,IAC3B,UAAU,MAAM,QAAQ;AAAA,IACxB,WAAW,MAAM,OAAO,OAAO,QAAQ;AAAA,IACvC,iBAAiB,MAAM,aAAa,cAAc,SAAS;AAAA,IAC3D,kBAAkB,MAAM,QAAQ;AAAA,IAChC;AAAA,IACA,GAAI,eAAe,SAAS,iBAAiB,CAAC,QAAQ;AAAA,IACtD,GAAI,MAAM,OAAO,UAAU,SAAS,CAAC,uBAAuBA,uBAAsB,MAAM,QAAQ,CAAC,EAAE,IAAI,CAAC;AAAA,IACxG;AAAA,IACA,4BAA4B,MAAM,UAAU;AAAA,IAC5C;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,eAAe,SAA6B,eAAsC,CAAC,GAAkB;AACzH,MAAI,CAAC,QAAQ,OAAO;AAClB,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAEA,QAAM,SAAS,aAAa,UAAU;AACtC,QAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,QAAM,WAAW,kBAAkB,QAAQ,KAAK;AAChD,8BAA4B,QAAQ;AACpC,QAAM,SAAS,cAAc,UAAU;AAEvC,QAAM,UAAU,MAAM,sBAAsB;AAAA,IAC1C,eAAe;AAAA,IACf,GAAI,aAAa,YAAY,EAAE,WAAW,aAAa,UAAU,IAAI,CAAC;AAAA,IACtE,WAAW,aAAa,mBAAmB;AAAA,EAC7C,CAAC;AACD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gCAAgC,QAAQ,WAAW;AAAA,EACrE;AAEA,QAAM,UAAU,gBAAgB,EAAE,QAAQ,SAAS,CAAC;AAEpD,QAAM,iBAAiB,QAAQ,aAAa;AAC5C,MAAI,gBAAgB;AAClB,UAAM,yBAAyB,SAAS,aAAa,eAAe;AAAA,EACtE;AAEA,uBAAqB,YAAY,OAAO;AAExC,SAAO;AAAA,IACL,uBAAuB;AAAA,MACrB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AACF;;;ACvIA,SAAS,iBAAiB;AAC1B,SAAS,WAAW,cAAAC,aAAY,WAAW,aAAAC,YAAW,UAAU,gBAAAC,eAAc,UAAU,UAAAC,SAAQ,iBAAAC,sBAAqB;AACrH,SAAS,WAAAC,gBAAe;AACxB,SAAS,WAAAC,UAAS,QAAAC,aAAY;AAY9B;AAAA,EACE,0CAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,aAAAC;AAAA,OAEK;AASA,IAAM,gBAAgB;AAgE7B,IAAM,0BAA0B;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,SAAS,oBAAoB,MAAsB;AACjD,SAAO;AAAA,IACLC,MAAK,MAAM,UAAU,KAAK;AAAA,IAC1BA,MAAK,MAAM,eAAe,KAAK;AAAA,IAC/BA,MAAK,MAAM,QAAQ,KAAK;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,GAAG;AACZ;AAEA,SAAS,WAAW,cAAyD;AAC3E,SAAO,aAAa,UAAU;AAChC;AAEA,SAAS,aAAa,cAAoD;AACxE,SAAO,aAAa,YAAY,QAAQ;AAC1C;AAEA,SAAS,SAAS,cAA2C;AAC3D,SAAO,aAAa,WAAWC,SAAQ;AACzC;AAEA,SAAS,QAAQ,cAA2C;AAC1D,SAAO,aAAa,QAAQ,OAAO,QAAQ,WAAW,aAAa,QAAQ,OAAO,IAAI;AACxF;AAEO,SAAS,6BAA6B,WAA4B,QAAQ,UAA6B;AAC5G,MAAI,aAAa,SAAU,QAAO;AAClC,MAAI,aAAa,QAAS,QAAO;AACjC,SAAO;AACT;AAEA,SAAS,sBAAsB,cAAsD;AACnF,SAAO,6BAA6B,aAAa,YAAY,CAAC;AAChE;AAEO,SAAS,aAAa,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AACtH,QAAM,OAAO,SAAS,YAAY;AAClC,QAAM,MAAM,aAAa,OAAO,QAAQ;AACxC,QAAM,aAAa,QAAQ,UAAU,kBAAkB,KAAK,IAAI;AAChE,QAAM,iBAAiB,sBAAsB,KAAK,IAAI;AACtD,QAAM,UAAUD,MAAK,gBAAgB,MAAM;AAC3C,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA,WAAWA,MAAK,MAAM,WAAW,gBAAgB,GAAG,aAAa,QAAQ;AAAA,IACzE,YAAYA,MAAK,SAAS,aAAa;AAAA,IACvC,YAAYA,MAAK,SAAS,iBAAiB;AAAA,IAC3C,UAAUA,MAAK,MAAM,WAAW,WAAW,QAAQ,GAAG,aAAa,UAAU;AAAA,EAC/E;AACF;AAEA,SAAS,UAAU,OAAuB;AACxC,SAAO,MACJ,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,QAAQ;AAC7B;AAEA,SAAS,YAAY,OAAuB;AAC1C,SAAO,MACJ,WAAW,UAAU,GAAG,EACxB,WAAW,UAAU,GAAG,EACxB,WAAW,QAAQ,GAAG,EACtB,WAAW,QAAQ,GAAG,EACtB,WAAW,SAAS,GAAG;AAC5B;AAEA,SAAS,iBAAiB,QAA0B;AAClD,SAAO,OAAO,IAAI,CAAC,UAAU,eAAe,UAAU,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI;AACpF;AAEO,SAAS,sBAAsB,OAS3B;AACT,QAAM,qBAAqB,OAAO,QAAQ,MAAM,eAAe,CAAC,CAAC;AACjE,QAAM,cACJ,mBAAmB,SAAS,IACxB;AAAA,IACE;AAAA,IACA;AAAA,IACA,GAAG,mBAAmB,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,MAC9C,YAAY,UAAU,GAAG,CAAC;AAAA,MAC1B,eAAe,UAAU,KAAK,CAAC;AAAA,IACjC,CAAC;AAAA,IACD;AAAA,EACF,IACA,CAAC;AAEP,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,UAAU,MAAM,KAAK,CAAC;AAAA,IACnC;AAAA,IACA;AAAA,IACA,iBAAiB,MAAM,gBAAgB;AAAA,IACvC;AAAA,IACA;AAAA,IACA,MAAM,MAAM,YAAY,SAAS,OAAO;AAAA,IACxC;AAAA,IACA,MAAM,MAAM,YAAY,SAAS,OAAO;AAAA,IACxC;AAAA,IACA,aAAa,UAAU,MAAM,UAAU,CAAC;AAAA,IACxC;AAAA,IACA,aAAa,UAAU,MAAM,UAAU,CAAC;AAAA,IACxC;AAAA,IACA,aAAa,UAAU,MAAM,gBAAgB,CAAC;AAAA,IAC9C,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,aAAa,OAAuB;AAC3C,SAAO,IAAI,MAAM,WAAW,MAAM,MAAM,EAAE,WAAW,KAAK,KAAK,EAAE,WAAW,KAAK,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAC/G;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,SAAO,MAAM,WAAW,KAAK,IAAI;AACnC;AAEO,SAAS,wBAAwB,OAO7B;AACT,QAAM,cAAc,OAAO,QAAQ,MAAM,eAAe,CAAC,CAAC,EAAE;AAAA,IAC1D,CAAC,CAAC,KAAK,KAAK,MAAM,eAAe,aAAa,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AAAA,EAClE;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,aAAa,MAAM,gBAAgB,CAAC;AAAA,IACxD,GAAG;AAAA,IACH,aAAa,MAAM,UAAU,IAAI,YAAY,EAAE,KAAK,GAAG,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,IACA,yBAAyB,iBAAiB,MAAM,UAAU,CAAC;AAAA,IAC3D,wBAAwB,iBAAiB,MAAM,UAAU,CAAC;AAAA,IAC1D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,gBAAgB,cAAsE;AAC7F,MAAI,aAAa,UAAW,QAAO,aAAa;AAChD,SAAO,CAAC,SAAmB;AACzB,UAAM,SAAS,UAAU,aAAa,MAAM,EAAE,UAAU,OAAO,CAAC;AAChE,WAAO;AAAA,MACL,QAAQ,OAAO,UAAU;AAAA,MACzB,QAAQ,OAAO,UAAU;AAAA,MACzB,QAAQ,OAAO,UAAU;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,cAAsE;AAC7F,MAAI,aAAa,UAAW,QAAO,aAAa;AAChD,SAAO,CAAC,SAAmB;AACzB,UAAM,SAAS,UAAU,aAAa,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,UAAU,OAAO,CAAC;AAC/E,WAAO;AAAA,MACL,QAAQ,OAAO,UAAU;AAAA,MACzB,QAAQ,OAAO,UAAU;AAAA,MACzB,QAAQ,OAAO,UAAU;AAAA,IAC3B;AAAA,EACF;AACF;AAEA,SAAS,cAAc,cAA2C;AAChE,SAAO,OAAO,QAAQ,YAAY,CAAC;AACrC;AAEA,SAAS,qBAAqB,cAA2C;AACvE,SAAO,GAAG,cAAc,YAAY,CAAC,IAAI,aAAa;AACxD;AAEA,SAAS,qBAA6B;AACpC,SAAO;AACT;AAEA,SAAS,iCAAiC,cAAsD;AAC9F,QAAM,aAAa,sBAAsB,YAAY;AACrD,MAAI,eAAe,eAAe;AAChC,UAAM,IAAI,MAAM,mBAAmB,CAAC;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,cAAmC,MAAgB,QAA+B;AAC7G,QAAM,SAAS,gBAAgB,YAAY,EAAE,IAAI;AACjD,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,SAAS,gBAAgB,MAAM;AACrC,UAAM,IAAI,MAAM,GAAG,MAAM,UAAU,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,QAA+B;AACtD,SAAO,CAAC,OAAO,OAAO,KAAK,GAAG,OAAO,OAAO,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC/E;AAEA,SAAS,gBAAgB,QAA+B;AACtD,SAAO,CAAC,OAAO,OAAO,KAAK,GAAG,OAAO,OAAO,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC/E;AAEA,SAAS,oBAAoB,cAAmC,MAAgB,QAA+B;AAC7G,QAAM,SAAS,gBAAgB,YAAY,EAAE,IAAI;AACjD,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,SAAS,gBAAgB,MAAM;AACrC,UAAM,IAAI,MAAM,GAAG,MAAM,UAAU,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,EACnE;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,cAAkD;AAC7E,SAAO,gBAAgB,YAAY,EAAE,CAAC,SAAS,qBAAqB,YAAY,CAAC,CAAC;AACpF;AAEA,SAAS,kBAA0B;AACjC,SAAO,GAAG,aAAa;AACzB;AAEA,SAAS,oBAAoB,cAAkD;AAC7E,SAAO,gBAAgB,YAAY,EAAE,CAAC,aAAa,gBAAgB,CAAC,CAAC;AACvE;AAEA,SAAS,UAAU,cAAkE;AACnF,SAAO,aAAa,UAAU,CAAC,OAAe,IAAI,QAAQ,CAACE,aAAY,WAAWA,UAAS,EAAE,CAAC;AAChG;AAEA,eAAe,qBACb,cACA,QAAqD,CAAC,GACpC;AAClB,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,WAAW,KAAK,IAAI,KAAK,MAAM,aAAa;AAClD,SAAO,MAAM;AACX,QAAI,oBAAoB,YAAY,EAAE,WAAW,EAAG,QAAO;AAC3D,QAAI,KAAK,IAAI,KAAK,SAAU,QAAO;AACnC,UAAM,UAAU,YAAY,EAAE,UAAU;AAAA,EAC1C;AACF;AAEA,eAAe,uBACb,cACA,QAAqD,CAAC,GACpC;AAClB,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,WAAW,KAAK,IAAI,KAAK,MAAM,aAAa;AAClD,SAAO,MAAM;AACX,QAAI,oBAAoB,YAAY,EAAE,WAAW,EAAG,QAAO;AAC3D,QAAI,KAAK,IAAI,KAAK,SAAU,QAAO;AACnC,UAAM,UAAU,YAAY,EAAE,UAAU;AAAA,EAC1C;AACF;AAEA,eAAe,qBACb,cACA,QAAqD,CAAC,GACpC;AAClB,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,WAAW,KAAK,IAAI,KAAK,MAAM,aAAa;AAClD,SAAO,MAAM;AACX,UAAM,SAAS,oBAAoB,YAAY;AAC/C,QAAI,OAAO,WAAW,KAAK,OAAO,OAAO,KAAK,MAAM,SAAU,QAAO;AACrE,QAAI,KAAK,IAAI,KAAK,SAAU,QAAO;AACnC,UAAM,UAAU,YAAY,EAAE,UAAU;AAAA,EAC1C;AACF;AAEA,eAAe,uBACb,cACA,QAAqD,CAAC,GACpC;AAClB,QAAM,aAAa,MAAM,cAAc;AACvC,QAAM,WAAW,KAAK,IAAI,KAAK,MAAM,aAAa;AAClD,SAAO,MAAM;AACX,UAAM,SAAS,oBAAoB,YAAY;AAC/C,QAAI,OAAO,WAAW,KAAK,OAAO,OAAO,KAAK,MAAM,SAAU,QAAO;AACrE,QAAI,KAAK,IAAI,KAAK,SAAU,QAAO;AACnC,UAAM,UAAU,YAAY,EAAE,UAAU;AAAA,EAC1C;AACF;AAEA,eAAe,qBACb,cACA,QAAqD,CAAC,GACpC;AAClB,QAAM,aAAa,sBAAsB,YAAY;AACrD,MAAI,eAAe,UAAW,QAAO,qBAAqB,cAAc,KAAK;AAC7E,MAAI,eAAe,UAAW,QAAO,qBAAqB,cAAc,KAAK;AAC7E,SAAO;AACT;AAEA,eAAe,uBACb,cACA,QAAqD,CAAC,GACpC;AAClB,QAAM,aAAa,sBAAsB,YAAY;AACrD,MAAI,eAAe,UAAW,QAAO,uBAAuB,cAAc,KAAK;AAC/E,MAAI,eAAe,UAAW,QAAO,uBAAuB,cAAc,KAAK;AAC/E,SAAO;AACT;AAEA,SAAS,wBAAwB,YAA4B;AAC3D,QAAM,SAAS,cAAc,UAAU;AACvC,SAAO,OAAO,OAAO,aAAa,CAAC,GAAG,gBAAgBC,SAAQ,UAAU;AAC1E;AAEA,SAAS,wBAAwB,SAAgC,cAA6C;AAC5G,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,SAAO;AAAA,IACL,aAAa,YAAY,QAAQ;AAAA,IACjC,aAAa,YAAY,QAAQ,KAAK,CAAC,KAAK;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM;AAAA,EACR;AACF;AAEA,SAAS,sBAAsB,MAAc,OAAwD;AACnG,MAAI,UAAU,UAAa,UAAU,GAAI,QAAO;AAChD,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,OAAO,KAAK,EAAE,KAAK,CAAC;AAC9E,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,MAAM,GAAG,IAAI,yCAAyC,KAAK,EAAE;AAAA,EACzE;AACA,SAAO,OAAO,MAAM;AACtB;AAEA,SAAS,4BAA4B,SAAwD;AAC3F,QAAM,sBAAsB,sBAAsB,4BAA4B,QAAQ,mBAAmB;AACzG,QAAM,oBAAoB,sBAAsB,0BAA0B,QAAQ,iBAAiB;AACnG,QAAM,uBAAuB,sBAAsB,6BAA6B,QAAQ,oBAAoB;AAC5G,QAAM,cAAsC;AAAA,IAC1C,GAAI,sBAAsB,EAAE,gCAAgC,oBAAoB,IAAI,CAAC;AAAA,IACrF,GAAI,oBAAoB,EAAE,8BAA8B,kBAAkB,IAAI,CAAC;AAAA,IAC/E,GAAI,uBAAuB,EAAE,iCAAiC,qBAAqB,IAAI,CAAC;AAAA,IACxF,GAAI,QAAQ,oBAAoB,EAAE,6BAA6B,OAAO,IAAI,CAAC;AAAA,EAC7E;AACA,EAAAC,wCAAuC,WAAW;AAClD,SAAO;AACT;AAEA,SAAS,WAAW,OAAyB;AAC3C,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS;AACrD;AAEA,SAAS,gBAAgB,OAAgB,QAAwB;AAC/D,SAAO,QAAQ,UAAU,MAAM,MAAM,YAAY,MAAM;AACzD;AAEA,SAAS,yBAAyB,QAAoC;AACpE,QAAM,QAAQ,CAAC,aAAa;AAC5B,QAAM,SAAS,OAAO,UAAU;AAChC,MAAI,QAAQ;AACV,UAAM,gBAAgB,WAAW,OAAO,OAAO,WAAW;AAC1D,UAAM,aAAa,OAAO,OAAO,qBAAqB,OAAO,aAAa,WAAW,OAAO,OAAO,oBAAoB,OAAO,OAAO,WAAW,IAAI,UAAU;AAC9J,UAAM;AAAA,MACJ,6CAA6C,OAAO,eAAe,kBAAkB,SAAS,OAAO,QAAQ,SAAS,cAAc,gBAAgB,eAAe,oBAAoB,CAAC,WAAW,UAAU,mBAAmB,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,IAC7P;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO,UAAU;AAC/B,MAAI,OAAO;AACT,UAAM,OAAO,MAAM,QAAQ;AAC3B,UAAM,eAAe,SAAS,gBAAgB,WAAW,MAAM,QAAQ,IAAI,WAAW,MAAM,aAAa;AACzG,UAAM,gBAAgB,SAAS,gBAAgB,aAAa,sBAAsB,MAAM,QAAQ,SAAS;AACzG,UAAM;AAAA,MACJ,oBAAoB,IAAI,IAAI,gBAAgB,cAAc,aAAa,CAAC,cAAc,gBAAgB,WAAW,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,MAAM,MAAM,IAAI,MAAM,SAAS;AAAA,IAC1L;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,UAAU;AAC9B,MAAI,MAAM;AACR,UAAM,mBAAmB,WAAW,KAAK,KAAK,KAAK,WAAW,KAAK,SAAS;AAC5E,UAAM,aAAa,KAAK,YAAY,2BAA2B;AAC/D,UAAM;AAAA,MACJ,0CAA0C,KAAK,MAAM,IAAI,gBAAgB,kBAAkB,iBAAiB,CAAC,cAAc,gBAAgB,kBAAkB,iBAAiB,CAAC,gBAAgB,UAAU;AAAA,IAC3M;AAAA,EACF;AAEA,SAAO,MAAM,SAAS,IAAI,QAAQ,CAAC,GAAG,OAAO,mBAAmB;AAClE;AAEA,SAAS,eAAe,cAA2C;AACjE,QAAM,aAAa,sBAAsB,YAAY;AACrD,SAAO,eAAe,YAAY,oBAAoB,SAAS,YAAY,CAAC,IAAI;AAClF;AAEA,SAAS,mBAAmB,SAAgC,OAAqB,cAA2D;AAC1I,SAAO;AAAA,IACL,qBAAqB,MAAM;AAAA,IAC3B,MAAM,eAAe,YAAY;AAAA,IACjC,GAAG,4BAA4B,OAAO;AAAA,EACxC;AACF;AAEO,SAAS,eAAe,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AACxH,QAAM,aAAa,iCAAiC,YAAY;AAChE,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,QAAM,mBAAmB,wBAAwB,MAAM,UAAU;AACjE,yBAAuB,MAAM,OAAO;AACpC,MAAI,eAAe,WAAW;AAC5B,IAAAC,WAAUF,SAAQ,MAAM,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AACvD,UAAM,QAAQ,sBAAsB;AAAA,MAClC,OAAO,MAAM;AAAA,MACb,kBAAkB,wBAAwB,SAAS,YAAY;AAAA,MAC/D,WAAW;AAAA,MACX,WAAW;AAAA,MACX,YAAY,MAAM;AAAA,MAClB,YAAY,MAAM;AAAA,MAClB;AAAA,MACA,aAAa,mBAAmB,SAAS,OAAO,YAAY;AAAA,IAC9D,CAAC;AACD,IAAAG,eAAc,MAAM,WAAW,OAAO,EAAE,MAAM,IAAM,CAAC;AACrD,WAAO;AAAA,EACT;AACA,EAAAD,WAAUF,SAAQ,MAAM,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACtD,QAAM,OAAO,wBAAwB;AAAA,IACnC,OAAO,MAAM;AAAA,IACb,WAAW,wBAAwB,SAAS,YAAY;AAAA,IACxD,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM;AAAA,IAClB;AAAA,IACA,aAAa,mBAAmB,SAAS,OAAO,YAAY;AAAA,EAC9D,CAAC;AACD,EAAAG,eAAc,MAAM,UAAU,MAAM,EAAE,MAAM,IAAM,CAAC;AACnD,sBAAoB,cAAc,CAAC,eAAe,GAAG,gCAAgC;AACrF,sBAAoB,cAAc,CAAC,UAAU,gBAAgB,CAAC,GAAG,yBAAyB;AAC1F,SAAO;AACT;AAEA,SAAS,UAAU,OAAqB,YAAwC;AAC9E,MAAI,eAAe,UAAW,QAAOC,YAAW,MAAM,SAAS;AAC/D,MAAI,eAAe,UAAW,QAAOA,YAAW,MAAM,QAAQ;AAC9D,SAAO;AACT;AAEA,SAAS,YAAY,QAAgC;AACnD,QAAMC,QAAO,GAAG,OAAO,MAAM;AAAA,EAAK,OAAO,MAAM,GAAG,YAAY;AAC9D,SAAOA,MAAK,SAAS,iBAAiB,KAAKA,MAAK,SAAS,wBAAwB,KAAKA,MAAK,SAAS,uBAAuB;AAC7H;AAEA,SAAS,mBAAmB,QAAgC;AAC1D,QAAMA,QAAO,GAAG,OAAO,MAAM;AAAA,EAAK,OAAO,MAAM,GAAG,YAAY;AAC9D,SAAOA,MAAK,SAAS,oBAAoB,KAAKA,MAAK,SAAS,YAAY,KAAKA,MAAK,SAAS,WAAW,KAAKA,MAAK,SAAS,SAAS;AACpI;AAEO,SAAS,aAAa,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AACtH,QAAM,aAAa,iCAAiC,YAAY;AAChE,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,MAAI,CAAC,UAAU,OAAO,UAAU,GAAG;AACjC,UAAM,IAAI,MAAM,4EAA4E,MAAM,UAAU,WAAW;AAAA,EACzH;AACA,MAAI,eAAe,WAAW;AAC5B,wBAAoB,cAAc,CAAC,eAAe,GAAG,gCAAgC;AACrF,wBAAoB,cAAc,CAAC,SAAS,gBAAgB,CAAC,GAAG,wBAAwB;AACxF,WAAO;AAAA,EACT;AACA,QAAM,YAAY,gBAAgB,YAAY;AAC9C,QAAM,YAAY,UAAU,CAAC,aAAa,cAAc,YAAY,GAAG,MAAM,SAAS,CAAC;AACvF,MAAI,UAAU,WAAW,GAAG;AAC1B,UAAM,QAAQ,oBAAoB,YAAY;AAC9C,QAAI,MAAM,WAAW,GAAG;AACtB,YAAM,SAAS,gBAAgB,SAAS;AACxC,YAAM,IAAI,MAAM,6BAA6B,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,IAC7E;AAAA,EACF;AACA,QAAM,YAAY,UAAU,CAAC,aAAa,MAAM,qBAAqB,YAAY,CAAC,CAAC;AACnF,MAAI,UAAU,WAAW,KAAK,oBAAoB,YAAY,EAAE,WAAW,GAAG;AAC5E,UAAM,SAAS,gBAAgB,SAAS;AACxC,UAAM,IAAI,MAAM,6BAA6B,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,EAC7E;AACA,SAAO;AACT;AAEO,SAAS,YAAY,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AACrH,QAAM,aAAa,iCAAiC,YAAY;AAChE,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,MAAI,CAAC,UAAU,OAAO,UAAU,EAAG,QAAO;AAC1C,MAAI,eAAe,WAAW;AAC5B,UAAM,SAAS,gBAAgB,YAAY,EAAE,CAAC,QAAQ,gBAAgB,CAAC,CAAC;AACxE,QAAI,OAAO,WAAW,KAAK,CAAC,mBAAmB,MAAM,GAAG;AACtD,YAAM,SAAS,gBAAgB,MAAM;AACrC,YAAM,IAAI,MAAM,+BAA+B,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,IAC/E;AACA,WAAO;AAAA,EACT;AACA,QAAM,YAAY,gBAAgB,YAAY;AAC9C,QAAM,QAAQ,UAAU,CAAC,WAAW,qBAAqB,YAAY,CAAC,CAAC;AACvE,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,SAAS,UAAU,CAAC,WAAW,cAAc,YAAY,GAAG,MAAM,SAAS,CAAC;AAClF,QAAI,OAAO,WAAW,KAAK,CAAC,YAAY,MAAM,GAAG;AAC/C,YAAM,cAAc,YAAY,KAAK,IAAI,KAAK,gBAAgB,KAAK;AACnE,YAAM,SAAS,CAAC,gBAAgB,MAAM,GAAG,WAAW,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AAC/E,YAAM,IAAI,MAAM,2BAA2B,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,IAC3E;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AAC1H,QAAM,aAAa,iCAAiC,YAAY;AAChE,QAAM,QAAQ,YAAY,SAAS,YAAY;AAC/C,MAAI,eAAe,WAAW;AAC5B,IAAAC,QAAO,MAAM,WAAW,EAAE,OAAO,KAAK,CAAC;AACvC,WAAO;AAAA,EACT;AACA,QAAM,WAAW,gBAAgB,YAAY,EAAE,CAAC,WAAW,gBAAgB,CAAC,CAAC;AAC7E,MAAI,SAAS,WAAW,KAAK,CAAC,mBAAmB,QAAQ,GAAG;AAC1D,UAAM,SAAS,gBAAgB,QAAQ;AACvC,UAAM,IAAI,MAAM,kCAAkC,SAAS,KAAK,MAAM,KAAK,GAAG,EAAE;AAAA,EAClF;AACA,EAAAA,QAAO,MAAM,UAAU,EAAE,OAAO,KAAK,CAAC;AACtC,sBAAoB,cAAc,CAAC,eAAe,GAAG,gCAAgC;AACrF,SAAO;AACT;AAEO,SAAS,uBAAuB,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AAChI,QAAM,aAAa,iCAAiC,YAAY;AAChE,QAAM,YAAY,aAAa,SAAS,YAAY;AACpD,QAAM,QAAQ,UAAU,WAAW,UAAU,IAAI,YAAY,eAAe,SAAS,YAAY;AACjG,MAAI,eAAe,WAAW;AAC5B,wBAAoB,cAAc,CAAC,UAAU,gBAAgB,CAAC,GAAG,yBAAyB;AAC1F,WAAO;AAAA,EACT;AACA,sBAAoB,cAAc,CAAC,UAAU,qBAAqB,YAAY,CAAC,GAAG,kBAAkB;AACpG,SAAO;AACT;AAEO,SAAS,wBAAwB,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAiB;AACjI,QAAM,aAAa,iCAAiC,YAAY;AAChE,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,MAAI,UAAU,OAAO,UAAU,GAAG;AAChC,QAAI,eAAe,WAAW;AAC5B,0BAAoB,cAAc,CAAC,WAAW,gBAAgB,CAAC,GAAG,0BAA0B;AAC5F,aAAO;AAAA,IACT;AACA,wBAAoB,cAAc,CAAC,WAAW,qBAAqB,YAAY,CAAC,GAAG,mBAAmB;AAAA,EACxG;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAqB,cAAmC,aAAyD;AACzI,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,aAAa,sBAAsB,YAAY;AACrD,MAAI,eAAe,WAAW;AAC5B,UAAMC,UAAS,gBAAgB,YAAY,EAAE,CAAC,cAAc,gBAAgB,CAAC,CAAC;AAC9E,UAAMF,QAAO,GAAGE,QAAO,MAAM;AAAA,EAAKA,QAAO,MAAM,GAAG,KAAK,EAAE,YAAY;AACrE,QAAIA,QAAO,WAAW,KAAKF,MAAK,SAAS,SAAS,EAAG,QAAO;AAC5D,QAAIA,MAAK,SAAS,UAAU,KAAKA,MAAK,SAAS,WAAW,KAAKA,MAAK,SAAS,oBAAoB,EAAG,QAAO;AAC3G,WAAO;AAAA,EACT;AACA,MAAI,eAAe,UAAW,QAAO;AACrC,QAAM,SAAS,gBAAgB,YAAY,EAAE,CAAC,kBAAkB,cAAc,YAAY,CAAC,CAAC;AAC5F,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,eAAe,cAAc,QAAQ,uBAAuB,MAAM;AACxE,QAAM,gBAAgB,IAAI,OAAO,IAAI,YAAY,4BAA4B,EAAE,KAAK,OAAO,MAAM;AACjG,MAAI,cAAe,QAAO;AAC1B,QAAM,eAAe,IAAI,OAAO,IAAI,YAAY,4BAA4B,EAAE,KAAK,OAAO,MAAM;AAChG,MAAI,aAAc,QAAO;AACzB,SAAO;AACT;AAEO,SAAS,iBAAiB,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAyB;AAClI,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,QAAM,aAAa,sBAAsB,YAAY;AACrD,QAAM,cAAc,UAAU,OAAO,UAAU;AAC/C,MAAI,UAA2C,cAAc,YAAY;AACzE,MAAI,eAAe,aAAa,aAAa;AAC3C,UAAM,SAAS,gBAAgB,YAAY,EAAE,CAAC,SAAS,qBAAqB,YAAY,CAAC,CAAC;AAC1F,cAAU,OAAO,WAAW,IAAI,YAAY;AAAA,EAC9C,WAAW,eAAe,aAAa,aAAa;AAClD,UAAM,SAAS,gBAAgB,YAAY,EAAE,CAAC,aAAa,gBAAgB,CAAC,CAAC;AAC7E,cAAU,OAAO,WAAW,KAAK,OAAO,OAAO,KAAK,MAAM,WAAW,YAAY;AAAA,EACnF;AAEA,MAAI,cAAmD;AACvD,MAAI;AACJ,MAAI,gBAA0B,CAAC;AAC/B,MAAI,aAAuB,CAAC,eAAe,gCAAgC;AAC3E,MAAI,UAAoB,CAAC,YAAY,gCAAgC;AACrE,MAAI,eAAyB,CAAC,iBAAiB,sBAAsB,oBAAoB;AACzF,MAAID,YAAW,MAAM,UAAU,GAAG;AAChC,UAAM,SAAS,cAAc,MAAM,UAAU;AAC7C,kBAAc,sBAAsB,MAAM;AAC1C,eAAW,mBAAmB,MAAM;AACpC,oBAAgB,0BAA0B,8BAA8B,MAAM,CAAC;AAC/E,iBAAa,yBAAyB,MAAM;AAC5C,cAAU,sBAAsB,sBAAsB,MAAM,UAAU,CAAC;AACvE,UAAM,YAAY,OAAO,QAAQ,OAAO,SAAS,EAC9C,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAiB;AACnC,mBAAe,6BAA6B;AAAA,MAC1C;AAAA,MACA,WAAW,OAAO,OAAO,aAAa,IAAI,CAAC,eAAe,WAAW,eAAe;AAAA,IACtF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA,kBAAkB,YAAY,YAAY,eAAe,YAAY,YAAY,YAAY;AAAA,IAC7F,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kBAAkB,uBAAuB,KAAK;AAAA,IAC9C,WAAW,iBAAiB,OAAO,cAAc,WAAW;AAAA,EAC9D;AACF;AAEA,SAAS,2BAA2B,OAA6C;AAC/E,MAAI,CAACA,YAAW,MAAM,SAAS,EAAG,QAAO,CAAC;AAC1C,QAAM,QAAQI,cAAa,MAAM,WAAW,MAAM;AAClD,QAAM,mBAAmB,MAAM,MAAM,6DAA6D;AAClG,QAAM,OAAO,mBAAmB,CAAC;AACjC,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,SAAO,OAAO;AAAA,IACZ,MAAM,KAAK,KAAK,SAAS,wDAAwD,CAAC,EAAE,QAAQ,CAAC,UAAU;AACrG,YAAM,MAAM,MAAM,CAAC;AACnB,YAAM,QAAQ,MAAM,CAAC;AACrB,aAAO,QAAQ,UAAa,UAAU,SAAY,CAAC,CAAC,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,IAAI,CAAC;AAAA,IAChG,CAAC;AAAA,EACH;AACF;AAEA,SAAS,2BAA2B,OAAuB;AACzD,SAAO,MACJ,WAAW,MAAM,GAAG,EACpB,WAAW,OAAO,GAAG,EACrB,WAAW,OAAO,GAAG,EACrB,WAAW,QAAQ,IAAI;AAC5B;AAEA,SAAS,uBAAuB,OAA6C;AAC3E,MAAI,CAACJ,YAAW,MAAM,QAAQ,EAAG,QAAO,CAAC;AACzC,QAAM,OAAOI,cAAa,MAAM,UAAU,MAAM;AAChD,SAAO,OAAO;AAAA,IACZ,KAAK,MAAM,OAAO,EAAE,QAAQ,CAAC,SAAS;AACpC,YAAM,QAAQ,KAAK,MAAM,0CAA0C;AACnE,YAAM,MAAM,QAAQ,CAAC,KAAK,QAAQ,CAAC;AACnC,UAAI,CAAC,IAAK,QAAO,CAAC;AAClB,YAAM,QAAQ,2BAA2B,GAAG;AAC5C,YAAM,YAAY,MAAM,QAAQ,GAAG;AACnC,UAAI,aAAa,EAAG,QAAO,CAAC;AAC5B,aAAO,CAAC,CAAC,MAAM,MAAM,GAAG,SAAS,GAAG,MAAM,MAAM,YAAY,CAAC,CAAC,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AACF;AAEA,SAAS,uBAAuB,OAA6C;AAC3E,SAAO;AAAA,IACL,GAAG,2BAA2B,KAAK;AAAA,IACnC,GAAG,uBAAuB,KAAK;AAAA,EACjC;AACF;AAEA,SAAS,uBAAuB,OAA+B;AAC7D,QAAM,cAAc,uBAAuB,KAAK;AAChD,QAAMC,cAAa,wBAChB,OAAO,CAAC,QAAQ,YAAY,GAAG,CAAC,EAChC,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,YAAY,GAAG,CAAC,EAAE;AAC9C,SAAO,CAAC,sBAAsB,GAAIA,YAAW,SAASA,cAAa,CAAC,iEAAiE,CAAE;AACzI;AAEA,SAAS,aAAa,QAAuD;AAC3E,SAAO;AAAA,IACL,MAAM,OAAO,OAAO,CAAC,UAAU,MAAM,WAAW,MAAM,EAAE;AAAA,IACxD,MAAM,OAAO,OAAO,CAAC,UAAU,MAAM,WAAW,MAAM,EAAE;AAAA,EAC1D;AACF;AAEA,SAAS,wBAAwB,OAA4B;AAC3D,SAAO,GAAG,MAAM,OAAO,YAAY,CAAC,IAAI,MAAM,IAAI,KAAK,MAAM,OAAO;AACtE;AAEA,SAAS,oCAAoC,QAAyG;AACpJ,MAAI,OAAO,KAAK,CAAC,UAAU,MAAM,WAAW,MAAM,EAAG,QAAO;AAC5D,QAAM,YAAY,OAAO,KAAK,CAAC,UAAU,MAAM,SAAS,sBAAsB,MAAM,WAAW,MAAM;AACrG,MAAI,CAAC,UAAW,QAAO;AACvB,MAAI,UAAU,QAAQ,WAAW,QAAQ,GAAG;AAC1C,WAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,wBAAwB,UAAU;AAAA,IACpC;AAAA,EACF;AACA,MAAI,UAAU,QAAQ,WAAW,uBAAuB,GAAG;AACzD,WAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,wBAAwB,UAAU;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,qCACpB,UAAiC,CAAC,GAClC,eAAoC,CAAC,GACN;AAC/B,QAAM,UAAU,iBAAiB,SAAS,YAAY;AACtD,MAAI,QAAQ,YAAY,aAAa,CAACL,YAAW,QAAQ,UAAU,KAAK,QAAQ,eAAe,eAAe;AAC5G,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,cAAc,QAAQ,UAAU;AAC/C,QAAM,gBAAgB,OAAO,OAAO;AACpC,QAAM,QAAQ,MAAM,sBAAsB;AAAA,IACxC;AAAA,IACA,GAAI,aAAa,YAAY,EAAE,WAAW,aAAa,UAAU,IAAI,CAAC;AAAA,IACtE,WAAW,aAAa,mBAAmB;AAAA,EAC7C,CAAC;AACD,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,MACL,GAAG;AAAA,MACH,kBAAkB;AAAA,MAClB,wBAAwB,8BAA8B,aAAa;AAAA,IACrE;AAAA,EACF;AAEA,MAAI;AACF,UAAM,SAAS,MAAMM,WAAU;AAAA,MAC7B,QAAQ,OAAO;AAAA,MACf,WAAWC,qBAAoB,OAAO,MAAM;AAAA,MAC5C,GAAI,aAAa,YAAY,EAAE,WAAW,aAAa,UAAU,IAAI,CAAC;AAAA,MACtE,GAAI,aAAa,gBAAgB,EAAE,eAAe,aAAa,cAAc,IAAI,CAAC;AAAA,MAClF,GAAI,aAAa,kBAAkB,EAAE,iBAAiB,aAAa,gBAAgB,IAAI,CAAC;AAAA,IAC1F,CAAC;AACD,UAAM,SAAS,aAAa,MAAM;AAClC,UAAM,cAAc,OAAO,OAAO,CAAC,UAAU,MAAM,WAAW,IAAI,EAAE,IAAI,uBAAuB;AAC/F,UAAM,qBAAqB,oCAAoC,MAAM;AACrE,QAAI,oBAAoB;AACtB,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAI,YAAY,SAAS,EAAE,oBAAoB,YAAY,IAAI,CAAC;AAAA,MAClE;AAAA,IACF;AACA,QAAIC,mBAAkB,MAAM,KAAK,OAAO,OAAO,GAAG;AAChD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,kBAAkB;AAAA,QAClB,wBAAwB,2BAA2B,OAAO,IAAI,UAAU,OAAO,IAAI;AAAA,QACnF,oBAAoB;AAAA,MACtB;AAAA,IACF;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,kBAAkB;AAAA,MAClB,wBAAwB,4CAA4C,OAAO,MAAM;AAAA,IACnF;AAAA,EACF,SAAS,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,WAAO;AAAA,MACL,GAAG;AAAA,MACH,kBAAkB;AAAA,MAClB,wBAAwB,yBAAyB,OAAO;AAAA,MACxD,oBAAoB,CAAC,uBAAuB,OAAO,EAAE;AAAA,IACvD;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,SAAuC;AACzE,QAAM,iBACJ,QAAQ,eAAe,YACnB,gBAAgB,QAAQ,SAAS,KACjC,QAAQ,eAAe,YACrB,iBAAiB,QAAQ,QAAQ,KACjC;AACR,SAAO;AAAA,IACL,eAAe,QAAQ,UAAU;AAAA,IACjC,cAAc,QAAQ,YAAY,QAAQ,IAAI;AAAA,IAC9C,YAAY,QAAQ,OAAO;AAAA,IAC3B,cAAc,QAAQ,SAAS;AAAA,IAC/B,WAAW,QAAQ,UAAU;AAAA,IAC7B,YAAY,QAAQ,WAAW;AAAA,IAC/B,oBAAoB,QAAQ,gBAAgB,GAAG,QAAQ,yBAAyB,KAAK,QAAQ,sBAAsB,MAAM,EAAE;AAAA,IAC3H,GAAI,QAAQ,oBAAoB,SAAS,CAAC,mBAAmB,GAAG,QAAQ,mBAAmB,IAAI,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC,IAAI,CAAC;AAAA,IACtI,GAAI,QAAQ,WAAW,CAAC,UAAU,QAAQ,QAAQ,EAAE,IAAI,CAAC;AAAA,IACzD,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAG,QAAQ;AAAA,IACX,GAAI,iBAAiB,CAAC,cAAc,IAAI,CAAC;AAAA,IACzC,eAAe,QAAQ,UAAU;AAAA,IACjC,eAAe,QAAQ,UAAU;AAAA,IACjC,GAAI,QAAQ,eAAe,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,CAAC;AAAA,EACvE,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,WAAW,OAA4C;AAC9D,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,OAAO,KAAK;AAC/D,MAAI,CAAC,OAAO,UAAU,MAAM,KAAK,UAAU,GAAG;AAC5C,UAAM,IAAI,MAAM,gDAAgD,KAAK,EAAE;AAAA,EACzE;AACA,SAAO;AACT;AAEA,SAAS,SAAS,MAAc,OAAuB;AACrD,MAAI,CAACR,YAAW,IAAI,GAAG;AACrB,WAAO;AAAA,EACT;AACA,QAAM,eAAe,OAAO;AAC5B,QAAM,KAAK,SAAS,MAAM,GAAG;AAC7B,MAAI,UAAU;AACd,MAAI;AACF,UAAM,QAAQ,UAAU,EAAE;AAC1B,UAAM,cAAc,KAAK,IAAI,MAAM,MAAM,YAAY;AACrD,UAAM,WAAW,MAAM,OAAO;AAC9B,UAAM,SAAS,OAAO,MAAM,WAAW;AACvC,UAAM,YAAY,SAAS,IAAI,QAAQ,GAAG,aAAa,QAAQ;AAC/D,cAAU,OAAO,SAAS,GAAG,SAAS,EAAE,SAAS,MAAM;AACvD,UAAM,UAAU,QAAQ,MAAM,OAAO;AACrC,QAAI,QAAQ,GAAG,EAAE,MAAM,GAAI,SAAQ,IAAI;AACvC,QAAI,WAAW,KAAK,QAAQ,SAAS,GAAG;AACtC,cAAQ,MAAM;AAAA,IAChB;AACA,WAAO,QAAQ,MAAM,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK;AAAA,EAC7C,UAAE;AACA,cAAU,EAAE;AAAA,EACd;AACF;AAEO,SAAS,kBAAkB,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAAW;AACrH,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,QAAM,QAAQ,WAAW,QAAQ,KAAK;AACtC,SAAO;AAAA,IACL,MAAM,MAAM,UAAU;AAAA,IACtB,SAAS,MAAM,YAAY,KAAK;AAAA,IAChC,MAAM,MAAM,UAAU;AAAA,IACtB,SAAS,MAAM,YAAY,KAAK;AAAA,EAClC,EAAE,KAAK,IAAI;AACb;AAEA,eAAsB,yBAAyB,SAAgC,eAAoC,CAAC,GAAkB;AACpI,QAAM,QAAQ,eAAe,SAAS,YAAY;AAClD,QAAM,aAAa,sBAAsB,YAAY;AACrD,aAAW,YAAY,EAAE,IAAI,8BAA8B,eAAe,YAAY,MAAM,WAAW,MAAM,SAAS,EAAE;AACxH,aAAW,YAAY,EAAE,IAAI,sEAAsE;AACrG;AAEA,eAAsB,uBAAuB,UAAiC,CAAC,GAAG,eAAoC,CAAC,GAA0B;AAC/I,iBAAe,SAAS,YAAY;AACpC,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,MAAI,CAAE,MAAM,qBAAqB,YAAY,GAAI;AAC/C,UAAM,IAAI,MAAM,uIAAuI;AAAA,EACzJ;AACA,SAAO;AACT;AAEA,eAAsB,uBAAuB,SAAgC,eAAoC,CAAC,GAAkB;AAClI,QAAM,QAAQ,aAAa,SAAS,YAAY;AAChD,MAAI,CAAE,MAAM,qBAAqB,YAAY,GAAI;AAC/C,UAAM,IAAI,MAAM,uIAAuI;AAAA,EACzJ;AACA,aAAW,YAAY,EAAE,IAAI,4BAA4B,MAAM,KAAK,EAAE;AACxE;AAEA,eAAsB,sBAAsB,SAAgC,eAAoC,CAAC,GAAkB;AACjI,QAAM,QAAQ,YAAY,SAAS,YAAY;AAC/C,aAAW,YAAY,EAAE,IAAI,4BAA4B,MAAM,KAAK,EAAE;AACxE;AAEA,eAAsB,yBAAyB,SAAgC,eAAoC,CAAC,GAAkB;AACpI,cAAY,SAAS,YAAY;AACjC,QAAM,uBAAuB,cAAc,EAAE,WAAW,IAAM,CAAC;AAC/D,MAAI,QAAQ,aAAa,SAAS,YAAY;AAC9C,MAAI,SAAS,MAAM,qBAAqB,cAAc,EAAE,WAAW,IAAI,CAAC;AACxE,MAAI,CAAC,QAAQ;AACX,YAAQ,aAAa,SAAS,YAAY;AAC1C,aAAS,MAAM,qBAAqB,YAAY;AAAA,EAClD;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,yIAAyI;AAAA,EAC3J;AACA,aAAW,YAAY,EAAE,IAAI,8BAA8B,MAAM,KAAK,EAAE;AAC1E;AAEA,eAAsB,2BAA2B,SAAgC,eAAoC,CAAC,GAAkB;AACtI,QAAM,QAAQ,iBAAiB,SAAS,YAAY;AACpD,QAAM,aAAa,sBAAsB,YAAY;AACrD,aAAW,YAAY,EAAE,IAAI,gCAAgC,eAAe,YAAY,MAAM,WAAW,MAAM,SAAS,EAAE;AAC5H;AAEA,eAAsB,wBAAwB,SAAgC,eAAoC,CAAC,GAAkB;AACnI,QAAM,UAAU,MAAM,qCAAqC,SAAS,YAAY;AAChF,aAAW,YAAY,EAAE,IAAI,oBAAoB,OAAO,CAAC;AACzD,MAAI,QAAQ,eAAe,eAAe;AACxC,YAAQ,WAAW;AAAA,EACrB;AACF;AAEA,eAAsB,sBAAsB,SAAgC,eAAoC,CAAC,GAAkB;AACjI,aAAW,YAAY,EAAE,IAAI,kBAAkB,SAAS,YAAY,CAAC;AACvE;AAEA,eAAsB,iCAAiC,SAAgC,eAAoC,CAAC,GAAkB;AAC5I,QAAM,QAAQ,uBAAuB,SAAS,YAAY;AAC1D,aAAW,YAAY,EAAE,IAAI,sCAAsC,MAAM,KAAK,EAAE;AAClF;AAEA,eAAsB,kCAAkC,SAAgC,eAAoC,CAAC,GAAkB;AAC7I,QAAM,QAAQ,wBAAwB,SAAS,YAAY;AAC3D,aAAW,YAAY,EAAE,IAAI,uCAAuC,MAAM,KAAK,EAAE;AACnF;AAEA,eAAsB,qBAAqB,SAA+C;AACxF,MAAI,QAAQ,QAAQ,QAAQ,SAAS,cAAc;AACjD,UAAM,IAAI,MAAM,iCAAiC,QAAQ,IAAI,EAAE;AAAA,EACjE;AACA,QAAM,gBAAgB,EAAE,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC,GAAI,YAAY,KAAK,CAAC;AACnG;;;ACliCA,SAAS,cAAAS,mBAAkB;;;ACA3B,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAS,QAAAC,aAAY;AACrB,SAAS,qCAAqC;AAQ9C,SAAS,eAAuB;AAC9B,SAAO,YAAY,EAAE,EAAE,SAAS,KAAK;AACvC;AAEO,SAAS,kBAAkB,OAA0B,MAAuB,QAAQ,KAAuB;AAChH,QAAM,eAAe,aAAa,OAAO,MAAM,WAAW;AAC1D,QAAM,SAAS,8BAA8B,YAAY;AACzD,QAAM,iBAAiB,MAAM,kBAAkB,sBAAsB,GAAG;AACxE,QAAM,eAAeC,MAAK,gBAAgB,WAAW;AACrD,QAAM,eAAeA,MAAK,gBAAgB,YAAY;AACtD,QAAM,qBAAqB;AAAA,IACzB;AAAA,MACE,UAAU,OAAO;AAAA,MACjB,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb;AAAA,MACA,iBAAiB,MAAM;AAAA,MACvB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,IACA,GAAI,MAAM,SACN;AAAA,MACE;AAAA,QACE,UAAU;AAAA,QACV,OAAO,MAAM,OAAO;AAAA,QACpB,MAAM,MAAM,OAAO;AAAA,QACnB;AAAA,QACA,iBAAiB,MAAM;AAAA,QACvB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA,QACA,cAAc;AAAA,MAChB;AAAA,IACF,IACA,CAAC;AAAA,EACP,EAAE,OAAO,CAAC,SAAS,OAAO,aAAa;AACrC,WAAO,SAAS,UAAU,CAAC,cAAc,UAAU,aAAa,QAAQ,YAAY,UAAU,UAAU,QAAQ,SAAS,UAAU,SAAS,QAAQ,IAAI,MAAM;AAAA,EAChK,CAAC;AAED,QAAM,kBAAkB;AAAA,IACtB,GAAI,MAAM,SAAS,MAAM,MAAM,kBAAkB,oBAC7C;AAAA,MACE;AAAA,QACE,UAAU;AAAA,QACV,WAAW,MAAM,MAAM;AAAA,QACvB,gBAAgB,MAAM,MAAM;AAAA,QAC5B,cAAc,OAAO;AAAA,QACrB,OAAO,OAAO;AAAA,QACd,MAAM,OAAO;AAAA,MACf;AAAA,IACF,IACA,CAAC;AAAA,EACP;AAEA,SAAO;AAAA,IACL,eAAe;AAAA,IACf,aAAa;AAAA,MACX,UAAU,MAAM;AAAA,MAChB,WAAW;AAAA,QACT,WAAW,CAAC,MAAM,QAAQ;AAAA,QAC1B,UAAU,MAAM;AAAA,QAChB,aAAa;AAAA,QACb,GAAI,MAAM,OACN;AAAA,UACE,iBAAiB,MAAM,KAAK;AAAA,UAC5B,YAAY,MAAM,KAAK;AAAA,UACvB,eAAe,MAAM,KAAK;AAAA,QAC5B,IACA,CAAC;AAAA,QACL,GAAI,MAAM,QACN;AAAA,UACE,eAAe,MAAM,MAAM;AAAA,UAC3B,WAAW,MAAM,MAAM;AAAA,UACvB,aAAa,MAAM,MAAM;AAAA,UACzB,gBAAgB,MAAM,MAAM;AAAA,UAC5B,GAAI,MAAM,MAAM,OAAO,EAAE,WAAW,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,QAC5D,IACA,CAAC;AAAA,QACL,GAAI,MAAM,SACN;AAAA,UACE,aAAa,MAAM,OAAO;AAAA,UAC1B,YAAY,MAAM,OAAO;AAAA,UACzB,YAAY,MAAM,OAAO;AAAA,UACzB,6BAA6B,MAAM,OAAO;AAAA,QAC5C,IACA,CAAC;AAAA,MACP;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,WAAW;AAAA,MACX;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,cAAc,aAAa;AAAA,MAC3B,cAAc;AAAA,MACd,GAAI,MAAM,SACN;AAAA,QACE,QAAQ;AAAA,UACN,GAAI,MAAM,OAAO,UAAU,EAAE,SAAS,MAAM,OAAO,QAAQ,IAAI,CAAC;AAAA,UAChE,GAAI,MAAM,OAAO,UAAU,EAAE,SAAS,MAAM,OAAO,QAAQ,IAAI,CAAC;AAAA,UAChE,GAAI,MAAM,OAAO,kBAAkB,EAAE,iBAAiB,MAAM,OAAO,gBAAgB,IAAI,CAAC;AAAA,QAC1F;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,MAAM,sBACN;AAAA,QACE,qBAAqB;AAAA,UACnB,GAAI,MAAM,oBAAoB,UAAU,EAAE,SAAS,MAAM,oBAAoB,QAAQ,IAAI,CAAC;AAAA,UAC1F,GAAI,MAAM,oBAAoB,kBAAkB,EAAE,iBAAiB,MAAM,oBAAoB,gBAAgB,IAAI,CAAC;AAAA,QACpH;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,gBAAgB,SAAS,IAAI,EAAE,gBAAgB,IAAI,CAAC;AAAA,MACxD,GAAI,MAAM,SAAS,EAAE,aAAa,MAAM,OAAO,MAAM,IAAI,CAAC;AAAA,MAC1D,GAAI,MAAM,SAAS,EAAE,0BAA0B,KAAK,IAAI,CAAC;AAAA,MACzD,GAAI,MAAM,SAAS,EAAE,4BAA4B,MAAM,OAAO,sBAAsB,IAAI,CAAC;AAAA,MACzF,gBAAgB;AAAA,MAChB,qBAAqB;AAAA,IACvB;AAAA,IACA,WAAW;AAAA,MACT,GAAI,MAAM,OACN;AAAA,QACE,MAAM;AAAA,UACJ,OAAO,MAAM,KAAK;AAAA,UAClB,WAAW,MAAM,KAAK;AAAA,UACtB,QAAQ,MAAM,KAAK;AAAA,UACnB,uBAAuB,MAAM,KAAK,kBAAkB;AAAA,UACpD,GAAI,MAAM,KAAK,YAAY,EAAE,WAAW,MAAM,KAAK,UAAU,IAAI,CAAC;AAAA,QACpE;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,MAAM,QACN;AAAA,QACE,OAAO;AAAA,UACL,MAAM,MAAM,MAAM;AAAA,UAClB,GAAI,MAAM,MAAM,WAAW,EAAE,UAAU,MAAM,MAAM,SAAS,IAAI,CAAC;AAAA,UACjE,GAAI,MAAM,MAAM,gBAAgB,EAAE,eAAe,MAAM,MAAM,cAAc,IAAI,CAAC;AAAA,UAChF,UAAU,MAAM,MAAM;AAAA,UACtB,QAAQ,MAAM,MAAM;AAAA,UACpB,WAAW,MAAM,MAAM;AAAA,UACvB,uBAAuB,MAAM,MAAM,kBAAkB;AAAA,UACrD,GAAI,MAAM,MAAM,QAAQ,EAAE,OAAO,MAAM,MAAM,MAAM,IAAI,CAAC;AAAA,UACxD,GAAI,MAAM,MAAM,OAAO,EAAE,MAAM,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,QACvD;AAAA,MACF,IACA,CAAC;AAAA,MACL,GAAI,MAAM,SACN;AAAA,QACE,QAAQ;AAAA,UACN,eAAe,MAAM,OAAO;AAAA,UAC5B,OAAO,MAAM,OAAO;AAAA,UACpB,MAAM,MAAM,OAAO;AAAA,UACnB,aAAa,MAAM,OAAO;AAAA,UAC1B,MAAM,MAAM,OAAO;AAAA,QACrB;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA,EACF;AACF;;;AClLA,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,+BAAkF;;;ACDpF,IAAM,mBAIR;AAAA,EACH,EAAE,IAAI,MAAM,OAAO,WAAW,MAAM,UAAU;AAAA,EAC9C,EAAE,IAAI,SAAS,OAAO,4BAAQ,MAAM,UAAU;AAChD;AAEO,SAAS,iBAAiB,OAA4B;AAC3D,MAAI,UAAU,QAAQ,UAAU,SAAS;AACvC,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,+BAA+B;AACjD;;;ACLA,SAAS,QAAQ,OAAuB;AACtC,MAAI,MAAM,UAAU,GAAI,QAAO;AAC/B,SAAO,GAAG,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC;AAClD;AAEA,SAAS,YAAY,QAA4B;AAC/C,SAAO,WAAW,WAAW,WAAW;AAC1C;AAEA,SAAS,YAAY,QAAwC,UAA+B;AAC1F,MAAI,aAAa,SAAS;AACxB,WAAO,WAAW,mBAAmB,yBAAe;AAAA,EACtD;AACA,SAAO,WAAW,mBAAmB,mBAAmB;AAC1D;AAEO,SAAS,+BAA+B,OAAsC,UAA+B;AAClH,QAAM,QAAQ;AAAA,IACZ,YAAY,MAAM,MAAM;AAAA,IACxB,GAAG,aAAa,UAAU,oBAAU,QAAQ,IAAI,QAAQ,MAAM,KAAK,CAAC;AAAA,IACpE,MAAM,YAAY,GAAG,aAAa,UAAU,+BAAgB,aAAa,IAAI,QAAQ,MAAM,SAAS,CAAC,KAAK;AAAA,IAC1G,MAAM,SACF,aAAa,UACX,iBAAO,YAAY,MAAM,QAAQ,QAAQ,CAAC,KAC1C,QAAQ,YAAY,MAAM,QAAQ,QAAQ,CAAC,KAC7C;AAAA,EACN;AACA,SAAO,MAAM,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC,EAAE,KAAK,KAAK;AACzE;AAEO,SAAS,+BAA+B,aAAmC,UAA+B;AAC/G,SAAO,+BAA+B,aAAa,QAAQ;AAC7D;;;AC3CA,SAAS,cAAAC,aAAY,gBAAAC,qBAAoB;AACzC,SAAS,QAAAC,aAAY;AACrB,SAAS,KAAAC,UAAS;AAIlB,IAAM,6BAA6BC,GAChC,OAAO;AAAA,EACN,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,QAAQA,GAAE,KAAK,CAAC,QAAQ,QAAQ,CAAC;AAAA,EACjC,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS;AACxC,CAAC,EACA,YAAY;AAWR,SAAS,kCAAkC,QAA4D;AAC5G,QAAM,OAAO,OAAO,UAAU;AAC9B,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO;AAAA,IACL,OAAO,KAAK;AAAA,IACZ,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK;AAAA,IACb,GAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;AAAA,IACtD,QAAQ;AAAA,EACV;AACF;AAEO,SAAS,qBAAqB,aAA6B;AAChE,SAAOC,MAAK,aAAa,YAAY,QAAQ,iBAAiB;AAChE;AAEA,SAAS,cAAc,MAAuB;AAC5C,MAAI;AACF,WAAO,KAAK,MAAMC,cAAa,MAAM,MAAM,CAAC;AAAA,EAC9C,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,wBAAwB,IAAI,qBAAqB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,EAC3H;AACF;AAEO,SAAS,0BAA0B,aAAuD;AAC/F,QAAM,OAAO,qBAAqB,WAAW;AAC7C,MAAI,CAACC,YAAW,IAAI,EAAG,QAAO;AAC9B,0BAAwB,IAAI;AAE5B,QAAM,SAAS,2BAA2B,UAAU,cAAc,IAAI,CAAC;AACvE,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI,MAAM,wBAAwB,IAAI,gBAAgB,OAAO,MAAM,OAAO,EAAE;AAAA,EACpF;AAEA,SAAO;AAAA,IACL,OAAO,OAAO,KAAK;AAAA,IACnB,WAAW,OAAO,KAAK;AAAA,IACvB,QAAQ,OAAO,KAAK;AAAA,IACpB,GAAI,OAAO,KAAK,YAAY,EAAE,WAAW,OAAO,KAAK,UAAU,IAAI,CAAC;AAAA,IACpE,QAAQ;AAAA,IACR;AAAA,EACF;AACF;;;ACjCA,IAAM,WAA4D;AAAA,EAChE,IAAI;AAAA,IACF,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,eAAe;AAAA,IACf,WAAW;AAAA,IACX,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,eAAe;AAAA,IACf,eAAe;AAAA,IACf,WAAW;AAAA,IACX,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,EAAE,UAAuB,KAAyB;AAChE,SAAO,SAAS,QAAQ,EAAE,GAAG;AAC/B;AAEO,SAAS,eAAe,UAAuB,QAAiC;AACrF,MAAI,aAAa,SAAS;AACxB,QAAI,WAAW,QAAS,QAAO;AAC/B,WAAO,WAAW,SAAS,+IAA4B;AAAA,EACzD;AACA,MAAI,WAAW,QAAS,QAAO;AAC/B,SAAO,WAAW,SAAS,uDAAuD;AACpF;AAEO,SAAS,cAAc,UAAuB,QAAiC;AACpF,MAAI,aAAa,SAAS;AACxB,QAAI,WAAW,QAAS,QAAO;AAC/B,WAAO,WAAW,SAAS,8IAA0C;AAAA,EACvE;AACA,MAAI,WAAW,QAAS,QAAO;AAC/B,SAAO,WAAW,SAAS,kEAAkE;AAC/F;AAEO,SAAS,eAAe,UAAuB,MAA8B;AAClF,MAAI,aAAa,SAAS;AACxB,WAAO,SAAS,gBAAgB,qDAAuB;AAAA,EACzD;AACA,SAAO,SAAS,gBAAgB,oCAAoC;AACtE;AAEO,SAAS,cAAc,UAAuB,MAA8B;AACjF,MAAI,aAAa,SAAS;AACxB,WAAO,SAAS,gBAAgB,iFAAqB;AAAA,EACvD;AACA,SAAO,SAAS,gBAAgB,0CAA0C;AAC5E;AAEO,SAAS,mBAAmB,UAAuB,QAAuB,WAA6B,QAAgB;AAC5H,MAAI,aAAa,SAAS;AACxB,QAAI,WAAW,kBAAmB,QAAO;AACzC,WAAO,aAAa,UAAU,8DAAsB;AAAA,EACtD;AACA,MAAI,WAAW,kBAAmB,QAAO;AACzC,SAAO,aAAa,UAAU,mCAAmC;AACnE;AAEO,SAAS,kBAAkB,UAAuB,QAAuB,WAA6B,QAAgB;AAC3H,MAAI,aAAa,SAAS;AACxB,QAAI,WAAW,kBAAmB,QAAO;AACzC,WAAO,aAAa,UAAU,4DAAoB;AAAA,EACpD;AACA,MAAI,WAAW,kBAAmB,QAAO;AACzC,SAAO,aAAa,UAAU,8DAA8D;AAC9F;;;ACpJA,SAAS,cAAAC,mBAAkB;AAK3B,SAAS,qBAAqB,QAAqD;AACjF,QAAM,YAAY,OAAO,aAAa;AACtC,MAAI,WAAW,cAAe,QAAO,UAAU;AAC/C,MAAI,OAAO,UAAU,MAAM,0BAA0B,MAAO,QAAO;AACnE,MAAI,OAAO,UAAU,KAAM,QAAO;AAClC,MAAI,OAAO,UAAU,OAAO,0BAA0B,MAAO,QAAO;AACpE,MAAI,OAAO,UAAU,MAAO,QAAO;AACnC,SAAO;AACT;AAEO,SAAS,wBAAwB,QAAyC;AAC/E,QAAM,aAAa,OAAO,OAAO,aAAa,CAAC;AAC/C,QAAM,OAAO,OAAO,UAAU;AAC9B,QAAM,QAAQ,OAAO,UAAU;AAC/B,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,SAAS,OAAO,OAAO;AAC7B,QAAM,sBAAsB,OAAO,OAAO;AAC1C,QAAM,YAAY,OAAO,aAAa;AACtC,QAAM,uBAAuB,kCAAkC,MAAM;AACrE,QAAM,gBAAgB,qBAAqB,MAAM;AAEjD,SAAO;AAAA,IACL,GAAI,OAAO,aAAa,WAAW,EAAE,UAAU,OAAO,YAAY,SAAS,IAAI,CAAC;AAAA,IAChF,GAAI,WAAW,YAAY,CAAC,IAAI,EAAE,UAAU,UAAU,UAAU,CAAC,EAAE,IAAI,OAAO,EAAE,UAAU,OAAO,IAAI,QAAQ,EAAE,UAAU,QAAQ,IAAI,SAAS,EAAE,UAAU,SAAS,IAAI,CAAC;AAAA,IACxK,GAAI,YAAY,eAAe,EAAE,aAAa,WAAW,aAAa,IAAI,CAAC;AAAA,IAC3E,GAAI,YAAY,kBAAkB,EAAE,UAAU,WAAW,gBAAgB,IAAI,CAAC;AAAA,IAC9E,GAAI,QAAQ,UAAU,EAAE,eAAe,OAAO,QAAQ,IAAI,CAAC;AAAA,IAC3D,GAAI,QAAQ,UAAU,EAAE,eAAe,OAAO,QAAQ,IAAI,CAAC;AAAA,IAC3D,GAAI,QAAQ,kBAAkB,EAAE,uBAAuB,OAAO,gBAAgB,IAAI,CAAC;AAAA,IACnF,GAAI,qBAAqB,UAAU,EAAE,cAAc,oBAAoB,QAAQ,IAAI,CAAC;AAAA,IACpF,GAAI,qBAAqB,kBAAkB,EAAE,sBAAsB,oBAAoB,gBAAgB,IAAI,CAAC;AAAA,IAC5G,GAAI,WAAW,kBAAkB,EAAE,iBAAiB,UAAU,gBAAgB,IAAI,CAAC;AAAA,IACnF,GAAI,WAAW,aAAa,EAAE,YAAY,UAAU,WAAW,IAAI,MAAM,SAAS,EAAE,YAAY,KAAK,OAAO,IAAI,CAAC;AAAA,IACjH,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,IACzC,GAAI,WAAW,YAAY,EAAE,WAAW,UAAU,UAAU,IAAI,QAAQ,EAAE,WAAW,MAAM,QAAQ,aAAa,IAAI,CAAC;AAAA,IACrH,GAAI,WAAW,cAAc,EAAE,aAAa,UAAU,YAAY,IAAI,OAAO,SAAS,EAAE,aAAa,MAAM,OAAO,IAAI,CAAC;AAAA,IACvH,GAAI,WAAW,iBAAiB,EAAE,gBAAgB,UAAU,eAAe,IAAI,OAAO,YAAY,EAAE,gBAAgB,MAAM,UAAU,IAAI,CAAC;AAAA,IACzI,GAAI,WAAW,YAAY,EAAE,WAAW,UAAU,UAAU,IAAI,OAAO,OAAO,EAAE,WAAW,MAAM,KAAK,IAAI,CAAC;AAAA,IAC3G,GAAI,WAAW,cAAc,EAAE,aAAa,UAAU,YAAY,IAAI,QAAQ,QAAQ,EAAE,aAAa,OAAO,MAAM,IAAI,CAAC;AAAA,IACvH,GAAI,WAAW,aAAa,EAAE,YAAY,UAAU,WAAW,IAAI,QAAQ,OAAO,EAAE,YAAY,OAAO,KAAK,IAAI,CAAC;AAAA,IACjH,GAAI,WAAW,aAAa,EAAE,YAAY,UAAU,WAAW,IAAI,QAAQ,OAAO,EAAE,YAAY,OAAO,KAAK,IAAI,CAAC;AAAA,IACjH,GAAI,QAAQ,gBAAgB,EAAE,qBAAqB,OAAO,cAAc,IAAI,CAAC;AAAA,IAC7E,GAAI,QAAQ,cAAc,EAAE,mBAAmB,OAAO,YAAY,IAAI,CAAC;AAAA,IACvE,GAAI,WAAW,gCAAgC,SAC3C,EAAE,6BAA6B,UAAU,4BAA4B,IACrE,OAAO,OAAO,+BAA+B,SAC3C,EAAE,6BAA6B,OAAO,OAAO,2BAA2B,IACxE,CAAC;AAAA,IACP,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;AAAA,EACzD;AACF;AAEO,SAAS,kBAAkB,OAAO,kBAAkB,GAAkB;AAC3E,MAAI,CAACC,YAAW,IAAI,GAAG;AACrB,WAAO,CAAC;AAAA,EACV;AACA,SAAO,wBAAwB,cAAc,IAAI,CAAC;AACpD;;;ACzDO,IAAM,uBAAuB;AAAA,EAClC,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,wBAAwB;AAAA,EACxB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,qBAAqB;AACvB;AAEA,SAAS,WAAW,UAAsB,UAAiC;AACzE,MAAI,aAAa,SAAS;AACxB,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO,CAAC,qEAAmB,wFAAkB,0FAAoB;AAAA,MACnE,KAAK;AACH,eAAO,CAAC,oDAAsB,8EAA+D,+EAAsD,kFAA+C,8GAAqF,8DAA+C,iBAAiB,oBAAoB,uFAAgC;AAAA,MAC7Y,KAAK;AACH,eAAO,CAAC,kCAAwB,wIAA8C,yDAAgC,4DAAyB,yEAAiC;AAAA,MAC1K,KAAK;AACH,eAAO,CAAC;AAAA,MACV,KAAK;AACH,eAAO,CAAC;AAAA,IACZ;AAAA,EACF;AAEA,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO,CAAC,wCAAwC,4CAA4C,6CAA6C;AAAA,IAC3I,KAAK;AACH,aAAO,CAAC,gDAAgD,sEAAsE,kEAAkE,wDAAwD,0FAA0F,0DAA0D,iBAAiB,oBAAoB,2DAA2D;AAAA,IAC9e,KAAK;AACH,aAAO,CAAC,gCAAgC,uEAAuE,wCAAwC,oCAAoC,yDAAyD;AAAA,IACtP,KAAK;AACH,aAAO,CAAC;AAAA,IACV,KAAK;AACH,aAAO,CAAC;AAAA,EACZ;AACF;AAEA,SAAS,mBAAmB,UAAsB,UAAiC;AACjF,MAAI,aAAa,SAAS;AACxB,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO;AAAA,UACL,wCAAe,qBAAqB,WAAW;AAAA,UAC/C,+CAAY,qBAAqB,aAAa;AAAA,QAChD;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,iCAAkB,qBAAqB,SAAS;AAAA,UAChD,yCAAqB,qBAAqB,mBAAmB;AAAA,QAC/D;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,oCAAqB,qBAAqB,eAAe;AAAA,UACzD,gDAA4B,qBAAqB,iBAAiB;AAAA,QACpE;AAAA,MACF,KAAK;AACH,eAAO,CAAC;AAAA,MACV,KAAK;AACH,eAAO,CAAC;AAAA,IACZ;AAAA,EACF;AAEA,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO;AAAA,QACL,2BAA2B,qBAAqB,WAAW;AAAA,QAC3D,6BAA6B,qBAAqB,aAAa;AAAA,MACjE;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,uBAAuB,qBAAqB,SAAS;AAAA,QACrD,qBAAqB,qBAAqB,mBAAmB;AAAA,MAC/D;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,sBAAsB,qBAAqB,eAAe;AAAA,QAC1D,4BAA4B,qBAAqB,iBAAiB;AAAA,MACpE;AAAA,IACF,KAAK;AACH,aAAO,CAAC;AAAA,IACV,KAAK;AACH,aAAO,CAAC;AAAA,EACZ;AACF;AAEO,SAAS,yBAAyB,UAAsB,UAA2C;AACxG,QAAM,MAAM,sBAAsB,UAAU,QAAQ;AACpD,MAAI,CAAC,IAAK,QAAO;AAEjB,QAAM,aAAa,aAAa,QAAQ;AACxC,QAAM,QAAQ,WAAW,UAAU,QAAQ;AAC3C,QAAM,gBAAgB,mBAAmB,UAAU,QAAQ;AAC3D,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,MACL,GAAG,WAAW,KAAK;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,cAAc,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAAA,MAC1C;AAAA,MACA;AAAA,MACA,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAAA,IACpC,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,SAAO;AAAA,IACL,GAAG,WAAW,KAAK;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,cAAc,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAAA,IAC1C;AAAA,IACA;AAAA,IACA,GAAG,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAAA,EACpC,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,+BAA+B,UAAuB,QAA4B;AAChG,QAAM,aAAa,WAAW,WAAW,qBAAqB,gBAAgB,qBAAqB;AACnG,QAAM,gBAAgB,WAAW,WAAW,qBAAqB,sBAAsB,qBAAqB;AAC5G,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,MACL;AAAA,MACA,qCAAY,UAAU;AAAA,MACtB;AAAA,MACA;AAAA,MACA,iDAAc,aAAa;AAAA,MAC3B;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,SAAO;AAAA,IACL;AAAA,IACA,wBAAwB,UAAU;AAAA,IAClC;AAAA,IACA;AAAA,IACA,qBAAqB,aAAa;AAAA,IAClC;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,0BAA0B,UAAuB,MAA8B;AAC7F,MAAI,aAAa,SAAS;AACxB,UAAMC,gBACJ,SAAS,gBACL;AAAA,MACE,2CAAuB,qBAAqB,mBAAmB;AAAA,MAC/D;AAAA,MACA;AAAA,IACF,IACA;AAAA,MACE,8CAA0B,qBAAqB,sBAAsB;AAAA,MACrE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACN,WAAO;AAAA,MACL;AAAA,MACA,mCAAoB,qBAAqB,SAAS;AAAA,MAClD,GAAGA;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,QAAM,eACJ,SAAS,gBACL;AAAA,IACE,uBAAuB,qBAAqB,mBAAmB;AAAA,IAC/D;AAAA,IACA;AAAA,EACF,IACA;AAAA,IACE,0BAA0B,qBAAqB,sBAAsB;AAAA,IACrE;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACN,SAAO;AAAA,IACL;AAAA,IACA,yBAAyB,qBAAqB,SAAS;AAAA,IACvD,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEO,SAAS,sBAAsB,UAAuB,OAAmD;AAC9G,MAAI,aAAa,SAAS;AACxB,UAAMC,eACJ,MAAM,wBACF,CAAC,4BAA4B,mCAAmC,4BAA4B,IAC5F,CAAC,4BAA4B,mCAAmC,oJAA+D;AACrI,WAAO;AAAA,MACL;AAAA,MACA,+BAAW,qBAAqB,eAAe;AAAA,MAC/C,+BAAW,qBAAqB,eAAe;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,GAAGA;AAAA,MACH;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,QAAM,cACJ,MAAM,wBACF,CAAC,4BAA4B,mCAAmC,4BAA4B,IAC5F,CAAC,4BAA4B,mCAAmC,yGAAyG;AAC/K,SAAO;AAAA,IACL;AAAA,IACA,wBAAwB,qBAAqB,eAAe;AAAA,IAC5D,qBAAqB,qBAAqB,eAAe;AAAA,IACzD;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;;;ACtOA,SAASC,OAAM,OAAgB,UAA+B;AAC5D,SAAO,aAAa,UAAW,QAAQ,WAAM,WAAO,QAAQ,QAAQ;AACtE;AAEA,SAAS,qBAAqB,QAAyB,UAA+B;AACpF,MAAI,aAAa,SAAS;AACxB,QAAI,WAAW,QAAS,QAAO;AAC/B,WAAO,WAAW,SAAS,iEAAe;AAAA,EAC5C;AACA,MAAI,WAAW,QAAS,QAAO;AAC/B,SAAO,WAAW,SAAS,8BAA8B;AAC3D;AAEO,SAAS,kBAAkB,OAA0B,YAA4B;AACtF,QAAM,WAAW,aAAa,MAAM,QAAQ;AAC5C,QAAM,cACJ,MAAM,aAAa,UACf;AAAA,IACE;AAAA,IACA,6BAAS,UAAU;AAAA,IACnB,iBAAO,SAAS,KAAK;AAAA,IACrB,6BAAS,cAAc,MAAM,QAAQ,CAAC;AAAA,IACtC,6BAAS,MAAM,WAAW;AAAA,EAC5B,IACA;AAAA,IACE;AAAA,IACA,WAAW,UAAU;AAAA,IACrB,aAAa,SAAS,KAAK;AAAA,IAC3B,iBAAiB,cAAc,MAAM,QAAQ,CAAC;AAAA,IAC9C,iBAAiB,MAAM,WAAW;AAAA,EACpC;AAEN,QAAM,gBAA0B,CAAC;AACjC,QAAM,kBAAkB,6BAA6B;AAAA,IACnD,WAAW,CAAC,MAAM,QAAQ;AAAA,IAC1B,WAAW,CAAC,MAAM,QAAQ;AAAA,EAC5B,CAAC;AACD,MAAI,MAAM,MAAM;AACd,UAAM,oBAAoB;AAAA,MACxB;AAAA,QACE,GAAG,MAAM;AAAA,QACT,GAAI,MAAM,KAAK,yBAAyB,EAAE,QAAQ,MAAM,KAAK,uBAAuB,IAAI,CAAC;AAAA,MAC3F;AAAA,MACA,MAAM;AAAA,IACR;AACA,kBAAc;AAAA,MACZ,GAAI,MAAM,aAAa,UACnB;AAAA,QACE,kCAAc,qBAAqB,MAAM,KAAK,aAAa,MAAM,QAAQ,CAAC;AAAA,QAC1E,yCAAW,iBAAiB;AAAA,QAC5B,kCAAc,MAAM,KAAK,MAAM;AAAA,QAC/B,qDAAaA,OAAM,MAAM,KAAK,kBAAkB,mBAAmB,MAAM,QAAQ,CAAC;AAAA,MACpF,IACA;AAAA,QACE,eAAe,qBAAqB,MAAM,KAAK,aAAa,MAAM,QAAQ,CAAC;AAAA,QAC3E,mBAAmB,iBAAiB;AAAA,QACpC,yBAAyB,MAAM,KAAK,MAAM;AAAA,QAC1C,4BAA4BA,OAAM,MAAM,KAAK,kBAAkB,mBAAmB,MAAM,QAAQ,CAAC;AAAA,MACnG;AAAA,IACN;AAAA,EACF;AACA,MAAI,MAAM,OAAO;AACf,UAAM,uBACJ,MAAM,MAAM,SAAS,gBACjB,MAAM,aAAa,UACjB,CAAC,4DAA8B,0FAAwC,IACvE,CAAC,uCAAuC,wDAAwD,IAClG,MAAM,aAAa,UACjB,CAAC,2DAA6B,sCAAsC,MAAM,MAAM,QAAQ,yBAAyB,eAAe,IAChI,CAAC,uCAAuC,sCAAsC,MAAM,MAAM,QAAQ,yBAAyB,eAAe;AAClJ,kBAAc;AAAA,MACZ,GAAI,MAAM,aAAa,UACnB;AAAA,QACE,GAAG;AAAA,QACH,kBAAkB,MAAM,MAAM,MAAM;AAAA,QACpC,qBAAqB,MAAM,MAAM,SAAS;AAAA,QAC1C,qDAAaA,OAAM,MAAM,MAAM,kBAAkB,mBAAmB,MAAM,QAAQ,CAAC;AAAA,MACrF,IACA;AAAA,QACE,GAAG;AAAA,QACH,kBAAkB,MAAM,MAAM,MAAM;AAAA,QACpC,qBAAqB,MAAM,MAAM,SAAS;AAAA,QAC1C,4BAA4BA,OAAM,MAAM,MAAM,kBAAkB,mBAAmB,MAAM,QAAQ,CAAC;AAAA,MACpG;AAAA,IACN;AAAA,EACF;AACA,MAAI,MAAM,QAAQ;AAChB,UAAM,cAAc,MAAM,OAAO;AACjC,kBAAc;AAAA,MACZ,GAAI,MAAM,aAAa,UACnB;AAAA,QACE,wBAAc,MAAM,OAAO,KAAK,IAAI,MAAM,OAAO,IAAI;AAAA,QACrD,gCAAsB,sBAAsB,EAAE,MAAM,MAAM,OAAO,MAAM,YAAY,CAAC,CAAC;AAAA,QACrF,uBAAuB,kCAAkC,WAAW,CAAC;AAAA,QACrE;AAAA,QACA;AAAA,QACA,sDAAmBA,OAAM,MAAM,OAAO,uBAAuB,MAAM,QAAQ,CAAC;AAAA,MAC9E,IACA;AAAA,QACE,sBAAsB,MAAM,OAAO,KAAK,IAAI,MAAM,OAAO,IAAI;AAAA,QAC7D,yBAAyB,sBAAsB,EAAE,MAAM,MAAM,OAAO,MAAM,YAAY,CAAC,CAAC;AAAA,QACxF,uBAAuB,kCAAkC,WAAW,CAAC;AAAA,QACrE;AAAA,QACA;AAAA,QACA,2BAA2BA,OAAM,MAAM,OAAO,uBAAuB,MAAM,QAAQ,CAAC;AAAA,MACtF;AAAA,IACN;AAAA,EACF;AACA,QAAM,sBACJ,MAAM,wBAAwB,MAAM,oBAAoB,WAAW,MAAM,oBAAoB,mBACzF,MAAM,aAAa,UACjB;AAAA,IACE,MAAM,oBAAoB,UAAU,+BAAqB,MAAM,oBAAoB,OAAO,KAAK;AAAA,IAC/F,MAAM,oBAAoB,kBAAkB,4CAAwB,MAAM,oBAAoB,eAAe,KAAK;AAAA,EACpH,IACA;AAAA,IACE,MAAM,oBAAoB,UAAU,0BAA0B,MAAM,oBAAoB,OAAO,KAAK;AAAA,IACpG,MAAM,oBAAoB,kBAAkB,mCAAmC,MAAM,oBAAoB,eAAe,KAAK;AAAA,EAC/H,IACF,CAAC;AACP,QAAM,QAAQ,CAAC,GAAG,aAAa,GAAG,iBAAiB,GAAG,eAAe,GAAG,oBAAoB,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC,CAAC;AAC3I,SAAO,MAAM,KAAK,IAAI;AACxB;AAEO,SAAS,oBAAoB,QAA0B,YAA4B;AACxF,QAAM,aAAa,OAAO,OAAO,aAAa,CAAC;AAC/C,QAAM,WAAW,OAAO,aAAa,YAAY;AACjD,QAAM,SAAS,OAAO,UAAU;AAChC,QAAM,QAAQ,OAAO,UAAU;AAC/B,QAAM,aAAa,QAAQ,QAAQ;AACnC,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,MACL;AAAA,MACA,6BAAS,UAAU;AAAA,MACnB,aAAa,6BAAS,WAAW,YAAY,KAAK;AAAA,MAClD,QAAQ,KAAK;AAAA,MACb,QAAQ,mCAAe;AAAA,MACvB,QAAQ,yBAAe,MAAM,MAAM,IAAI,MAAM,SAAS,KAAK;AAAA,MAC3D,QAAQ,iHAAgD;AAAA,MACxD,OAAO,SAAS,gBAAgB,8HAAmD;AAAA,MACnF,OAAO,SAAS,iBAAiB,QAAQ,yDAAqC,MAAM,QAAQ,yBAAyB,kBAAkB;AAAA,MACvI,SAAS,KAAK;AAAA,MACd,SAAS,4CAAwB;AAAA,MACjC,SAAS,8BAAe,0BAA0B,MAAM,CAAC,KAAK;AAAA,MAC9D,SAAS,gBAAgB,kCAAkC,OAAO,eAAe,kBAAkB,CAAC,KAAK;AAAA,MACzG,SAAS,WAAW,OAAO,aAAa,KAAK;AAAA,MAC7C,SAAS,mCAAmC;AAAA,MAC5C,SAAS,yDAAyD;AAAA,MAClE,SAAS,6BAAS,sBAAsB,EAAE,MAAM,OAAO,MAAM,aAAa,OAAO,YAAY,CAAC,CAAC,KAAK;AAAA,MACpG,SAAS,4HAA4C,UAAU,WAAM;AAAA,MACrE,SAAS,uJAAuE;AAAA,IAClF,EACG,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC,EAC9C,KAAK,IAAI;AAAA,EACd;AACA,SAAO;AAAA,IACL;AAAA,IACA,WAAW,UAAU;AAAA,IACrB,aAAa,iBAAiB,WAAW,YAAY,KAAK;AAAA,IAC1D,QAAQ,KAAK;AAAA,IACb,QAAQ,sBAAsB;AAAA,IAC9B,QAAQ,kBAAkB,MAAM,MAAM,IAAI,MAAM,SAAS,KAAK;AAAA,IAC9D,QAAQ,sEAAsE;AAAA,IAC9E,OAAO,SAAS,gBAAgB,wEAAwE;AAAA,IACxG,OAAO,SAAS,iBAAiB,QAAQ,+CAA+C,MAAM,QAAQ,yBAAyB,kBAAkB;AAAA,IACjJ,SAAS,KAAK;AAAA,IACd,SAAS,+BAA+B;AAAA,IACxC,SAAS,oBAAoB,0BAA0B,MAAM,CAAC,KAAK;AAAA,IACnE,SAAS,gBAAgB,kCAAkC,OAAO,eAAe,kBAAkB,CAAC,KAAK;AAAA,IACzG,SAAS,WAAW,OAAO,aAAa,KAAK;AAAA,IAC7C,SAAS,mCAAmC;AAAA,IAC5C,SAAS,yDAAyD;AAAA,IAClE,SAAS,mBAAmB,sBAAsB,EAAE,MAAM,OAAO,MAAM,aAAa,OAAO,YAAY,CAAC,CAAC,KAAK;AAAA,IAC9G,SAAS,wEAAwE,UAAU,MAAM;AAAA,IACjG,SAAS,qGAAqG;AAAA,EAChH,EACG,OAAO,CAAC,SAAyB,QAAQ,IAAI,CAAC,EAC9C,KAAK,IAAI;AACd;;;APrKA,IAAM,kCACJ;AAuDF,SAAS,qBAAqB,OAAgC;AAC5D,MAAI,UAAU,WAAW,UAAU,UAAU,UAAU,SAAU,QAAO;AACxE,QAAM,IAAI,MAAM,mDAAmD;AACrE;AAEA,SAAS,gBAAgB,OAA2B;AAClD,MAAI,UAAU,UAAU,UAAU,SAAU,QAAO;AACnD,QAAM,IAAI,MAAM,gCAAgC;AAClD;AAEA,SAAS,oBAAoB,OAA+B;AAC1D,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY,EAAE,QAAQ,MAAM,GAAG;AAC/D,MAAI,eAAe,iBAAiB,eAAe,aAAc,QAAO;AACxE,QAAM,IAAI,MAAM,+CAA+C;AACjE;AAEA,SAAS,mBAAmB,OAA8B;AACxD,MAAI,UAAU,qBAAqB,UAAU,aAAc,QAAO;AAClE,QAAM,IAAI,MAAM,uDAAuD;AACzE;AAEA,SAAS,sBAAsB,OAAgD;AAC7E,QAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,YAAY,EAAE;AACnD,QAAM,QAAQ,QAAQ,MAAM,wBAAwB;AACpD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,SAAO;AAAA,IACL,OAAO,MAAM,CAAC;AAAA,IACd,MAAM,MAAM,CAAC,EAAG,QAAQ,UAAU,EAAE;AAAA,EACtC;AACF;AAEA,SAAS,eAAe,OAA2B,OAAmC;AACpF,SAAO,UAAU,SAAY,SAAY,eAAe,OAAO,KAAK;AACtE;AAEA,SAAS,2BAA2B,aAAyC;AAC3E,MAAI;AACJ,MAAI;AACF,aAASC,cAAa,OAAO,CAAC,MAAM,aAAa,UAAU,WAAW,QAAQ,GAAG;AAAA,MAC/E,UAAU;AAAA,MACV,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,IACpC,CAAC,EAAE,KAAK;AAAA,EACV,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,OAAO,MAAM,OAAO;AAClC,QAAI,OAAO;AACT,aAAO,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAAA,IAChC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAASC,UAAS,OAAe,OAAuB;AACtD,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,GAAG,KAAK,eAAe;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,mBAAmB,MAAsB;AAChD,MAAI,CAACC,YAAW,IAAI,GAAG;AACrB,UAAM,IAAI,MAAM,wBAAwB,IAAI,EAAE;AAAA,EAChD;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAA+C;AACtE,QAAM,UAAU,OAAO,KAAK;AAC5B,SAAO,UAAU,UAAU;AAC7B;AAEA,SAAS,iBAAiB,SAAuC;AAC/D,SAAO,QAAQ,QAAQ,iBAAiB,QAAQ,iBAAiB,QAAQ,qBAAqB;AAChG;AAEA,SAAS,mBAAmB,SAA8B,UAAyB,UAAgD;AACjI,MAAI,aAAa,UAAU;AACzB,QAAI,iBAAiB,OAAO,GAAG;AAC7B,YAAM,IAAI,MAAM,4GAA4G;AAAA,IAC9H;AACA,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,gBAAgB,QAAQ,aAAa;AAC7D,QAAM,0BAA0B,gBAAgB,QAAQ,qBAAqB;AAC7E,QAAM,UAAU,gBAAgB,QAAQ,aAAa,KAAK,SAAS;AACnE,QAAM,UAAU,0BAA0B,kBAAkB,mBAAmB,SAAS;AACxF,QAAM,kBACJ,4BACC,kBAAkB,SAAY,SAAS,2BACvC,UAAU,SAAY;AAEzB,SAAO;AAAA,IACL,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,EAC/C;AACF;AAEA,SAAS,gCAAgC,SAA8B,UAAyB;AAC9F,QAAM,kBAAkB,gBAAgB,QAAQ,YAAY;AAC5D,QAAM,0BAA0B,gBAAgB,QAAQ,oBAAoB;AAC5E,QAAM,UAAU,0BAA0B,kBAAkB,mBAAmB,SAAS;AACxF,QAAM,kBAAkB,4BAA4B,kBAAkB,SAAY,SAAS;AAC3F,MAAI,CAAC,WAAW,CAAC,gBAAiB,QAAO;AACzC,SAAO;AAAA,IACL,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC7B,GAAI,kBAAkB,EAAE,gBAAgB,IAAI,CAAC;AAAA,EAC/C;AACF;AAEA,SAAS,8BAAsC;AAC7C,SAAOC,aAAY,EAAE,EAAE,SAAS,KAAK;AACvC;AAEA,SAAS,uBAAuB,OAAuB;AACrD,QAAM,UAAUF,UAAS,OAAO,qBAAqB;AACrD,MAAI,CAAC,QAAQ,WAAW,GAAG,GAAG;AAC5B,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAuC;AACvE,SAAO,QAAQ,QAAQ,aAAa,QAAQ,iBAAiB,QAAQ,aAAa;AACpF;AAEA,SAAS,iCAAiC,SAAuC;AAC/E,SAAO,QAAQ,QAAQ,aAAa,QAAQ,aAAa;AAC3D;AAEA,SAAS,oCAAoC,SAAoC;AAC/E,MAAI,QAAQ,aAAa,CAAC,QAAQ,eAAe;AAC/C,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,MAAI,QAAQ,iBAAiB,CAAC,QAAQ,WAAW;AAC/C,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACF;AAEA,SAAS,kCAAkC,SAAoC;AAC7E,MAAI,yBAAyB,OAAO,GAAG;AACrC,UAAM,IAAI,MAAM,qGAAqG;AAAA,EACvH;AACF;AAEA,SAAS,yBAAyB,UAAyB,aAAuD;AAChH,SAAO,SAAS,wBAAwB,0BAA0B,WAAW;AAC/E;AAEA,SAAS,+BAA+B,SAAuC;AAC7E,SAAO,CAAC,QAAQ,aAAa,qBAAqB,QAAQ,SAAS,MAAM;AAC3E;AAEA,SAAS,qBAAqB,SAA8B,YAAmC;AAC7F,MAAI;AACF,WAAO,kBAAkB,UAAU;AAAA,EACrC,SAAS,OAAO;AACd,QAAI,QAAQ,OAAO;AACjB,aAAO,CAAC;AAAA,IACV;AACA,UAAM;AAAA,EACR;AACF;AAEA,SAAS,gBAAgB,SAA8B,UAAsC;AAC3F,SAAO,QAAQ,WAAW,iBAAiB,QAAQ,QAAQ,IAAI,SAAS,YAAY;AACtF;AAEA,SAAS,6BAA6B,UAAuB,QAA6D;AACxH,MAAI,aAAa,SAAS;AACxB,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,IACX;AAAA,EACF;AACA,SAAO,qBAAqB,MAAM;AACpC;AAEA,SAAS,wBAAwB,UAA+B;AAC9D,QAAM,QAAQ,iBAAiB,IAAI,CAAC,aAAa,KAAK,SAAS,KAAK,KAAK,6BAA6B,UAAU,SAAS,MAAM,CAAC,EAAE;AAClI,MAAI,aAAa,SAAS;AACxB,WAAO,CAAC,kFAAiB,GAAG,KAAK,EAAE,KAAK,IAAI;AAAA,EAC9C;AACA,SAAO,CAAC,oCAAoC,GAAG,KAAK,EAAE,KAAK,IAAI;AACjE;AAEA,SAAS,mBAAmB,OAMjB;AACT,MAAI,MAAM,SAAS,SAAS;AAC1B,UAAM,WAAW,MAAM,aAAa,UAAU,qGAAqB;AACnE,WAAO,MAAM,UAAU,GAAG,MAAM,aAAa,UAAU,mCAAU,WAAW,GAAG,QAAQ,KAAK;AAAA,EAC9F;AAEA,QAAM,eAAe,MAAM,aAAa,UAAW,MAAM,YAAY,6BAAS,6BAAU,MAAM,YAAY,cAAc;AACxH,QAAM,UAAU,MAAM,UAAW,MAAM,aAAa,UAAU,mCAAU,cAAe;AACvF,QAAM,cAAc,MAAM,oBAAqB,MAAM,aAAa,UAAU,uBAAQ,kBAAmB;AACvG,SAAO,GAAG,WAAW,WAAW,GAAG,YAAY;AACjD;AAEA,eAAe,gBAAgB,SAA8B,UAAyB,SAA8C;AAClI,MAAI,QAAQ,UAAU;AACpB,WAAO,iBAAiB,QAAQ,QAAQ;AAAA,EAC1C;AACA,SAAO,QAAQ,OAAO;AAAA,IACpB,SAAS,EAAE,MAAM,UAAU;AAAA,IAC3B,cAAc,gBAAgB,SAAS,QAAQ;AAAA,IAC/C,SAAS,iBAAiB,IAAI,CAAC,cAAc;AAAA,MAC3C,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB,MAAM,SAAS;AAAA,IACjB,EAAE;AAAA,EACJ,CAAC;AACH;AAEA,eAAe,gBAAgB,SAA8B,UAAyB,SAAwB,UAA4C;AACxJ,UAAQ,KAAK,wBAAwB,QAAQ,CAAC;AAC9C,QAAM,WAAW,QAAQ,WACrB,gBAAgB,QAAQ,QAAQ,IAChC,MAAM,QAAQ,OAAO;AAAA,IACnB,SAAS,EAAE,UAAU,UAAU;AAAA,IAC/B,cAAc,SAAS,YAAY;AAAA,IACnC,SAAS,iBAAiB,OAAO,CAAC,aAAa,SAAS,SAAS,EAAE,IAAI,CAAC,cAAc;AAAA,MACpF,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB,MAAM,6BAA6B,UAAU,SAAS,MAAM;AAAA,IAC9D,EAAE;AAAA,EACJ,CAAC;AACL,QAAM,aAAa,aAAa,QAAQ;AACxC,MAAI,CAAC,WAAW,WAAW;AACzB,UAAM,IAAI,MAAM,GAAG,WAAW,KAAK,iDAAiD;AAAA,EACtF;AACA,QAAM,QAAQ,yBAAyB,UAAU,QAAQ;AACzD,MAAI,OAAO;AACT,YAAQ,KAAK,KAAK;AAAA,EACpB;AACA,SAAO;AACT;AAEA,eAAe,gBACb,SACA,UACA,SACA,UACA,KACiB;AACjB,MAAI,QAAQ,aAAa,QAAW;AAClC,UAAM,WAAW,QAAQ,SAAS,KAAK;AACvC,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AACA,QAAM,aAAa,gBAAgB,GAAG;AACtC,QAAM,qBAAqB,SAAS,UAAU,KAAK;AACnD,MAAI,uBAAuB,UAAa,mBAAmB,WAAW,GAAG;AACvE,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AACA,QAAM,kBAAkB,uBAAuB,UAAa,aAAa,kBAAkB,IAAI,qBAAqB;AAKpH,QAAM,iBAAiB,uBAAuB,UAAa,oBAAoB,SAAY,qBAAqB;AAChH,QAAM,eACJ,kBACA,kBAAkB;AAAA,IAChB,GAAI,kBAAkB,EAAE,UAAU,gBAAgB,IAAI,CAAC;AAAA,IACvD;AAAA,EACF,CAAC;AAEH,QAAM,iBAA8C,iBAAiB,IAAI,CAAC,aAAa;AACrF,UAAM,YAAY,WAAW,KAAK,CAAC,UAAU,MAAM,OAAO,SAAS,EAAE;AACrE,WAAO;AAAA,MACL,OAAO,SAAS;AAAA,MAChB,OAAO,SAAS;AAAA,MAChB,MAAM,mBAAmB;AAAA,QACvB;AAAA,QACA;AAAA,QACA,WAAW,WAAW,aAAa;AAAA,QACnC,SAAS,SAAS,OAAO;AAAA,QACzB,mBAAmB,SAAS,OAAO;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO,QAAQ,OAAO;AAAA,IACpB,SAAS,EAAE,UAAU,UAAU;AAAA,IAC/B;AAAA,IACA,SAAS,iBACL,CAAC,EAAE,OAAO,gBAAgB,OAAO,gBAAgB,MAAM,EAAE,UAAU,oBAAoB,EAAE,GAAG,GAAG,cAAc,IAC7G;AAAA,EACN,CAAC;AACH;AAEA,eAAe,mBAAmB,SAA8B,UAAyB,SAAwB,UAAuB,KAA8B;AACpK,MAAI,QAAQ,SAAS;AACnB,WAAO,mBAAmB,QAAQ,OAAO;AAAA,EAC3C;AACA,QAAM,eAAe,SAAS,eAAe;AAC7C,SAAO,QAAQ,KAAK;AAAA,IAClB,SAAS,EAAE,UAAU,aAAa;AAAA,IAClC;AAAA,IACA,aAAa;AAAA,IACb,SAAS,OAAO;AACd,YAAM,YAAY,MAAM,KAAK,KAAK;AAClC,UAAI,CAACC,YAAW,SAAS,GAAG;AAC1B,eAAO,wBAAwB,SAAS;AAAA,MAC1C;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AACH;AAEA,eAAe,uBACb,SACA,UACA,SACA,UACA,sBAC0B;AAC1B,MAAI,QAAQ,WAAW;AACrB,UAAM,cAAc,qBAAqB,QAAQ,SAAS;AAC1D,QAAI,gBAAgB,WAAW,CAAC,sBAAsB;AACpD,YAAM,IAAI,MAAM,8FAA8F;AAAA,IAChH;AACA,QAAI,gBAAgB,UAAU,QAAQ,QAAQ;AAC5C,YAAM,IAAI,MAAM,2GAA2G;AAAA,IAC7H;AACA,WAAO;AAAA,EACT;AACA,MAAI,yBAAyB,OAAO,KAAK,QAAQ,QAAQ;AACvD,WAAO;AAAA,EACT;AACA,QAAM,UAA6B,uBAAuB,CAAC,SAAS,QAAQ,QAAQ,IAAI,CAAC,QAAQ,QAAQ;AACzG,QAAM,WAAW,SAAS,mBAAmB,QAAQ,SAAS,SAAS,eAAe,IAAI,SAAS,kBAAkB;AACrH,QAAM,qBAAqB,uBAAuB,UAAU;AAC5D,SAAO,QAAQ,OAAO;AAAA,IACpB,SAAS,EAAE,UAAU,WAAW;AAAA,IAChC,cAAc,uBAAuB,UAAU,YAAY;AAAA,IAC3D,SAAS,QAAQ,IAAI,CAAC,YAAY;AAAA,MAChC,OAAO;AAAA,MACP,OAAO,eAAe,UAAU,MAAM;AAAA,MACtC,MACE,WAAW,WAAW,uBAClB,+BAA+B,sBAAsB,QAAQ,IAC7D,cAAc,UAAU,MAAM;AAAA,IACtC,EAAE;AAAA,EACJ,CAAC;AACH;AAEA,eAAe,kBACb,SACA,UACA,SACA,UACA,aACA,sBACqB;AACrB,MAAI,gBAAgB,SAAS;AAC3B,QAAI,CAAC,sBAAsB;AACzB,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,WAAO,qBAAqB;AAAA,EAC9B;AAGA,MAAI,gBAAgB,QAAQ;AAC1B,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AACA,MAAI,QAAQ,QAAQ;AAClB,WAAO,gBAAgB,QAAQ,MAAM;AAAA,EACvC;AACA,SAAO,QAAQ,OAAO;AAAA,IACpB,SAAS,EAAE,UAAU,YAAY;AAAA,IACjC,cAAc,SAAS,cAAc;AAAA,IACrC,SAAS;AAAA,MACP,EAAE,OAAO,UAAU,OAAO,UAAU,MAAM,YAAY;AAAA,MACtD,EAAE,OAAO,QAAQ,OAAO,QAAQ,MAAM,gBAAgB;AAAA,IACxD;AAAA,EACF,CAAC;AACH;AAEA,eAAe,uBAAuB,OASL;AAC/B,MAAI,MAAM,gBAAgB,SAAS;AACjC,QAAI,CAAC,MAAM,sBAAsB;AAC/B,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,QAAIE,aAAY,MAAM,qBAAqB;AAC3C,QAAI;AACF,YAAMC,cAAa,MAAM,MAAM,wBAAwB;AAAA,QACrD,OAAO,MAAM,qBAAqB;AAAA,QAClC,WAAW,MAAM,qBAAqB;AAAA,QACtC,QAAQ,MAAM,qBAAqB;AAAA,MACrC,CAAC;AACD,MAAAD,aAAYC,YAAW;AAAA,IACzB,QAAQ;AACN,YAAM,QAAQ;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,MACL,OAAO,MAAM,qBAAqB;AAAA,MAClC,WAAW,MAAM,qBAAqB;AAAA,MACtC,QAAQ,MAAM,qBAAqB;AAAA,MACnC,GAAID,aAAY,EAAE,WAAAA,WAAU,IAAI,CAAC;AAAA,IACnC;AAAA,EACF;AAEA,MAAI,MAAM,gBAAgB,QAAQ;AAChC,sCAAkC,MAAM,OAAO;AAC/C,UAAM,aAAa,MAAM,MAAM,sBAAsB,EAAE,UAAU,MAAM,SAAS,CAAC;AACjF,WAAO;AAAA,MACL,OAAO,WAAW;AAAA,MAClB,WAAW,WAAW;AAAA,MACtB,QAAQ,WAAW;AAAA,MACnB,GAAI,WAAW,YAAY,EAAE,WAAW,WAAW,UAAU,IAAI,CAAC;AAAA,IACpE;AAAA,EACF;AAEA,MAAI,CAAC,MAAM,QAAQ;AACjB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,sCAAoC,MAAM,OAAO;AACjD,MAAI,CAAC,iCAAiC,MAAM,OAAO,GAAG;AACpD,UAAM,QAAQ,KAAK,+BAA+B,MAAM,UAAU,MAAM,MAAM,CAAC;AAAA,EACjF;AACA,QAAM,aAAa,MAAM,aAAa,UAAU,yBAAe;AAC/D,QAAM,iBAAiB,MAAM,aAAa,UAAU,kCAAc;AAClE,QAAM,QAAQH,UAAS,MAAM,QAAQ,aAAc,MAAM,MAAM,QAAQ,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE,CAAC,GAAI,UAAU;AACrI,QAAM,YAAYA;AAAA,IAChB,MAAM,QAAQ,iBACX,MAAM,MAAM,QAAQ,SAAS;AAAA,MAC5B,SAAS,EAAE,MAAM,UAAU,eAAe;AAAA,MAC1C,SAAS,OAAO;AACd,YAAI,CAAC,MAAM,KAAK,EAAG,QAAO,MAAM,aAAa,UAAU,gEAAmB;AAC1E,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,iBACJ,MAAM,QAAQ,kBACb,iCAAiC,MAAM,OAAO,IAC3C,SACA,MAAM,MAAM,QAAQ,KAAK;AAAA,IACvB,SAAS,EAAE,MAAM,UAAU,eAAe;AAAA,IAC1C,aAAa;AAAA,EACf,CAAC;AACP,QAAM,YAAY,gBAAgB,cAAc;AAChD,QAAM,aAAa,MAAM,MAAM,wBAAwB;AAAA,IACrD;AAAA,IACA;AAAA,IACA,QAAQ,MAAM;AAAA,EAChB,CAAC;AACD,MAAI,aAAa,cAAc,WAAW,WAAW;AACnD,UAAM,QAAQ,KAAK,8FAA8F;AAAA,EACnH;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,MAAM;AAAA,IACd,WAAW,WAAW;AAAA,EACxB;AACF;AAEA,eAAe,kBACb,SACA,UACA,SACA,UAC0B;AAC1B,QAAM,cAAc,QAAQ,YACxB,oBAAoB,QAAQ,SAAS,IACrC,QAAQ,iBAAiB,CAAC,QAAQ,qBAChC,gBACA,QAAQ,sBAAsB,CAAC,QAAQ,gBACrC,eACA;AACR,QAAM,eAAe,cACjB,cACA,MAAM,QAAQ,OAAO;AAAA,IACnB,SAAS,EAAE,UAAU,WAAW;AAAA,IAChC,cAAc,SAAS,aAAa;AAAA,IACpC,SAAU,CAAC,eAAe,YAAY,EAA8B,IAAI,CAAC,eAAe;AAAA,MACtF,OAAO;AAAA,MACP,OAAO,eAAe,UAAU,SAAS;AAAA,MACzC,MAAM,cAAc,UAAU,SAAS;AAAA,IACzC,EAAE;AAAA,EACJ,CAAC;AAEL,MAAI,iBAAiB,iBAAiB,QAAQ,WAAW;AACvD,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AAEA,MACG,iBAAiB,kBAAkB,CAAC,QAAQ,iBAAiB,CAAC,QAAQ,kBACtE,iBAAiB,iBAAiB,CAAC,QAAQ,sBAAsB,CAAC,QAAQ,gBAC3E;AACA,YAAQ,KAAK,0BAA0B,UAAU,YAAY,CAAC;AAAA,EAChE;AAEA,QAAM,WACJ,iBAAiB,gBACbA;AAAA,IACE,QAAQ,iBAAkB,MAAM,QAAQ,SAAS,EAAE,SAAS,EAAE,UAAU,eAAe,EAAE,CAAC;AAAA,IAC1F;AAAA,EACF,IACA;AACN,QAAM,gBACJ,iBAAiB,eACbA;AAAA,IACE,QAAQ,sBAAuB,MAAM,QAAQ,SAAS,EAAE,SAAS,EAAE,UAAU,oBAAoB,EAAE,CAAC;AAAA,IACpG;AAAA,EACF,IACA;AACN,QAAM,WAAWA;AAAA,IACf,QAAQ,iBAAkB,MAAM,QAAQ,SAAS,EAAE,SAAS,EAAE,UAAU,eAAe,EAAE,CAAC;AAAA,IAC1F;AAAA,EACF;AACA,QAAM,QAAQ;AAAA,IACZ,QAAQ,cACL,MAAM,QAAQ,KAAK;AAAA,MAClB,SAAS,EAAE,UAAU,YAAY;AAAA,MACjC,aAAa;AAAA,IACf,CAAC;AAAA,EACL;AACA,QAAM,SAASA;AAAA,IACb,QAAQ,eACL,MAAM,QAAQ,KAAK;AAAA,MAClB,SAAS,EAAE,UAAU,aAAa;AAAA,MAClC,aAAa;AAAA,MACb,GAAI,SAAS,cAAc,EAAE,cAAc,SAAS,YAAY,IAAI,CAAC;AAAA,IACvE,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,YAAYA;AAAA,IAChB,QAAQ,kBACL,MAAM,QAAQ,KAAK;AAAA,MAClB,SAAS,EAAE,UAAU,gBAAgB;AAAA,MACrC,aAAa;AAAA,MACb,GAAI,SAAS,iBAAiB,EAAE,cAAc,SAAS,eAAe,IAAI,CAAC;AAAA,IAC7E,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,OACJ,iBAAiB,eACZ,eAAe,QAAQ,WAAW,uBAAuB,MACzD,QAAQ,MACL,SAAS,aAAa,4BACtB;AAAA,IACE,MAAM,QAAQ,KAAK;AAAA,MACjB,SAAS,EAAE,UAAU,WAAW;AAAA,MAChC,cAAc,OAAO,SAAS,aAAa,yBAAyB;AAAA,MACpE,aAAa,OAAO,yBAAyB;AAAA,IAC/C,CAAC;AAAA,IACD;AAAA,EACF,KACJ;AACN,QAAM,gBAAgB,MAAM,qBAAqB,SAAS,UAAU,SAAS,UAAU,OAAO;AAC9F,SAAO;AAAA,IACL,MAAM;AAAA,IACN,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,IAC/B,GAAI,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,IACzB,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,EACzB;AACF;AAEA,eAAe,mBACb,SACA,UACA,SACA,UACA,aAC2B;AAC3B,QAAM,oBACJ,QAAQ,qBACP,SAAS,eAAe,SAAS,aAAa,GAAG,SAAS,WAAW,IAAI,SAAS,UAAU,KAAK,WAClG,2BAA2B,WAAW;AACxC,QAAM,kBAAkBA;AAAA,IACtB,QAAQ,oBACL,MAAM,QAAQ,KAAK;AAAA,MAClB,SAAS,EAAE,UAAU,kBAAkB;AAAA,MACvC,GAAI,oBAAoB,EAAE,cAAc,mBAAmB,aAAa,kBAAkB,IAAI,EAAE,aAAa,aAAa;AAAA,MAC1H,SAAS,OAAO;AACd,YAAI;AACF,gCAAsB,KAAK;AAC3B,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,iBAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAC9D;AAAA,MACF;AAAA,IACF,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,aAAa,sBAAsB,eAAe;AACxD,QAAM,wBACJ,QAAQ,uBACP,QAAQ,MACL,SAAS,+BAA+B,QACxC,MAAM,QAAQ,QAAQ;AAAA,IACpB,SAAS,EAAE,UAAU,oBAAoB;AAAA,IACzC,cAAc,SAAS,+BAA+B;AAAA,EACxD,CAAC;AACP,MAAI,CAAC,QAAQ,aAAa;AACxB,YAAQ,KAAK,sBAAsB,UAAU,EAAE,sBAAsB,CAAC,CAAC;AAAA,EACzE;AACA,QAAM,QAAQA,UAAS,QAAQ,eAAgB,MAAM,QAAQ,SAAS,EAAE,SAAS,EAAE,UAAU,aAAa,EAAE,CAAC,GAAI,cAAc;AAC/H,QAAM,gBAAgB,QAAQ,sBAC1BA,UAAS,QAAQ,qBAAqB,uBAAuB,IAC7D,SAAS,uBAAuB,4BAA4B;AAChE,QAAM,OACJ,eAAe,QAAQ,YAAY,qBAAqB,MACvD,QAAQ,MACL,SAAS,cAAc,8BACvB;AAAA,IACE,MAAM,QAAQ,KAAK;AAAA,MACjB,SAAS,EAAE,UAAU,YAAY;AAAA,MACjC,cAAc,OAAO,SAAS,cAAc,2BAA2B;AAAA,MACvE,aAAa,OAAO,2BAA2B;AAAA,IACjD,CAAC;AAAA,IACD;AAAA,EACF;AACN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,OAAO,WAAW;AAAA,IAClB,MAAM,WAAW;AAAA,IACjB,aAAa,uBAAuB,QAAQ,qBAAqB,SAAS,qBAAqB,kBAAkB;AAAA,IACjH;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAe,qBACb,SACA,UACA,SACA,UACA,UACwB;AACxB,MAAI,QAAQ,SAAS;AACnB,UAAM,UAAU,mBAAmB,QAAQ,OAAO;AAClD,QAAI,aAAa,WAAW,YAAY,cAAc;AACpD,YAAM,IAAI,MAAM,wEAAwE;AAAA,IAC1F;AACA,WAAO;AAAA,EACT;AACA,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,EACT;AACA,QAAM,UACJ,EAAE,UAAU,eAAe;AAC7B,SAAO,QAAQ,OAAO;AAAA,IACpB;AAAA,IACA,cAAc,SAAS,iBAAiB;AAAA,IACxC,SAAU,CAAC,mBAAmB,YAAY,EAA6B,IAAI,CAAC,YAAY;AAAA,MACtF,OAAO;AAAA,MACP,OAAO,mBAAmB,UAAU,QAAQ,QAAQ;AAAA,MACpD,MAAM,kBAAkB,UAAU,QAAQ,QAAQ;AAAA,IACpD,EAAE;AAAA,EACJ,CAAC;AACH;AAEA,eAAsB,kBACpB,SACA,YACA,cAC4B;AAC5B,QAAM,WAAW,aAAa,YAAY,qBAAqB,SAAS,UAAU;AAClF,QAAM,UAAU,aAAa;AAC7B,QAAM,MAAM,aAAa,OAAO,QAAQ,IAAI;AAE5C,UAAQ,MAAM,EAAE,gBAAgB,SAAS,QAAQ,GAAG,OAAO,CAAC;AAE5D,QAAM,WAAW,MAAM,gBAAgB,SAAS,UAAU,OAAO;AACjE,QAAM,WAAW,MAAM,gBAAgB,SAAS,UAAU,SAAS,QAAQ;AAC3E,QAAM,WAAW,MAAM,gBAAgB,SAAS,UAAU,SAAS,UAAU,aAAa,GAAG;AAC7F,QAAM,cAAc,mBAAmB,SAAS,UAAU,QAAQ;AAClE,QAAM,sBAAsB,gCAAgC,SAAS,QAAQ;AAC7E,QAAM,cAAc,MAAM,mBAAmB,SAAS,UAAU,SAAS,UAAU,GAAG;AACtF,QAAM,sBAAsB,YAAY,KAAK,KAAK;AAClD,QAAM,uBACJ,aAAa,UAAU,+BAA+B,OAAO,IACzD,yBAAyB,UAAU,mBAAmB,IACtD;AACN,QAAM,kBACJ,aAAa,SAAS,MAAM,uBAAuB,SAAS,UAAU,SAAS,UAAU,oBAAoB,IAAI;AACnH,QAAM,aACJ,aAAa,UAAU,mBAAmB,oBAAoB,SAC1D,MAAM,kBAAkB,SAAS,UAAU,SAAS,UAAU,iBAAiB,oBAAoB,IACnG;AACN,QAAM,kBACJ,aAAa,UAAU,kBACnB,MAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,GAAI,aAAa,EAAE,QAAQ,WAAW,IAAI,CAAC;AAAA,IAC3C,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;AAAA,IACvD,uBAAuB,aAAa;AAAA,IACpC,yBAAyB,aAAa,2BAA2B;AAAA,EACnE,CAAC,IACD;AACN,QAAM,oBAAoB,aAAa,SAAS,MAAM,qBAAqB,SAAS,UAAU,SAAS,UAAU,MAAM,IAAI;AAC3H,QAAM,aAAa,aAAa,UAAU,MAAM,kBAAkB,SAAS,UAAU,SAAS,QAAQ,IAAI;AAC1G,QAAM,cAAc,aAAa,WAAW,MAAM,mBAAmB,SAAS,UAAU,SAAS,UAAU,mBAAmB,IAAI;AAClI,QAAM,2BAA2B,kBAC7B;AAAA,IACE,OAAO,gBAAgB;AAAA,IACvB,WAAW,gBAAgB;AAAA,IAC3B,GAAI,gBAAgB,YAAY,EAAE,WAAW,gBAAgB,UAAU,IAAI,CAAC;AAAA,EAC9E,IACA;AAEJ,QAAM,aAAgC;AAAA,IACpC;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA,GAAI,cAAc,EAAE,QAAQ,YAAY,IAAI,CAAC;AAAA,IAC7C,GAAI,sBAAsB,EAAE,oBAAoB,IAAI,CAAC;AAAA,IACrD,GAAI,4BAA4B,mBAAmB,mBAAmB,oBAClE;AAAA,MACE,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,QAAQ,gBAAgB;AAAA,QACxB,aAAa;AAAA,QACb,eAAe;AAAA,QACf,GAAI,oBAAoB,WAAW,uBAAuB,EAAE,wBAAwB,qBAAqB,OAAO,IAAI,CAAC;AAAA,MACvH;AAAA,IACF,IACA,CAAC;AAAA,IACL,GAAI,aAAa,EAAE,OAAO,WAAW,IAAI,CAAC;AAAA,IAC1C,GAAI,cAAc,EAAE,QAAQ,YAAY,IAAI,CAAC;AAAA,EAC/C;AAEA,UAAQ,KAAK,kBAAkB,YAAY,UAAU,CAAC;AACtD,MAAI,CAAC,QAAQ,KAAK;AAChB,UAAM,YAAY,MAAM,QAAQ,QAAQ;AAAA,MACtC,SAAS,EAAE,UAAU,cAAc;AAAA,MACnC,cAAc;AAAA,IAChB,CAAC;AACD,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,EAAE,UAAU,WAAW,CAAC;AAAA,IAC1C;AAAA,EACF;AACA,SAAO;AACT;;;AQ91BA,YAAY,OAAO;AAGnB,SAAS,YAAmB;AAC1B,EAAE,SAAO,0BAA0B;AACnC,UAAQ,KAAK,CAAC;AAChB;AAEA,SAAS,mBAA0B,OAA8B;AAC/D,MAAM,WAAS,KAAK,GAAG;AACrB,cAAU;AAAA,EACZ;AACA,SAAO;AACT;AAQA,SAAS,aAAmC,SAAsE;AAChH,SAAO,QAAQ,IAAI,CAAC,WAAW;AAC7B,UAAM,cAAwC;AAAA,MAC5C,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,IAChB;AACA,WAAO,OAAO,OAAO,EAAE,GAAG,aAAa,MAAM,OAAO,KAAK,IAAI;AAAA,EAC/D,CAAC;AACH;AAEO,SAAS,2BAA0C;AACxD,SAAO;AAAA,IACL,MAAM,SAAS;AACb,MAAE,QAAM,OAAO;AAAA,IACjB;AAAA,IACA,MAAM,SAAS;AACb,MAAE,QAAM,OAAO;AAAA,IACjB;AAAA,IACA,KAAK,SAAS;AACZ,MAAE,MAAI,QAAQ,OAAO;AAAA,IACvB;AAAA,IACA,MAAM,OAA6B,OAIhB;AACjB,YAAM,WAAW;AAAA,QACf,MAAQ,SAAe;AAAA,UACrB,SAAS,MAAM;AAAA,UACf,SAAS,aAAa,MAAM,OAAO;AAAA,UACnC,GAAI,MAAM,eAAe,EAAE,cAAc,MAAM,aAAa,IAAI,CAAC;AAAA,QACnE,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,KAAK,OAAO;AAChB,aAAO,mBAAmB,MAAQ,OAAK,KAAK,CAAC;AAAA,IAC/C;AAAA,IACA,MAAM,SAAS,OAAO;AACpB,aAAO,mBAAmB,MAAQ,WAAS,EAAE,GAAG,OAAO,MAAM,IAAI,CAAC,CAAC;AAAA,IACrE;AAAA,IACA,MAAM,QAAQ,OAAO;AACnB,aAAO,mBAAmB,MAAQ,UAAQ,KAAK,CAAC;AAAA,IAClD;AAAA,EACF;AACF;;;AClEA,OAAO,YAAY;AACnB,SAAS,iCAAmE;AAS5E,eAAsB,sBACpB,QAAoC,CAAC,GACrC,eAAkD,CAAC,GACb;AACtC,QAAM,SAAS,aAAa,UAAU,QAAQ;AAC9C,QAAM,WAAW,aAAa,YAAY;AAC1C,QAAM,aAAa,aAAa,cAAc,QAAQ,IAAI,oBAAoB;AAC9E,QAAM,WAAW,MAAM,YAAY;AAEnC,QAAM,aAAa,MAAM,SAAS;AAAA,IAChC,SAAS,MAAM;AACb,aAAO;AAAA,QACL,aAAa,UACT,qHACA;AAAA,MACN;AACA,aAAO,MAAM,QAAQ,KAAK,GAAG;AAAA,CAAI;AACjC,aAAO;AAAA,QACL,aAAa,UACT,4BAAQ,KAAK,KAAK,KAAK,WAAW,EAAE,CAAC;AAAA,IACrC,iCAAiC,KAAK,KAAK,KAAK,WAAW,EAAE,CAAC;AAAA;AAAA,MACpE;AACA,UAAI,YAAY;AACd,eAAO,MAAM,aAAa,UAAU,6CAAe,uBAAuB;AAC1E,eAAO,SAAS,KAAK,KAAK,EAAE,OAAO,KAAK,GAAG,CAAC,OAAO;AACjD,iBAAO,MAAM,GAAG,EAAE;AAAA,CAAI;AAAA,QACxB,CAAC;AAAA,MACH,OAAO;AACL,eAAO;AAAA,UACL,aAAa,UACT,yHACA;AAAA,QACN;AACA,eAAO;AAAA,UACL,aAAa,UACT,yHACA;AAAA,QACN;AAAA,MACF;AACA,aAAO;AAAA,QACL,aAAa,UACT,0YACA;AAAA,MACN;AAAA,IACF;AAAA,IACA,SAAS,MAAM;AACb,UAAI,KAAK,WAAW,aAAa;AAC/B,eAAO;AAAA,UACL,aAAa,UACT,mGAAwB,KAAK,YAAY,QAAG;AAAA,IAC5C,yDAAyD,KAAK,YAAY,OAAO;AAAA;AAAA,QACvF;AAAA,MACF,WAAW,KAAK,WAAW,mBAAmB;AAC5C,eAAO;AAAA,UACL,aAAa,UACT,4HACA;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,SAAS;AACjB,aAAO,MAAM,GAAG,OAAO;AAAA,CAAI;AAAA,IAC7B;AAAA,EACF,CAAC;AAED,SAAO,MAAM,aAAa,UAAU,wEAAsB,kCAAkC;AAC5F,SAAO,MAAM,WAAW,WAAW,KAAK;AAAA,CAAI;AAC5C,SAAO,MAAM,GAAG,aAAa,UAAU,iBAAO,QAAQ,KAAK,WAAW,MAAM;AAAA,CAAI;AAChF,MAAI,WAAW,gBAAgB;AAC7B,WAAO,MAAM,GAAG,aAAa,UAAU,6BAAS,YAAY,KAAK,WAAW,cAAc;AAAA,CAAI;AAAA,EAChG;AACA,MAAI,WAAW,WAAW;AACxB,WAAO,MAAM,GAAG,aAAa,UAAU,uBAAQ,KAAK,KAAK,WAAW,WAAW,SAAS,KAAK,WAAW,SAAS;AAAA,CAAK;AAAA,EACxH;AACA,SAAO,MAAM,IAAI;AAEjB,SAAO;AACT;;;AX5DA,SAAS,qBAAqB,UAAsC;AAClE,SAAO,aAAa,UAAU,2CAAkB;AAClD;AAEA,SAAS,gBAAgB,UAAsC;AAC7D,SAAO,aAAa,UAAU,wCAAoB;AACpD;AAEA,SAAS,uBAAuB,UAAsC;AACpE,SAAO,aAAa,UAAU,mFAA4B;AAC5D;AAEA,SAAS,sBAAsB,UAAsC;AACnE,SAAO,aAAa,UAAU,2FAA0B;AAC1D;AAEA,SAAS,qBAAqB,UAAsC;AAClE,SAAO,aAAa,UAAU,iDAAmB;AACnD;AAEA,SAAS,eAAe,UAA8B,kBAA2B;AAC/E,MAAI,aAAa,SAAS;AACxB,WAAO;AAAA,MACL,GAAI,mBAAmB,CAAC,EAAE,OAAO,WAAoB,OAAO,6FAAkB,CAAC,IAAI,CAAC;AAAA,MACpF,EAAE,OAAO,YAAqB,OAAO,yDAAY;AAAA,MACjD,EAAE,OAAO,SAAkB,OAAO,iCAAQ;AAAA,IAC5C;AAAA,EACF;AACA,SAAO;AAAA,IACL,GAAI,mBAAmB,CAAC,EAAE,OAAO,WAAoB,OAAO,yDAAyD,CAAC,IAAI,CAAC;AAAA,IAC3H,EAAE,OAAO,YAAqB,OAAO,4BAA4B;AAAA,IACjE,EAAE,OAAO,SAAkB,OAAO,mBAAmB;AAAA,EACvD;AACF;AAEA,eAAe,eACb,SACA,SACA,UACA,UACuB;AACvB,MAAI,QAAQ,QAAS,QAAO;AAC5B,MAAI,QAAQ,UAAU,KAAM,QAAO;AACnC,MAAI,QAAQ,UAAU,SAAS,QAAQ,IAAK,QAAO;AACnD,QAAM,mBAAmB,6BAA6B,QAAQ,MAAM;AACpE,SAAO,QAAQ,OAAO;AAAA,IACpB,SAAS,qBAAqB,QAAQ;AAAA,IACtC,cAAc,mBAAmB,YAAY;AAAA,IAC7C,SAAS,eAAe,UAAU,gBAAgB;AAAA,EACpD,CAAC;AACH;AAEA,eAAsB,gBAAgB,SAA8B,eAAyC,CAAC,GAAkB;AAC9H,MAAI,QAAQ,WAAW,QAAQ,UAAU,QAAW;AAClD,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,QAAM,WAAW,aAAa,YAAY,QAAQ;AAClD,MAAI,QAAQ,WAAW,6BAA6B,QAAQ,MAAM,eAAe;AAC/E,UAAM,IAAI,MAAM,oHAAoH;AAAA,EACtI;AAEA,QAAM,MAAM,aAAa,OAAO,QAAQ;AACxC,QAAM,aAAa,QAAQ,UAAU,kBAAkB,GAAG;AAC1D,MAAI,QAAQ,OAAOK,YAAW,UAAU,KAAK,CAAC,QAAQ,OAAO;AAC3D,UAAM,IAAI,MAAM,oCAAoC,UAAU,2CAA2C;AAAA,EAC3G;AAEA,QAAM,UAAU,aAAa,WAAW,yBAAyB;AACjE,QAAM,aAAa,MAAM,kBAAkB,SAAS,YAAY;AAAA,IAC9D;AAAA,IACA,uBAAuB,aAAa,yBAAyB;AAAA,IAC7D,GAAI,aAAa,0BAA0B,EAAE,yBAAyB,aAAa,wBAAwB,IAAI,CAAC;AAAA,IAChH,GAAI,aAAa,MAAM,EAAE,KAAK,aAAa,IAAI,IAAI,CAAC;AAAA,IACpD,GAAI,aAAa,MAAM,EAAE,KAAK,aAAa,IAAI,IAAI,CAAC;AAAA,IACpD,GAAI,aAAa,WAAW,EAAE,UAAU,aAAa,SAAS,IAAI,CAAC;AAAA,EACrE,CAAC;AACD,QAAM,SAAS,kBAAkB,YAAY,GAAG;AAChD,yBAAuB,OAAO,MAAM,SAAS;AAC7C,yBAAuB,OAAO,MAAM,YAAY;AAChD,uBAAqB,YAAY,MAAM;AAEvC,UAAQ,KAAK,oBAAoB,QAAQ,UAAU,CAAC;AAEpD,QAAM,UAAU,MAAM,eAAe,SAAS,SAAS,OAAO,aAAa,UAAU,QAAQ;AAE7F,MAAI,YAAY,WAAW;AACzB,YAAQ,KAAK,uBAAuB,OAAO,aAAa,QAAQ,CAAC;AACjE,WAAO,aAAa,uBAAuB,wBAAwB,EAAE,QAAQ,WAAW,CAAC;AACzF,YAAQ,MAAM,sBAAsB,OAAO,aAAa,QAAQ,CAAC;AACjE;AAAA,EACF;AAEA,MAAI,YAAY,YAAY;AAC1B,YAAQ,MAAM,gBAAgB,OAAO,aAAa,QAAQ,CAAC;AAC3D,WAAO,aAAa,gBAAgB,iBAAiB,EAAE,QAAQ,WAAW,CAAC;AAAA,EAC7E,OAAO;AACL,YAAQ,MAAM,qBAAqB,OAAO,aAAa,QAAQ,CAAC;AAAA,EAClE;AACF;;;ArB/FA,IAAM,UAAU,IAAI,QAAQ;AAE5B,SAAS,YAAY,OAAuB;AAC1C,UAAQ,MAAM,qBAAqB,KAAK,CAAC;AACzC,UAAQ,KAAK,CAAC;AAChB;AAEA,SAAS,aAAkC,SAA8E;AACvH,SAAO,UAAU,SAAY;AAC3B,QAAI;AACF,YAAM,QAAQ,GAAG,IAAI;AAAA,IACvB,SAAS,OAAO;AACd,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF;AACF;AAEA,QAAQ,KAAK,QAAQ,IAAI,kBAAkB,KAAK,KAAK,SAAS,EAAE,YAAY,aAAa;AAEzF,QACG,QAAQ,OAAO,EACf,YAAY,+BAA+B,EAC3C,OAAO,yBAAyB,uBAAuB,EACvD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,oBAAoB,uBAAuB,EAClD,OAAO,yBAAyB,6BAA6B,EAC7D,OAAO,yBAAyB,uDAAuD,EACvF,OAAO,8BAA8B,oBAAoB,EACzD,OAAO,8BAA8B,gBAAgB,EACrD,OAAO,wCAAwC,yBAAyB,EACxE,OAAO,6BAA6B,wCAAwC,EAC5E,OAAO,uCAAuC,iDAAiD,EAC/F,OAAO,yBAAyB,2CAA2C,EAC3E,OAAO,sBAAsB,aAAa,EAC1C,OAAO,8BAA8B,iBAAiB,EACtD,OAAO,qBAAqB,6CAA6C,EACzE,OAAO,+BAA+B,qCAAqC,EAC3E,OAAO,uBAAuB,kDAAkD,EAChF,OAAO,6BAA6B,uCAAuC,EAC3E,OAAO,mCAAmC,sBAAsB,EAChE,OAAO,6BAA6B,4BAA4B,EAChE,OAAO,uBAAuB,cAAc,EAC5C,OAAO,wBAAwB,eAAe,EAC9C,OAAO,2BAA2B,kBAAkB,EACpD,OAAO,uBAAuB,6BAA6B,EAC3D,OAAO,0BAA0B,qDAAqD,EACtF,OAAO,oCAAoC,+CAA+C,EAC1F,OAAO,mCAAmC,iCAAiC,EAC3E,OAAO,gCAAgC,qBAAqB,EAC5D,OAAO,wBAAwB,2BAA2B,EAC1D,OAAO,2BAA2B,6CAA6C,EAC/E,OAAO,8BAA8B,2CAA2C,EAChF,OAAO,sBAAsB,+CAA+C,EAC5E,OAAO,WAAW,8BAA8B,EAChD,OAAO,WAAW,uCAAuC,EACzD,OAAO,cAAc,yCAAyC,EAC9D,OAAO,aAAa,+DAA+D,EACnF,OAAO,aAAa,yBAAyB,EAC7C,OAAO,aAAa,eAAe,CAAC;AAEvC,QACG,QAAQ,MAAM,EACd,YAAY,4CAA4C,EACxD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,iBAAiB,6BAA6B,EACrD,OAAO,iBAAiB,8DAA8D,EACtF,OAAO,aAAa,cAAc,CAAC;AAEtC,QACG,QAAQ,OAAO,EACf,YAAY,+BAA+B,EAC3C,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,eAAe,CAAC;AAEvC,QACG,QAAQ,QAAQ,EAChB,YAAY,+BAA+B,EAC3C,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,iBAAiB,gCAAgC,EACxD,OAAO,6CAA6C,gEAAgE,EACpH,OAAO,aAAa,gBAAgB,CAAC;AAExC,QACG,QAAQ,QAAQ,EAChB,YAAY,wEAAwE,EACpF,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,iBAAiB,sBAAsB,EAC9C,OAAO,6CAA6C,gDAAgD,EACpG,OAAO,qBAAqB,+BAA+B,EAC3D,OAAO,0BAA0B,qCAAqC,EACtE,OAAO,aAAa,gBAAgB,CAAC;AAExC,QACG,QAAQ,QAAQ,EAChB,YAAY,sDAAsD,EAClE,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,gBAAgB,CAAC;AAExC,QACG,QAAQ,QAAQ,EAChB,YAAY,4DAA4D,EACxE,OAAO,mBAAmB,kBAAkB,EAC5C,eAAe,iBAAiB,gBAAgB,EAChD,eAAe,mBAAmB,gHAAgH,EAClJ,OAAO,qBAAqB,qCAAqC,EACjE,OAAO,uBAAuB,gCAAgC,EAC9D,OAAO,iBAAiB,qBAAqB,EAC7C,OAAO,2BAA2B,mEAAmE,EACrG,OAAO,wBAAwB,mDAAmD,EAClF,OAAO,6BAA6B,qDAAqD,EACzF,OAAO,uBAAuB,kDAAkD,EAChF,OAAO,aAAa,gBAAgB,CAAC;AAExC,QACG,QAAQ,iBAAiB,EACzB,YAAY,yEAAyE,EACrF,OAAO,qBAAqB,qCAAqC,EACjE,OAAO,uBAAuB,4CAA4C,EAC1E,OAAO,qBAAqB,oCAAoC,EAChE,OAAO,aAAa,wBAAwB,CAAC;AAEhD,IAAM,iBAAiB,QAAQ,QAAQ,SAAS,EAAE,YAAY,oDAAoD;AAElH,eACG,QAAQ,SAAS,EACjB,YAAY,wCAAwC,EACpD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,oCAAoC,iEAAiE,EAC5G,OAAO,+BAA+B,gEAAgE,EACtG,OAAO,iCAAiC,sEAAsE,EAC9G,OAAO,yBAAyB,oFAAoF,EACpH,OAAO,aAAa,wBAAwB,CAAC;AAEhD,eACG,QAAQ,OAAO,EACf,YAAY,sCAAsC,EAClD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,sBAAsB,CAAC;AAE9C,eACG,QAAQ,MAAM,EACd,YAAY,qCAAqC,EACjD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,qBAAqB,CAAC;AAE7C,eACG,QAAQ,SAAS,EACjB,YAAY,wCAAwC,EACpD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,wBAAwB,CAAC;AAEhD,eACG,QAAQ,QAAQ,EAChB,YAAY,4CAA4C,EACxD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,uBAAuB,CAAC;AAE/C,eACG,QAAQ,MAAM,EACd,YAAY,6CAA6C,EACzD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,eAAe,8BAA8B,EACpD,OAAO,aAAa,qBAAqB,CAAC;AAE7C,eACG,QAAQ,WAAW,EACnB,YAAY,0CAA0C,EACtD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,0BAA0B,CAAC;AAElD,IAAM,mBAAmB,eAAe,QAAQ,WAAW,EAAE,YAAY,yCAAyC;AAElH,iBACG,QAAQ,QAAQ,EAChB,YAAY,wCAAwC,EACpD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,gCAAgC,CAAC;AAExD,iBACG,QAAQ,SAAS,EACjB,YAAY,yCAAyC,EACrD,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,iCAAiC,CAAC;AAEzD,eACG,QAAQ,OAAO,EAAE,QAAQ,KAAK,CAAC,EAC/B,YAAY,iCAAiC,EAC7C,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,iBAAiB,oBAAoB,YAAY,EACxD,OAAO,aAAa,oBAAoB,CAAC;AAE5C,QACG,QAAQ,WAAW,EACnB,YAAY,8DAA8D,EAC1E,OAAO,MAAM;AACZ,sBAAoB;AACtB,CAAC;AAEH,QACG,QAAQ,WAAW,EACnB,YAAY,uDAAuD,EACnE,OAAO,MAAM;AACZ,sBAAoB;AACtB,CAAC;AAEH,IAAM,qBAAqB,QAAQ,QAAQ,aAAa,EAAE,YAAY,6CAA6C;AAEnH,mBACG,QAAQ,yBAAyB,EACjC,YAAY,uEAAuE,EACnF,OAAO,mBAAmB,kBAAkB,EAC5C,eAAe,4BAA4B,8DAA8D,EACzG,OAAO,eAAe,sCAAsC,EAC5D,OAAO,aAAa,0CAA0C,CAAC;AAElE,IAAM,gBAAgB,QAAQ,QAAQ,QAAQ,EAAE,YAAY,wBAAwB;AAEpF,cACG,QAAQ,MAAM,EACd,YAAY,+BAA+B,EAC3C,OAAO,MAAM;AACZ,UAAQ,IAAI,kBAAkB,CAAC;AACjC,CAAC;AAEH,cACG,QAAQ,MAAM,EACd,YAAY,gDAAgD,EAC5D,OAAO,mBAAmB,kBAAkB,EAC5C,OAAO,aAAa,CAAC,YAAY;AAChC,UAAQ,IAAI,KAAK,UAAU,sBAAsB,QAAQ,UAAU,kBAAkB,CAAC,GAAG,MAAM,CAAC,CAAC;AACnG,CAAC,CAAC;AAEJ,MAAM,QAAQ,WAAW,QAAQ,IAAI;","names":["join","createOpenTagClient","formatProjectTargetRef","formatProjectTargetRef","createOpenTagClient","result","renderOpenTagPresentationPlainText","renderOpenTagPresentationPlainText","checks","nonEmpty","createOpenTagClient","z","z","createOpenTagClient","resolve","githubRelayWebhookUrl","existsSync","mkdirSync","readFileSync","rmSync","writeFileSync","homedir","dirname","join","dispatcherRuntimeHardeningInputFromEnv","doctorHasFailures","executorsFromConfig","runDoctor","join","homedir","resolve","dirname","dispatcherRuntimeHardeningInputFromEnv","mkdirSync","writeFileSync","existsSync","text","rmSync","result","readFileSync","configured","runDoctor","executorsFromConfig","doctorHasFailures","existsSync","join","join","execFileSync","randomBytes","existsSync","existsSync","readFileSync","join","z","z","join","readFileSync","existsSync","existsSync","existsSync","modeSpecific","permissions","yesNo","execFileSync","nonEmpty","existsSync","randomBytes","botOpenId","validation","existsSync"]}