From dab93290d3313dcccedc31af06aeeee21128a7f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 15:45:59 +0100 Subject: [PATCH 1/8] feat(landing): update hero H1 to 'Build proactive agents on a self-building knowledge graph' Verb-led headline with stronger actionability. Adds article 'a' for cleaner grammar. Keeps 'proactive' to differentiate from passive memory stores (memory.store) and preserves 'self-building knowledge graph' as the technical moat. Updates SEO title, meta description, and JSON-LD. --- packages/landing/src/components/LandingPage.tsx | 4 ++-- packages/landing/src/layouts/BaseLayout.astro | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/landing/src/components/LandingPage.tsx b/packages/landing/src/components/LandingPage.tsx index 2231e0640..5e2c4a809 100644 --- a/packages/landing/src/components/LandingPage.tsx +++ b/packages/landing/src/components/LandingPage.tsx @@ -153,9 +153,9 @@ function Hero() { style={{ color: "var(--color-page-text)" }} > - Proactive + Build proactive agents {" "} - AI agents on + on a
self-building diff --git a/packages/landing/src/layouts/BaseLayout.astro b/packages/landing/src/layouts/BaseLayout.astro index f1db74187..5d5b9869d 100644 --- a/packages/landing/src/layouts/BaseLayout.astro +++ b/packages/landing/src/layouts/BaseLayout.astro @@ -15,8 +15,8 @@ interface Props { } const { - title = "Lobu - Open-source backend for multi-user AI agents", - description = "Open-source backend for multi-user AI agents with isolated workers, per-user OAuth, connected sources, shared memory, and secrets agents never see.", + title = "Lobu - Build proactive agents on a self-building knowledge graph", + description = "Open-source backend for proactive AI agents. Connectors stream events into an append-only memory. LLM watchers shape them into a self-building knowledge graph your agent can search and cite.", ogType = "website", article, forceTheme, @@ -92,7 +92,7 @@ const hasMarkdownTwin = existsSync(markdownFileURL); "name": "Lobu", "url": "https://lobu.ai", "logo": "https://lobu.ai/lobster-icon.svg", - "description": "Open-source backend for multi-user AI agents with isolated workers, per-user OAuth, connected sources, shared memory, and secrets agents never see.", + "description": "Open-source backend for proactive AI agents. Connectors stream events into an append-only memory. LLM watchers shape them into a self-building knowledge graph your agent can search and cite.", "sameAs": [ "https://github.com/lobu-ai/lobu", "https://x.com/bu7emba" From 72f2bf2d0a198786214c04051ffb6cff9cdc72d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 16:03:45 +0100 Subject: [PATCH 2/8] feat(connector-sdk): generic SyncContext and SyncResult MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ConnectorRuntime now carries checkpoint and config type params. Defaults to Record so existing connectors compile unchanged. New connectors get typed ctx.checkpoint and ctx.config — no more casts: class MyConnector extends ConnectorRuntime { async sync(ctx: SyncContext) { const lastSync = ctx.checkpoint?.last_sync_at; // typed! const label = ctx.config.label; // typed! } } Migrates google_gmail as reference. --- .../connector-sdk/src/connector-runtime.ts | 22 +++++++++------- packages/connector-sdk/src/connector-types.ts | 25 ++++++++++++------- packages/connectors/src/google_gmail.ts | 20 +++++++++------ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/packages/connector-sdk/src/connector-runtime.ts b/packages/connector-sdk/src/connector-runtime.ts index 93e218df9..434aea946 100644 --- a/packages/connector-sdk/src/connector-runtime.ts +++ b/packages/connector-sdk/src/connector-runtime.ts @@ -18,6 +18,10 @@ import type { /** * ConnectorRuntime is the base class for all connectors. * + * Generic parameters: + * - `C` — checkpoint shape (defaults to `Record`) + * - `F` — feed config shape (defaults to `Record`) + * * Subclasses must: * - Set `definition` with connector metadata * - Implement `sync()` for feed data ingestion @@ -29,20 +33,20 @@ import type { * * @example * ```ts - * class GmailConnector extends ConnectorRuntime { - * definition = { key: 'google.gmail', name: 'Gmail', version: '1.0.0', ... }; + * interface MyCheckpoint { last_sync_at?: string } + * interface MyConfig { label?: string } * - * async sync(ctx: SyncContext): Promise { - * // Fetch threads from Gmail API - * } + * class GmailConnector extends ConnectorRuntime { + * definition = { key: 'google.gmail', name: 'Gmail', version: '1.0.0', ... }; * - * async execute(ctx: ActionContext): Promise { - * // Create draft, send email, etc. + * async sync(ctx: SyncContext): Promise> { + * // ctx.checkpoint is typed as MyCheckpoint | null — no casts needed + * // ctx.config is typed as MyConfig — no casts needed * } * } * ``` */ -export abstract class ConnectorRuntime { +export abstract class ConnectorRuntime, F = Record> { /** Connector definition with metadata, feed schemas, and action schemas */ abstract readonly definition: ConnectorDefinition; @@ -57,7 +61,7 @@ export abstract class ConnectorRuntime { * @param ctx - Sync context with feed config, checkpoint, and credentials * @returns Events and updated checkpoint */ - abstract sync(ctx: SyncContext): Promise; + abstract sync(ctx: SyncContext): Promise>; /** * Execute an action on the connected service. diff --git a/packages/connector-sdk/src/connector-types.ts b/packages/connector-sdk/src/connector-types.ts index b222d1aec..809ea6d10 100644 --- a/packages/connector-sdk/src/connector-types.ts +++ b/packages/connector-sdk/src/connector-types.ts @@ -472,14 +472,19 @@ export interface EventEnvelope { // ============================================================================= /** - * Context passed to ConnectorRuntime.sync() + * Context passed to ConnectorRuntime.sync(). + * + * Generic parameters: + * - `C` — checkpoint shape (defaults to `Record`) + * - `F` — feed config shape (defaults to `Record`) */ -export interface SyncContext { - /** Feed configuration */ +export interface SyncContext, F = Record> { + /** Feed key */ feedKey: string; - config: Record; + /** Feed configuration (typed via F) */ + config: F; /** Previous checkpoint (null on first sync) */ - checkpoint: Record | null; + checkpoint: C | null; /** OAuth credentials (if applicable) */ credentials: SyncCredentials | null; /** Entity IDs this feed is linked to */ @@ -489,7 +494,7 @@ export interface SyncContext { /** Optional hook for streaming event chunks while sync is in progress */ emitEvents?: (events: EventEnvelope[]) => Promise; /** Optional hook for persisting progress checkpoints during long syncs */ - updateCheckpoint?: (checkpoint: Record | null) => Promise; + updateCheckpoint?: (checkpoint: C | null) => Promise; } export interface SyncCredentials { @@ -501,13 +506,15 @@ export interface SyncCredentials { } /** - * Result from ConnectorRuntime.sync() + * Result from ConnectorRuntime.sync(). + * + * Generic parameter `C` matches the connector's checkpoint shape. */ -export interface SyncResult { +export interface SyncResult> { /** Events to write to the events table */ events: EventEnvelope[]; /** Updated checkpoint to persist */ - checkpoint: Record | null; + checkpoint: C | null; /** Updated auth state to persist on the linked auth profile (browser cookies, etc.) */ auth_update?: Record | null; /** Optional metadata about the sync */ diff --git a/packages/connectors/src/google_gmail.ts b/packages/connectors/src/google_gmail.ts index 464081b78..516a929d8 100644 --- a/packages/connectors/src/google_gmail.ts +++ b/packages/connectors/src/google_gmail.ts @@ -54,18 +54,24 @@ interface GmailThreadGetResponse { } // --------------------------------------------------------------------------- -// Checkpoint +// Types // --------------------------------------------------------------------------- interface GmailCheckpoint { last_sync_at?: string; } +interface GmailConfig { + label?: string; + max_results?: number; + lookback_days?: number; +} + // --------------------------------------------------------------------------- // Connector // --------------------------------------------------------------------------- -export default class GmailConnector extends ConnectorRuntime { +export default class GmailConnector extends ConnectorRuntime { readonly definition: ConnectorDefinition = { key: 'google.gmail', name: 'Gmail', @@ -259,11 +265,11 @@ export default class GmailConnector extends ConnectorRuntime { throw new Error('Gmail requires Google OAuth credentials.'); } - const label = (ctx.config.label as string) || 'INBOX'; - const maxResults = Math.min((ctx.config.max_results as number) ?? 50, 500); - const lookbackDays = (ctx.config.lookback_days as number) ?? 30; + const label = ctx.config.label || 'INBOX'; + const maxResults = Math.min(ctx.config.max_results ?? 50, 500); + const lookbackDays = ctx.config.lookback_days ?? 30; - const checkpoint = (ctx.checkpoint ?? {}) as GmailCheckpoint; + const checkpoint = ctx.checkpoint ?? {} // Determine the "after" date for the query const afterDate = checkpoint.last_sync_at @@ -370,7 +376,7 @@ export default class GmailConnector extends ConnectorRuntime { return { events, - checkpoint: newCheckpoint as Record, + checkpoint: newCheckpoint, metadata: { items_found: events.length, }, From 2bf5954a87483f806a1b36124a3aa6a18355911c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 16:05:23 +0100 Subject: [PATCH 3/8] feat(examples): add starter project with clean watcher/reaction pattern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Minimal, well-commented example showing the full flow: schema.yaml → watcher (cron + extraction_schema) → reaction script Each file has inline docs explaining the structure. Use as a template for new projects. --- examples/starter/agents/starter/prompt.md | 3 + examples/starter/lobu.toml | 30 +++++ .../reactions/daily-summary.reaction.ts | 46 ++++++++ examples/starter/models/schema.yaml | 111 ++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 examples/starter/agents/starter/prompt.md create mode 100644 examples/starter/lobu.toml create mode 100644 examples/starter/models/reactions/daily-summary.reaction.ts create mode 100644 examples/starter/models/schema.yaml diff --git a/examples/starter/agents/starter/prompt.md b/examples/starter/agents/starter/prompt.md new file mode 100644 index 000000000..8d54cd43d --- /dev/null +++ b/examples/starter/agents/starter/prompt.md @@ -0,0 +1,3 @@ +You are a helpful assistant that summarizes new events and tracks topics over time. + +When asked about recent activity, search the knowledge graph for `daily_digest` events and synthesize a concise answer. diff --git a/examples/starter/lobu.toml b/examples/starter/lobu.toml new file mode 100644 index 000000000..7dbca043f --- /dev/null +++ b/examples/starter/lobu.toml @@ -0,0 +1,30 @@ +# lobu.toml — Starter agent +# The minimal config to get a proactive agent running with watchers and reactions. +# +# Project structure: +# lobu.toml ← you are here +# models/ +# schema.yaml ← entities, relationships, watchers +# reactions/ +# daily-summary.reaction.ts ← reaction script (runs after watcher extracts) +# agents/ +# starter/ +# prompt.md ← agent system prompt + +[agents.starter] +name = "starter" +description = "A minimal starter agent that summarizes new events" +dir = "./agents/starter" + +[[agents.starter.providers]] +id = "anthropic" +model = "claude/sonnet-4-5" +key = "$ANTHROPIC_API_KEY" + +[memory] +enabled = true +org = "starter" +name = "Starter" +description = "Minimal starter project" +models = "./models" +data = "./data" diff --git a/examples/starter/models/reactions/daily-summary.reaction.ts b/examples/starter/models/reactions/daily-summary.reaction.ts new file mode 100644 index 000000000..dbd0c48c0 --- /dev/null +++ b/examples/starter/models/reactions/daily-summary.reaction.ts @@ -0,0 +1,46 @@ +/** + * Reaction for the `daily-summary` watcher. + * + * This runs AFTER the watcher's LLM has extracted structured data. + * `ctx.extracted_data` is the JSON matching the `extraction_schema` in schema.yaml. + * + * The `client` gives you: + * client.knowledge.save({...}) — write a new event to the knowledge graph + * client.knowledge.search({...}) — search existing events + * client.entities.create({...}) — create/update entities + * client.entities.list({...}) — query entities + * + * @param ctx — watcher context (extracted data, entities, window metadata) + * @param client — Lobu API client for reading/writing the knowledge graph + */ +import type { ReactionContext } from "@lobu/connector-sdk"; + +interface TopicSummary { + name: string; + summary: string; + importance: "low" | "medium" | "high"; +} + +interface DailySummaryData { + topics: TopicSummary[]; +} + +export default async (ctx: ReactionContext, client: any): Promise => { + const data = ctx.extracted_data as DailySummaryData; + + if (data.topics.length === 0) return; + + // Persist each topic as a knowledge event so the agent can cite it later. + await client.knowledge.save({ + entity_ids: ctx.entities.map((e) => e.id), + content: data.topics + .map((t) => `**${t.name}** (${t.importance}): ${t.summary}`) + .join("\n"), + semantic_type: "daily_digest", + metadata: { + window_id: ctx.window.id, + topic_count: data.topics.length, + high_importance: data.topics.filter((t) => t.importance === "high").length, + }, + }); +}; diff --git a/examples/starter/models/schema.yaml b/examples/starter/models/schema.yaml new file mode 100644 index 000000000..5489fce71 --- /dev/null +++ b/examples/starter/models/schema.yaml @@ -0,0 +1,111 @@ +# schema.yaml — The knowledge graph definition +# +# Three sections: +# 1. entities — What things exist (each becomes a table row with metadata) +# 2. relationships — How entities connect (directed edges with metadata) +# 3. watchers — Scheduled LLM jobs that extract structured data from events +# +# After a watcher runs, its `reaction_script` fires with the extracted data +# so you can persist enriched entities back to the knowledge graph. + +version: 2 + +# ── Entities ────────────────────────────────────────────────────────────────── +# Each entity gets: id, name, entity_type, metadata (your schema), timestamps. +# The `metadata_schema` is JSON Schema — Lobu uses it for validation and UI. + +entities: + - slug: topic + name: Topic + description: A subject the agent tracks — e.g. a project, a person, a company + icon: hash + color: "#3B82F6" + metadata_schema: + type: object + required: [name] + properties: + name: + type: string + x-table-label: Name + x-table-column: true + summary: + type: string + description: Latest one-line summary from the watcher + x-table-label: Summary + x-table-column: true + last_seen: + type: string + format: date-time + x-table-label: Last seen + x-table-column: true + status: + type: string + enum: [active, stale, archived] + default: active + x-table-label: Status + x-table-column: true + +# ── Relationships ───────────────────────────────────────────────────────────── +# Optional. Directed edges between entities. Each gets its own metadata_schema. + +relationships: [] + +# ── Watchers ────────────────────────────────────────────────────────────────── +# A watcher is a cron-scheduled LLM call that: +# 1. Reads recent events (from connectors or prior watchers) +# 2. Extracts structured data matching `extraction_schema` +# 3. Passes the extracted data to `reaction_script` for side effects +# +# Fields: +# slug — unique ID for this watcher +# agent — which agent runs the LLM (must match lobu.toml) +# name — human-readable label +# schedule — cron expression (UTC) +# prompt — instructions for the LLM +# extraction_schema — JSON Schema the LLM must fill +# reaction_script — (optional) TypeScript that runs after extraction + +watchers: + # ── Example: Daily digest watcher ─────────────────────────────────────── + # Runs every morning at 9am. Reads new events, produces a summary. + # The reaction script persists the summary as topic entities. + + - slug: daily-summary + agent: starter + name: Daily summary + schedule: "0 9 * * *" + notification_priority: normal + tags: [digest, daily] + min_cooldown_seconds: 3600 + reaction_script: ./reactions/daily-summary.reaction.ts + + prompt: | + Summarize the most important new events since the last run. + + For each notable topic or theme: + 1. Give it a short name + 2. Write a one-line summary + 3. Rate its importance (low/medium/high) + + Skip noise (marketing emails, system notifications). + If nothing notable happened, return empty arrays. + + extraction_schema: + type: object + required: [topics] + properties: + topics: + type: array + items: + type: object + required: [name, summary, importance] + properties: + name: + type: string + description: Short topic name + summary: + type: string + description: One-line summary of what's new + importance: + type: string + enum: [low, medium, high] From d84ee8717b635ae2c10d9ce5a81312c35127760d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 16:11:42 +0100 Subject: [PATCH 4/8] feat(connector-sdk): export ReactionClient type for reaction scripts Adds ReactionClient interface mirroring the actual isolated-vm proxy surface (knowledge.save/search/read/delete, entities CRUD, query, log). Reaction scripts now get full editor autocomplete: import type { ReactionClient, ReactionContext } from '@lobu/connector-sdk'; export default async (ctx: ReactionContext, client: ReactionClient) => { await client.knowledge.save({ content: '...', semantic_type: 'digest' }); }; Updates starter, lobu-crm, sales, and finance reaction examples to use ReactionClient instead of `any`. --- .../reconciliation-monitor.reaction.ts | 66 +++++---- .../reactions/inbound-triage.reaction.ts | 14 +- .../account-health-monitor.reaction.ts | 11 +- .../reactions/daily-summary.reaction.ts | 25 ++-- packages/connector-sdk/src/index.ts | 10 ++ .../src/reaction-client-types.ts | 133 ++++++++++++++++++ 6 files changed, 205 insertions(+), 54 deletions(-) create mode 100644 packages/connector-sdk/src/reaction-client-types.ts diff --git a/examples/finance/models/reactions/reconciliation-monitor.reaction.ts b/examples/finance/models/reactions/reconciliation-monitor.reaction.ts index 528e44d3f..3078b181a 100644 --- a/examples/finance/models/reactions/reconciliation-monitor.reaction.ts +++ b/examples/finance/models/reactions/reconciliation-monitor.reaction.ts @@ -1,40 +1,50 @@ /** * Reaction for the `reconciliation-monitor` watcher. * - * Persists any variance flagged during the daily 6am sweep as a durable - * `variance_flag` event tied to the affected account. Downstream agents - * (close-of-month rollup, audit prep) consume these events instead of - * re-extracting variances from the raw transaction stream. + * Persists variance events when unreconciled transactions or new anomalies + * are detected during the daily reconciliation pass. */ -import type { ReactionContext } from "@lobu/connector-sdk"; +import type { ReactionClient, ReactionContext } from "@lobu/connector-sdk"; interface ReconciliationData { - variances?: Array<{ - account: string; - amount: number; - direction: "over" | "under"; - reason: string; - }>; - unreconciled_count?: number; + unreconciled_count: number; + new_variances: string[]; + approaching_deadlines: string[]; + payment_risks?: string[]; } -export default async (ctx: ReactionContext, client: any): Promise => { +export default async ( + ctx: ReactionContext, + client: ReactionClient, +): Promise => { const data = ctx.extracted_data as ReconciliationData; - const variances = data.variances ?? []; - if (variances.length === 0) return; - for (const v of variances) { - await client.knowledge.save({ - entity_ids: ctx.entities.map((e) => e.id), - content: `Variance ${v.direction} on ${v.account}: ${v.amount} — ${v.reason}`, - semantic_type: "variance_flag", - metadata: { - account: v.account, - amount: v.amount, - direction: v.direction, - window_id: ctx.window.id, - unreconciled_count: data.unreconciled_count ?? null, - }, - }); + const hasIssues = + data.unreconciled_count > 0 || + (data.new_variances?.length ?? 0) > 0 || + (data.approaching_deadlines?.length ?? 0) > 0; + + if (!hasIssues) return; + + const parts: string[] = []; + if (data.unreconciled_count > 0) { + parts.push(`${data.unreconciled_count} unreconciled transactions`); + } + if (data.new_variances?.length) { + parts.push(`Variances: ${data.new_variances.join("; ")}`); } + if (data.approaching_deadlines?.length) { + parts.push(`Deadlines: ${data.approaching_deadlines.join("; ")}`); + } + + await client.knowledge.save({ + entity_ids: ctx.entities.map((e) => e.id), + content: parts.join("\n"), + semantic_type: "reconciliation_alert", + metadata: { + window_id: ctx.window.id, + unreconciled_count: data.unreconciled_count, + variance_count: data.new_variances?.length ?? 0, + }, + }); }; diff --git a/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts b/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts index 2a8a98ca6..434f7cbd8 100644 --- a/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts +++ b/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts @@ -2,11 +2,10 @@ * Reaction for the `inbound-triage` watcher. * * Fires every 2h after the watcher LLM extracts new and enriched leads from - * GitHub/X/HN signals. The script writes a `lead_interaction` event per - * recommended action so the next digest can count them — the watcher itself - * already creates the `lead` rows, so we don't duplicate that here. + * GitHub/X/HN signals. Persists a `lead_interaction` event per run so the + * next digest can count them. */ -import type { ReactionContext } from "@lobu/connector-sdk"; +import type { ReactionClient, ReactionContext } from "@lobu/connector-sdk"; interface TriageData { new_leads?: Array<{ @@ -19,10 +18,11 @@ interface TriageData { notable?: boolean; } -export default async (ctx: ReactionContext, client: any): Promise => { +export default async ( + ctx: ReactionContext, + client: ReactionClient, +): Promise => { const data = ctx.extracted_data as TriageData; - // Nothing notable → nothing to persist. The watcher's prompt is explicit - // about not manufacturing noise; we mirror that here. if (!data.notable) return; const actions = data.recommended_actions ?? []; diff --git a/examples/sales/models/reactions/account-health-monitor.reaction.ts b/examples/sales/models/reactions/account-health-monitor.reaction.ts index 007587f9d..555c8a26c 100644 --- a/examples/sales/models/reactions/account-health-monitor.reaction.ts +++ b/examples/sales/models/reactions/account-health-monitor.reaction.ts @@ -5,7 +5,7 @@ * persist a `health_change` event so the renewal-risk view + weekly digest * have a stable record without re-extracting from the CRM stream. */ -import type { ReactionContext } from "@lobu/connector-sdk"; +import type { ReactionClient, ReactionContext } from "@lobu/connector-sdk"; interface HealthData { account_changes?: Array<{ @@ -18,13 +18,14 @@ interface HealthData { const RISK_ORDER = { low: 0, medium: 1, high: 2 } as const; -export default async (ctx: ReactionContext, client: any): Promise => { +export default async ( + ctx: ReactionContext, + client: ReactionClient, +): Promise => { const data = ctx.extracted_data as HealthData; const changes = data.account_changes ?? []; - // Only persist *worsening* transitions — improvements are visible in the - // CRM stream and don't need a durable flag. const escalations = changes.filter( - (c) => RISK_ORDER[c.current_risk] > RISK_ORDER[c.previous_risk] + (c) => RISK_ORDER[c.current_risk] > RISK_ORDER[c.previous_risk], ); if (escalations.length === 0) return; diff --git a/examples/starter/models/reactions/daily-summary.reaction.ts b/examples/starter/models/reactions/daily-summary.reaction.ts index dbd0c48c0..db59c4227 100644 --- a/examples/starter/models/reactions/daily-summary.reaction.ts +++ b/examples/starter/models/reactions/daily-summary.reaction.ts @@ -1,19 +1,13 @@ /** * Reaction for the `daily-summary` watcher. * - * This runs AFTER the watcher's LLM has extracted structured data. - * `ctx.extracted_data` is the JSON matching the `extraction_schema` in schema.yaml. + * This runs AFTER the watcher's LLM fills the `extraction_schema` from schema.yaml. + * `ctx.extracted_data` is the typed JSON the LLM produced. + * `client` dispatches calls to the Lobu knowledge graph and entity store. * - * The `client` gives you: - * client.knowledge.save({...}) — write a new event to the knowledge graph - * client.knowledge.search({...}) — search existing events - * client.entities.create({...}) — create/update entities - * client.entities.list({...}) — query entities - * - * @param ctx — watcher context (extracted data, entities, window metadata) - * @param client — Lobu API client for reading/writing the knowledge graph + * Signature: export default async (ctx, client, params?) => void */ -import type { ReactionContext } from "@lobu/connector-sdk"; +import type { ReactionClient, ReactionContext } from "@lobu/connector-sdk"; interface TopicSummary { name: string; @@ -25,12 +19,14 @@ interface DailySummaryData { topics: TopicSummary[]; } -export default async (ctx: ReactionContext, client: any): Promise => { +export default async ( + ctx: ReactionContext, + client: ReactionClient, +): Promise => { const data = ctx.extracted_data as DailySummaryData; if (data.topics.length === 0) return; - // Persist each topic as a knowledge event so the agent can cite it later. await client.knowledge.save({ entity_ids: ctx.entities.map((e) => e.id), content: data.topics @@ -40,7 +36,8 @@ export default async (ctx: ReactionContext, client: any): Promise => { metadata: { window_id: ctx.window.id, topic_count: data.topics.length, - high_importance: data.topics.filter((t) => t.importance === "high").length, + high_importance: data.topics.filter((t) => t.importance === "high") + .length, }, }); }; diff --git a/packages/connector-sdk/src/index.ts b/packages/connector-sdk/src/index.ts index 0116957de..b9f922b75 100644 --- a/packages/connector-sdk/src/index.ts +++ b/packages/connector-sdk/src/index.ts @@ -137,6 +137,16 @@ export { export type { BrowserNetworkConfig, BrowserNetworkResult } from './browser-network.js'; export { browserNetworkSync } from './browser-network.js'; export type { ReactionContext } from './reaction-sdk.js'; +export type { ReactionClient } from './reaction-client-types.js'; +export type { + EntityCreateInput, + EntityLinkInput, + EntityListFilter, + EntityUpdateInput, + KnowledgeReadInput, + KnowledgeSaveInput, + KnowledgeSearchInput, +} from './reaction-client-types.js'; export type { Env } from './types.js'; // ============================================================================= diff --git a/packages/connector-sdk/src/reaction-client-types.ts b/packages/connector-sdk/src/reaction-client-types.ts new file mode 100644 index 000000000..80aae7d08 --- /dev/null +++ b/packages/connector-sdk/src/reaction-client-types.ts @@ -0,0 +1,133 @@ +/** + * Type declarations for watcher reaction scripts. + * + * Reaction scripts run inside an isolated-vm sandbox where `client` is a + * Proxy that dispatches calls to the host. You can't import real packages + * at runtime, but you CAN use these types for editor autocompletion. + * + * Usage: + * import type { ReactionClient, ReactionContext } from "@lobu/connector-sdk"; + * + * export default async (ctx: ReactionContext, client: ReactionClient) => { + * await client.knowledge.save({ content: "...", semantic_type: "digest" }); + * }; + */ +import type { ReactionContext } from "./reaction-sdk.js"; + +export type { ReactionContext }; + +// ── Knowledge ──────────────────────────────────────────────────────────────── + +export interface KnowledgeSearchInput { + query?: string; + entity_type?: string; + entity_id?: number; + fuzzy?: boolean; + min_similarity?: number; + limit?: number; +} + +export interface KnowledgeSaveInput { + entity_ids?: number[]; + content: string; + semantic_type: string; + metadata?: Record; + title?: string; + slug?: string; +} + +export interface KnowledgeReadInput { + content_id?: number; + watcher_id?: number; + since?: string; + until?: string; + limit?: number; + entity_ids?: number[]; +} + +// ── Entities ───────────────────────────────────────────────────────────────── + +export interface EntityCreateInput { + type: string; + name: string; + slug?: string; + content?: string; + parent_id?: number; + metadata?: Record; +} + +export interface EntityUpdateInput { + entity_id: number; + name?: string; + slug?: string; + content?: string; + metadata?: Record; +} + +export interface EntityLinkInput { + from_entity_id: number; + to_entity_id: number; + relationship_type_slug: string; + metadata?: Record; +} + +export interface EntityListFilter { + entity_type?: string; + search?: string; + limit?: number; + offset?: number; + sort_by?: string; + sort_order?: "asc" | "desc"; +} + +// ── Client ─────────────────────────────────────────────────────────────────── + +/** + * The client object available in reaction scripts. + * + * `client.knowledge` — read/write/search knowledge events + * `client.entities` — CRUD entities and relationships + * `client.query` — raw SQL (results as JSON rows) + * `client.log` — structured logging (appears in watcher run logs) + */ +export interface ReactionClient { + knowledge: { + search(input: KnowledgeSearchInput): Promise; + save(input: KnowledgeSaveInput): Promise<{ event_id: number }>; + read(input: KnowledgeReadInput): Promise; + delete(input: number | { event_id?: number; event_ids?: number[]; reason?: string }): Promise; + }; + + entities: { + list(filter?: EntityListFilter): Promise; + get(entity_id: number): Promise; + create(input: EntityCreateInput): Promise<{ id: number }>; + update(input: EntityUpdateInput): Promise; + delete(entity_id: number, options?: { force_delete_tree?: boolean }): Promise; + link(input: EntityLinkInput): Promise; + unlink(input: { + from_entity_id: number; + to_entity_id: number; + relationship_type_slug: string; + }): Promise; + updateLink(input: { + from_entity_id: number; + to_entity_id: number; + relationship_type_slug: string; + metadata?: Record; + }): Promise; + listLinks(input: { + entity_id: number; + relationship_type_slug?: string; + limit?: number; + offset?: number; + }): Promise; + search(query: string, options?: { limit?: number }): Promise; + }; + + /** Run a read-only SQL query against the org's Postgres. */ + query(sql: string): Promise; + + /** Structured log — appears in the watcher run output. */ + log(message: string, data?: Record): void; +} From 2544d29b0a99edd492619563627ae30ac2f88dbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 16:16:17 +0100 Subject: [PATCH 5/8] refactor(examples): remove stub starter, make lobu-crm the reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The starter example didn't run end-to-end — no connectors, no real data flow. Better to have one real example with great docs than a fake one. - Deletes examples/starter/ (was just a stripped-down stub) - Updates lobu-crm/funnel-form.connector.ts to use generic ConnectorRuntime - Adds lobu-crm/README.md explaining the structure and key files - Existing reaction scripts already use ReactionClient from prior commit --- .../reconciliation-monitor.reaction.ts | 2 +- examples/lobu-crm/README.md | 37 ++++++ .../connectors/funnel-form.connector.ts | 21 +++- .../reactions/inbound-triage.reaction.ts | 2 +- .../account-health-monitor.reaction.ts | 4 +- examples/starter/agents/starter/prompt.md | 3 - examples/starter/lobu.toml | 30 ----- .../reactions/daily-summary.reaction.ts | 43 ------- examples/starter/models/schema.yaml | 111 ------------------ 9 files changed, 56 insertions(+), 197 deletions(-) create mode 100644 examples/lobu-crm/README.md delete mode 100644 examples/starter/agents/starter/prompt.md delete mode 100644 examples/starter/lobu.toml delete mode 100644 examples/starter/models/reactions/daily-summary.reaction.ts delete mode 100644 examples/starter/models/schema.yaml diff --git a/examples/finance/models/reactions/reconciliation-monitor.reaction.ts b/examples/finance/models/reactions/reconciliation-monitor.reaction.ts index 3078b181a..5ee600c8e 100644 --- a/examples/finance/models/reactions/reconciliation-monitor.reaction.ts +++ b/examples/finance/models/reactions/reconciliation-monitor.reaction.ts @@ -15,7 +15,7 @@ interface ReconciliationData { export default async ( ctx: ReactionContext, - client: ReactionClient, + client: ReactionClient ): Promise => { const data = ctx.extracted_data as ReconciliationData; diff --git a/examples/lobu-crm/README.md b/examples/lobu-crm/README.md new file mode 100644 index 000000000..a5f31c42a --- /dev/null +++ b/examples/lobu-crm/README.md @@ -0,0 +1,37 @@ +# lobu-crm — Reference example + +A funnel CRM agent that tracks GitHub stars, X mentions, HN posts, and demo-form submissions. +Use this as a starting point for new projects — it shows every Lobu concept in one place. + +## Structure + +``` +lobu-crm/ +├── lobu.toml # Agent + memory config +├── connectors/ +│ ├── github.yaml # Built-in connector (just config) +│ ├── x.yaml # Built-in connector +│ ├── hackernews.yaml # Built-in connector +│ ├── changelog-watch.yaml # Built-in connector (website) +│ ├── funnel-form.yaml # Custom connector manifest +│ └── funnel-form.connector.ts # Custom connector implementation +├── models/ +│ ├── schema.yaml # Entities, relationships, watchers +│ └── reactions/ +│ ├── inbound-triage.reaction.ts # Runs after watcher extraction +│ └── funnel-digest.reaction.ts # Runs after watcher extraction +└── agents/crm/ + ├── SOUL.md # Agent personality + ├── IDENTITY.md # Agent identity + ├── USER.md # User context + └── skills/crm-ops/SKILL.md # Agent skill +``` + +## Key files to read + +| File | What it shows | +|------|--------------| +| `lobu.toml` | Agent config, providers, network allowlist | +| `models/schema.yaml` | Entity definitions + watcher cron + extraction schema | +| `connectors/funnel-form.connector.ts` | Custom connector with typed checkpoint + config | +| `models/reactions/inbound-triage.reaction.ts` | Reaction script with typed `ReactionClient` | diff --git a/examples/lobu-crm/connectors/funnel-form.connector.ts b/examples/lobu-crm/connectors/funnel-form.connector.ts index 51c841791..ce6814e70 100644 --- a/examples/lobu-crm/connectors/funnel-form.connector.ts +++ b/examples/lobu-crm/connectors/funnel-form.connector.ts @@ -1,12 +1,21 @@ -// biome-ignore-all format: stays compact for the landing-page code panel -import { ConnectorRuntime, type SyncContext } from "@lobu/connector-sdk"; +import { ConnectorRuntime, type SyncContext, type SyncResult } from "@lobu/connector-sdk"; + +interface FunnelCheckpoint { + seen_ids: string[]; +} + +interface FunnelConfig { + endpoint: string; +} /** * Funnel-form connector — polls a small JSON API (`config.endpoint` returns * `{ submissions: [...] }`) and emits one event per new submission. Dedup * via a rolling checkpoint of seen IDs. Auto-discovered by `lobu apply`. + * + * Demonstrates: ConnectorRuntime with typed checkpoint + config. */ -export default class FunnelFormConnector extends ConnectorRuntime { +export default class FunnelFormConnector extends ConnectorRuntime { readonly definition = { key: "funnel-form", name: "Funnel form", @@ -15,9 +24,9 @@ export default class FunnelFormConnector extends ConnectorRuntime { feeds: { submissions: { key: "submissions", name: "Form submissions" } }, }; - async sync(ctx: SyncContext) { - const seen = new Set((ctx.checkpoint as any)?.seen_ids ?? []); - const subs: any[] = (await (await fetch(String(ctx.config.endpoint))).json()).submissions ?? []; + async sync(ctx: SyncContext): Promise> { + const seen = new Set(ctx.checkpoint?.seen_ids ?? []); + const subs: any[] = (await (await fetch(ctx.config.endpoint)).json()).submissions ?? []; const fresh = subs.filter((s) => s?.id && !seen.has(s.id)); return { events: fresh.map((s) => ({ diff --git a/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts b/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts index 434f7cbd8..04aa30db8 100644 --- a/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts +++ b/examples/lobu-crm/models/reactions/inbound-triage.reaction.ts @@ -20,7 +20,7 @@ interface TriageData { export default async ( ctx: ReactionContext, - client: ReactionClient, + client: ReactionClient ): Promise => { const data = ctx.extracted_data as TriageData; if (!data.notable) return; diff --git a/examples/sales/models/reactions/account-health-monitor.reaction.ts b/examples/sales/models/reactions/account-health-monitor.reaction.ts index 555c8a26c..b119bc22c 100644 --- a/examples/sales/models/reactions/account-health-monitor.reaction.ts +++ b/examples/sales/models/reactions/account-health-monitor.reaction.ts @@ -20,12 +20,12 @@ const RISK_ORDER = { low: 0, medium: 1, high: 2 } as const; export default async ( ctx: ReactionContext, - client: ReactionClient, + client: ReactionClient ): Promise => { const data = ctx.extracted_data as HealthData; const changes = data.account_changes ?? []; const escalations = changes.filter( - (c) => RISK_ORDER[c.current_risk] > RISK_ORDER[c.previous_risk], + (c) => RISK_ORDER[c.current_risk] > RISK_ORDER[c.previous_risk] ); if (escalations.length === 0) return; diff --git a/examples/starter/agents/starter/prompt.md b/examples/starter/agents/starter/prompt.md deleted file mode 100644 index 8d54cd43d..000000000 --- a/examples/starter/agents/starter/prompt.md +++ /dev/null @@ -1,3 +0,0 @@ -You are a helpful assistant that summarizes new events and tracks topics over time. - -When asked about recent activity, search the knowledge graph for `daily_digest` events and synthesize a concise answer. diff --git a/examples/starter/lobu.toml b/examples/starter/lobu.toml deleted file mode 100644 index 7dbca043f..000000000 --- a/examples/starter/lobu.toml +++ /dev/null @@ -1,30 +0,0 @@ -# lobu.toml — Starter agent -# The minimal config to get a proactive agent running with watchers and reactions. -# -# Project structure: -# lobu.toml ← you are here -# models/ -# schema.yaml ← entities, relationships, watchers -# reactions/ -# daily-summary.reaction.ts ← reaction script (runs after watcher extracts) -# agents/ -# starter/ -# prompt.md ← agent system prompt - -[agents.starter] -name = "starter" -description = "A minimal starter agent that summarizes new events" -dir = "./agents/starter" - -[[agents.starter.providers]] -id = "anthropic" -model = "claude/sonnet-4-5" -key = "$ANTHROPIC_API_KEY" - -[memory] -enabled = true -org = "starter" -name = "Starter" -description = "Minimal starter project" -models = "./models" -data = "./data" diff --git a/examples/starter/models/reactions/daily-summary.reaction.ts b/examples/starter/models/reactions/daily-summary.reaction.ts deleted file mode 100644 index db59c4227..000000000 --- a/examples/starter/models/reactions/daily-summary.reaction.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Reaction for the `daily-summary` watcher. - * - * This runs AFTER the watcher's LLM fills the `extraction_schema` from schema.yaml. - * `ctx.extracted_data` is the typed JSON the LLM produced. - * `client` dispatches calls to the Lobu knowledge graph and entity store. - * - * Signature: export default async (ctx, client, params?) => void - */ -import type { ReactionClient, ReactionContext } from "@lobu/connector-sdk"; - -interface TopicSummary { - name: string; - summary: string; - importance: "low" | "medium" | "high"; -} - -interface DailySummaryData { - topics: TopicSummary[]; -} - -export default async ( - ctx: ReactionContext, - client: ReactionClient, -): Promise => { - const data = ctx.extracted_data as DailySummaryData; - - if (data.topics.length === 0) return; - - await client.knowledge.save({ - entity_ids: ctx.entities.map((e) => e.id), - content: data.topics - .map((t) => `**${t.name}** (${t.importance}): ${t.summary}`) - .join("\n"), - semantic_type: "daily_digest", - metadata: { - window_id: ctx.window.id, - topic_count: data.topics.length, - high_importance: data.topics.filter((t) => t.importance === "high") - .length, - }, - }); -}; diff --git a/examples/starter/models/schema.yaml b/examples/starter/models/schema.yaml deleted file mode 100644 index 5489fce71..000000000 --- a/examples/starter/models/schema.yaml +++ /dev/null @@ -1,111 +0,0 @@ -# schema.yaml — The knowledge graph definition -# -# Three sections: -# 1. entities — What things exist (each becomes a table row with metadata) -# 2. relationships — How entities connect (directed edges with metadata) -# 3. watchers — Scheduled LLM jobs that extract structured data from events -# -# After a watcher runs, its `reaction_script` fires with the extracted data -# so you can persist enriched entities back to the knowledge graph. - -version: 2 - -# ── Entities ────────────────────────────────────────────────────────────────── -# Each entity gets: id, name, entity_type, metadata (your schema), timestamps. -# The `metadata_schema` is JSON Schema — Lobu uses it for validation and UI. - -entities: - - slug: topic - name: Topic - description: A subject the agent tracks — e.g. a project, a person, a company - icon: hash - color: "#3B82F6" - metadata_schema: - type: object - required: [name] - properties: - name: - type: string - x-table-label: Name - x-table-column: true - summary: - type: string - description: Latest one-line summary from the watcher - x-table-label: Summary - x-table-column: true - last_seen: - type: string - format: date-time - x-table-label: Last seen - x-table-column: true - status: - type: string - enum: [active, stale, archived] - default: active - x-table-label: Status - x-table-column: true - -# ── Relationships ───────────────────────────────────────────────────────────── -# Optional. Directed edges between entities. Each gets its own metadata_schema. - -relationships: [] - -# ── Watchers ────────────────────────────────────────────────────────────────── -# A watcher is a cron-scheduled LLM call that: -# 1. Reads recent events (from connectors or prior watchers) -# 2. Extracts structured data matching `extraction_schema` -# 3. Passes the extracted data to `reaction_script` for side effects -# -# Fields: -# slug — unique ID for this watcher -# agent — which agent runs the LLM (must match lobu.toml) -# name — human-readable label -# schedule — cron expression (UTC) -# prompt — instructions for the LLM -# extraction_schema — JSON Schema the LLM must fill -# reaction_script — (optional) TypeScript that runs after extraction - -watchers: - # ── Example: Daily digest watcher ─────────────────────────────────────── - # Runs every morning at 9am. Reads new events, produces a summary. - # The reaction script persists the summary as topic entities. - - - slug: daily-summary - agent: starter - name: Daily summary - schedule: "0 9 * * *" - notification_priority: normal - tags: [digest, daily] - min_cooldown_seconds: 3600 - reaction_script: ./reactions/daily-summary.reaction.ts - - prompt: | - Summarize the most important new events since the last run. - - For each notable topic or theme: - 1. Give it a short name - 2. Write a one-line summary - 3. Rate its importance (low/medium/high) - - Skip noise (marketing emails, system notifications). - If nothing notable happened, return empty arrays. - - extraction_schema: - type: object - required: [topics] - properties: - topics: - type: array - items: - type: object - required: [name, summary, importance] - properties: - name: - type: string - description: Short topic name - summary: - type: string - description: One-line summary of what's new - importance: - type: string - enum: [low, medium, high] From e19383bda6362e5fcb234b435dc1fbdbc6576486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 16:38:11 +0100 Subject: [PATCH 6/8] feat(landing): vary snippet sources, add connector/platform doc links Sections now pull from different examples to show diversity: Connectors: ecommerce/stripe-charges (unchanged) Memory: sales/schema.yaml (unchanged) Watchers: leadership/board-action-tracker (was sales/account-health) Reactions: finance/reconciliation-monitor (was sales/account-health) Agents: lobu-crm/lobu.toml (was sales) Skills: office-bot/deliveroo-order (unchanged) Connectors section: added dotted-underline links to GitHub, Linear, Slack, Telegram, Discord, WhatsApp, X doc pages. Agents section: chat surface names (Slack, Telegram, Discord, Teams, WhatsApp) now link to their channel docs. Watchers section: added separate links for watchers guide and reaction SDK docs. --- .../connectors/funnel-form.connector.ts | 26 ++++++++++---- .../landing/scripts/gen-landing-snippets.ts | 8 ++--- .../landing/src/components/LandingPage.tsx | 34 +++++++++++++++---- .../src/generated/landing-snippets.json | 14 ++++---- 4 files changed, 58 insertions(+), 24 deletions(-) diff --git a/examples/lobu-crm/connectors/funnel-form.connector.ts b/examples/lobu-crm/connectors/funnel-form.connector.ts index ce6814e70..5441e7dda 100644 --- a/examples/lobu-crm/connectors/funnel-form.connector.ts +++ b/examples/lobu-crm/connectors/funnel-form.connector.ts @@ -1,4 +1,8 @@ -import { ConnectorRuntime, type SyncContext, type SyncResult } from "@lobu/connector-sdk"; +import { + ConnectorRuntime, + type SyncContext, + type SyncResult, +} from "@lobu/connector-sdk"; interface FunnelCheckpoint { seen_ids: string[]; @@ -15,7 +19,10 @@ interface FunnelConfig { * * Demonstrates: ConnectorRuntime with typed checkpoint + config. */ -export default class FunnelFormConnector extends ConnectorRuntime { +export default class FunnelFormConnector extends ConnectorRuntime< + FunnelCheckpoint, + FunnelConfig +> { readonly definition = { key: "funnel-form", name: "Funnel form", @@ -24,21 +31,28 @@ export default class FunnelFormConnector extends ConnectorRuntime): Promise> { + async sync( + ctx: SyncContext + ): Promise> { const seen = new Set(ctx.checkpoint?.seen_ids ?? []); - const subs: any[] = (await (await fetch(ctx.config.endpoint)).json()).submissions ?? []; + const subs: any[] = + (await (await fetch(ctx.config.endpoint)).json()).submissions ?? []; const fresh = subs.filter((s) => s?.id && !seen.has(s.id)); return { events: fresh.map((s) => ({ origin_id: s.id, origin_type: "form_submission", - title: s.company ? `Demo request — ${s.company}` : `Demo request — ${s.name ?? s.email ?? s.id}`, + title: s.company + ? `Demo request — ${s.company}` + : `Demo request — ${s.name ?? s.email ?? s.id}`, payload_text: s.message ?? "", author_name: s.name, occurred_at: s.submitted_at ? new Date(s.submitted_at) : new Date(), metadata: { company: s.company, email: s.email }, })), - checkpoint: { seen_ids: [...seen, ...fresh.map((s) => s.id)].slice(-1000) }, + checkpoint: { + seen_ids: [...seen, ...fresh.map((s) => s.id)].slice(-1000), + }, }; } diff --git a/packages/landing/scripts/gen-landing-snippets.ts b/packages/landing/scripts/gen-landing-snippets.ts index c92b4d221..f1f108778 100644 --- a/packages/landing/scripts/gen-landing-snippets.ts +++ b/packages/landing/scripts/gen-landing-snippets.ts @@ -36,12 +36,12 @@ const PINNED = { path: "connectors/stripe-charges.connector.ts", }, memorySchema: { slug: "sales", path: "models/schema.yaml" }, - watcher: { slug: "sales", path: "models/schema.yaml" }, + watcher: { slug: "leadership", path: "models/schema.yaml" }, reaction: { - slug: "sales", - path: "models/reactions/account-health-monitor.reaction.ts", + slug: "finance", + path: "models/reactions/reconciliation-monitor.reaction.ts", }, - agentToml: { slug: "sales", path: "lobu.toml" }, + agentToml: { slug: "lobu-crm", path: "lobu.toml" }, skill: { slug: "office-bot", path: "agents/food-ordering/skills/deliveroo-order/SKILL.md", diff --git a/packages/landing/src/components/LandingPage.tsx b/packages/landing/src/components/LandingPage.tsx index 5e2c4a809..a562dc0c8 100644 --- a/packages/landing/src/components/LandingPage.tsx +++ b/packages/landing/src/components/LandingPage.tsx @@ -637,6 +637,16 @@ function ConnectorsSection() { Read the connector-sdk docs +
+ Built-in: + GitHub + Linear + Slack + Telegram + Discord + WhatsApp + X +
} code={ @@ -753,9 +763,14 @@ function WatchersSection() { , ]} /> - - Read the watchers guide - +
+ + Watchers guide + + + Reaction SDK docs + +
} code={ @@ -771,7 +786,7 @@ function WatchersSection() { badge="optional · typescript" snippet={snippets.reaction} /> - + } /> @@ -874,8 +889,13 @@ function AgentsSection() { - Every chat surface — Slack, Telegram, Discord, Teams, - WhatsApp, HTTP, MCP. Same{" "} + Every chat surface —{" "} + Slack,{" "} + Telegram,{" "} + Discord,{" "} + Teams,{" "} + WhatsApp,{" "} + HTTP, MCP. Same{" "} lobu.toml. , <> @@ -900,7 +920,7 @@ function AgentsSection() { code={
- +
} /> diff --git a/packages/landing/src/generated/landing-snippets.json b/packages/landing/src/generated/landing-snippets.json index c58515e29..8e3c94fc9 100644 --- a/packages/landing/src/generated/landing-snippets.json +++ b/packages/landing/src/generated/landing-snippets.json @@ -12,21 +12,21 @@ "language": "yaml" }, "watcher": { - "code": "watchers:\n - slug: account-health-monitor\n agent: sales\n schedule: 0 */12 * * *\n prompt: \"Poll CRM data for tracked accounts. Track expansion progress, risk level changes, and renewal timeline.\"\n extraction_schema:\n type: object\n required: [risk_level, expansion_status, renewal_blockers, activity_delta]", + "code": "watchers:\n - slug: board-action-tracker\n agent: leadership\n schedule: 0 8 * * *\n prompt: \"Track board action items: check task delivery status, blocker resolution progress, and approaching deadlines for the next board packet.\"\n extraction_schema:\n type: object\n required: [action_items, blocked_items, deadlines_approaching, completion_status]", "path": "models/schema.yaml", - "githubUrl": "https://github.com/lobu-ai/lobu/blob/main/examples/sales/models/schema.yaml", + "githubUrl": "https://github.com/lobu-ai/lobu/blob/main/examples/leadership/models/schema.yaml", "language": "yaml" }, "reaction": { - "code": "/**\n * Reaction for the `account-health-monitor` watcher.\n *\n * When the watcher detects a material risk-level change on a tracked account,\n * persist a `health_change` event so the renewal-risk view + weekly digest\n * have a stable record without re-extracting from the CRM stream.\n */\nimport type { ReactionContext } from \"@lobu/connector-sdk\";\n\ninterface HealthData {\n account_changes?: Array<{\n account: string;\n previous_risk: \"low\" | \"medium\" | \"high\";\n current_risk: \"low\" | \"medium\" | \"high\";\n signals: string[];\n }>;\n}\n\nconst RISK_ORDER = { low: 0, medium: 1, high: 2 } as const;\n\nexport default async (ctx: ReactionContext, client: any): Promise => {\n const data = ctx.extracted_data as HealthData;\n const changes = data.account_changes ?? [];\n // Only persist *worsening* transitions — improvements are visible in the\n // CRM stream and don't need a durable flag.\n const escalations = changes.filter(\n (c) => RISK_ORDER[c.current_risk] > RISK_ORDER[c.previous_risk]\n );\n if (escalations.length === 0) return;\n\n for (const c of escalations) {\n await client.knowledge.save({\n entity_ids: ctx.entities.map((e) => e.id),\n content: `Account ${c.account}: risk ${c.previous_risk} → ${c.current_risk}\\nSignals: ${c.signals.join(\"; \")}`,\n semantic_type: \"health_change\",\n metadata: {\n account: c.account,\n from: c.previous_risk,\n to: c.current_risk,\n window_id: ctx.window.id,\n },\n });\n }\n};", - "path": "models/reactions/account-health-monitor.reaction.ts", - "githubUrl": "https://github.com/lobu-ai/lobu/blob/main/examples/sales/models/reactions/account-health-monitor.reaction.ts", + "code": "/**\n * Reaction for the `reconciliation-monitor` watcher.\n *\n * Persists variance events when unreconciled transactions or new anomalies\n * are detected during the daily reconciliation pass.\n */\nimport type { ReactionClient, ReactionContext } from \"@lobu/connector-sdk\";\n\ninterface ReconciliationData {\n unreconciled_count: number;\n new_variances: string[];\n approaching_deadlines: string[];\n payment_risks?: string[];\n}\n\nexport default async (\n ctx: ReactionContext,\n client: ReactionClient\n): Promise => {\n const data = ctx.extracted_data as ReconciliationData;\n\n const hasIssues =\n data.unreconciled_count > 0 ||\n (data.new_variances?.length ?? 0) > 0 ||\n (data.approaching_deadlines?.length ?? 0) > 0;\n\n if (!hasIssues) return;\n\n const parts: string[] = [];\n if (data.unreconciled_count > 0) {\n parts.push(`${data.unreconciled_count} unreconciled transactions`);\n }\n if (data.new_variances?.length) {\n parts.push(`Variances: ${data.new_variances.join(\"; \")}`);\n }\n if (data.approaching_deadlines?.length) {\n parts.push(`Deadlines: ${data.approaching_deadlines.join(\"; \")}`);\n }\n\n await client.knowledge.save({\n entity_ids: ctx.entities.map((e) => e.id),\n content: parts.join(\"\\n\"),\n semantic_type: \"reconciliation_alert\",\n metadata: {\n window_id: ctx.window.id,\n unreconciled_count: data.unreconciled_count,\n variance_count: data.new_variances?.length ?? 0,\n },\n });\n};", + "path": "models/reactions/reconciliation-monitor.reaction.ts", + "githubUrl": "https://github.com/lobu-ai/lobu/blob/main/examples/finance/models/reactions/reconciliation-monitor.reaction.ts", "language": "typescript" }, "agentToml": { - "code": "[agents.sales]\nname = \"sales\"\n[[agents.sales.providers]]\nid = \"anthropic\"\nmodel = \"claude/sonnet-4-5\"\nkey = \"$ANTHROPIC_API_KEY\"\n[memory]\nenabled = true\norg = \"sales\"\nmodels = \"./models\"\ndata = \"./data\"", + "code": "[agents.crm]\nname = \"crm\"\n[[agents.crm.providers]]\nid = \"z-ai\"\nmodel = \"z-ai/glm-4.7\"\nkey = \"$Z_AI_API_KEY\"\n[memory]\nenabled = true\norg = \"lobu-crm\"\nmodels = \"./models\"\ndata = \"./data\"", "path": "lobu.toml", - "githubUrl": "https://github.com/lobu-ai/lobu/blob/main/examples/sales/lobu.toml", + "githubUrl": "https://github.com/lobu-ai/lobu/blob/main/examples/lobu-crm/lobu.toml", "language": "toml" }, "skill": { From 7b69f177c7b5a55398fcf2aee04f909def091eaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Emre=20Kabakc=C4=B1?= Date: Wed, 20 May 2026 22:26:39 +0100 Subject: [PATCH 7/8] feat(landing): per-use-case snippet tabs, drop asciinema, simplify nav - per-use-case connector/watcher/memory snippets via tab strip (gen-connectors + simple-icons logo wall) - architecture diagram: Events in/Entities out/Agents on top, per-domain egress judge example - remove asciinema player + casts; em-dash sweep across marketing copy - nav: drop Solutions menu, promote Docs to top level - remove dead /memory /skills stubs, add #memory/#skills section anchors --- AGENTS.md | 1 + bun.lock | 11 +- .../skills/deliveroo-order/SKILL.md | 14 +- examples/office-bot/lobu.toml | 9 +- packages/landing/package.json | 5 +- .../asciinema-player-ui.min.js | 1 - .../asciinema-player-worker.min.js | 1 - .../asciinema-player/asciinema-player.css | 711 ------------------ .../asciinema-player/asciinema-player.min.js | 1 - packages/landing/public/casts/claude.cast | 457 ----------- packages/landing/scripts/gen-connectors.ts | 110 +++ .../landing/scripts/gen-landing-snippets.ts | 135 +++- packages/landing/src/chat-scenarios.ts | 12 +- .../src/components/ArchitectureDiagram.tsx | 169 ++--- packages/landing/src/components/CodeBlock.tsx | 8 +- .../landing/src/components/LandingPage.tsx | 467 +++++------- packages/landing/src/components/Nav.tsx | 58 +- .../src/components/ProvidersRegistryTable.tsx | 8 +- .../landing/src/components/SampleChat.tsx | 6 +- .../src/components/ServerlessSection.tsx | 2 +- .../components/connect-from/TryItSection.tsx | 2 +- packages/landing/src/connect-from-config.ts | 8 +- .../landing/src/generated/connectors.json | 164 ++++ .../src/generated/landing-snippets.json | 166 +++- .../landing/src/generated/use-case-models.ts | 82 +- packages/landing/src/layouts/BaseLayout.astro | 11 +- .../landing/src/pages/for/[useCase].astro | 2 - packages/landing/src/pages/index.astro | 2 +- packages/landing/src/pages/memory.astro | 17 - .../src/pages/reference/api-reference.astro | 6 +- .../src/pages/serverless-openclaw.astro | 2 +- packages/landing/src/pages/skills.astro | 17 - packages/landing/src/styles/theme-tokens.ts | 6 +- packages/landing/src/use-case-showcases.ts | 97 ++- 34 files changed, 973 insertions(+), 1795 deletions(-) delete mode 100644 packages/landing/public/asciinema-player/asciinema-player-ui.min.js delete mode 100644 packages/landing/public/asciinema-player/asciinema-player-worker.min.js delete mode 100644 packages/landing/public/asciinema-player/asciinema-player.css delete mode 100644 packages/landing/public/asciinema-player/asciinema-player.min.js delete mode 100644 packages/landing/public/casts/claude.cast create mode 100644 packages/landing/scripts/gen-connectors.ts create mode 100644 packages/landing/src/generated/connectors.json delete mode 100644 packages/landing/src/pages/memory.astro delete mode 100644 packages/landing/src/pages/skills.astro diff --git a/AGENTS.md b/AGENTS.md index efdb6f5a0..6020a2148 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,6 +14,7 @@ - TypeScript sources in `packages/*/src`, tests in `packages/*/src/__tests__`. - Always prefer `bun` over `npm`. - When fixing unused-parameter errors, delete the parameter rather than prefixing with `_`. +- Landing page copy (`packages/landing`): never use em dashes (`—`) in user-facing text. Rephrase with commas, periods, or restructure the sentence. ### Submodules `packages/owletto` is a submodule of `lobu-ai/owletto`. Push the submodule change to a reachable branch first, then bump the pointer in the parent — an unreachable SHA breaks production cloning. diff --git a/bun.lock b/bun.lock index 53cb994b7..ae864b15e 100644 --- a/bun.lock +++ b/bun.lock @@ -234,6 +234,7 @@ }, "devDependencies": { "@tailwindcss/vite": "^4.1.8", + "simple-icons": "^16.20.0", "tailwindcss": "^4.1.8", "typescript": "^5.8.3", }, @@ -3771,7 +3772,7 @@ "tailwind-merge": ["tailwind-merge@3.6.0", "", {}, "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w=="], - "tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], + "tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], @@ -4159,6 +4160,8 @@ "@lobu/core/@sentry/node": ["@sentry/node@10.50.0", "", { "dependencies": { "@fastify/otel": "0.18.0", "@opentelemetry/api": "^1.9.1", "@opentelemetry/core": "^2.6.1", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/instrumentation-amqplib": "0.61.0", "@opentelemetry/instrumentation-connect": "0.57.0", "@opentelemetry/instrumentation-dataloader": "0.31.0", "@opentelemetry/instrumentation-fs": "0.33.0", "@opentelemetry/instrumentation-generic-pool": "0.57.0", "@opentelemetry/instrumentation-graphql": "0.62.0", "@opentelemetry/instrumentation-hapi": "0.60.0", "@opentelemetry/instrumentation-http": "0.214.0", "@opentelemetry/instrumentation-ioredis": "0.62.0", "@opentelemetry/instrumentation-kafkajs": "0.23.0", "@opentelemetry/instrumentation-knex": "0.58.0", "@opentelemetry/instrumentation-koa": "0.62.0", "@opentelemetry/instrumentation-lru-memoizer": "0.58.0", "@opentelemetry/instrumentation-mongodb": "0.67.0", "@opentelemetry/instrumentation-mongoose": "0.60.0", "@opentelemetry/instrumentation-mysql": "0.60.0", "@opentelemetry/instrumentation-mysql2": "0.60.0", "@opentelemetry/instrumentation-pg": "0.66.0", "@opentelemetry/instrumentation-redis": "0.62.0", "@opentelemetry/instrumentation-tedious": "0.33.0", "@opentelemetry/sdk-trace-base": "^2.6.1", "@opentelemetry/semantic-conventions": "^1.40.0", "@prisma/instrumentation": "7.6.0", "@sentry/core": "10.50.0", "@sentry/node-core": "10.50.0", "@sentry/opentelemetry": "10.50.0", "import-in-the-middle": "^3.0.0" } }, "sha512-TvwzFQu8MGKzMQ2/tqxcNzFA8UG2kKTB+GDmA4uOzx3+GT849YZRRSJzEXCmYhk1teVd2fbmgqyYY2nyLF5a+Q=="], + "@lobu/owletto/tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], + "@lobu/owletto/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], "@lobu/worker/@sentry/node": ["@sentry/node@10.50.0", "", { "dependencies": { "@fastify/otel": "0.18.0", "@opentelemetry/api": "^1.9.1", "@opentelemetry/core": "^2.6.1", "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/instrumentation-amqplib": "0.61.0", "@opentelemetry/instrumentation-connect": "0.57.0", "@opentelemetry/instrumentation-dataloader": "0.31.0", "@opentelemetry/instrumentation-fs": "0.33.0", "@opentelemetry/instrumentation-generic-pool": "0.57.0", "@opentelemetry/instrumentation-graphql": "0.62.0", "@opentelemetry/instrumentation-hapi": "0.60.0", "@opentelemetry/instrumentation-http": "0.214.0", "@opentelemetry/instrumentation-ioredis": "0.62.0", "@opentelemetry/instrumentation-kafkajs": "0.23.0", "@opentelemetry/instrumentation-knex": "0.58.0", "@opentelemetry/instrumentation-koa": "0.62.0", "@opentelemetry/instrumentation-lru-memoizer": "0.58.0", "@opentelemetry/instrumentation-mongodb": "0.67.0", "@opentelemetry/instrumentation-mongoose": "0.60.0", "@opentelemetry/instrumentation-mysql": "0.60.0", "@opentelemetry/instrumentation-mysql2": "0.60.0", "@opentelemetry/instrumentation-pg": "0.66.0", "@opentelemetry/instrumentation-redis": "0.62.0", "@opentelemetry/instrumentation-tedious": "0.33.0", "@opentelemetry/sdk-trace-base": "^2.6.1", "@opentelemetry/semantic-conventions": "^1.40.0", "@prisma/instrumentation": "7.6.0", "@sentry/core": "10.50.0", "@sentry/node-core": "10.50.0", "@sentry/opentelemetry": "10.50.0", "import-in-the-middle": "^3.0.0" } }, "sha512-TvwzFQu8MGKzMQ2/tqxcNzFA8UG2kKTB+GDmA4uOzx3+GT849YZRRSJzEXCmYhk1teVd2fbmgqyYY2nyLF5a+Q=="], @@ -4367,6 +4370,8 @@ "@react-email/markdown/marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + "@react-email/tailwind/tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], + "@scalar/types/nanoid": ["nanoid@5.1.9", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw=="], "@sentry-internal/browser-utils/@sentry/core": ["@sentry/core@10.53.1", "", {}, "sha512-XG4ezlkyuAPjBC5+9kXC94rXXuqYTw9NRhfaDHssbTFaGnqBR8vQX2UUgZfY7ucbeelRDGfBu1sywoU+mB04uA=="], @@ -4385,6 +4390,8 @@ "@so-ric/colorspace/color": ["color@5.0.3", "", { "dependencies": { "color-convert": "^3.1.3", "color-string": "^2.1.3" } }, "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA=="], + "@tailwindcss/node/tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], @@ -4401,7 +4408,7 @@ "@tailwindcss/postcss/@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], - "@tailwindcss/postcss/tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], + "@tailwindcss/vite/tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], "@tanstack/router-generator/jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], diff --git a/examples/office-bot/agents/food-ordering/skills/deliveroo-order/SKILL.md b/examples/office-bot/agents/food-ordering/skills/deliveroo-order/SKILL.md index 020214b20..de72b2d9b 100644 --- a/examples/office-bot/agents/food-ordering/skills/deliveroo-order/SKILL.md +++ b/examples/office-bot/agents/food-ordering/skills/deliveroo-order/SKILL.md @@ -10,12 +10,16 @@ network: - playwright.azureedge.net - cdn.playwright.dev judge: - - deliveroo.co.uk - - .deliveroo.co.uk - - deliveroo.com - - .deliveroo.com + - domain: deliveroo.co.uk + judge: deliveroo + - domain: .deliveroo.co.uk + judge: deliveroo + - domain: deliveroo.com + judge: deliveroo + - domain: .deliveroo.com + judge: deliveroo judges: - default: > + deliveroo: > Allow GET requests that read restaurant listings, menus, item details, and the current basket. Allow POST/PUT requests whose effect is limited to building or modifying a basket / group order (add, remove, change quantity; diff --git a/examples/office-bot/lobu.toml b/examples/office-bot/lobu.toml index e7943aeac..a67528847 100644 --- a/examples/office-bot/lobu.toml +++ b/examples/office-bot/lobu.toml @@ -50,13 +50,16 @@ allowed = [ ] # Deliveroo goes through the egress judge — reading menus and assembling a # basket is fine; touching payment, addresses, or the account profile is not. +# Each domain names the "deliveroo" policy below. judge = [ - "deliveroo.co.uk", ".deliveroo.co.uk", - "deliveroo.com", ".deliveroo.com", + { domain = "deliveroo.co.uk", judge = "deliveroo" }, + { domain = ".deliveroo.co.uk", judge = "deliveroo" }, + { domain = "deliveroo.com", judge = "deliveroo" }, + { domain = ".deliveroo.com", judge = "deliveroo" }, ] [agents.food-ordering.network.judges] -default = """ +deliveroo = """ Allow GET requests that read restaurant listings, menus, item details, and the current basket. Allow POST/PUT requests whose effect is limited to building or modifying a basket / group order (adding, removing, changing quantity of items; diff --git a/packages/landing/package.json b/packages/landing/package.json index 158e37deb..5ddda8df0 100644 --- a/packages/landing/package.json +++ b/packages/landing/package.json @@ -4,9 +4,9 @@ "version": "3.0.8", "type": "module", "scripts": { - "predev": "bun scripts/gen-landing-snippets.ts", + "predev": "bun scripts/gen-connectors.ts && bun scripts/gen-landing-snippets.ts", "dev": "astro dev", - "prebuild": "bun scripts/gen-platform-configs.ts && bun scripts/gen-markdown-twins.ts && bun scripts/gen-landing-snippets.ts", + "prebuild": "bun scripts/gen-platform-configs.ts && bun scripts/gen-connectors.ts && bun scripts/gen-markdown-twins.ts && bun scripts/gen-landing-snippets.ts", "build": "astro build", "preview": "astro preview" }, @@ -20,6 +20,7 @@ }, "devDependencies": { "@tailwindcss/vite": "^4.1.8", + "simple-icons": "^16.20.0", "tailwindcss": "^4.1.8", "typescript": "^5.8.3" } diff --git a/packages/landing/public/asciinema-player/asciinema-player-ui.min.js b/packages/landing/public/asciinema-player/asciinema-player-ui.min.js deleted file mode 100644 index 1d841b5b8..000000000 --- a/packages/landing/public/asciinema-player/asciinema-player-ui.min.js +++ /dev/null @@ -1 +0,0 @@ -var AsciinemaPlayer=function(e){"use strict";const t=/^#[0-9a-f]{6}$/,n=/^#[0-9a-f]{3}$/;function r(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if("string"!=typeof e)return r;const l=e.trim().toLowerCase();return t.test(l)?l:n.test(l)?`#${l[1]}${l[1]}${l[2]}${l[2]}${l[3]}${l[3]}`:r}function l(e,t,n){return[t[0]+e*(n[0]-t[0]),t[1]+e*(n[1]-t[1]),t[2]+e*(n[2]-t[2])]}function o(e){const[t,n,r]=function(e){return[Number.parseInt(e.slice(1,3),16)/255,Number.parseInt(e.slice(3,5),16)/255,Number.parseInt(e.slice(5,7),16)/255]}(e).map(u),l=.4122214708*t+.5363325363*n+.0514459929*r,o=.2119034982*t+.6806995451*n+.1073969566*r,i=.0883024619*t+.2817188376*n+.6299787005*r,s=Math.cbrt(l),a=Math.cbrt(o),c=Math.cbrt(i);return[.2104542553*s+.793617785*a-.0040720468*c,1.9779984951*s-2.428592205*a+.4505937099*c,.0259040371*s+.7827717662*a-.808675766*c]}function i(e){const t=s(e);if(d(t))return c(t);const[n,r,l]=function(e){let[t,n,r]=e;return[t,Math.hypot(n,r),Math.atan2(r,n)]}(e);let o=0,i=r,u=[n,0,l];for(let e=0;e<24;e+=1){const e=(o+i)/2,t=[n,e,l];d(s(a(t)))?(o=e,u=t):i=e}return c(s(a(u)))}function s(e){const t=p(e[0],0,1),n=e[1],r=e[2],l=(t+.3963377774*n+.2158037573*r)**3,o=(t-.1055613458*n-.0638541728*r)**3,i=(t-.0894841775*n-1.291485548*r)**3,s=-1.2684380046*l+2.6097574011*o-.3413193965*i,a=-.0041960863*l-.7034186147*o+1.707614701*i;return[f(4.0767416621*l-3.3077115913*o+.2309699292*i),f(s),f(a)]}function a(e){let[t,n,r]=e;return[t,n*Math.cos(r),n*Math.sin(r)]}function c(e){const t=e=>Math.round(255*p(e,0,1)).toString(16).padStart(2,"0");return`#${t(e[0])}${t(e[1])}${t(e[2])}`}function u(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function f(e){return e<=.0031308?12.92*e:1.055*e**(1/2.4)-.055}function d(e){let[t,n,r]=e;return t>=0&&t<=1&&n>=0&&n<=1&&r>=0&&r<=1}function p(e,t,n){return Math.max(t,Math.min(n,e))}class h{log(){}debug(){}info(){}warn(){}error(){}}const g=Symbol("solid-proxy"),L=Symbol("solid-track"),v={equals:(e,t)=>e===t};let m=V;const b=1,y=2,k={owned:null,cleanups:null,context:null,owner:null};var w=null;let $=null,M=null,R=null,C=null,Z=0;function A(e,t){const n=M,r=w,l=0===e.length,o=void 0===t?r:t,i=l?k:{owned:null,cleanups:null,context:o?o.context:null,owner:o},s=l?e:()=>e((()=>T((()=>Q(i)))));w=i,M=null;try{return I(s,!0)}finally{M=n,w=r}}function x(e,t){const n={value:e,observers:null,observerSlots:null,comparator:(t=t?Object.assign({},v,t):v).equals||void 0};return[U.bind(n),e=>("function"==typeof e&&(e=e(n.value)),B(n,e))]}function E(e,t,n){W(K(e,t,!1,b))}function S(e,t,n){m=X;const r=K(e,t,!1,b);r.user=!0,C?C.push(r):W(r)}function P(e,t,n){n=n?Object.assign({},v,n):v;const r=K(e,t,!0,0);return r.observers=null,r.observerSlots=null,r.comparator=n.equals||void 0,W(r),U.bind(r)}function _(e){return I(e,!1)}function T(e){if(null===M)return e();const t=M;M=null;try{return e()}finally{M=t}}function N(e){S((()=>T(e)))}function F(e){return null===w||(null===w.cleanups?w.cleanups=[e]:w.cleanups.push(e)),e}function z(){return M}function O(e){const t=M,n=w;return Promise.resolve().then((()=>{M=t,w=n,I(e,!1),M=w=null}))}const[j,H]=x(!1);function D(e){const t=P(e),n=P((()=>ee(t())));return n.toArray=()=>{const e=n();return Array.isArray(e)?e:null!=e?[e]:[]},n}function U(){if(this.sources&&this.state)if(this.state===b)W(this);else{const e=R;R=null,I((()=>G(this)),!1),R=e}if(M){const e=this.observers?this.observers.length:0;M.sources?(M.sources.push(this),M.sourceSlots.push(e)):(M.sources=[this],M.sourceSlots=[e]),this.observers?(this.observers.push(M),this.observerSlots.push(M.sources.length-1)):(this.observers=[M],this.observerSlots=[M.sources.length-1])}return this.value}function B(e,t,n){let r=e.value;return e.comparator&&e.comparator(r,t)||(e.value=t,e.observers&&e.observers.length&&I((()=>{for(let t=0;t1e6)throw R=[],new Error}),!1)),t}function W(e){if(!e.fn)return;Q(e);const t=Z;!function(e,t,n){let r;const l=w,o=M;M=w=e;try{r=e.fn(t)}catch(t){return e.pure&&(e.state=b,e.owned&&e.owned.forEach(Q),e.owned=null),e.updatedAt=n+1,Y(t)}finally{M=o,w=l}(!e.updatedAt||e.updatedAt<=n)&&(null!=e.updatedAt&&"observers"in e?B(e,r):e.value=r,e.updatedAt=n)}(e,e.value,t)}function K(e,t,n,r=b,l){const o={fn:e,state:r,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:t,owner:w,context:w?w.context:null,pure:n};return null===w||w!==k&&(w.owned?w.owned.push(o):w.owned=[o]),o}function q(e){if(0===e.state)return;if(e.state===y)return G(e);if(e.suspense&&T(e.suspense.inFallback))return e.suspense.effects.push(e);const t=[e];for(;(e=e.owner)&&(!e.updatedAt||e.updatedAt=0;n--)if((e=t[n]).state===b)W(e);else if(e.state===y){const n=R;R=null,I((()=>G(e,t[0])),!1),R=n}}function I(e,t){if(R)return e();let n=!1;t||(R=[]),C?n=!0:C=[],Z++;try{const t=e();return function(e){R&&(V(R),R=null);if(e)return;const t=C;C=null,t.length&&I((()=>m(t)),!1)}(n),t}catch(e){n||(C=null),R=null,Y(e)}}function V(e){for(let t=0;t=0;t--)Q(e.tOwned[t]);delete e.tOwned}if(e.owned){for(t=e.owned.length-1;t>=0;t--)Q(e.owned[t]);e.owned=null}if(e.cleanups){for(t=e.cleanups.length-1;t>=0;t--)e.cleanups[t]();e.cleanups=null}e.state=0}function Y(e,t=w){const n=function(e){return e instanceof Error?e:new Error("string"==typeof e?e:"Unknown error",{cause:e})}(e);throw n}function ee(e){if("function"==typeof e&&!e.length)return ee(e());if(Array.isArray(e)){const t=[];for(let n=0;ne(t||{})))}const le=e=>`Stale read from <${e}>.`;function oe(e){const t="fallback"in e&&{fallback:()=>e.fallback};return P(function(e,t,n={}){let r=[],l=[],o=[],i=0,s=t.length>1?[]:null;return F((()=>ne(o))),()=>{let a,c,u=e()||[],f=u.length;return u[L],T((()=>{let e,t,p,h,g,L,v,m,b;if(0===f)0!==i&&(ne(o),o=[],r=[],l=[],i=0,s&&(s=[])),n.fallback&&(r=[te],l[0]=A((e=>(o[0]=e,n.fallback()))),i=1);else if(0===i){for(l=new Array(f),c=0;c=L&&m>=L&&r[v]===u[m];v--,m--)p[m]=l[v],h[m]=o[v],s&&(g[m]=s[v]);for(e=new Map,t=new Array(m+1),c=m;c>=L;c--)b=u[c],a=e.get(b),t[c]=void 0===a?-1:a,e.set(b,c);for(a=L;a<=v;a++)b=r[a],c=e.get(b),void 0!==c&&-1!==c?(p[c]=l[a],h[c]=o[a],s&&(g[c]=s[a]),c=t[c],e.set(b,c)):o[a]();for(c=L;ce.each),e.children,t||void 0))}function ie(e){const t=e.keyed,n=P((()=>e.when),void 0,void 0),r=t?n:P(n,void 0,{equals:(e,t)=>!e==!t});return P((()=>{const l=r();if(l){const o=e.children;return"function"==typeof o&&o.length>0?T((()=>o(t?l:()=>{if(!T(r))throw le("Show");return n()}))):o}return e.fallback}),void 0,void 0)}function se(e){const t=D((()=>e.children)),n=P((()=>{const e=t(),n=Array.isArray(e)?e:[e];let r=()=>{};for(let e=0;eo()?void 0:l.when),void 0,void 0),s=l.keyed?i:P(i,void 0,{equals:(e,t)=>!e==!t});r=()=>o()||(s()?[t,i,l]:void 0)}return r}));return P((()=>{const t=n()();if(!t)return e.fallback;const[r,l,o]=t,i=o.children;return"function"==typeof i&&i.length>0?T((()=>i(o.keyed?l():()=>{if(T(n)()?.[0]!==r)throw le("Match");return l()}))):i}),void 0,void 0)}function ae(e){return e}const ce="_$DX_DELEGATE";function ue(e,t,n,r){let l;const o=()=>{const t=document.createElement("template");return t.innerHTML=e,t.content.firstChild},i=t?()=>T((()=>document.importNode(l||(l=o()),!0))):()=>(l||(l=o())).cloneNode(!0);return i.cloneNode=i,i}function fe(e,t=window.document){const n=t[ce]||(t[ce]=new Set);for(let r=0,l=e.length;re(t,n)))}function Le(e,t,n,r){if(void 0===n||r||(r=[]),"function"!=typeof t)return me(e,t,r,n);E((r=>me(e,t(),r,n)),r)}function ve(e){let t=e.target;const n=`$$${e.type}`,r=e.target,l=e.currentTarget,o=t=>Object.defineProperty(e,"target",{configurable:!0,value:t}),i=()=>{const r=t[n];if(r&&!t.disabled){const l=t[`${n}Data`];if(void 0!==l?r.call(t,l,e):r.call(t,e),e.cancelBubble)return}return t.host&&"string"!=typeof t.host&&!t.host._$host&&t.contains(e.target)&&o(t.host),!0},s=()=>{for(;i()&&(t=t._$host||t.parentNode||t.host););};if(Object.defineProperty(e,"currentTarget",{configurable:!0,get:()=>t||document}),e.composedPath){const n=e.composedPath();o(n[0]);for(let e=0;e{let l=t();for(;"function"==typeof l;)l=l();n=me(e,l,n,r)})),()=>n;if(Array.isArray(t)){const o=[],s=n&&Array.isArray(n);if(be(o,t,n,l))return E((()=>n=me(e,o,n,r,!0))),()=>n;if(0===o.length){if(n=ke(e,n,r),i)return n}else s?0===n.length?ye(e,o,r):function(e,t,n){let r=n.length,l=t.length,o=r,i=0,s=0,a=t[l-1].nextSibling,c=null;for(;ir-s){const l=t[i];for(;s=0;o--){const i=t[o];if(l!==i){const t=i.parentNode===e;r||o?t&&i.remove():t?e.replaceChild(l,i):e.insertBefore(l,n)}else r=!0}}else e.insertBefore(l,n);return[l]}const we=Symbol("store-raw"),$e=Symbol("store-node"),Me=Symbol("store-has"),Re=Symbol("store-self");function Ce(e){let t=e[g];if(!t&&(Object.defineProperty(e,g,{value:t=new Proxy(e,Pe)}),!Array.isArray(e))){const n=Object.keys(e),r=Object.getOwnPropertyDescriptors(e);for(let l=0,o=n.length;lt===we||t===g||t===L||t===$e||t===Me||"__proto__"===t||(z()&&Ee(xe(e,Me),t)(),t in e),set:()=>!0,deleteProperty:()=>!0,ownKeys:function(e){return Se(e),Reflect.ownKeys(e)},getOwnPropertyDescriptor:function(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return n&&!n.get&&n.configurable&&t!==g&&t!==$e?(delete n.value,delete n.writable,n.get=()=>e[g][t],n):n}};function _e(e,t,n,r=!1){if(!r&&e[t]===n)return;const l=e[t],o=e.length;void 0===n?(delete e[t],e[Me]&&e[Me][t]&&void 0!==l&&e[Me][t].$()):(e[t]=n,e[Me]&&e[Me][t]&&void 0===l&&e[Me][t].$());let i,s=xe(e,$e);if((i=Ee(s,t,l))&&i.$((()=>n)),Array.isArray(e)&&e.length!==o){for(let t=e.length;t1){r=t.shift();const o=typeof r,i=Array.isArray(e);if(Array.isArray(r)){for(let l=0;l1)return void Ne(e[r],t,[r].concat(n));l=e[r],n=[r].concat(n)}let o=t[0];"function"==typeof o&&(o=o(l,n),o===l)||void 0===r&&null==o||(o=Ae(o),void 0===r||Ze(l)&&Ze(o)&&!Array.isArray(o)?Te(l,o):_e(e,r,o))}function Fe(...[e,t]){const n=Ae(e||{}),r=Array.isArray(n);return[Ce(n),function(...e){_((()=>{r&&1===e.length?function(e,t){if("function"==typeof t&&(t=t(e)),t=Ae(t),Array.isArray(t)){if(e===t)return;let n=0,r=t.length;for(;n{},Oe=(e,t)=>t();function je(e,t){const n=T(e),r=n?[n]:[],{onEnter:l=Oe,onExit:o=Oe}=t,[i,s]=x(t.appear?[]:r),[a]=[j,O];let c,u=!1;function f(e,t){if(!e)return t&&t();u=!0,o(e,(()=>{_((()=>{u=!1,s((t=>t.filter((t=>t!==e)))),t&&t()}))}))}function d(e){const t=c;if(!t)return e&&e();c=void 0,s((e=>[t,...e])),l(t,e??ze)}const p="out-in"===t.mode?e=>u||f(e,d):"in-out"===t.mode?e=>d((()=>f(e))):e=>{f(e),d()};var h,g;return h=t=>{const n=e();return T(a)?(a(),t):(n!==t&&(c=n,_((()=>T((()=>p(t)))))),n)},g=t.appear?void 0:n,W(K(h,g,!0,b)),i}const He=e=>e instanceof Element;function De(e,t){if(t(e))return e;if("function"==typeof e&&!e.length)return De(e(),t);if(Array.isArray(e))for(const n of e){const e=De(n,t);if(e)return e}return null}function Ue(e,t=He,n=He){const r=P(e);return P((()=>De(r(),t)))}function Be(e){requestAnimationFrame((()=>requestAnimationFrame(e)))}var We={inout:"in-out",outin:"out-in"},Ke=e=>{const t=function(e){return P((()=>{const t=e.name||"s";return{enterActive:(e.enterActiveClass||t+"-enter-active").split(" "),enter:(e.enterClass||t+"-enter").split(" "),enterTo:(e.enterToClass||t+"-enter-to").split(" "),exitActive:(e.exitActiveClass||t+"-exit-active").split(" "),exit:(e.exitClass||t+"-exit").split(" "),exitTo:(e.exitToClass||t+"-exit-to").split(" "),move:(e.moveClass||t+"-move").split(" ")}}))}(e);return je(Ue((()=>e.children)),{mode:We[e.mode],appear:e.appear,onEnter(n,r){!function(e,t,n,r){const{onBeforeEnter:l,onEnter:o,onAfterEnter:i}=t;function s(t){t&&t.target!==n||(r?.(),n.removeEventListener("transitionend",s),n.removeEventListener("animationend",s),n.classList.remove(...e.enterActive),n.classList.remove(...e.enterTo),i?.(n))}l?.(n),n.classList.add(...e.enter),n.classList.add(...e.enterActive),queueMicrotask((()=>{if(!n.parentNode)return r?.();o?.(n,(()=>s()))})),Be((()=>{n.classList.remove(...e.enter),n.classList.add(...e.enterTo),(!o||o.length<2)&&(n.addEventListener("transitionend",s),n.addEventListener("animationend",s))}))}(t(),e,n,r)},onExit(n,r){!function(e,t,n,r){const{onBeforeExit:l,onExit:o,onAfterExit:i}=t;if(!n.parentNode)return r?.();function s(t){t&&t.target!==n||(r?.(),n.removeEventListener("transitionend",s),n.removeEventListener("animationend",s),n.classList.remove(...e.exitActive),n.classList.remove(...e.exitTo),i?.(n))}l?.(n),n.classList.add(...e.exit),n.classList.add(...e.exitActive),o?.(n,(()=>s())),Be((()=>{n.classList.remove(...e.exit),n.classList.add(...e.exitTo),(!o||o.length<2)&&(n.addEventListener("transitionend",s),n.addEventListener("animationend",s))}))}(t(),e,n,r)}})};const qe=ue('
',12),Ie="http://www.w3.org/2000/svg",Ve=24;var Xe=e=>{const t=e.core,n=[],l=[],o=[],i=new Set,s=new Map,a=new Map,[c,u]=x({cols:e.cols,rows:e.rows},{equals:(e,t)=>e.cols===t.cols&&e.rows===t.rows}),[f,d]=x(Ge(rt)),p=()=>e.lineHeight??1.3333333333,[h,g]=x(!0),L=P((()=>h()||z)),v=P((()=>({width:`${c().cols}ch`,height:p()*c().rows+"em","font-size":100*(e.scale||1)+"%","--term-line-height":`${p()}em`,"--term-cols":c().cols,"--term-rows":c().rows})));let m,b,y,k,w,$,M,R,C,Z,A={col:0,row:0,visible:!1},T={size:void 0,theme:void 0,rows:new Set},z=!1;function O(n){let{size:r,theme:l,changedRows:o}=n,i=!1;if(void 0!==o)for(const e of o)T.rows.add(e),z=!0,i=!0;if(void 0!==l&&e.preferEmbeddedTheme){T.theme=l;for(let e=0;e=r.rows&&T.rows.delete(e)}i&&A.visible&&T.rows.add(A.row),H()}function j(){g((e=>(e||(z=!1),!e)))}function H(){void 0===R&&(R=requestAnimationFrame(D))}function D(){R=void 0;const{size:t,theme:n,rows:r}=T;_((function(){void 0!==t&&(!function(e){let{cols:t,rows:n}=e;b.width=8*t,b.height=n*Ve,y.imageSmoothingEnabled=!1}(t),K(t.rows),q(t.rows),u(t)),void 0!==n&&(d(Ge(null===n?Z:n)),s.clear());const e=f(),l=h()||z;for(const t of r)U(t,e,l)})),T.size=void 0,T.theme=void 0,T.rows.clear(),e.stats.renders+=1}function U(e,n,r){const l=t.getLine(e,r);!function(e){y.clearRect(0,e*Ve,8*c().cols,Ve)}(e),function(e,n,r){const l=t.getDataView(n,8),o=e*Ve;let i=0;for(;ie;){const e=k.lastElementChild;k.removeChild(e),n.push(e)}}function q(e){let t=M.children.length;if(te;){const e=M.lastElementChild;M.removeChild(e),l.push(e)}}function I(){let e=n.pop();return void 0===e&&(e=document.createElement("span"),e.className="ap-line"),e}function V(){let e=l.pop();return void 0===e&&(e=document.createElementNS(Ie,"g"),e.setAttribute("class","ap-symbol-line")),e}function X(e,t,n,r){if(!function(e){const t=function(e){const t=`stroke="currentColor" stroke-width="${Ye}" stroke-linejoin="miter" stroke-linecap="square"`,n=`stroke="currentColor" stroke-width="${Ye}" stroke-linejoin="miter" stroke-linecap="butt"`,r=e=>``,l=1/3,o=2/3;switch(e){case 9698:return''+r("M1,1 L1,0 L0,1 Z");case 9699:return''+r("M0,1 L0,0 L1,1 Z");case 9700:return''+r("M0,0 L1,0 L0,1 Z");case 9701:return''+r("M1,0 L1,1 L0,0 Z");case 9871:{const e=.17,t=.15/2,n=.2/2,r=e=>.5+e*et,l=.5-t,o=.5+t,i=1.02,s=r(-n-e),a=r(-n),c=r(n),u=r(n+e),f=(e,t,n,r)=>`M${e},${n} L${t},${n} L${t},${r} L${e},${r} Z`;return``}case 129852:return``+r(`M0,${o} L0,1 L0.5,1 Z`);case 129853:return``+r(`M0,${o} L0,1 L1,1 Z`);case 129854:return``+r(`M0,${l} L0.5,1 L0,1 Z`);case 129855:return``+r(`M0,${l} L1,1 L0,1 Z`);case 129856:return''+r("M0,0 L0.5,1 L0,1 Z");case 129857:return``+r(`M0,${l} L0,1 L1,1 L1,0 L0.5,0 Z`);case 129858:return``+r(`M0,${l} L0,1 L1,1 L1,0 Z`);case 129859:return``+r(`M0,${o} L0,1 L1,1 L1,0 L0.5,0 Z`);case 129860:return``+r(`M0,${o} L0,1 L1,1 L1,0 Z`);case 129861:return''+r("M0.5,0 L1,0 L1,1 L0,1 Z");case 129862:return``+r(`M0,${o} L0,1 L1,1 L1,${l} Z`);case 129863:return``+r(`M0.5,1 L1,1 L1,${o} Z`);case 129864:return``+r(`M0,1 L1,1 L1,${o} Z`);case 129865:return``+r(`M0.5,1 L1,1 L1,${l} Z`);case 129866:return``+r(`M0,1 L1,1 L1,${l} Z`);case 129867:return''+r("M0.5,1 L1,0 L1,1 Z");case 129868:return``+r(`M0,0 L0.5,0 L1,${l} L1,1 L0,1 Z`);case 129869:return``+r(`M0,0 L0,1 L1,1 L1,${l} Z`);case 129870:return``+r(`M0,0 L0.5,0 L1,${o} L1,1 L0,1 Z`);case 129871:return``+r(`M0,0 L1,${o} L1,1 L0,1 Z`);case 129872:return''+r("M0,0 L0.5,0 L1,1 L0,1 Z");case 129873:return``+r(`M0,${l} L1,${o} L1,1 L0,1 Z`);case 129874:return``+r(`M0,${o} L0,0 L1,0 L1,1 L0.5,1 Z`);case 129875:return``+r(`M0,${o} L0,0 L1,0 L1,1 Z`);case 129876:return``+r(`M0,${l} L0,0 L1,0 L1,1 L0.5,1 Z`);case 129877:return``+r(`M0,${l} L0,0 L1,0 L1,1 Z`);case 129878:return''+r("M0,0 L1,0 L1,1 L0.5,1 Z");case 129879:return``+r(`M0,${l} L0.5,0 L0,0 Z`);case 129880:return``+r(`M0,0 L1,0 L0,${l} Z`);case 129881:return``+r(`M0,0 L0.5,0 L0,${o} Z`);case 129882:return``+r(`M0,0 L1,0 L0,${o} Z`);case 129883:return''+r("M0,0 L0.5,0 L0,1 Z");case 129884:return``+r(`M0,0 L1,0 L1,${l} L0,${o} Z`);case 129885:return``+r(`M0,0 L1,0 L1,${o} L0.5,1 L0,1 Z`);case 129886:return``+r(`M0,0 L1,0 L1,${o} L0,1 Z`);case 129887:return``+r(`M0,0 L1,0 L1,${l} L0.5,1 L0,1 Z`);case 129888:return``+r(`M0,0 L1,0 L1,${l} L0,1 Z`);case 129889:return''+r("M0,0 L1,0 L0.5,1 L0,1 Z");case 129890:return``+r(`M0.5,0 L1,0 L1,${l} Z`);case 129891:return``+r(`M0,0 L1,0 L1,${l} Z`);case 129892:return``+r(`M0.5,0 L1,0 L1,${o} Z`);case 129893:return``+r(`M0,0 L1,0 L1,${o} Z`);case 129894:return''+r("M0.5,0 L1,0 L1,1 Z");case 129895:return``+r(`M0,${l} L0,0 L1,0 L1,${o} Z`);case 129896:return``;case 129897:return``;case 129898:return``;case 129899:return``;case 129900:return''+r("M0,0 L0,1 L0.5,0.5 Z");case 57520:return'';case 57521:return'';case 57522:return'';case 57523:return'';default:return null}}(e);if(!t)return!1;if(i.has(e))return!0;const n=`sym-${e}`,r=document.createElementNS(Ie,"symbol");return r.setAttribute("id",n),r.setAttribute("viewBox","0 0 1 1"),r.setAttribute("preserveAspectRatio","none"),r.setAttribute("overflow","visible"),r.innerHTML=t,$.appendChild(r),i.add(e),!0}(e))return null;const l=tt.has(e),s=l?t-nt:t,a=l?1+2*nt:1,c=function(){let e=o.pop();void 0===e&&(e=document.createElementNS(Ie,"use"));return e}();return c.setAttribute("href",`#sym-${e}`),c.setAttribute("x",s),c.setAttribute("y",0),c.setAttribute("width",a),c.setAttribute("height","1"),n?c.style.setProperty("color",n):c.style.removeProperty("color"),r?c.classList.add("ap-blink"):c.classList.remove("ap-blink"),c}return N((()=>{!function(){if(y=b.getContext("2d"),!y)throw new Error("2D ctx not available");const{cols:e,rows:t}=c();b.width=8*e,b.height=t*Ve,b.style.imageRendering="pixelated",y.imageSmoothingEnabled=!1}(),Z=function(e){const t=getComputedStyle(e),n=r(t.getPropertyValue("--term-color-foreground"),rt.foreground),l=r(t.getPropertyValue("--term-color-background"),rt.background),o=[];for(let e=0;e<16;e++){const n=e>=8?o[e-8]:rt.palette[e];o[e]=r(t.getPropertyValue(`--term-color-${e}`),n)}return{foreground:n,background:l,palette:o}}(m),T.theme=Z,K(c().rows),q(c().rows),t.addEventListener("vtUpdate",O)})),F((()=>{t.removeEventListener("vtUpdate",O),clearInterval(C),cancelAnimationFrame(R)})),S((()=>{e.blinking&&void 0===C?C=setInterval(j,600):(clearInterval(C),C=void 0,g(!0))})),S((()=>{L(),A.visible&&(T.rows.add(A.row),H())})),(()=>{const e=qe.cloneNode(!0),t=e.firstChild,n=t.nextSibling,r=n.firstChild,l=r.nextSibling,o=n.nextSibling;"function"==typeof m?ge(m,e):m=e;"function"==typeof b?ge(b,t):b=t;"function"==typeof w?ge(w,n):w=n;"function"==typeof $?ge($,r):$=r;"function"==typeof M?ge(M,l):M=l;return"function"==typeof k?ge(k,o):k=o,E((t=>{const r=v(),l=`0 0 ${c().cols} ${c().rows}`,i=!!h(),s=!!h();return t._v$=he(e,r,t._v$),l!==t._v$2&&de(n,"viewBox",t._v$2=l),i!==t._v$3&&n.classList.toggle("ap-blink",t._v$3=i),s!==t._v$4&&o.classList.toggle("ap-blink",t._v$4=s),t}),{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),e})()};function Ge(e){return{fg:e.foreground,bg:e.background,palette:Je(e.palette,e.background,e.foreground)}}function Je(e,t,n){const r=o(t),s=o(n),a=o(e[1]),c=o(e[2]),u=o(e[3]),f=o(e[4]),d=o(e[5]),p=o(e[6]),h=[...e];for(let e=0;e<6;e+=1){const t=e/5,n=l(t,r,a),o=l(t,c,u),g=l(t,f,d),L=l(t,p,s);for(let e=0;e<6;e+=1){const t=e/5,r=l(t,n,o),s=l(t,g,L);for(let e=0;e<6;e+=1){const t=l(e/5,r,s);h.push(i(t))}}}for(let e=0;e<24;e+=1){const t=(e+1)/25;h.push(i(l(t,r,s)))}return h}function Qe(e,t,n,r){const l=12;switch(t){case 9600:e.fillRect(n,r,8,l);break;case 9601:e.fillRect(n,r+21,8,3);break;case 9602:e.fillRect(n,r+18,8,6);break;case 9603:e.fillRect(n,r+15,8,9);break;case 9604:e.fillRect(n,r+l,8,l);break;case 9605:e.fillRect(n,r+9,8,15);break;case 9606:e.fillRect(n,r+6,8,18);break;case 9607:e.fillRect(n,r+3,8,21);break;case 9608:e.fillRect(n,r,8,Ve);break;case 9632:e.fillRect(n,r+6,8,12);break;case 9609:e.fillRect(n,r,7,Ve);break;case 9610:e.fillRect(n,r,6,Ve);break;case 9611:e.fillRect(n,r,5,Ve);break;case 9612:e.fillRect(n,r,4,Ve);break;case 9613:e.fillRect(n,r,3,Ve);break;case 9614:e.fillRect(n,r,2,Ve);break;case 9615:e.fillRect(n,r,1,Ve);break;case 9616:e.fillRect(n+4,r,4,Ve);break;case 9617:e.save(),e.globalAlpha=.25,e.fillRect(n,r,8,Ve),e.restore();break;case 9618:e.save(),e.globalAlpha=.5,e.fillRect(n,r,8,Ve),e.restore();break;case 9619:e.save(),e.globalAlpha=.75,e.fillRect(n,r,8,Ve),e.restore();break;case 9620:e.fillRect(n,r,8,3);break;case 9621:e.fillRect(n+7,r,1,Ve);break;case 9622:e.fillRect(n,r+l,4,l);break;case 9623:e.fillRect(n+4,r+l,4,l);break;case 9624:e.fillRect(n,r,4,l);break;case 9625:e.fillRect(n,r,4,Ve),e.fillRect(n+4,r+l,4,l);break;case 9626:e.fillRect(n,r,4,l),e.fillRect(n+4,r+l,4,l);break;case 9627:e.fillRect(n,r,8,l),e.fillRect(n,r+l,4,l);break;case 9628:e.fillRect(n,r,8,l),e.fillRect(n+4,r+l,4,l);break;case 9629:e.fillRect(n+4,r,4,l);break;case 9630:e.fillRect(n+4,r,4,l),e.fillRect(n,r+l,4,l);break;case 9631:e.fillRect(n+4,r,4,Ve),e.fillRect(n,r+l,4,l);break;case 129792:e.fillRect(n,r,4,8);break;case 129793:e.fillRect(n+4,r,4,8);break;case 129794:e.fillRect(n,r,8,8);break;case 129795:e.fillRect(n,r+8,4,8);break;case 129796:e.fillRect(n,r,4,8),e.fillRect(n,r+8,4,8);break;case 129797:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,4,8);break;case 129798:e.fillRect(n,r,8,8),e.fillRect(n,r+8,4,8);break;case 129799:e.fillRect(n+4,r+8,4,8);break;case 129800:e.fillRect(n,r,4,8),e.fillRect(n+4,r+8,4,8);break;case 129801:e.fillRect(n+4,r,4,8),e.fillRect(n+4,r+8,4,8);break;case 129802:e.fillRect(n,r,8,8),e.fillRect(n+4,r+8,4,8);break;case 129803:e.fillRect(n,r+8,8,8);break;case 129804:e.fillRect(n,r,4,8),e.fillRect(n,r+8,8,8);break;case 129805:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,8,8);break;case 129806:e.fillRect(n,r,8,8),e.fillRect(n,r+8,8,8);break;case 129807:e.fillRect(n,r+16,4,8);break;case 129808:e.fillRect(n,r,4,8),e.fillRect(n,r+16,4,8);break;case 129809:e.fillRect(n+4,r,4,8),e.fillRect(n,r+16,4,8);break;case 129810:e.fillRect(n,r,8,8),e.fillRect(n,r+16,4,8);break;case 129811:e.fillRect(n,r+8,4,16);break;case 129812:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,4,16);break;case 129813:e.fillRect(n,r,8,8),e.fillRect(n,r+8,4,16);break;case 129814:e.fillRect(n+4,r+8,4,8),e.fillRect(n,r+16,4,8);break;case 129815:e.fillRect(n,r,4,8),e.fillRect(n+4,r+8,4,8),e.fillRect(n,r+16,4,8);break;case 129816:e.fillRect(n+4,r,4,16),e.fillRect(n,r+16,4,8);break;case 129817:e.fillRect(n,r,8,8),e.fillRect(n+4,r+8,4,8),e.fillRect(n,r+16,4,8);break;case 129818:e.fillRect(n,r+8,8,8),e.fillRect(n,r+16,4,8);break;case 129819:e.fillRect(n,r,4,24),e.fillRect(n+4,r+8,4,8);break;case 129820:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,8,8),e.fillRect(n,r+16,4,8);break;case 129821:e.fillRect(n,r,8,16),e.fillRect(n,r+16,4,8);break;case 129822:e.fillRect(n+4,r+16,4,8);break;case 129823:e.fillRect(n,r,4,8),e.fillRect(n+4,r+16,4,8);break;case 129824:e.fillRect(n+4,r,4,8),e.fillRect(n+4,r+16,4,8);break;case 129825:e.fillRect(n,r,8,8),e.fillRect(n+4,r+16,4,8);break;case 129826:e.fillRect(n,r+8,4,8),e.fillRect(n+4,r+16,4,8);break;case 129827:e.fillRect(n,r,4,16),e.fillRect(n+4,r+16,4,8);break;case 129828:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,4,8),e.fillRect(n+4,r+16,4,8);break;case 129829:e.fillRect(n,r,8,8),e.fillRect(n,r+8,4,8),e.fillRect(n+4,r+16,4,8);break;case 129830:e.fillRect(n+4,r+8,4,16);break;case 129831:e.fillRect(n,r,4,8),e.fillRect(n+4,r+8,4,16);break;case 129832:e.fillRect(n,r,8,8),e.fillRect(n+4,r+8,4,16);break;case 129833:e.fillRect(n,r+8,8,8),e.fillRect(n+4,r+16,4,8);break;case 129834:e.fillRect(n,r,4,16),e.fillRect(n+4,r+8,4,16);break;case 129835:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,8,8),e.fillRect(n+4,r+16,4,8);break;case 129836:e.fillRect(n,r,8,16),e.fillRect(n+4,r+16,4,8);break;case 129837:e.fillRect(n,r+16,8,8);break;case 129838:e.fillRect(n,r,4,8),e.fillRect(n,r+16,8,8);break;case 129839:e.fillRect(n+4,r,4,8),e.fillRect(n,r+16,8,8);break;case 129840:e.fillRect(n,r,8,8),e.fillRect(n,r+16,8,8);break;case 129841:e.fillRect(n,r+8,4,8),e.fillRect(n,r+16,8,8);break;case 129842:e.fillRect(n,r,4,16),e.fillRect(n,r+16,8,8);break;case 129843:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,4,8),e.fillRect(n,r+16,8,8);break;case 129844:e.fillRect(n,r,8,8),e.fillRect(n,r+8,4,8),e.fillRect(n,r+16,8,8);break;case 129845:e.fillRect(n+4,r+8,4,8),e.fillRect(n,r+16,8,8);break;case 129846:e.fillRect(n,r,4,8),e.fillRect(n+4,r+8,4,8),e.fillRect(n,r+16,8,8);break;case 129847:e.fillRect(n+4,r,4,16),e.fillRect(n,r+16,8,8);break;case 129848:e.fillRect(n,r,8,8),e.fillRect(n+4,r+8,4,8),e.fillRect(n,r+16,8,8);break;case 129849:e.fillRect(n,r+8,8,16);break;case 129850:e.fillRect(n,r,4,24),e.fillRect(n+4,r+8,4,8),e.fillRect(n+4,r+16,4,8);break;case 129851:e.fillRect(n+4,r,4,8),e.fillRect(n,r+8,8,16)}}const Ye=.05,et=9.0375/20;const tt=new Set([57520,57521,57522,57523]),nt=.02,rt={foreground:"#000000",background:"#000000",palette:["#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000"]},lt=ue('',6);var ot=e=>lt.cloneNode(!0);const it=ue('',4);var st=e=>it.cloneNode(!0);const at=ue('',6);var ct=e=>at.cloneNode(!0);const ut=ue('',4);var ft=e=>ut.cloneNode(!0);const dt=ue('',6);var pt=e=>dt.cloneNode(!0);const ht=ue('',6);var gt=e=>ht.cloneNode(!0);const Lt=ue('',4);var vt=e=>Lt.cloneNode(!0);const mt=ue('',2),bt=ue('',6),yt=ue('Unmute (m)',2),kt=ue('Mute (m)',2),wt=ue('',2),$t=ue('
Keyboard shortcuts (?)Fullscreen (f)
',18),Mt=ue('',6);function Rt(e){let t=Math.floor(e);const n=Math.floor(t/86400);t%=86400;const r=Math.floor(t/3600);t%=3600;const l=Math.floor(t/60);return t%=60,n>0?`${Ct(n)}:${Ct(r)}:${Ct(l)}:${Ct(t)}`:r>0?`${Ct(r)}:${Ct(l)}:${Ct(t)}`:`${Ct(l)}:${Ct(t)}`}function Ct(e){return e<10?`0${e}`:e.toString()}var Zt=e=>{const t=e=>t=>{t.preventDefault(),e(t)},n=()=>"number"==typeof e.currentTime?Rt(e.currentTime):"--:--",r=()=>"number"==typeof e.remainingTime?"-"+Rt(e.remainingTime):n(),l=P((()=>"number"==typeof e.duration?e.markers.filter((t=>t[0]{const t=e.currentTarget.offsetWidth,n=e.currentTarget.getBoundingClientRect(),r=e.clientX-n.left;return 100*Math.max(0,r/t)+"%"},[i,s]=x(!1),a=function(e,t){let n=!0;return function(){if(n){n=!1;for(var r=arguments.length,l=new Array(r),o=0;on=!0),t)}}}(e.onSeekClick,50),c=t=>{t._marker||t.altKey||t.shiftKey||t.metaKey||t.ctrlKey||0!==t.button||(s(!0),e.onSeekClick(o(t)))},u=e=>{e.altKey||e.shiftKey||e.metaKey||e.ctrlKey||i()&&a(o(e))},f=()=>{s(!1)};return document.addEventListener("mouseup",f),F((()=>{document.removeEventListener("mouseup",f)})),(()=>{const o=$t.cloneNode(!0),i=o.firstChild,s=i.firstChild,a=s.nextSibling,f=i.nextSibling,d=f.nextSibling,p=d.firstChild,h=d.nextSibling,g=h.firstChild,L=e.ref;return"function"==typeof L?ge(L,o):e.ref=o,Le(o,re(ie,{get when(){return e.isPausable},get children(){const n=mt.cloneNode(!0);return pe(n,"click",t(e.onPlayClick)),Le(n,re(se,{get children(){return[re(ae,{get when(){return e.isPlaying},get children(){return re(ct,{})}}),re(ae,{when:!0,get children(){return re(ft,{})}})]}})),n}}),i),Le(s,n),Le(a,r),Le(f,re(ie,{get when(){return"number"==typeof e.progress||e.isSeekable},get children(){const n=bt.cloneNode(!0),r=n.firstChild.nextSibling;return n.$$mousemove=u,n.$$mousedown=c,Le(n,re(oe,{get each(){return l()},children:(n,r)=>(()=>{const l=Mt.cloneNode(!0),o=l.firstChild,i=o.nextSibling;var s;return l.$$mousedown=e=>{e._marker=!0},pe(l,"click",(s=r(),t((()=>{e.onSeekClick({marker:s})})))),Le(i,(()=>(e=>""===e[1]?Rt(e[0]):`${Rt(e[0])} - ${e[1]}`)(n))),E((t=>{const r=(t=>t[0]/e.duration*100+"%")(n),i=!!(t=>"number"==typeof e.currentTime&&t[0]<=e.currentTime)(n);return r!==t._v$&&l.style.setProperty("left",t._v$=r),i!==t._v$2&&o.classList.toggle("ap-marker-past",t._v$2=i),t}),{_v$:void 0,_v$2:void 0}),l})()}),null),E((t=>he(r,{transform:`scaleX(${e.progress||0}`},t))),n}})),Le(o,re(ie,{get when(){return void 0!==e.isMuted},get children(){const n=wt.cloneNode(!0);return pe(n,"click",t(e.onMuteClick)),Le(n,re(se,{get children(){return[re(ae,{get when(){return!0===e.isMuted},get children(){return[re(vt,{}),yt.cloneNode(!0)]}}),re(ae,{get when(){return!1===e.isMuted},get children(){return[re(gt,{}),kt.cloneNode(!0)]}})]}})),n}}),d),pe(d,"click",t(e.onHelpClick)),Le(d,re(st,{}),p),pe(h,"click",t(e.onFullscreenClick)),Le(h,re(pt,{}),g),Le(h,re(ot,{}),g),E((()=>o.classList.toggle("ap-seekable",!!e.isSeekable))),o})()};fe(["click","mousedown","mousemove"]);const At=ue('
💥
',4);var xt=e=>At.cloneNode(!0);const Et=ue('
',4);var St=e=>Et.cloneNode(!0);const Pt=ue('
',4);var _t=e=>(()=>{const t=Pt.cloneNode(!0);return Le(t.firstChild,(()=>e.message)),E((()=>t.classList.toggle("ap-was-playing",!!e.wasPlaying))),t})();const Tt=ue('
',22);var Nt=e=>(()=>{const t=Tt.cloneNode(!0);var n;return pe(t,"click",(n=e.onClick,e=>{e.preventDefault(),n(e)})),t})();fe(["click"]);const Ft=ue("
  • space - pause / resume
  • ",4),zt=ue("
  • / - rewind / fast-forward by 5 seconds
  • ",6),Ot=ue("
  • Shift + / - rewind / fast-forward by 10%
  • ",8),jt=ue("
  • [ / ] - jump to the previous / next marker
  • ",6),Ht=ue("
  • 0, 1, 2 ... 9 - jump to 0%, 10%, 20% ... 90%
  • ",10),Dt=ue("
  • , / . - step back / forward, a frame at a time (when paused)
  • ",6),Ut=ue("
  • m - mute / unmute audio
  • ",4),Bt=ue('

    Keyboard shortcuts

    • f - toggle fullscreen mode
    • ? - show this help popup
    ',18);var Wt=e=>(()=>{const t=Bt.cloneNode(!0),n=t.firstChild,r=n.firstChild.firstChild.nextSibling,l=r.firstChild,o=l.nextSibling;var i;return pe(t,"click",(i=e.onClose,e=>{e.preventDefault(),i(e)})),n.$$click=e=>{e.stopPropagation()},Le(r,re(ie,{get when(){return e.isPausable},get children(){return Ft.cloneNode(!0)}}),l),Le(r,re(ie,{get when(){return e.isSeekable},get children(){return[zt.cloneNode(!0),Ot.cloneNode(!0),jt.cloneNode(!0),Ht.cloneNode(!0),Dt.cloneNode(!0)]}}),l),Le(r,re(ie,{get when(){return e.hasAudio},get children(){return Ut.cloneNode(!0)}}),o),t})();fe(["click"]);const Kt=ue('
    ',4);var qt=e=>{const t=e.logger,n=e.core,r=e.autoPlay,l=e.charW,o=e.charH,i=e.bordersW,s=e.bordersH,a=e.theme??"auto/asciinema",c="auto/"===a.slice(0,5),u=c?a.slice(5):a,[f,d]=Fe({containerW:0,containerH:0,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null}),[p,h]=x(!1),[g,L]=x(void 0),[v,m]=x(!1),[b,y]=x(r?null:"start"),[k,w]=x(null),[$,M]=x(!1),[R,C]=x({cols:e.cols,rows:e.rows},{equals:(e,t)=>e.cols===t.cols&&e.rows===t.rows}),[Z,A]=x(null),[S,T]=Fe([]),[z,O]=x(!1),[j,H]=x(!1),[D,U]=x(null),B=P((()=>R().cols||80)),W=P((()=>R().rows||24)),K=()=>!1===e.controls?0:32;let q,I,V,X,G,J,Q;function Y(){M(!1),xe(),Ee()}const ee=new Promise((e=>{Q=e})),te=e=>{let{isPausable:t,isSeekable:n}=e;d({isPausable:t,isSeekable:n}),Q()},ne=e=>{_((()=>{void 0!==e.duration&&A(e.duration),void 0!==e.markers&&T(e.markers),void 0!==e.hasAudio&&L(!e.hasAudio&&void 0),void 0!==e.size&&C(e.size),void 0!==e.theme&&U(e.theme)}))},le=()=>{y(null)},oe=()=>{_((()=>{h(!0),m(!0),y(null),M(!0),Ae()}))},ce=()=>{_((()=>{h(!1),Y()}))},ue=()=>{_((()=>{h(!1),Y(),y("loader")}))},fe=e=>{let{message:t}=e;_((()=>{h(!1),Y(),void 0!==t&&(w(t),y("info"))}))},de=e=>{L(e)},pe={renders:0},ve=e=>{let{message:n}=e;_((()=>{h(!1),Y(),void 0!==n&&(w(n),y("info"))})),t.debug("stats",pe)},me=()=>{y("error")},be=()=>{Ee()};n.addEventListener("ready",te),n.addEventListener("metadata",ne),n.addEventListener("play",le),n.addEventListener("playing",oe),n.addEventListener("idle",ce),n.addEventListener("loading",ue),n.addEventListener("offline",fe),n.addEventListener("muted",de),n.addEventListener("ended",ve),n.addEventListener("errored",me),n.addEventListener("seeked",be);const ye=()=>{J=new ResizeObserver(function(e,t){let n;return function(){for(var r=arguments.length,l=new Array(r),o=0;oe.apply(this,l)),t)}}((e=>{d({containerW:V.offsetWidth,containerH:V.offsetHeight}),V.dispatchEvent(new CustomEvent("resize",{detail:{el:X}}))}),10)),J.observe(V)};N((async()=>{t.info("view: mounted"),t.debug("view: font measurements",{charW:l,charH:o}),ye(),d({containerW:V.offsetWidth,containerH:V.offsetHeight})})),F((()=>{n.removeEventListener("ready",te),n.removeEventListener("metadata",ne),n.removeEventListener("play",le),n.removeEventListener("playing",oe),n.removeEventListener("idle",ce),n.removeEventListener("loading",ue),n.removeEventListener("offline",fe),n.removeEventListener("muted",de),n.removeEventListener("ended",ve),n.removeEventListener("errored",me),n.removeEventListener("seeked",be),n.stop(),xe(),J.disconnect()}));const ke=P((()=>{const t=l*B()+i,n=o*W()+s;let r=e.fit??"width";if("both"===r||f.isFullscreen){r=f.containerW/(f.containerH-K())>t/n?"height":"width"}if(!1===r||"none"===r)return{};if("width"===r){const e=f.containerW/t;return{scale:e,width:f.containerW,height:n*e+K()}}if("height"===r){const e=(f.containerH-K())/n;return{scale:e,width:t*e,height:f.containerH}}throw new Error(`unsupported fit mode: ${r}`)})),we=()=>{d("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},$e=()=>{f.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(V.requestFullscreen??V.webkitRequestFullscreen??(()=>{})).apply(V)},Me=()=>{j()?H(!1):(n.pause(),H(!0))},Re=e=>{if(!(e.altKey||e.metaKey||e.ctrlKey)){if(" "==e.key)n.togglePlay();else if(","==e.key)n.step(-1).then(Ee);else if("."==e.key)n.step().then(Ee);else if("f"==e.key)$e();else if("m"==e.key)Ne();else if("["==e.key)n.seek({marker:"prev"});else if("]"==e.key)n.seek({marker:"next"});else if(e.key.charCodeAt(0)>=48&&e.key.charCodeAt(0)<=57){const t=(e.key.charCodeAt(0)-48)/10;n.seek(100*t+"%")}else if("?"==e.key)Me();else if("ArrowLeft"==e.key)e.shiftKey?n.seek("<<<"):n.seek("<<");else if("ArrowRight"==e.key)e.shiftKey?n.seek(">>>"):n.seek(">>");else{if("Escape"!=e.key)return;H(!1)}e.stopPropagation(),e.preventDefault()}},Ce=()=>{f.isFullscreen&&Se(!0)},Ze=()=>{f.isFullscreen||Se(!1)},Ae=()=>{I=setInterval(Ee,100)},xe=()=>{clearInterval(I)},Ee=async()=>{const e=await n.getCurrentTime(),t=await n.getRemainingTime(),r=await n.getProgress();d({currentTime:e,remainingTime:t,progress:r})},Se=e=>{clearTimeout(q),e&&(q=setTimeout((()=>Se(!1)),2e3)),O(e)},Pe=P((()=>c?D():null)),_e=()=>{ee.then((()=>n.play()))},Te=()=>{ee.then((()=>n.togglePlay()))},Ne=()=>{ee.then((()=>{!0===g()?n.unmute():n.mute()}))},ze=e=>{ee.then((()=>n.seek(e)))},Oe=(()=>{const t=Kt.cloneNode(!0),r=t.firstChild;"function"==typeof V?ge(V,t):V=t,t.addEventListener("webkitfullscreenchange",we),t.addEventListener("fullscreenchange",we),t.$$mousemove=Ce,t.$$keydown=Re;return"function"==typeof X?ge(X,r):X=r,r.$$mousemove=()=>Se(!0),r.addEventListener("mouseleave",Ze),Le(r,re(Xe,{get cols(){return B()},get rows(){return W()},get scale(){return ke()?.scale},get blinking(){return $()},get lineHeight(){return e.terminalLineHeight},preferEmbeddedTheme:c,core:n,get stats(){return pe}}),null),Le(r,re(ie,{get when(){return!1!==e.controls},get children(){return re(Zt,{get duration(){return Z()},get currentTime(){return f.currentTime},get remainingTime(){return f.remainingTime},get progress(){return f.progress},markers:S,get isPlaying(){return p()||"loader"==b()},get isPausable(){return f.isPausable},get isSeekable(){return f.isSeekable},get isMuted(){return g()},onPlayClick:Te,onFullscreenClick:$e,onHelpClick:Me,onSeekClick:ze,onMuteClick:Ne,ref(e){"function"==typeof G?G(e):G=e}})}}),null),Le(r,re(se,{get children(){return[re(ae,{get when(){return"start"==b()},get children(){return re(Nt,{onClick:_e})}}),re(ae,{get when(){return"loader"==b()},get children(){return re(St,{})}}),re(ae,{get when(){return"error"==b()},get children(){return re(xt,{})}})]}}),null),Le(r,re(Ke,{name:"slide",get children(){return re(ie,{get when(){return"info"==b()},get children(){return re(_t,{get message(){return k()},get wasPlaying(){return v()}})}})}}),null),Le(r,re(ie,{get when(){return j()},get children(){return re(Wt,{onClose:()=>H(!1),get isPausable(){return f.isPausable},get isSeekable(){return f.isSeekable},get hasAudio(){return void 0!==g()}})}}),null),E((n=>{const l=!!(!0===e.controls||"auto"===e.controls&&z()),o=`ap-player ap-default-term-ff asciinema-player-theme-${u}`,i=(()=>{const t={};!1!==e.fit&&"none"!==e.fit||void 0===e.terminalFontSize||("small"===e.terminalFontSize?t["font-size"]="12px":"medium"===e.terminalFontSize?t["font-size"]="18px":"big"===e.terminalFontSize?t["font-size"]="24px":t["font-size"]=e.terminalFontSize);const n=ke();void 0!==n.width&&(t.width=`${n.width}px`,t.height=`${n.height}px`),void 0!==e.terminalFontFamily&&(t["--term-font-family"]=e.terminalFontFamily);const r=Pe();return r&&(t["--term-color-foreground"]=r.foreground,t["--term-color-background"]=r.background),t})();var s,a;return l!==n._v$&&t.classList.toggle("ap-hud",n._v$=l),o!==n._v$2&&(s=r,null==(a=n._v$2=o)?s.removeAttribute("class"):s.className=a),n._v$3=he(r,i,n._v$3),n}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),t})();return Oe};function It(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=function(e,t){const n=80,r=24,l=document.createElement("div");l.className="ap-default-term-ff",l.style.height="0px",l.style.overflow="hidden",l.style.fontSize="15px",void 0!==e&&l.style.setProperty("--term-font-family",e);const o=document.createElement("div");o.className="ap-term",o.style.width=`${n}ch`,o.style.height=r*(t??1.3333333333)+"em",o.style.fontSize="100%",l.appendChild(o),document.body.appendChild(l);const i={charW:o.clientWidth/n,charH:o.clientHeight/r,bordersW:o.offsetWidth-o.clientWidth,bordersH:o.offsetHeight-o.clientHeight};return document.body.removeChild(l),i}(n.terminalFontFamily,n.terminalLineHeight),l={core:e,logger:n.logger,cols:n.cols,rows:n.rows,fit:n.fit,controls:n.controls,autoPlay:n.autoPlay,terminalFontSize:n.terminalFontSize,terminalFontFamily:n.terminalFontFamily,terminalLineHeight:n.terminalLineHeight,theme:n.theme,...r};let o;const i=function(e,t,n,r={}){let l;return A((r=>{l=r,t===document?e():Le(t,e(),t.firstChild?null:void 0,n)}),r.owner),()=>{l(),t.textContent=""}}((()=>(o=re(qt,l),o)),t);return{el:o,dispose:i}}fe(["keydown","mousemove"]);const Vt=["audioUrl","autoPlay","autoplay","boldIsBright","cols","idleTimeLimit","loop","markers","pauseOnMarkers","poster","preload","rows","speed","startAt"],Xt=["autoPlay","autoplay","cols","controls","fit","rows","terminalFontFamily","terminalFontSize","terminalLineHeight","theme"];class Gt{constructor(e,t,n){this.worker=new Worker(e),this.worker.onmessage=this._onMessage.bind(this),this.nextId=1,this.eventHandlers=new Map([["ended",[]],["errored",[]],["idle",[]],["input",[]],["loading",[]],["marker",[]],["metadata",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["ready",[]],["reset",[]],["resize",[]],["seeked",[]],["vtUpdate",[]]]),this.resolves=new Map,this._sendCommand("new",[t,n])}async init(){return this._sendCommand("init")}play(){return this._sendCommand("play")}pause(){return this._sendCommand("pause")}togglePlay(){return this._sendCommand("togglePlay")}seek(e){return this._sendCommand("seek",e)}step(e){return this._sendCommand("step",e)}stop(){return this._sendCommand("stop")}getChanges(){return this._sendCommand("getChanges")}getCurrentTime(){return this._sendCommand("getCurrentTime")}getRemainingTime(){return this._sendCommand("getRemainingTime")}getProgress(){return this._sendCommand("getProgress")}getDuration(){return this._sendCommand("getDuration")}addEventListener(e,t){const n=this.eventHandlers.get(e);0===n.length&&this._sendNotification("addEventListener",[e]),n.push(t)}_dispatchEvent(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const n of this.eventHandlers.get(e))n(t)}_sendCommand(e,t){let n;const r=new Promise((e=>{n=e}));return this.resolves.set(this.nextId,n),this.worker.postMessage({method:e,params:t,id:this.nextId}),this.nextId++,r}_sendNotification(e,t){this.worker.postMessage({method:e,params:t})}_onMessage(e){void 0!==e.data.id?(this.resolves.get(e.data.id)(e.data.result),this.resolves.delete(e.data.id)):"onEvent"===e.data.method&&this._dispatchEvent(e.data.params.name,e.data.params.event)}}return e.create=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};const l=r.logger===console||void 0,o=new Gt(n,e,function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Object.fromEntries(Object.entries(e).filter((e=>{let[t]=e;return Vt.includes(t)})));return n.autoPlay??=n.autoplay,n.speed??=1,{...n,...t}}(r,{logger:l})),i=r.logger??new h,{el:s,dispose:a}=It(o,t,function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=Object.fromEntries(Object.entries(e).filter((e=>{let[t]=e;return Xt.includes(t)})));return n.autoPlay??=n.autoplay,n.controls??="auto",{...n,...t}}(r,{logger:i})),c=o.init(),u={el:s,dispose:a,getCurrentTime:()=>c.then(o.getCurrentTime.bind(o)),getDuration:()=>c.then(o.getDuration.bind(o)),play:()=>c.then(o.play.bind(o)),pause:()=>c.then(o.pause.bind(o)),seek:e=>c.then((()=>o.seek(e))),addEventListener:(e,t)=>o.addEventListener(e,t.bind(u))};return u},e}({}); diff --git a/packages/landing/public/asciinema-player/asciinema-player-worker.min.js b/packages/landing/public/asciinema-player/asciinema-player-worker.min.js deleted file mode 100644 index 53014d92b..000000000 --- a/packages/landing/public/asciinema-player/asciinema-player-worker.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(){"use strict";function A(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,V,g)=>A+V*Math.pow(60,g))):void 0}const V=/^#[0-9a-f]{6}$/,g=/^#[0-9a-f]{3}$/;function I(A){let I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if("string"!=typeof A)return I;const B=A.trim().toLowerCase();return V.test(B)?B:g.test(B)?`#${B[1]}${B[1]}${B[2]}${B[2]}${B[3]}${B[3]}`:I}class B{constructor(A,V){this.logger=A,this.prefix=V}log(A){for(var V=arguments.length,g=new Array(V>1?V-1:0),I=1;I1?V-1:0),I=1;I1?V-1:0),I=1;I1?V-1:0),I=1;I1?V-1:0),I=1;I0?`Function(${V})`:"Function"}if(Array.isArray(A)){const V=A.length;let g="[";V>0&&(g+=E(A[0]));for(let I=1;I1))return toString.call(A);if(I=g[1],"Object"==I)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:I}function e(A,V){return A>>>=0,function(){null!==s&&0!==s.byteLength||(s=new Uint32Array(Q.memory.buffer));return s}().subarray(A/4,A/4+V)}let t=null;function i(){return(null===t||!0===t.buffer.detached||void 0===t.buffer.detached&&t.buffer!==Q.memory.buffer)&&(t=new DataView(Q.memory.buffer)),t}function o(A,V){return function(A,V){F+=V,F>=y&&(h=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),h.decode(),F=V);return h.decode(n().subarray(A,A+V))}(A>>>=0,V)}let s=null;let r=null;function n(){return null!==r&&0!==r.byteLength||(r=new Uint8Array(Q.memory.buffer)),r}function a(A){return w[A]}let w=new Array(128).fill(void 0);w.push(void 0,null,!0,!1);let D=w.length;function c(A,V,g){if(void 0===g){const g=l.encode(A),I=V(g.length,1)>>>0;return n().subarray(I,I+g.length).set(g),d=g.length,I}let I=A.length,B=V(I,1)>>>0;const Q=n();let C=0;for(;C127)break;Q[B+C]=V}if(C!==I){0!==C&&(A=A.slice(C)),B=g(B,I,I=C+3*A.length,1)>>>0;const V=n().subarray(B+C,B+I);C+=l.encodeInto(A,V).written,B=g(B,I,C,1)>>>0}return d=C,B}function q(A){const V=a(A);return function(A){A<132||(w[A]=D,D=A)}(A),V}let h=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});h.decode();const y=2146435072;let F=0;const l=new TextEncoder;"encodeInto"in l||(l.encodeInto=function(A,V){const g=l.encode(A);return V.set(g),{read:A.length,written:g.length}});let d=0;const k="undefined"==typeof FinalizationRegistry?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((A=>Q.__wbg_vt_free(A>>>0,1)));class G{static __wrap(A){A>>>=0;const V=Object.create(G.prototype);return V.__wbg_ptr=A,k.register(V,V.__wbg_ptr,V),V}__destroy_into_raw(){const A=this.__wbg_ptr;return this.__wbg_ptr=0,k.unregister(this),A}free(){const A=this.__destroy_into_raw();Q.__wbg_vt_free(A,0)}feed(A){const V=c(A,Q.__wbindgen_export,Q.__wbindgen_export2),g=d;return q(Q.vt_feed(this.__wbg_ptr,V,g))}resize(A,V){return q(Q.vt_resize(this.__wbg_ptr,A,V))}getSize(){try{const I=Q.__wbindgen_add_to_stack_pointer(-16);Q.vt_getSize(I,this.__wbg_ptr);var A=i().getInt32(I+0,!0),V=i().getInt32(I+4,!0),g=e(A,V).slice();return Q.__wbindgen_export3(A,4*V,4),g}finally{Q.__wbindgen_add_to_stack_pointer(16)}}getLine(A,V){return q(Q.vt_getLine(this.__wbg_ptr,A,V))}getCursor(){return q(Q.vt_getCursor(this.__wbg_ptr))}}Symbol.dispose&&(G.prototype[Symbol.dispose]=G.prototype.free);const u=new Set(["basic","cors","default"]);function N(){const A={wbg:{}};return A.wbg.__wbg___wbindgen_debug_string_adfb662ae34724b6=function(A,V){const g=c(E(a(V)),Q.__wbindgen_export,Q.__wbindgen_export2),I=d;i().setInt32(A+4,I,!0),i().setInt32(A+0,g,!0)},A.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e=function(A,V){throw new Error(o(A,V))},A.wbg.__wbg_new_13317ed16189158e=function(){return C(new Array)},A.wbg.__wbg_new_4ceb6a766bf78b04=function(){return C(new Object)},A.wbg.__wbg_set_3f1d0b984ed272ed=function(A,V,g){a(A)[q(V)]=q(g)},A.wbg.__wbg_set_8b6a9a61e98a8881=function(A,V,g){a(A)[V>>>0]=q(g)},A.wbg.__wbindgen_cast_2241b6af4c4b2941=function(A,V){return C(o(A,V))},A.wbg.__wbindgen_cast_4625c577ab2ec9ee=function(A){return C(BigInt.asUintN(64,A))},A.wbg.__wbindgen_cast_d6cd19b81560fd6e=function(A){return C(A)},A.wbg.__wbindgen_object_clone_ref=function(A){return C(a(A))},A.wbg.__wbindgen_object_drop_ref=function(A){q(A)},A}function U(A,V){return Q=A.exports,f.__wbindgen_wasm_module=V,t=null,s=null,r=null,Q}async function f(A){if(void 0!==Q)return Q;void 0!==A&&(Object.getPrototypeOf(A)===Object.prototype?({module_or_path:A}=A):console.warn("using deprecated parameters for the initialization function; pass a single object instead"));const V=N();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:g,module:I}=await async function(A,V){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,V)}catch(V){if(!A.ok||!u.has(A.type)||"application/wasm"===A.headers.get("Content-Type"))throw V;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",V)}const g=await A.arrayBuffer();return await WebAssembly.instantiate(g,V)}{const g=await WebAssembly.instantiate(A,V);return g instanceof WebAssembly.Instance?{instance:g,module:A}:g}}(await A,V);return U(g,I)}var M=Object.freeze({__proto__:null,Vt:G,create:function(A,V,g,I){const B=Q.create(A,V,g,I);return G.__wrap(B)},default:f,initSync:function(A){if(void 0!==Q)return Q;void 0!==A&&(Object.getPrototypeOf(A)===Object.prototype?({module:A}=A):console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const V=N();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),U(new WebAssembly.Instance(A,V),A)}});const J=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function R(A){return J[A-43]}var L=function(A){let V,g=A.endsWith("==")?2:A.endsWith("=")?1:0,I=A.length,B=new Uint8Array(I/4*3);for(let g=0,Q=0;g>16,B[Q+1]=V>>8&255,B[Q+2]=255&V;return B.subarray(0,B.length-g)}("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CAgJCgsODA4NDgsgAkGoAWpBASABKAIAIAEoAgRB1NzAABCBASABIAIpA6gBNwIAIABBADoAAAwYCyACQbABakEBIAEoAgAgASgCBEHk3MAAEIEBIAEgAikDsAE3AgAgAEEBOgAADBcLIAJBuAFqQQEgASgCACABKAIEQfTcwAAQgQEgASACKQO4ATcCACAAQQI6AAAMFgsgAkHAAWpBASABKAIAIAEoAgRBhN3AABCBASABIAIpA8ABNwIAIABBAzoAAAwVCyACQcgBakEBIAEoAgAgASgCBEGU3cAAEIEBIAEgAikDyAE3AgAgAEEEOgAADBQLIAJB0AFqQQEgASgCACABKAIEQaTdwAAQgQEgASACKQPQATcCACAAQQU6AAAMEwsgAkHYAWpBASABKAIAIAEoAgRBtN3AABCBASABIAIpA9gBNwIAIABBBjoAAAwSCyACQeABakEBIAEoAgAgASgCBEHE3cAAEIEBIAEgAikD4AE3AgAgAEEHOgAADBELIAJB6AFqQQEgASgCACABKAIEQdTdwAAQgQEgASACKQPoATcCACAAQQg6AAAMEAsgAkHwAWpBASABKAIAIAEoAgRB5N3AABCBASABIAIpA/ABNwIAIABBCToAAAwPCyACQfgBakEBIAEoAgAgASgCBEH03cAAEIEBIAEgAikD+AE3AgAgAEEKOgAADA4LIAJBgAJqQQEgASgCACABKAIEQYTewAAQgQEgASACKQOAAjcCACAAQQs6AAAMDQsgAkGIAmpBASABKAIAIAEoAgRBlN7AABCBASABIAIpA4gCNwIAIABBDDoAAAwMCyACQZACakEBIAEoAgAgASgCBEGk3sAAEIEBIAEgAikDkAI3AgAgAEENOgAADAsLAkACQCADQR5rQf//A3FBCE8EQCADQSZrDgIBCAILIAJBCGpBASABKAIAIAEoAgRBxODAABCBASABIAIpAwg3AgAgACADQR5rOgACIABBDjsAAAwMCwJAIAEoAgQiA0ECTwRAIAJBmAFqIAEoAgBBEGoQaSACKAKYASIDDQEgASgCBCEDCyACQegAakEBIAEoAgAgA0G03sAAEIEBIAIoAmwhAyACKAJoIQQMDQsCQAJAAkAgAigCnAFBAUcNACADLwEAQQJrDgQBAAACAAsgAkHwAGpBASABKAIAIAEoAgRBhN/AABCB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ACABQQRqIQwgAkFAayENIAJBJWohDiACQRxqIQ8gASgCJCEFIAEoAhQhECABKAIQIQMCQAJAAn8CQANAIAEoAgAhBiABQYCAgIB4NgIAIAEoAgQhCwJAAkACQAJAAkAgBkGAgICAeEcEQCABKQIIIREgCyEHDAELAkAgAyAQRgRAQYCAgIB4IQYMAQsgASADQRBqIgg2AhAgAykCCCERIAMoAgQhByADKAIAIQYgCCEDC0GAgICAeCALEKMBIAZBgICAgHhGDQELIAIgBzYCDCACIAY2AgggAiARNwIQIBFCIIghEkF/IAUgEaciBEcgBCAFSxtB/wFxDgICAwELQYCAgIB4IAcQowEgAEGAgICAeDYCACABQYCAgIB4NgIADAcLAkAgEqdBAXENACAFIAQgByAEEDRrIgMgAyAFSRsiAyAESw0AIAIgAzYCECADIQQLAn9BgICAgHggBCAFTQ0AGgJAAkAgByAEIAVBuNrAABCQASgCBEUEQCACQThqIgMgAkEIaiIIIAVBAWsQPyACQTBqIANBCGooAgA2AgAgAiACKQI4NwMoIAItABQhBCADQRBqIAIoAgwgAigCECIHIAdBAWtB2NrAABCQASIHQRBqLwEAOwEAIAJCoICAgBA3AjggAiAHKQIINwJAIAggA0Ho2sAAEFcgAiAEOgA0IAItABRBAXFFDQEMAgsgAkE4aiIDIAJBCGogBRA/IAJBMGogA0EIaigCADYCACACIAIpAjg3AyggAiACLQAUIgM6ADQgAw0BCyACQShqEIsBCyACKAIwBEAgAkFAayACQTRqKAIANgIAIAJBAToAFCACIAIpAiw3AzggAigCKAwBCyACKAIoIAIoAixBBEEUEJ8BQYCAgIB4CyEDQYCAgIB4IAsQowEgASADNgIAIAwgAikDODcCACAMQQhqIAJBQGsoAgA2AgAgAEEIaiACQRBqKQIANwIAIAAgAikCCDcCAAwGCyAAIBE3AgggACAHNgIEIAAgBjYCAAwFCwJAIAMgEEcEQCABIANBEGoiCDYCECADKAIAIgZBgICAgHhHDQELIAJBADsAQCACQQI6ADwgAkECOgA4IAJBCGoiASAFIAJBOGoQQSAAIAIpAgg3AgAgAkEAOgAUIABBCGogAUEIaikCADcCAAwFCyADQQxqKAIAIQkgDyADKQIENwIAIA9BCGogCTYCACACIAY2AhggBSAEayIJRQ0BIBKnQQFxRQRAIAJBADsAQCACQQI6ADwgAkECOgA4IAJBCGogBSACQThqEEEMAgsgAi0AJEUEQCACQRhqEIsBCyACKAIcIQMgAigCICIKIAlNBEAgAkEIaiIEIAMgChCAAQJAIAItACQiBg0AIAJBADoAFCACKAIQIAVPDQAgAkEAOwBAIAJBAjoAPCACQQI6ADggBCAFIAJBOGoQQQsgAigCGCADQQRBFBCfASAGRQ0EQYCAgIB4IAsQowEgAUEIaiACQRBqKQIANwIAIAEgAikCCDcCAEGAgICAeCACEKMBIAghAwwBCwsgAyAKIAlB+NnAABCQASgCBEUEQCANQQhqIAcgBCAEQQFrQYjawAAQkAEiCEEQai8BADsBACANIAgpAgg3AgAgAkKggICAEDcCOCACQQhqIAJBOGpBmNrAABBXIAlBAWshCQsgCSAKTQRAIAJBCGogAyAJEIABIAIoAhghBiADIAogCRCIASAGQYCAgIB4Rg0DIAogCiAJayIIIAggCksbIQQgAi0AJAwCCyAJIApBqNrAABCzAQALIAJBKmogDkECai0AADoAACACIA4vAAA7ASggAigCICEEIAIoAhwhAyACLQAkCyEIQYCAgIB4IAsQowEgASAIOgAMIAEgBDYCCCABIAM2AgQgASAGNgIAIAEgAi8BKDsADSABQQ9qIAJBKmotAAA6AAALIAAgAikCCDcCACAAQQhqIAJBEGopAgA3AgALIAJB0ABqJAAL5QoCEH8BfiMAQZABayICJAAgACgCbCIFIAAoAhwiBmsiAUEAIAEgACgCFCIHIAZrIAVqTRshDSAFIAdqIQMgB0EEdCIBIAAoAhAiCmohDyAAKAIYIQwgACgCaCEOIAAoAqABIQsgACgCnAEhCCAKIQQDQAJAIAMgBkYNACABRQ0AIAkgDGpBACAELQAMIhAbIQkgA0EBayEDIAFBEGshASAEQRBqIQQgDSAQQQFzaiENDAELCyAIIAxHBEBBACEFIABBADYCFCACIAg2AjggAkEANgI0IAIgBzYCMCACIABBDGoiDDYCLCACIA82AiggAiAKNgIkIAJBgICAgHg2AhQgAkHIAGogAkEUaiIBEBACfyACKAJIQYCAgIB4RgRAIAEQoQFBBCEEQQAMAQsgAkEIakEE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QQlJDQEgA0UEQCABIQMDQCADIAVqIgEgAyACEGogASEDIAIgACACayIATQ0ACwwBCwtBACAAQQR0IgNrIQUDQCABIAVqIAEgABBqIAEgA2ohASACIABrIgIgAE8NAAsMAQsLIAEgAEEEdCIFayIDIAJBBHQiBmohByAAIAJLDQEgBEEQaiIAIAMgBRAWGiADIAEgBhASIAcgACAFEBYaDAILIARBCGoiByABIABBBHRrIgZBCGopAgA3AwAgBCAGKQIANwMAIAJBBHQhCCACIgUhAQNAIAYgAUEEdGohAwNAIARBGGoiCSADQQhqIgopAgA3AwAgBCADKQIANwMQIAcpAwAhDSADIAQpAwA3AgAgCiANNwIAIAcgCSkDADcDACAEIAQpAxA3AwAgACABSwRAIAMgCGohAyABIAJqIQEMAQsLIAEgAGsiAQRAIAEgBSABIAVJGyEFDAEFIAQpAwAhDSAGQQhqIARBCGoiBykDADcCACAGIA03AgBBASAFIAVBAU0bIQlBASEBA0AgASAJRg0EIAYgAUEEdGoiBSkCACENIAcgBUEIaiIKKQIANwMAIAQgDTcDACABIAJqIQMDQCAEQRhqIgsgBiADQQR0aiIIQQhqIgwpAgA3AwAgBCAIKQIANwMQIAcpAwAhDSAIIAQpAwA3AgAgDCANNwIAIAcgCykDADcDACAEIAQpAxA3AwAgACADSwRAIAIgA2ohAwwBCyADIABrIgMgAUcNAAsgBCkDACENIAogBykDADcCACAFIA03AgAgAUEBaiEBDAALAAsACwALIARBEGoiACABIAYQFhogByADIAUQEiADIAAgBhAWGgsgBEGQAWokAAuQBQEIfwJAIAJBEEkEQCAAIQMMAQsCQEEAIABrQQNxIgYgAGoiBSAATQ0AIAZBAWsgACEDIAEhBCAGBEAgBiEHA0AgAyAELQAAOgAAIARBAWohBCADQQFqIQMgB0EBayIHDQALC0EHSQ0AA0AgAyAELQAAOgAAIANBAWogBEEBai0AADoAACADQQJqIARBAmotAAA6AAAgA0EDaiAEQQNqLQAAOgAAIANBBGogBEEEai0AADoAACADQQVqIARBBWotAAA6AAAgA0EGaiAEQQZqLQAAOgAAIANBB2ogBEEHai0AADoAACAEQQhqIQQgBSADQQhqIgNHDQALCyACIAZrIgdBfHEiCCAFaiEDAkAgASAGaiIEQQNxRQRAIAMgBU0NASAEIQEDQCAFIAEoAgA2AgAgAUEEaiEBIAVBBGoiBSADSQ0ACwwBCyADIAVNDQAgBEEDdCICQRhxIQYgBEF8cSIJQQRqIQFBACACa0EYcSEKIAkoAgAhAgNAIAIgBnYhCSAFIAkgASgCACICIAp0cjYCACABQQRqIQEgBUEEaiIFIANJDQALCyAHQQNxIQIgBCAIaiEBCwJAIAIgA2oiBiADTQ0AIAJBAWsgAkEHcSIEBEADQCADIAEtAAA6AAAgAUEBaiEBIANBAWohAyAEQQFrIgQNAAsLQQdJDQADQCADIAEtAAA6AAAgA0EBaiABQQFqLQAAOgAAIANBAmogAUECai0AADoAACADQQNqIAFBA2otAAA6AAAgA0EEaiABQQRqLQAAOgAAIANBBWogAUEFai0AADoAACADQQZqIAFBBmotAAA6AAAgA0EHaiABQQdqLQAAOgAAIAFBCGohASAGIANBCGoiA0cNAAsLIAAL6gQBCn8jAEEwayIDJAAgAyABNgIsIAMgADYCKCADQQM6ACQgA0IgNwIcIANBADYCFCADQQA2AgwCfwJAAkACQCACKAIQIgpFBEAgAigCDCIARQ0BIAIoAggiASAAQQN0aiEEIABBAWtB/////wFxQQFqIQcgAigCACEAA0AgAEEEaigCACIFBEAgAygCKCAAKAIAIAUgAygCLCgCDBEDAA0ECyABKAIAIANBDGogAUEEaigCABECAA0DIABBCGohACAEIAFBCGoiAUcNAAsMAQsgAigCFCIARQ0AIABBBXQhCyAAQQFrQf///z9xQQFqIQcgAigCCCEFIAIoAgAhAANAIABBBGooAgAiAQRAIAMoAiggACgCACABIAMoAiwoAgwRAwANAwsgAyAIIApqIgFBEGooAgA2AhwgAyABQRxqLQAAOgAkIAMgAUEYaigCADYCICABQQxqKAIAIQRBACEJQQAhBgJAAkACQCABQQhqKAIAQQFrDgIAAgELIAUgBEEDdGoiDCgCAA0BIAwoAgQhBAtBASEGCyADIAQ2AhAgAyAGNgIMIAFBBGooAgAhBAJAAkACQCABKAIAQQFrDgIAAgELIAUgBEEDdGoiBigCAA0BIAYoAgQhBAtBASEJCyADIAQ2AhggAyAJNgIUIAUgAUEUaigCAEEDdGoiASgCACADQQxqIAFBBGooAgARAgANAiAAQQhqIQAgCyAIQSBqIghHDQALCyAHIAIoAgRPDQEgAygCKCACKAIAIAdBA3RqIgAoAgAgACgCBCADKAIsKAIMEQMARQ0BC0EBDAELQQALIANBMGokAAurBAEMfyABQQFrIQ4gACgCBCEKIAAoAgAhCyAAKAIIIQwCQANAIAUNAQJ/AkAgAiADSQ0AA0AgASADaiEFAkACQAJAIAIgA2siB0EHTQRAIAIgA0cNASACIQMMBQsCQCAFQQNqQXxxIgYgBWsiBARAQQAhAANAIAAgBWotAABBCkYNBSAEIABBAWoiAEcNAAsgB0EIayIAIARPDQEMAwsgB0EIayEACwNAIAYoAgAiCUGAgoQIIAlBipSo0ABza3IgBkEEaigCACIJQYCChAggCUGKlKjQAHNrcnFBgIGChHhxQYCBgoR4Rw0CIAZBCGohBiAAIARBCGoiBE8NAAsMAQtBACEAA0AgACAFai0AAEEKRg0CIAcgAEEBaiIARw0ACyACIQMMAwsgBCAHRgRAIAIhAwwDCyAEIAVqIQYgAiAEayADayEHQQAhAAJAA0AgACAGai0AAEEKRg0BIAcgAEEBaiIARw0ACyACIQMMAwsgACAEaiEACyAAIANqIgRBAWohAwJAIAIgBE0NACAAIAVqLQAAQQpHDQBBACEFIAMiBAwDCyACIANPDQALCyACIAhGDQJBASEFIAghBCACCyEAAkAgDC0AAARAIAtBjOfAAEEEIAooAgwRAwANAQsgACAIayEHQQAhBiAAIAhHBEAgACAOai0AAEEKRiEGCyABIAhqIQAgDCAGOgAAIAQhCCALIAAgByAKKAIMEQMARQ0BCwtBASENCyANC6EEAgt/An4jAEHQAGshBAJAIABFDQAgAkUNACAEQQhqIgNBEGoiBiABIABBbGxqIgsiB0EQaigCADYCACADQQhqIgggB0EIaikCADcDACAEIAcpAgA3AwggAkEUbCEJIAIiAyEFA0AgCyADQRRsaiEBA0AgASkCACEOIAEgBCkDCDcCACAIKQMAIQ8gCCABQQhqIgopAgA3AwAgCiAPNwIAIAYoAgAhCiAGIAFBEGoiDCgCADYCACAMIAo2AgAgBCAONwMIIAAgA01FBEAgASAJaiEBIAIgA2ohAwwBCwsgAyAAayIDBEAgAyAFIAMgBUkbIQUMAQUgByAEKQMINwIAIAdBEGogBEEIaiIBQRBqIgYoAgA2AgAgB0EIaiABQQhqIggpAwA3AgBBASAFIAVBAU0bIQtBASEDA0AgAyALRg0DIAYgByADQRRsaiIFQRBqIgooAgA2AgAgCCAFQQhqIgwpAgA3AwAgBCAFKQIANwMIIAIgA2ohAQNAIAcgAUEUbGoiCSkCACEOIAkgBCkDCDcCACAIKQMAIQ8gCCAJQQhqIg0pAgA3AwAgDSAPNwIAIAYoAgAhDSAGIAlBEGoiCSgCADYCACAJIA02AgAgBCAONwMIIAAgAUsEQCABIAJqIQEMAQsgAyABIABrIgFHDQALIAUgBCkDCDcCACAKIAYoAgA2AgAgDCAIKQMANwIAIANBAWohAwwACwALAAsACwvRBAIDfwR+IwBB0AZrIgQkACAEQfwBakEAQYUEEB4aIARBgIDEADYC+AEgBEE0aiIFIAAgAUEBIAJBABAfIARB2ABqIAAgAUEBQQBBABAfIARBxAZqIgYgARBVIARBhAFqIAAQOSAEQQA6APABIAQgATYC1AEgBCAANgLQASAEQQA7Ae4BIARBAjoA6gEgBEECOgDmASAEQQE6AKQBIARCADcCnAEgBCACNgKAASAEQQE2AnwgBEEAOwHkASAEQQA6APUBIARBgIAENgDxASAEQgA3AtgBIAQgAUEBazYC4AEgBEECOgCwASAEQQI6ALQBIARBADYCwAEgBEECOgDEASAEQQI6AMgBIARBgICACDYCzAEgBEIANwKoASAEQoCAgAg3ArgBIARBmAFqIAZBCGooAgA2AgAgBEEAOgD2ASAEIAQpAsQGNwKQASAEQShqIABBAkEIQYzCwAAQYCAEKQMoIQcgBEEgaiAAQQJBDEGcwsAAEGAgBCkDICEIIARBGGogAEEEQQxBrMLAABBgIAQpAxghCSAEQRBqIABBBEEQQbzCwAAQYCAEKQMQIQogBEEIaiAAQQRBBEHMwsAAEGAgBCADQQBHOgDABiAEQQA2ArwGIARBADYCsAYgBCAKNwKoBiAEQQA2AqQGIAQgCTcCnAYgBEEANgKYBiAEIAg3ApAGIARBADYCjAYgBCAHNwKEBiAEIAQpAwg3ArQGQZwGEJkBIgBBADYCCCAAQoGAgIAQNwIAIABBDGogBUGQBhAWGiAEQdAGaiQAIABBCGoLxhACEX8EfiMAQSBrIgwkABAAIQogDEEANgIcIAwgCjYCGCAMIAE2AhQgDEEUaiAFEIQBIAwoAhwhASAGQf//A3G4EAkhBSAMKAIYIhUgASAFEAEjAEEgayIGJAACQEGwssEAKAIAIgUNAEG0ssEAQQA2AgBBsLLBAEEBNgIAQbiywQAoAgAhAUG8ssEAKAIAIQhBuLLBAEHY68AAKQIAIhg3AgAgBkEIakHg68AAKQIAIhk3AwBBxLLBACgCACEKQcCywQAgGTcCACAGIBg3AwAgBUUNACAIRQ0AAkAgCkUNACABQQhqIQkgASkDAEJ/hUKAgYKEiJCgwIB/gyEZQQEhCyABIQUDQCALRQ0BIBkhGANAIBhQBEAgBUHgAGshBSAJKQMAQn+FQoCBgoSIkKDAgH+DIRggCUEIaiEJDAELCyAYQgF9IBiDIRkgCkEBayIKIQsgBSAYeqdBA3ZBdGxqQQRrKAIAIgdBhAFJDQAgBxADDAALAAsgBkEUaiAIQQFqEEMgASAGKAIcayAGKAIUIAYoAhgQpgELIAZBIGokAEG0ssEAKAIARQRAQbSywQBBfzYCAEG8ssEAKAIAIgEgA3EhBiADrSIaQhmIQoGChIiQoMCAAX4hG0G4ssEAKAIAIQoDQCAGIApqKQAAIhkgG4UiGEKBgoSIkKDAgAF9IBhCf4WDQoCBgoSIkKDAgH+DIRgCQAJAA0AgGEIAUgRAIAMgCiAYeqdBA3YgBmogAXFBdGxqIgVBDGsoAgBGBEAgBUEIaygCACAERg0DCyAYQgF9IBiDIRgMAQsLIBkgGUIBhoNCgIGChIiQoMCAf4NQDQFBwLLBACgCAEUEQCMAQTBrIggkAAJAAkACQEHEssEAKAIAIgpBf0YNAEG8ssEAKAIAIglBAWoiC0EDdiEBIAkgAUEHbCAJQQhJGyIOQQF2IApNBEAgCEEIagJ/IAogDiAKIA5LGyIBQQdPBEAgAUH+////AUsNA0F/IAFBA3RBCGpBB25BAWtndkEBagwBC0EEQQggAUEDSRsLIgEQQyAIKAIIIgVFDQEgCCgCECEGIAgoAgwiCQRAQeyywQAtAAAaIAUgCRA1IQULIAVFDQIgBSAGakH/ASABQQhqEB4hCyAIQQA2AiAgCCABQQFrIgc2AhggCCALNgIUIAhBCDYCECAIIAcgAUEDdkEHbCABQQlJGyIONgIcIAtBDGshEUG4ssEAKAIAIgYpAwBCf4VCgIGChIiQoMCAf4MhGCAGIQEgCiEJQQAhBQNAIAkEQANAIBhQBEAgBUEIaiEFIAEpAwhCf4VCgIGChIiQoMCAf4MhGCABQQhqIQEMAQsLIAggCyAHIAYgGHqnQQN2IAVqIg1BdGxqIgZBDGsoAgAiECAGQQhrKAIAIBAbrRBkIBEgCCgCAEF0bGoiEEG4ssEAKAIAIgYgDUF0bGpBDGsiDSkAADcAACAQQQhqIA1BCGooAAA2AAAgCUEBayEJIBhCAX0gGIMhGAwBCwsgCCAKNgIgIAggDiAKazYCHEEAIQEDQCABQRBHBEAgAUG4ssEAaiIFKAIAIQYgBSABIAhqQRRqIgUoAgA2AgAgBSAGNgIAIAFBBGohAQwBCwsgCCgCGCIBRQ0DIAhBJGogAUEBahBDIAgoAhQgCCgCLGsgCCgCJCAIKAIoEKYBDAMLIAEgC0EHcUEAR2ohBUG4ssEAKAIAIgYhAQNAIAUEQCABIAEpAwAiGEJ/hUIHiEKBgoSIkKDAgAGDIBhC//79+/fv37//AIR8NwMAIAFBCGohASAFQQFrIQUMAQUCQCALQQhPBEAgBiALaiAGKQAANwAADAELIAZBCGogBiALEBILIAZBCGohESAGQQxrIRAgBiEFQQAhAQNAAkACQCABIAtHBEAgASAGaiITLQAAQYABRw0CIAFBdGwiByAQaiEUIAYgB2oiB0EIayEWIAdBDGshFwNAIAEgFygCACIHIBYoAgAgBxsiByAJcSIPayAGIAkgB60QRCINIA9rcyAJcUEISQ0CIAYgDWoiDy0AACAPIAdBGXYiBzoAACARIA1BCGsgCXFqIAc6AAAgDUF0bCEHQf8BRwRAIAYgB2ohDUF0IQcDQCAHRQ0CIAUgB2oiDy0AACESIA8gByANaiIPLQAAOgAAIA8gEjoAACAHQQFqIQcMAAsACwsgE0H/AToAACARIAFBCGsgCXFqQf8BOgAAIAcgEGoiB0EIaiAUQQhqKAAANgAAIAcgFCkAADcAAAwCC0HAssEAIA4gCms2AgAMBwsgEyAHQRl2Igc6AAAgESABQQhrIAlxaiAHOgAACyABQQFqIQEgBUEMayEFDAALAAsACwALIwBBIGsiACQAIABBADYCGCAAQQE2AgwgAEHI6sAANgIIIABCBDcCECAAQQhqQfzqwAAQigEACwALIAhBMGokAAsgAyAEEAghASAMQQhqQbiywQAoAgBBvLLBACgCACAaEGQgDCgCCCEFIAwtAAwhBkHEssEAQcSywQAoAgBBAWo2AgBBwLLBAEHAssEAKAIAIAZBAXFrNgIAQbiywQAoAgAgBUF0bGoiBUEEayABNgIAIAVBCGsgBDYCACAFQQxrIAM2AgALIAVBBGsoAgAQBCEBQbSywQBBtLLBACgCAEEBajYCACACIAEgFRAFIABBADYCACAMQSBqJAAPCyAOQQhqIg4gBmogAXEhBgwACwALIwBBMGsiACQAIABBATYCDCAAQejlwAA2AgggAEIBNwIUIAAgAEEvaq1CgICAgLABhDcDICAAIABBIGo2AhAgAEEIakHQ7MAAEIoBAAu9AwEHfyABQQFrIQlBACABayEKIABBAnQhCCACKAIAIQUDQAJAIAVFDQAgBSEBA0ACQAJAAkACfwJAIAEoAggiBUEBcUUEQCABKAIAQXxxIgsgAUEIaiIGayAISQ0DIAsgCGsgCnEiBSAGIAMgACAEEQIAQQJ0akEIakkEQCAGKAIAIQUgBiAJcQ0EIAIgBUF8cTYCACABIgUoAgAMAwtBACECIAVBADYCACAFQQhrIgVCADcCACAFIAEoAgBBfHE2AgACQCABKAIAIgBBAnENACAAQXxxIgBFDQAgACAAKAIEQQNxIAVyNgIEIAUoAgRBA3EhAgsgBSABIAJyNgIEIAEgASgCCEF+cTYCCCABIAEoAgAiAEEDcSAFciICNgIAIABBAnENASAFKAIADAILIAEgBUF+cTYCCCABKAIEQXxxIgUEf0EAIAUgBS0AAEEBcRsFQQALIQUgARBAIAEtAABBAnENAwwECyABIAJBfXE2AgAgBSgCAEECcgshAiAFIAJBAXI2AgAgBUEIaiEHDAQLIAIgBTYCAAwECyAFIAUoAgBBAnI2AgALIAIgBTYCACAFIQEMAAsACwsgBwv0AwEFfyMAQTBrIgYkACACIAFrIgcgA0shCSACQQFrIgggACgCHCIFQQFrSQRAIAAgCEGgzsAAEGJBADoADAsgAyAHIAkbIQMCQAJAIAFFBEACQCACIAVHBEAgBkEQaiAAKAIYIAQQKyAFQQR0IAJBBHRrIQcgAEEMaiEJIAAoAhQiASACIAVraiEEIAEhAgNAIANFBEAgBigCECAGKAIUQQRBFBCfAQwFCyAGQSBqIAZBEGoQVCABIARJDQIgCSgCACIIIAJGBEAjAEEQayIFJAAgBUEIaiAJIAhBAUEEQRAQJiAFKAIIIghBgYCAgHhHBEAgBSgCDBogCEGwzsAAEK4BAAsgBUEQaiQACyAAKAIQIARBBHRqIQUgAiAESwRAIAVBEGogBSAHEBILIAUgBikCIDcCACAAIAJBAWoiAjYCFCAFQQhqIAZBKGopAgA3AgAgA0EBayEDIAdBEGohBwwACwALIAAgAyAAKAIYIAQQLgwCCyAEIAJBsM7AABBMAAsgACABQQFrQcDOwAAQYkEAOgAMIAZBCGogACABIAJB0M7AABBnIAYoAgwiASADSQ0BIAMgBigCCCADQQR0aiABIANrEBUgACACIANrIAIgBBAqCyAAQQE6ACAgBkEwaiQADwtBpMjAAEEjQbzJwAAQcQALlAMBBX8CQCACQRBJBEAgACEDDAELAkBBACAAa0EDcSIFIABqIgQgAE0NACAFQQFrIAAhAyAFBEAgBSEGA0AgAyABOgAAIANBAWohAyAGQQFrIgYNAAsLQQdJDQADQCADIAE6AAAgA0EHaiABOgAAIANBBmogAToAACADQQVqIAE6AAAgA0EEaiABOgAAIANBA2ogAToAACADQQJqIAE6AAAgA0EBaiABOgAAIAQgA0EIaiIDRw0ACwsgBCACIAVrIgJBfHFqIgMgBEsEQCABQf8BcUGBgoQIbCEFA0AgBCAFNgIAIARBBGoiBCADSQ0ACwsgAkEDcSECCwJAIAIgA2oiBSADTQ0AIAJBAWsgAkEHcSIEBEADQCADIAE6AAAgA0EBaiEDIARBAWsiBA0ACwtBB0kNAANAIAMgAToAACADQQdqIAE6AAAgA0EGaiABOgAAIANBBWogAToAACADQQRqIAE6AAAgA0EDaiABOgAAIANBAmogAToAACADQQFqIAE6AAAgBSADQQhqIgNHDQALCyAAC7EDAQV/IwBBQGoiBiQAIAZBADsAEiAGQQI6AA4gBkECOgAKIAZBMGoiB0EIaiIIIAUgBkEKaiAFGyIFQQhqLwAAOwEAIAYgBSkAADcDMCAGQRRqIAEgBxArIAYgAkEEQRBB8MzAABBgIAZBADYCLCAGIAYpAwA3AiQgBkEkaiACEI0BQQEgAiACQQFNGyIJQQFrIQcgBigCKCAGKAIsIgpBBHRqIQUCfwNAIAcEQCAGQTBqIAZBFGoQVCAFIAYpAjA3AgAgBUEIaiAIKQIANwIAIAdBAWshByAFQRBqIQUMAQUCQCAJIApqIQcCQCACRQRAIAYoAhQgBigCGEEEQRQQnwEgB0EBayEHDAELIAUgBikCFDcCACAFQQhqIAZBHGopAgA3AgALIAYgBzYCLCADQQFxRQ0AIAQEQCAGQSRqIAQQjQELIARBCm4gBGohBUEBDAMLCwsgBkEkakHoBxCNAUEACyEDIAAgBikCJDcCDCAAIAI2AhwgACABNgIYIABBADoAICAAIAU2AgggACAENgIEIAAgAzYCACAAQRRqIAZBLGooAgA2AgAgBkFAayQAC6YDAQN/IwBBEGsiBiQAIAMgACgCGCABayIFIAMgBUkbIQMgASAAIAJBoM3AABBiIgAoAggiAkEBayIFIAEgBUkbIQEgACgCBCACIAFB2NjAABCQASIFKAIERQRAIAVCoICAgBA3AgAgBSAEKQAANwAIIAVBEGogBEEIaiIHLwAAOwAAIAAoAgQgACgCCCABQQFrQejYwAAQkAEiBUKggICAEDcCACAFIAQpAAA3AAggBUEQaiAHLwAAOwAACyAGQQhqIAAoAgQgACgCCCABQfjYwAAQfwJAIAMgBigCDCIFTQRAIAUgA2siBSAGKAIIIAVBFGxqIAMQGSAAKAIEIAAoAgggAUGI2cAAEJABIgEoAgRFBEAgAUKggICAEDcCACABIAQpAAA3AAggAUEQaiAEQQhqLwAAOwAAIAJFDQIgACgCBCACQRRsaiIAQRRrIgFFDQIgAUEgNgIAIABBEGtBATYCACAAQQxrIgAgBCkAADcAACAAQQhqIARBCGovAAA7AAALIAZBEGokAA8LQczJwABBIUHwycAAEHEAC0GY2cAAELYBAAv2AgEEfwJAIAACfwJAAkACQAJAAkAgACgCpAEiAkEBTQRAAkAgAUH/AEsNACAAIAJqQbABai0AAEEBcUUNACABQQJ0QbjQwABqKAIAIQELIAAoAmgiAyAAKAKcASIETw0DIAAoAmwhAiAALQC9AQ0BDAILIAJBAkGo5cAAEEsACyAAIAMgAkEBIABBsgFqECALIAAgAyACIAEgAEGyAWoQEyIFDQELIAAtAL8BDQEgACADQQFrIAAoAmwiAiABIABBsgFqIgUQE0UEQCAAIANBAmsgAiABIAUQExoLIARBAWsMAgsgACADIAVqIgE2AmggASAERw0CIAAtAL8BDQIgBEEBawwBCwJAIAAoAmwiAiAAKAKsAUcEQCACIAAoAqABQQFrTw0BIAAgAhCwASAAIAJBAWoiAjYCbAwBCyAAIAIQsAEgAEEBEIcBIAAoAmwhAgsgAEEAIAIgASAAQbIBahATCzYCaAsgACgCYCAAKAJkIAIQkQEL+gIAAkACQAJAAkACQAJAAkAgA0EBaw4GAAECAwQFBgsgACgCGCEEIAAgAkHQzcAAEGIiA0EAOgAMIAMoAgQgAygCCCABIAQgBRAnIAAgAkEBaiAAKAIcIAUQKg8LIAAoAhghAyAAIAJB4M3AABBiIgQoAgQgBCgCCEEAIAFBAWoiASADIAEgA0kbIAUQJyAAQQAgAiAFECoPCyAAQQAgACgCHCAFECoPCyAAKAIYIQMgACACQfDNwAAQYiIAKAIEIAAoAgggASADIAUQJyAAQQA6AAwPCyAAKAIYIQMgACACQYDOwAAQYiIAKAIEIAAoAghBACABQQFqIgAgAyAAIANJGyAFECcPCyAAKAIYIQEgACACQZDOwAAQYiIAKAIEIAAoAghBACABIAUQJyAAQQA6AAwPCyAAKAIYIQMgACACQcDNwAAQYiIAKAIEIAAoAgggASABIAQgAyABayIBIAEgBEsbaiIBIAUQJyABIANGBEAgAEEAOgAMCwvUAgEFfyMAQUBqIgMkACADQQA2AiAgAyABNgIYIAMgASACajYCHCADQRBqIANBGGoQTQJAIAMoAhBFBEAgAEEANgIIIABCgICAgMAANwIADAELIAMoAhQhBCADQQhqQQRBBEEEQZTIwAAQYCADKAIIIQUgAygCDCIGIAQ2AgAgA0EBNgIsIAMgBjYCKCADIAU2AiQgA0E4aiADQSBqKAIANgIAIAMgAykCGDcDMEEEIQVBASEEA0AgAyADQTBqEE0gAygCAEEBR0UEQCADKAIEIQcgAygCJCAERgRAIANBJGogBEEBQQRBBBBtIAMoAighBgsgBSAGaiAHNgIAIAMgBEEBaiIENgIsIAVBBGohBQwBCwsgACADKQIkNwIAIABBCGogA0EsaigCADYCAAsDQCACBEAgAUEAOgAAIAJBAWshAiABQQFqIQEMAQsLIANBQGskAAvKAgIFfwJ+IwBBIGsiAiQAIAACfwJAAkAgAS0AIEUEQAwBCyABQQA6ACACQCABKAIAQQFGBEAgASgCFCIFIAEoAhxrIgMgASgCCEsNAQsMAQsgBSADIAEoAgRrIgRPBEBBACEDIAFBADYCFCACIAFBDGo2AhQgAiABKAIQIgY2AgwgAiAENgIYIAIgBSAEazYCHCACIAYgBEEEdGo2AhAgAS0AvAENAkEUQQQQfCEBIAJBDGoiA0EIaikCACEHIAIpAgwhCCABQRBqIANBEGooAgA2AgAgAUEIaiAHNwIAIAEgCDcCAEGg5MAADAMLIAQgBUH0y8AAELMBAAsgAkEANgIMQQEhAyABLQC8AQ0AQQBBARB8IQFBhOTAAAwBC0EAQQEQfCEBIANFBEAgAkEMahBYC0GE5MAACzYCBCAAIAE2AgAgAkEgaiQAC5ICAQV/AkACQAJAQX8gACgCnAEiAyABRyABIANJG0H/AXEOAgIBAAsgACAAKAJYIgMEfyAAKAJUIQUDQCADQQJJRQRAIANBAXYiBiAEaiIHIAQgBSAHQQJ0aigCACABSRshBCADIAZrIQMMAQsLIAQgBSAEQQJ0aigCACABSWoFQQALNgJYDAELQQAgASADQXhxQQhqIgRrIgNBACABIANPGyIDQQN2IANBB3FBAEdqayEDIABB0ABqIQUDQCADRQ0BIAUgBEHc4sAAEHsgA0EBaiEDIARBCGohBAwACwALIAIgACgCoAFHBEAgAEEANgKoASAAIAJBAWs2AqwBCyAAIAI2AqABIAAgATYCnAEgABARC/IBAgR/AX4jAEEQayIGJAACQCACIAIgA2oiA0sEQEEAIQIMAQtBACECIAQgBWpBAWtBACAEa3GtQQhBBCAFQQFGGyIHIAEoAgAiCEEBdCIJIAMgAyAJSRsiAyADIAdJGyIHrX4iCkIgiKcNACAKpyIDQYCAgIB4IARrSw0AIAQhAgJ/IAgEQCAFRQRAIAZBCGogBCADEIwBIAYoAggMAgsgASgCBCAFIAhsIAQgAxB+DAELIAYgBCADEIwBIAYoAgALIgVFDQAgASAHNgIAIAEgBTYCBEGBgICAeCECCyAAIAM2AgQgACACNgIAIAZBEGokAAuZAgEDfwJAAkACQCABIAJGDQAgACABIAJBoNXAABCQASgCBEUEQCAAIAEgAkEBa0Gw1cAAEJABIgVCoICAgBA3AgAgBSAEKQAANwAIIAVBEGogBEEIai8AADsAAAsgAiADSw0BIAEgA0kNAiADQRRsIgYgAkEUbCICayEFIAAgAmohAiAEQQhqIQcDQCAFBEAgAkKggICAEDcCACACIAQpAAA3AAggAkEQaiAHLwAAOwAAIAVBFGshBSACQRRqIQIMAQsLIAEgA00NACAAIAZqIgAoAgQNACAAQqCAgIAQNwIAIAAgBCkAADcACCAAQRBqIARBCGovAAA7AAALDwsgAiADQcDVwAAQtQEACyADIAFBwNXAABCzAQALiwIBA38jAEEwayIDJAAgAyACNgIYIAMgATYCFAJAIANBFGoQWiIBQf//A3FBA0YEQCAAQQA2AgggAEKAgICAIDcCAAwBCyADQQhqQQRBAkECQZTIwAAQYCADKAIIIQIgAygCDCIEIAE7AQAgA0EBNgIkIAMgBDYCICADIAI2AhwgAyADKQIUNwIoQQIhAUEBIQIDQCADQShqEFoiBUH//wNxQQNGRQRAIAMoAhwgAkYEQCADQRxqIAJBAUECQQIQbSADKAIgIQQLIAEgBGogBTsBACADIAJBAWoiAjYCJCABQQJqIQEMAQsLIAAgAykCHDcCACAAQQhqIANBJGooAgA2AgALIANBMGokAAuFAgEDfyMAQTBrIgMkACADIAI2AhggAyABNgIUAkAgA0EUahBOQf//A3EiAUUEQCAAQQA2AgggAEKAgICAIDcCAAwBCyADQQhqQQRBAkECQZTIwAAQYCADKAIIIQIgAygCDCIEIAE7AQAgA0EBNgIkIAMgBDYCICADIAI2AhwgAyADKQIUNwIoQQIhAUEBIQIDQCADQShqEE5B//8DcSIFBEAgAygCHCACRgRAIANBHGogAkEBQQJBAhBtIAMoAiAhBAsgASAEaiAFOwEAIAMgAkEBaiICNgIkIAFBAmohAQwBCwsgACADKQIcNwIAIABBCGogA0EkaigCADYCAAsgA0EwaiQAC4MCAQJ/IwBBMGsiBCQAIARBEGogACgCGCADECsgBEEIaiAAEHIgBCABIAIgBCgCCCAEKAIMQeDPwAAQbAJAIAQoAgQiAEUEQCAEKAIQIAQoAhRBBEEUEJ8BDAELIABBBHQiAUEQayEDIAEgBCgCACIAaiICQRBrIQEDQCADBEAgBEEgaiIFIARBEGoQVCAAKAIAIABBBGooAgBBBEEUEJ8BIABBCGogBUEIaikCADcCACAAIAQpAiA3AgAgA0EQayEDIABBEGohAAwBBSABKAIAIAJBDGsoAgBBBEEUEJ8BIAFBCGogBEEYaikCADcCACABIAQpAhA3AgALCwsgBEEwaiQAC4ACAQZ/IwBBIGsiAyQAIANBCGogAUEEQRRBkNXAABBgIANBADYCHCADIAMpAwg3AhQgA0EUaiABEI4BQQEgASABQQFNGyIGQQFrIQUgAygCGCADKAIcIgdBFGxqIQQgAkEIaiEIAkADQCAFBEAgBEKggICAEDcCACAEIAIpAAA3AAggBEEQaiAILwAAOwAAIAVBAWshBSAEQRRqIQQMAQUCQCAGIAdqIQUgAQ0AIAVBAWshBQwDCwsLIARCoICAgBA3AgAgBCACKQAANwAIIARBEGogAkEIai8AADsAAAsgACADKQIUNwIAIABBCGogBTYCACAAQQA6AAwgA0EgaiQAC9QBAQV/AkAgACgChAQiAUF/RwRAIAFBAWohAyABQSBJDQEgA0EgQdTbwAAQswEAC0HU28AAEH0ACyAAQQRqIgEgA0EEdGohBQNAIAEgBUZFBEACQCABKAIAIgJBf0cEQCACQQZJDQEgAkEBakEGQaThwAAQswEAC0Gk4cAAEH0ACyABQQRqIQQgAUEQaiACQQF0QQJqIQIDQCACBEAgBEEAOwEAIAJBAmshAiAEQQJqIQQMAQsLIAFBADYCACEBDAELCyAAQYCAxAA2AgAgAEEANgKEBAvzAQEBfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgASgCACIDQYCAxABGBEAgAkHg//8AcUHAAEYNASACQTdrDgIDBAILIAJBMEYNBiACQThGDQUgA0Eoaw4CCQoNCyAAIAJBQGsQSA8LIAJB4wBGDQIMCwsgAEEROgAADwsgAEEPOgAADwsgAEEkOgAAIAFBADoAiAQPCyADQSNrDgcBBwcHBwMGBwsgA0Eoaw4CAQQGCyAAQQ46AAAPCyAAQZoCOwEADwsgAEEaOwEADwsgAkEwRw0BCyAAQZkCOwEADwsgAEEZOwEADwsgAEEyOgAAC8UBAQJ/IwBBMGsiBCQAIARBDGogAiADECsgBCABNgIcIABBDGogARCNASABBEAgACgCECAAKAIUIgJBBHRqIQMCQANAAkAgBEEgaiIFIARBDGoQVCAEKAIgQYCAgIB4Rg0AIAMgBCkCIDcCACADQQhqIAVBCGopAgA3AgAgA0EQaiEDIAJBAWohAiABQQFrIgENAQwCCwtBgICAgHggBCgCJBCjAQsgACACNgIUCyAEKAIMIAQoAhBBBEEUEJ8BIARBMGokAAuHAQEDfyMAQSBrIgEkACABQQRqIAAQViABKAIEIgAtAHBBAXEEfyAAKAJsIQMgACgCaCEAIAFBADYCEBAAIQIgAUEANgIcIAEgAjYCGCABIAFBEGo2AhQgAUEUaiICIAAQhAEgAiADEIQBIAEoAhgFQYABCyABKAIIIAEoAgwQogEgAUEgaiQAC8EBAQV/IwBBEGsiAiQAQQEhBAJAIAEoAhwiA0G7gMAAQQUgASgCICIGKAIMIgURAwANAAJAIAEtABRBBHFFBEAgA0GS58AAQQEgBREDAA0CIAAgAyAGEDdFDQEMAgsgA0GT58AAQQIgBREDAA0BIAIgBjYCBCACIAM2AgAgAkEBOgAPIAIgAkEPajYCCCAAIAJB9ObAABA3DQEgAkGQ58AAQQIQGA0BCyADQZaqwQBBASAFEQMAIQQLIAJBEGokACAEC7ABAQF/IABBADYCACAAQQhrIgQgBCgCAEF+cTYCAAJAIAIgAxEFAEUNAAJAAkAgAEEEaygCAEF8cSICRQ0AIAItAABBAXENACAEEEAgBC0AAEECcUUNASACIAIoAgBBAnI2AgAPCyAEKAIAIgJBAnENASACQXxxIgJFDQEgAi0AAEEBcQ0BIAAgAigCCEF8cTYCACACIARBAXI2AggLDwsgACABKAIANgIAIAEgBDYCAAunAQECfyMAQSBrIgIkACACIAAoAmg2AgwgAkEAOgAcIAIgACgCVCIDNgIQIAIgAyAAKAJYQQJ0ajYCFCACIAJBDGo2AhggAAJ/AkACQANAIAFBAWsiAQRAIAJBEGoQSQ0BDAILCyACQRBqEEkiAQ0BCyAAKAKcASIDQQFrIgAMAQsgACgCnAEiA0EBayEAIAEoAgALIgEgACABIANJGzYCaCACQSBqJAALowEBAX8jAEFAaiIDJAAgA0EcaiAAEF4gAygCHCIAIAEgAhAlIANBKGogAEHgAGooAgAgAEHkAGooAgAQIyADQRBqIAAQJCADIAMpAxA3AjQgA0EIaiADKAIsIAMoAjAQWyADKAIMIQAgAygCCEEBcQRAIAMgADYCPCADQTxqQezCwAAQQgALIANBKGoQbiADKAIgIAMoAiQQsgEgA0FAayQAIAALmQEBA38gAUFsbCECIAFB/////wNxIQMgACABQRRsaiEBQQAhAAJAA0AgAkUNAQJAIAFBFGsiBCgCAEEgRw0AIAFBEGsoAgBBAUcNACABQQxrLQAAQQJHDQAgAUEIay0AAEECRw0AIAFBBGstAAANACABQQNrLQAAQR9xDQAgAkEUaiECIABBAWohACAEIQEMAQsLIAAhAwsgAwuxAQECfyMAQRBrIgIkAAJAIAFFDQAgAUEDakECdiEBAkAgAEEETQRAIAFBAWsiA0GAAkkNAQsgAkGsssEAKAIANgIIIAEgACACQQhqQaiqwQBBBEEFEE8hAEGsssEAIAIoAgg2AgAMAQsgAkGsssEANgIEIAIgA0ECdEGsqsEAaiIDKAIANgIMIAEgACACQQxqIAJBBGpBBkEHEE8hACADIAIoAgw2AgALIAJBEGokACAAC6ABAQN/IwBBEGsiBSQAIAVBCGogACABIAJB4M7AABBnIAUoAgwiBiADIAIgAWsiByADIAdJGyIDTwRAIAYgA2siBiAFKAIIIAZBBHRqIAMQFSAAIAEgASADaiAEECogAQRAIAAgAUEBa0HwzsAAEGJBADoADAsgACACQQFrQYDPwAAQYkEAOgAMIAVBEGokAA8LQczJwABBIUHwycAAEHEAC6gBAQF/IwBBQGoiAyQAIANBCGogACgCABACIAMoAgghACADIAMoAgw2AgQgAyAANgIAIANBATYCMCADQQI2AhggA0GYqsEANgIUIANCATcCICADIAMoAgQiADYCPCADIAMoAgA2AjggAyAANgI0IAMgA0E0ajYCLCADIANBLGo2AhwgASACIANBFGoQFyADKAI0IgEEQCADKAI4QQEgARA4CyADQUBrJAALpAEBAX8jAEEQayIDJAACQCAARQ0AIAJFDQACQCABQQRNBEAgAkEDakECdkEBayIBQYACSQ0BCyADQayywQAoAgA2AgggACADQQhqQaiqwQBBAhAxQayywQAgAygC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BDYCBCAAIAE2AgALOAACQCABaUEBRw0AQYCAgIB4IAFrIABJDQAgAARAQeyywQAtAAAaIAEgABA1IgFFDQELIAEPCwALOAACQCACQYCAxABGDQAgACACIAEoAhARAgBFDQBBAQ8LIANFBEBBAA8LIAAgA0EAIAEoAgwRAwALLQEBfyABIAAoAgBPBH8gACgCBCECIAAtAAhFBEAgASACTQ8LIAEgAkkFQQALC3ABA38gACgCACIEIAAoAggiBUYEQCMAQRBrIgMkACADQQhqIAAgBEEBQQJBCBAmIAMoAggiBEGBgICAeEcEQCADKAIMGiAEIAIQrgEACyADQRBqJAALIAAgBUEBajYCCCAAKAIEIAVBA3RqIAE3AQALNAEBfyAAKAIIIgMgACgCAEYEQCAAIAIQawsgACADQQFqNgIIIAAoAgQgA0ECdGogATYCAAsuAQF/IwBBEGsiAiQAIAJBCGogASAAEIwBIAIoAggiAARAIAJBEGokACAADwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQYzpwAA2AgggAUIENwIQIAFBCGogABCKAQALKgEBfyACIAMQNSIEBEAgBCAAIAEgAyABIANJGxAWGiAAIAIgARA4CyAECysAIAIgA0kEQCADIAIgBBC0AQALIAAgAiADazYCBCAAIAEgA0EUbGo2AgALLwEBfyAAIAIQjgEgACgCBCAAKAIIIgNBFGxqIAEgAkEUbBAWGiAAIAIgA2o2AggLKwAgASADSwRAIAEgAyAEELQBAAsgACADIAFrNgIEIAAgAiABQQR0ajYCAAsvAAJAAkAgA2lBAUcNAEGAgICAeCADayABSQ0AIAAgASADIAIQfiIADQELAAsgAAsuAANAIAEEQCAAKAIAIABBBGooAgBBBEEUEJ8BIAFBAWshASAAQRBqIQAMAQsLCzIBAX8gACgCCCECIAEgACgCAEECai0AABCbASEBIAAoAgQgAiABEAEgACACQQFqNgIICyoAIAAgACgCaCABaiIBIAAoApwBIgBBAWsgACABSxtBACABQQBOGzYCaAszAQJ/IAAgACgCqAEiAiAAKAKsAUEBaiIDIAEgAEGyAWoQNiAAKAJgIAAoAmQgAiADEFMLMwECfyAAIAAoAqgBIgIgACgCrAFBAWoiAyABIABBsgFqEB0gACgCYCAAKAJkIAIgAxBTCyoAIAEgAkkEQEGkyMAAQSNBvMnAABBxAAsgAiAAIAJBFGxqIAEgAmsQGQs1ACAAIAApAnQ3AmggACAAKQF8NwGyASAAIAAvAYYBOwG+ASAAQboBaiAAQYQBai8BADsBAAvsAQICfwF+IwBBEGsiAiQAIAJBATsBDCACIAE2AgggAiAANgIEIwBBEGsiASQAIAJBBGoiACkCACEEIAEgADYCDCABIAQ3AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgwhAwJAAkACQAJAIAIoAgQOAgABAgsgAw0BQQEhAkEAIQMMAgsgAw0AIAIoAgAiAigCBCEDIAIoAgAhAgwBCyAAQYCAgIB4NgIAIAAgATYCDCABKAIIIgEtAAkaIABBGyABLQAIEEoACyAAIAM2AgQgACACNgIAIAEoAggiAS0ACRogAEEcIAEtAAgQSgALKwECfwJAIAAoAgQgACgCCCIBEDQiAkUNACABIAJJDQAgACABIAJrNgIICwsmACACBEBB7LLBAC0AABogASACEDUhAQsgACACNgIEIAAgATYCAAsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBEBBtCwsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBFBBtCwslACAAQQE2AgQgACABKAIEIAEoAgBrQQR2IgE2AgggACABNgIACxsAIAEgAk0EQCACIAEgAxBLAAsgACACQRRsagsgACABIAJNBEAgAiABQeTjwAAQSwALIAAgAmpBAToAAAsbACABIAJNBEAgAiABIAMQSwALIAAgAkEEdGoLAwAACwMAAAsDAAALAwAACwMAAAsDAAALGgBB7LLBAC0AABpBBCAAEDUiAARAIAAPCwALIQAgAEUEQEGc68AAQTIQuQEACyAAIAIgAyABKAIQEQEACxYAIAFBAXFFBEAgALgQCQ8LIACtEAoLRgEBfyAAIAAoAgBBAWsiATYCACABRQRAIABBDGoQRwJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEEEQZwGEDgLCwsfACAARQRAQZzrwABBMhC5AQALIAAgAiABKAIQEQIACyEBAX8gACgCECIBIAAoAhQQgwEgACgCDCABQQRBEBCfAQsSACAABEAgASACIAAgA2wQOAsLIQEBfyAAKAIEIgEgACgCCBCDASAAKAIAIAFBBEEQEJ8BCxYAIABBEGoQWCAAKAIAIAAoAgQQowELFAAgACAAKAIAQQFrNgIAIAEQnAELGQAgAEGAgICAeEcEQCAAIAFBBEEUEJ8BCwsUACABBEBBgICAgHggARCjAQsgAQsZACABKAIcQcjlwABBDiABKAIgKAIMEQMACw8AIAIEQCAAIAEgAhA4CwsPACABBEAgACACIAEQOAsLEwAgAARADwtBpKnBAEEbELkBAAsPACAAQYQBTwRAIAAQAwsLEwAgACgCCCAAKAIAQQJBAhCfAQsVACACIAIQpAEaIABBgICAgHg2AgALFAAgACgCACABIAAoAgQoAgwRAgALEAAgASAAKAIEIAAoAggQDws8ACAARQRAIwBBIGsiACQAIABBADYCGCAAQQE2AgwgAEHQxMAANgIIIABCBDcCECAAQQhqIAEQigEACwALFAAgAEEANgIIIABCgICAgBA3AgALEgAgACABQZDNwAAQYkEBOgAMCxAAIAEgACgCACAAKAIEEA8LDgAgAEEANgIAIAEQnAELawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQejpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgOABhDcDKCADIAOtQoCAgIDgAYQ3AyAgAyADQSBqNgIQIANBCGogAhCKAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQcjpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgOABhDcDKCADIAOtQoCAgIDgAYQ3AyAgAyADQSBqNgIQIANBCGogAhCKAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQZzqwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgOABhDcDKCADIAOtQoCAgIDgAYQ3AyAgAyADQSBqNgIQIANBCGogAhCKAQALDgBB8OXAAEErIAAQcQALCwAgACMAaiQAIwALDgBBv6nBAEHPABC5AQALCQAgACABEAcACw0AIABB9ObAACABEBcLDAAgACABKQIANwMACwoAIAAoAgAQqQELDQAgAEGAgICAeDYCAAsJACAAQQA2AgALBgAgABBYCwUAQYAECwQAQQELBAAgAQsEAEEACwvSbSAAQYCAwAALQB0AAAAEAAAABAAAAB4AAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlRXJyb3IAQb+JwAALAXgAQeCJwAALEP////////////////////8AQYaKwAALDwEAAAAAACAAAAAAAAAAAgBBwIrAAAsg//////////////////////////////////////////8AQaSLwAALCBAAAAAAAAABAEHAuMAACwL/BwBB1LjAAAsHDwD////1/wBBgLnAAAsW////////////////////////////AwBBoLnAAAsd/////////////////////////////////////w8AQf+5wAALGPz//////////////////////////////wBBoLrAAAs+//////////////////////////////////////////////////////////////////////////////////8AQYy7wAALOP////////////////////////////////////////////////////////////////////////9/AEHgu8AAC9EB/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wMAQcC9wAALJ///////////////////////////////////////////////////DwBBwMDAAAvBI3NyYy9saWIucnMAAAEADwDwGg8AAAAAAOIlAADlJQAAAAAAALDgAACz4AAAAAAAADz7AQBp+wEAAAAAAGr7AQBs+wEAAAAAAIAlAACfJQAAAAAAAAD7AQA7+wEAAAAAAGF0dGVtcHRlZCB0byB0YWtlIG93bmVyc2hpcCBvZiBSdXN0IHZhbHVlIHdoaWxlIGl0IHdhcyBib3Jyb3dlZGJndGV4dGNvZGVwb2ludHNyYXN0ZXJfc3ltYm9sc3ZlY3Rvcl9zeW1ib2xzAEAgEAAKAAAAZgAAABMAAABAIBAACgAAAGcAAAAVAAAAQCAQAAoAAABoAAAAGQAAAEAgEAAKAAAAaQAAABkAAABAIBAACgAAAGoAAAAVAAAAQCAQAAoAAAByAAAANgAAAEAgEAAKAAAAdwAAADYAAABAIBAACgAAAP4AAAAbAAAAQCAQAAoAAAACAQAAHQAAAEAgEAAKAAAAGQEAAC0AAABAIBAACgAAAK8AAAAjAAAAQCAQAAoAAAC5AAAAIwAAAEAgEAAKAAAAzgAAACUAAABAIBAACgAAAMYAAAAlAAAAQCAQAAoAAADzAAAAKQAAAEAgEAAKAAAA2gAAACUAAABAIBAACgAAAN4AAAAWAAAAQCAQAAoAAAD5AAAAHQAAAEAgEAAKAAAAIAEAAC8AAABjYXBhY2l0eSBvdmVyZmxvdwAAADwiEAARAAAAKSBzaG91bGQgYmUgPCBsZW4gKGlzIGluc2VydGlvbiBpbmRleCAoaXMgKSBzaG91bGQgYmUgPD0gbGVuIChpcyAAAABuIhAAFAAAAIIiEAAXAAAAFlUQAAEAAAByZW1vdmFsIGluZGV4IChpcyAAALQiEAASAAAAWCIQABYAAAAWVRAAAQAAAGBhdGAgc3BsaXQgaW5kZXggKGlzIAAAAOAiEAAVAAAAgiIQABcAAAAWVRAAAQAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3VuaWNvZGUtd2lkdGgtMC4xLjE0L3NyYy90YWJsZXMucnMQIxAAZAAAAJEAAAAVAAAAECMQAGQAAACXAAAAGQAAAC9uaXgvc3RvcmUvMjhoeXpmbDMzOGtzNGFtaGE3dnBwbmxicTFzMW5xYXYtcnVzdC1kZWZhdWx0LTEuODUuMC9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAAAAlCMQAH0AAACzBwAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IG1pZCA8PSBzZWxmLmxlbigpL25peC9zdG9yZS8yOGh5emZsMzM4a3M0YW1oYTd2cHBubGJxMXMxbnFhdi1ydXN0LWRlZmF1bHQtMS44NS4wL2xpYi9ydXN0bGliL3NyYy9ydXN0L2xpYnJhcnkvY29yZS9zcmMvc2xpY2UvbW9kLnJzAAAARyQQAHIAAACgDQAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IGsgPD0gc2VsZi5sZW4oKQAAAEckEAByAAAAzQ0AAAkAAAAvbml4L3N0b3JlLzI4aHl6ZmwzMzhrczRhbWhhN3ZwcG5sYnExczFucWF2LXJ1c3QtZGVmYXVsdC0xLjg1LjAvbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAACUQAG8AAAChAAAAGQAAAC9uaXgvc3RvcmUvMjhoeXpmbDMzOGtzNGFtaGE3dnBwbmxicTFzMW5xYXYtcnVzdC1kZWZhdWx0LTEuODUuMC9saWIvcnVzdGxpYi9zcmMvcnVzdC9saWJyYXJ5L2FsbG9jL3NyYy92ZWMvbW9kLnJzAAAAgCUQAHEAAAA/CgAAJAAAAEBTEABxAAAAKAIAABEAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9hdnQtMC4xNi4wL3NyYy9idWZmZXIucnMAABQmEABaAAAALQAAABkAAAAUJhAAWgAAAFoAAAANAAAAFCYQAFoAAABeAAAADQAAABQmEABaAAAAYwAAAA0AAAAUJhAAWgAAAGgAAAAdAAAAFCYQAFoAAAB1AAAAJQAAABQmEABaAAAAfwAAACUAAAAUJhAAWgAAAIcAAAAVAAAAFCYQAFoAAACRAAAAJQAAABQmEABaAAAAmAAAABUAAAAUJhAAWgAAAJ0AAAAlAAAAFCYQAFoAAACoAAAAEQAAABQmEABaAAAAswAAACAAAAAUJhAAWgAAALcAAAARAAAAFCYQAFoAAAC5AAAAEQAAABQmEABaAAAAwwAAAA0AAAAUJhAAWgAAAMcAAAARAAAAFCYQAFoAAADKAAAADQAAABQmEABaAAAA9AAAACsAAAAUJhAAWgAAADkBAAAsAAAAFCYQAFoAAAAyAQAAGwAAABQmEABaAAAARQEAABQAAAAUJhAAWgAAAFcBAAAYAAAAFCYQAFoAAABcAQAAGAAAAGFzc2VydGlvbiBmYWlsZWQ6IGxpbmVzLml0ZXIoKS5hbGwofGx8IGwubGVuKCkgPT0gY29scykAFCYQAFoAAAD3AQAABQAAAAAAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGYmAACSJQAACSQAAAwkAAANJAAACiQAALAAAACxAAAAJCQAAAskAAAYJQAAECUAAAwlAAAUJQAAPCUAALojAAC7IwAAACUAALwjAAC9IwAAHCUAACQlAAA0JQAALCUAAAIlAABkIgAAZSIAAMADAABgIgAAowAAAMUiAAB/AAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYXZ0LTAuMTYuMC9zcmMvbGluZS5yczgqEABYAAAAEAAAABQAAAA4KhAAWAAAAB0AAAAWAAAAOCoQAFgAAAAeAAAAFwAAADgqEABYAAAAIQAAABMAAAA4KhAAWAAAACsAAAAkAAAAOCoQAFgAAAAxAAAAGwAAADgqEABYAAAANQAAABsAAAA4KhAAWAAAADwAAAAbAAAAOCoQAFgAAAA9AAAAGwAAADgqEABYAAAAQQAAABsAAAA4KhAAWAAAAEMAAAAeAAAAOCoQAFgAAABEAAAAHwAAADgqEABYAAAARwAAABsAAAA4KhAAWAAAAE4AAAAbAAAAOCoQAFgAAABPAAAAGwAAADgqEABYAAAAVgAAABsAAAA4KhAAWAAAAFcAAAAbAAAAOCoQAFgAAABeAAAAGwAAADgqEABYAAAAXwAAABsAAAA4KhAAWAAAAG0AAAAbAAAAOCoQAFgAAAB1AAAAGwAAADgqEABYAAAAdgAAABsAAAA4KhAAWAAAAHgAAAAeAAAAOCoQAFgAAAB5AAAAHwAAADgqEABYAAAAfAAAABsAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlOCoQAFgAAACAAAAAEQAAADgqEABYAAAAiQAAACcAAAA4KhAAWAAAAI0AAAAXAAAAOCoQAFgAAACQAAAAEwAAADgqEABYAAAAkgAAACcAAAA4KhAAWAAAAJYAAAAjAAAAOCoQAFgAAACbAAAAFgAAADgqEABYAAAAnAAAABcAAAA4KhAAWAAAAJ8AAAATAAAAOCoQAFgAAAChAAAAJwAAADgqEABYAAAAqAAAABMAAAA4KhAAWAAAAL0AAAAVAAAAOCoQAFgAAAC/AAAAJQAAADgqEABYAAAAwAAAABwAAAA4KhAAWAAAAMMAAAAlAAAAOCoQAFgAAADtAAAAMAAAADgqEABYAAAA9AAAACMAAAA4KhAAWAAAAPkAAAAlAAAAOCoQAFgAAAD6AAAAHAAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2F2dC0wLjE2LjAvc3JjL3BhcnNlci5ycwAAeC0QAFoAAADGAQAAIgAAAHgtEABaAAAA2gEAAA0AAAB4LRAAWgAAANwBAAANAAAAeC0QAFoAAABNAgAAJgAAAHgtEABaAAAAUgIAACYAAAB4LRAAWgAAAFgCAAAYAAAAeC0QAFoAAABwAgAAEwAAAHgtEABaAAAAdAIAABMAAAB4LRAAWgAAAAUDAAAnAAAAeC0QAFoAAAALAwAAJwAAAHgtEABaAAAAEQMAACcAAAB4LRAAWgAAABcDAAAnAAAAeC0QAFoAAAAdAwAAJwAAAHgtEABaAAAAIwMAACcAAAB4LRAAWgAAACkDAAAnAAAAeC0QAFoAAAAvAwAAJwAAAHgtEABaAAAANQMAACcAAAB4LRAAWgAAADsDAAAnAAAAeC0QAFoAAABBAwAAJwAAAHgtEABaAAAARwMAACcAAAB4LRAAWgAAAE0DAAAnAAAAeC0QAFoAAABTAwAAJwAAAHgtEABaAAAAbgMAACsAAAB4LRAAWgAAAHcDAAAvAAAAeC0QAFoAAAB7AwAALwAAAHgtEABaAAAAgwMAAC8AAAB4LRAAWgAAAIcDAAAvAAAAeC0QAFoAAACMAwAAKwAAAHgtEABaAAAAkQMAACcAAAB4LRAAWgAAAK0DAAArAAAAeC0QAFoAAAC2AwAALwAAAHgtEABaAAAAugMAAC8AAAB4LRAAWgAAAMIDAAAvAAAAeC0QAFoAAADGAwAALwAAAHgtEABaAAAAywMAACsAAAB4LRAAWgAAANADAAAnAAAAeC0QAFoAAADeAwAAJwAAAHgtEABaAAAA1wMAACcAAAB4LRAAWgAAAJgDAAAnAAAAeC0QAFoAAABaAwAAJwAAAHgtEABaAAAAYAMAACcAAAB4LRAAWgAAAJ8DAAAnAAAAeC0QAFoAAABnAwAAJwAAAHgtEABaAAAApgMAACcAAAB4LRAAWgAAAOQDAAAnAAAAeC0QAFoAAAAOBAAAEwAAAHgtEABaAAAAFwQAABsAAAB4LRAAWgAAACAEAAAUAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvYXZ0LTAuMTYuMC9zcmMvdGFicy5yc9QwEABYAAAACQAAABIAAADUMBAAWAAAABEAAAAUAAAA1DAQAFgAAAAXAAAAFAAAANQwEABYAAAAHwAAABQAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9hdnQtMC4xNi4wL3NyYy90ZXJtaW5hbC9kaXJ0eV9saW5lcy5yc2wxEABoAAAACAAAABQAAABsMRAAaAAAAAwAAAAPAAAAbDEQAGgAAAAQAAAADwBBjOTAAAvPBwEAAAAfAAAAIAAAACEAAAAiAAAAIwAAABQAAAAEAAAAJAAAACUAAAAmAAAAJwAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2F2dC0wLjE2LjAvc3JjL3Rlcm1pbmFsLnJzPDIQAFwAAAB1AgAAFQAAADwyEABcAAAAsQIAAA4AAAA8MhAAXAAAAAUEAAAjAAAAQm9ycm93TXV0RXJyb3JhbHJlYWR5IGJvcnJvd2VkOiDWMhAAEgAAAGNhbGxlZCBgT3B0aW9uOjp1bndyYXAoKWAgb24gYSBgTm9uZWAgdmFsdWVpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAABszEAAgAAAAOzMQABIAAAA6IAAAAQAAAAAAAABgMxAAAgAAAAAAAAAMAAAABAAAACgAAAApAAAAKgAAACAgICAsCigoCjAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5YXR0ZW1wdGVkIHRvIGluZGV4IHNsaWNlIHVwIHRvIG1heGltdW0gdXNpemUAAABdNBAALAAAAHJhbmdlIHN0YXJ0IGluZGV4ICBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCCUNBAAEgAAAKY0EAAiAAAAcmFuZ2UgZW5kIGluZGV4INg0EAAQAAAApjQQACIAAABzbGljZSBpbmRleCBzdGFydHMgYXQgIGJ1dCBlbmRzIGF0IAD4NBAAFgAAAA41EAANAAAASGFzaCB0YWJsZSBjYXBhY2l0eSBvdmVyZmxvdyw1EAAcAAAAL3J1c3QvZGVwcy9oYXNoYnJvd24tMC4xNS4yL3NyYy9yYXcvbW9kLnJzAABQNRAAKgAAACMAAAAoAAAAsVMQAGwAAAAjAQAADgAAAGNsb3N1cmUgaW52b2tlZCByZWN1cnNpdmVseSBvciBhZnRlciBiZWluZyBkcm9wcGVkAAD//////////9A1EABB6OvAAAt1L2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Yvc2VyZGUtd2FzbS1iaW5kZ2VuLTAuNi41L3NyYy9saWIucnMAAADoNRAAZQAAADUAAAAOAEGB7cAAC4cBAQIDAwQFBgcICQoLDA0OAwMDAwMDAw8DAwMDAwMDDwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJEAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJAEGB78AAC58LAQICAgIDAgIEAgUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0CAh4CAgICAgICHyAhIiMCJCUmJygpAioCAgICKywCAgICLS4CAgIvMDEyMwICAgICAjQCAjU2NwI4OTo7PD0+Pzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5QQICQkMCAkRFRkdISQJKOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5SwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjk5OTlMAgICAgJNTk9QAgICUQJSUwICAgICAgICAgICAgJUVQICVgJXAgJYWVpbXF1eX2BhAmJjAmRlZmcCaAJpamtsAgJtbm9wAnFyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHUCAgICAgICdnc5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OXg5OTk5OTk5OTl5egICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICezk5fDk5fQICAgICAgICAgICAgICAgICAgJ+AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICfwICAoCBggICAgICAgICAgICAgICAoOEAgICAgICAgICAoWGdQIChwICAogCAgICAgICiYoCAgICAgICAgICAgICi4wCjY4Cj5CRkpOUlZYClwICmJmamwICAgICAgICAgI5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTmcHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCdAgICAp6fAgQCBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHQICHgICAgICAgIfICEiIwIkJSYnKCkCKgICAgKgoaKjpKWmLqeoqaqrrK0zAgICAgICrgICNTY3Ajg5Ojs8PT6vOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5TAICAgICsE5PsYWGdQIChwICAogCAgICAgICiYoCAgICAgICAgICAgICi4yys44Cj5CRkpOUlZYClwICmJmamwICAgICAgICAgJVVXVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQbz6wAALKVVVVVUVAFBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBAEHv+sAAC8QBEEEQVVVVVVVXVVVVVVVVVVVVUVVVAABAVPXdVVVVVVVVVVUVAAAAAABVVVVV/F1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQUAFAAUBFBVVVVVVVVVFVFVVVVVVVVVAAAAAAAAQFVVVVVVVVVVVdVXVVVVVVVVVVVVVVUFAABUVVVVVVVVVVVVVVVVVRUAAFVVUVVVVVVVBRAAAAEBUFVVVVVVVVVVVVUBVVVVVVX/////f1VVVVBVAABVVVVVVVVVVVVVBQBBwPzAAAuYBEBVVVVVVVVVVVVVVVVVRVQBAFRRAQBVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVRAFUVVFVFVVVBVVVVVVVVUVBVVVVVVVVVVVVVVVVVVVUQRUUUFFVVVVVVVVVUFFVVUFVVVVVVVVVVVVVVVVVVVQBEFRRVVVVVQVVVVVVVQUAUVVVVVVVVVVVVVVVVVVVBAFUVVFVAVVVBVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVFVFVVUVUVVVVVVVVVVVVVVVRUVVVVVVVVVVVVVVVVVQRUBQRQVUFVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVFEQFBFBVQVVVBVVVVVVVVVVQVVVVVVVVVVVVVVVVVRVEAVRVQVUVVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVUUVBURVFVVVVVVVVVVVVVVVVVVVVVVVVVVVUQBAVVUVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRAABUVVUAQFVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVURUVVVVVVVVVVVVVVVVVUBAABAAARVAQAAAQAAAAAAAAAAVFVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQEEAEFBVVVVVVVVUAVUVVVVAVRVVUVBVVFVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAEGAgcEAC5ADVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBVVVVVVVVVVVVVVVVBVRVVVVVVVUFVVVVVVVVVQVVVVVVVVVVBVVVVX///ff//ddfd9bV11UQAFBVRQEAAFVXUVVVVVVVVVVVVVUVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBVUVUVVAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVcVFFVVVVVVVVVVVVVVVVVVRQBARAEAVBUAABRVVVVVVVVVVVVVVVUAAAAAAAAAQFVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVUAAFAFVVVVVVVVVVVVFQAAVVVVUFVVVVVVVVUFUBBQVVVVVVVVVVVVVVVVVUVQEVBVVVVVVVVVVVVVVVVVVQAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAAAQAVFFVVFBVVVVVVVVVVVVVVVVVVVVVVQBBoITBAAuTCFVVFQBVVVVVVVUFQFVVVVVVVVVVVVVVVQAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAFRVVVVVVVVVVVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/VfXVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX1VVVVVVV9VVVVVVVVVVVVVVVX///9VVVVVVVVVVVVV1VVVVVXVVVVVXVX1VVVVVX1VX1V1VVdVVVVVdVX1XXVdVV31VVVVVVVVVVdVVVVVVVVVVXfV31VVVVVVVVVVVVVVVVVVVf1VVVVVVVVXVVXVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVdVXVVVVVVVVVVVVVVVVV11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVBVVVVVVVVVVVVVVVVVVVX9////////////////X1XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAAAAAAAAqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlpVVVVVVVWqqqqqqqqqqqqqqqqqqgoAqqqqaqmqqqqqqqqqqqqqqqqqqqqqqqqqqmqBqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlWpqqqqqqqqqqqqqqmqqqqqqqqqqqqqqqqoqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqlVVlaqqqqqqqqqqqqqqaqqqqqqqqqqqqqpVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVVVVVVVVVVVVqqqqVqqqqqqqqqqqqqqqqqpqVVVVVVVVVVVVVVVVVV9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVQAAAUFVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVRUUVVVVVVVVVQVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVUAAAAAUFVFFVVVVVVVVVVVVQUAUFVVVVVVFQAAUFVVVaqqqqqqqqpWQFVVVVVVVVVVVVVVFQVQUFVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVAUBBQVVVFVVVVFVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVQQUVAVRVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUUVVVVVWqqqqqqqqqqqpVVVUAAAAAAEAVAEG/jMEAC+EMVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAA8KqqWlUAAAAAqqqqqqqqqqpqqqqqqmqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFamqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlZVVVVVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVqmpVVQAAVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFQFUBQVUAVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVVVVVVVVVVVVVVVVVVVVVVVUBVVVVVVVVVVVVVVVVVVVVVVUFAABUVVVVVVVVVVVVVVUFUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVAAAAQFVVVVVVVVVVVVUUVFUVUFVVVVVVVVVVVVVVFUBBVUVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVUVAAEAVFVVVVVVVVVVVVVVVVVVFVVVVVBVVVVVVVVVVVVVVVUFAEAFVQEUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVUARVRVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUVAEBVVVVVVVBVVVVVVVVVVVVVVVVVFURUVVVVVRVVVVUFAFQAVFVVVVVVVVVVVVVVVVVVVVUAAAVEVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVUUAEQRBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQVQVRBUVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVVVVVVFQBAEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVEAEFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBRAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVAABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVRUEEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAFVVRVVVVVVVVVAQBAVVVVVVVVVVVVFQAEQFUVVVUBQAFVVVVVVVVVVVVVAAAAAEBQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAABBVVVVVVVVVVVVVVVVVVVVVVVVVVQUAAAAAAAUABEFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBQEUQAABVVVVVVVVVVVVVVVVVVVVVVVVQEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVUVVVAVVVVVVVVVVVVVVVVBUBVRFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFQAAAFBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBUVVVVVVVVVVVVVVVVVVUAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVFUBVVVVVVVVVVVVVVVVVVVVVVVVVqlRVVVpVVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqlpVVVVVVVVVVVVVqqpWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqmqaaqqqqqqqqqqalVVVWVVVVVVVVVVallVVVWqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlVVVVVVVVVVQQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBBq5nBAAt1UAAAAAAAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRFQBQAAAABAAQBVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVAEGtmsEACwJAFQBBu5rBAAvFBlRVUVVVVVRVVVVVFQABAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAAAAAUABAEQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQFVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVVVVVVVVVVVVVVVVVVVVVdf3/f1VVVVVVVVVVVVVVVVVVVVVVVfX///////9uVVVVqqq6qqqqqur6v79VqqpWVV9VVVWqWlVVVVVVVf//////////V1VV/f/f///////////////////////3//////9VVVX/////////////f9X/VVVV/////1dX//////////////////////9/9//////////////////////////////////////////////////////////////X////////////////////X1VV1X////////9VVVVVdVVVVVVVVX1VVVVXVVVVVVVVVVVVVVVVVVVVVVVVVVXV////////////////////////////VVVVVVVVVVVVVVVV//////////////////////9fVVd//VX/VVXVV1X//1dVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX///9VV1VVVVVVVf//////////////f///3/////////////////////////////////////////////////////////////9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////V///V1X//////////////9//X1X1////Vf//V1X//1dVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlpVVVVVVVVVVVmWVWGqpVmqVVVVVVWVVVVVVVVVVZVVVQBBjqHBAAsBAwBBnKHBAAuJCVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQCWalpaaqoFQKZZlWVVVVVVVVVVVQAAAABVVlVVqVZVVVVVVVVVVVVWVVVVVVVVVVUAAAAAAAAAAFRVVVWVWVlVVWVVVWlVVVVVVVVVVVVVVZVWlWqqqqpVqqpaVVVVWVWqqqpVVVVVZVVVWlVVVVWlZVZVVVWVVVVVVVVVppaalllZZamWqqpmVapVWllVWlZlVVVVaqqlpVpVVVWlqlpVVVlZVVVZVVVVVVWVVVVVVVVVVVVVVVVVVVVVVVVVVVVlVfVVVVVpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqqqqqqqqqqqqVVVVqqqqqqVaVVWaqlpVpaVVWlqllqVaVVVVpVpVlVVVVX1VaVmlVV9VZlVVVVVVVVVVZlX///9VVVWammqaVVVV1VVVVVXVVVWlXVX1VVVVVb1Vr6q6qquqqppVuqr6rrquVV31VVVVVVVVVVdVVVVVWVVVVXfV31VVVVVVVVWlqqpVVVVVVVXVV1VVVVVVVVVVVVVVVVetWlVVVVVVVVVVVaqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAAAAwKqqWlUAAAAAqqqqqqqqqqpqqqqqqmqqVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVVWqalVVAABUWaqqalWqqqqqqqqqWqqqqqqqqqqqqqqqqqqqWlWqqqqqqqqquv7/v6qqqqpWVVVVVVVVVVVVVVVVVfX///////8vbml4L3N0b3JlLzI4aHl6ZmwzMzhrczRhbWhhN3ZwcG5sYnExczFucWF2LXJ1c3QtZGVmYXVsdC0xLjg1LjAvbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycy9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTA2L3NyYy9jb252ZXJ0L3NsaWNlcy5ycy9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTA2L3NyYy9leHRlcm5yZWYucnMdVBAAZwAAAH8AAAARAAAAHVQQAGcAAACMAAAAEQAAAG51bGwgcG9pbnRlciBwYXNzZWQgdG8gcnVzdHJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0IGRldGVjdGVkIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5zYWZlIGFsaWFzaW5nIGluIHJ1c3RKc1ZhbHVlKCkADlUQAAgAAAAWVRAAAQBBqKrBAAsBBABICXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AgZ3YWxydXMGMC4yNC40DHdhc20tYmluZGdlbhMwLjIuMTA2ICgxMTgzMWZiODkp");class S{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class Y{constructor(){}getTime(A){}setTime(A){}}class p{constructor(A,V){this.input="function"==typeof A.next?A:A[Symbol.iterator](),this.xfs=V??[]}map(A){return this.transform(function(A){return V=>g=>{V(A(g))}}(A))}flatMap(A){return this.transform(function(A){return V=>g=>{A(g).forEach(V)}}(A))}filter(A){return this.transform(function(A){return V=>g=>{A(g)&&V(g)}}(A))}take(A){return this.transform(function(A){let V=0;return g=>I=>{VI=>{V+=1,V>A&&g(I)}}(A))}transform(A){return new p(this.input,this.xfs.concat([A]))}multiplex(A,V){return new p(new K(this[Symbol.iterator](),A[Symbol.iterator](),V))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,V=[],g=!1;const I=(B=this.xfs,Q=A=>V.push(A),B.reverse().reduce(((A,V)=>{const g=m(V(A.step));return{step:g.step,flush:()=>{g.flush(),A.flush()}}}),m(Q)));var B,Q;return{next:()=>{for(A===V.length&&(V=[],A=0);0===V.length;){const A=this.input.next();if(A.done)break;I.step(A.value)}return 0!==V.length||g||(I.flush(),g=!0),V.length>0?{done:!1,value:V[A++]}:{done:!0}}}}}function m(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class K{constructor(A,V,g){this.left=A,this.right=V,this.comparator=g}[Symbol.iterator](){let A,V;return{next:()=>{if(void 0===A&&void 0!==this.left){const V=this.left.next();V.done?this.left=void 0:A=V.value}if(void 0===V&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:V=A.value}if(void 0===A&&void 0===V)return{done:!0};if(void 0===A){const A=V;return V=void 0,{done:!1,value:A}}if(void 0===V){const V=A;return A=void 0,{done:!1,value:V}}if(this.comparator(A,V)){const V=A;return A=void 0,{done:!1,value:V}}{const A=V;return V=void 0,{done:!1,value:A}}}}}}function T(A){const V=I(A.foreground),g=I(A.background),B=A.palette;if(void 0===B)return;if(!V||!g||B.length<8)return;const Q=[],C=Math.min(B.length,16);for(let A=0;A"["===A[0])).map(JSON.parse);return{header:g,events:I}}(V);if(void 0!==g){const{header:A,events:V}=g;if(2===A.version)return v(A,V);if(3===A.version)return b(A,V);throw new Error(`asciicast v${A.version} format not supported`)}{const A=JSON.parse(V);if(1===A.version)return H(A)}}else{if("object"==typeof A&&1===A.version)return H(A);if(Array.isArray(A)){const V=A[0];if(2===V.version){return v(V,A.slice(1,A.length))}if(3===V.version){return b(V,A.slice(1,A.length))}throw new Error(`asciicast v${V.version} format not supported`)}}throw new Error("invalid data")}function H(A){let V=0;const g=new p(A.stdout).map((A=>(V+=A[0],[V,"o",A[1]])));return{cols:A.width,rows:A.height,events:g}}function v(A,V){return{cols:A.width,rows:A.height,theme:W(A.theme),events:V,idleTimeLimit:A.idle_time_limit}}function b(A,V){V instanceof p||(V=new p(V));let g=0;return V=V.map((A=>(g+=A[0],[g,A[1],A[2]]))),{cols:A.term.cols,rows:A.term.rows,theme:W(A.term?.theme),events:V,idleTimeLimit:A.idle_time_limit}}function W(A){const V="string"==typeof A?.palette?A.palette.split(":"):void 0;return T({foreground:A?.fg,background:A?.bg,palette:V})}function x(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function Z(){let A=0;return function(V){return"m"===V[1]?[V[0],V[1],{index:A++,time:V[0],label:V[2]}]:V}}class X{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((V=>{A.onPush=V}))}}}function z(A,V,g,I,B,Q,C,E,e){const t=function(A,V,g,I){return function(B,Q){"o"===B?A(Q):"i"===B?g(Q):"r"===B?V(Q.cols,Q.rows):"m"===B&&I(Q)}}(V,g,I,B);if(0===A)return e.debug("using no buffer"),function(A){return{pushEvent(V){A(V[1],V[2])},pushText(V){A("o",V)},stop(){}}}(t);{let V;return"number"==typeof(A=A??{})?(e.debug(`using fixed time buffer (${A} ms)`),V=V=>A):"function"==typeof A?(e.debug("using custom dynamic buffer"),V=A({logger:e})):(e.debug("using adaptive buffer",A),V=function(){let{logger:A}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{minBufferTime:V=50,bufferLevelStep:g=100,maxBufferLevel:I=50,transitionDuration:B=500,peakHalfLifeUp:Q=100,peakHalfLifeDown:C=1e4,floorHalfLifeUp:E=5e3,floorHalfLifeDown:e=100,idealHalfLifeUp:t=1e3,idealHalfLifeDown:i=5e3,safetyMultiplier:o=1.2,minImprovementDuration:s=3e3}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};function r(A){return 0===A?V:g*A}let n=1,a=r(n),w=performance.now(),D=null,c=null,q=null,h=null,y=null,F=null;return function(l){const d=performance.now(),k=Math.max(0,d-w);if(w=d,null===D)D=l;else if(l>D){const A=1-Math.pow(2,-k/Q);D+=A*(l-D)}else{const A=1-Math.pow(2,-k/C);D+=A*(l-D)}if(D=Math.max(D,0),null===c)c=l;else if(l>c){const A=1-Math.pow(2,-k/E);c+=A*(l-c)}else{const A=1-Math.pow(2,-k/e);c+=A*(l-c)}c=Math.max(c,0);const G=o*(D+(D-c));if(null===q)q=G;else if(G>q){const A=1-Math.pow(2,-k/t);q+=+A*(G-q)}else{const A=1-Math.pow(2,-k/i);q+=+A*(G-q)}let u;var N,U,f;return q<=V?u=0:(N=Math.ceil(q/g),U=1,f=I,u=Math.min(f,Math.max(U,N))),l>a&&A.debug("buffer underrun",{latency:l,bufferTime:a}),u>n?(l>a?n=Math.min(u,n+3):n+=1,y=r(n),F=(y-a)/B,h=null,A.debug("raising buffer",{latency:l,bufferTime:a,targetBufferTime:y})):u=s&&(n-=1,y=r(n),F=(y-a)/B,h=d,A.debug("lowering buffer",{latency:l,bufferTime:a,targetBufferTime:y}))):h=null,null!==y&&(a+=F*k,(F>=0&&a>y||F<0&&a5&&void 0!==arguments[5]?arguments[5]:1/60,C=performance.now()-1e3*B,E=A(0);const e=new X;Q*=1e3;let t=-Q,i=!1;function o(){return performance.now()-C}return setTimeout((async()=>{for(;!i;){const A=await e.popAll();if(i)return;for(const I of A){const A=1e3*I[0]+E;if(A-t0&&(await j(B),i))return;g(I[0]),V(I[1],I[2]),t=A}}}),0),{pushEvent(V){let g=o()-1e3*V[0];g<0&&(I.debug(`correcting epoch by ${g} ms`),C+=g,g=0),E=A(g),e.push(V)},pushText(A){e.push([o()/1e3,"o",A])},stop(){i=!0,e.push(void 0)}}}(V,t,Q,e,C??0,E)}}function j(A){return new Promise((V=>{setTimeout(V,A)}))}const _=1e6;function P(A){const V=new TextDecoder,g=new TextDecoder;let I,B=function(A){const V=(new TextDecoder).decode(A);if("ALiS"!==V)throw new Error("not an ALiS v1 live stream");B=C},Q=0;function C(A){const V=new gA(new DataView(A)),g=V.getUint8();if(1!==g)throw new Error(`expected reset (0x01) frame, got ${g}`);return E(V,A)}function E(A,g){A.decodeVarUint();let C=A.decodeVarUint();I=C,C/=_,Q=0;const E=A.decodeVarUint(),t=A.decodeVarUint(),i=A.getUint8();let o;if(8===i){const V=30;o=$(new Uint8Array(g,A.offset,V)),A.forward(V)}else if(16===i){const V=54;o=$(new Uint8Array(g,A.offset,V)),A.forward(V)}else if(0!==i)throw new Error(`alis: invalid theme format (${i})`);const s=A.decodeVarUint();let r;return s>0&&(r=V.decode(new Uint8Array(g,A.offset,s))),B=e,{time:C,term:{size:{cols:E,rows:t},theme:o,init:r}}}function e(e){const t=new gA(new DataView(e)),i=t.getUint8();return 1===i?E(t,e):111===i?function(A,g){A.decodeVarUint();const B=A.decodeVarUint();I+=B;const Q=A.decodeVarUint(),C=V.decode(new Uint8Array(g,A.offset,Q));return[I/_,"o",C]}(t,e):105===i?function(A,V){A.decodeVarUint();const B=A.decodeVarUint();I+=B;const Q=A.decodeVarUint(),C=g.decode(new Uint8Array(V,A.offset,Q));return[I/_,"i",C]}(t,e):114===i?function(A){A.decodeVarUint();const V=A.decodeVarUint();I+=V;const g=A.decodeVarUint(),B=A.decodeVarUint();return[I/_,"r",{cols:g,rows:B}]}(t):109===i?function(A,V){A.decodeVarUint();const g=A.decodeVarUint();I+=g;const B=A.decodeVarUint(),C=new TextDecoder,E=Q++,e=I/_,t=C.decode(new Uint8Array(V,A.offset,B));return[e,"m",{index:E,time:e,label:t}]}(t,e):120===i?function(A){A.decodeVarUint();const V=A.decodeVarUint();I+=V;const g=A.decodeVarUint();return[I/_,"x",{status:g}]}(t):4===i?(B=C,!1):void A.debug(`alis: unknown frame type: ${i}`)}return function(A){return B(A)}}function $(A){const V=A.length/3,g=AA(A[0],A[1],A[2]),I=AA(A[3],A[4],A[5]),B=[];for(let g=2;g1&&void 0!==arguments[1]?arguments[1]:0;this.inner=A,this.offset=V}forward(A){this.offset+=A}getUint8(){const A=this.inner.getUint8(this.offset);return this.offset+=1,A}decodeVarUint(){let A=BigInt(0),V=BigInt(0),g=this.getUint8();for(;g>127;)g&=127,A+=BigInt(g)<V(A,g,I)}throw new Error(`unsupported driver: ${JSON.stringify(A)}`)}(V),this.changedLines=new Set,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed,this.loop=g.loop,this.autoPlay=g.autoPlay,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=A(g.startAt),this.poster=this._parsePoster(g.poster),this.markers=this._normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.audioUrl=g.audioUrl,this.boldIsBright=g.boldIsBright??!1,this.commandQueue=Promise.resolve(),this.needsClear=!1,this.eventHandlers=new Map([["ended",[]],["errored",[]],["idle",[]],["input",[]],["loading",[]],["marker",[]],["metadata",[]],["muted",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["ready",[]],["seeked",[]],["vtUpdate",[]]])}async init(){this.wasm=await EA;const{memory:A}=await this.wasm.default();this.memory=A,this._initializeVt(this.cols??80,this.rows??24);const V=this._feed.bind(this),g=this._resetVt.bind(this),I=this._resizeVt.bind(this),B=this._setState.bind(this),Q="npt"!==this.poster.type||this.autoPlay?void 0:this.poster.value;this.driver=this.driver({feed:V,onInput:A=>{this._dispatchEvent("input",{data:A})},onMarker:A=>{let{index:V,time:g,label:I}=A;this._dispatchEvent("marker",{index:V,time:g,label:I})},reset:g,resize:I,setState:B,logger:this.logger},{cols:this.cols,rows:this.rows,speed:this.speed,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:Q,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers,audioUrl:this.audioUrl}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==Q)&&this._withState((A=>A.init()));const C={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=A=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.restart&&(this.driver.restart=()=>{}),void 0===this.driver.mute&&(this.driver.mute=()=>{}),void 0===this.driver.unmute&&(this.driver.unmute=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let V=new Y;this.driver.play=()=>(V=new S(this.speed),A()),this.driver.getCurrentTime=()=>V.getTime()}this._dispatchEvent("ready",C),this.autoPlay?this.play():"text"===this.poster.type&&(this._feed(this.poster.value),this.needsClear=!0)}play(){return this._clearIfNeeded(),this._withState((A=>A.play()))}pause(){return this._withState((A=>A.pause()))}togglePlay(){return this._clearIfNeeded(),this._withState((A=>A.togglePlay()))}seek(A){return this._clearIfNeeded(),this._withState((async V=>{await V.seek(A)&&this._dispatchEvent("seeked")}))}step(A){return this._clearIfNeeded(),this._withState((V=>V.step(A)))}stop(){return this._withState((A=>A.stop()))}mute(){return this._withState((A=>A.mute()))}unmute(){return this._withState((A=>A.unmute()))}getLine(A,V){return this.vt.getLine(A,V)}getDataView(A,V){let[g,I]=A;return new DataView(this.memory.buffer,g,I*V)}getUint32Array(A){let[V,g]=A;return new Uint32Array(this.memory.buffer,V,g)}getCursor(){const A=this.vt.getCursor();return A?{col:A[0],row:A[1],visible:!0}:{col:0,row:0,visible:!1}}getCurrentTime(){return this.driver.getCurrentTime()}getRemainingTime(){if("number"==typeof this.duration)return this.duration-Math.min(this.getCurrentTime(),this.duration)}getProgress(){if("number"==typeof this.duration)return Math.min(this.getCurrentTime(),this.duration)/this.duration}getDuration(){return this.duration}addEventListener(A,V){this.eventHandlers.get(A).push(V)}removeEventListener(A,V){const g=this.eventHandlers.get(A);if(!g)return;const I=g.indexOf(V);-1!==I&&g.splice(I,1)}_dispatchEvent(A){let V=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const g of this.eventHandlers.get(A))g(V)}_withState(A){return this._enqueueCommand((()=>A(this.state)))}_enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}_setState(A){let V=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new oA(this);else if("idle"===A)this.state=new iA(this);else if("loading"===A)this.state=new sA(this);else if("ended"===A)this.state=new nA(this);else if("offline"===A)this.state=new rA(this);else{if("errored"!==A)throw new Error(`invalid state: ${A}`);this.state=new aA(this)}return this.state.onEnter(V),this.state}_feed(A){const V=this.vt.feed(A);this._dispatchEvent("vtUpdate",{changedRows:V})}async _initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this._normalizeMarkers(A.markers)??this.markers??[],0===this.cols&&(this.cols=80),0===this.rows&&(this.rows=24),this._initializeVt(this.cols,this.rows),void 0!==A.poster?(A.poster.forEach((A=>this.vt.feed(A))),this.needsClear=!0):"text"===this.poster.type&&(this.vt.feed(this.poster.value),this.needsClear=!0),this._dispatchEvent("metadata",{size:{cols:this.cols,rows:this.rows},theme:A.theme??null,duration:this.duration,markers:this.markers,hasAudio:A.hasAudio}),this._dispatchEvent("vtUpdate",{size:{cols:this.cols,rows:this.rows},theme:A.theme??null,changedRows:Array.from({length:this.rows},((A,V)=>V))})}_clearIfNeeded(){this.needsClear&&(this._feed("c"),this.needsClear=!1)}_resetVt(A,V){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,I=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;this.logger.debug(`core: vt reset (${A}x${V})`),this.cols=A,this.rows=V,this._initializeVt(A,V),void 0!==g&&""!==g&&this.vt.feed(g),this._dispatchEvent("metadata",{size:{cols:A,rows:V},theme:I??null}),this._dispatchEvent("vtUpdate",{size:{cols:A,rows:V},theme:I??null,changedRows:Array.from({length:V},((A,V)=>V))})}_resizeVt(A,V){if(A===this.vt.cols&&V===this.vt.rows)return;const g=this.vt.resize(A,V);this.vt.cols=A,this.vt.rows=V,this.logger.debug(`core: vt resize (${A}x${V})`),this._dispatchEvent("metadata",{size:{cols:A,rows:V}}),this._dispatchEvent("vtUpdate",{size:{cols:A,rows:V},changedRows:g})}_initializeVt(A,V){this.logger.debug("vt init",{cols:A,rows:V}),this.vt=this.wasm.create(A,V,100,this.boldIsBright),this.vt.cols=A,this.vt.rows=V}_parsePoster(V){return"string"!=typeof V?{}:"data:text/plain,"==V.substring(0,16)?{type:"text",value:V.substring(16)}:"npt:"==V.substring(0,4)?{type:"npt",value:A(V.substring(4))}:{}}_normalizeMarkers(A){if(Array.isArray(A))return A.map((A=>"number"==typeof A?[A,""]:A))}}const DA=new Map([["benchmark",function(A,V){let g,{url:I,iterations:B=10}=A,{feed:Q,setState:C}=V,E=0;return{async init(){const A=await O(await fetch(I)),{cols:V,rows:B,events:Q}=A;g=Array.from(Q).filter((A=>{let[V,g,I]=A;return"o"===g})).map((A=>{let[V,g,I]=A;return[V,I]}));const C=g[g.length-1][0];for(const[A,V]of g)E+=new Blob([V]).size;return{cols:V,rows:B,duration:C}},play(){const A=performance.now();for(let A=0;A{C("stopped",{reason:"ended"})}),0),!0}}}],["clock",function(A,V,g){let{hourColor:I=3,minuteColor:B=4,separatorColor:Q=9}=A,{feed:C}=V,{cols:E=5,rows:e=1}=g;const t=Math.floor(e/2),i=Math.floor(E/2)-2,o=`[?25l[${t}B`;let s;const r=()=>{const A=new Date,V=A.getHours(),g=A.getMinutes(),C=[];C.push("\r");for(let A=0;A{r().forEach(C)};return{init:()=>{const A=[o].concat(r());return{cols:E,rows:e,duration:1440,poster:A}},play:()=>(C(o),n(),s=setInterval(n,1e3),!0),stop:()=>{clearInterval(s)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,V){let g,I,{url:Q,bufferTime:C,minFrameTime:E}=A,{feed:e,reset:t,resize:i,onInput:o,onMarker:s,setState:r,logger:n}=V;n=new B(n,"eventsource: ");let a=new Y;function w(A){void 0!==I&&I.stop(),I=z(C,e,i,o,s,(A=>a.setTime(A)),A,E,n)}return{play:()=>{g=new EventSource(Q),g.addEventListener("open",(()=>{n.info("opened"),w()})),g.addEventListener("error",(A=>{n.info("errored"),n.debug({e:A}),r("loading")})),g.addEventListener("message",(A=>{const V=JSON.parse(A.data);if(Array.isArray(V))I.pushEvent(V);else if(void 0!==V.cols||void 0!==V.width){const A=V.cols??V.width,g=V.rows??V.height;n.debug(`vt reset (${A}x${g})`),r("playing"),w(V.time),t(A,g,V.init??void 0),a=new S,"number"==typeof V.time&&a.setTime(V.time)}else"offline"===V.state&&(n.info("stream offline"),r("offline",{message:"Stream offline"}),a=new Y)})),g.addEventListener("done",(()=>{n.info("closed"),g.close(),r("ended",{message:"Stream ended"})}))},stop:()=>{void 0!==I&&I.stop(),void 0!==g&&g.close()},getCurrentTime:()=>a.getTime()}}],["random",function(A,V,g){let{feed:I}=V,{speed:B}=g;const Q=" ".charCodeAt(0),C="~".charCodeAt(0)-Q;let E;const e=()=>{const A=Math.pow(5,4*Math.random());E=setTimeout(t,A/B)},t=()=>{e();const A=String.fromCharCode(Q+Math.floor(Math.random()*C));I(A)};return()=>(e(),()=>clearInterval(E))}],["recording",function(A,V,g){let I,B,Q,C,E,e,t,i,o,s,r,n,{feed:a,resize:w,onInput:D,onMarker:c,setState:q,logger:h}=V,{speed:y,idleTimeLimit:F,startAt:l,loop:d,posterTime:k,markers:G,pauseOnMarkers:u,cols:N,rows:U,audioUrl:f}=g,M=0,J=0,R=0,L=!1,S=!1,Y=()=>performance.now()*y,m=!1;async function K(A,V){const g=await fetch(A,V);if(!g.ok)throw new Error(`failed fetching recording from ${A}: ${g.status} ${g.statusText}`);return g}function T(){const A=Q[M];A?t=function(A,V){let g=(1e3*V-(Y()-i))/y;g<0&&(g=0);return setTimeout(A,g)}(O,A[0]):b()}function O(){let A,V=Q[M];do{J=V[0],M++;if(v(V))return;V=Q[M],A=Y()-i}while(V&&A>1e3*V[0]);T()}function H(){clearTimeout(t),t=null}function v(A){const[V,g,I]=A;if("o"===g)a(I);else if("i"===g)D(I);else if("r"===g){const[A,V]=I.split("x");w(A,V)}else if("m"===g&&(c(I),u))return W(),o=1e3*V,q("idle",{reason:"paused"}),!0;return!1}function b(){H(),R++,!0===d||"number"==typeof d&&R>"===A?A=g+5:"<<<"===A?A=g-.1*E:">>>"===A?A=g+.1*E:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*E);else if("object"==typeof A)if("prev"===A.marker)A=j(g)??0,V&&g-A<1&&(A=j(A)??0);else if("next"===A.marker)A=function(A){if(0==C.length)return;let V,g=C.length-1,I=C[g];for(;I&&I[0]>A;)V=I[0],I=C[--g];return V}(g)??E;else if("number"==typeof A.marker){const V=C[A.marker];if(void 0===V)throw new Error(`invalid marker index: ${A.marker}`);A=V[0]}const I=Math.min(Math.max(A,0),E);if(1e3*I===o)return!1;Iq("loading")),1e3),!t)return!0;h.debug("pausing session playback"),H(),o=Y()-i}function AA(){h.debug("audio resumed"),clearTimeout(s),q("playing"),L&&(L=!1,S&&(h.debug("resuming session playback"),i=Y()-o,o=null,T()))}return{init:async function(){const V=setTimeout((()=>{q("loading")}),3e3);try{let V=async function(A,V,g){const{parser:t,minFrameTime:i,inputOffset:o,dumpFilename:s,encoding:r="utf-8"}=A,n=await async function(A){let{url:V,data:g,fetchOpts:I={}}=A;if("string"==typeof V)return await K(V,I);if(Array.isArray(V))return await Promise.all(V.map((A=>K(A,I))));if(void 0!==g){"function"==typeof g&&(g=g()),g instanceof Promise||(g=Promise.resolve(g));const A=await g;return"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A}throw new Error("failed fetching recording file: url/data missing in src")}(A),a=function(A,V,g){let{startAt:I=0,idleTimeLimit:B,minFrameTime:Q,inputOffset:C,markers_:E}=g,{events:e}=A;e instanceof p||(e=new p(e));B=B??A.idleTimeLimit??1/0;const t={offset:0};e=e.transform(function(A){let V,g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/60;return I=>{let B=0,Q=0;return{step:A=>{B++,void 0!==V?"o"===A[1]&&"o"===V[1]&&A[0]-V[0]{void 0!==V&&(I(V),Q++),A.debug(`batched ${B} frames to ${Q} frames`)}}}}(V,Q)).map(function(A,V,g){let I=0,B=0;return function(Q){const C=Q[0]-I-A;return I=Q[0],C>0&&(B+=C,Q[0]"m"!==A[1])).multiplex(E,((A,V)=>A[0]"i"===A[1]?[A[0]+C,A[1],A[2]]:A)),e.sort(((A,V)=>A[0]-V[0])));const i=e[e.length-1][0],o=I-t.offset;return{...A,events:e,duration:i,effectiveStartAt:o}}(await t(n,{encoding:r}),V,{...g,minFrameTime:i,inputOffset:o});if(({cols:I,rows:B,events:Q,duration:E,effectiveStartAt:e}=a),N=N??I,U=U??B,0===Q.length)throw new Error("recording is missing events");void 0!==s&&function(A,V){const g=document.createElement("a"),I=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),B=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:I});g.href=URL.createObjectURL(new Blob([B],{type:"text/plain"})),g.download=V,g.click()}(a,s);const w=void 0!==k?(D=k,Q.filter((A=>A[0]A[2]))):void 0;var D;return C=Q.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:I,rows:B,duration:E,theme:a.theme,poster:w,markers:C}}(A,h,{idleTimeLimit:F,startAt:l,markers_:G});const g=await async function(A){if(!A)return!1;n=await async function(A){const V=new Audio;let g;V.preload="metadata",V.loop=!1,V.crossOrigin="anonymous";const I=new Promise((A=>{g=A}));function B(){g(),V.removeEventListener("canplay",B)}return V.addEventListener("canplay",B),V.src=A,V.load(),await I,V}(A),m=!Number.isNaN(n.duration)&&n.duration!==1/0&&n.seekable.length>0&&n.seekable.end(n.seekable.length-1)===n.duration,m?(n.addEventListener("playing",AA),n.addEventListener("waiting",$)):h.warn(`audio is not seekable - you must enable range request support on the server providing ${n.src} for audio seeking to work`);return!0}(f);return V=await V,{...V,hasAudio:g}}finally{clearTimeout(V)}},play:async function(){if(t)throw new Error("already playing");if(void 0===Q[M])throw new Error("already ended");return null!==e&&z(e),await X(),!0},pause:W,seek:z,step:function(A){let V,g;if(void 0===A&&(A=1),A>0){let I=M;V=Q[I];for(let B=0;B{A=I.protocol||"raw",w.info("opened"),w.info(`activating ${A} protocol handler`),"v1.alis"===A?I.onmessage=N(P(w)):"v2.asciicast"===A?I.onmessage=N(function(){let A=function(g){const I=JSON.parse(g);if(2!==I.version)throw new Error("not an asciicast v2 stream");return A=V,{time:0,term:{size:{cols:I.width,rows:I.height}}}};function V(A){const V=JSON.parse(A);if("r"===V[1]){const[A,g]=V[2].split("x");return[V[0],"r",{cols:parseInt(A,10),rows:parseInt(g,10)}]}return V}return function(V){return A(V)}}()):"v3.asciicast"===A?I.onmessage=N(function(){let A=function(V){const I=JSON.parse(V);if(3!==I.version)throw new Error("not an asciicast v3 stream");A=g;const B={size:{cols:I.term.cols,rows:I.term.rows}};if(I.term.theme){const A="string"==typeof I.term.theme.palette?I.term.theme.palette.split(":"):void 0,V=T({foreground:I.term.theme.fg,background:I.term.theme.bg,palette:A});V&&(B.theme=V)}return{time:0,term:B}},V=0;function g(A){const g=JSON.parse(A),[I,B,Q]=g;if(V+=I,"r"===B){const[A,g]=Q.split("x");return[V,"r",{cols:parseInt(A,10),rows:parseInt(g,10)}]}return[V,B,Q]}return function(V){return A(V)}}()):"raw"===A&&(I.onmessage=N(IA())),c=setTimeout((()=>{F=0}),1e3)},I.onclose=V=>{if(clearTimeout(q),M(),l)return;let g=!1,I="Stream ended";if("v1.alis"===A?(G||V.code>=4e3&&V.code<=4100)&&(g=!0,I=V.reason||I):(k||1e3===V.code||1005===V.code)&&(g=!0),g)w.info("closed"),a("ended",{message:I});else if(1002===V.code)w.debug(`close reason: ${V.reason}`),a("ended",{message:"Err: Player not compatible with the server"});else{clearTimeout(c);const A=e(F++);w.info(`unexpected close, reconnecting in ${A}...`),a("loading"),setTimeout(u,A)}},d=!1}function N(A){return q=setTimeout(f,5e3),function(V){try{const g=A(V.data);if(Q)if(Array.isArray(g))Q.pushEvent(g),"x"===g[1]&&(k=!0);else if("string"==typeof g)Q.pushText(g);else if("object"!=typeof g||Array.isArray(g)){if(!1===g)f(),G=!0;else if(void 0!==g)throw new Error(`unexpected value from protocol handler: ${g}`)}else U(g);else if("object"!=typeof g||Array.isArray(g)){if(void 0!==g)throw clearTimeout(q),new Error(`unexpected value from protocol handler: ${g}`);clearTimeout(q),q=setTimeout(f,1e3)}else U(g),clearTimeout(q)}catch(A){throw I.close(),A}}}function U(A){let{time:V,term:g}=A;const{size:I,init:B,theme:C}=g,{cols:e,rows:D}=I;w.info(`stream reset (${e}x${D} @${V})`),a("playing"),M(),Q=z(E,i,s,r,n,(A=>y.setTime(A)),V,t,w),o(e,D,B,C),y=new S,d=!0,k=!1,G=!1,"number"==typeof V&&y.setTime(V)}function f(){M(),d?(w.info("stream ended"),a("offline",{message:"Stream ended"})):(w.info("stream offline"),a("offline",{message:"Stream offline"})),y=new Y}function M(){Q&&Q.stop(),Q=null}return{init:()=>({hasAudio:!!D}),play:()=>{u(),D&&(h=new Audio,h.preload="auto",h.crossOrigin="anonymous",h.src=D,h.play())},stop:()=>{l=!0,M(),void 0!==I&&I.close(),h&&h.pause()},mute:function(){if(h)return h.muted=!0,!0},unmute:function(){if(h)return h.muted=!1,!0},getCurrentTime:()=>y.getTime()}}]]),cA=new Map([["asciicast",O],["typescript",async function(A,V){let{encoding:g}=V;const I=new TextDecoder(g);let B,Q,C=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));C[0].length<3&&(C=C.map((A=>["O",A[0],A[1]])));const E=await A[1].arrayBuffer(),e=new Uint8Array(E),t=e.findIndex((A=>10==A))+1,i=I.decode(e.subarray(0,t)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==i&&(B=parseInt(i[1],10),Q=parseInt(i[2],10));const o={array:e,cursor:t};let s=o;if(void 0!==A[2]){const V=await A[2].arrayBuffer();s={array:new Uint8Array(V),cursor:t}}const r=[];let n=0;for(const A of C)if(n+=parseFloat(A[1]),"O"===A[0]){const V=parseInt(A[2],10),g=o.array.subarray(o.cursor,o.cursor+V),B=I.decode(g);r.push([n,"o",B]),o.cursor+=V}else if("I"===A[0]){const V=parseInt(A[2],10),g=s.array.subarray(s.cursor,s.cursor+V),B=I.decode(g);r.push([n,"i",B]),s.cursor+=V}else if("S"===A[0]&&"SIGWINCH"===A[2]){const V=parseInt(A[4].slice(5),10),g=parseInt(A[3].slice(5),10);r.push([n,"r",`${V}x${g}`])}else"H"===A[0]&&"COLUMNS"===A[2]?B=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(Q=parseInt(A[3],10));return B=B??80,Q=Q??24,{cols:B,rows:Q,events:r}}],["ttyrec",async function(A,V){let{encoding:g}=V;const I=new TextDecoder(g),B=await A.arrayBuffer(),Q=new Uint8Array(B),C=QA(Q),E=C.time,e=I.decode(C.data).match(/\x1b\[8;(\d+);(\d+)t/),t=[];let i=80,o=24;null!==e&&(i=parseInt(e[2],10),o=parseInt(e[1],10));let s=0,r=QA(Q);for(;void 0!==r;){const A=r.time-E,V=I.decode(r.data);t.push([A,"o",V]),s+=r.len,r=QA(Q.subarray(s))}return{cols:i,rows:o,events:t}}]]);let qA,hA=new class{log(){}debug(){}info(){}warn(){}error(){}};onmessage=async function(A){const V=function(A,V){switch(A){case"getChanges":return qA.getChanges();case"new":const g=V[1];return!0===g.logger&&(hA=console),g.logger=hA,void(qA=new wA(V[0],g));case"init":return qA.init();case"play":return qA.play();case"pause":return qA.pause();case"togglePlay":return qA.togglePlay();case"stop":return qA.stop();case"seek":return qA.seek(V);case"step":return qA.step(V);case"getCurrentTime":return qA.getCurrentTime();case"getRemainingTime":return qA.getRemainingTime();case"getProgress":return qA.getProgress();case"addEventListener":return void qA.addEventListener(V[0],(A=>{postMessage({method:"onEvent",params:{name:V[0],event:A}})}));default:throw new Error(`invalid method ${A}`)}}(A.data.method,A.data.params);if(void 0!==A.data.id){const g=await V;postMessage({result:g,id:A.data.id})}}}(); diff --git a/packages/landing/public/asciinema-player/asciinema-player.css b/packages/landing/public/asciinema-player/asciinema-player.css deleted file mode 100644 index ee479ce93..000000000 --- a/packages/landing/public/asciinema-player/asciinema-player.css +++ /dev/null @@ -1,711 +0,0 @@ -.ap-default-term-ff { - --term-font-family: "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace, "Symbols Nerd Font"; -} -div.ap-wrapper { - outline: none; - height: 100%; - display: flex; - justify-content: center; -} -div.ap-wrapper .title-bar { - display: none; - top: -78px; - transition: top 0.15s linear; - position: absolute; - left: 0; - right: 0; - box-sizing: content-box; - font-size: 20px; - line-height: 1em; - padding: 15px; - font-family: sans-serif; - color: white; - background-color: rgba(0, 0, 0, 0.8); -} -div.ap-wrapper .title-bar img { - vertical-align: middle; - height: 48px; - margin-right: 16px; -} -div.ap-wrapper .title-bar a { - color: white; - text-decoration: underline; -} -div.ap-wrapper .title-bar a:hover { - text-decoration: none; -} -div.ap-wrapper:fullscreen { - background-color: #000; - width: 100%; - align-items: center; -} -div.ap-wrapper:fullscreen .title-bar { - display: initial; -} -div.ap-wrapper:fullscreen.hud .title-bar { - top: 0; -} -div.ap-wrapper div.ap-player { - text-align: left; - display: inline-block; - padding: 0px; - position: relative; - box-sizing: content-box; - overflow: hidden; - max-width: 100%; - border-radius: 4px; - font-size: 15px; - background-color: var(--term-color-background); -} -.ap-player { - --term-color-foreground: #ffffff; - --term-color-background: #000000; - --term-color-0: var(--term-color-foreground); - --term-color-1: var(--term-color-foreground); - --term-color-2: var(--term-color-foreground); - --term-color-3: var(--term-color-foreground); - --term-color-4: var(--term-color-foreground); - --term-color-5: var(--term-color-foreground); - --term-color-6: var(--term-color-foreground); - --term-color-7: var(--term-color-foreground); - --term-color-8: var(--term-color-0); - --term-color-9: var(--term-color-1); - --term-color-10: var(--term-color-2); - --term-color-11: var(--term-color-3); - --term-color-12: var(--term-color-4); - --term-color-13: var(--term-color-5); - --term-color-14: var(--term-color-6); - --term-color-15: var(--term-color-7); -} -div.ap-term { - position: relative; - font-family: var(--term-font-family); - border-width: 0.75em; - border-radius: 0; - border-style: solid; - border-color: var(--term-color-background); - box-sizing: content-box; -} -div.ap-term canvas { - position: absolute; - inset: 0; - display: block; - width: 100%; - height: 100%; -} -div.ap-term svg.ap-term-symbols { - position: absolute; - inset: 0; - display: block; - width: 100%; - height: 100%; - overflow: hidden; - pointer-events: none; -} -div.ap-term svg.ap-term-symbols use { - color: var(--term-color-foreground); -} -div.ap-term svg.ap-term-symbols:not(.ap-blink) .ap-blink { - opacity: 0; -} -div.ap-term pre.ap-term-text { - position: absolute; - inset: 0; - box-sizing: content-box; - overflow: hidden; - padding: 0; - margin: 0px; - display: block; - white-space: pre; - word-wrap: normal; - word-break: normal; - cursor: text; - color: var(--term-color-foreground); - outline: none; - line-height: var(--term-line-height); - font-family: inherit; - font-size: inherit; - font-variant-ligatures: none; - border: 0; - border-radius: 0; - background-color: transparent !important; -} -pre.ap-term-text .ap-line { - display: block; - width: 100%; - height: var(--term-line-height); - position: absolute; - top: calc(100% * var(--row) / var(--term-rows)); - letter-spacing: normal; - overflow: hidden; -} -pre.ap-term-text .ap-line span { - position: absolute; - left: calc(100% * var(--offset) / var(--term-cols)); - padding: 0; - display: inline-block; - height: 100%; -} -pre.ap-term-text:not(.ap-blink) .ap-line .ap-blink { - color: transparent; - border-color: transparent; -} -pre.ap-term-text .ap-bold { - font-weight: bold; -} -pre.ap-term-text .ap-faint { - opacity: 0.5; -} -pre.ap-term-text .ap-underline { - text-decoration: underline; -} -pre.ap-term-text .ap-italic { - font-style: italic; -} -pre.ap-term-text .ap-strike { - text-decoration: line-through; -} -.ap-line span { - color: var(--term-color-foreground); -} -div.ap-player div.ap-control-bar { - width: 100%; - height: 32px; - display: flex; - justify-content: space-between; - align-items: stretch; - color: var(--term-color-foreground); - box-sizing: content-box; - line-height: 1; - position: absolute; - bottom: 0; - left: 0; - opacity: 0; - transition: opacity 0.15s linear; - user-select: none; - border-top: 2px solid color-mix(in oklab, var(--term-color-background) 80%, var(--term-color-foreground)); - z-index: 30; -} -div.ap-player div.ap-control-bar * { - box-sizing: inherit; -} -div.ap-control-bar svg.ap-icon path { - fill: var(--term-color-foreground); -} -div.ap-control-bar span.ap-button { - display: flex; - flex: 0 0 auto; - cursor: pointer; -} -div.ap-control-bar span.ap-playback-button { - width: 12px; - height: 12px; - padding: 10px; - margin: 0 0 0 2px; -} -div.ap-control-bar span.ap-playback-button svg { - height: 12px; - width: 12px; -} -div.ap-control-bar span.ap-timer { - display: flex; - flex: 0 0 auto; - min-width: 50px; - margin: 0 10px; - height: 100%; - text-align: center; - font-size: 13px; - line-height: 100%; - cursor: default; -} -div.ap-control-bar span.ap-timer span { - font-family: var(--term-font-family); - font-size: inherit; - font-weight: 600; - margin: auto; -} -div.ap-control-bar span.ap-timer .ap-time-remaining { - display: none; -} -div.ap-control-bar span.ap-timer:hover .ap-time-elapsed { - display: none; -} -div.ap-control-bar span.ap-timer:hover .ap-time-remaining { - display: flex; -} -div.ap-control-bar .ap-progressbar { - display: block; - flex: 1 1 auto; - height: 100%; - padding: 0 10px; -} -div.ap-control-bar .ap-progressbar .ap-bar { - display: block; - position: relative; - cursor: default; - height: 100%; - font-size: 0; -} -div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter { - display: block; - position: absolute; - top: 15px; - left: 0; - right: 0; - height: 3px; -} -div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter-empty { - background-color: color-mix(in oklab, var(--term-color-foreground) 20%, var(--term-color-background)); -} -div.ap-control-bar .ap-progressbar .ap-bar .ap-gutter-full { - width: 100%; - transform-origin: left center; - background-color: var(--term-color-foreground); - border-radius: 3px; -} -div.ap-control-bar.ap-seekable .ap-progressbar .ap-bar { - cursor: pointer; -} -div.ap-control-bar .ap-fullscreen-button { - width: 14px; - height: 14px; - padding: 9px; - margin: 0 2px 0 4px; -} -div.ap-control-bar .ap-fullscreen-button svg { - width: 14px; - height: 14px; -} -div.ap-control-bar .ap-fullscreen-button svg.ap-icon-fullscreen-on { - display: inline; -} -div.ap-control-bar .ap-fullscreen-button svg.ap-icon-fullscreen-off { - display: none; -} -div.ap-control-bar .ap-fullscreen-button .ap-tooltip { - right: 5px; - left: initial; - transform: none; -} -div.ap-control-bar .ap-kbd-button { - height: 14px; - padding: 9px; - margin: 0 0 0 4px; -} -div.ap-control-bar .ap-kbd-button svg { - width: 26px; - height: 14px; -} -div.ap-control-bar .ap-kbd-button .ap-tooltip { - right: 5px; - left: initial; - transform: none; -} -div.ap-control-bar .ap-speaker-button { - width: 19px; - padding: 6px 9px; - margin: 0 0 0 4px; - position: relative; -} -div.ap-control-bar .ap-speaker-button svg { - width: 19px; -} -div.ap-control-bar .ap-speaker-button .ap-tooltip { - left: -50%; - transform: none; -} -div.ap-wrapper.ap-hud .ap-control-bar { - opacity: 1; -} -div.ap-wrapper:fullscreen .ap-fullscreen-button svg.ap-icon-fullscreen-on { - display: none; -} -div.ap-wrapper:fullscreen .ap-fullscreen-button svg.ap-icon-fullscreen-off { - display: inline; -} -span.ap-progressbar span.ap-marker-container { - display: block; - top: 0; - bottom: 0; - width: 21px; - position: absolute; - margin-left: -10px; -} -span.ap-marker-container span.ap-marker { - display: block; - top: 13px; - bottom: 12px; - left: 7px; - right: 7px; - background-color: color-mix(in oklab, var(--term-color-foreground) 33%, var(--term-color-background)); - position: absolute; - transition: top 0.1s, bottom 0.1s, left 0.1s, right 0.1s, background-color 0.1s; - border-radius: 50%; -} -span.ap-marker-container span.ap-marker.ap-marker-past { - background-color: var(--term-color-foreground); -} -span.ap-marker-container span.ap-marker:hover, -span.ap-marker-container:hover span.ap-marker { - background-color: var(--term-color-foreground); - top: 11px; - bottom: 10px; - left: 5px; - right: 5px; -} -.ap-tooltip-container span.ap-tooltip { - visibility: hidden; - background-color: var(--term-color-foreground); - color: var(--term-color-background); - font-family: var(--term-font-family); - font-weight: bold; - text-align: center; - padding: 0 0.5em; - border-radius: 4px; - position: absolute; - z-index: 1; - white-space: nowrap; - /* Prevents the text from wrapping and makes sure the tooltip width adapts to the text length */ - font-size: 13px; - line-height: 2em; - bottom: 100%; - left: 50%; - transform: translateX(-50%); -} -.ap-tooltip-container:hover span.ap-tooltip { - visibility: visible; -} -.ap-player .ap-overlay { - z-index: 10; - background-repeat: no-repeat; - background-position: center; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: flex; - justify-content: center; - align-items: center; -} -.ap-player .ap-overlay-start { - cursor: pointer; -} -.ap-player .ap-overlay-start .ap-play-button { - font-size: 0px; - position: absolute; - left: 0; - top: 0; - right: 0; - bottom: 0; - text-align: center; - color: white; - height: 80px; - max-height: 66%; - margin: auto; -} -.ap-player .ap-overlay-start .ap-play-button div { - height: 100%; -} -.ap-player .ap-overlay-start .ap-play-button div span { - height: 100%; - display: block; -} -.ap-player .ap-overlay-start .ap-play-button div span svg { - height: 100%; - display: inline-block; -} -.ap-player .ap-overlay-start .ap-play-button svg { - filter: drop-shadow(0px 0px 5px rgba(0, 0, 0, 0.4)); -} -.ap-player .ap-overlay-loading .ap-loader { - width: 48px; - height: 48px; - border-radius: 50%; - display: inline-block; - position: relative; - border: 10px solid; - border-color: rgba(255, 255, 255, 0.3) rgba(255, 255, 255, 0.5) rgba(255, 255, 255, 0.7) #ffffff; - border-color: color-mix(in srgb, var(--term-color-foreground) 30%, var(--term-color-background)) color-mix(in srgb, var(--term-color-foreground) 50%, var(--term-color-background)) color-mix(in srgb, var(--term-color-foreground) 70%, var(--term-color-background)) color-mix(in srgb, var(--term-color-foreground) 100%, var(--term-color-background)); - box-sizing: border-box; - animation: ap-loader-rotation 1s linear infinite; -} -.ap-player .ap-overlay-info { - background-color: var(--term-color-background); -} -.ap-player .ap-overlay-info span { - font-family: var(--term-font-family); - font-size: 2em; - font-weight: bold; - color: var(--term-color-background); - background-color: var(--term-color-foreground); - padding: 0.5em 0.75em; - text-transform: uppercase; -} -.ap-player .ap-overlay-help { - background-color: rgba(0, 0, 0, 0.8); - container-type: inline-size; -} -.ap-player .ap-overlay-help > div { - font-family: var(--term-font-family); - max-width: 85%; - max-height: 85%; - font-size: 18px; - color: var(--term-color-foreground); - box-sizing: border-box; - margin-bottom: 32px; -} -.ap-player .ap-overlay-help > div div { - padding: calc(min(4cqw, 40px)); - font-size: calc(min(1.9cqw, 18px)); - background-color: var(--term-color-background); - border: 1px solid color-mix(in oklab, var(--term-color-background) 90%, var(--term-color-foreground)); - border-radius: 6px; -} -.ap-player .ap-overlay-help > div div p { - font-weight: bold; - margin: 0 0 2em 0; -} -.ap-player .ap-overlay-help > div div ul { - list-style: none; - padding: 0; -} -.ap-player .ap-overlay-help > div div ul li { - margin: 0 0 0.75em 0; -} -.ap-player .ap-overlay-help > div div kbd { - color: var(--term-color-background); - background-color: var(--term-color-foreground); - padding: 0.2em 0.5em; - border-radius: 0.2em; - font-family: inherit; - font-size: 0.85em; - border: none; - margin: 0; -} -.ap-player .ap-overlay-error span { - font-size: 8em; -} -.ap-player .slide-enter-active { - transition: opacity 0.2s; -} -.ap-player .slide-enter-active.ap-was-playing { - transition: top 0.2s ease-out, opacity 0.2s; -} -.ap-player .slide-exit-active { - transition: top 0.2s ease-in, opacity 0.2s; -} -.ap-player .slide-enter { - top: -50%; - opacity: 0; -} -.ap-player .slide-enter-to { - top: 0%; -} -.ap-player .slide-enter, -.ap-player .slide-enter-to, -.ap-player .slide-exit, -.ap-player .slide-exit-to { - bottom: auto; - height: 100%; -} -.ap-player .slide-exit { - top: 0%; -} -.ap-player .slide-exit-to { - top: -50%; - opacity: 0; -} -@keyframes ap-loader-rotation { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} -.asciinema-player-theme-asciinema { - --term-color-foreground: #cccccc; - --term-color-background: #121314; - --term-color-0: #000000; - --term-color-1: #dd3c69; - --term-color-2: #4ebf22; - --term-color-3: #ddaf3c; - --term-color-4: #26b0d7; - --term-color-5: #b954e1; - --term-color-6: #54e1b9; - --term-color-7: #d9d9d9; - --term-color-8: #4d4d4d; - --term-color-9: #dd3c69; - --term-color-10: #4ebf22; - --term-color-11: #ddaf3c; - --term-color-12: #26b0d7; - --term-color-13: #b954e1; - --term-color-14: #54e1b9; - --term-color-15: #ffffff; -} -/* - Based on Dracula: https://draculatheme.com - */ -.asciinema-player-theme-dracula { - --term-color-foreground: #f8f8f2; - --term-color-background: #282a36; - --term-color-0: #21222c; - --term-color-1: #ff5555; - --term-color-2: #50fa7b; - --term-color-3: #f1fa8c; - --term-color-4: #bd93f9; - --term-color-5: #ff79c6; - --term-color-6: #8be9fd; - --term-color-7: #f8f8f2; - --term-color-8: #6272a4; - --term-color-9: #ff6e6e; - --term-color-10: #69ff94; - --term-color-11: #ffffa5; - --term-color-12: #d6acff; - --term-color-13: #ff92df; - --term-color-14: #a4ffff; - --term-color-15: #ffffff; -} -/* Based on Monokai from base16 collection - https://github.com/chriskempson/base16 */ -.asciinema-player-theme-monokai { - --term-color-foreground: #f8f8f2; - --term-color-background: #272822; - --term-color-0: #272822; - --term-color-1: #f92672; - --term-color-2: #a6e22e; - --term-color-3: #f4bf75; - --term-color-4: #66d9ef; - --term-color-5: #ae81ff; - --term-color-6: #a1efe4; - --term-color-7: #f8f8f2; - --term-color-8: #75715e; - --term-color-15: #f9f8f5; -} -/* - Based on Nord: https://github.com/arcticicestudio/nord - Via: https://github.com/neilotoole/asciinema-theme-nord - */ -.asciinema-player-theme-nord { - --term-color-foreground: #eceff4; - --term-color-background: #2e3440; - --term-color-0: #3b4252; - --term-color-1: #bf616a; - --term-color-2: #a3be8c; - --term-color-3: #ebcb8b; - --term-color-4: #81a1c1; - --term-color-5: #b48ead; - --term-color-6: #88c0d0; - --term-color-7: #eceff4; -} -.asciinema-player-theme-seti { - --term-color-foreground: #cacecd; - --term-color-background: #111213; - --term-color-0: #323232; - --term-color-1: #c22832; - --term-color-2: #8ec43d; - --term-color-3: #e0c64f; - --term-color-4: #43a5d5; - --term-color-5: #8b57b5; - --term-color-6: #8ec43d; - --term-color-7: #eeeeee; - --term-color-15: #ffffff; -} -/* - Based on Solarized Dark: https://ethanschoonover.com/solarized/ - */ -.asciinema-player-theme-solarized-dark { - --term-color-foreground: #839496; - --term-color-background: #002b36; - --term-color-0: #073642; - --term-color-1: #dc322f; - --term-color-2: #859900; - --term-color-3: #b58900; - --term-color-4: #268bd2; - --term-color-5: #d33682; - --term-color-6: #2aa198; - --term-color-7: #eee8d5; - --term-color-8: #002b36; - --term-color-9: #cb4b16; - --term-color-10: #586e75; - --term-color-11: #657b83; - --term-color-12: #839496; - --term-color-13: #6c71c4; - --term-color-14: #93a1a1; - --term-color-15: #fdf6e3; -} -/* - Based on Solarized Light: https://ethanschoonover.com/solarized/ - */ -.asciinema-player-theme-solarized-light { - --term-color-foreground: #657b83; - --term-color-background: #fdf6e3; - --term-color-0: #073642; - --term-color-1: #dc322f; - --term-color-2: #859900; - --term-color-3: #b58900; - --term-color-4: #268bd2; - --term-color-5: #d33682; - --term-color-6: #2aa198; - --term-color-7: #eee8d5; - --term-color-8: #002b36; - --term-color-9: #cb4b16; - --term-color-10: #586e75; - --term-color-11: #657c83; - --term-color-12: #839496; - --term-color-13: #6c71c4; - --term-color-14: #93a1a1; - --term-color-15: #fdf6e3; -} -.asciinema-player-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-fill { - fill: var(--term-color-1); -} -.asciinema-player-theme-solarized-light .ap-overlay-start .ap-play-button svg .ap-play-btn-stroke { - stroke: var(--term-color-1); -} -/* - Based on Tango: https://en.wikipedia.org/wiki/Tango_Desktop_Project - */ -.asciinema-player-theme-tango { - --term-color-foreground: #cccccc; - --term-color-background: #121314; - --term-color-0: #000000; - --term-color-1: #cc0000; - --term-color-2: #4e9a06; - --term-color-3: #c4a000; - --term-color-4: #3465a4; - --term-color-5: #75507b; - --term-color-6: #06989a; - --term-color-7: #d3d7cf; - --term-color-8: #555753; - --term-color-9: #ef2929; - --term-color-10: #8ae234; - --term-color-11: #fce94f; - --term-color-12: #729fcf; - --term-color-13: #ad7fa8; - --term-color-14: #34e2e2; - --term-color-15: #eeeeec; -} -/* - Based on gruvbox: https://github.com/morhetz/gruvbox - */ -.asciinema-player-theme-gruvbox-dark { - --term-color-foreground: #fbf1c7; - --term-color-background: #282828; - --term-color-0: #282828; - --term-color-1: #cc241d; - --term-color-2: #98971a; - --term-color-3: #d79921; - --term-color-4: #458588; - --term-color-5: #b16286; - --term-color-6: #689d6a; - --term-color-7: #a89984; - --term-color-8: #7c6f65; - --term-color-9: #fb4934; - --term-color-10: #b8bb26; - --term-color-11: #fabd2f; - --term-color-12: #83a598; - --term-color-13: #d3869b; - --term-color-14: #8ec07c; - --term-color-15: #fbf1c7; -} diff --git a/packages/landing/public/asciinema-player/asciinema-player.min.js b/packages/landing/public/asciinema-player/asciinema-player.min.js deleted file mode 100644 index 2979ede6c..000000000 --- a/packages/landing/public/asciinema-player/asciinema-player.min.js +++ /dev/null @@ -1 +0,0 @@ -var AsciinemaPlayer=function(A){"use strict";function e(A){return"number"==typeof A?A:"string"==typeof A?A.split(":").reverse().map(parseFloat).reduce(((A,e,g)=>A+e*Math.pow(60,g))):void 0}const g=/^#[0-9a-f]{6}$/,V=/^#[0-9a-f]{3}$/;function t(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if("string"!=typeof A)return e;const t=A.trim().toLowerCase();return g.test(t)?t:V.test(t)?`#${t[1]}${t[1]}${t[2]}${t[2]}${t[3]}${t[3]}`:e}function I(A,e,g){return[e[0]+A*(g[0]-e[0]),e[1]+A*(g[1]-e[1]),e[2]+A*(g[2]-e[2])]}function B(A){const[e,g,V]=function(A){return[Number.parseInt(A.slice(1,3),16)/255,Number.parseInt(A.slice(3,5),16)/255,Number.parseInt(A.slice(5,7),16)/255]}(A).map(r),t=.4122214708*e+.5363325363*g+.0514459929*V,I=.2119034982*e+.6806995451*g+.1073969566*V,B=.0883024619*e+.2817188376*g+.6299787005*V,Q=Math.cbrt(t),C=Math.cbrt(I),i=Math.cbrt(B);return[.2104542553*Q+.793617785*C-.0040720468*i,1.9779984951*Q-2.428592205*C+.4505937099*i,.0259040371*Q+.7827717662*C-.808675766*i]}function Q(A){const e=C(A);if(E(e))return o(e);const[g,V,t]=function(A){let[e,g,V]=A;return[e,Math.hypot(g,V),Math.atan2(V,g)]}(A);let I=0,B=V,Q=[g,0,t];for(let A=0;A<24;A+=1){const A=(I+B)/2,e=[g,A,t];E(C(i(e)))?(I=A,Q=e):B=A}return o(C(i(Q)))}function C(A){const e=s(A[0],0,1),g=A[1],V=A[2],t=(e+.3963377774*g+.2158037573*V)**3,I=(e-.1055613458*g-.0638541728*V)**3,B=(e-.0894841775*g-1.291485548*V)**3,Q=-1.2684380046*t+2.6097574011*I-.3413193965*B,C=-.0041960863*t-.7034186147*I+1.707614701*B;return[n(4.0767416621*t-3.3077115913*I+.2309699292*B),n(Q),n(C)]}function i(A){let[e,g,V]=A;return[e,g*Math.cos(V),g*Math.sin(V)]}function o(A){const e=A=>Math.round(255*s(A,0,1)).toString(16).padStart(2,"0");return`#${e(A[0])}${e(A[1])}${e(A[2])}`}function r(A){return A<=.04045?A/12.92:((A+.055)/1.055)**2.4}function n(A){return A<=.0031308?12.92*A:1.055*A**(1/2.4)-.055}function E(A){let[e,g,V]=A;return e>=0&&e<=1&&g>=0&&g<=1&&V>=0&&V<=1}function s(A,e,g){return Math.max(e,Math.min(g,A))}class a{log(){}debug(){}info(){}warn(){}error(){}}class c{constructor(A,e){this.logger=A,this.prefix=e}log(A){for(var e=arguments.length,g=new Array(e>1?e-1:0),V=1;V1?e-1:0),V=1;V1?e-1:0),V=1;V1?e-1:0),V=1;V1?e-1:0),V=1;V0?`Function(${e})`:"Function"}if(Array.isArray(A)){const e=A.length;let g="[";e>0&&(g+=w(A[0]));for(let V=1;V1))return toString.call(A);if(V=g[1],"Object"==V)try{return"Object("+JSON.stringify(A)+")"}catch(A){return"Object"}return A instanceof Error?`${A.name}: ${A.message}\n${A.stack}`:V}function h(A,e){return A>>>=0,function(){null!==y&&0!==y.byteLength||(y=new Uint32Array(l.memory.buffer));return y}().subarray(A/4,A/4+e)}let d=null;function f(){return(null===d||!0===d.buffer.detached||void 0===d.buffer.detached&&d.buffer!==l.memory.buffer)&&(d=new DataView(l.memory.buffer)),d}function D(A,e){return function(A,e){G+=e,G>=N&&(R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),R.decode(),G=e);return R.decode(k().subarray(A,A+e))}(A>>>=0,e)}let y=null;let q=null;function k(){return null!==q&&0!==q.byteLength||(q=new Uint8Array(l.memory.buffer)),q}function p(A){return L[A]}let L=new Array(128).fill(void 0);L.push(void 0,null,!0,!1);let F=L.length;function M(A,e,g){if(void 0===g){const g=U.encode(A),V=e(g.length,1)>>>0;return k().subarray(V,V+g.length).set(g),J=g.length,V}let V=A.length,t=e(V,1)>>>0;const I=k();let B=0;for(;B127)break;I[t+B]=e}if(B!==V){0!==B&&(A=A.slice(B)),t=g(t,V,V=B+3*A.length,1)>>>0;const e=k().subarray(t+B,t+V);B+=U.encodeInto(A,e).written,t=g(t,V,B,1)>>>0}return J=B,t}function m(A){const e=p(A);return function(A){A<132||(L[A]=F,F=A)}(A),e}let R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});R.decode();const N=2146435072;let G=0;const U=new TextEncoder;"encodeInto"in U||(U.encodeInto=function(A,e){const g=U.encode(A);return e.set(g),{read:A.length,written:g.length}});let J=0;const v="undefined"==typeof FinalizationRegistry?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry((A=>l.__wbg_vt_free(A>>>0,1)));class b{static __wrap(A){A>>>=0;const e=Object.create(b.prototype);return e.__wbg_ptr=A,v.register(e,e.__wbg_ptr,e),e}__destroy_into_raw(){const A=this.__wbg_ptr;return this.__wbg_ptr=0,v.unregister(this),A}free(){const A=this.__destroy_into_raw();l.__wbg_vt_free(A,0)}feed(A){const e=M(A,l.__wbindgen_export,l.__wbindgen_export2),g=J;return m(l.vt_feed(this.__wbg_ptr,e,g))}resize(A,e){return m(l.vt_resize(this.__wbg_ptr,A,e))}getSize(){try{const V=l.__wbindgen_add_to_stack_pointer(-16);l.vt_getSize(V,this.__wbg_ptr);var A=f().getInt32(V+0,!0),e=f().getInt32(V+4,!0),g=h(A,e).slice();return l.__wbindgen_export3(A,4*e,4),g}finally{l.__wbindgen_add_to_stack_pointer(16)}}getLine(A,e){return m(l.vt_getLine(this.__wbg_ptr,A,e))}getCursor(){return m(l.vt_getCursor(this.__wbg_ptr))}}Symbol.dispose&&(b.prototype[Symbol.dispose]=b.prototype.free);const S=new Set(["basic","cors","default"]);function Y(){const A={wbg:{}};return A.wbg.__wbg___wbindgen_debug_string_adfb662ae34724b6=function(A,e){const g=M(w(p(e)),l.__wbindgen_export,l.__wbindgen_export2),V=J;f().setInt32(A+4,V,!0),f().setInt32(A+0,g,!0)},A.wbg.__wbg___wbindgen_throw_dd24417ed36fc46e=function(A,e){throw new Error(D(A,e))},A.wbg.__wbg_new_13317ed16189158e=function(){return u(new Array)},A.wbg.__wbg_new_4ceb6a766bf78b04=function(){return u(new Object)},A.wbg.__wbg_set_3f1d0b984ed272ed=function(A,e,g){p(A)[m(e)]=m(g)},A.wbg.__wbg_set_8b6a9a61e98a8881=function(A,e,g){p(A)[e>>>0]=m(g)},A.wbg.__wbindgen_cast_2241b6af4c4b2941=function(A,e){return u(D(A,e))},A.wbg.__wbindgen_cast_4625c577ab2ec9ee=function(A){return u(BigInt.asUintN(64,A))},A.wbg.__wbindgen_cast_d6cd19b81560fd6e=function(A){return u(A)},A.wbg.__wbindgen_object_clone_ref=function(A){return u(p(A))},A.wbg.__wbindgen_object_drop_ref=function(A){m(A)},A}function K(A,e){return l=A.exports,T.__wbindgen_wasm_module=e,d=null,y=null,q=null,l}async function T(A){if(void 0!==l)return l;void 0!==A&&(Object.getPrototypeOf(A)===Object.prototype?({module_or_path:A}=A):console.warn("using deprecated parameters for the initialization function; pass a single object instead"));const e=Y();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:g,module:V}=await async function(A,e){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,e)}catch(e){if(!A.ok||!S.has(A.type)||"application/wasm"===A.headers.get("Content-Type"))throw e;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e)}const g=await A.arrayBuffer();return await WebAssembly.instantiate(g,e)}{const g=await WebAssembly.instantiate(A,e);return g instanceof WebAssembly.Instance?{instance:g,module:A}:g}}(await A,e);return K(g,V)}var O=Object.freeze({__proto__:null,Vt:b,create:function(A,e,g,V){const t=l.create(A,e,g,V);return b.__wrap(t)},default:T,initSync:function(A){if(void 0!==l)return l;void 0!==A&&(Object.getPrototypeOf(A)===Object.prototype?({module:A}=A):console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const e=Y();return A instanceof WebAssembly.Module||(A=new WebAssembly.Module(A)),K(new WebAssembly.Instance(A,e),A)}});const H=[62,0,0,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,0,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];function Z(A){return H[A-43]}var x=function(A){let e,g=A.endsWith("==")?2:A.endsWith("=")?1:0,V=A.length,t=new Uint8Array(V/4*3);for(let g=0,I=0;g>16,t[I+1]=e>>8&255,t[I+2]=255&e;return t.subarray(0,t.length-g)}("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CAgJCgsODA4NDgsgAkGoAWpBASABKAIAIAEoAgRB1NzAABCBASABIAIpA6gBNwIAIABBADoAAAwYCyACQbABakEBIAEoAgAgASgCBEHk3MAAEIEBIAEgAikDsAE3AgAgAEEBOgAADBcLIAJBuAFqQQEgASgCACABKAIEQfTcwAAQgQEgASACKQO4ATcCACAAQQI6AAAMFgsgAkHAAWpBASABKAIAIAEoAgRBhN3AABCBASABIAIpA8ABNwIAIABBAzoAAAwVCyACQcgBakEBIAEoAgAgASgCBEGU3cAAEIEBIAEgAikDyAE3AgAgAEEEOgAADBQLIAJB0AFqQQEgASgCACABKAIEQaTdwAAQgQEgASACKQPQATcCACAAQQU6AAAMEwsgAkHYAWpBASABKAIAIAEoAgRBtN3AABCBASABIAIpA9gBNwIAIABBBjoAAAwSCyACQeABakEBIAEoAgAgASgCBEHE3cAAEIEBIAEgAikD4AE3AgAgAEEHOgAADBELIAJB6AFqQQEgASgCACABKAIEQdTdwAAQgQEgASACKQPoATcCACAAQQg6AAAMEAsgAkHwAWpBASABKAIAIAEoAgRB5N3AABCBASABIAIpA/ABNwIAIABBCToAAAwPCyACQfgBakEBIAEoAgAgASgCBEH03cAAEIEBIAEgAikD+AE3AgAgAEEKOgAADA4LIAJBgAJqQQEgASgCACABKAIEQYTewAAQgQEgASACKQOAAjcCACAAQQs6AAAMDQsgAkGIAmpBASABKAIAIAEoAgRBlN7AABCBASABIAIpA4gCNwIAIABBDDoAAAwMCyACQZACakEBIAEoAgAgASgCBEGk3sAAEIEBIAEgAikDkAI3AgAgAEENOgAADAsLAkACQCADQR5rQf//A3FBCE8EQCADQSZrDgIBCAILIAJBCGpBASABKAIAIAEoAgRBxODAABCBASABIAIpAwg3AgAgACADQR5rOgACIABBDjsAAAwMCwJAIAEoAgQiA0ECTwRAIAJBmAFqIAEoAgBBEGoQaSACKAKYASIDDQEgASgCBCEDCyACQegAakEBIAEoAgAgA0G03sAAEIEBIAIoAmwhAyACKAJoIQQMDQsCQAJAAkAgAigCnAFBAUcNACADLwEAQQJrDgQBAAACAAsgAkHwAGpBASABKAIAIAEoAgRBhN/AABCB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ACABQQRqIQwgAkFAayENIAJBJWohDiACQRxqIQ8gASgCJCEFIAEoAhQhECABKAIQIQMCQAJAAn8CQANAIAEoAgAhBiABQYCAgIB4NgIAIAEoAgQhCwJAAkACQAJAAkAgBkGAgICAeEcEQCABKQIIIREgCyEHDAELAkAgAyAQRgRAQYCAgIB4IQYMAQsgASADQRBqIgg2AhAgAykCCCERIAMoAgQhByADKAIAIQYgCCEDC0GAgICAeCALEKMBIAZBgICAgHhGDQELIAIgBzYCDCACIAY2AgggAiARNwIQIBFCIIghEkF/IAUgEaciBEcgBCAFSxtB/wFxDgICAwELQYCAgIB4IAcQowEgAEGAgICAeDYCACABQYCAgIB4NgIADAcLAkAgEqdBAXENACAFIAQgByAEEDRrIgMgAyAFSRsiAyAESw0AIAIgAzYCECADIQQLAn9BgICAgHggBCAFTQ0AGgJAAkAgByAEIAVBuNrAABCQASgCBEUEQCACQThqIgMgAkEIaiIIIAVBAWsQPyACQTBqIANBCGooAgA2AgAgAiACKQI4NwMoIAItABQhBCADQRBqIAIoAgwgAigCECIHIAdBAWtB2NrAABCQASIHQRBqLwEAOwEAIAJCoICAgBA3AjggAiAHKQIINwJAIAggA0Ho2sAAEFcgAiAEOgA0IAItABRBAXFFDQEMAgsgAkE4aiIDIAJBCGogBRA/IAJBMGogA0EIaigCADYCACACIAIpAjg3AyggAiACLQAUIgM6ADQgAw0BCyACQShqEIsBCyACKAIwBEAgAkFAayACQTRqKAIANgIAIAJBAToAFCACIAIpAiw3AzggAigCKAwBCyACKAIoIAIoAixBBEEUEJ8BQYCAgIB4CyEDQYCAgIB4IAsQowEgASADNgIAIAwgAikDODcCACAMQQhqIAJBQGsoAgA2AgAgAEEIaiACQRBqKQIANwIAIAAgAikCCDcCAAwGCyAAIBE3AgggACAHNgIEIAAgBjYCAAwFCwJAIAMgEEcEQCABIANBEGoiCDYCECADKAIAIgZBgICAgHhHDQELIAJBADsAQCACQQI6ADwgAkECOgA4IAJBCGoiASAFIAJBOGoQQSAAIAIpAgg3AgAgAkEAOgAUIABBCGogAUEIaikCADcCAAwFCyADQQxqKAIAIQkgDyADKQIENwIAIA9BCGogCTYCACACIAY2AhggBSAEayIJRQ0BIBKnQQFxRQRAIAJBADsAQCACQQI6ADwgAkECOgA4IAJBCGogBSACQThqEEEMAgsgAi0AJEUEQCACQRhqEIsBCyACKAIcIQMgAigCICIKIAlNBEAgAkEIaiIEIAMgChCAAQJAIAItACQiBg0AIAJBADoAFCACKAIQIAVPDQAgAkEAOwBAIAJBAjoAPCACQQI6ADggBCAFIAJBOGoQQQsgAigCGCADQQRBFBCfASAGRQ0EQYCAgIB4IAsQowEgAUEIaiACQRBqKQIANwIAIAEgAikCCDcCAEGAgICAeCACEKMBIAghAwwBCwsgAyAKIAlB+NnAABCQASgCBEUEQCANQQhqIAcgBCAEQQFrQYjawAAQkAEiCEEQai8BADsBACANIAgpAgg3AgAgAkKggICAEDcCOCACQQhqIAJBOGpBmNrAABBXIAlBAWshCQsgCSAKTQRAIAJBCGogAyAJEIABIAIoAhghBiADIAogCRCIASAGQYCAgIB4Rg0DIAogCiAJayIIIAggCksbIQQgAi0AJAwCCyAJIApBqNrAABCzAQALIAJBKmogDkECai0AADoAACACIA4vAAA7ASggAigCICEEIAIoAhwhAyACLQAkCyEIQYCAgIB4IAsQowEgASAIOgAMIAEgBDYCCCABIAM2AgQgASAGNgIAIAEgAi8BKDsADSABQQ9qIAJBKmotAAA6AAALIAAgAikCCDcCACAAQQhqIAJBEGopAgA3AgALIAJB0ABqJAAL5QoCEH8BfiMAQZABayICJAAgACgCbCIFIAAoAhwiBmsiAUEAIAEgACgCFCIHIAZrIAVqTRshDSAFIAdqIQMgB0EEdCIBIAAoAhAiCmohDyAAKAIYIQwgACgCaCEOIAAoAqABIQsgACgCnAEhCCAKIQQDQAJAIAMgBkYNACABRQ0AIAkgDGpBACAELQAMIhAbIQkgA0EBayEDIAFBEGshASAEQRBqIQQgDSAQQQFzaiENDAELCyAIIAxHBEBBACEFIABBADYCFCACIAg2AjggAkEANgI0IAIgBzYCMCACIABBDGoiDDYCLCACIA82AiggAiAKNgIkIAJBgICAgHg2AhQgAkHIAGogAkEUaiIBEBACfyACKAJIQYCAgIB4RgRAIAEQoQFBBCEEQQAMAQsgAkEIakEE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QQlJDQEgA0UEQCABIQMDQCADIAVqIgEgAyACEGogASEDIAIgACACayIATQ0ACwwBCwtBACAAQQR0IgNrIQUDQCABIAVqIAEgABBqIAEgA2ohASACIABrIgIgAE8NAAsMAQsLIAEgAEEEdCIFayIDIAJBBHQiBmohByAAIAJLDQEgBEEQaiIAIAMgBRAWGiADIAEgBhASIAcgACAFEBYaDAILIARBCGoiByABIABBBHRrIgZBCGopAgA3AwAgBCAGKQIANwMAIAJBBHQhCCACIgUhAQNAIAYgAUEEdGohAwNAIARBGGoiCSADQQhqIgopAgA3AwAgBCADKQIANwMQIAcpAwAhDSADIAQpAwA3AgAgCiANNwIAIAcgCSkDADcDACAEIAQpAxA3AwAgACABSwRAIAMgCGohAyABIAJqIQEMAQsLIAEgAGsiAQRAIAEgBSABIAVJGyEFDAEFIAQpAwAhDSAGQQhqIARBCGoiBykDADcCACAGIA03AgBBASAFIAVBAU0bIQlBASEBA0AgASAJRg0EIAYgAUEEdGoiBSkCACENIAcgBUEIaiIKKQIANwMAIAQgDTcDACABIAJqIQMDQCAEQRhqIgsgBiADQQR0aiIIQQhqIgwpAgA3AwAgBCAIKQIANwMQIAcpAwAhDSAIIAQpAwA3AgAgDCANNwIAIAcgCykDADcDACAEIAQpAxA3AwAgACADSwRAIAIgA2ohAwwBCyADIABrIgMgAUcNAAsgBCkDACENIAogBykDADcCACAFIA03AgAgAUEBaiEBDAALAAsACwALIARBEGoiACABIAYQFhogByADIAUQEiADIAAgBhAWGgsgBEGQAWokAAuQBQEIfwJAIAJBEEkEQCAAIQMMAQsCQEEAIABrQQNxIgYgAGoiBSAATQ0AIAZBAWsgACEDIAEhBCAGBEAgBiEHA0AgAyAELQAAOgAAIARBAWohBCADQQFqIQMgB0EBayIHDQALC0EHSQ0AA0AgAyAELQAAOgAAIANBAWogBEEBai0AADoAACADQQJqIARBAmotAAA6AAAgA0EDaiAEQQNqLQAAOgAAIANBBGogBEEEai0AADoAACADQQVqIARBBWotAAA6AAAgA0EGaiAEQQZqLQAAOgAAIANBB2ogBEEHai0AADoAACAEQQhqIQQgBSADQQhqIgNHDQALCyACIAZr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AygCHCIAIAEgAhAlIANBKGogAEHgAGooAgAgAEHkAGooAgAQIyADQRBqIAAQJCADIAMpAxA3AjQgA0EIaiADKAIsIAMoAjAQWyADKAIMIQAgAygCCEEBcQRAIAMgADYCPCADQTxqQezCwAAQQgALIANBKGoQbiADKAIgIAMoAiQQsgEgA0FAayQAIAALmQEBA38gAUFsbCECIAFB/////wNxIQMgACABQRRsaiEBQQAhAAJAA0AgAkUNAQJAIAFBFGsiBCgCAEEgRw0AIAFBEGsoAgBBAUcNACABQQxrLQAAQQJHDQAgAUEIay0AAEECRw0AIAFBBGstAAANACABQQNrLQAAQR9xDQAgAkEUaiECIABBAWohACAEIQEMAQsLIAAhAwsgAwuxAQECfyMAQRBrIgIkAAJAIAFFDQAgAUEDakECdiEBAkAgAEEETQRAIAFBAWsiA0GAAkkNAQsgAkGsssEAKAIANgIIIAEgACACQQhqQaiqwQBBBEEFEE8hAEGsssEAIAIoAgg2AgAMAQsgAkGsssEANgIEIAIgA0ECdEGsqsEAaiIDKAIANgIMIAEgACACQQxqIAJBBGpBBkEHEE8hACADIAIoAgw2AgALIAJBEGokACAAC6ABAQN/IwBBEGsiBSQAIAVBCGogACABIAJB4M7AABBnIAUoAgwiBiADIAIgAWsiByADIAdJGyIDTwRAIAYgA2siBiAFKAIIIAZBBHRqIAMQFSAAIAEgASADaiAEECogAQRAIAAgAUEBa0HwzsAAEGJBADoADAsgACACQQFrQYDPwAAQYkEAOgAMIAVBEGokAA8LQczJwABBIUHwycAAEHEAC6gBAQF/IwBBQGoiAyQAIANBCGogACgCABACIAMoAgghACADIAMoAgw2AgQgAyAANgIAIANBATYCMCADQQI2AhggA0GYqsEANgIUIANCATcCICADIAMoAgQiADYCPCADIAMoAgA2AjggAyAANgI0IAMgA0E0ajYCLCADIANBLGo2AhwgASACIANBFGoQFyADKAI0IgEEQCADKAI4QQEgARA4CyADQUBrJAALpAEBAX8jAEEQayIDJAACQCAARQ0AIAJFDQACQCABQQRNBEAgAkEDakECdkEBayIBQYACSQ0BCyADQayywQAoAgA2AgggACADQQhqQaiqwQBBAhAxQayywQAgAygC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BDYCBCAAIAE2AgALOAACQCABaUEBRw0AQYCAgIB4IAFrIABJDQAgAARAQeyywQAtAAAaIAEgABA1IgFFDQELIAEPCwALOAACQCACQYCAxABGDQAgACACIAEoAhARAgBFDQBBAQ8LIANFBEBBAA8LIAAgA0EAIAEoAgwRAwALLQEBfyABIAAoAgBPBH8gACgCBCECIAAtAAhFBEAgASACTQ8LIAEgAkkFQQALC3ABA38gACgCACIEIAAoAggiBUYEQCMAQRBrIgMkACADQQhqIAAgBEEBQQJBCBAmIAMoAggiBEGBgICAeEcEQCADKAIMGiAEIAIQrgEACyADQRBqJAALIAAgBUEBajYCCCAAKAIEIAVBA3RqIAE3AQALNAEBfyAAKAIIIgMgACgCAEYEQCAAIAIQawsgACADQQFqNgIIIAAoAgQgA0ECdGogATYCAAsuAQF/IwBBEGsiAiQAIAJBCGogASAAEIwBIAIoAggiAARAIAJBEGokACAADwsACzcBAX8jAEEgayIBJAAgAUEANgIYIAFBATYCDCABQYzpwAA2AgggAUIENwIQIAFBCGogABCKAQALKgEBfyACIAMQNSIEBEAgBCAAIAEgAyABIANJGxAWGiAAIAIgARA4CyAECysAIAIgA0kEQCADIAIgBBC0AQALIAAgAiADazYCBCAAIAEgA0EUbGo2AgALLwEBfyAAIAIQjgEgACgCBCAAKAIIIgNBFGxqIAEgAkEUbBAWGiAAIAIgA2o2AggLKwAgASADSwRAIAEgAyAEELQBAAsgACADIAFrNgIEIAAgAiABQQR0ajYCAAsvAAJAAkAgA2lBAUcNAEGAgICAeCADayABSQ0AIAAgASADIAIQfiIADQELAAsgAAsuAANAIAEEQCAAKAIAIABBBGooAgBBBEEUEJ8BIAFBAWshASAAQRBqIQAMAQsLCzIBAX8gACgCCCECIAEgACgCAEECai0AABCbASEBIAAoAgQgAiABEAEgACACQQFqNgIICyoAIAAgACgCaCABaiIBIAAoApwBIgBBAWsgACABSxtBACABQQBOGzYCaAszAQJ/IAAgACgCqAEiAiAAKAKsAUEBaiIDIAEgAEGyAWoQNiAAKAJgIAAoAmQgAiADEFMLMwECfyAAIAAoAqgBIgIgACgCrAFBAWoiAyABIABBsgFqEB0gACgCYCAAKAJkIAIgAxBTCyoAIAEgAkkEQEGkyMAAQSNBvMnAABBxAAsgAiAAIAJBFGxqIAEgAmsQGQs1ACAAIAApAnQ3AmggACAAKQF8NwGyASAAIAAvAYYBOwG+ASAAQboBaiAAQYQBai8BADsBAAvsAQICfwF+IwBBEGsiAiQAIAJBATsBDCACIAE2AgggAiAANgIEIwBBEGsiASQAIAJBBGoiACkCACEEIAEgADYCDCABIAQ3AgQjAEEQayIAJAAgAUEEaiIBKAIAIgIoAgwhAwJAAkACQAJAIAIoAgQOAgABAgsgAw0BQQEhAkEAIQMMAgsgAw0AIAIoAgAiAigCBCEDIAIoAgAhAgwBCyAAQYCAgIB4NgIAIAAgATYCDCABKAIIIgEtAAkaIABBGyABLQAIEEoACyAAIAM2AgQgACACNgIAIAEoAggiAS0ACRogAEEcIAEtAAgQSgALKwECfwJAIAAoAgQgACgCCCIBEDQiAkUNACABIAJJDQAgACABIAJrNgIICwsmACACBEBB7LLBAC0AABogASACEDUhAQsgACACNgIEIAAgATYCAAsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBEBBtCwsjAQF/IAEgACgCACAAKAIIIgJrSwRAIAAgAiABQQRBFBBtCwslACAAQQE2AgQgACABKAIEIAEoAgBrQQR2IgE2AgggACABNgIACxsAIAEgAk0EQCACIAEgAxBLAAsgACACQRRsagsgACABIAJNBEAgAiABQeTjwAAQSwALIAAgAmpBAToAAAsbACABIAJNBEAgAiABIAMQSwALIAAgAkEEdGoLAwAACwMAAAsDAAALAwAACwMAAAsDAAALGgBB7LLBAC0AABpBBCAAEDUiAARAIAAPCwALIQAgAEUEQEGc68AAQTIQuQEACyAAIAIgAyABKAIQEQEACxYAIAFBAXFFBEAgALgQCQ8LIACtEAoLRgEBfyAAIAAoAgBBAWsiATYCACABRQRAIABBDGoQRwJAIABBf0YNACAAIAAoAgRBAWsiATYCBCABDQAgAEEEQZwGEDgLCwsfACAARQRAQZzrwABBMhC5AQALIAAgAiABKAIQEQIACyEBAX8gACgCECIBIAAoAhQQgwEgACgCDCABQQRBEBCfAQsSACAABEAgASACIAAgA2wQOAsLIQEBfyAAKAIEIgEgACgCCBCDASAAKAIAIAFBBEEQEJ8BCxYAIABBEGoQWCAAKAIAIAAoAgQQowELFAAgACAAKAIAQQFrNgIAIAEQnAELGQAgAEGAgICAeEcEQCAAIAFBBEEUEJ8BCwsUACABBEBBgICAgHggARCjAQsgAQsZACABKAIcQcjlwABBDiABKAIgKAIMEQMACw8AIAIEQCAAIAEgAhA4CwsPACABBEAgACACIAEQOAsLEwAgAARADwtBpKnBAEEbELkBAAsPACAAQYQBTwRAIAAQAwsLEwAgACgCCCAAKAIAQQJBAhCfAQsVACACIAIQpAEaIABBgICAgHg2AgALFAAgACgCACABIAAoAgQoAgwRAgALEAAgASAAKAIEIAAoAggQDws8ACAARQRAIwBBIGsiACQAIABBADYCGCAAQQE2AgwgAEHQxMAANgIIIABCBDcCECAAQQhqIAEQigEACwALFAAgAEEANgIIIABCgICAgBA3AgALEgAgACABQZDNwAAQYkEBOgAMCxAAIAEgACgCACAAKAIEEA8LDgAgAEEANgIAIAEQnAELawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQejpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgOABhDcDKCADIAOtQoCAgIDgAYQ3AyAgAyADQSBqNgIQIANBCGogAhCKAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQcjpwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgOABhDcDKCADIAOtQoCAgIDgAYQ3AyAgAyADQSBqNgIQIANBCGogAhCKAQALawEBfyMAQTBrIgMkACADIAE2AgQgAyAANgIAIANBAjYCDCADQZzqwAA2AgggA0ICNwIUIAMgA0EEaq1CgICAgOABhDcDKCADIAOtQoCAgIDgAYQ3AyAgAyADQSBqNgIQIANBCGogAhCKAQALDgBB8OXAAEErIAAQcQALCwAgACMAaiQAIwALDgBBv6nBAEHPABC5AQALCQAgACABEAcACw0AIABB9ObAACABEBcLDAAgACABKQIANwMACwoAIAAoAgAQqQELDQAgAEGAgICAeDYCAAsJACAAQQA2AgALBgAgABBYCwUAQYAECwQAQQELBAAgAQsEAEEACwvSbSAAQYCAwAALQB0AAAAEAAAABAAAAB4AAABjYWxsZWQgYFJlc3VsdDo6dW53cmFwKClgIG9uIGFuIGBFcnJgIHZhbHVlRXJyb3IAQb+JwAALAXgAQeCJwAALEP////////////////////8AQYaKwAALDwEAAAAAACAAAAAAAAAAAgBBwIrAAAsg//////////////////////////////////////////8AQaSLwAALCBAAAAAAAAABAEHAuMAACwL/BwBB1LjAAAsHDwD////1/wBBgLnAAAsW////////////////////////////AwBBoLnAAAsd/////////////////////////////////////w8AQf+5wAALGPz//////////////////////////////wBBoLrAAAs+//////////////////////////////////////////////////////////////////////////////////8AQYy7wAALOP////////////////////////////////////////////////////////////////////////9/AEHgu8AAC9EB/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wMAQcC9wAALJ///////////////////////////////////////////////////DwBBwMDAAAvBI3NyYy9saWIucnMAAAEADwDwGg8AAAAAAOIlAADlJQAAAAAAALDgAACz4AAAAAAAADz7AQBp+wEAAAAAAGr7AQBs+wEAAAAAAIAlAACfJQAAAAAAAAD7AQA7+wEAAAAAAGF0dGVtcHRlZCB0byB0YWtlIG93bmVyc2hpcCBvZiBSdXN0IHZhbHVlIHdoaWxlIGl0IHdhcyBib3Jyb3dlZGJndGV4dGNvZGVwb2ludHNyYXN0ZXJfc3ltYm9s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FVFVVVVVVVVVAAAAAAAAQFVVVVVVVVVVVdVXVVVVVVVVVVVVVVUFAABUVVVVVVVVVVVVVVVVVRUAAFVVUVVVVVVVBRAAAAEBUFVVVVVVVVVVVVUBVVVVVVX/////f1VVVVBVAABVVVVVVVVVVVVVBQBBwPzAAAuYBEBVVVVVVVVVVVVVVVVVRVQBAFRRAQBVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVRAFUVVFVFVVVBVVVVVVVVUVBVVVVVVVVVVVVVVVVVVVUQRUUUFFVVVVVVVVVUFFVVUFVVVVVVVVVVVVVVVVVVVQBEFRRVVVVVQVVVVVVVQUAUVVVVVVVVVVVVVVVVVVVBAFUVVFVAVVVBVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVFVFVVUVUVVVVVVVVVVVVVVVRUVVVVVVVVVVVVVVVVVQRUBQRQVUFVVQVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVFEQFBFBVQVVVBVVVVVVVVVVQVVVVVVVVVVVVVVVVVRVEAVRVQVUVVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVUUVBURVFVVVVVVVVVVVVVVVVVVVVVVVVVVVUQBAVVUVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRAABUVVUAQFVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVURUVVVVVVVVVVVVVVVVVUBAABAAARVAQAAAQAAAAAAAAAAVFVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQEEAEFBVVVVVVVVUAVUVVVVAVRVVUVBVVFVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAEGAgcEAC5ADVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBVVVVVVVVVVVVVVVVBVRVVVVVVVUFVVVVVVVVVQVVVVVVVVVVBVVVVX///ff//ddfd9bV11UQAFBVRQEAAFVXUVVVVVVVVVVVVVUVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBVUVUVVAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVcVFFVVVVVVVVVVVVVVVVVVRQBARAEAVBUAABRVVVVVVVVVVVVVVVUAAAAAAAAAQFVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVUAAFAFVVVVVVVVVVVVFQAAVVVVUFVVVVVVVVUFUBBQVVVVVVVVVVVVVVVVVUVQEVBVVVVVVVVVVVVVVVVVVQAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAAAQAVFFVVFBVVVVVVVVVVVVVVVVVVVVVVQBBoITBAAuTCFVVFQBVVVVVVVUFQFVVVVVVVVVVVVVVVQAAAABVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAFRVVVVVVVVVVVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV/VfXVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX1VVVVVVV9VVVVVVVVVVVVVVVX///9VVVVVVVVVVVVV1VVVVVXVVVVVXVX1VVVVVX1VX1V1VVdVVVVVdVX1XXVdVV31VVVVVVVVVVdVVVVVVVVVVXfV31VVVVVVVVVVVVVVVVVVVf1VVVVVVVVXVVXVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVdVXVVVVVVVVVVVVVVVVV11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVBVVVVVVVVVVVVVVVVVVVX9////////////////X1XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAAAAAAAAqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlpVVVVVVVWqqqqqqqqqqqqqqqqqqgoAqqqqaqmqqqqqqqqqqqqqqqqqqqqqqqqqqmqBqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlWpqqqqqqqqqqqqqqmqqqqqqqqqqqqqqqqoqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqlVVlaqqqqqqqqqqqqqqaqqqqqqqqqqqqqpVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVVVVVVVVVVVVqqqqVqqqqqqqqqqqqqqqqqpqVVVVVVVVVVVVVVVVVV9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVQAAAUFVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVRUUVVVVVVVVVQVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVUAAAAAUFVFFVVVVVVVVVVVVQUAUFVVVVVVFQAAUFVVVaqqqqqqqqpWQFVVVVVVVVVVVVVVFQVQUFVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVAUBBQVVVFVVVVFVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVQQUVAVRVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUUVVVVVWqqqqqqqqqqqpVVVUAAAAAAEAVAEG/jMEAC+EMVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAA8KqqWlUAAAAAqqqqqqqqqqpqqqqqqmqqVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFamqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlZVVVVVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVqmpVVQAAVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFQFUBQVUAVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVVVVVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVVVVVVVVVVVVVVVVVVVVVVVUBVVVVVVVVVVVVVVVVVVVVVVUFAABUVVVVVVVVVVVVVVUFUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVAAAAQFVVVVVVVVVVVVUUVFUVUFVVVVVVVVVVVVVVFUBBVUVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVUVAAEAVFVVVVVVVVVVVVVVVVVVFVVVVVBVVVVVVVVVVVVVVVUFAEAFVQEUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVUARVRVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUVAEBVVVVVVVBVVVVVVVVVVVVVVVVVFURUVVVVVRVVVVUFAFQAVFVVVVVVVVVVVVVVVVVVVVUAAAVEVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVUUAEQRBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQVQVRBUVVVVVVVVUFVVVVVVVVVVVVVVVVVVVVVVVVVVFQBAEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVEAEFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBRAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVAABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVRUEEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAFVVRVVVVVVVVVAQBAVVVVVVVVVVVVFQAEQFUVVVUBQAFVVVVVVVVVVVVVAAAAAEBQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAABBVVVVVVVVVVVVVVVVVVVVVVVVVVQUAAAAAAAUABEFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBQEUQAABVVVVVVVVVVVVVVVVVVVVVVVVQEVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVUVVVAVVVVVVVVVVVVVVVVBUBVRFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFQAAAFBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBUVVVVVVVVVVVVVVVVVVUAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVFUBVVVVVVVVVVVVVVVVVVVVVVVVVqlRVVVpVVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqlpVVVVVVVVVVVVVqqpWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqmqaaqqqqqqqqqqalVVVWVVVVVVVVVVallVVVWqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlVVVVVVVVVVQQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBBq5nBAAt1UAAAAAAAQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRFQBQAAAABAAQBVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVAEGtmsEACwJAFQBBu5rBAAvFBlRVUVVVVVRVVVVVFQABAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAAAAAUABAEQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQFVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVVVVVVVVVVVVVVVVVVVVVdf3/f1VVVVVVVVVVVVVVVVVVVVVVVfX///////9uVVVVqqq6qqqqqur6v79VqqpWVV9VVVWqWlVVVVVVVf//////////V1VV/f/f///////////////////////3//////9VVVX/////////////f9X/VVVV/////1dX//////////////////////9/9//////////////////////////////////////////////////////////////X////////////////////X1VV1X////////9VVVVVdVVVVVVVVX1VVVVXVVVVVVVVVVVVVVVVVVVVVVVVVVXV////////////////////////////VVVVVVVVVVVVVVVV//////////////////////9fVVd//VX/VVXVV1X//1dVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX///9VV1VVVVVVVf//////////////f///3/////////////////////////////////////////////////////////////9VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////V///V1X//////////////9//X1X1////Vf//V1X//1dVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqlpVVVVVVVVVVVmWVWGqpVmqVVVVVVWVVVVVVVVVVZVVVQBBjqHBAAsBAwBBnKHBAAuJCVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQCWalpaaqoFQKZZlWVVVVVVVVVVVQAAAABVVlVVqVZVVVVVVVVVVVVWVVVVVVVVVVUAAAAAAAAAAFRVVVWVWVlVVWVVVWlVVVVVVVVVVVVVVZVWlWqqqqpVqqpaVVVVWVWqqqpVVVVVZVVVWlVVVVWlZVZVVVWVVVVVVVVVppaalllZZamWqqpmVapVWllVWlZlVVVVaqqlpVpVVVWlqlpVVVlZVVVZVVVVVVWVVVVVVVVVVVVVVVVVVVVVVVVVVVVlVfVVVVVpVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqqqqqqqqqqqqVVVVqqqqqqVaVVWaqlpVpaVVWlqllqVaVVVVpVpVlVVVVX1VaVmlVV9VZlVVVVVVVVVVZlX///9VVVWammqaVVVV1VVVVVXVVVWlXVX1VVVVVb1Vr6q6qquqqppVuqr6rrquVV31VVVVVVVVVVdVVVVVWVVVVXfV31VVVVVVVVWlqqpVVVVVVVXVV1VVVVVVVVVVVVVVVVetWlVVVVVVVVVVVaqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqAAAAwKqqWlUAAAAAqqqqqqqqqqpqqqqqqmqqVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVVWqalVVAABUWaqqalWqqqqqqqqqWqqqqqqqqqqqqqqqqqqqWlWqqqqqqqqquv7/v6qqqqpWVVVVVVVVVVVVVVVVVfX///////8vbml4L3N0b3JlLzI4aHl6ZmwzMzhrczRhbWhhN3ZwcG5sYnExczFucWF2LXJ1c3QtZGVmYXVsdC0xLjg1LjAvbGliL3J1c3RsaWIvc3JjL3J1c3QvbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy5ycy9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTA2L3NyYy9jb252ZXJ0L3NsaWNlcy5ycy9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dhc20tYmluZGdlbi0wLjIuMTA2L3NyYy9leHRlcm5yZWYucnMdVBAAZwAAAH8AAAARAAAAHVQQAGcAAACMAAAAEQAAAG51bGwgcG9pbnRlciBwYXNzZWQgdG8gcnVzdHJlY3Vyc2l2ZSB1c2Ugb2YgYW4gb2JqZWN0IGRldGVjdGVkIHdoaWNoIHdvdWxkIGxlYWQgdG8gdW5zYWZlIGFsaWFzaW5nIGluIHJ1c3RKc1ZhbHVlKCkADlUQAAgAAAAWVRAAAQBBqKrBAAsBBABICXByb2R1Y2VycwEMcHJvY2Vzc2VkLWJ5AgZ3YWxydXMGMC4yNC40DHdhc20tYmluZGdlbhMwLjIuMTA2ICgxMTgzMWZiODkp");class W{constructor(){let A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;this.speed=A,this.startTime=performance.now()}getTime(){return this.speed*(performance.now()-this.startTime)/1e3}setTime(A){this.startTime=performance.now()-A/this.speed*1e3}}class z{constructor(){}getTime(A){}setTime(A){}}class X{constructor(A,e){this.input="function"==typeof A.next?A:A[Symbol.iterator](),this.xfs=e??[]}map(A){return this.transform(function(A){return e=>g=>{e(A(g))}}(A))}flatMap(A){return this.transform(function(A){return e=>g=>{A(g).forEach(e)}}(A))}filter(A){return this.transform(function(A){return e=>g=>{A(g)&&e(g)}}(A))}take(A){return this.transform(function(A){let e=0;return g=>V=>{eV=>{e+=1,e>A&&g(V)}}(A))}transform(A){return new X(this.input,this.xfs.concat([A]))}multiplex(A,e){return new X(new $(this[Symbol.iterator](),A[Symbol.iterator](),e))}toArray(){return Array.from(this)}[Symbol.iterator](){let A=0,e=[],g=!1;const V=(t=this.xfs,I=A=>e.push(A),t.reverse().reduce(((A,e)=>{const g=j(e(A.step));return{step:g.step,flush:()=>{g.flush(),A.flush()}}}),j(I)));var t,I;return{next:()=>{for(A===e.length&&(e=[],A=0);0===e.length;){const A=this.input.next();if(A.done)break;V.step(A.value)}return 0!==e.length||g||(V.flush(),g=!0),e.length>0?{done:!1,value:e[A++]}:{done:!0}}}}}function j(A){return"function"==typeof A?{step:A,flush:()=>{}}:A}class ${constructor(A,e,g){this.left=A,this.right=e,this.comparator=g}[Symbol.iterator](){let A,e;return{next:()=>{if(void 0===A&&void 0!==this.left){const e=this.left.next();e.done?this.left=void 0:A=e.value}if(void 0===e&&void 0!==this.right){const A=this.right.next();A.done?this.right=void 0:e=A.value}if(void 0===A&&void 0===e)return{done:!0};if(void 0===A){const A=e;return e=void 0,{done:!1,value:A}}if(void 0===e){const e=A;return A=void 0,{done:!1,value:e}}if(this.comparator(A,e)){const e=A;return A=void 0,{done:!1,value:e}}{const A=e;return e=void 0,{done:!1,value:A}}}}}}function _(A){const e=t(A.foreground),g=t(A.background),V=A.palette;if(void 0===V)return;if(!e||!g||V.length<8)return;const I=[],B=Math.min(V.length,16);for(let A=0;A"["===A[0])).map(JSON.parse);return{header:g,events:V}}(e);if(void 0!==g){const{header:A,events:e}=g;if(2===A.version)return eA(A,e);if(3===A.version)return gA(A,e);throw new Error(`asciicast v${A.version} format not supported`)}{const A=JSON.parse(e);if(1===A.version)return AA(A)}}else{if("object"==typeof A&&1===A.version)return AA(A);if(Array.isArray(A)){const e=A[0];if(2===e.version){return eA(e,A.slice(1,A.length))}if(3===e.version){return gA(e,A.slice(1,A.length))}throw new Error(`asciicast v${e.version} format not supported`)}}throw new Error("invalid data")}function AA(A){let e=0;const g=new X(A.stdout).map((A=>(e+=A[0],[e,"o",A[1]])));return{cols:A.width,rows:A.height,events:g}}function eA(A,e){return{cols:A.width,rows:A.height,theme:VA(A.theme),events:e,idleTimeLimit:A.idle_time_limit}}function gA(A,e){e instanceof X||(e=new X(e));let g=0;return e=e.map((A=>(g+=A[0],[g,A[1],A[2]]))),{cols:A.term.cols,rows:A.term.rows,theme:VA(A.term?.theme),events:e,idleTimeLimit:A.idle_time_limit}}function VA(A){const e="string"==typeof A?.palette?A.palette.split(":"):void 0;return _({foreground:A?.fg,background:A?.bg,palette:e})}function tA(A){return"number"==typeof A?[A,"m",""]:[A[0],"m",A[1]]}function IA(){let A=0;return function(e){return"m"===e[1]?[e[0],e[1],{index:A++,time:e[0],label:e[2]}]:e}}class BA{constructor(){this.items=[],this.onPush=void 0}push(A){this.items.push(A),void 0!==this.onPush&&(this.onPush(this.popAll()),this.onPush=void 0)}popAll(){if(this.items.length>0){const A=this.items;return this.items=[],A}{const A=this;return new Promise((e=>{A.onPush=e}))}}}function QA(A,e,g,V,t,I,B,Q,C){const i=function(A,e,g,V){return function(t,I){"o"===t?A(I):"i"===t?g(I):"r"===t?e(I.cols,I.rows):"m"===t&&V(I)}}(e,g,V,t);if(0===A)return C.debug("using no buffer"),function(A){return{pushEvent(e){A(e[1],e[2])},pushText(e){A("o",e)},stop(){}}}(i);{let e;return"number"==typeof(A=A??{})?(C.debug(`using fixed time buffer (${A} ms)`),e=e=>A):"function"==typeof A?(C.debug("using custom dynamic buffer"),e=A({logger:C})):(C.debug("using adaptive buffer",A),e=function(){let{logger:A}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{minBufferTime:e=50,bufferLevelStep:g=100,maxBufferLevel:V=50,transitionDuration:t=500,peakHalfLifeUp:I=100,peakHalfLifeDown:B=1e4,floorHalfLifeUp:Q=5e3,floorHalfLifeDown:C=100,idealHalfLifeUp:i=1e3,idealHalfLifeDown:o=5e3,safetyMultiplier:r=1.2,minImprovementDuration:n=3e3}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};function E(A){return 0===A?e:g*A}let s=1,a=E(s),c=performance.now(),l=null,u=null,w=null,h=null,d=null,f=null;return function(D){const y=performance.now(),q=Math.max(0,y-c);if(c=y,null===l)l=D;else if(D>l){const A=1-Math.pow(2,-q/I);l+=A*(D-l)}else{const A=1-Math.pow(2,-q/B);l+=A*(D-l)}if(l=Math.max(l,0),null===u)u=D;else if(D>u){const A=1-Math.pow(2,-q/Q);u+=A*(D-u)}else{const A=1-Math.pow(2,-q/C);u+=A*(D-u)}u=Math.max(u,0);const k=r*(l+(l-u));if(null===w)w=k;else if(k>w){const A=1-Math.pow(2,-q/i);w+=+A*(k-w)}else{const A=1-Math.pow(2,-q/o);w+=+A*(k-w)}let p;var L,F,M;return w<=e?p=0:(L=Math.ceil(w/g),F=1,M=V,p=Math.min(M,Math.max(F,L))),D>a&&A.debug("buffer underrun",{latency:D,bufferTime:a}),p>s?(D>a?s=Math.min(p,s+3):s+=1,d=E(s),f=(d-a)/t,h=null,A.debug("raising buffer",{latency:D,bufferTime:a,targetBufferTime:d})):p=n&&(s-=1,d=E(s),f=(d-a)/t,h=y,A.debug("lowering buffer",{latency:D,bufferTime:a,targetBufferTime:d}))):h=null,null!==d&&(a+=f*q,(f>=0&&a>d||f<0&&a5&&void 0!==arguments[5]?arguments[5]:1/60,B=performance.now()-1e3*t,Q=A(0);const C=new BA;I*=1e3;let i=-I,o=!1;function r(){return performance.now()-B}return setTimeout((async()=>{for(;!o;){const A=await C.popAll();if(o)return;for(const V of A){const A=1e3*V[0]+Q;if(A-i0&&(await CA(t),o))return;g(V[0]),e(V[1],V[2]),i=A}}}),0),{pushEvent(e){let g=r()-1e3*e[0];g<0&&(V.debug(`correcting epoch by ${g} ms`),B+=g,g=0),Q=A(g),C.push(e)},pushText(A){C.push([r()/1e3,"o",A])},stop(){o=!0,C.push(void 0)}}}(e,i,I,C,B??0,Q)}}function CA(A){return new Promise((e=>{setTimeout(e,A)}))}const iA=1e6;function oA(A){const e=new TextDecoder,g=new TextDecoder;let V,t=function(A){const e=(new TextDecoder).decode(A);if("ALiS"!==e)throw new Error("not an ALiS v1 live stream");t=B},I=0;function B(A){const e=new sA(new DataView(A)),g=e.getUint8();if(1!==g)throw new Error(`expected reset (0x01) frame, got ${g}`);return Q(e,A)}function Q(A,g){A.decodeVarUint();let B=A.decodeVarUint();V=B,B/=iA,I=0;const Q=A.decodeVarUint(),i=A.decodeVarUint(),o=A.getUint8();let r;if(8===o){const e=30;r=rA(new Uint8Array(g,A.offset,e)),A.forward(e)}else if(16===o){const e=54;r=rA(new Uint8Array(g,A.offset,e)),A.forward(e)}else if(0!==o)throw new Error(`alis: invalid theme format (${o})`);const n=A.decodeVarUint();let E;return n>0&&(E=e.decode(new Uint8Array(g,A.offset,n))),t=C,{time:B,term:{size:{cols:Q,rows:i},theme:r,init:E}}}function C(C){const i=new sA(new DataView(C)),o=i.getUint8();return 1===o?Q(i,C):111===o?function(A,g){A.decodeVarUint();const t=A.decodeVarUint();V+=t;const I=A.decodeVarUint(),B=e.decode(new Uint8Array(g,A.offset,I));return[V/iA,"o",B]}(i,C):105===o?function(A,e){A.decodeVarUint();const t=A.decodeVarUint();V+=t;const I=A.decodeVarUint(),B=g.decode(new Uint8Array(e,A.offset,I));return[V/iA,"i",B]}(i,C):114===o?function(A){A.decodeVarUint();const e=A.decodeVarUint();V+=e;const g=A.decodeVarUint(),t=A.decodeVarUint();return[V/iA,"r",{cols:g,rows:t}]}(i):109===o?function(A,e){A.decodeVarUint();const g=A.decodeVarUint();V+=g;const t=A.decodeVarUint(),B=new TextDecoder,Q=I++,C=V/iA,i=B.decode(new Uint8Array(e,A.offset,t));return[C,"m",{index:Q,time:C,label:i}]}(i,C):120===o?function(A){A.decodeVarUint();const e=A.decodeVarUint();V+=e;const g=A.decodeVarUint();return[V/iA,"x",{status:g}]}(i):4===o?(t=B,!1):void A.debug(`alis: unknown frame type: ${o}`)}return function(A){return t(A)}}function rA(A){const e=A.length/3,g=nA(A[0],A[1],A[2]),V=nA(A[3],A[4],A[5]),t=[];for(let g=2;g1&&void 0!==arguments[1]?arguments[1]:0;this.inner=A,this.offset=e}forward(A){this.offset+=A}getUint8(){const A=this.inner.getUint8(this.offset);return this.offset+=1,A}decodeVarUint(){let A=BigInt(0),e=BigInt(0),g=this.getUint8();for(;g>127;)g&=127,A+=BigInt(g)<e(A,g,V)}throw new Error(`unsupported driver: ${JSON.stringify(A)}`)}(A),this.changedLines=new Set,this.duration=void 0,this.cols=g.cols,this.rows=g.rows,this.speed=g.speed,this.loop=g.loop,this.autoPlay=g.autoPlay,this.idleTimeLimit=g.idleTimeLimit,this.preload=g.preload,this.startAt=e(g.startAt),this.poster=this._parsePoster(g.poster),this.markers=this._normalizeMarkers(g.markers),this.pauseOnMarkers=g.pauseOnMarkers,this.audioUrl=g.audioUrl,this.boldIsBright=g.boldIsBright??!1,this.commandQueue=Promise.resolve(),this.needsClear=!1,this.eventHandlers=new Map([["ended",[]],["errored",[]],["idle",[]],["input",[]],["loading",[]],["marker",[]],["metadata",[]],["muted",[]],["offline",[]],["pause",[]],["play",[]],["playing",[]],["ready",[]],["seeked",[]],["vtUpdate",[]]])}async init(){this.wasm=await wA;const{memory:A}=await this.wasm.default();this.memory=A,this._initializeVt(this.cols??80,this.rows??24);const e=this._feed.bind(this),g=this._resetVt.bind(this),V=this._resizeVt.bind(this),t=this._setState.bind(this),I="npt"!==this.poster.type||this.autoPlay?void 0:this.poster.value;this.driver=this.driver({feed:e,onInput:A=>{this._dispatchEvent("input",{data:A})},onMarker:A=>{let{index:e,time:g,label:V}=A;this._dispatchEvent("marker",{index:e,time:g,label:V})},reset:g,resize:V,setState:t,logger:this.logger},{cols:this.cols,rows:this.rows,speed:this.speed,idleTimeLimit:this.idleTimeLimit,startAt:this.startAt,loop:this.loop,posterTime:I,markers:this.markers,pauseOnMarkers:this.pauseOnMarkers,audioUrl:this.audioUrl}),"function"==typeof this.driver&&(this.driver={play:this.driver}),(this.preload||void 0!==I)&&this._withState((A=>A.init()));const B={isPausable:!!this.driver.pause,isSeekable:!!this.driver.seek};if(void 0===this.driver.init&&(this.driver.init=()=>({})),void 0===this.driver.pause&&(this.driver.pause=()=>{}),void 0===this.driver.seek&&(this.driver.seek=A=>!1),void 0===this.driver.step&&(this.driver.step=A=>{}),void 0===this.driver.stop&&(this.driver.stop=()=>{}),void 0===this.driver.restart&&(this.driver.restart=()=>{}),void 0===this.driver.mute&&(this.driver.mute=()=>{}),void 0===this.driver.unmute&&(this.driver.unmute=()=>{}),void 0===this.driver.getCurrentTime){const A=this.driver.play;let e=new z;this.driver.play=()=>(e=new W(this.speed),A()),this.driver.getCurrentTime=()=>e.getTime()}this._dispatchEvent("ready",B),this.autoPlay?this.play():"text"===this.poster.type&&(this._feed(this.poster.value),this.needsClear=!0)}play(){return this._clearIfNeeded(),this._withState((A=>A.play()))}pause(){return this._withState((A=>A.pause()))}togglePlay(){return this._clearIfNeeded(),this._withState((A=>A.togglePlay()))}seek(A){return this._clearIfNeeded(),this._withState((async e=>{await e.seek(A)&&this._dispatchEvent("seeked")}))}step(A){return this._clearIfNeeded(),this._withState((e=>e.step(A)))}stop(){return this._withState((A=>A.stop()))}mute(){return this._withState((A=>A.mute()))}unmute(){return this._withState((A=>A.unmute()))}getLine(A,e){return this.vt.getLine(A,e)}getDataView(A,e){let[g,V]=A;return new DataView(this.memory.buffer,g,V*e)}getUint32Array(A){let[e,g]=A;return new Uint32Array(this.memory.buffer,e,g)}getCursor(){const A=this.vt.getCursor();return A?{col:A[0],row:A[1],visible:!0}:{col:0,row:0,visible:!1}}getCurrentTime(){return this.driver.getCurrentTime()}getRemainingTime(){if("number"==typeof this.duration)return this.duration-Math.min(this.getCurrentTime(),this.duration)}getProgress(){if("number"==typeof this.duration)return Math.min(this.getCurrentTime(),this.duration)/this.duration}getDuration(){return this.duration}addEventListener(A,e){this.eventHandlers.get(A).push(e)}removeEventListener(A,e){const g=this.eventHandlers.get(A);if(!g)return;const V=g.indexOf(e);-1!==V&&g.splice(V,1)}_dispatchEvent(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(const g of this.eventHandlers.get(A))g(e)}_withState(A){return this._enqueueCommand((()=>A(this.state)))}_enqueueCommand(A){return this.commandQueue=this.commandQueue.then(A),this.commandQueue}_setState(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(this.stateName===A)return this.state;if(this.stateName=A,"playing"===A)this.state=new DA(this);else if("idle"===A)this.state=new fA(this);else if("loading"===A)this.state=new yA(this);else if("ended"===A)this.state=new kA(this);else if("offline"===A)this.state=new qA(this);else{if("errored"!==A)throw new Error(`invalid state: ${A}`);this.state=new pA(this)}return this.state.onEnter(e),this.state}_feed(A){const e=this.vt.feed(A);this._dispatchEvent("vtUpdate",{changedRows:e})}async _initializeDriver(){const A=await this.driver.init();this.cols=this.cols??A.cols??80,this.rows=this.rows??A.rows??24,this.duration=this.duration??A.duration,this.markers=this._normalizeMarkers(A.markers)??this.markers??[],0===this.cols&&(this.cols=80),0===this.rows&&(this.rows=24),this._initializeVt(this.cols,this.rows),void 0!==A.poster?(A.poster.forEach((A=>this.vt.feed(A))),this.needsClear=!0):"text"===this.poster.type&&(this.vt.feed(this.poster.value),this.needsClear=!0),this._dispatchEvent("metadata",{size:{cols:this.cols,rows:this.rows},theme:A.theme??null,duration:this.duration,markers:this.markers,hasAudio:A.hasAudio}),this._dispatchEvent("vtUpdate",{size:{cols:this.cols,rows:this.rows},theme:A.theme??null,changedRows:Array.from({length:this.rows},((A,e)=>e))})}_clearIfNeeded(){this.needsClear&&(this._feed("c"),this.needsClear=!1)}_resetVt(A,e){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,V=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;this.logger.debug(`core: vt reset (${A}x${e})`),this.cols=A,this.rows=e,this._initializeVt(A,e),void 0!==g&&""!==g&&this.vt.feed(g),this._dispatchEvent("metadata",{size:{cols:A,rows:e},theme:V??null}),this._dispatchEvent("vtUpdate",{size:{cols:A,rows:e},theme:V??null,changedRows:Array.from({length:e},((A,e)=>e))})}_resizeVt(A,e){if(A===this.vt.cols&&e===this.vt.rows)return;const g=this.vt.resize(A,e);this.vt.cols=A,this.vt.rows=e,this.logger.debug(`core: vt resize (${A}x${e})`),this._dispatchEvent("metadata",{size:{cols:A,rows:e}}),this._dispatchEvent("vtUpdate",{size:{cols:A,rows:e},changedRows:g})}_initializeVt(A,e){this.logger.debug("vt init",{cols:A,rows:e}),this.vt=this.wasm.create(A,e,100,this.boldIsBright),this.vt.cols=A,this.vt.rows=e}_parsePoster(A){return"string"!=typeof A?{}:"data:text/plain,"==A.substring(0,16)?{type:"text",value:A.substring(16)}:"npt:"==A.substring(0,4)?{type:"npt",value:e(A.substring(4))}:{}}_normalizeMarkers(A){if(Array.isArray(A))return A.map((A=>"number"==typeof A?[A,""]:A))}}const FA=new Map([["benchmark",function(A,e){let g,{url:V,iterations:t=10}=A,{feed:I,setState:B}=e,Q=0;return{async init(){const A=await P(await fetch(V)),{cols:e,rows:t,events:I}=A;g=Array.from(I).filter((A=>{let[e,g,V]=A;return"o"===g})).map((A=>{let[e,g,V]=A;return[e,V]}));const B=g[g.length-1][0];for(const[A,e]of g)Q+=new Blob([e]).size;return{cols:e,rows:t,duration:B}},play(){const A=performance.now();for(let A=0;A{B("stopped",{reason:"ended"})}),0),!0}}}],["clock",function(A,e,g){let{hourColor:V=3,minuteColor:t=4,separatorColor:I=9}=A,{feed:B}=e,{cols:Q=5,rows:C=1}=g;const i=Math.floor(C/2),o=Math.floor(Q/2)-2,r=`[?25l[${i}B`;let n;const E=()=>{const A=new Date,e=A.getHours(),g=A.getMinutes(),B=[];B.push("\r");for(let A=0;A{E().forEach(B)};return{init:()=>{const A=[r].concat(E());return{cols:Q,rows:C,duration:1440,poster:A}},play:()=>(B(r),s(),n=setInterval(s,1e3),!0),stop:()=>{clearInterval(n)},getCurrentTime:()=>{const A=new Date;return 60*A.getHours()+A.getMinutes()}}}],["eventsource",function(A,e){let g,V,{url:t,bufferTime:I,minFrameTime:B}=A,{feed:Q,reset:C,resize:i,onInput:o,onMarker:r,setState:n,logger:E}=e;E=new c(E,"eventsource: ");let s=new z;function a(A){void 0!==V&&V.stop(),V=QA(I,Q,i,o,r,(A=>s.setTime(A)),A,B,E)}return{play:()=>{g=new EventSource(t),g.addEventListener("open",(()=>{E.info("opened"),a()})),g.addEventListener("error",(A=>{E.info("errored"),E.debug({e:A}),n("loading")})),g.addEventListener("message",(A=>{const e=JSON.parse(A.data);if(Array.isArray(e))V.pushEvent(e);else if(void 0!==e.cols||void 0!==e.width){const A=e.cols??e.width,g=e.rows??e.height;E.debug(`vt reset (${A}x${g})`),n("playing"),a(e.time),C(A,g,e.init??void 0),s=new W,"number"==typeof e.time&&s.setTime(e.time)}else"offline"===e.state&&(E.info("stream offline"),n("offline",{message:"Stream offline"}),s=new z)})),g.addEventListener("done",(()=>{E.info("closed"),g.close(),n("ended",{message:"Stream ended"})}))},stop:()=>{void 0!==V&&V.stop(),void 0!==g&&g.close()},getCurrentTime:()=>s.getTime()}}],["random",function(A,e,g){let{feed:V}=e,{speed:t}=g;const I=" ".charCodeAt(0),B="~".charCodeAt(0)-I;let Q;const C=()=>{const A=Math.pow(5,4*Math.random());Q=setTimeout(i,A/t)},i=()=>{C();const A=String.fromCharCode(I+Math.floor(Math.random()*B));V(A)};return()=>(C(),()=>clearInterval(Q))}],["recording",function(A,e,g){let V,t,I,B,Q,C,i,o,r,n,E,s,{feed:a,resize:c,onInput:l,onMarker:u,setState:w,logger:h}=e,{speed:d,idleTimeLimit:f,startAt:D,loop:y,posterTime:q,markers:k,pauseOnMarkers:p,cols:L,rows:F,audioUrl:M}=g,m=0,R=0,N=0,G=!1,U=!1,J=()=>performance.now()*d,v=!1;async function b(A,e){const g=await fetch(A,e);if(!g.ok)throw new Error(`failed fetching recording from ${A}: ${g.status} ${g.statusText}`);return g}function S(){const A=I[m];A?i=function(A,e){let g=(1e3*e-(J()-o))/d;g<0&&(g=0);return setTimeout(A,g)}(Y,A[0]):O()}function Y(){let A,e=I[m];do{R=e[0],m++;if(T(e))return;e=I[m],A=J()-o}while(e&&A>1e3*e[0]);S()}function K(){clearTimeout(i),i=null}function T(A){const[e,g,V]=A;if("o"===g)a(V);else if("i"===g)l(V);else if("r"===g){const[A,e]=V.split("x");c(A,e)}else if("m"===g&&(u(V),p))return H(),r=1e3*e,w("idle",{reason:"paused"}),!0;return!1}function O(){K(),N++,!0===y||"number"==typeof y&&N>"===A?A=g+5:"<<<"===A?A=g-.1*Q:">>>"===A?A=g+.1*Q:"%"===A[A.length-1]&&(A=parseFloat(A.substring(0,A.length-1))/100*Q);else if("object"==typeof A)if("prev"===A.marker)A=W(g)??0,e&&g-A<1&&(A=W(A)??0);else if("next"===A.marker)A=function(A){if(0==B.length)return;let e,g=B.length-1,V=B[g];for(;V&&V[0]>A;)e=V[0],V=B[--g];return e}(g)??Q;else if("number"==typeof A.marker){const e=B[A.marker];if(void 0===e)throw new Error(`invalid marker index: ${A.marker}`);A=e[0]}const V=Math.min(Math.max(A,0),Q);if(1e3*V===r)return!1;Vw("loading")),1e3),!i)return!0;h.debug("pausing session playback"),K(),r=J()-o}function _(){h.debug("audio resumed"),clearTimeout(n),w("playing"),G&&(G=!1,U&&(h.debug("resuming session playback"),o=J()-r,r=null,S()))}return{init:async function(){const e=setTimeout((()=>{w("loading")}),3e3);try{let e=async function(A,e,g){const{parser:i,minFrameTime:o,inputOffset:r,dumpFilename:n,encoding:E="utf-8"}=A,s=await async function(A){let{url:e,data:g,fetchOpts:V={}}=A;if("string"==typeof e)return await b(e,V);if(Array.isArray(e))return await Promise.all(e.map((A=>b(A,V))));if(void 0!==g){"function"==typeof g&&(g=g()),g instanceof Promise||(g=Promise.resolve(g));const A=await g;return"string"==typeof A||A instanceof ArrayBuffer?new Response(A):A}throw new Error("failed fetching recording file: url/data missing in src")}(A),a=function(A,e,g){let{startAt:V=0,idleTimeLimit:t,minFrameTime:I,inputOffset:B,markers_:Q}=g,{events:C}=A;C instanceof X||(C=new X(C));t=t??A.idleTimeLimit??1/0;const i={offset:0};C=C.transform(function(A){let e,g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1/60;return V=>{let t=0,I=0;return{step:A=>{t++,void 0!==e?"o"===A[1]&&"o"===e[1]&&A[0]-e[0]{void 0!==e&&(V(e),I++),A.debug(`batched ${t} frames to ${I} frames`)}}}}(e,I)).map(function(A,e,g){let V=0,t=0;return function(I){const B=I[0]-V-A;return V=I[0],B>0&&(t+=B,I[0]"m"!==A[1])).multiplex(Q,((A,e)=>A[0]"i"===A[1]?[A[0]+B,A[1],A[2]]:A)),C.sort(((A,e)=>A[0]-e[0])));const o=C[C.length-1][0],r=V-i.offset;return{...A,events:C,duration:o,effectiveStartAt:r}}(await i(s,{encoding:E}),e,{...g,minFrameTime:o,inputOffset:r});if(({cols:V,rows:t,events:I,duration:Q,effectiveStartAt:C}=a),L=L??V,F=F??t,0===I.length)throw new Error("recording is missing events");void 0!==n&&function(A,e){const g=document.createElement("a"),V=A.events.map((A=>"m"===A[1]?[A[0],A[1],A[2].label]:A)),t=function(A){return`${JSON.stringify({version:2,width:A.cols,height:A.rows})}\n${A.events.map(JSON.stringify).join("\n")}\n`}({...A,events:V});g.href=URL.createObjectURL(new Blob([t],{type:"text/plain"})),g.download=e,g.click()}(a,n);const c=void 0!==q?(l=q,I.filter((A=>A[0]A[2]))):void 0;var l;return B=I.filter((A=>"m"===A[1])).map((A=>[A[0],A[2].label])),{cols:V,rows:t,duration:Q,theme:a.theme,poster:c,markers:B}}(A,h,{idleTimeLimit:f,startAt:D,markers_:k});const g=await async function(A){if(!A)return!1;s=await async function(A){const e=new Audio;let g;e.preload="metadata",e.loop=!1,e.crossOrigin="anonymous";const V=new Promise((A=>{g=A}));function t(){g(),e.removeEventListener("canplay",t)}return e.addEventListener("canplay",t),e.src=A,e.load(),await V,e}(A),v=!Number.isNaN(s.duration)&&s.duration!==1/0&&s.seekable.length>0&&s.seekable.end(s.seekable.length-1)===s.duration,v?(s.addEventListener("playing",_),s.addEventListener("waiting",$)):h.warn(`audio is not seekable - you must enable range request support on the server providing ${s.src} for audio seeking to work`);return!0}(M);return e=await e,{...e,hasAudio:g}}finally{clearTimeout(e)}},play:async function(){if(i)throw new Error("already playing");if(void 0===I[m])throw new Error("already ended");return null!==C&&x(C),await Z(),!0},pause:H,seek:x,step:function(A){let e,g;if(void 0===A&&(A=1),A>0){let V=m;e=I[V];for(let t=0;t{A=V.protocol||"raw",a.info("opened"),a.info(`activating ${A} protocol handler`),"v1.alis"===A?V.onmessage=L(oA(a)):"v2.asciicast"===A?V.onmessage=L(function(){let A=function(g){const V=JSON.parse(g);if(2!==V.version)throw new Error("not an asciicast v2 stream");return A=e,{time:0,term:{size:{cols:V.width,rows:V.height}}}};function e(A){const e=JSON.parse(A);if("r"===e[1]){const[A,g]=e[2].split("x");return[e[0],"r",{cols:parseInt(A,10),rows:parseInt(g,10)}]}return e}return function(e){return A(e)}}()):"v3.asciicast"===A?V.onmessage=L(function(){let A=function(e){const V=JSON.parse(e);if(3!==V.version)throw new Error("not an asciicast v3 stream");A=g;const t={size:{cols:V.term.cols,rows:V.term.rows}};if(V.term.theme){const A="string"==typeof V.term.theme.palette?V.term.theme.palette.split(":"):void 0,e=_({foreground:V.term.theme.fg,background:V.term.theme.bg,palette:A});e&&(t.theme=e)}return{time:0,term:t}},e=0;function g(A){const g=JSON.parse(A),[V,t,I]=g;if(e+=V,"r"===t){const[A,g]=I.split("x");return[e,"r",{cols:parseInt(A,10),rows:parseInt(g,10)}]}return[e,t,I]}return function(e){return A(e)}}()):"raw"===A&&(V.onmessage=L(aA())),u=setTimeout((()=>{f=0}),1e3)},V.onclose=e=>{if(clearTimeout(w),m(),D)return;let g=!1,V="Stream ended";if("v1.alis"===A?(k||e.code>=4e3&&e.code<=4100)&&(g=!0,V=e.reason||V):(q||1e3===e.code||1005===e.code)&&(g=!0),g)a.info("closed"),s("ended",{message:V});else if(1002===e.code)a.debug(`close reason: ${e.reason}`),s("ended",{message:"Err: Player not compatible with the server"});else{clearTimeout(u);const A=Q(f++);a.info(`unexpected close, reconnecting in ${A}...`),s("loading"),setTimeout(p,A)}},y=!1}function L(A){return w=setTimeout(M,5e3),function(e){try{const g=A(e.data);if(t)if(Array.isArray(g))t.pushEvent(g),"x"===g[1]&&(q=!0);else if("string"==typeof g)t.pushText(g);else if("object"!=typeof g||Array.isArray(g)){if(!1===g)M(),k=!0;else if(void 0!==g)throw new Error(`unexpected value from protocol handler: ${g}`)}else F(g);else if("object"!=typeof g||Array.isArray(g)){if(void 0!==g)throw clearTimeout(w),new Error(`unexpected value from protocol handler: ${g}`);clearTimeout(w),w=setTimeout(M,1e3)}else F(g),clearTimeout(w)}catch(A){throw V.close(),A}}}function F(A){let{time:e,term:g}=A;const{size:V,init:I,theme:Q}=g,{cols:c,rows:l}=V;a.info(`stream reset (${c}x${l} @${e})`),s("playing"),m(),t=QA(B,i,r,n,E,(A=>d.setTime(A)),e,C,a),o(c,l,I,Q),d=new W,y=!0,q=!1,k=!1,"number"==typeof e&&d.setTime(e)}function M(){m(),y?(a.info("stream ended"),s("offline",{message:"Stream ended"})):(a.info("stream offline"),s("offline",{message:"Stream offline"})),d=new z}function m(){t&&t.stop(),t=null}return{init:()=>({hasAudio:!!l}),play:()=>{p(),l&&(h=new Audio,h.preload="auto",h.crossOrigin="anonymous",h.src=l,h.play())},stop:()=>{D=!0,m(),void 0!==V&&V.close(),h&&h.pause()},mute:function(){if(h)return h.muted=!0,!0},unmute:function(){if(h)return h.muted=!1,!0},getCurrentTime:()=>d.getTime()}}]]),MA=new Map([["asciicast",P],["typescript",async function(A,e){let{encoding:g}=e;const V=new TextDecoder(g);let t,I,B=(await A[0].text()).split("\n").filter((A=>A.length>0)).map((A=>A.split(" ")));B[0].length<3&&(B=B.map((A=>["O",A[0],A[1]])));const Q=await A[1].arrayBuffer(),C=new Uint8Array(Q),i=C.findIndex((A=>10==A))+1,o=V.decode(C.subarray(0,i)).match(/COLUMNS="(\d+)" LINES="(\d+)"/);null!==o&&(t=parseInt(o[1],10),I=parseInt(o[2],10));const r={array:C,cursor:i};let n=r;if(void 0!==A[2]){const e=await A[2].arrayBuffer();n={array:new Uint8Array(e),cursor:i}}const E=[];let s=0;for(const A of B)if(s+=parseFloat(A[1]),"O"===A[0]){const e=parseInt(A[2],10),g=r.array.subarray(r.cursor,r.cursor+e),t=V.decode(g);E.push([s,"o",t]),r.cursor+=e}else if("I"===A[0]){const e=parseInt(A[2],10),g=n.array.subarray(n.cursor,n.cursor+e),t=V.decode(g);E.push([s,"i",t]),n.cursor+=e}else if("S"===A[0]&&"SIGWINCH"===A[2]){const e=parseInt(A[4].slice(5),10),g=parseInt(A[3].slice(5),10);E.push([s,"r",`${e}x${g}`])}else"H"===A[0]&&"COLUMNS"===A[2]?t=parseInt(A[3],10):"H"===A[0]&&"LINES"===A[2]&&(I=parseInt(A[3],10));return t=t??80,I=I??24,{cols:t,rows:I,events:E}}],["ttyrec",async function(A,e){let{encoding:g}=e;const V=new TextDecoder(g),t=await A.arrayBuffer(),I=new Uint8Array(t),B=lA(I),Q=B.time,C=V.decode(B.data).match(/\x1b\[8;(\d+);(\d+)t/),i=[];let o=80,r=24;null!==C&&(o=parseInt(C[2],10),r=parseInt(C[1],10));let n=0,E=lA(I);for(;void 0!==E;){const A=E.time-Q,e=V.decode(E.data);i.push([A,"o",e]),n+=E.len,E=lA(I.subarray(n))}return{cols:o,rows:r,events:i}}]]);const mA=Symbol("solid-proxy"),RA=Symbol("solid-track"),NA={equals:(A,e)=>A===e};let GA=oe;const UA=1,JA=2,vA={owned:null,cleanups:null,context:null,owner:null};var bA=null;let SA=null,YA=null,KA=null,TA=null,OA=0;function HA(A,e){const g=YA,V=bA,t=0===A.length,I=void 0===e?V:e,B=t?vA:{owned:null,cleanups:null,context:I?I.context:null,owner:I},Q=t?A:()=>A((()=>jA((()=>se(B)))));bA=B,YA=null;try{return ie(Q,!0)}finally{YA=g,bA=V}}function ZA(A,e){const g={value:A,observers:null,observerSlots:null,comparator:(e=e?Object.assign({},NA,e):NA).equals||void 0};return[te.bind(g),A=>("function"==typeof A&&(A=A(g.value)),Ie(g,A))]}function xA(A,e,g){Be(Qe(A,e,!1,UA))}function WA(A,e,g){GA=re;const V=Qe(A,e,!1,UA);V.user=!0,TA?TA.push(V):Be(V)}function zA(A,e,g){g=g?Object.assign({},NA,g):NA;const V=Qe(A,e,!0,0);return V.observers=null,V.observerSlots=null,V.comparator=g.equals||void 0,Be(V),te.bind(V)}function XA(A){return ie(A,!1)}function jA(A){if(null===YA)return A();const e=YA;YA=null;try{return A()}finally{YA=e}}function $A(A){WA((()=>jA(A)))}function _A(A){return null===bA||(null===bA.cleanups?bA.cleanups=[A]:bA.cleanups.push(A)),A}function PA(){return YA}function Ae(A){const e=YA,g=bA;return Promise.resolve().then((()=>{YA=e,bA=g,ie(A,!1),YA=bA=null}))}const[ee,ge]=ZA(!1);function Ve(A){const e=zA(A),g=zA((()=>ce(e())));return g.toArray=()=>{const A=g();return Array.isArray(A)?A:null!=A?[A]:[]},g}function te(){if(this.sources&&this.state)if(this.state===UA)Be(this);else{const A=KA;KA=null,ie((()=>ne(this)),!1),KA=A}if(YA){const A=this.observers?this.observers.length:0;YA.sources?(YA.sources.push(this),YA.sourceSlots.push(A)):(YA.sources=[this],YA.sourceSlots=[A]),this.observers?(this.observers.push(YA),this.observerSlots.push(YA.sources.length-1)):(this.observers=[YA],this.observerSlots=[YA.sources.length-1])}return this.value}function Ie(A,e,g){let V=A.value;return A.comparator&&A.comparator(V,e)||(A.value=e,A.observers&&A.observers.length&&ie((()=>{for(let e=0;e1e6)throw KA=[],new Error}),!1)),e}function Be(A){if(!A.fn)return;se(A);const e=OA;!function(A,e,g){let V;const t=bA,I=YA;YA=bA=A;try{V=A.fn(e)}catch(e){return A.pure&&(A.state=UA,A.owned&&A.owned.forEach(se),A.owned=null),A.updatedAt=g+1,ae(e)}finally{YA=I,bA=t}(!A.updatedAt||A.updatedAt<=g)&&(null!=A.updatedAt&&"observers"in A?Ie(A,V):A.value=V,A.updatedAt=g)}(A,A.value,e)}function Qe(A,e,g,V=UA,t){const I={fn:A,state:V,updatedAt:null,owned:null,sources:null,sourceSlots:null,cleanups:null,value:e,owner:bA,context:bA?bA.context:null,pure:g};return null===bA||bA!==vA&&(bA.owned?bA.owned.push(I):bA.owned=[I]),I}function Ce(A){if(0===A.state)return;if(A.state===JA)return ne(A);if(A.suspense&&jA(A.suspense.inFallback))return A.suspense.effects.push(A);const e=[A];for(;(A=A.owner)&&(!A.updatedAt||A.updatedAt=0;g--)if((A=e[g]).state===UA)Be(A);else if(A.state===JA){const g=KA;KA=null,ie((()=>ne(A,e[0])),!1),KA=g}}function ie(A,e){if(KA)return A();let g=!1;e||(KA=[]),TA?g=!0:TA=[],OA++;try{const e=A();return function(A){KA&&(oe(KA),KA=null);if(A)return;const e=TA;TA=null,e.length&&ie((()=>GA(e)),!1)}(g),e}catch(A){g||(TA=null),KA=null,ae(A)}}function oe(A){for(let e=0;e=0;e--)se(A.tOwned[e]);delete A.tOwned}if(A.owned){for(e=A.owned.length-1;e>=0;e--)se(A.owned[e]);A.owned=null}if(A.cleanups){for(e=A.cleanups.length-1;e>=0;e--)A.cleanups[e]();A.cleanups=null}A.state=0}function ae(A,e=bA){const g=function(A){return A instanceof Error?A:new Error("string"==typeof A?A:"Unknown error",{cause:A})}(A);throw g}function ce(A){if("function"==typeof A&&!A.length)return ce(A());if(Array.isArray(A)){const e=[];for(let g=0;gA(e||{})))}const he=A=>`Stale read from <${A}>.`;function de(A){const e="fallback"in A&&{fallback:()=>A.fallback};return zA(function(A,e,g={}){let V=[],t=[],I=[],B=0,Q=e.length>1?[]:null;return _A((()=>ue(I))),()=>{let C,i,o=A()||[],r=o.length;return o[RA],jA((()=>{let A,e,E,s,a,c,l,u,w;if(0===r)0!==B&&(ue(I),I=[],V=[],t=[],B=0,Q&&(Q=[])),g.fallback&&(V=[le],t[0]=HA((A=>(I[0]=A,g.fallback()))),B=1);else if(0===B){for(t=new Array(r),i=0;i=c&&u>=c&&V[l]===o[u];l--,u--)E[u]=t[l],s[u]=I[l],Q&&(a[u]=Q[l]);for(A=new Map,e=new Array(u+1),i=u;i>=c;i--)w=o[i],C=A.get(w),e[i]=void 0===C?-1:C,A.set(w,i);for(C=c;C<=l;C++)w=V[C],i=A.get(w),void 0!==i&&-1!==i?(E[i]=t[C],s[i]=I[C],Q&&(a[i]=Q[C]),i=e[i],A.set(w,i)):I[C]();for(i=c;iA.each),A.children,e||void 0))}function fe(A){const e=A.keyed,g=zA((()=>A.when),void 0,void 0),V=e?g:zA(g,void 0,{equals:(A,e)=>!A==!e});return zA((()=>{const t=V();if(t){const I=A.children;return"function"==typeof I&&I.length>0?jA((()=>I(e?t:()=>{if(!jA(V))throw he("Show");return g()}))):I}return A.fallback}),void 0,void 0)}function De(A){const e=Ve((()=>A.children)),g=zA((()=>{const A=e(),g=Array.isArray(A)?A:[A];let V=()=>{};for(let A=0;AI()?void 0:t.when),void 0,void 0),Q=t.keyed?B:zA(B,void 0,{equals:(A,e)=>!A==!e});V=()=>I()||(Q()?[e,B,t]:void 0)}return V}));return zA((()=>{const e=g()();if(!e)return A.fallback;const[V,t,I]=e,B=I.children;return"function"==typeof B&&B.length>0?jA((()=>B(I.keyed?t():()=>{if(jA(g)()?.[0]!==V)throw he("Match");return t()}))):B}),void 0,void 0)}function ye(A){return A}const qe="_$DX_DELEGATE";function ke(A,e,g,V){let t;const I=()=>{const e=document.createElement("template");return e.innerHTML=A,e.content.firstChild},B=e?()=>jA((()=>document.importNode(t||(t=I()),!0))):()=>(t||(t=I())).cloneNode(!0);return B.cloneNode=B,B}function pe(A,e=window.document){const g=e[qe]||(e[qe]=new Set);for(let V=0,t=A.length;VA(e,g)))}function Re(A,e,g,V){if(void 0===g||V||(V=[]),"function"!=typeof e)return Ge(A,e,V,g);xA((V=>Ge(A,e(),V,g)),V)}function Ne(A){let e=A.target;const g=`$$${A.type}`,V=A.target,t=A.currentTarget,I=e=>Object.defineProperty(A,"target",{configurable:!0,value:e}),B=()=>{const V=e[g];if(V&&!e.disabled){const t=e[`${g}Data`];if(void 0!==t?V.call(e,t,A):V.call(e,A),A.cancelBubble)return}return e.host&&"string"!=typeof e.host&&!e.host._$host&&e.contains(A.target)&&I(e.host),!0},Q=()=>{for(;B()&&(e=e._$host||e.parentNode||e.host););};if(Object.defineProperty(A,"currentTarget",{configurable:!0,get:()=>e||document}),A.composedPath){const g=A.composedPath();I(g[0]);for(let A=0;A{let t=e();for(;"function"==typeof t;)t=t();g=Ge(A,t,g,V)})),()=>g;if(Array.isArray(e)){const I=[],Q=g&&Array.isArray(g);if(Ue(I,e,g,t))return xA((()=>g=Ge(A,I,g,V,!0))),()=>g;if(0===I.length){if(g=ve(A,g,V),B)return g}else Q?0===g.length?Je(A,I,V):function(A,e,g){let V=g.length,t=e.length,I=V,B=0,Q=0,C=e[t-1].nextSibling,i=null;for(;BV-Q){const t=e[B];for(;Q=0;I--){const B=e[I];if(t!==B){const e=B.parentNode===A;V||I?e&&B.remove():e?A.replaceChild(t,B):A.insertBefore(t,g)}else V=!0}}else A.insertBefore(t,g);return[t]}const be=Symbol("store-raw"),Se=Symbol("store-node"),Ye=Symbol("store-has"),Ke=Symbol("store-self");function Te(A){let e=A[mA];if(!e&&(Object.defineProperty(A,mA,{value:e=new Proxy(A,ze)}),!Array.isArray(A))){const g=Object.keys(A),V=Object.getOwnPropertyDescriptors(A);for(let t=0,I=g.length;te===be||e===mA||e===RA||e===Se||e===Ye||"__proto__"===e||(PA()&&xe(Ze(A,Ye),e)(),e in A),set:()=>!0,deleteProperty:()=>!0,ownKeys:function(A){return We(A),Reflect.ownKeys(A)},getOwnPropertyDescriptor:function(A,e){const g=Reflect.getOwnPropertyDescriptor(A,e);return g&&!g.get&&g.configurable&&e!==mA&&e!==Se?(delete g.value,delete g.writable,g.get=()=>A[mA][e],g):g}};function Xe(A,e,g,V=!1){if(!V&&A[e]===g)return;const t=A[e],I=A.length;void 0===g?(delete A[e],A[Ye]&&A[Ye][e]&&void 0!==t&&A[Ye][e].$()):(A[e]=g,A[Ye]&&A[Ye][e]&&void 0===t&&A[Ye][e].$());let B,Q=Ze(A,Se);if((B=xe(Q,e,t))&&B.$((()=>g)),Array.isArray(A)&&A.length!==I){for(let e=A.length;e1){V=e.shift();const I=typeof V,B=Array.isArray(A);if(Array.isArray(V)){for(let t=0;t1)return void $e(A[V],e,[V].concat(g));t=A[V],g=[V].concat(g)}let I=e[0];"function"==typeof I&&(I=I(t,g),I===t)||void 0===V&&null==I||(I=He(I),void 0===V||Oe(t)&&Oe(I)&&!Array.isArray(I)?je(t,I):Xe(A,V,I))}function _e(...[A,e]){const g=He(A||{}),V=Array.isArray(g);return[Te(g),function(...A){XA((()=>{V&&1===A.length?function(A,e){if("function"==typeof e&&(e=e(A)),e=He(e),Array.isArray(e)){if(A===e)return;let g=0,V=e.length;for(;g{},Ag=(A,e)=>e();function eg(A,e){const g=jA(A),V=g?[g]:[],{onEnter:t=Ag,onExit:I=Ag}=e,[B,Q]=ZA(e.appear?[]:V),[C]=[ee,Ae];let i,o=!1;function r(A,e){if(!A)return e&&e();o=!0,I(A,(()=>{XA((()=>{o=!1,Q((e=>e.filter((e=>e!==A)))),e&&e()}))}))}function n(A){const e=i;if(!e)return A&&A();i=void 0,Q((A=>[e,...A])),t(e,A??Pe)}const E="out-in"===e.mode?A=>o||r(A,n):"in-out"===e.mode?A=>n((()=>r(A))):A=>{r(A),n()};var s,a;return s=e=>{const g=A();return jA(C)?(C(),e):(g!==e&&(i=g,XA((()=>jA((()=>E(e)))))),g)},a=e.appear?void 0:g,Be(Qe(s,a,!0,UA)),B}const gg=A=>A instanceof Element;function Vg(A,e){if(e(A))return A;if("function"==typeof A&&!A.length)return Vg(A(),e);if(Array.isArray(A))for(const g of A){const A=Vg(g,e);if(A)return A}return null}function tg(A,e=gg,g=gg){const V=zA(A);return zA((()=>Vg(V(),e)))}function Ig(A){requestAnimationFrame((()=>requestAnimationFrame(A)))}var Bg={inout:"in-out",outin:"out-in"},Qg=A=>{const e=function(A){return zA((()=>{const e=A.name||"s";return{enterActive:(A.enterActiveClass||e+"-enter-active").split(" "),enter:(A.enterClass||e+"-enter").split(" "),enterTo:(A.enterToClass||e+"-enter-to").split(" "),exitActive:(A.exitActiveClass||e+"-exit-active").split(" "),exit:(A.exitClass||e+"-exit").split(" "),exitTo:(A.exitToClass||e+"-exit-to").split(" "),move:(A.moveClass||e+"-move").split(" ")}}))}(A);return eg(tg((()=>A.children)),{mode:Bg[A.mode],appear:A.appear,onEnter(g,V){!function(A,e,g,V){const{onBeforeEnter:t,onEnter:I,onAfterEnter:B}=e;function Q(e){e&&e.target!==g||(V?.(),g.removeEventListener("transitionend",Q),g.removeEventListener("animationend",Q),g.classList.remove(...A.enterActive),g.classList.remove(...A.enterTo),B?.(g))}t?.(g),g.classList.add(...A.enter),g.classList.add(...A.enterActive),queueMicrotask((()=>{if(!g.parentNode)return V?.();I?.(g,(()=>Q()))})),Ig((()=>{g.classList.remove(...A.enter),g.classList.add(...A.enterTo),(!I||I.length<2)&&(g.addEventListener("transitionend",Q),g.addEventListener("animationend",Q))}))}(e(),A,g,V)},onExit(g,V){!function(A,e,g,V){const{onBeforeExit:t,onExit:I,onAfterExit:B}=e;if(!g.parentNode)return V?.();function Q(e){e&&e.target!==g||(V?.(),g.removeEventListener("transitionend",Q),g.removeEventListener("animationend",Q),g.classList.remove(...A.exitActive),g.classList.remove(...A.exitTo),B?.(g))}t?.(g),g.classList.add(...A.exit),g.classList.add(...A.exitActive),I?.(g,(()=>Q())),Ig((()=>{g.classList.remove(...A.exit),g.classList.add(...A.exitTo),(!I||I.length<2)&&(g.addEventListener("transitionend",Q),g.addEventListener("animationend",Q))}))}(e(),A,g,V)}})};const Cg=ke('
    ',12),ig="http://www.w3.org/2000/svg",og=24;var rg=A=>{const e=A.core,g=[],V=[],I=[],B=new Set,Q=new Map,C=new Map,[i,o]=ZA({cols:A.cols,rows:A.rows},{equals:(A,e)=>A.cols===e.cols&&A.rows===e.rows}),[r,n]=ZA(ng(wg)),E=()=>A.lineHeight??1.3333333333,[s,a]=ZA(!0),c=zA((()=>s()||M)),l=zA((()=>({width:`${i().cols}ch`,height:E()*i().rows+"em","font-size":100*(A.scale||1)+"%","--term-line-height":`${E()}em`,"--term-cols":i().cols,"--term-rows":i().rows})));let u,w,h,d,f,D,y,q,k,p,L={col:0,row:0,visible:!1},F={size:void 0,theme:void 0,rows:new Set},M=!1;function m(g){let{size:V,theme:t,changedRows:I}=g,B=!1;if(void 0!==I)for(const A of I)F.rows.add(A),M=!0,B=!0;if(void 0!==t&&A.preferEmbeddedTheme){F.theme=t;for(let A=0;A=V.rows&&F.rows.delete(A)}B&&L.visible&&F.rows.add(L.row),N()}function R(){a((A=>(A||(M=!1),!A)))}function N(){void 0===q&&(q=requestAnimationFrame(G))}function G(){q=void 0;const{size:e,theme:g,rows:V}=F;XA((function(){void 0!==e&&(!function(A){let{cols:e,rows:g}=A;w.width=8*e,w.height=g*og,h.imageSmoothingEnabled=!1}(e),b(e.rows),S(e.rows),o(e)),void 0!==g&&(n(ng(null===g?p:g)),Q.clear());const A=r(),t=s()||M;for(const e of V)U(e,A,t)})),F.size=void 0,F.theme=void 0,F.rows.clear(),A.stats.renders+=1}function U(A,g,V){const t=e.getLine(A,V);!function(A){h.clearRect(0,A*og,8*i().cols,og)}(A),function(A,g,V){const t=e.getDataView(g,8),I=A*og;let B=0;for(;BA;){const A=d.lastElementChild;d.removeChild(A),g.push(A)}}function S(A){let e=y.children.length;if(eA;){const A=y.lastElementChild;y.removeChild(A),V.push(A)}}function Y(){let A=g.pop();return void 0===A&&(A=document.createElement("span"),A.className="ap-line"),A}function K(){let A=V.pop();return void 0===A&&(A=document.createElementNS(ig,"g"),A.setAttribute("class","ap-symbol-line")),A}function T(A,e,g,V){if(!function(A){const e=function(A){const e=`stroke="currentColor" stroke-width="${ag}" stroke-linejoin="miter" stroke-linecap="square"`,g=`stroke="currentColor" stroke-width="${ag}" stroke-linejoin="miter" stroke-linecap="butt"`,V=A=>``,t=1/3,I=2/3;switch(A){case 9698:return''+V("M1,1 L1,0 L0,1 Z");case 9699:return''+V("M0,1 L0,0 L1,1 Z");case 9700:return''+V("M0,0 L1,0 L0,1 Z");case 9701:return''+V("M1,0 L1,1 L0,0 Z");case 9871:{const A=.17,e=.15/2,g=.2/2,V=A=>.5+A*cg,t=.5-e,I=.5+e,B=1.02,Q=V(-g-A),C=V(-g),i=V(g),o=V(g+A),r=(A,e,g,V)=>`M${A},${g} L${e},${g} L${e},${V} L${A},${V} Z`;return``}case 129852:return``+V(`M0,${I} L0,1 L0.5,1 Z`);case 129853:return``+V(`M0,${I} L0,1 L1,1 Z`);case 129854:return``+V(`M0,${t} L0.5,1 L0,1 Z`);case 129855:return``+V(`M0,${t} L1,1 L0,1 Z`);case 129856:return''+V("M0,0 L0.5,1 L0,1 Z");case 129857:return``+V(`M0,${t} L0,1 L1,1 L1,0 L0.5,0 Z`);case 129858:return``+V(`M0,${t} L0,1 L1,1 L1,0 Z`);case 129859:return``+V(`M0,${I} L0,1 L1,1 L1,0 L0.5,0 Z`);case 129860:return``+V(`M0,${I} L0,1 L1,1 L1,0 Z`);case 129861:return''+V("M0.5,0 L1,0 L1,1 L0,1 Z");case 129862:return``+V(`M0,${I} L0,1 L1,1 L1,${t} Z`);case 129863:return``+V(`M0.5,1 L1,1 L1,${I} Z`);case 129864:return``+V(`M0,1 L1,1 L1,${I} Z`);case 129865:return``+V(`M0.5,1 L1,1 L1,${t} Z`);case 129866:return``+V(`M0,1 L1,1 L1,${t} Z`);case 129867:return''+V("M0.5,1 L1,0 L1,1 Z");case 129868:return``+V(`M0,0 L0.5,0 L1,${t} L1,1 L0,1 Z`);case 129869:return``+V(`M0,0 L0,1 L1,1 L1,${t} Z`);case 129870:return``+V(`M0,0 L0.5,0 L1,${I} L1,1 L0,1 Z`);case 129871:return``+V(`M0,0 L1,${I} L1,1 L0,1 Z`);case 129872:return''+V("M0,0 L0.5,0 L1,1 L0,1 Z");case 129873:return``+V(`M0,${t} L1,${I} L1,1 L0,1 Z`);case 129874:return``+V(`M0,${I} L0,0 L1,0 L1,1 L0.5,1 Z`);case 129875:return``+V(`M0,${I} L0,0 L1,0 L1,1 Z`);case 129876:return``+V(`M0,${t} L0,0 L1,0 L1,1 L0.5,1 Z`);case 129877:return``+V(`M0,${t} L0,0 L1,0 L1,1 Z`);case 129878:return''+V("M0,0 L1,0 L1,1 L0.5,1 Z");case 129879:return``+V(`M0,${t} L0.5,0 L0,0 Z`);case 129880:return``+V(`M0,0 L1,0 L0,${t} Z`);case 129881:return``+V(`M0,0 L0.5,0 L0,${I} Z`);case 129882:return``+V(`M0,0 L1,0 L0,${I} Z`);case 129883:return''+V("M0,0 L0.5,0 L0,1 Z");case 129884:return``+V(`M0,0 L1,0 L1,${t} L0,${I} Z`);case 129885:return``+V(`M0,0 L1,0 L1,${I} L0.5,1 L0,1 Z`);case 129886:return``+V(`M0,0 L1,0 L1,${I} L0,1 Z`);case 129887:return``+V(`M0,0 L1,0 L1,${t} L0.5,1 L0,1 Z`);case 129888:return``+V(`M0,0 L1,0 L1,${t} L0,1 Z`);case 129889:return''+V("M0,0 L1,0 L0.5,1 L0,1 Z");case 129890:return``+V(`M0.5,0 L1,0 L1,${t} Z`);case 129891:return``+V(`M0,0 L1,0 L1,${t} Z`);case 129892:return``+V(`M0.5,0 L1,0 L1,${I} Z`);case 129893:return``+V(`M0,0 L1,0 L1,${I} Z`);case 129894:return''+V("M0.5,0 L1,0 L1,1 Z");case 129895:return``+V(`M0,${t} L0,0 L1,0 L1,${I} Z`);case 129896:return``;case 129897:return``;case 129898:return``;case 129899:return``;case 129900:return''+V("M0,0 L0,1 L0.5,0.5 Z");case 57520:return'';case 57521:return'';case 57522:return'';case 57523:return'';default:return null}}(A);if(!e)return!1;if(B.has(A))return!0;const g=`sym-${A}`,V=document.createElementNS(ig,"symbol");return V.setAttribute("id",g),V.setAttribute("viewBox","0 0 1 1"),V.setAttribute("preserveAspectRatio","none"),V.setAttribute("overflow","visible"),V.innerHTML=e,D.appendChild(V),B.add(A),!0}(A))return null;const t=lg.has(A),Q=t?e-ug:e,C=t?1+2*ug:1,i=function(){let A=I.pop();void 0===A&&(A=document.createElementNS(ig,"use"));return A}();return i.setAttribute("href",`#sym-${A}`),i.setAttribute("x",Q),i.setAttribute("y",0),i.setAttribute("width",C),i.setAttribute("height","1"),g?i.style.setProperty("color",g):i.style.removeProperty("color"),V?i.classList.add("ap-blink"):i.classList.remove("ap-blink"),i}return $A((()=>{!function(){if(h=w.getContext("2d"),!h)throw new Error("2D ctx not available");const{cols:A,rows:e}=i();w.width=8*A,w.height=e*og,w.style.imageRendering="pixelated",h.imageSmoothingEnabled=!1}(),p=function(A){const e=getComputedStyle(A),g=t(e.getPropertyValue("--term-color-foreground"),wg.foreground),V=t(e.getPropertyValue("--term-color-background"),wg.background),I=[];for(let A=0;A<16;A++){const g=A>=8?I[A-8]:wg.palette[A];I[A]=t(e.getPropertyValue(`--term-color-${A}`),g)}return{foreground:g,background:V,palette:I}}(u),F.theme=p,b(i().rows),S(i().rows),e.addEventListener("vtUpdate",m)})),_A((()=>{e.removeEventListener("vtUpdate",m),clearInterval(k),cancelAnimationFrame(q)})),WA((()=>{A.blinking&&void 0===k?k=setInterval(R,600):(clearInterval(k),k=void 0,a(!0))})),WA((()=>{c(),L.visible&&(F.rows.add(L.row),N())})),(()=>{const A=Cg.cloneNode(!0),e=A.firstChild,g=e.nextSibling,V=g.firstChild,t=V.nextSibling,I=g.nextSibling;"function"==typeof u?me(u,A):u=A;"function"==typeof w?me(w,e):w=e;"function"==typeof f?me(f,g):f=g;"function"==typeof D?me(D,V):D=V;"function"==typeof y?me(y,t):y=t;return"function"==typeof d?me(d,I):d=I,xA((e=>{const V=l(),t=`0 0 ${i().cols} ${i().rows}`,B=!!s(),Q=!!s();return e._v$=Me(A,V,e._v$),t!==e._v$2&&Le(g,"viewBox",e._v$2=t),B!==e._v$3&&g.classList.toggle("ap-blink",e._v$3=B),Q!==e._v$4&&I.classList.toggle("ap-blink",e._v$4=Q),e}),{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),A})()};function ng(A){return{fg:A.foreground,bg:A.background,palette:Eg(A.palette,A.background,A.foreground)}}function Eg(A,e,g){const V=B(e),t=B(g),C=B(A[1]),i=B(A[2]),o=B(A[3]),r=B(A[4]),n=B(A[5]),E=B(A[6]),s=[...A];for(let A=0;A<6;A+=1){const e=A/5,g=I(e,V,C),B=I(e,i,o),a=I(e,r,n),c=I(e,E,t);for(let A=0;A<6;A+=1){const e=A/5,V=I(e,g,B),t=I(e,a,c);for(let A=0;A<6;A+=1){const e=I(A/5,V,t);s.push(Q(e))}}}for(let A=0;A<24;A+=1){const e=(A+1)/25;s.push(Q(I(e,V,t)))}return s}function sg(A,e,g,V){const t=12;switch(e){case 9600:A.fillRect(g,V,8,t);break;case 9601:A.fillRect(g,V+21,8,3);break;case 9602:A.fillRect(g,V+18,8,6);break;case 9603:A.fillRect(g,V+15,8,9);break;case 9604:A.fillRect(g,V+t,8,t);break;case 9605:A.fillRect(g,V+9,8,15);break;case 9606:A.fillRect(g,V+6,8,18);break;case 9607:A.fillRect(g,V+3,8,21);break;case 9608:A.fillRect(g,V,8,og);break;case 9632:A.fillRect(g,V+6,8,12);break;case 9609:A.fillRect(g,V,7,og);break;case 9610:A.fillRect(g,V,6,og);break;case 9611:A.fillRect(g,V,5,og);break;case 9612:A.fillRect(g,V,4,og);break;case 9613:A.fillRect(g,V,3,og);break;case 9614:A.fillRect(g,V,2,og);break;case 9615:A.fillRect(g,V,1,og);break;case 9616:A.fillRect(g+4,V,4,og);break;case 9617:A.save(),A.globalAlpha=.25,A.fillRect(g,V,8,og),A.restore();break;case 9618:A.save(),A.globalAlpha=.5,A.fillRect(g,V,8,og),A.restore();break;case 9619:A.save(),A.globalAlpha=.75,A.fillRect(g,V,8,og),A.restore();break;case 9620:A.fillRect(g,V,8,3);break;case 9621:A.fillRect(g+7,V,1,og);break;case 9622:A.fillRect(g,V+t,4,t);break;case 9623:A.fillRect(g+4,V+t,4,t);break;case 9624:A.fillRect(g,V,4,t);break;case 9625:A.fillRect(g,V,4,og),A.fillRect(g+4,V+t,4,t);break;case 9626:A.fillRect(g,V,4,t),A.fillRect(g+4,V+t,4,t);break;case 9627:A.fillRect(g,V,8,t),A.fillRect(g,V+t,4,t);break;case 9628:A.fillRect(g,V,8,t),A.fillRect(g+4,V+t,4,t);break;case 9629:A.fillRect(g+4,V,4,t);break;case 9630:A.fillRect(g+4,V,4,t),A.fillRect(g,V+t,4,t);break;case 9631:A.fillRect(g+4,V,4,og),A.fillRect(g,V+t,4,t);break;case 129792:A.fillRect(g,V,4,8);break;case 129793:A.fillRect(g+4,V,4,8);break;case 129794:A.fillRect(g,V,8,8);break;case 129795:A.fillRect(g,V+8,4,8);break;case 129796:A.fillRect(g,V,4,8),A.fillRect(g,V+8,4,8);break;case 129797:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,4,8);break;case 129798:A.fillRect(g,V,8,8),A.fillRect(g,V+8,4,8);break;case 129799:A.fillRect(g+4,V+8,4,8);break;case 129800:A.fillRect(g,V,4,8),A.fillRect(g+4,V+8,4,8);break;case 129801:A.fillRect(g+4,V,4,8),A.fillRect(g+4,V+8,4,8);break;case 129802:A.fillRect(g,V,8,8),A.fillRect(g+4,V+8,4,8);break;case 129803:A.fillRect(g,V+8,8,8);break;case 129804:A.fillRect(g,V,4,8),A.fillRect(g,V+8,8,8);break;case 129805:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,8,8);break;case 129806:A.fillRect(g,V,8,8),A.fillRect(g,V+8,8,8);break;case 129807:A.fillRect(g,V+16,4,8);break;case 129808:A.fillRect(g,V,4,8),A.fillRect(g,V+16,4,8);break;case 129809:A.fillRect(g+4,V,4,8),A.fillRect(g,V+16,4,8);break;case 129810:A.fillRect(g,V,8,8),A.fillRect(g,V+16,4,8);break;case 129811:A.fillRect(g,V+8,4,16);break;case 129812:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,4,16);break;case 129813:A.fillRect(g,V,8,8),A.fillRect(g,V+8,4,16);break;case 129814:A.fillRect(g+4,V+8,4,8),A.fillRect(g,V+16,4,8);break;case 129815:A.fillRect(g,V,4,8),A.fillRect(g+4,V+8,4,8),A.fillRect(g,V+16,4,8);break;case 129816:A.fillRect(g+4,V,4,16),A.fillRect(g,V+16,4,8);break;case 129817:A.fillRect(g,V,8,8),A.fillRect(g+4,V+8,4,8),A.fillRect(g,V+16,4,8);break;case 129818:A.fillRect(g,V+8,8,8),A.fillRect(g,V+16,4,8);break;case 129819:A.fillRect(g,V,4,24),A.fillRect(g+4,V+8,4,8);break;case 129820:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,8,8),A.fillRect(g,V+16,4,8);break;case 129821:A.fillRect(g,V,8,16),A.fillRect(g,V+16,4,8);break;case 129822:A.fillRect(g+4,V+16,4,8);break;case 129823:A.fillRect(g,V,4,8),A.fillRect(g+4,V+16,4,8);break;case 129824:A.fillRect(g+4,V,4,8),A.fillRect(g+4,V+16,4,8);break;case 129825:A.fillRect(g,V,8,8),A.fillRect(g+4,V+16,4,8);break;case 129826:A.fillRect(g,V+8,4,8),A.fillRect(g+4,V+16,4,8);break;case 129827:A.fillRect(g,V,4,16),A.fillRect(g+4,V+16,4,8);break;case 129828:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,4,8),A.fillRect(g+4,V+16,4,8);break;case 129829:A.fillRect(g,V,8,8),A.fillRect(g,V+8,4,8),A.fillRect(g+4,V+16,4,8);break;case 129830:A.fillRect(g+4,V+8,4,16);break;case 129831:A.fillRect(g,V,4,8),A.fillRect(g+4,V+8,4,16);break;case 129832:A.fillRect(g,V,8,8),A.fillRect(g+4,V+8,4,16);break;case 129833:A.fillRect(g,V+8,8,8),A.fillRect(g+4,V+16,4,8);break;case 129834:A.fillRect(g,V,4,16),A.fillRect(g+4,V+8,4,16);break;case 129835:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,8,8),A.fillRect(g+4,V+16,4,8);break;case 129836:A.fillRect(g,V,8,16),A.fillRect(g+4,V+16,4,8);break;case 129837:A.fillRect(g,V+16,8,8);break;case 129838:A.fillRect(g,V,4,8),A.fillRect(g,V+16,8,8);break;case 129839:A.fillRect(g+4,V,4,8),A.fillRect(g,V+16,8,8);break;case 129840:A.fillRect(g,V,8,8),A.fillRect(g,V+16,8,8);break;case 129841:A.fillRect(g,V+8,4,8),A.fillRect(g,V+16,8,8);break;case 129842:A.fillRect(g,V,4,16),A.fillRect(g,V+16,8,8);break;case 129843:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,4,8),A.fillRect(g,V+16,8,8);break;case 129844:A.fillRect(g,V,8,8),A.fillRect(g,V+8,4,8),A.fillRect(g,V+16,8,8);break;case 129845:A.fillRect(g+4,V+8,4,8),A.fillRect(g,V+16,8,8);break;case 129846:A.fillRect(g,V,4,8),A.fillRect(g+4,V+8,4,8),A.fillRect(g,V+16,8,8);break;case 129847:A.fillRect(g+4,V,4,16),A.fillRect(g,V+16,8,8);break;case 129848:A.fillRect(g,V,8,8),A.fillRect(g+4,V+8,4,8),A.fillRect(g,V+16,8,8);break;case 129849:A.fillRect(g,V+8,8,16);break;case 129850:A.fillRect(g,V,4,24),A.fillRect(g+4,V+8,4,8),A.fillRect(g+4,V+16,4,8);break;case 129851:A.fillRect(g+4,V,4,8),A.fillRect(g,V+8,8,16)}}const ag=.05,cg=9.0375/20;const lg=new Set([57520,57521,57522,57523]),ug=.02,wg={foreground:"#000000",background:"#000000",palette:["#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000"]},hg=ke('',6);var dg=A=>hg.cloneNode(!0);const fg=ke('',4);var Dg=A=>fg.cloneNode(!0);const yg=ke('',6);var qg=A=>yg.cloneNode(!0);const kg=ke('',4);var pg=A=>kg.cloneNode(!0);const Lg=ke('',6);var Fg=A=>Lg.cloneNode(!0);const Mg=ke('',6);var mg=A=>Mg.cloneNode(!0);const Rg=ke('',4);var Ng=A=>Rg.cloneNode(!0);const Gg=ke('',2),Ug=ke('',6),Jg=ke('Unmute (m)',2),vg=ke('Mute (m)',2),bg=ke('',2),Sg=ke('
    Keyboard shortcuts (?)Fullscreen (f)
    ',18),Yg=ke('',6);function Kg(A){let e=Math.floor(A);const g=Math.floor(e/86400);e%=86400;const V=Math.floor(e/3600);e%=3600;const t=Math.floor(e/60);return e%=60,g>0?`${Tg(g)}:${Tg(V)}:${Tg(t)}:${Tg(e)}`:V>0?`${Tg(V)}:${Tg(t)}:${Tg(e)}`:`${Tg(t)}:${Tg(e)}`}function Tg(A){return A<10?`0${A}`:A.toString()}var Og=A=>{const e=A=>e=>{e.preventDefault(),A(e)},g=()=>"number"==typeof A.currentTime?Kg(A.currentTime):"--:--",V=()=>"number"==typeof A.remainingTime?"-"+Kg(A.remainingTime):g(),t=zA((()=>"number"==typeof A.duration?A.markers.filter((e=>e[0]{const e=A.currentTarget.offsetWidth,g=A.currentTarget.getBoundingClientRect(),V=A.clientX-g.left;return 100*Math.max(0,V/e)+"%"},[B,Q]=ZA(!1),C=function(A,e){let g=!0;return function(){if(g){g=!1;for(var V=arguments.length,t=new Array(V),I=0;Ig=!0),e)}}}(A.onSeekClick,50),i=e=>{e._marker||e.altKey||e.shiftKey||e.metaKey||e.ctrlKey||0!==e.button||(Q(!0),A.onSeekClick(I(e)))},o=A=>{A.altKey||A.shiftKey||A.metaKey||A.ctrlKey||B()&&C(I(A))},r=()=>{Q(!1)};return document.addEventListener("mouseup",r),_A((()=>{document.removeEventListener("mouseup",r)})),(()=>{const I=Sg.cloneNode(!0),B=I.firstChild,Q=B.firstChild,C=Q.nextSibling,r=B.nextSibling,n=r.nextSibling,E=n.firstChild,s=n.nextSibling,a=s.firstChild,c=A.ref;return"function"==typeof c?me(c,I):A.ref=I,Re(I,we(fe,{get when(){return A.isPausable},get children(){const g=Gg.cloneNode(!0);return Fe(g,"click",e(A.onPlayClick)),Re(g,we(De,{get children(){return[we(ye,{get when(){return A.isPlaying},get children(){return we(qg,{})}}),we(ye,{when:!0,get children(){return we(pg,{})}})]}})),g}}),B),Re(Q,g),Re(C,V),Re(r,we(fe,{get when(){return"number"==typeof A.progress||A.isSeekable},get children(){const g=Ug.cloneNode(!0),V=g.firstChild.nextSibling;return g.$$mousemove=o,g.$$mousedown=i,Re(g,we(de,{get each(){return t()},children:(g,V)=>(()=>{const t=Yg.cloneNode(!0),I=t.firstChild,B=I.nextSibling;var Q;return t.$$mousedown=A=>{A._marker=!0},Fe(t,"click",(Q=V(),e((()=>{A.onSeekClick({marker:Q})})))),Re(B,(()=>(A=>""===A[1]?Kg(A[0]):`${Kg(A[0])} - ${A[1]}`)(g))),xA((e=>{const V=(e=>e[0]/A.duration*100+"%")(g),B=!!(e=>"number"==typeof A.currentTime&&e[0]<=A.currentTime)(g);return V!==e._v$&&t.style.setProperty("left",e._v$=V),B!==e._v$2&&I.classList.toggle("ap-marker-past",e._v$2=B),e}),{_v$:void 0,_v$2:void 0}),t})()}),null),xA((e=>Me(V,{transform:`scaleX(${A.progress||0}`},e))),g}})),Re(I,we(fe,{get when(){return void 0!==A.isMuted},get children(){const g=bg.cloneNode(!0);return Fe(g,"click",e(A.onMuteClick)),Re(g,we(De,{get children(){return[we(ye,{get when(){return!0===A.isMuted},get children(){return[we(Ng,{}),Jg.cloneNode(!0)]}}),we(ye,{get when(){return!1===A.isMuted},get children(){return[we(mg,{}),vg.cloneNode(!0)]}})]}})),g}}),n),Fe(n,"click",e(A.onHelpClick)),Re(n,we(Dg,{}),E),Fe(s,"click",e(A.onFullscreenClick)),Re(s,we(Fg,{}),a),Re(s,we(dg,{}),a),xA((()=>I.classList.toggle("ap-seekable",!!A.isSeekable))),I})()};pe(["click","mousedown","mousemove"]);const Hg=ke('
    💥
    ',4);var Zg=A=>Hg.cloneNode(!0);const xg=ke('
    ',4);var Wg=A=>xg.cloneNode(!0);const zg=ke('
    ',4);var Xg=A=>(()=>{const e=zg.cloneNode(!0);return Re(e.firstChild,(()=>A.message)),xA((()=>e.classList.toggle("ap-was-playing",!!A.wasPlaying))),e})();const jg=ke('
    ',22);var $g=A=>(()=>{const e=jg.cloneNode(!0);var g;return Fe(e,"click",(g=A.onClick,A=>{A.preventDefault(),g(A)})),e})();pe(["click"]);const _g=ke("
  • space - pause / resume
  • ",4),Pg=ke("
  • / - rewind / fast-forward by 5 seconds
  • ",6),AV=ke("
  • Shift + / - rewind / fast-forward by 10%
  • ",8),eV=ke("
  • [ / ] - jump to the previous / next marker
  • ",6),gV=ke("
  • 0, 1, 2 ... 9 - jump to 0%, 10%, 20% ... 90%
  • ",10),VV=ke("
  • , / . - step back / forward, a frame at a time (when paused)
  • ",6),tV=ke("
  • m - mute / unmute audio
  • ",4),IV=ke('

    Keyboard shortcuts

    • f - toggle fullscreen mode
    • ? - show this help popup
    ',18);var BV=A=>(()=>{const e=IV.cloneNode(!0),g=e.firstChild,V=g.firstChild.firstChild.nextSibling,t=V.firstChild,I=t.nextSibling;var B;return Fe(e,"click",(B=A.onClose,A=>{A.preventDefault(),B(A)})),g.$$click=A=>{A.stopPropagation()},Re(V,we(fe,{get when(){return A.isPausable},get children(){return _g.cloneNode(!0)}}),t),Re(V,we(fe,{get when(){return A.isSeekable},get children(){return[Pg.cloneNode(!0),AV.cloneNode(!0),eV.cloneNode(!0),gV.cloneNode(!0),VV.cloneNode(!0)]}}),t),Re(V,we(fe,{get when(){return A.hasAudio},get children(){return tV.cloneNode(!0)}}),I),e})();pe(["click"]);const QV=ke('
    ',4);var CV=A=>{const e=A.logger,g=A.core,V=A.autoPlay,t=A.charW,I=A.charH,B=A.bordersW,Q=A.bordersH,C=A.theme??"auto/asciinema",i="auto/"===C.slice(0,5),o=i?C.slice(5):C,[r,n]=_e({containerW:0,containerH:0,isPausable:!0,isSeekable:!0,isFullscreen:!1,currentTime:null,remainingTime:null,progress:null}),[E,s]=ZA(!1),[a,c]=ZA(void 0),[l,u]=ZA(!1),[w,h]=ZA(V?null:"start"),[d,f]=ZA(null),[D,y]=ZA(!1),[q,k]=ZA({cols:A.cols,rows:A.rows},{equals:(A,e)=>A.cols===e.cols&&A.rows===e.rows}),[p,L]=ZA(null),[F,M]=_e([]),[m,R]=ZA(!1),[N,G]=ZA(!1),[U,J]=ZA(null),v=zA((()=>q().cols||80)),b=zA((()=>q().rows||24)),S=()=>!1===A.controls?0:32;let Y,K,T,O,H,Z,x;function W(){y(!1),cA(),lA()}const z=new Promise((A=>{x=A})),X=A=>{let{isPausable:e,isSeekable:g}=A;n({isPausable:e,isSeekable:g}),x()},j=A=>{XA((()=>{void 0!==A.duration&&L(A.duration),void 0!==A.markers&&M(A.markers),void 0!==A.hasAudio&&c(!A.hasAudio&&void 0),void 0!==A.size&&k(A.size),void 0!==A.theme&&J(A.theme)}))},$=()=>{h(null)},_=()=>{XA((()=>{s(!0),u(!0),h(null),y(!0),aA()}))},P=()=>{XA((()=>{s(!1),W()}))},AA=()=>{XA((()=>{s(!1),W(),h("loader")}))},eA=A=>{let{message:e}=A;XA((()=>{s(!1),W(),void 0!==e&&(f(e),h("info"))}))},gA=A=>{c(A)},VA={renders:0},tA=A=>{let{message:g}=A;XA((()=>{s(!1),W(),void 0!==g&&(f(g),h("info"))})),e.debug("stats",VA)},IA=()=>{h("error")},BA=()=>{lA()};g.addEventListener("ready",X),g.addEventListener("metadata",j),g.addEventListener("play",$),g.addEventListener("playing",_),g.addEventListener("idle",P),g.addEventListener("loading",AA),g.addEventListener("offline",eA),g.addEventListener("muted",gA),g.addEventListener("ended",tA),g.addEventListener("errored",IA),g.addEventListener("seeked",BA);const QA=()=>{Z=new ResizeObserver(function(A,e){let g;return function(){for(var V=arguments.length,t=new Array(V),I=0;IA.apply(this,t)),e)}}((A=>{n({containerW:T.offsetWidth,containerH:T.offsetHeight}),T.dispatchEvent(new CustomEvent("resize",{detail:{el:O}}))}),10)),Z.observe(T)};$A((async()=>{e.info("view: mounted"),e.debug("view: font measurements",{charW:t,charH:I}),QA(),n({containerW:T.offsetWidth,containerH:T.offsetHeight})})),_A((()=>{g.removeEventListener("ready",X),g.removeEventListener("metadata",j),g.removeEventListener("play",$),g.removeEventListener("playing",_),g.removeEventListener("idle",P),g.removeEventListener("loading",AA),g.removeEventListener("offline",eA),g.removeEventListener("muted",gA),g.removeEventListener("ended",tA),g.removeEventListener("errored",IA),g.removeEventListener("seeked",BA),g.stop(),cA(),Z.disconnect()}));const CA=zA((()=>{const e=t*v()+B,g=I*b()+Q;let V=A.fit??"width";if("both"===V||r.isFullscreen){V=r.containerW/(r.containerH-S())>e/g?"height":"width"}if(!1===V||"none"===V)return{};if("width"===V){const A=r.containerW/e;return{scale:A,width:r.containerW,height:g*A+S()}}if("height"===V){const A=(r.containerH-S())/g;return{scale:A,width:e*A,height:r.containerH}}throw new Error(`unsupported fit mode: ${V}`)})),iA=()=>{n("isFullscreen",document.fullscreenElement??document.webkitFullscreenElement)},oA=()=>{r.isFullscreen?(document.exitFullscreen??document.webkitExitFullscreen??(()=>{})).apply(document):(T.requestFullscreen??T.webkitRequestFullscreen??(()=>{})).apply(T)},rA=()=>{N()?G(!1):(g.pause(),G(!0))},nA=A=>{if(!(A.altKey||A.metaKey||A.ctrlKey)){if(" "==A.key)g.togglePlay();else if(","==A.key)g.step(-1).then(lA);else if("."==A.key)g.step().then(lA);else if("f"==A.key)oA();else if("m"==A.key)fA();else if("["==A.key)g.seek({marker:"prev"});else if("]"==A.key)g.seek({marker:"next"});else if(A.key.charCodeAt(0)>=48&&A.key.charCodeAt(0)<=57){const e=(A.key.charCodeAt(0)-48)/10;g.seek(100*e+"%")}else if("?"==A.key)rA();else if("ArrowLeft"==A.key)A.shiftKey?g.seek("<<<"):g.seek("<<");else if("ArrowRight"==A.key)A.shiftKey?g.seek(">>>"):g.seek(">>");else{if("Escape"!=A.key)return;G(!1)}A.stopPropagation(),A.preventDefault()}},EA=()=>{r.isFullscreen&&uA(!0)},sA=()=>{r.isFullscreen||uA(!1)},aA=()=>{K=setInterval(lA,100)},cA=()=>{clearInterval(K)},lA=async()=>{const A=await g.getCurrentTime(),e=await g.getRemainingTime(),V=await g.getProgress();n({currentTime:A,remainingTime:e,progress:V})},uA=A=>{clearTimeout(Y),A&&(Y=setTimeout((()=>uA(!1)),2e3)),R(A)},wA=zA((()=>i?U():null)),hA=()=>{z.then((()=>g.play()))},dA=()=>{z.then((()=>g.togglePlay()))},fA=()=>{z.then((()=>{!0===a()?g.unmute():g.mute()}))},DA=A=>{z.then((()=>g.seek(A)))},yA=(()=>{const e=QV.cloneNode(!0),V=e.firstChild;"function"==typeof T?me(T,e):T=e,e.addEventListener("webkitfullscreenchange",iA),e.addEventListener("fullscreenchange",iA),e.$$mousemove=EA,e.$$keydown=nA;return"function"==typeof O?me(O,V):O=V,V.$$mousemove=()=>uA(!0),V.addEventListener("mouseleave",sA),Re(V,we(rg,{get cols(){return v()},get rows(){return b()},get scale(){return CA()?.scale},get blinking(){return D()},get lineHeight(){return A.terminalLineHeight},preferEmbeddedTheme:i,core:g,get stats(){return VA}}),null),Re(V,we(fe,{get when(){return!1!==A.controls},get children(){return we(Og,{get duration(){return p()},get currentTime(){return r.currentTime},get remainingTime(){return r.remainingTime},get progress(){return r.progress},markers:F,get isPlaying(){return E()||"loader"==w()},get isPausable(){return r.isPausable},get isSeekable(){return r.isSeekable},get isMuted(){return a()},onPlayClick:dA,onFullscreenClick:oA,onHelpClick:rA,onSeekClick:DA,onMuteClick:fA,ref(A){"function"==typeof H?H(A):H=A}})}}),null),Re(V,we(De,{get children(){return[we(ye,{get when(){return"start"==w()},get children(){return we($g,{onClick:hA})}}),we(ye,{get when(){return"loader"==w()},get children(){return we(Wg,{})}}),we(ye,{get when(){return"error"==w()},get children(){return we(Zg,{})}})]}}),null),Re(V,we(Qg,{name:"slide",get children(){return we(fe,{get when(){return"info"==w()},get children(){return we(Xg,{get message(){return d()},get wasPlaying(){return l()}})}})}}),null),Re(V,we(fe,{get when(){return N()},get children(){return we(BV,{onClose:()=>G(!1),get isPausable(){return r.isPausable},get isSeekable(){return r.isSeekable},get hasAudio(){return void 0!==a()}})}}),null),xA((g=>{const t=!!(!0===A.controls||"auto"===A.controls&&m()),I=`ap-player ap-default-term-ff asciinema-player-theme-${o}`,B=(()=>{const e={};!1!==A.fit&&"none"!==A.fit||void 0===A.terminalFontSize||("small"===A.terminalFontSize?e["font-size"]="12px":"medium"===A.terminalFontSize?e["font-size"]="18px":"big"===A.terminalFontSize?e["font-size"]="24px":e["font-size"]=A.terminalFontSize);const g=CA();void 0!==g.width&&(e.width=`${g.width}px`,e.height=`${g.height}px`),void 0!==A.terminalFontFamily&&(e["--term-font-family"]=A.terminalFontFamily);const V=wA();return V&&(e["--term-color-foreground"]=V.foreground,e["--term-color-background"]=V.background),e})();var Q,C;return t!==g._v$&&e.classList.toggle("ap-hud",g._v$=t),I!==g._v$2&&(Q=V,null==(C=g._v$2=I)?Q.removeAttribute("class"):Q.className=C),g._v$3=Me(V,B,g._v$3),g}),{_v$:void 0,_v$2:void 0,_v$3:void 0}),e})();return yA};function iV(A,e){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const V=function(A,e){const g=80,V=24,t=document.createElement("div");t.className="ap-default-term-ff",t.style.height="0px",t.style.overflow="hidden",t.style.fontSize="15px",void 0!==A&&t.style.setProperty("--term-font-family",A);const I=document.createElement("div");I.className="ap-term",I.style.width=`${g}ch`,I.style.height=V*(e??1.3333333333)+"em",I.style.fontSize="100%",t.appendChild(I),document.body.appendChild(t);const B={charW:I.clientWidth/g,charH:I.clientHeight/V,bordersW:I.offsetWidth-I.clientWidth,bordersH:I.offsetHeight-I.clientHeight};return document.body.removeChild(t),B}(g.terminalFontFamily,g.terminalLineHeight),t={core:A,logger:g.logger,cols:g.cols,rows:g.rows,fit:g.fit,controls:g.controls,autoPlay:g.autoPlay,terminalFontSize:g.terminalFontSize,terminalFontFamily:g.terminalFontFamily,terminalLineHeight:g.terminalLineHeight,theme:g.theme,...V};let I;const B=function(A,e,g,V={}){let t;return HA((V=>{t=V,e===document?A():Re(e,A(),e.firstChild?null:void 0,g)}),V.owner),()=>{t(),e.textContent=""}}((()=>(I=we(CV,t),I)),e);return{el:I,dispose:B}}pe(["keydown","mousemove"]);const oV=["audioUrl","autoPlay","autoplay","boldIsBright","cols","idleTimeLimit","loop","markers","pauseOnMarkers","poster","preload","rows","speed","startAt"],rV=["autoPlay","autoplay","cols","controls","fit","rows","terminalFontFamily","terminalFontSize","terminalLineHeight","theme"];return A.create=function(A,e){let g=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const V=g.logger??new a,t=new LA(A,function(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=Object.fromEntries(Object.entries(A).filter((A=>{let[e]=A;return oV.includes(e)})));return g.autoPlay??=g.autoplay,g.speed??=1,{...g,...e}}(g,{logger:V})),{el:I,dispose:B}=iV(t,e,function(A){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const g=Object.fromEntries(Object.entries(A).filter((A=>{let[e]=A;return rV.includes(e)})));return g.autoPlay??=g.autoplay,g.controls??="auto",{...g,...e}}(g,{logger:V})),Q=t.init(),C={el:I,dispose:B,getCurrentTime:()=>Q.then(t.getCurrentTime.bind(t)),getDuration:()=>Q.then(t.getDuration.bind(t)),play:()=>Q.then(t.play.bind(t)),pause:()=>Q.then(t.pause.bind(t)),seek:A=>Q.then((()=>t.seek(A))),addEventListener:(A,e)=>t.addEventListener(A,e.bind(C))};return C},A}({}); diff --git a/packages/landing/public/casts/claude.cast b/packages/landing/public/casts/claude.cast deleted file mode 100644 index 0df7f461b..000000000 --- a/packages/landing/public/casts/claude.cast +++ /dev/null @@ -1,457 +0,0 @@ -{"version": 3, "term": {"cols": 100, "rows": 30, "type": "tmux-256color", "version": "tmux 3.6a"}, "timestamp": 1779224009, "idle_time_limit": 2.0, "command": "env ZDOTDIR=/tmp/cast-claude-zsh zsh -i", "env": {"SHELL": "/bin/zsh"}} -[0.0, "o", "\u001b[2D\u001b[4B\r\u001b[2C\u001b[4ABuild\u001b[1Cme\u001b[1Ca\u001b[1Cworking\u001b[1CLobu\u001b[1Csupport-triage\u001b[1Cagent.\u001b[1CMake\u001b[1Cthese\u001b[1Cdecisions\u001b[1Cyourself,\u001b[1Cno\u001b[1Cquestions:\r\u001b[1B HTTP-only agent. Entities: customer (email), ticket (title, severity, customer_email). One\u001b[K\r\u001b[2C\u001b[1Breactive watcher on ticket.created that\u001b[1Cextracts\u001b[1Cseverity.\u001b[1CSteps:\u001b[1C1)\u001b[1Clobu\u001b[1Cinit\u001b[1Csupport-bot -y\u001b[K\r\u001b[2C\u001b[1B--no-sentry --no-slack-preview 2) Write support-bot/models/schema.yaml with the entities and\u001b[K\r\r\n\u001b[2Cwatcher\u001b[1C3)\u001b[1Clobu\u001b[1Cvalidate\u001b[1C4)\u001b[1Ccat\u001b[1Cthe\u001b[1Cfinal\u001b[1Clobu.toml\u001b[1Cand\u001b[1Cschema.yaml\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m0\u001b[38;5;246m \u001b[38;5;34m0%\u001b[3"] -[0.0, "o", "8;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[51C\u001b[38;5;246m0\u001b[1Ctokens\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[17CClaude\u001b[1Cin\u001b[1CChrome\u001b[1Cenabled\u001b[1C\u00b7\u001b[1C/chrome\u001b[39m\r\r\n\u001b[69C\u001b[4A"] -[0.5, "o", "\u001b]0;\u2802 Claude Code\u0007"] -[0.004, "o", "\u001b[69D\u001b[4B\r\u001b[9A\u001b[48;5;237m\u001b[38;5;239m\u276f \u001b[38;5;231mBuild me a working Lobu support-triage agent. Make these decisions yourself, no questions: \u001b[39m \r\u001b[1B \u001b[38;5;231mHTTP-only agent. Entities: customer (email), ticket (title, severity, customer_email). One \u001b[39m \r\u001b[1B \u001b[38;5;231mreactive watcher on ticket.created that extracts severity. Steps: 1) lobu init support-bot -y \u001b[39m \r\u001b[1B \u001b[38;5;231m--no-sentry --no-slack-preview 2) Write support-bot/models/schema.yaml with the entities and \u001b[39m \r\u001b[1B \u001b[38;5;231mwatcher 3) lobu validate 4) cat the final lobu.toml and schema.yaml\u001b[39m \r\u001b[2C\u001b[1B\u001b[49m\u001b[K\r\u001b[1B\u001b[38;5;174m\u00b7\u001b[39m \u001b[38;5;174mFluttering\u2026 \u001b[38;5;246m(0s)\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m0\u001b[38;5;246m \u001b[38;5;34m0%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[51C\u001b[38;5;246m0\u001b[1Ctokens\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[17CClaude\u001b[1Cin\u001b[1CChrome\u001b[1Cenabled\u001b[1C\u00b7\u001b[1C/chrome\u001b[39m\r\r\n\u001b[2C\u001b[4A"] -[0.21, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2722\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.106, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.106, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.107, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.159, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273d\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.227, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.043, "o", "\u001b]0;\u2810 Claude Code\u0007"] -[0.009, "o", "\u001b[2D\u001b[4B\r\u001b[2C\u001b[7A\u001b[38;5;216mF\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2736\u001b[2C\u001b[38;5;216ml\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.039, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.001, "o", "\u001b[2D\u001b[4B\r\u001b[15C\u001b[7A\u001b[38;5;246m1\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.015, "o", "\u001b[2D\u001b[4B\r\u001b[4C\u001b[7A\u001b[38;5;216mu\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.053, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2733\u001b[1CF\u001b[2C\u001b[38;5;216mt\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[3C\u001b[7A\u001b[38;5;174ml\u001b[2C\u001b[38;5;216mt\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[4C\u001b[7A\u001b[38;5;174mut\u001b[1C\u001b[38;5;216mer\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.05, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2722\u001b[5Ct\u001b[2C\u001b[38;5;216mi\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[7C\u001b[7A\u001b[38;5;174me\u001b[2C\u001b[38;5;216mn\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.053, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u00b7\u001b[7Cr\u001b[2C\u001b[38;5;216mg\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.055, "o", "\u001b[2D\u001b[4B\r\u001b[9C\u001b[7A\u001b[38;5;174mi\u001b[2C\u001b[38;5;216m\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.053, "o", "\u001b[2D\u001b[4B\r\u001b[10C\u001b[7A\u001b[38;5;174mn\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.049, "o", "\u001b[2D\u001b[4B\r\u001b[11C\u001b[7A\u001b[38;5;174mg\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.055, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2722\u001b[11C\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.157, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.114, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2736\u001b[16C\u001b[38;5;246m \u00b7 \u001b[38;5;249mthinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.043, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.121, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273d\u001b[14C\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.052, "o", "\u001b[2D\u001b[4B\r\u001b[20C\u001b[7A\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.208, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273b\u001b[19C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.023, "o", "\u001b[2D\u001b[4B\r\u001b[62C\u001b[1A\u001b[38;5;220mauto mode unavailable for this model\u001b[39m\r\r\n\u001b[2C\u001b[4A"] -[0.085, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.055, "o", "\u001b[2D\u001b[4B\r\u001b[12C\u001b[7A\u001b[38;5;216m\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.053, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2733\u001b[19C\u001b[38;5;246mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.162, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2722\u001b[10C\u001b[38;5;216mg\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.108, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u00b7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.04, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.012, "o", "\u001b[2D\u001b[4B\r\u001b[10C\u001b[7A\u001b[38;5;216mn\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.16, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2722\u001b[14C\u001b[38;5;246m3\u001b[4C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.052, "o", "\u001b[2D\u001b[4B\r\u001b[9C\u001b[7A\u001b[38;5;216mi\u001b[2C\u001b[38;5;174m\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.016, "o", "\u001b[2D\u001b[4B\r\u001b[20C\u001b[7A\u001b[38;5;246m\u2193\u001b[39m \u001b[38;5;246m13 tokens \u00b7 \u001b[38;5;247mthinking\u001b[38;5;246m)\r\u001b[86C\u001b[5B56943\u001b[39m\r\r\n\r\n\u001b[2C\u001b[4A"] -[0.038, "o", "\u001b[2D\u001b[4B\r\u001b[22C\u001b[7A\u001b[38;5;246m25\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.053, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2733\u001b[21C\u001b[38;5;246m38\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.056, "o", "\u001b[2D\u001b[4B\r\u001b[22C\u001b[7A\u001b[38;5;246m50\u001b[10C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.05, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u2736\u001b[7C\u001b[38;5;216mr\u001b[2C\u001b[38;5;174mg\u001b[10C\u001b[38;5;246m63\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[22C\u001b[7A\u001b[38;5;246m75\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.016, "o", "\u001b[2D\u001b[4B\r\u001b[22C\u001b[7A\u001b[38;5;246m88\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.034, "o", "\u001b[2D\u001b[4B\r\u001b[7A\u001b[38;5;174m\u273b\u001b[21C\u001b[38;5;246m100 tokens \u00b7 \u001b[38;5;248mthinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.054, "o", "\u001b[2D\u001b[4B\r\u001b[23C\u001b[7A\u001b[38;5;246m13\u001b[10C\u001b[38;5;249mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[4A"] -[0.042, "o", "\u001b[2D\u001b[4B\r\u001b[17C\u001b[2A\u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mcast-clau\u001b[1Ce-dir\u001b[44C\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[22m\u001b[39m\u001b[K\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m56943\u001b[1Ctokens\u001b[39m\r\r\n\u001b[62C\u001b[38;5;220mauto\u001b[1Cmode\u001b[1Cunavailable\u001b[1Cfor\u001b[1Cthis\u001b[1Cmodel\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[6C\u001b[38;5;216me\u001b[2C\u001b[38;5;174mn\u001b[12C\u001b[38;5;246m25\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.049, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;231m\u23fa\u001b[1C\u001b[39mI'll build a working Lobu support-triage agent\u001b[1Cfollowing\u001b[1Cthose\u001b[1Cexact\u001b[1Csteps.\r\u001b[2B\u001b[38;5;174m\u273d\u001b[39m \u001b[38;5;174mFlutt\u001b[38;5;216meri\u001b[38;5;174mng\u2026 \u001b[38;5;246m(3s \u00b7 \u2193\u001b[39m \u001b[38;5;246m138 tokens \u00b7 \u001b[38;5;249mthinking\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177mdemo\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b"] -[0.0, "o", "[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[15C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m56943\u001b[1Ctokens\u001b[39m\r\r\n\u001b[62C\u001b[38;5;220mauto\u001b[1Cmode\u001b[1Cunavailable\u001b[1Cfor\u001b[1Cthis\u001b[1Cmodel\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m50\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.036, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m63\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.056, "o", "\u001b[2D\u001b[7B\r\u001b[6C\u001b[10A\u001b[38;5;216mt\u001b[2C\u001b[38;5;174mi\u001b[13C\u001b[38;5;246m75\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m88\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[21C\u001b[38;5;246m200\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.003, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m13\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mBash\u001b[22m(lobu init support-bot -y --no-sentry --no-slack-preview)\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0Waiting\u2026\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;174m\u273b\u001b[39m \u001b[38;5;174mFlut\u001b[38;5;216mter\u001b[38;5;174ming\u2026 \u001b[38;5;246m(3s \u00b7 \u2193\u001b[1C225 tokens \u00b7 \u001b[38;5;249mthinking\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38"] -[0.0, "o", ";5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[44C\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[22m\u001b[39m\u001b[K\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m56943\u001b[1Ctokens\u001b[39m\r\r\n\u001b[62C\u001b[38;5;220mauto\u001b[1Cmode\u001b[1Cunavailable\u001b[1Cfor\u001b[1Cthis\u001b[1Cmodel\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.015, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;246m \r\u001b[5C\u001b[1BRunn\r\u001b[6C\u001b[2B\u001b[38;5;174mter\u001b[14C\u001b[38;5;246m38\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.034, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[22C\u001b[38;5;246m50\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.059, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m63\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.049, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[22C\u001b[38;5;246m75\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[15C\u001b[10A\u001b[38;5;246m4\u001b[7C88\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;180mFluttering\u2026\u001b[9C\u001b[38;5;246m300\u001b[10C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[23C\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.056, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m13\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u00b7\u001b[23C\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m22\u001b[10C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;216mFluttering\u2026\u001b[11C\u001b[38;5;246m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.035, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;246m\u23fa\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[22C\u001b[38;5;246m30\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m1\u001b[10Cthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[23C\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[23C\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[23C\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[15C\u001b[10A\u001b[38;5;246m5\u001b[8C8\u001b[10C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;180mFluttering\u2026\u001b[10C\u001b[38;5;246m40\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m1\u001b[10C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[23C\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.021, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;114m\u23fa\r\u001b[5C\u001b[1B\u001b[39mCreating\u001b[1Cproject\u001b[1Cin:\u001b[1C/private/tmp/demo/support-bot\r\u001b[2B \u001b[1C - Creating Lobu project...\u001b[K\r\u001b[5C\u001b[1B\u2714\u001b[1CProject\u001b[1Ccreated\u001b[1Csuccessfully!\r\u001b[1B\u001b[K\r\u001b[1B \u001b[2C\u2713\u001b[1CLobu\u001b[1Cinitialized!\r\u001b[1B\u001b[K\r\u001b[2C\u001b[1B Next steps:\u001b[K\r\u001b[2C\u001b[1B\u001b[K\r\u001b[2C\u001b[1B 1. cd support-bot\u001b[K\r\u001b[7C\u001b[1B2.\u001b[1CStart\u001b[1Cthe\u001b[1Clocal\u001b[1Cstack:\u001b[1Clobu\u001b[1Crun\u001b[1C(uses\u001b[1CPGlite\u001b[1Cby\u001b[1Cdefault)\u001b[20C\u001b[K\r\u001b[12C\u001b[1BOptional:\u001b[1Cset\u001b[1CDATABASE_URL\u001b[1Cin\u001b[1C.env\u001b[1Cto\u001b[1Cuse\u001b[1Cexternal Postgres instead.\u001b[K\r\r\n\u001b[7C3.\u001b[1CAPI\u001b[1Cdocs:\u001b[1C\u001b]8;id=12pc3wo;http://localhost:8787/api/docs\u0007\u001b[94mhttp://localhost:8787/api/docs\u001b[39m\u001b]8;;\u0007\r\r\n\r\r\n\u001b[7CSee\u001b[1CREADME.md\u001b[1Cfor\u001b[1Clayout,\u001b[1CAGENTS.md\u001b[1Cfor\u001b[1Cthe\u001b[1Cagent\u001b[1Ccontract.\r\r\n\r\r\n\u001b[38;5;174m\u2736\u001b[1CFluttering\u2026\u001b[1C\u001b[38;5;246m(5s\u001b[1C\u00b7\u001b[1C\u2191\u001b[1C343\u001b[1Ctokens\u001b[1C\u00b7\u001b[1C\u001b[38;5;248mthinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38"] -[0.0, "o", ";5;246m57228\u001b[1Ctokens\u001b[39m\r\r\n\u001b[62C\u001b[38;5;220mauto\u001b[1Cmode\u001b[1Cunavailable\u001b[1Cfor\u001b[1Cthis\u001b[1Cmodel\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.092, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[23C\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m5\u001b[10C\u001b[38;5;249mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[1C\u001b[38;5;216mF\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[3C\u001b[10A\u001b[38;5;216ml\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u00b7\u001b[3C\u001b[38;5;216mu\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;174mF\u001b[2C\u001b[38;5;216mt\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.006, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.046, "o", "\u001b[2D\u001b[7B\r\u001b[3C\u001b[10A\u001b[38;5;174ml\u001b[2C\u001b[38;5;216mt\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[4C\u001b[10A\u001b[38;5;174mu\u001b[2C\u001b[38;5;216me\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[5C\u001b[10A\u001b[38;5;174mt\u001b[2C\u001b[38;5;216mr\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[5Ct\u001b[2C\u001b[38;5;216mi\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[7C\u001b[10A\u001b[38;5;174me\u001b[2C\u001b[38;5;216mn\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[7Cr\u001b[2C\u001b[38;5;216mg\u001b[3C\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[9C\u001b[10A\u001b[38;5;174mi\u001b[2C\u001b[38;5;216m\u2026\u001b[22C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[9Cn\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[11C\u001b[10A\u001b[38;5;174mg\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[12C\u001b[10A\u001b[38;5;174m\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[34C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.108, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.132, "o", "\u001b[2D\u001b[7B\r\u001b[35C\u001b[10A\u001b[38;5;246mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.044, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.062, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.159, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[14C\u001b[38;5;246m7\u001b[19C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u00b7\u001b[1C\u001b[38;5;216mF\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[3C\u001b[10A\u001b[38;5;216ml\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[4C\u001b[10A\u001b[38;5;216mu\u001b[30C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;174mF\u001b[2C\u001b[38;5;216mt\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[2Cl\u001b[2C\u001b[38;5;216mt\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[4C\u001b[10A\u001b[38;5;174mu\u001b[2C\u001b[38;5;216me\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[5C\u001b[10A\u001b[38;5;174mt\u001b[2C\u001b[38;5;216mr\u001b[26C\u001b[38;5;249mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[5Ct\u001b[2C\u001b[38;5;216mi\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[7C\u001b[10A\u001b[38;5;174mer\u001b[1C\u001b[38;5;216mng\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[8Ci\u001b[2C\u001b[38;5;216m\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.031, "o", "\u001b[2D\u001b[7B\r\u001b[10C\u001b[10A\u001b[38;5;174mng\u2026\u001b[7C\u001b[38;5;246m\u2193\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.014, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.074, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.213, "o", "\u001b[2D\u001b[7B\r\u001b[15C\u001b[10A\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.018, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m59\r\u001b[88C\u001b[8B406\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mBash\u001b[22m(ls -la /private/tmp/demo/support-bot/)\r\u001b[2B\u001b[38;5;174m\u273d\u001b[39m \u001b[38;5;174mFluttering\u2026 \u001b[38;5;246m(8s \u00b7 \u2193\u001b[39m \u001b[38;5;246m409 tokens \u00b7 \u001b[38;5;249mthinking\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177mdemo\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permi"] -[0.0, "o", "ssions on\u001b[38;5;246m (shift+tab to cycle)\u001b[15C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m57406\u001b[1Ctokens\u001b[39m\r\r\n\u001b[62C\u001b[38;5;220mauto\u001b[1Cmode\u001b[1Cunavailable\u001b[1Cfor\u001b[1Cthis\u001b[1Cmodel\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[22C\u001b[38;5;246m21\u001b[10C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.018, "o", "\u001b[2D\u001b[7B\r\u001b[12A\u001b[38;5;114m\u23fa\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0\u001b[39mtotal\u001b[1C56\r\u001b[1B \u001b[1C drwxr-xr-x@ 11 dev wheel 352 19\u001b[1CMay\u001b[1C21:53\u001b[1C.\r\u001b[5C\u001b[1Bdrwxr-xr-x@\u001b[2C3\u001b[1Cdev\u001b[2Cwheel\u001b[4C96\u001b[1C19\u001b[1CMay\u001b[1C21:53\u001b[1C..\r\u001b[1B -rw-------@ 1 dev wheel 879 19 May 21:53 .env\u001b[K\r\u001b[1B \u001b[2C-rw-r--r--@\u001b[2C1\u001b[1Cdev\u001b[2Cwheel\u001b[3C430\u001b[1C19\u001b[1CMay\u001b[1C21:53\u001b[1C.gitignore\r\u001b[1B drwxr-xr-x@ 3 dev wheel 96 19 May 21:53 agents\u001b[K\r\u001b[2C\u001b[1B -rw-r--r--@ 1 dev wheel 11\u001b[1C19\u001b[1CMay\u001b[1C21:53\u001b[1CAGENTS.md\r\u001b[2C\u001b[1B drwxr-xr-x@ 2 dev wheel 64 19 May 21:53 data\u001b[K\r\u001b[2C\u001b[1B -rw-r--r--@ 1 dev wheel 1451 19 May\u001b[1C21:53\u001b[1Clobu.toml\r\u001b[5C\u001b[1B-rw-r--r--@\u001b[2C1\u001b[1Cdev\u001b[2Cwheel\u001b[2C2559\u001b[1C19\u001b[1CMay\u001b[1C21:53\u001b[1CREADME.md\u001b[21C\u001b[K\r\u001b[5C\u001b[1Bdrwxr-xr-x@\u001b[2C3\u001b[1Cdev\u001b[2Cwheel\u001b[4C96\u001b[1C19\u001b[1CMay\u001b[1C21:53\u001b[1Cskills\u001b[K\r\r\n\u001b[5C-rw-r--r--@\u001b[2C1\u001b[1Cdev\u001b[2Cwheel\u001b[2C6195\u001b[1C19\u001b[1CMay\u001b[1C21:53\u001b[1CTESTING.md\r\r\n\r\r\n\u001b[38;5;174m\u273b\u001b[1C\u001b[38;5;180mFluttering\u2026\u001b[38;5;174m \u001b[3"] -[0.0, "o", "8;5;246m(8s\u001b[1C\u00b7\u001b[1C\u2193\u001b[1C440\u001b[1Ctokens\u001b[1C\u00b7\u001b[1C\u001b[38;5;248mthinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[2"] -[0.0, "o", "2m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m57496\u001b[1Ctokens\u001b[39m\r\r\n\u001b[62C\u001b[38;5;220mauto\u001b[1Cmode\u001b[1Cunavailable\u001b[1Cfor\u001b[1Cthis\u001b[1Cmodel\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.019, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;174mFluttering\u2026\u001b[7C\u001b[38;5;246m\u2191\u001b[3C6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.02, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[22C\u001b[38;5;246m51\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[23C\u001b[38;5;246m9\u001b[10C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m62\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[23C\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m5\u001b[10Cthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u00b7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.04, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.012, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;216mF\u001b[21C\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.067, "o", "\u001b[2D\u001b[7B\r\u001b[3C\u001b[10A\u001b[38;5;216ml\u001b[20C\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.067, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[1CF\u001b[1C\u001b[38;5;216mut\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[3C\u001b[10A\u001b[38;5;174ml\u001b[2C\u001b[38;5;216mt\u001b[17C\u001b[38;5;246m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[3Cu\u001b[2C\u001b[38;5;216me\u001b[15C\u001b[38;5;246m70\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.049, "o", "\u001b[2D\u001b[7B\r\u001b[5C\u001b[10A\u001b[38;5;174mt\u001b[2C\u001b[38;5;216mr\u001b[15C\u001b[38;5;246m1\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[5Ct\u001b[2C\u001b[38;5;216mi\u001b[5C\u001b[38;5;246m9\u001b[19C\u001b[38;5;247mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[7C\u001b[10A\u001b[38;5;174me\u001b[2C\u001b[38;5;216mn\u001b[13C\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[8C\u001b[10A\u001b[38;5;174mr\u001b[2C\u001b[38;5;216mg\u001b[12C\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[8Ci\u001b[2C\u001b[38;5;216m\u2026\u001b[11C\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10C\u001b[10A\u001b[38;5;174mn\u001b[24C\u001b[38;5;248mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[10Cg\u001b[12C\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[12C\u001b[10A\u001b[38;5;174m\u2026\u001b[11C\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[35C\u001b[10A\u001b[38;5;249mthinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.069, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[23C\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.01, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.041, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.155, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u00b7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[15C\u001b[10A\u001b[38;5;246m10s \u00b7 \u2191\u001b[39m \u001b[38;5;246m479 tokens \u00b7 \u001b[38;5;249mstill thinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[36C\u001b[10A\u001b[38;5;145mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.155, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2722\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.103, "o", "\u001b[2D\u001b[7B\r\u001b[33C\u001b[1A\u001b[38;5;220mYou've used 90% of your weekly limit \u00b7\u001b[1Cresets 8am (Eu\u001b[1Cope/London)\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.019, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.088, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.081, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.078, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.103, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.217, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.109, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m1\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.103, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;180m\u2733\u001b[1CFluttering\u2026 \u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.056, "o", "\u001b[2D\u001b[7B\r\u001b[36C\u001b[10A\u001b[38;5;181mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;180m\u2722\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.042, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2193\u001b[2C92\r\u001b[88C\u001b[8B929\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mBash\u001b[22m(ls -la /private/tmp/demo/support-bot/models/\u001b[1C2>/dev/null\u001b[1C||\u001b[1Cecho\u001b[1C\"models\u001b[1Cdirectory\r\u001b[3C\u001b[1Bdoesn't\u001b[1Cexist\u001b[1Cyet\")\r\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;179m\u2722\u001b[39m \u001b[38;5;179mFluttering\u2026 \u001b[38;5;246m(11s \u00b7 \u2193\u001b[1C517 tokens \u00b7 \u001b[38;5;181mstill thinking\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[3"] -[0.0, "o", "8;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[44C\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[22m\u001b[39m\u001b[K\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m57929\u001b[1Ctokens\u001b[39m\r\r\n\u001b[33C\u001b[38;5;220mYou've\u001b[1Cused\u001b[1C90%\u001b[1Cof\u001b[1Cyour\u001b[1Cweekly\u001b[1Climit\u001b[1C\u00b7\u001b[1Cresets\u001b[1C8am\u001b[1C(Europe/London)\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.047, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u00b7\u001b[23C\u001b[38;5;246m29\u001b[10C\u001b[38;5;187mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.04, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;114m\u23fa\r\u001b[2B\u001b[38;5;246m \u23bf \u00a0\u001b[39mmodels\u001b[1Cdirectory\u001b[1Cdoesn't\u001b[1Cexist\u001b[1Cyet\r\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;179m\u00b7\u001b[1CFluttering\u2026 \u001b[38;5;246m(11s \u00b7 \u2193\u001b[1C542 tokens \u00b7 \u001b[38;5;187mstill thinking\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[1C\u001b[38;5;246m\u001b[2m|\u001b[22m \u001b[38;5;216m57k\u001b[38;5;246m \u001b[38;5;34"] -[0.0, "o", "m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\r\u001b[2C\u001b[1B\u001b[22m\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[39C\u001b[39m\u001b[K\r\u001b[33C\u001b[1B \u001b[38;5;246m58029 tokens\u001b[39m\r\r\n\u001b[33C\u001b[38;5;220mYou've\u001b[1Cused\u001b[1C90%\u001b[1Cof\u001b[1Cyour\u001b[1Cweekly\u001b[1Climit\u001b[1C\u00b7\u001b[1Cresets\u001b[1C8am\u001b[1C(Europe/London)\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2191\u001b[2C67\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.026, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.021, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m79\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m92\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.067, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2722\u001b[22C\u001b[38;5;246m602\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2733\u001b[23C\u001b[38;5;246m10\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.018, "o", "\u001b[2D\u001b[7B\r\u001b[18C\u001b[5A\u001b[38;5;216m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.037, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2736\u001b[24C\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u273b\u001b[24C\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.049, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u273d\u001b[24C\u001b[38;5;246m8\u001b[10C\u001b[38;5;181mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m20\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u273b\u001b[24C\u001b[38;5;246m1\u001b[10C\u001b[38;5;180mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.08, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.025, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2736\u001b[24C\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2722\u001b[24C\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.035, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2193\u001b[2C39\r\u001b[89C\u001b[8B88\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.02, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m52\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.001, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u00b7\u001b[23C\u001b[38;5;246m64\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m77\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m89\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.042, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mBash\u001b[22m(mkdir -p /private/tmp/demo/support-bot/models)\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0Waiting\u2026\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;179m\u00b7\u001b[39m \u001b[38;5;179mFluttering\u2026 \u001b[38;5;246m(12s \u00b7 \u2193\u001b[1C702 tokens \u00b7 \u001b[38;5;180mstill thinking\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38"] -[0.0, "o", ";5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m58k\u001b[38;5;246m \u001b[38;5;34m28%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[44C\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[22m\u001b[39m\u001b[K\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m58088\u001b[1Ctokens\u001b[39m\r\r\n\u001b[33C\u001b[38;5;220mYou've\u001b[1Cused\u001b[1C90%\u001b[1Cof\u001b[1Cyour\u001b[1Cweekly\u001b[1Climit\u001b[1C\u00b7\u001b[1Cresets\u001b[1C8am\u001b[1C(Europe/London)\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m3\u001b[8C9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.02, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;246m \r\u001b[5C\u001b[1BRunn\r\u001b[24C\u001b[2B21\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.025, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;114m\u23fa\r\u001b[5C\u001b[1B\u001b[38;5;246mDo\u001b[1Ce\u001b[39m\u001b[K\r\u001b[21C\u001b[2B\u001b[38;5;246m\u2191\u001b[3C7\r\u001b[88C\u001b[8B1\u001b[1C5\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.021, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m32\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2722\u001b[24C\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m40\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2733\u001b[24C\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.067, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u2736\u001b[24C\u001b[38;5;246m5\u001b[10C\u001b[38;5;186mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.01, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.043, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[22C\u001b[5A\u001b[38;5;34m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.03, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.039, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;179m\u273d\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u273d\u001b[1CFluttering\u2026 \u001b[10C\u001b[38;5;246m50\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m1\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u2736\u001b[24C\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u2733\u001b[24C\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u2722\u001b[24C\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u00b7\u001b[24C\u001b[38;5;246m9\u001b[10C\u001b[38;5;180mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m60\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.018, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.155, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u2722\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.164, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u2733\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u273d\u001b[15C\u001b[22m\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.163, "o", "\u001b[2D\u001b[7B\r\u001b[36C\u001b[10A\u001b[38;5;186mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2193\u001b[2C73\r\u001b[88C\u001b[8B234\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2736\u001b[23C\u001b[22m\u001b[38;5;246m85\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.037, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m98\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.05, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2733\u001b[22C\u001b[22m\u001b[38;5;246m810\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m23\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.035, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m35\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m48\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.055, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2722\u001b[23C\u001b[22m\u001b[38;5;246m60\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m73\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m85\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.039, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u00b7\u001b[23C\u001b[22m\u001b[38;5;246m98\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.056, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m910\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m23\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.048, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m35\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m48\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.039, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2722\u001b[23C\u001b[22m\u001b[38;5;246m60\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m6\u001b[7C73\u001b[10C\u001b[38;5;185mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.056, "o", "\u001b[2D\u001b[7B\r\u001b[24C\u001b[10A\u001b[38;5;246m85\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.051, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2733\u001b[23C\u001b[22m\u001b[38;5;246m98\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[23C\u001b[10A\u001b[38;5;246m1.0k tokens \u00b7 \u001b[38;5;185msti\u001b[1Cl thinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.057, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.103, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m1\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.158, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.11, "o", "\u001b[2D\u001b[7B\r\u001b[11A\u001b[38;5;246m \u23bf \u00a0\u001b[38;5;211mError: InputValidationError: Write failed due to the following issue:\r\u001b[1B\u001b[39m \u001b[1C \u001b[38;5;211mAn unexpected parameter `description` was provided\r\u001b[2B\u001b[38;5;215m\u001b[1m\u273b\u001b[22m\u001b[39m \u001b[38;5;215mFluttering\u2026 \u001b[38;5;246m(16s \u00b7 \u2193\u001b[39m \u001b[38;5;246m1.1k tokens \u00b7 \u001b[38;5;185mstill thinking\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m58k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177mdemo\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b"] -[0.0, "o", "[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m58234\u001b[1Ctokens\u001b[39m\r\r\n\u001b[33C\u001b[38;5;220mYou've\u001b[1Cused\u001b[1C90%\u001b[1Cof\u001b[1Cyour\u001b[1Cweekly\u001b[1Climit\u001b[1C\u00b7\u001b[1Cresets\u001b[1C8am\u001b[1C(Europe/London)\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.015, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.087, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2191\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.02, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.057, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.06, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.115, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u00b7\u001b[36C\u001b[22m\u001b[38;5;221mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.078, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.152, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.154, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;215m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;214m\u001b[1m\u2736\u001b[1C\u001b[22mFluttering\u2026 \u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;214m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.157, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;214m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.104, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[1C\u001b[22mFluttering\u2026 \u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.077, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.046, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2193\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m2\r\u001b[88C\u001b[8B682\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.021, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.042, "o", "\u001b[2D\u001b[7B\r\u001b[33C\u001b[1A \u001b[38;5;220m1\u001b[1CMCP \u001b[2Crver needs auth\u001b[38;5;246m \u00b7 /mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.074, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.102, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.108, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[24C\u001b[22m\u001b[38;5;246m3\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.066, "o", "\u001b[2D\u001b[7B\r\u001b[18C\u001b[5A\u001b[38;5;216m9\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.091, "o", "\u001b[2D\u001b[7B\r\u001b[37C\u001b[10A\u001b[38;5;220mstill thinking\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.132, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[24C\u001b[22m\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.03, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m \u001b[1C\u001b[39m\u001b[1mWrite\u001b[22m(\u001b]8;id=117kah9;file:///private/tmp/demo/support-bot/models/schema.yaml\u0007/private/tmp/demo/support-bot/models/schema.yaml\u001b]8;;\u0007)\r\u001b[2B\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m \u001b[38;5;220mFluttering\u2026 \u001b[38;5;246m(19s \u00b7 \u2193\u001b[39m \u001b[38;5;246m1.4k tokens \u00b7 \u001b[38;5;220mstill thinking\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177mdemo\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;"] -[0.0, "o", "246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[21C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m58958\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.07, "o", "\u001b[2D\u001b[7B\r\u001b[12A\u001b[38;5;114m\u23fa\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0\u001b[39mWrote\u001b[1C\u001b[1m34\u001b[1C\u001b[22mlines\u001b[1Cto\u001b[1C\u001b[1m/private/tmp/demo/support-bot/models/schema.yaml\r\u001b[1B\u001b[22m \u001b[1C \u001b[38;5;231m\u001b[2m 1 \u001b[22m\u001b[38;5;148mentities:\u001b[39m\u001b[K\r\u001b[5C\u001b[1B\u001b[38;5;231m\u001b[2m 2 \u001b[22m \u001b[38;5;148mcustomer:\r\u001b[1B\u001b[39m \u001b[38;5;231m\u001b[2m 3 \u001b[22m \u001b[38;5;148mfields:\u001b[39m\u001b[K\r\u001b[1B \u001b[2C\u001b[38;5;231m\u001b[2m 4 \u001b[22m \u001b[38;5;148memail:\r\u001b[1B\u001b[39m \u001b[38;5;231m\u001b[2m 5 \u001b[22m \u001b[38;5;148mtype:\u001b[38;5;231m \u001b[38;5;186mstring\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[38;5;231m\u001b[2m 6 \u001b[22m \u001b[38;5;148mrequired:\u001b[38;5;231m \u001b[38;5;141mtrue\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[38;5;231m\u001b[2m 7 \u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[38;5;231m\u001b[2m 8 \u001b[22m \u001b[38;5;148mticket:\u001b[39m\u001b[K\r\u001b[5C\u001b[1B\u001b[38;5;231m\u001b[2m 9 \u001b[22m \u001b[38;5;148mfields:\u001b[66C\u001b[39m\u001b[K\r\u001b[5C\u001b[1B\u001b[38;5;231m\u001b[2m 10 \u001b[22m \u001b[38;5;148mtitle:\u001b[47C\u001b[39m\u001b[K\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 11\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mtype:\u001b[38;5;231m \u001b[38;5;186mstring\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 12\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mrequired:\u001b[38;5;231m \u001b[38;5;1"] -[0.0, "o", "41mtrue\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 13\u001b[1C\u001b[22m \u001b[5C\u001b[38;5;148mseverity:\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 14\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mtype:\u001b[38;5;231m \u001b[38;5;186mstring\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 15\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mrequired:\u001b[38;5;231m \u001b[38;5;141mfalse\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 16\u001b[1C\u001b[22m \u001b[5C\u001b[38;5;148mcustomer_email:\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 17\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mtype:\u001b[38;5;231m \u001b[38;5;186mstring\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 18\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mrequired:\u001b[38;5;231m \u001b[38;5;141mtrue\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 19\u001b[22m\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 20\u001b[1C\u001b[22m\u001b[38;5;148mwatchers:\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 21\u001b[1C\u001b[22m \u001b[1C-\u001b[1C\u001b[38;5;148mname:\u001b[38;5;231m \u001b[38;5;186mextract_ticket_severity\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 22\u001b[1C\u001b[22m \u001b[3C\u001b[38;5;148mon:\u001b[38;5;231m \u001b[38;5;186mticket.created\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 23\u001b[1C\u001b[22m \u001b[3C\u001b[38;5;148mactions:\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 24\u001b[1C\u001b[22m \u001b[5C-\u001b[1C\u001b[38;5;148mtype:\u001b[38;5;231m \u001b[38;5;186mupdate_field\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 25\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148menti"] -[0.0, "o", "ty:\u001b[38;5;231m \u001b[38;5;186mticket\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 26\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mfield:\u001b[38;5;231m \u001b[38;5;186mseverity\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 27\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mvalue_source:\u001b[38;5;231m \u001b[38;5;186mllm\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 28\u001b[1C\u001b[22m \u001b[7C\u001b[38;5;148mprompt:\u001b[38;5;231m \u001b[38;5;186m|\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 29\u001b[1C\u001b[22m \u001b[9C\u001b[38;5;186mExtract\u001b[38;5;231m \u001b[38;5;186mthe\u001b[38;5;231m \u001b[38;5;186mseverity\u001b[38;5;231m \u001b[38;5;186mlevel\u001b[38;5;231m \u001b[38;5;186mfrom\u001b[38;5;231m \u001b[38;5;186mthis\u001b[38;5;231m \u001b[38;5;186mticket\u001b[38;5;231m \u001b[38;5;186mtitle\u001b[38;5;231m \u001b[38;5;186mand\u001b[38;5;231m \u001b[38;5;186mdescription.\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 30\u001b[1C\u001b[22m \u001b[9C\u001b[38;5;148mReturn\u001b[1Conly\u001b[1Cone\u001b[1Cof:\u001b[38;5;231m \u001b[38;5;186mcritical,\u001b[38;5;231m \u001b[38;5;186mhigh,\u001b[38;5;231m \u001b[38;5;186mmedium,\u001b[38;5;231m \u001b[38;5;186mlow\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 31\u001b[22m\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 32\u001b[1C\u001b[22m \u001b[9C\u001b[38;5;148mTitle:\u001b[38;5;231m {{\u001b[1C\u001b[38;5;186mentity.title\u001b[38;5;231m }}\u001b[39m\r\r\n\u001b[5C\u001b[38;5;231m\u001b[2m 33\u001b[22m\u001b[39m\r\r\n\u001b[5C\u001b[38"] -[0.0, "o", ";5;231m\u001b[2m 34\u001b[1C\u001b[22m \u001b[9C\u001b[38;5;186mIf\u001b[38;5;231m \u001b[38;5;186mthe\u001b[38;5;231m \u001b[38;5;186mseverity\u001b[38;5;231m \u001b[38;5;186mcannot\u001b[38;5;231m \u001b[38;5;186mbe\u001b[38;5;231m \u001b[38;5;186mdetermined,\u001b[38;5;231m \u001b[38;5;186mdefault\u001b[38;5;231m \u001b[38;5;186mto\u001b[38;5;231m \u001b[38;5;186m\"medium\".\u001b[39m\r\r\n\r\r\n\u001b[38;5;220m\u001b[1m\u2733\u001b[1C\u001b[22mFluttering\u2026\u001b[1C\u001b[38;5;246m(19s\u001b[1C\u00b7\u001b[1C\u2191\u001b[1C1.4k\u001b[1Ctokens\u001b[1C\u00b7\u001b[1C\u001b[38;5;220mstill\u001b[1Cthinking\u001b[38;5;246m)\u001b[39m\r\r\n\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m58958\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.019, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.036, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.07, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.102, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.262, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.12, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.104, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[14C\u001b[22m\u001b[38;5;246m20\u001b[20C\u001b[38;5;220mth\u001b[1Cnking more\u001b[38;5;246m)\u001b[39m\u001b[K\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.094, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.169, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.159, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.08, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mBash\u001b[22m(cd /private/tmp/demo/support-bot &&\u001b[1Clobu\u001b[1Cvalidate)\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0Waiting\u2026\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m \u001b[38;5;220mFluttering\u2026 \u001b[38;5;246m(20s \u00b7 \u2193\u001b[1C1.5k tokens \u00b7 \u001b[38;5;220mthinking more\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m"] -[0.0, "o", " \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177mdemo\u001b[44C\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[22m\u001b[39m\u001b[K\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m59087\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.038, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[5C\u001b[12A\u001b[38;5;246mRunn\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.095, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.212, "o", "\u001b[2D\u001b[7B\r\u001b[13A\u001b[38;5;114m\u23fa\r\u001b[5C\u001b[1B\u001b[39m lobu.toml\u001b[1Cis\u001b[1Cvalid\r\u001b[7C\u001b[1B1\u001b[1Cagent(s)\u001b[1Cconfigured\r\u001b[1B \u001b[1C [agents.support-bot] No providers configured.\u001b[1CAgent\u001b[1Cwill\u001b[1Cneed\u001b[1Cprovider\u001b[1Ckeys\u001b[1Cat\u001b[1Cruntime.\r\u001b[2B\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m \u001b[38;5;220mFluttering\u2026 \u001b[38;5;246m(21s \u00b7 \u2191\u001b[39m \u001b[38;5;246m1.5k tokens \u00b7 \u001b[38;5;220mthinking more\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177mdemo\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[2"] -[0.0, "o", "2m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[21C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m59132\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.021, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.063, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.042, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[24C\u001b[22m\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.158, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.018, "o", "\u001b[2D\u001b[7B\r\u001b[27C\u001b[5A\u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.084, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.262, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.118, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m2\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.013, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.037, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.269, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.111, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mRead\u001b[22m\u001b[K\r\u001b[2B\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m \u001b[38;5;220mFluttering\u2026 \u001b[38;5;246m(22s \u00b7 \u2193\u001b[39m \u001b[38;5;246m1.6k tokens \u00b7 \u001b[38;5;220mthinking more\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to "] -[0.0, "o", "cycle)\u001b[21C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m59212\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.142, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[12A\u001b[38;5;246m \u001b[5C\u001b[39m(\u001b]8;id=1s4wges;file:///private/tmp/demo/support-bot/lobu.toml\u0007/private/tmp/demo/support-bot/lobu.toml\u001b]8;;\u0007)\r\u001b[2B\u001b[38;5;246m\u23fa\u001b[1C\u001b[39m\u001b[1mRead\u001b[22m\u001b[K\r\u001b[2B\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m \u001b[38;5;220mFluttering\u2026 \u001b[38;5;246m(22s \u00b7 \u2193\u001b[39m \u001b[38;5;246m1.6k tokens \u00b7 \u001b[38;5;220mthinking more\u001b[38;5;246m)\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:"] -[0.0, "o", "\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[21C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m59212\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.06, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.049, "o", "\u001b[2D\u001b[7B\r\u001b[14A\u001b[38;5;114m\u23fa\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0\u001b[39mRead\u001b[1C\u001b[1m38\u001b[1C\u001b[22mlines\r\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;246m \u001b[1C\u001b[39m\u001b[1mRead\u001b[22m(\u001b]8;id=117kah9;file:///private/tmp/demo/support-bot/models/schema.yaml\u0007/private/tmp/demo/support-bot/models/schema.yaml\u001b]8;;\u0007)\r\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;220m\u001b[1m\u00b7\u001b[1C\u001b[22mFluttering\u2026 \u001b[38;5;246m(23s \u00b7 \u2193\u001b[1C1.6k tokens \u00b7 \u001b[38;5;220mthinking more\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[1C\u001b[38;5;246m\u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\r\u001b[2C\u001b[1B\u001b[22m\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[39C\u001b[39m\u001b[K\r\u001b[68C\u001b[1B \u001b[38;5;246m59212\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.015, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.001, "o", "\u001b[2D\u001b[7B\r\u001b[25C\u001b[10A\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.039, "o", "\u001b[2D\u001b[7B\r\u001b[12A\u001b[38;5;114m\u23fa\r\u001b[1B\u001b[38;5;246m \u23bf \u00a0\u001b[39mRead\u001b[1C\u001b[1m35\u001b[1C\u001b[22mlines\r\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;220m\u001b[1m\u00b7\u001b[1C\u001b[22mFluttering\u2026 \u001b[38;5;246m(23s \u00b7 \u2193\u001b[1C1.7k tokens \u00b7 \u001b[38;5;220mthinking more\u001b[38;5;246m)\r\u001b[1B\u001b[39m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[1C\u001b[38;5;246m\u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;"] -[0.0, "o", "5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\r\u001b[2C\u001b[1B\u001b[22m\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[39C\u001b[39m\u001b[K\r\u001b[68C\u001b[1B \u001b[38;5;246m59354\u001b[1Ctokens\u001b[39m\r\r\n\u001b[68C\u001b[38;5;220m1\u001b[1CMCP\u001b[1Cserver\u001b[1Cneeds\u001b[1Cauth\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.02, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2191\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.089, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.157, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.104, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.105, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.118, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.27, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.058, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.046, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[15C\u001b[22m\u001b[38;5;246m4\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.156, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.102, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.211, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.157, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.076, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.026, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.054, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m5\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.104, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.212, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.156, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.106, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.107, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.09, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.123, "o", "\u001b[2D\u001b[7B\r\u001b[16C\u001b[10A\u001b[38;5;246m6\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.052, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.104, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.12, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.038, "o", "\u001b[2D\u001b[7B\r\u001b[58C\u001b[1A\u001b[38;5;211m1 claude.ai connector unavailable\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.072, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.154, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273d\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.213, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u273b\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.085, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.02, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2736\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.156, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2733\u001b[15C\u001b[22m\u001b[38;5;246m7\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.119, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.092, "o", "\u001b[2D\u001b[7B\r\u001b[21C\u001b[10A\u001b[38;5;246m\u2193\r\u001b[86C\u001b[8B60\u001b[2C5\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u00b7\u001b[24C\u001b[22m\u001b[38;5;246m8\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.213, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;220m\u001b[1m\u2722\u001b[22m\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.033, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;231m\u23fa\u001b[1C\u001b[39mDone! Your Lobu support-triage agent is ready. Here's\u001b[1Cwhat\u001b[1Cwas\u001b[1Cset\u001b[1Cup:\r\u001b[2B \u001b[1mlobu.toml \u2014 Agent configuration\u001b[22m\u001b[K\r\u001b[1B\u001b[K\r\u001b[1B [agents.support-bot]\u001b[K\r\u001b[2C\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m59k\u001b[38;5;246m \u001b[38;5;34m29%\u001b[38;5;246m \u001b[2"] -[0.0, "o", "m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[20C\u001b[39m\u001b[K\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.134, "o", "\u001b[2D\u001b[7B\r\u001b[17C\u001b[5A\u001b[38;5;216m60\u001b[2C\u001b[38;5;34m30\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[9A\u001b[36mname\u001b[1C\u001b[39m=\u001b[1C\u001b[31m\"support-bot\"\r\u001b[1B\u001b[39m \u001b[36mdescription\u001b[39m = \u001b[31m\"\"\u001b[39m\u001b[K\r\u001b[1B \u001b[36mdir\u001b[1C\u001b[39m=\u001b[1C\u001b[31m\"./agents/support-bot\"\r\u001b[1B\u001b[39m\u001b[K\r\u001b[2C\u001b[1B[agents.support-bot.network]\u001b[K\r\u001b[2C\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[83C\u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;3"] -[0.0, "o", "4m30%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.162, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.101, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[9A\u001b[36mallowed\u001b[1C\u001b[39m=\u001b[1C[\u001b[31m\"registry.npmjs.org\"\u001b[39m,\u001b[1C\u001b[31m\".npmjs.org\"\u001b[39m,\u001b[1C\u001b[31m\"github.com\"\u001b[39m,\u001b[1C\u001b[31m\".github.com\"\u001b[39m,\r\u001b[1B \u001b[31m\".githubusercontent.com\"\u001b[39m, \u001b[31m\"cdn.jsdelivr.net\"\u001b[39m, \u001b[31m\"unpkg.com\"\u001b[39m, \u001b[31m\"pypi.org\"\u001b[39m, \u001b[31m\"files.pythonhosted.org\"\u001b[39m]\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;34m30%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 2"] -[0.0, "o", "0, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[11C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.198, "o", "\u001b[2D\u001b[7B\r\u001b[8A \u001b[1mmodels/schema.yaml \u2014 Entities & watcher\u001b[22m\u001b[K\r\u001b[1B\u001b[K\r\u001b[1B \u001b[36mentities:\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[36mcustomer:\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[36mfields:\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[36memail:\u001b[39m\u001b[K\r\u001b[10C\u001b[1B\u001b[36mtype:\u001b[1C\u001b[31mstring\u001b[64C\u001b[39m\u001b[K\r\u001b[10C\u001b[1B\u001b[36mrequired:\u001b[1C\u001b[34mtrue\u001b[34C\u001b[39m\u001b[K\r\r\n\r\r\n\u001b[4C\u001b[36mticket:\u001b[39m\r\r\n\u001b[6C\u001b[36mfields:\u001b[39m\r\r\n\u001b[8C\u001b[36mtitle:\u001b[39m\r\r\n\u001b[10C\u001b[36mtype:\u001b[1C\u001b[31mstring\u001b[39m\r\r\n\u001b[10C\u001b[36mrequired:\u001b[1C\u001b[34mtrue\u001b[39m\r\r\n\u001b[8C\u001b[36mseverity:\u001b[39m\r\r\n\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;34m30%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.165, "o", "\u001b[2D\u001b[7B\r\u001b[10C\u001b[9A\u001b[36mtype:\u001b[1C\u001b[31mstring\r\u001b[1B\u001b[39m \u001b[36mrequired:\u001b[39m \u001b[34mfalse\u001b[39m\u001b[K\r\u001b[1B \u001b[5C\u001b[36mcustomer_email:\r\u001b[1B\u001b[39m \u001b[36mtype:\u001b[39m \u001b[31mstring\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[36mrequired:\u001b[39m \u001b[34mtrue\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[K\r\u001b[2C\u001b[1B\u001b[36mwatchers:\u001b[39m\u001b[K\r\u001b[4C\u001b[1B-\u001b[1C\u001b[36mname:\u001b[1C\u001b[31mextract_ticket_severity\u001b[51C\u001b[39m\u001b[K\r\u001b[6C\u001b[1B\u001b[36mon:\u001b[1C\u001b[31mticket.created\u001b[34C\u001b[39m\u001b[K\r\r\n\u001b[6C\u001b[36mactions:\u001b[39m\r\r\n\u001b[8C-\u001b[1C\u001b[36mtype:\u001b[1C\u001b[31mupdate_field\u001b[39m\r\r\n\u001b[10C\u001b[36mentity:\u001b[1C\u001b[31mticket\u001b[39m\r\r\n\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;34m30%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.276, "o", "\u001b[2D\u001b[7B\r\u001b[10C\u001b[9A\u001b[36mfield:\u001b[1C\u001b[31mseverity\r\u001b[1B\u001b[39m \u001b[36mvalue_source:\u001b[39m \u001b[31mllm\u001b[39m\u001b[K\r\u001b[1B \u001b[7C\u001b[36mprompt:\u001b[1C\u001b[31m|\r\u001b[1B\u001b[39m \u001b[31m Extract the severity level from this ticket title and description.\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[31m Return only one of: critical, high, medium, low\r\u001b[2C\u001b[1B\u001b[39m\u001b[K\r\u001b[2C\u001b[1B \u001b[36mTitle:\u001b[39m {{ \u001b[31mentity.title\u001b[39m }}\u001b[K\r\u001b[86C\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\r\r\n\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;34m30%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.221, "o", "\u001b]0;\u2802 Build Lobu support triage agent\u0007"] -[0.263, "o", "\u001b[2D\u001b[7B\r\u001b[8A \u001b[31mIf\u001b[39m \u001b[31mthe\u001b[39m \u001b[31mseverity\u001b[39m \u001b[31mcannot\u001b[39m \u001b[31mbe\u001b[39m \u001b[31mdetermined,\u001b[39m \u001b[31mdefault\u001b[39m \u001b[31mto\u001b[39m \u001b[31m\"medium\".\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[2B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[2C\u001b[1B\u001b[38;5;39mHaiku 4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;34m30%\u001b[38;5;246m \u001b[2m|\u001b[1C\u001b[22m\u001b[38;5;177msupport-bot\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets 11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets may 20, 8:00a.m.\u001b[17C\u001b[22m\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[38;5;211m\u23f5\u23f5 bypass permissions on\u001b[38;5;246m (shift+tab to cycle)\u001b[11C\u001b[39m\u001b[K\r\r\n\u001b[86C\u001b[38;5;"] -[0.0, "o", "246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.223, "o", "\u001b[2D\u001b[7B\r\u001b[8A \u001b[1mStatus:\u001b[22m \u2713 Validated successfully. HTTP-only, no external dependencies. The watcher will\u001b[K\r\u001b[1B automatically\u001b[1Ctrigger\u001b[1Con\u001b[1Cnew\u001b[1Ctickets\u001b[1Cand\u001b[1Cextract\u001b[1Cseverity\u001b[1Cusing\u001b[1CLLM.\u001b[1CReady\u001b[1Cto\u001b[1Crun\u001b[1Cwith\u001b[1C\u001b[38;5;153mlobu run\u001b[39m.\r\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;174m\u2736\u001b[1CFrosting\u2026 \u001b[38;5;246m(29s\u001b[1C\u00b7 \u2193\u001b[39m \u001b[38;5;246m2.3k tokens)\u001b[39m\u001b[K\r\u001b[2C\u001b[1B\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\u001b[1B\u001b[38;5;246m\u276f\u00a0\u001b[39m\u001b[7m \u001b[83C\u001b[27m\u001b[K\r\u001b[1B\u001b[38;5;244m\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"] -[0.0, "o", "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u001b[39m\r\r\n\u001b[2C\u001b[38;5;39mHaiku\u001b[1C4.5\u001b[38;5;246m \u001b[38;5;216m\ud83e\udde0\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;216m60k\u001b[38;5;246m \u001b[38;5;34m30%\u001b[38;5;246m \u001b[2m|\u001b[22m \u001b[38;5;177msupport-bot\u001b[39m\r\r\n\u001b[2C\u001b[38;5;253mcurrent:\u001b[38;5;246m \u001b[38;5;216m58%\u001b[38;5;246m \u001b[2mresets\u001b[1C11:30p.m.\u001b[22m \u001b[2m|\u001b[22m \u001b[38;5;253mweekly:\u001b[38;5;246m \u001b[38;5;210m90%\u001b[38;5;246m \u001b[2mresets\u001b[1Cmay\u001b[1C20,\u001b[1C8:00a.m.\u001b[22m\u001b[39m\r\r\n\u001b[2C\u001b[38;5;211m\u23f5\u23f5\u001b[1Cbypass\u001b[1Cpermissions\u001b[1Con\u001b[38;5;246m (shift+tab\u001b[1Cto\u001b[1Ccycle)\u001b[39m\r\r\n\u001b[86C\u001b[38;5;246m60355\u001b[1Ctokens\u001b[39m\r\r\n\u001b[58C\u001b[38;5;211m1\u001b[1Cclaude.ai\u001b[1Cconnector\u001b[1Cunavailable\u001b[38;5;246m \u00b7\u001b[1C/mcp\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[0.053, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[10A\u001b[38;5;180mFrosting\u2026\u001b[2C\u001b[38;5;246mrunning stop\u001b[1Ch\u001b[1Cok \u00b7 29s \u00b7 \u2193\u001b[1C2.3k tokens)\r\u001b[88C\u001b[8B898\u001b[39m\r\r\n\r\n\u001b[2C\u001b[7A"] -[0.017, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.108, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273d\u001b[1CFrosting\u2026\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.212, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u273b\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.085, "o", "\u001b]0;\u2810 Build Lobu support triage agent\u0007"] -[0.019, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;174m\u2736\u001b[39m\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[0.016, "o", "\u001b]0;\u2733 Build Lobu support triage agent\u0007"] -[0.002, "o", "\u001b[2D\u001b[7B\r\u001b[10A\u001b[38;5;246m\u273b\u001b[1CSaut\u00e9ed for 29s\u001b[39m\u001b[K\r\u001b[3B\u276f\u00a0\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[2C\u001b[7A"] -[4.559, "o", "\u001b[2D\u001b[7B\r\u001b[2C\u001b[1A\u001b[38;5;246mtmux focus-events off \u00b7 add 'set -g focus-events on' to ~/.tmux.conf and reattach for focus\u001b[1Ctra\u2026\u001b[39m\r\r\n\u001b[2C\u001b[7A"] -[8.004, "o", "\u001b[2D\u001b[7B\u001b[2K\u001b[1A\u001b[2K\u001b[G\u001b[1A\r\u001b[86C\u001b[3A\u001b[38;5;246m60898 tokens\r\u001b[3B\u001b[39m\u001b[K\r\u001b[1B\u001b[K\r\u001b[1A\u001b[2C\u001b[5A"] -[0.5, "x", "0"] diff --git a/packages/landing/scripts/gen-connectors.ts b/packages/landing/scripts/gen-connectors.ts new file mode 100644 index 000000000..febe8baca --- /dev/null +++ b/packages/landing/scripts/gen-connectors.ts @@ -0,0 +1,110 @@ +#!/usr/bin/env bun +/** + * Extracts the built-in connector list from packages/connectors source and + * writes it as JSON importable at build time. Keeps the landing's connector + * grid in sync with the actual connectors instead of a hand-maintained list. + * + * Run: bun packages/landing/scripts/gen-connectors.ts + */ + +import { readdirSync, readFileSync, writeFileSync } from "node:fs"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import * as simpleIcons from "simple-icons"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const connectorsDir = resolve(__dirname, "../../connectors/src"); + +// Source files that are not standalone connector definitions. +const SKIP = new Set(["index.ts", "browser-scraper-utils.ts"]); + +// Connector key -> simple-icons slug. Only the brand association is hand-kept; +// the SVG path itself is pulled from simple-icons at generate time so logos +// stay correct/updatable. Connectors without an entry (or whose brand was +// removed from simple-icons, e.g. LinkedIn/Outlook) render a letter monogram. +const ICON_SLUGS: Record = { + github: "github", + "google.gmail": "gmail", + "google.calendar": "googlecalendar", + gmaps: "googlemaps", + google_play: "googleplay", + chrome: "googlechrome", + "chrome.bookmarks": "googlechrome", + "chrome.downloads": "googlechrome", + "chrome.history": "googlechrome", + "apple.health": "apple", + "apple.photos": "apple", + "apple.screen_time": "apple", + ios_appstore: "appstore", + hackernews: "ycombinator", + producthunt: "producthunt", + reddit: "reddit", + spotify: "spotify", + youtube: "youtube", + whatsapp: "whatsapp", + "whatsapp.local": "whatsapp", + x: "x", + revolut: "revolut", + rss: "rss", + trustpilot: "trustpilot", + g2: "g2", + glassdoor: "glassdoor", +}; + +function iconPathFor(key: string): string | null { + const slug = ICON_SLUGS[key]; + if (!slug) return null; + const exportName = `si${slug.charAt(0).toUpperCase()}${slug.slice(1)}`; + const icon = (simpleIcons as Record)[ + exportName + ]; + return icon?.path ?? null; +} + +interface Connector { + key: string; + name: string; + /** Source file under packages/connectors/src, for the GitHub deep link. */ + file: string; + /** simple-icons SVG path, or null when no brand mark is available. */ + iconPath: string | null; +} + +function firstLiteral(source: string, field: string): string | null { + const m = source.match(new RegExp(`${field}:\\s*["']([^"']+)["']`)); + return m ? m[1] : null; +} + +function extractConnectors(): Connector[] { + const files = readdirSync(connectorsDir).filter( + (f) => f.endsWith(".ts") && !f.endsWith(".test.ts") && !SKIP.has(f) + ); + + const found: Array<{ key: string; name: string; file: string }> = []; + for (const file of files) { + const source = readFileSync(resolve(connectorsDir, file), "utf-8"); + const key = firstLiteral(source, "key"); + const name = firstLiteral(source, "name"); + // A file is a connector only when its definition exposes both fields. + if (key && name) found.push({ key, name, file }); + } + + // Collapse opt-in sub-feeds (`chrome.history`, `whatsapp.local`) into their + // parent connector when the parent is itself listed, so the logo wall shows + // one chip per connector instead of repeating the same brand mark. + const keys = new Set(found.map((c) => c.key)); + const connectors: Connector[] = found + .filter((c) => { + const base = c.key.split(".")[0]; + return !(c.key.includes(".") && base !== c.key && keys.has(base)); + }) + .map((c) => ({ ...c, iconPath: iconPathFor(c.key) })); + + connectors.sort((a, b) => a.name.localeCompare(b.name)); + return connectors; +} + +const result = extractConnectors(); +const outPath = resolve(__dirname, "../src/generated/connectors.json"); +writeFileSync(outPath, `${JSON.stringify(result, null, 2)}\n`); +console.log(`Wrote ${result.length} connectors to ${outPath}`); diff --git a/packages/landing/scripts/gen-landing-snippets.ts b/packages/landing/scripts/gen-landing-snippets.ts index f1f108778..c7ede22cc 100644 --- a/packages/landing/scripts/gen-landing-snippets.ts +++ b/packages/landing/scripts/gen-landing-snippets.ts @@ -3,9 +3,8 @@ * Reads pinned files out of `examples/` and emits a flat JSON manifest the * landing page imports at build time. * - * Round 10 redesign — the page no longer has a global use-case pivot, so the - * manifest is no longer keyed by use case. Each primitive section instead - * shows ONE canonical example: + * Each primitive section shows ONE canonical pinned example, used as the + * generic fallback when no use case is selected: * * connector -> examples/ecommerce/connectors/stripe-charges.connector.ts * memorySchema -> examples/sales/models/schema.yaml (entities slice) @@ -17,6 +16,11 @@ * * examples -> [{ slug, label, description, githubUrl }] * + * And, under `useCases`, per-use-case connector / memorySchema / watcher + * snippets keyed by the example dir slug. The interactive use-case tab strip + * on the landing page swaps these three sections; everything else stays + * generic. Hero copy is not part of this manifest. + * * The skill snippet stays inline in LandingPage.tsx (set in round 9). * * Output: packages/landing/src/generated/landing-snippets.json @@ -73,6 +77,12 @@ type ExampleEntry = { githubUrl: string; }; +type UseCaseSnippets = { + connector: Snippet; + memorySchema: Snippet; + watcher: Snippet; +}; + type LandingSnippets = { connector: Snippet; memorySchema: Snippet; @@ -81,8 +91,23 @@ type LandingSnippets = { agentToml: Snippet; skill: Snippet; examples: ExampleEntry[]; + useCases: Record; }; +/** Slugs that get per-use-case connector / memory / watcher snippets. The id + * equals the example directory name. Each dir has exactly one + * connectors/*.connector.ts and a models/schema.yaml. */ +const USE_CASE_SLUGS = [ + "legal", + "finance", + "sales", + "delivery", + "market", + "agent-community", + "ecommerce", + "leadership", +] as const; + const GITHUB_FILE_BASE = "https://github.com/lobu-ai/lobu/blob/main/examples"; const GITHUB_TREE_BASE = "https://github.com/lobu-ai/lobu/tree/main/examples"; @@ -218,6 +243,10 @@ function extractYamlListItems( return [header, ...items.slice(0, itemCount).flat()]; } +/* -------------------------------------------------------------------------- */ +/* Connector definition extraction */ +/* -------------------------------------------------------------------------- */ + /* -------------------------------------------------------------------------- */ /* Memory (entity) compression */ /* -------------------------------------------------------------------------- */ @@ -481,9 +510,9 @@ function compressWatcher(yamlLines: string[]): string[] { * leading `---` and the next `---`). Then slim it so the landing snippet * fits the right column without scrolling: * - * - cap `network.allow` and `network.judge` lists at 2 entries each - * - collapse `judges.default: > … (multi-line block scalar)` into a single - * short bullet sentence that keeps the policy's essence + * - show the first 2 entries of `network.allow` / `network.judge` (the + * lists are illustrative, so no truncation marker) + * - shorten each judge policy to a concise folded block scalar (`>`) * - leave name + description + nixPackages untouched */ function trimSkillMarkdown(raw: string): string { @@ -503,41 +532,47 @@ function trimSkillMarkdown(raw: string): string { let i = 0; while (i < fm.length) { const line = fm[i]; - const trimmed = line.trimStart(); - // network.allow / network.judge — cap children to 2 entries. + // network.allow / network.judge, keep the first 2 entries. Entries may + // span multiple lines (the `{ domain, judge }` per-domain form), so we keep + // every line of a kept entry. Lists are illustrative: no truncation marker. const listKey = /^(\s*)(allow|judge):\s*$/.exec(line); if (listKey) { const baseIndent = listKey[1].length; out.push(line); - let kept = 0; - let total = 0; + let entries = 0; + let keepingCurrent = false; let j = i + 1; while (j < fm.length) { const child = fm[j]; const childTrim = child.trimStart(); const childIndent = child.length - childTrim.length; - if (!childTrim.startsWith("- ") || childIndent <= baseIndent) break; - total++; - if (kept < 2) { - out.push(child); - kept++; + if (childTrim !== "" && childIndent <= baseIndent) break; + if (childTrim.startsWith("- ")) { + entries++; + keepingCurrent = entries <= 2; } + if (keepingCurrent) out.push(child); j++; } - if (total > kept) { - out.push(`${" ".repeat(baseIndent + 2)}# …${total - kept} more`); - } i = j; continue; } - // judges.default: > … — collapse the block scalar to one essence line. - const blockScalar = /^(\s*)default:\s*[>|][+-]?\s*$/.exec(line); + // A judge policy (`: >` block scalar under judges), keep a short + // folded block scalar (valid YAML that reads naturally) in place of the + // full multi-line policy text. + const blockScalar = /^(\s*)([\w-]+):\s*[>|][+-]?\s*$/.exec(line); if (blockScalar) { const baseIndent = blockScalar[1].length; + const policyName = blockScalar[2]; + const childPad = " ".repeat(baseIndent + 2); + out.push(`${" ".repeat(baseIndent)}${policyName}: >`); out.push( - `${" ".repeat(baseIndent)}default: "Allow GET reads + basket mutations; DENY checkout, payment, profile changes. Fail closed if unclear."` + `${childPad}Allow reads and basket changes. Deny checkout, payment,` + ); + out.push( + `${childPad}saved cards, address, or profile changes. Fail closed if unclear.` ); let j = i + 1; while (j < fm.length) { @@ -598,7 +633,7 @@ function snippetFrom( function warnOverBudget(label: string, lines: number, budget: number): void { if (lines > budget) { console.warn( - `gen-landing-snippets: ${label} is ${lines} lines — landing budget is ≤ ${budget}.` + `gen-landing-snippets: ${label} is ${lines} lines, landing budget is <= ${budget}.` ); } } @@ -634,6 +669,55 @@ function listExamples(): ExampleEntry[] { return out; } +function findConnectorFile(slug: string): { abs: string; rel: string } { + const connectorsDir = resolve(examplesDir, slug, "connectors"); + const file = readdirSync(connectorsDir).find((f) => + f.endsWith(".connector.ts") + ); + if (!file) throw new Error(`No *.connector.ts in ${connectorsDir}`); + return { + abs: resolve(connectorsDir, file), + rel: `connectors/${file}`, + }; +} + +function buildUseCases(): Record { + const out: Record = {}; + for (const slug of USE_CASE_SLUGS) { + const { abs, rel } = findConnectorFile(slug); + // Show the full connector file (imports + class + definition + sync), like + // the pinned homepage connector. These files are ~32-39 lines, within the + // connector budget, and read as complete TypeScript rather than a fragment. + const connector = snippetFrom(slug, abs, rel, "typescript"); + + const schemaRel = "models/schema.yaml"; + const memorySchema = snippetFrom( + slug, + pinnedFile(slug, schemaRel), + schemaRel, + "yaml", + (raw) => + collapseBlanks( + compressEntities(extractYamlListItems(raw, "entities", 1)) + ).join("\n") + ); + + const watcher = snippetFrom( + slug, + pinnedFile(slug, schemaRel), + schemaRel, + "yaml", + (raw) => + collapseBlanks( + compressWatcher(extractYamlListItems(raw, "watchers", 1)) + ).join("\n") + ); + + out[slug] = { connector, memorySchema, watcher }; + } + return out; +} + function build(): LandingSnippets { const connector = snippetFrom( PINNED.connector.slug, @@ -725,6 +809,7 @@ function build(): LandingSnippets { agentToml, skill, examples: listExamples(), + useCases: buildUseCases(), }; } @@ -732,7 +817,11 @@ function main() { const out = build(); writeFileSync(outFile, `${JSON.stringify(out, null, 2)}\n`, "utf-8"); console.log( - `gen-landing-snippets: wrote 6 pinned snippets + ${out.examples.length} example entries to ${outFile}` + `gen-landing-snippets: wrote 6 pinned snippets + ${ + out.examples.length + } example entries + ${ + Object.keys(out.useCases).length + } per-use-case snippet sets to ${outFile}` ); } diff --git a/packages/landing/src/chat-scenarios.ts b/packages/landing/src/chat-scenarios.ts index de0661e6f..d1b1eac7e 100644 --- a/packages/landing/src/chat-scenarios.ts +++ b/packages/landing/src/chat-scenarios.ts @@ -10,7 +10,7 @@ import type { UseCase } from "./types"; /** - * Permission flow — the gateway proxy blocks outbound requests to domains + * Permission flow: the gateway proxy blocks outbound requests to domains * not on the allowlist. Workers must request access and the user approves * via an in-chat button. */ @@ -32,7 +32,7 @@ const PERMISSION_SCENARIO: UseCase = { }, { role: "bot", - text: "Can't reach github.com — not in the agent's allowed domains.\n\nGrant access?", + text: "Can't reach github.com, not in the agent's allowed domains.\n\nGrant access?", buttons: [{ label: "Allow github.com", action: "link" }], }, { @@ -47,7 +47,7 @@ const PERMISSION_SCENARIO: UseCase = { }; /** - * Skill install flow — user asks for a capability, agent proposes installing + * Skill install flow: user asks for a capability, agent proposes installing * a Lobu provider (real ID from providers.json), OAuth flows handled by * Lobu, user approves via in-chat button. */ @@ -84,7 +84,7 @@ const SKILL_INSTALL_SCENARIO: UseCase = { }; /** - * Settings link flow — agents open a platform-scoped settings page for + * Settings link flow: agents open a platform-scoped settings page for * config that shouldn't happen in chat (model picker, system prompt, etc.) */ const SETTINGS_LINK_SCENARIO: UseCase = { @@ -105,12 +105,12 @@ const SETTINGS_LINK_SCENARIO: UseCase = { }, { role: "bot", - text: "You can change the model from your settings — opens a scoped page with your current agent config.", + text: "You can change the model from your settings, opens a scoped page with your current agent config.", buttons: [{ label: "Open Settings", action: "settings" }], }, { role: "user", - text: "Done — set to claude-sonnet-4-6", + text: "Done, set to claude-sonnet-4-6", }, { role: "bot", diff --git a/packages/landing/src/components/ArchitectureDiagram.tsx b/packages/landing/src/components/ArchitectureDiagram.tsx index 2d61727ec..6886977c6 100644 --- a/packages/landing/src/components/ArchitectureDiagram.tsx +++ b/packages/landing/src/components/ArchitectureDiagram.tsx @@ -2,7 +2,7 @@ import { messagingChannels } from "./platforms"; /** - * Architecture diagram — layered stream story (NOT cycling pairs). + * Architecture diagram: layered stream story (NOT cycling pairs). * * ┌────────────┐ ┌────────────┐ ┌────────────┐ * │ Connectors │ events │ Memory │ chat │ Agents │ @@ -18,54 +18,6 @@ import { messagingChannels } from "./platforms"; * Honors prefers-reduced-motion (drops animations entirely). */ -/* -------------------------------------------------------------------------- */ -/* Connector brand glyphs (simpleicons-style paths, MIT) */ -/* -------------------------------------------------------------------------- */ - -type Brand = { key: string; label: string; path: string }; - -const CONNECTOR_BRANDS: Brand[] = [ - { - key: "github", - label: "GitHub", - path: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.4 3-.405 1.02.005 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12", - }, - { - key: "linear", - label: "Linear", - path: "M.403 13.795A12.131 12.131 0 0 0 10.203 23.6L.403 13.795zM.182 10.103l13.715 13.714a12.18 12.18 0 0 0 3.137-1.21L1.392 6.966a12.18 12.18 0 0 0-1.21 3.137zm3.135-5.836a12.16 12.16 0 0 1 1.51-1.84L21.572 19.17a12.137 12.137 0 0 1-1.84 1.51L3.317 4.267zM6.682 1.43A12.12 12.12 0 0 1 12 0c6.626 0 12 5.374 12 12 0 1.872-.428 3.643-1.193 5.22L6.682 1.43Z", - }, - { - key: "stripe", - label: "Stripe", - path: "M13.479 9.883c-1.626-.604-2.512-1.067-2.512-1.803 0-.622.511-.977 1.422-.977 1.668 0 3.379.642 4.558 1.22l.666-4.111c-.935-.446-2.847-1.177-5.49-1.177-1.87 0-3.425.489-4.536 1.401-1.155.954-1.757 2.334-1.757 4.005 0 3.027 1.847 4.328 4.855 5.42 1.937.696 2.587 1.192 2.587 1.954 0 .74-.629 1.158-1.77 1.158-1.396 0-3.741-.69-5.323-1.585L5.5 19.612c1.305.74 3.722 1.5 6.245 1.5 1.977 0 3.629-.464 4.752-1.358 1.262-.985 1.915-2.432 1.915-4.155 0-3.105-1.89-4.392-4.933-5.516z", - }, - { - key: "notion", - label: "Notion", - path: "M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z", - }, - { - key: "gmail", - label: "Gmail", - path: "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z", - }, - { - key: "hubspot", - label: "HubSpot", - path: "M18.164 7.93V5.084a2.198 2.198 0 0 0 1.267-1.978v-.067A2.2 2.2 0 0 0 17.238.845h-.067a2.2 2.2 0 0 0-2.193 2.194v.067a2.198 2.198 0 0 0 1.267 1.978v2.846a6.215 6.215 0 0 0-2.964 1.305L5.42 3.183A2.482 2.482 0 1 0 .55 3.91c.005.351.085.696.235 1.013l7.736 6.018a6.226 6.226 0 0 0 .094 7.012l-2.354 2.353a2.014 2.014 0 0 0-.583-.092 2.025 2.025 0 1 0 2.024 2.025 2.015 2.015 0 0 0-.093-.584l2.328-2.329a6.243 6.243 0 1 0 8.232-9.396zm-.97 9.343a3.2 3.2 0 1 1 0-6.4 3.2 3.2 0 0 1 0 6.4z", - }, -]; - -function ConnectorGlyph({ brand, size = 22 }: { brand: Brand; size?: number }) { - return ( - - {brand.label} - - - ); -} - /* -------------------------------------------------------------------------- */ /* Component */ /* -------------------------------------------------------------------------- */ @@ -81,11 +33,11 @@ export function ArchitectureDiagram() { } function Header() { - // Eyebrow + heading + lede mirror Eyebrow / SectionHeading from - // LandingPage.tsx so the architecture block reads as a peer to the - // other landing sections rather than its own one-off treatment. + // Centered header: the architecture board below is the one full-width, + // symmetric showcase on the page, so a centered eyebrow/heading/lede reads + // as intentional (and echoes the hero) rather than drifting left over it. return ( -
    +
    - Stream events. Derive entities. Expose agents. + Events in. Entities out. Agents on top.

    - Connectors stream events into memory. Watchers derive typed entities. Agents read that memory or talk to users. + Connectors stream events into memory. Watchers derive typed entities. Agents read it, talk to users, and act.

    ); @@ -129,7 +81,7 @@ function DiagramBoard() { } /* -------------------------------------------------------------------------- */ -/* Desktop board — three column layered story */ +/* Desktop board: three column layered story */ /* -------------------------------------------------------------------------- */ function DesktopBoard() { @@ -162,29 +114,25 @@ function MobileBoard() { function ConnectorsColumn() { return ( - -
    - {CONNECTOR_BRANDS.map((b) => ( -
    - -
    - ))} + +
    + + +
    -
    ); } function MemoryColumn() { return ( - +
    @@ -196,24 +144,25 @@ function MemoryColumn() { function AgentsColumn() { return ( - +
    {messagingChannels.map((c) => ( - + ))}
    @@ -233,13 +182,9 @@ function AgentsColumn() { ))}
    -
    - read memory programmatically -
    - + + +
    @@ -287,29 +232,37 @@ function ColumnCard({ ); } -function SdkPill({ label, caption }: { label: string; caption: string }) { - return ( -
    - +// Compact bordered row naming one input path (built-in connectors, MCP, the +// SDK). All three render identically; an href makes the row a link to the +// matching docs/source. The full logo wall lives in the Connectors section. +function SourceRow({ label, href }: { label: string; href?: string }) { + const cls = "block rounded-lg border px-3 py-2 font-mono text-[12px]"; + const style = { + borderColor: "var(--color-page-border)", + backgroundColor: "var(--color-page-surface-dim)", + color: "var(--color-page-text)", + }; + if (!href) { + return ( +
    {label} - - - {caption} - -
    +
    + ); + } + const external = href.startsWith("http"); + return ( + + {label} + ); } + function SubBlock({ heading, children, @@ -361,14 +314,14 @@ function StreamBox({ label }: { label: string }) { } /** - * Entities widget — small table grid. Header row + 3 placeholder rows + * Entities widget: small table grid. Header row + 3 placeholder rows * to signal "structured records, not freeform text". Cells use neutral * monospace dashes/blocks so the table reads as a schema preview rather * than fake data. Sits in the same box family as StreamBox. */ function EntitiesTable() { const HEADERS = ["name", "type", "updated"] as const; - // Placeholder rows — labelled generically so the widget reads as a + // Placeholder rows, labelled generically so the widget reads as a // schema preview, not a snapshot of a real customer's data. const ROWS: ReadonlyArray = [ ["Customer A", "company", "2d"], @@ -463,7 +416,7 @@ function DerivationArrow() { border: "1px solid var(--color-page-border)", }} > - cron · LLM + LLM watcher
    ); diff --git a/packages/landing/src/components/CodeBlock.tsx b/packages/landing/src/components/CodeBlock.tsx index dc0dfdb79..60cab8f34 100644 --- a/packages/landing/src/components/CodeBlock.tsx +++ b/packages/landing/src/components/CodeBlock.tsx @@ -90,7 +90,7 @@ const TS_KEYWORDS = new Set([ function tokensToJsx(tokens: Token[]): ComponentChildren { return tokens.map((tok, i) => { if (tok.kind === "plain") { - // Plain text — render as a raw string so React doesn't add wrappers. + // Plain text: render as a raw string so React doesn't add wrappers. return tok.text; } return ( @@ -135,7 +135,7 @@ function tokenizeToml(line: string): Token[] { return out; } - // Blank or array continuation — tokenize inline. + // Blank or array continuation: tokenize inline. return tokenizeTomlInline(line); } @@ -264,7 +264,7 @@ function tokenizeYamlInline(rest: string): Token[] { i++; continue; } - // Word / scalar — break on whitespace, `,`, `]`, `}`. + // Word / scalar: break on whitespace, `,`, `]`, `}`. const remainder = rest.slice(i); const wordMatch = /^[^\s,\]}#]+/.exec(remainder); if (wordMatch) { @@ -358,7 +358,7 @@ function mergePlain(tokens: Token[]): Token[] { } /* -------------------------------------------------------------------------- */ -/* Markdown tokenizer — frontmatter fence, frontmatter keys, ATX headings, */ +/* Markdown tokenizer: frontmatter fence, frontmatter keys, ATX headings, */ /* and inline backtick code spans. Everything else falls through as plain. */ /* -------------------------------------------------------------------------- */ diff --git a/packages/landing/src/components/LandingPage.tsx b/packages/landing/src/components/LandingPage.tsx index a562dc0c8..868edcd3a 100644 --- a/packages/landing/src/components/LandingPage.tsx +++ b/packages/landing/src/components/LandingPage.tsx @@ -1,10 +1,16 @@ import { useState } from "preact/hooks"; +import connectorsManifest from "../generated/connectors.json"; import snippetsManifest from "../generated/landing-snippets.json"; -import { getLobuBaseUrl } from "../use-case-showcases"; +import { + DEFAULT_LANDING_USE_CASE_ID, + getLobuBaseUrl, + landingUseCaseShowcases, +} from "../use-case-showcases"; import { ArchitectureDiagram } from "./ArchitectureDiagram"; import { CodeBlock, type CodeSnippet } from "./CodeBlock"; import { CTA } from "./CTA"; import { LatestBlogPosts, type LatestBlogPost } from "./LatestBlogPosts"; +import { UseCaseTabs } from "./UseCaseTabs"; type ExampleEntry = { slug: string; @@ -13,6 +19,12 @@ type ExampleEntry = { githubUrl: string; }; +type UseCaseSnippets = { + connector: CodeSnippet; + memorySchema: CodeSnippet; + watcher: CodeSnippet; +}; + type LandingSnippets = { connector: CodeSnippet; memorySchema: CodeSnippet; @@ -21,6 +33,7 @@ type LandingSnippets = { agentToml: CodeSnippet; skill: CodeSnippet; examples: ExampleEntry[]; + useCases: Record; }; const snippets = snippetsManifest as LandingSnippets; @@ -32,24 +45,48 @@ const SETUP_PROMPT = `I want to build a Lobu agent. 1. Install the Lobu skill so you have the project conventions and tooling: /plugin install lobu -2. Walk me through the skill's onboarding interview (it asks what the agent should do, who uses it, where data comes from, where I'll talk to it, what should run on a schedule). Pause at every real decision and ask me — don't fake credentials, don't guess. +2. Walk me through the skill's onboarding interview (it asks what the agent should do, who uses it, where data comes from, where I'll talk to it, what should run on a schedule). Pause at every real decision and ask me, don't fake credentials, don't guess. 3. Scaffold the project per my answers (lobu.toml, models/schema.yaml, connectors/, models/reactions/), boot it locally, send a test message via the chosen channel, and show me the memory event that was written. -Lobu is an open-source event-sourced backend for AI agents — connectors emit events, memory keeps the structured record, agents react in real time and dream on cron. Repo: https://github.com/lobu-ai/lobu — Docs: https://lobu.ai/docs/`; +Lobu is an open-source event-sourced backend for AI agents: connectors emit events, memory keeps the structured record, agents react in real time and dream on cron. Repo: https://github.com/lobu-ai/lobu. Docs: https://lobu.ai/docs/`; const GITHUB_URL = "https://github.com/lobu-ai/lobu"; -export function LandingPage(props: { latestPosts?: LatestBlogPost[] }) { +export function LandingPage(props: { + latestPosts?: LatestBlogPost[]; + defaultUseCaseId?: string; + linkTabsToCampaigns?: boolean; +}) { + const [activeUseCase, setActiveUseCase] = useState( + props.defaultUseCaseId ?? DEFAULT_LANDING_USE_CASE_ID + ); + + const uc = snippets.useCases[activeUseCase]; + const connectorSnippet = uc?.connector ?? snippets.connector; + const memorySchemaSnippet = uc?.memorySchema ?? snippets.memorySchema; + const watcherSnippet = uc?.watcher ?? snippets.watcher; + return ( <> - - - + + ({ + id: s.id, + label: s.label, + }))} + activeId={activeUseCase} + onSelect={setActiveUseCase} + /> + + + + @@ -69,9 +106,11 @@ export function LandingPage(props: { latestPosts?: LatestBlogPost[] }) { function Container(props: { children: preact.ComponentChildren; className?: string; + id?: string; }) { return (
    {props.children} @@ -108,13 +147,8 @@ function SectionHeading(props: { /* Hero */ /* -------------------------------------------------------------------------- */ -const CAST_SRC = "/casts/claude.cast"; - -const NPX_COMMAND = "npx @lobu/cli@latest init my-agent"; - function Hero() { const [copied, setCopied] = useState(false); - const [npxCopied, setNpxCopied] = useState(false); const onCopy = async () => { try { @@ -126,16 +160,6 @@ function Hero() { } }; - const onCopyNpx = async () => { - try { - await navigator.clipboard.writeText(NPX_COMMAND); - setNpxCopied(true); - window.setTimeout(() => setNpxCopied(false), 2000); - } catch { - setNpxCopied(false); - } - }; - return (
    @@ -152,10 +176,11 @@ function Hero() { class="hero-rise hero-rise-2 mx-auto max-w-[58rem] font-display text-[clamp(2.25rem,4.8vw,3.5rem)] font-bold leading-[1.06] tracking-[-0.028em]" style={{ color: "var(--color-page-text)" }} > + Build{" "} - Build proactive agents + proactive {" "} - on a + agents on a
    self-building @@ -166,9 +191,9 @@ function Hero() { class="hero-rise hero-rise-3 mx-auto mt-5 max-w-[42rem] text-[17px] leading-[1.55]" style={{ color: "var(--color-page-text-muted)" }} > - Connectors stream events into an append-only memory. LLM watchers - shape them into entities your agent can search and cite. Open source, - multi-tenant, BYO model. + An automated pipeline streams every event into the graph. Agents react + to changes, take action, and reach people as bots, or other agents + over MCP and HTTP.

    or paste the prompt into claude code,{" "} cursor, or{" "} - opencode — it'll scaffold the project + opencode, it'll scaffold the project for you

    -
    - -
    ); } -function TerminalWindow(props: { npxCopied: boolean; onCopyNpx: () => void }) { - return ( -
    -
    - - - - -
    - -
    - ); -} - function CopyIcon(props: { copied: boolean }) { return props.copied ? ( sibling renders even when the - // asciinema player script fails to mount (JS error, blocked CDN, JS off), - // so assistive tech and no-JS visitors still get the gist of what plays. - // The asciinema mount target is a separate child
    so the player's - // DOM rewrites don't clobber the summary. - return ( - } code={
    - - + +
    } /> @@ -660,9 +510,67 @@ function ConnectorsSection() { ); } -function MemorySection() { +const CONNECTOR_SRC_BASE = + "https://github.com/lobu-ai/lobu/blob/main/packages/connectors/src"; + +// Renders every built-in connector as a chip linking to its source file. +// The list is generated from packages/connectors by scripts/gen-connectors.ts, +// so adding a connector surfaces it here automatically. +function ConnectorChips() { return ( - +
    +
    + Built-in connectors +
    +
    + {connectorsManifest.map((c) => ( + + {c.iconPath ? ( + + ) : ( + + {c.name.charAt(0)} + + )} + + ))} +
    +
    + ); +} + +function MemorySection({ + memorySchema, + slug, +}: { + memorySchema: CodeSnippet; + slug: string; +}) { + return ( + Declare entity types in YAML. Lobu stores them as append-only - events with full audit. Multi-tenant by default — agents see only + events with full audit. Multi-tenant by default, agents see only their scope.

    - Entity types & relationships — declare what your + Entity types & relationships: declare what your agent should remember; link entities with typed relations. , <> - Append-only — every change is a new event. Tombstones + Append-only: every change is a new event. Tombstones supersede; nothing is destroyed. , <> - Agent-assisted modeling — paste the setup prompt into + Agent-assisted modeling: paste the setup prompt into Claude Code or Cursor; it interviews you and drafts{" "} schema.yaml. , <> - Per-user / per-org isolation — your agents only see the + Per-user / per-org isolation: your agents only see the memory they're scoped to. , ]} @@ -707,8 +615,8 @@ function MemorySection() { } code={
    - - + +
    } /> @@ -716,7 +624,13 @@ function MemorySection() { ); } -function WatchersSection() { +function WatchersSection({ + watcher, + slug, +}: { + watcher: CodeSnippet; + slug: string; +}) { return ( prompt +{" "} extraction_schema. Lobu runs the LLM, validates, and persists the output to memory.{" "} - No application code — fire on events, or run on cron. + No application code: fire on events, or run on cron.

    - Reactive — fires on the event stream (e.g.{" "} + Reactive: fires on the event stream (e.g.{" "} linear.issue.created ). , <> - Dreaming — runs on cron. Aggregates the previous day's + Dreaming: runs on cron. Aggregates the previous day's events into higher-level entities. , <> - No-code ETL — the prompt is your transformation; the + No-code ETL: the prompt is your transformation; the schema is your output type. , <> - Reactions are optional — drop in a{" "} + Reactions are optional: drop in a{" "} *.reaction.ts only when you need imperative code on top. , <> - Auditable — every run lands as events in the durable + Auditable: every run lands as events in the durable log. , ]} @@ -775,18 +689,18 @@ function WatchersSection() { } code={
    - +

    - When the watcher extracts data, this reaction runs: + Reactions run code when memory changes. For example:

    - +
    } /> @@ -795,7 +709,7 @@ function WatchersSection() { } /* -------------------------------------------------------------------------- */ -/* Skills section — snippet is the YAML frontmatter of the deliveroo-order */ +/* Skills section: snippet is the YAML frontmatter of the deliveroo-order */ /* SKILL.md, trimmed at build time by gen-landing-snippets.ts (the example */ /* that exercises every field the pitch promises: nixPackages, */ /* network.allow, network.judge, judges.default). */ @@ -803,7 +717,7 @@ function WatchersSection() { function SkillsSection() { return ( - + - Instructions — markdown describing when the agent - should use this skill. + Instructions: markdown describing when the agent should + use this skill. , <> - Tools — TypeScript functions the agent calls. + Tools: TypeScript functions the agent calls. Auto-registered as MCP tools. , <> - Network — allowed domains + per-domain LLM egress judge + Network: allowed domains + per-domain LLM egress judge in YAML. , <> - Packages — Nix packages (git, jq, etc.) merged into the + Packages: Nix packages (git, jq, etc.) merged into the worker env. , ]} @@ -858,7 +772,7 @@ function SkillsSection() { class="mt-2 text-[13px]" style={{ color: "var(--color-page-text-muted)" }} > - Plus the markdown body — instructions for when and how the agent + Plus the markdown body, instructions for when and how the agent should use this skill.

    @@ -883,31 +797,60 @@ function AgentsSection() { style={{ color: "var(--color-page-text-muted)" }} > Declare your agent in{" "} - lobu.toml — provider, + lobu.toml: provider, model, skills. One config, every surface below.

    - Every chat surface —{" "} - Slack,{" "} - Telegram,{" "} - Discord,{" "} - Teams,{" "} - WhatsApp,{" "} - HTTP, MCP. Same{" "} + Every chat surface:{" "} + + Slack + + ,{" "} + + Telegram + + ,{" "} + + Discord + + ,{" "} + + Teams + + ,{" "} + + WhatsApp + + , HTTP, MCP. Same{" "} lobu.toml. , <> - BYO model — Anthropic, OpenAI, Z.ai, OpenRouter, your + BYO model: Anthropic, OpenAI, Z.ai, OpenRouter, your own. , <> - Per-user isolation — workers scoped by user/channel. + Per-user isolation: workers scoped by user/channel. Secrets stay in the proxy. , <> - Durable & audited — every agent action is an event + Durable & audited: every agent action is an event in the log. , ]} @@ -944,7 +887,7 @@ function RunAnywhereSection() { title: "Embedded, single process.", body: ( <> - Gateway, workers, memory, embeddings — all in one Node process. + Gateway, workers, memory, embeddings, all in one Node process. Postgres is the only external. ), diff --git a/packages/landing/src/components/Nav.tsx b/packages/landing/src/components/Nav.tsx index c13a814a0..1483a8aca 100644 --- a/packages/landing/src/components/Nav.tsx +++ b/packages/landing/src/components/Nav.tsx @@ -1,8 +1,5 @@ import { useEffect, useRef, useState } from "preact/hooks"; -import { - getLobuLoginUrl, - landingUseCaseGroupedOptions, -} from "../use-case-showcases"; +import { getLobuLoginUrl } from "../use-case-showcases"; const GITHUB_URL = "https://github.com/lobu-ai/lobu"; const GITHUB_STARS_BADGE = @@ -29,40 +26,6 @@ type MegaMenu = { widthRem: number; }; -function buildSolutionsMenu(): MegaMenu { - const personalUseCases = [ - ...(landingUseCaseGroupedOptions.find((group) => group.label === "Personal") - ?.useCases ?? []), - ...(landingUseCaseGroupedOptions.find((group) => group.label === "Public") - ?.useCases ?? []), - ]; - const groups = landingUseCaseGroupedOptions - .filter((group) => group.label !== "Public") - .map((group) => - group.label === "Personal" - ? { ...group, useCases: personalUseCases } - : group - ); - - const richColumns: MenuColumn[] = groups.map((group) => ({ - heading: group.label.toUpperCase(), - variant: "rich", - links: group.useCases.map((uc) => ({ - label: uc.label, - href: `/for/${uc.id}`, - emoji: uc.emoji, - })), - })); - - return { - id: "solutions", - label: "Solutions", - width: "min(32rem, calc(100vw - 2rem))", - widthRem: 32, - columns: richColumns, - }; -} - const RESOURCES_MENU: MegaMenu = { id: "resources", label: "Resources", @@ -73,12 +36,6 @@ const RESOURCES_MENU: MegaMenu = { heading: "LEARN", variant: "rich", links: [ - { - label: "Docs", - description: "Build, deploy, and run agents", - href: "/getting-started", - emoji: "📘", - }, { label: "Blog", description: "Engineering notes and updates", @@ -297,7 +254,6 @@ type NavProps = { export function Nav({ currentPath: _currentPath = "/" }: NavProps) { const [openId, setOpenId] = useState(null); - const solutions = buildSolutionsMenu(); const loginUrl = getLobuLoginUrl(); useEffect(() => { @@ -344,11 +300,13 @@ export function Nav({ currentPath: _currentPath = "/" }: NavProps) { Lobu