import { U as UserTaskStatus, a as UserTaskAssigneeType, b as UserTaskRecord, c as UserPlanStatus, d as UserPlanRecord, e as UserPlanVerificationStatus, f as UserPlanLearningType, g as UserPlanLearningTargetKind, h as UserPlanLearningStatus, i as UserPlanLearningLevel, j as UserPlanLearningRecord, k as UserPlanCriterionRecord, l as UserPlanVerificationRecord, m as UserPlanCreateInput, n as UserPlanUpdateInput, P as ProjectItemRecord, o as UserPlanLearningCreateTasksInput, p as UserPlanLearningCreateTasksResult, q as UserTaskReorderInput, W as WorkflowSummary, r as WorkflowCapability, s as WorkflowDetail, t as WorkflowInputStartParams, u as WorkflowInputSessionResult, v as WorkflowInputSessionDetail, w as WorkflowInputEvent, x as WorkflowGraph, y as WorkflowRunContentRetention, z as WorkflowRunDetail, A as WorkflowRunCancellationResult, B as WorkflowTemplateProjectionUpsertParams, C as WorkflowTemplateProjectionResult, D as PublicWorkflowTemplateProjection, E as WorkflowTemplateProjectionRevocationResult, F as WorkflowTemplateBindingCompletionParams, G as WorkflowTemplateBindingCompletionResult, H as WorkflowTemplateShortUrlParams, I as WorkflowTemplateShortUrlResult, S as ShortUrlRevokeResult, J as WorkflowTemplateImportPayload, K as ImportedWorkflowTemplate } from './cli-DIJd09_q.js'; export { L as AuthMethodsStatus, M as AuthoritativeChatReconciliation, N as BackupCodesResult, O as BankTransferOrderDetails, Q as BankTransferStatus, R as CachedChat, T as CachedNewChatSuggestion, V as ChatListPage, X as CliSignupResult, Y as DecryptedDraft, Z as DecryptedEmbed, _ as DecryptedMemoryEntry, $ as DecryptedMessage, a0 as DecryptedNewChatSuggestion, a1 as DocsFile, a2 as DocsFolder, a3 as DocsSearchResult, a4 as DocsTree, a5 as EncryptedDraft, a6 as GiftCardBankTransferStatus, a7 as INTEREST_TAG_IDS, a8 as ImagesAiDetectionClassification, a9 as ImagesAiDetectionSummary, aa as InterestTagId, ab as MATE_NAMES, ac as MEMORY_TYPE_REGISTRY, ad as MemoryFieldDef, ae as MemoryTypeDef, af as OpenMatesClient, ag as OpenMatesClientOptions, ah as OpenMatesSession, ai as SyncCache, aj as TopicPreferencesPayload, ak as TotpSetupStartResult, al as WorkflowEdge, am as WorkflowNode, an as WorkflowNodeRun, ao as WorkflowNodeType, ap as WorkflowRunContentStorage, aq as buildImagesAiDetectionSummary, ar as classifyImagesAiDetection, as as deriveAppUrl, at as formatImagesAiDetectionLabel, au as getExtForLang, av as normalizeInterestTagIds, aw as reconcileAuthoritativeChats, ax as serializeToYaml } from './cli-DIJd09_q.js'; declare function defaultCloneBranchForVersion(version: string): string | null; declare const SUPPORT_URL = "https://openmates.org/#settings/support"; declare function renderSupportInfo(): string; type AppSkillRunOptions = { promptInjectionProtection?: boolean; }; type AppSkillRunner = (appId: string, skillId: string, input: unknown, options?: AppSkillRunOptions) => Promise; type SkillInput = Record; declare const APP_SKILL_METADATA: readonly [{ readonly app_id: "ai"; readonly skill_id: "ask"; readonly app_namespace_ts: "ai"; readonly skill_method_ts: "ask"; readonly app_namespace_py: "ai"; readonly skill_method_py: "ask"; readonly description_key: "ai.ask.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: { readonly prompt: { readonly type: "string"; readonly description: "The question or task for the Workflow AI step."; }; readonly conversation: { readonly type: "string"; readonly description: "Optional run-local conversation name for retaining previous Workflow AI context in the same run."; }; }; readonly required: readonly ["prompt"]; }; }, { readonly app_id: "audio"; readonly skill_id: "generate"; readonly app_namespace_ts: "audio"; readonly skill_method_ts: "generate"; readonly app_namespace_py: "audio"; readonly skill_method_py: "generate"; readonly description_key: "app_skills.audio.generate.description"; readonly description: "Generate short, non-speech sound effects from text prompts, such as UI confirmation ticks, gentle alerts, transitions, and product sounds. Do not use this for spoken words, narration, vocals, voice cloning, scams, public figures, or deceptive media; use audio.speak for explicit speech generation."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly minItems: 1; readonly maxItems: 5; readonly description: "REQUIRED: Array of short sound-effect generation request objects."; readonly items: { readonly type: "object"; readonly properties: { readonly id: { readonly description: "Optional caller-supplied ID preserved in the result."; }; readonly prompt: { readonly type: "string"; readonly minLength: 1; readonly maxLength: 400; readonly description: "Non-speech sound effect prompt."; }; readonly provider: { readonly type: "string"; readonly enum: readonly ["elevenlabs"]; readonly default: "elevenlabs"; readonly description: "Audio provider. v1 supports ElevenLabs only; keep explicit for future provider expansion."; }; readonly duration_seconds: { readonly type: "number"; readonly minimum: 0.5; readonly maximum: 2; readonly default: 1; }; readonly prompt_influence: { readonly type: "number"; readonly minimum: 0; readonly maximum: 1; readonly default: 0.3; }; readonly loop: { readonly type: "boolean"; readonly default: false; }; readonly output_format: { readonly type: "string"; readonly enum: readonly ["mp3_22050_32", "mp3_24000_48", "mp3_44100_32", "mp3_44100_64", "mp3_44100_96", "mp3_44100_128", "mp3_44100_192"]; readonly default: "mp3_44100_128"; }; readonly model: { readonly type: "string"; readonly enum: readonly ["eleven_text_to_sound_v2"]; readonly default: "eleven_text_to_sound_v2"; }; }; readonly required: readonly ["prompt", "provider"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "audio"; readonly skill_id: "speak"; readonly app_namespace_ts: "audio"; readonly skill_method_ts: "speak"; readonly app_namespace_py: "audio"; readonly skill_method_py: "speak"; readonly description_key: "app_skills.audio.speak.description"; readonly description: "Convert explicit user-provided text into short speech audio using an OpenMates voice preset after a required GPT OSS safeguard approval. Do not use this for automatic assistant voice replies, long narration, voice cloning, raw provider voice IDs, impersonation, scams, or deceptive speech."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly minItems: 1; readonly maxItems: 3; readonly description: "REQUIRED: Array of explicit text-to-speech request objects."; readonly items: { readonly type: "object"; readonly properties: { readonly id: { readonly description: "Optional caller-supplied ID preserved in the result."; }; readonly text: { readonly type: "string"; readonly minLength: 1; readonly maxLength: 2000; readonly description: "Text to synthesize after safety approval."; }; readonly provider: { readonly type: "string"; readonly enum: readonly ["elevenlabs"]; readonly default: "elevenlabs"; readonly description: "Audio provider. v1 supports ElevenLabs only; keep explicit for future provider expansion."; }; readonly voice: { readonly type: "string"; readonly enum: readonly ["warm_neutral", "bright_neutral", "calm_narrator"]; readonly default: "warm_neutral"; readonly description: "OpenMates voice preset; raw provider voice IDs are not accepted."; }; readonly accent: { readonly type: "string"; readonly enum: readonly ["en_us", "en_gb", "de_de", "es_es", "fr_fr"]; readonly default: "en_us"; }; readonly style: { readonly type: "string"; readonly enum: readonly ["natural", "calm", "friendly", "energetic"]; readonly default: "natural"; }; readonly speed: { readonly type: "number"; readonly minimum: 0.7; readonly maximum: 1.2; readonly default: 1; }; readonly output_format: { readonly type: "string"; readonly enum: readonly ["mp3_22050_32", "mp3_24000_48", "mp3_44100_32", "mp3_44100_64", "mp3_44100_96", "mp3_44100_128", "mp3_44100_192"]; readonly default: "mp3_44100_128"; }; readonly model: { readonly type: "string"; readonly enum: readonly ["eleven_multilingual_v2", "eleven_flash_v2_5"]; readonly default: "eleven_multilingual_v2"; readonly description: "ElevenLabs TTS model. Multilingual v2 is the higher-quality default; Flash v2.5 is the lower-cost explicit option."; }; }; readonly required: readonly ["text", "provider"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "books"; readonly skill_id: "translate"; readonly app_namespace_ts: "books"; readonly skill_method_ts: "translate"; readonly app_namespace_py: "books"; readonly skill_method_py: "translate"; readonly description_key: "books.translate.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "business"; readonly skill_id: "company_financials"; readonly app_namespace_ts: "business"; readonly skill_method_ts: "companyFinancials"; readonly app_namespace_py: "business"; readonly skill_method_py: "company_financials"; readonly description_key: "app_skills.business.company_financials.description"; readonly description: "Get official SEC EDGAR financial filing facts for explicit public company tickers, CIKs, or exact company names, including revenue, profit, cash flow, and balance sheet data. Use for company performance research and comparisons; do not use for private companies, investment advice, stock-price forecasts, portfolio decisions, or discovering companies by broad category."; readonly schema: { readonly type: "object"; readonly properties: { readonly companies: { readonly type: "array"; readonly description: "Explicit public companies to look up by ticker, CIK, or exact company name. Do not pass broad categories such as \"egg producers\"."; readonly minItems: 1; readonly maxItems: 10; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Ticker, CIK, or exact public company name, e.g. CALM, 0000016160, or Cal-Maine Foods Inc."; }; readonly identifier_type: { readonly type: "string"; readonly enum: readonly ["auto", "ticker", "cik", "company_name"]; readonly default: "auto"; }; readonly display_name: { readonly type: "string"; readonly description: "Optional user-facing label from the original request."; }; }; readonly required: readonly ["query"]; }; }; readonly period: { readonly type: "string"; readonly enum: readonly ["latest_annual", "latest_quarter", "annual_history", "quarterly_history"]; readonly default: "latest_annual"; }; readonly metric_group: { readonly type: "string"; readonly enum: readonly ["summary", "income", "balance_sheet", "cash_flow", "all"]; readonly default: "summary"; }; readonly years: { readonly type: "integer"; readonly minimum: 1; readonly maximum: 10; readonly default: 3; }; readonly include_sources: { readonly type: "boolean"; readonly default: true; }; }; readonly required: readonly ["companies"]; }; }, { readonly app_id: "code"; readonly skill_id: "search_repos"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "searchRepos"; readonly app_namespace_py: "code"; readonly skill_method_py: "search_repos"; readonly description_key: "code.search_repos.description"; readonly description: "Search GitHub repositories. Use this instead of web.search whenever the user asks to find GitHub repos, repositories, open-source libraries, starred repos, or repo examples by topic, language, framework, or project need. Returns licensed repository embeds. Costs 10 credits per search."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of repository search requests. Each request searches GitHub for public licensed repositories matching the query.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Repository search query, e.g. \"svelte markdown editor\", \"python cli framework\", or \"rust web server\".\n"; }; readonly count: { readonly type: "integer"; readonly minimum: 1; readonly maximum: 10; readonly default: 6; readonly description: "Number of repositories to return."; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "code"; readonly skill_id: "get_docs"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "getDocs"; readonly app_namespace_py: "code"; readonly skill_method_py: "get_docs"; readonly description_key: "code.get_docs.description"; readonly description: "Get latest documentation for programming libraries, frameworks, APIs, SDKs. Use for ANY programming-related query about a specific library or framework."; readonly schema: { readonly type: "object"; readonly properties: { readonly library: { readonly type: "string"; readonly description: "Library name to search for (e.g., \"Svelte 5\", \"React\", \"FastAPI\", \"Miro API\", etc.).\n"; }; readonly question: { readonly type: "string"; readonly description: "Natural language question about the documentation needed\n(e.g., \"How to use useState hook?\", \"How to setup routing?\").\n"; }; }; readonly required: readonly ["library", "question"]; }; }, { readonly app_id: "code"; readonly skill_id: "image_to_html"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "imageToHtml"; readonly app_namespace_py: "code"; readonly skill_method_py: "image_to_html"; readonly description_key: "app_skills.code.image_to_html.description"; readonly description: "Turn an uploaded screenshot into one standalone index.html code embed with inline CSS and optional inline JavaScript. Use this when the user asks to convert a screenshot, mockup, UI image, or app screen into HTML. Do not use remote image URLs; pass source_image with the uploaded image embed_ref in chat, or image_base64 for REST/API calls."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of screenshot-to-HTML requests."; readonly items: { readonly type: "object"; readonly properties: { readonly image_base64: { readonly type: "string"; readonly description: "Base64-encoded PNG, JPEG, or WEBP image bytes. Use this for REST/API calls."; }; readonly source_image: { readonly type: "string"; readonly description: "Uploaded image filename/embed_ref from the conversation. Use this in chat/CLI when the user references an attached screenshot or mockup."; }; readonly mime_type: { readonly type: "string"; readonly enum: readonly ["image/png", "image/jpeg", "image/webp"]; readonly description: "MIME type for image_base64. Optional when using source_image because the server resolves it from the uploaded image."; }; readonly filename: { readonly type: "string"; readonly description: "Optional source filename for caller-side correlation."; }; readonly max_correction_passes: { readonly type: "integer"; readonly minimum: 0; readonly maximum: 5; readonly default: 2; readonly description: "Maximum E2B render-feedback correction passes."; }; }; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "code"; readonly skill_id: "clean_repo"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "cleanRepo"; readonly app_namespace_py: "code"; readonly skill_method_py: "clean_repo"; readonly description_key: "code.clean_repo.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "code"; readonly skill_id: "get_issues"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "getIssues"; readonly app_namespace_py: "code"; readonly skill_method_py: "get_issues"; readonly description_key: "code.get_issues.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "code"; readonly skill_id: "add_issue"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "addIssue"; readonly app_namespace_py: "code"; readonly skill_method_py: "add_issue"; readonly description_key: "code.add_issue.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "code"; readonly skill_id: "remove_secrets"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "removeSecrets"; readonly app_namespace_py: "code"; readonly skill_method_py: "remove_secrets"; readonly description_key: "code.remove_secrets.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "code"; readonly skill_id: "get_project_overview"; readonly app_namespace_ts: "code"; readonly skill_method_ts: "getProjectOverview"; readonly app_namespace_py: "code"; readonly skill_method_py: "get_project_overview"; readonly description_key: "code.get_project_overview.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "design"; readonly skill_id: "search_icons"; readonly app_namespace_ts: "design"; readonly skill_method_ts: "searchIcons"; readonly app_namespace_py: "design"; readonly skill_method_py: "search_icons"; readonly description_key: "app_skills.design.search_icons.description"; readonly description: "Search for free SVG icons for UI, product, interface, or graphic design. Use this when the user asks to find icons by name, concept, object, or action. Do not use it for brand-logo search or generated icon creation."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of icon search requests backed by Iconify."; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query, e.g. \"home\", \"calendar\", or \"settings\"."; }; readonly count: { readonly type: "integer"; readonly minimum: 1; readonly maximum: 50; readonly default: 24; readonly description: "Maximum number of icon results to return."; }; readonly license_policy: { readonly type: "string"; readonly enum: readonly ["permissive", "all"]; readonly default: "permissive"; readonly description: "Filter to permissive/no-attribution licenses by default."; }; readonly include_prefixes: { readonly type: "array"; readonly items: { readonly type: "string"; }; readonly description: "Optional Iconify collection prefixes to include."; }; readonly exclude_prefixes: { readonly type: "array"; readonly items: { readonly type: "string"; }; readonly description: "Optional Iconify collection prefixes to exclude."; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "electronics"; readonly skill_id: "search_components"; readonly app_namespace_ts: "electronics"; readonly skill_method_ts: "searchComponents"; readonly app_namespace_py: "electronics"; readonly skill_method_py: "search_components"; readonly description_key: "electronics.search_components.description"; readonly description: "Use this skill when the user asks to find electronic components, especially power converters or voltage regulators matching input voltage, output voltage, output current, efficiency, BOM cost, footprint, or topology requirements. Currently supports category power_converters via Texas Instruments WEBENCH Power Designer."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Component search requests. Use one request per distinct power rail or component category.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly id: { readonly description: "Optional caller-supplied ID for correlating responses."; }; readonly category: { readonly type: "string"; readonly enum: readonly ["power_converters"]; readonly description: "Component category. Currently only power_converters is supported."; }; readonly input_voltage_min: { readonly type: "number"; readonly description: "Minimum input voltage in volts. For fixed input voltage, use the same value as input_voltage_max."; }; readonly input_voltage_max: { readonly type: "number"; readonly description: "Maximum input voltage in volts. For fixed input voltage, use the same value as input_voltage_min."; }; readonly output_voltage: { readonly type: "number"; readonly description: "Target output voltage in volts."; }; readonly output_current_max: { readonly type: "number"; readonly description: "Maximum output current in amps."; }; readonly supply_type: { readonly type: "string"; readonly enum: readonly ["dc", "ac"]; readonly default: "dc"; readonly description: "dc for DC/DC converters, ac for AC/DC converters."; }; readonly isolated: { readonly type: "boolean"; readonly default: false; readonly description: "Whether the design should be isolated."; }; readonly ambient_temp_c: { readonly type: "number"; readonly default: 30; readonly description: "Maximum ambient temperature in degrees Celsius."; }; readonly optimization: { readonly type: "string"; readonly enum: readonly ["balanced", "low_cost", "high_efficiency", "small_footprint"]; readonly default: "balanced"; readonly description: "Optimization goal for WEBENCH ranking."; }; readonly max_results: { readonly type: "integer"; readonly default: 10; readonly description: "Maximum number of candidate components to return."; }; }; readonly required: readonly ["category", "input_voltage_min", "input_voltage_max", "output_voltage", "output_current_max"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "events"; readonly skill_id: "search"; readonly app_namespace_ts: "events"; readonly skill_method_ts: "search"; readonly app_namespace_py: "events"; readonly skill_method_py: "search"; readonly description_key: "events.search.description"; readonly description: "Search for local or online events, meetups, hackathons, conferences, workshops, networking events, parties, concerts, or any community gathering. Use ONLY this skill for event searches — do NOT additionally call web.search or any other search skill for the same query. Sources: Meetup, Luma, Eventbrite, Google Events, Resident Advisor (electronic music/clubs), Siegessäule (Berlin LGBTQ+ events), Berlin Philharmonic (classical concerts in Berlin), and official event schedules for GPN24, 39C3, 38C3"; readonly schema: { readonly type: "object"; readonly properties: { readonly provider: { readonly type: "string"; readonly description: "The event provider to use. 'auto' (default) queries all providers in parallel for best coverage. Use specific providers when the user asks about a particular platform/type: 'Eventbrite' for Eventbrite-only results, 'Resident Advisor' for electronic music/clubs, 'Siegessäule' for Berlin LGBTQ+ events, 'GPN24', '39C3', '38C3', or '37C3' for official schedules of those events.\n"; readonly enum: readonly ["auto", "Meetup", "Luma", "Eventbrite", "Google Events", "Resident Advisor", "Siegessäule", "Berlin Philharmonic", "GPN24", "39C3", "38C3", "37C3"]; }; readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of event search request objects for parallel processing.\nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single search.\nExample for single search: {\"requests\": [{\"query\": \"AI\", \"location\": \"Berlin, Germany\"}]}\nExample for multiple searches: {\"requests\": [{\"query\": \"AI\", \"location\": \"Berlin\"}, {\"query\": \"Python\", \"location\": \"Munich\"}]}\nEach object must contain 'query' and either 'location' (or lat/lon) for city searches,\nor 'conference' for GPN/Congress schedule searches. All other parameters are optional.\nNote: The 'id' field is auto-generated if not provided.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Topic or theme of events to search for (e.g. 'AI', 'Python', 'hackathon', 'startup', 'networking'). Do NOT include platform or app names such as 'meetup', 'luma', or 'eventbrite' — these are stripped automatically and reduce result quality.\n"; }; readonly location: { readonly type: "string"; readonly description: "City name or 'city, country' string (e.g. 'Berlin, Germany', 'New York', 'Paris'). Used if lat/lon are not provided. Not required when using a GPN/Congress event schedule provider with a conference value."; }; readonly lat: { readonly type: "number"; readonly description: "Latitude of search center (decimal degrees). Overrides location string if provided."; }; readonly lon: { readonly type: "number"; readonly description: "Longitude of search center (decimal degrees). Overrides location string if provided."; }; readonly start_date: { readonly type: "string"; readonly description: "Start of date range in ISO 8601 format. Include timezone if known (e.g. '2026-03-01T00:00:00+01:00[Europe/Berlin]'). If omitted, defaults to now."; }; readonly end_date: { readonly type: "string"; readonly description: "End of date range in ISO 8601 format (same format as start_date). If omitted, no upper bound is applied."; }; readonly event_type: { readonly type: "string"; readonly description: "Filter by event type. Use 'PHYSICAL' when user searches for events in a city (default for location-based searches). Use 'ONLINE' when user explicitly asks for virtual/online/remote events. Omit only when user wants both types."; readonly enum: readonly ["PHYSICAL", "ONLINE"]; }; readonly radius_miles: { readonly type: "number"; readonly description: "Search radius in miles from the center coordinates (default: 25, ~40 km). Only applies to PHYSICAL events."; readonly default: 25; }; readonly count: { readonly type: "integer"; readonly description: "Maximum number of events to return (default: 10, max: 50). Use 10 unless the user asks for more results."; readonly minimum: 1; readonly maximum: 50; readonly default: 10; }; readonly provider: { readonly type: "string"; readonly description: "Provider for this request. Overrides the top-level provider when set."; readonly enum: readonly ["auto", "Meetup", "Luma", "Eventbrite", "Google Events", "Resident Advisor", "Siegessäule", "Berlin Philharmonic", "GPN24", "39C3", "38C3", "37C3"]; }; readonly providers: { readonly type: "array"; readonly items: { readonly type: "string"; readonly enum: readonly ["Meetup", "Luma", "Eventbrite", "Google Events", "Resident Advisor", "Siegessäule", "Berlin Philharmonic", "GPN24", "39C3", "38C3", "37C3"]; }; readonly description: "Specific providers for this request. Use only when the user asks to search multiple named event platforms."; }; readonly conference: { readonly type: "string"; readonly description: "Known GPN/Congress schedule to search. Supported values: GPN24, 39C3, 38C3, 37C3."; readonly enum: readonly ["GPN24", "39C3", "38C3", "37C3"]; }; readonly past_events: { readonly type: "boolean"; readonly description: "Default false. Set true only when the user explicitly asks to include past/completed conference sessions."; readonly default: false; }; readonly concert_tags: { readonly type: "array"; readonly items: { readonly type: "string"; }; readonly description: "Optional tag filters for the Berlin Philharmonic provider. Use when the user asks about classical concerts in Berlin. Known values: Piano, Chamber Music, Jazz, Organ, Modern, Lunch Concerts, Singers, Children and Family, World. Ignored by all other providers.\n"; }; }; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "fitness"; readonly skill_id: "search_locations"; readonly app_namespace_ts: "fitness"; readonly skill_method_ts: "searchLocations"; readonly app_namespace_py: "fitness"; readonly skill_method_py: "search_locations"; readonly description_key: "fitness.search_locations.description"; readonly description: "Search Urban Sports Club public fitness locations. Use this when the user asks for gyms, studios, pools, or Urban Sports locations near a city, address, or radius. Do not use it for class availability; use fitness.search_classes for dated class searches."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; }; readonly city: { readonly type: "string"; }; readonly address: { readonly type: "string"; }; readonly lat: { readonly type: "number"; }; readonly lon: { readonly type: "number"; }; readonly radius_km: { readonly type: "number"; }; readonly plan: { readonly type: "string"; }; readonly category: { readonly type: "string"; }; readonly limit: { readonly type: "number"; }; }; }; readonly description: "Location search requests."; }; }; }; }, { readonly app_id: "fitness"; readonly skill_id: "search_classes"; readonly app_namespace_ts: "fitness"; readonly skill_method_ts: "searchClasses"; readonly app_namespace_py: "fitness"; readonly skill_method_py: "search_classes"; readonly description_key: "fitness.search_classes.description"; readonly description: "Search available Urban Sports Club public fitness classes. Use this when the user asks for dated fitness classes, course availability, free spots, on-site classes, online classes, or plan-filtered Urban Sports classes. Omit plan unless the user explicitly asks for Essential, Classic, Premium, or Max."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; }; readonly city: { readonly type: "string"; }; readonly address: { readonly type: "string"; }; readonly lat: { readonly type: "number"; }; readonly lon: { readonly type: "number"; }; readonly radius_km: { readonly type: "number"; }; readonly start_date: { readonly type: "string"; }; readonly end_date: { readonly type: "string"; }; readonly days: { readonly type: "number"; }; readonly plan: { readonly type: "string"; }; readonly attendance_mode: { readonly type: "string"; }; readonly min_spots: { readonly type: "number"; }; readonly category: { readonly type: "string"; }; readonly venue_id: { readonly type: "string"; }; readonly limit: { readonly type: "number"; }; }; }; readonly description: "Class search requests."; }; }; }; }, { readonly app_id: "health"; readonly skill_id: "search_appointments"; readonly app_namespace_ts: "health"; readonly skill_method_ts: "searchAppointments"; readonly app_namespace_py: "health"; readonly skill_method_py: "search_appointments"; readonly description_key: "app_skills.health.search_appointments.description"; readonly description: "Search available medical appointments at German doctors/specialists by speciality and city. Covers any medical booking — general practitioners, specialists (e.g. dentist, dermatologist, gynecologist), scans and imaging (e.g. MRT/MRI, CT, Röntgen, Ultraschall), vaccinations, check-ups, blood tests, and other examinations. Note: \"Termin\" in a medical context means appointment, not event — route here instead of events-search. Sources: Doctolib, Jameda (Germany only)."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of appointment search requests. Each request searches for available doctor appointments for a given speciality and city.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly speciality: { readonly type: "string"; readonly description: "Doctor speciality or type. Supports German and English names. Examples: \"augenarzt\", \"hautarzt\", \"allgemeinmedizin\", \"zahnarzt\", \"gynäkologie\", \"kardiologie\", \"orthopädie\", \"neurologie\", \"kinderarzt\", \"hno\", \"physiotherapie\", \"urologie\", \"ophthalmologist\", \"dermatologist\", \"general_practitioner\", \"dentist\", \"cardiologist\", \"neurologist\", \"pediatrician\".\n"; }; readonly city: { readonly type: "string"; readonly description: "City where to search for appointments. Supports German and English city names. Examples: \"Berlin\", \"München\", \"Munich\", \"Hamburg\", \"Köln\", \"Frankfurt\", \"Stuttgart\", \"Düsseldorf\", \"Dresden\", \"Leipzig\", \"Hannover\", \"Nürnberg\", \"Bonn\", \"Heidelberg\".\n"; }; readonly provider_platform: { readonly type: "string"; readonly description: "Booking platform to search. \"both\" (default) searches Doctolib and Jameda in parallel and merges results sorted by soonest slot. \"doctolib_de\" for Doctolib Germany only. \"jameda\" for Jameda Germany only (includes ratings, prices, direct booking URLs).\n"; readonly enum: readonly ["both", "doctolib_de", "jameda"]; readonly default: "both"; }; readonly insurance_sector: { readonly type: "string"; readonly description: "Insurance type filter. \"public\" for gesetzliche Krankenversicherung (GKV), \"private\" for private Krankenversicherung (PKV). Omit to show results for all insurance types.\n"; readonly enum: readonly ["public", "private"]; }; readonly telehealth: { readonly type: "boolean"; readonly description: "If true, only return doctors offering telehealth (video consultation) appointments. Defaults to false.\n"; readonly default: false; }; readonly language: { readonly type: "string"; readonly description: "Filter for doctors who speak a specific language. Language codes: \"de\" (German), \"gb\" (English), \"ru\" (Russian), \"tr\" (Turkish), \"ar\" (Arabic), \"fr\" (French), \"es\" (Spanish), \"it\" (Italian), \"pl\" (Polish), \"ro\" (Romanian), \"zh\" (Chinese).\n"; }; readonly days_ahead: { readonly type: "integer"; readonly description: "How many days ahead to search for appointments. Must be one of 1, 3, or 7 (Doctolib API caps availability queries at 7 days). Defaults to 7.\n"; readonly enum: readonly [1, 3, 7]; readonly default: 7; }; readonly max_doctors: { readonly type: "integer"; readonly description: "Maximum number of doctors to check for availability. Higher values return more results but take longer. Defaults to 10.\n"; readonly default: 10; }; readonly visit_motive_category: { readonly type: "string"; readonly description: "Filter results by appointment type category. When set, the skill searches a larger pool of doctors and filters by the Doctolib visit motive name to return only relevant appointment types. \"general\" = consultation, acute visit, new patient examination. \"checkup\" = preventive screening, health check, cancer screening. \"vaccination\" = immunisation appointments. \"followup\" = follow-up visit, existing patient, check-up after treatment.\n"; readonly enum: readonly ["general", "checkup", "vaccination", "followup"]; }; }; readonly required: readonly ["speciality", "city"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "health"; readonly skill_id: "create_report"; readonly app_namespace_ts: "health"; readonly skill_method_ts: "createReport"; readonly app_namespace_py: "health"; readonly skill_method_py: "create_report"; readonly description_key: "health.create_report.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: {}; }; }, { readonly app_id: "home"; readonly skill_id: "search"; readonly app_namespace_ts: "home"; readonly skill_method_ts: "search"; readonly app_namespace_py: "home"; readonly skill_method_py: "search"; readonly description_key: "app_skills.home.search.description"; readonly description: "Search for apartments, houses, and WG rooms in German cities. Searches ImmoScout24, Kleinanzeigen, and WG-Gesucht simultaneously. Returns listings with prices, sizes, rooms, addresses, and direct links. Costs 10 credits per search. Use when user asks about finding housing in Germany."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of housing search requests. Each request searches for apartments and rooms in a German city across multiple platforms.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "City or location name to search in, e.g. \"Berlin\", \"Munich\", \"Hamburg\".\n"; }; readonly listing_type: { readonly type: "string"; readonly description: "Type of listing. \"rent\" for rentals (default), \"buy\" for purchases. Note: WG-Gesucht only has rentals and is skipped for \"buy\".\n"; readonly enum: readonly ["rent", "buy"]; readonly default: "rent"; }; readonly providers: { readonly type: "array"; readonly description: "Optional list of providers to search. Defaults to all three.\n"; readonly items: { readonly type: "string"; readonly enum: readonly ["ImmoScout24", "Kleinanzeigen", "WG-Gesucht"]; }; }; readonly max_results: { readonly type: "integer"; readonly description: "Maximum number of listings to return (1-20, default 10)."; readonly default: 10; readonly minimum: 1; readonly maximum: 20; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "images"; readonly skill_id: "generate"; readonly app_namespace_ts: "images"; readonly skill_method_ts: "generate"; readonly app_namespace_py: "images"; readonly skill_method_py: "generate"; readonly description_key: "images.generate.description"; readonly description: "Generate high-quality images from text prompts and/or reference images (image-to-image editing). Also use for: mockups, design concepts, visual mockup creation, logo mockups, product mockups, illustration requests, visual design, concept art, posters, banners, thumbnails, or any request that implies creating a visual output. Use output_filetype=\"svg\" for logos, icons, illustrations, and any other vector graphics that need to be scalable or editable. When the user provides uploaded images as refe"; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of image generation request objects for parallel processing (up to 5 requests).\nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single image.\nExample for single image: {\"requests\": [{\"prompt\": \"a cute cat\"}]}\nEach object must contain 'prompt' (detailed description), and can include optional\n'aspect_ratio', 'output_filetype', and 'quality'.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly prompt: { readonly type: "string"; readonly description: "Detailed description of the image to generate"; }; readonly aspect_ratio: { readonly type: "string"; readonly description: "Aspect ratio of the generated image"; readonly enum: readonly ["1:1", "16:9", "4:3", "3:2", "2:3", "9:16"]; readonly default: "1:1"; }; readonly output_filetype: { readonly type: "string"; readonly description: "Output file format. Use \"svg\" to generate a scalable vector graphic (SVG) via\nRecraft V4.1 — ideal for logos, icons, illustrations, and any graphic that needs\nto be scalable, editable in design tools, or used at any size without quality loss.\nUse \"png\" or \"jpg\" for photos, realistic scenes, and detailed raster images.\nWhen a Recraft model is selected, Recraft V4 is used for raster output as well.\n"; readonly enum: readonly ["png", "jpg", "svg"]; readonly default: "png"; }; readonly quality: { readonly type: "string"; readonly description: "Generation quality. Controls which model tier is used when Recraft is the provider.\nFor SVG output (output_filetype=\"svg\"):\n \"default\" uses Recraft V4.1 Vector (100 credits — good for web/UI use).\n \"max\" uses Recraft V4.1 Pro Vector (300 credits — best for print, large-format,\n or highly detailed vector illustrations).\nFor raster output (output_filetype=\"png\"/\"jpg\") with a Recraft model selected:\n \"default\" uses Recraft V4.1 (50 credits — fast, cost-effective).\n \"max\" uses Recraft V4.1 Pro (250 credits — high-resolution, print-ready).\nFor other raster models (Google Gemini, GPT Image 2, FLUX), quality may be handled by the provider.\n"; readonly enum: readonly ["default", "max"]; readonly default: "default"; }; readonly reference_images: { readonly type: "array"; readonly description: "Optional list of reference image filenames (embed_refs) to use as visual\nreferences for this generation. Pass the exact embed_ref values (original\nfilenames, e.g. \"my_photo.jpg\") from the toon blocks in the conversation.\nThe server resolves all cryptographic and storage details automatically.\nSupports up to 14 reference images. When provided, enables image-to-image\nediting/style-transfer mode (Google Gemini: same endpoint; FLUX: switches\nto the 4B edit model). Ignored for SVG/Recraft output.\n"; readonly items: { readonly type: "string"; readonly description: "Original filename (embed_ref) of an uploaded image"; }; }; }; readonly required: readonly ["prompt"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "images"; readonly skill_id: "generate_draft"; readonly app_namespace_ts: "images"; readonly skill_method_ts: "generateDraft"; readonly app_namespace_py: "images"; readonly skill_method_py: "generate_draft"; readonly description_key: "images.generate_draft.description"; readonly description: "Quickly generate a draft/preview image from a text prompt and/or reference images (image-to-image). Also use for: quick mockups, rough design concepts, draft illustrations, sketches, quick visual previews, or any request for a fast/rough image. When the user provides uploaded images as references (embed_refs), pass them via reference_images. Do not use this for scam, spam, fake-document, fake-endorsement, public-figure impersonation, or watermark/detection-evasion requests."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of image generation request objects for parallel processing (up to 5 requests).\nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single image.\nExample for single image: {\"requests\": [{\"prompt\": \"a cute cat\"}]}\nEach object must contain 'prompt' (description of the image).\n"; readonly items: { readonly type: "object"; readonly properties: { readonly prompt: { readonly type: "string"; readonly description: "Description of the image to generate"; }; readonly reference_images: { readonly type: "array"; readonly description: "Optional list of reference image filenames (embed_refs) to use as visual\nreferences for this generation. Pass the exact embed_ref values (original\nfilenames, e.g. \"my_photo.jpg\") from the toon blocks in the conversation.\nThe server resolves all cryptographic and storage details automatically.\nSupports up to 4 reference images. When provided, automatically switches to\nthe FLUX.2 [klein] 4B edit model (image-to-image, 27 credits).\n"; readonly items: { readonly type: "string"; readonly description: "Original filename (embed_ref) of an uploaded image"; }; }; }; readonly required: readonly ["prompt"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "mail"; readonly skill_id: "search"; readonly app_namespace_ts: "mail"; readonly skill_method_ts: "search"; readonly app_namespace_py: "mail"; readonly skill_method_py: "search"; readonly description_key: "app_skills.mail.search.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of mail search request objects.\nThe query field is optional. If omitted or empty, newest emails are returned first.\nExample: {\"requests\": [{\"query\": \"invoice\", \"limit\": 10}]}\nExample recent-first: {\"requests\": [{\"limit\": 10}]}\n"; readonly items: { readonly type: "object"; readonly properties: { readonly id: { readonly type: readonly ["string", "integer"]; readonly description: "Optional request id echoed in results"; }; readonly query: { readonly type: "string"; readonly description: "Optional search text (subject/from/body). Empty means recent-first listing."; }; readonly mailbox: { readonly type: "string"; readonly description: "Optional mailbox name (defaults to INBOX)"; }; readonly start_date: { readonly type: "string"; readonly description: "Optional inclusive start date for the search range (YYYY-MM-DD)"; }; readonly end_date: { readonly type: "string"; readonly description: "Optional inclusive end date for the search range (YYYY-MM-DD)"; }; readonly limit: { readonly type: "integer"; readonly minimum: 1; readonly maximum: 50; readonly default: 10; readonly description: "Maximum number of email results to return"; }; }; }; readonly minItems: 1; }; }; readonly required: readonly ["requests"]; readonly additionalProperties: false; }; }, { readonly app_id: "maps"; readonly skill_id: "search"; readonly app_namespace_ts: "maps"; readonly skill_method_ts: "search"; readonly app_namespace_py: "maps"; readonly skill_method_py: "search"; readonly description_key: "maps.search.description"; readonly description: "Search for places, businesses, restaurants, directions, locations."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of search request objects for parallel processing (up to 5 requests). \nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single search.\nExample for single search: {\"requests\": [{\"query\": \"restaurants in Berlin\"}]}\nExample for multiple searches: {\"requests\": [{\"query\": \"restaurants in Berlin\"}, {\"query\": \"museums in Berlin\"}]}\nEach object must contain 'query' (search query string), and can include optional parameters (pageSize, languageCode, locationBias, includedType, minRating, openNow, includeReviews).\nNote: The 'id' field is auto-generated if not provided - you don't need to include it.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Text query string to search for places (e.g., \"restaurants in Berlin\", \"museums near Times Square\")"; }; readonly pageSize: { readonly type: "integer"; readonly description: "Number of results to return per request (max 20)"; readonly minimum: 1; readonly maximum: 20; readonly default: 10; }; readonly languageCode: { readonly type: "string"; readonly description: "Language code for results (ISO 639-1, e.g., 'en', 'es', 'fr', 'de'). Defaults to 'en' if not specified."; readonly default: "en"; }; readonly locationBias: { readonly type: "object"; readonly description: "Optional location bias to prioritize results near a specific area. Can be a circle (center + radius) or rectangle (viewport)."; readonly properties: { readonly circle: { readonly type: "object"; readonly properties: { readonly center: { readonly type: "object"; readonly properties: { readonly latitude: { readonly type: "number"; }; readonly longitude: { readonly type: "number"; }; }; }; readonly radius: { readonly type: "number"; readonly description: "Radius in meters (0.0 to 50000.0)"; }; }; }; readonly rectangle: { readonly type: "object"; readonly properties: { readonly low: { readonly type: "object"; readonly properties: { readonly latitude: { readonly type: "number"; }; readonly longitude: { readonly type: "number"; }; }; }; readonly high: { readonly type: "object"; readonly properties: { readonly latitude: { readonly type: "number"; }; readonly longitude: { readonly type: "number"; }; }; }; }; }; }; }; readonly includedType: { readonly type: "string"; readonly description: "Optional place type filter (e.g., 'restaurant', 'museum', 'pharmacy'). See Google Places API place types documentation for full list."; }; readonly minRating: { readonly type: "number"; readonly description: "Minimum rating filter (0.0 to 5.0, increments of 0.5). Only places with rating >= minRating will be returned."; readonly minimum: 0; readonly maximum: 5; }; readonly openNow: { readonly type: "boolean"; readonly description: "If true, return only places that are currently open. Defaults to false."; readonly default: false; }; readonly includeReviews: { readonly type: "boolean"; readonly description: "If true, include user reviews in the response. Defaults to false to keep response size manageable. Reviews significantly increase response size."; readonly default: false; }; readonly osmEnrichment: { readonly type: "string"; readonly enum: readonly ["auto", "disabled", "required"]; readonly description: "Optional OSM/Geoapify enrichment mode. Use auto for source-labelled amenity details, disabled to avoid Geoapify calls, or required when amenity filters must be provider-verified."; readonly default: "auto"; }; readonly amenityFilters: { readonly type: "object"; readonly description: "Optional OSM-backed amenity filters. Mark a value as required to keep only Geoapify/OSM-verified matches; unknown OSM fields are not treated as matches."; readonly properties: { readonly airConditioning: { readonly type: "string"; readonly enum: readonly ["required"]; }; readonly internetAccess: { readonly type: "string"; readonly enum: readonly ["free_required", "required"]; }; readonly wheelchair: { readonly type: "string"; readonly enum: readonly ["required"]; }; readonly outdoorSeating: { readonly type: "string"; readonly enum: readonly ["required"]; }; readonly toilets: { readonly type: "string"; readonly enum: readonly ["required"]; }; readonly smoking: { readonly type: "string"; }; readonly diet: { readonly type: "string"; }; readonly payment: { readonly type: "string"; }; }; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "math"; readonly skill_id: "calculate"; readonly app_namespace_ts: "math"; readonly skill_method_ts: "calculate"; readonly app_namespace_py: "math"; readonly skill_method_py: "calculate"; readonly description_key: "math.calculate.description"; readonly description: "MANDATORY: Use this skill for ALL mathematical calculations without exception. This includes simple arithmetic such as addition, subtraction, multiplication (written as *, x, or ×), division, and parenthesised expressions like (4x22x7)/2 or (100+50)*3/2. Also use for algebra, trigonometry, calculus, unit conversions, symbolic simplification, equation solving, derivatives, and integrals. NEVER attempt to compute a numeric result yourself — always call this skill so results are guaranteed to be ex"; readonly schema: { readonly type: "object"; readonly properties: { readonly title: { readonly type: "string"; readonly description: "A short human-readable title that explains why this calculation is being made. This is shown in the embed preview, so prefer concise context like \"Bike time to the Moon\" or \"Monthly mortgage estimate\".\n"; }; readonly expression: { readonly type: "string"; readonly description: "The mathematical expression, equation, or operation to evaluate. Examples: - Arithmetic: \"3.14159 * (42.7)^2 / cos(0.3)\" - Symbolic simplify: \"simplify((x^2 - 1) / (x - 1))\" - Solve equation: \"solve(x^2 - 4*x + 3, x)\" - Derivative: \"diff(sin(x) * exp(x), x)\" - Integral: \"integrate(x^2 * log(x), x)\" - Unit conversion: \"convert(100, kg, lbs)\" - With context vars: \"E = m * c^2 where m=1, c=299792458\"\n"; }; readonly mode: { readonly type: "string"; readonly description: "Evaluation mode. 'auto' (default) detects the appropriate mode from the expression. 'numeric' forces numerical evaluation. 'symbolic' forces symbolic computation. 'solve' solves an equation for a variable. 'simplify' simplifies an algebraic expression. 'diff' computes derivative. 'integrate' computes integral. 'convert' converts units.\n"; readonly enum: readonly ["auto", "numeric", "symbolic", "solve", "simplify", "diff", "integrate", "convert"]; readonly default: "auto"; }; readonly variable: { readonly type: "string"; readonly description: "The variable to differentiate or integrate with respect to, or to solve for. Defaults to 'x'. Only needed when mode is 'diff', 'integrate', or 'solve'.\n"; readonly default: "x"; }; readonly precision: { readonly type: "integer"; readonly description: "Number of significant digits for numeric results. Defaults to 15. Use higher values (e.g. 50) for high-precision calculations.\n"; readonly default: 15; readonly minimum: 1; readonly maximum: 100; }; }; readonly required: readonly ["expression"]; }; }, { readonly app_id: "models3d"; readonly skill_id: "search"; readonly app_namespace_ts: "models3d"; readonly skill_method_ts: "search"; readonly app_namespace_py: "models3d"; readonly skill_method_py: "search"; readonly description_key: "app_skills.models3d.search.description"; readonly description: "Search public 3D model catalogs for existing models. Use this when the user wants to find, browse, compare, or link to existing 3D-printable or downloadable 3D models. Do not use it to generate new models."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of 3D model search requests. Each request searches public 3D model catalogs and returns preview-only result cards.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query, e.g. \"benchy\", \"phone stand\", or \"desk cable clip\"."; }; readonly providers: { readonly type: "array"; readonly items: { readonly type: "string"; readonly enum: readonly ["Printables"]; }; readonly description: "Optional provider filter. Defaults to Printables."; }; readonly count: { readonly type: "integer"; readonly minimum: 1; readonly maximum: 20; readonly default: 10; readonly description: "Maximum total results to return after merging providers."; }; readonly sort: { readonly type: "string"; readonly enum: readonly ["best_match", "popular", "downloads", "newest"]; readonly default: "best_match"; readonly description: "Sorting strategy applied after provider results are merged."; }; readonly free_only: { readonly type: "boolean"; readonly default: false; readonly description: "Return only results that the provider marks as free."; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "music"; readonly skill_id: "generate"; readonly app_namespace_ts: "music"; readonly skill_method_ts: "generate"; readonly app_namespace_py: "music"; readonly skill_method_py: "generate"; readonly description_key: "app_skills.music.generate.description"; readonly description: "Generate music from a text prompt, including full songs, instrumental tracks, background music, loops, jingles, lyric-based songs, and soundtrack cues. Use this when the user asks to create music or background music. Do not use this to imitate the voice, vocals, cadence, or persona of a real public figure, living artist, famous educator, or recognizable person. Use original voices and styles only, and reject scams, spam, or detection evasion."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of music generation request objects. Each object must\ninclude a prompt and can specify duration_seconds, mode, lyrics, style,\nnegative_prompt, seed, and model.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly prompt: { readonly type: "string"; readonly description: "Text description of the music to generate."; }; readonly mode: { readonly type: "string"; readonly enum: readonly ["song", "instrumental", "background", "loop", "jingle"]; readonly default: "background"; readonly description: "Desired music type."; }; readonly lyrics: { readonly type: "string"; readonly description: "Optional lyrics to include for vocal/song generation."; }; readonly style: { readonly type: "string"; readonly description: "Optional genre, mood, instrumentation, tempo, or production style."; }; readonly duration_seconds: { readonly type: "integer"; readonly minimum: 3; readonly maximum: 184; readonly default: 30; readonly description: "Target duration in seconds. Lyria 3 Clip is 30s; Lyria 3 Pro supports longer tracks in preview."; }; readonly negative_prompt: { readonly type: "string"; readonly description: "Optional sounds, genres, instruments, or qualities to avoid."; }; readonly seed: { readonly type: "integer"; readonly description: "Optional seed for more reproducible output when supported."; }; readonly model: { readonly type: "string"; readonly enum: readonly ["lyria-3-pro-preview", "lyria-3-clip-preview", "lyria-002"]; readonly default: "lyria-3-pro-preview"; readonly description: "Google Lyria model. Prefer lyria-3-pro-preview for latest quality."; }; }; readonly required: readonly ["prompt"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "news"; readonly skill_id: "search"; readonly app_namespace_ts: "news"; readonly skill_method_ts: "search"; readonly app_namespace_py: "news"; readonly skill_method_py: "search"; readonly description_key: "news.search.description"; readonly description: "Search for news articles, current events, headlines, announcements."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of search request objects for parallel processing (up to 5 requests). \nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single search.\nExample for single search: {\"requests\": [{\"query\": \"iPhone news\"}]}\nExample for multiple searches: {\"requests\": [{\"query\": \"iPhone news\"}, {\"query\": \"MacBook news\"}]}\nEach object must contain 'query' (search query string), and can include optional parameters (count, country, search_lang, safesearch, freshness).\nNote: The 'id' field is auto-generated if not provided - you don't need to include it.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query string"; }; readonly count: { readonly type: "integer"; readonly description: "Number of results for this request (max 20)"; readonly minimum: 1; readonly maximum: 20; readonly default: 6; }; readonly country: { readonly type: "string"; readonly description: "Country code for localized results. Must be one of: AR, AU, AT, BE, BR, CA, CL, DK, FI, FR, DE, GR, HK, IN, ID, IT, JP, KR, MY, MX, NL, NZ, NO, CN, PL, PT, PH, RU, SA, ZA, ES, SE, CH, TW, TR, GB, US, or ALL (case-insensitive). Defaults to 'us' if invalid."; readonly enum: readonly ["AR", "AU", "AT", "BE", "BR", "CA", "CL", "DK", "FI", "FR", "DE", "GR", "HK", "IN", "ID", "IT", "JP", "KR", "MY", "MX", "NL", "NZ", "NO", "CN", "PL", "PT", "PH", "RU", "SA", "ZA", "ES", "SE", "CH", "TW", "TR", "GB", "US", "ALL", "ar", "au", "at", "be", "br", "ca", "cl", "dk", "fi", "fr", "de", "gr", "hk", "in", "id", "it", "jp", "kr", "my", "mx", "nl", "nz", "no", "cn", "pl", "pt", "ph", "ru", "sa", "za", "es", "se", "ch", "tw", "tr", "gb", "us", "all"]; readonly default: "us"; }; readonly search_lang: { readonly type: "string"; readonly description: "Language code for search (ISO 639-1, e.g., 'en', 'es', 'fr')"; readonly default: "en"; }; readonly safesearch: { readonly type: "string"; readonly description: "Safe search level"; readonly enum: readonly ["off", "moderate", "strict"]; readonly default: "moderate"; }; readonly freshness: { readonly type: "string"; readonly description: "Filter by freshness - \"pd\" (past 24 hours), \"pw\" (past week), \"pm\" (past month), \"py\" (past year). Defaults to \"pw\" (past week) to prioritize recent news content."; readonly enum: readonly ["pd", "pw", "pm", "py"]; readonly default: "pw"; }; readonly filter_tabloids: { readonly type: "boolean"; readonly description: "Filter out tabloid/boulevard media sources (e.g., BILD, Daily Mail, TMZ, The Sun) from results. Enabled by default for quality news. Set to false ONLY if the user explicitly asks for tabloid sources."; readonly default: true; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "nutrition"; readonly skill_id: "search_recipes"; readonly app_namespace_ts: "nutrition"; readonly skill_method_ts: "searchRecipes"; readonly app_namespace_py: "nutrition"; readonly skill_method_py: "search_recipes"; readonly description_key: "app_skills.nutrition.search_recipes.description"; readonly description: "Search Edamam for recipes by natural-language query and nutrition filters. Returns recipe details with ingredients, step-by-step instructions, images, source links, and nutrition metadata. Recipes without instructions are filtered out. Best for: recipe recommendations, meal planning, dietary filtering, and cooking guidance."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of recipe search requests. Each request searches for recipes matching a free-text query and optional Edamam filters.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Free-text recipe query, e.g. \"quick vegan pasta\", \"gluten-free pancakes\", or \"miso salmon\".\n"; }; readonly health: { readonly type: "array"; readonly description: "Optional Edamam health labels such as vegan, vegetarian, gluten-free, dairy-free, keto-friendly, peanut-free, tree-nut-free.\n"; readonly items: { readonly type: "string"; }; }; readonly diet: { readonly type: "array"; readonly description: "Optional Edamam diet labels such as balanced, high-fiber, high-protein, low-carb, low-fat, low-sodium.\n"; readonly items: { readonly type: "string"; }; }; readonly time: { readonly type: "string"; readonly description: "Optional cooking/prep time range, e.g. \"1-30\"."; }; readonly calories: { readonly type: "string"; readonly description: "Optional calories range, e.g. \"100-600\"."; }; readonly cuisine_type: { readonly type: "array"; readonly description: "Optional cuisine filters such as Italian, Japanese, Mexican."; readonly items: { readonly type: "string"; }; }; readonly meal_type: { readonly type: "array"; readonly description: "Optional meal filters such as Breakfast, Dinner, Lunch, Snack."; readonly items: { readonly type: "string"; }; }; readonly dish_type: { readonly type: "array"; readonly description: "Optional dish filters such as Main course, Soup, Salad, Pancake."; readonly items: { readonly type: "string"; }; }; readonly excluded: { readonly type: "array"; readonly description: "Optional ingredients or terms to exclude from recipes."; readonly items: { readonly type: "string"; }; }; readonly ingredients: { readonly type: "string"; readonly description: "Optional ingredient-count range, e.g. \"5-10\"."; }; readonly max_results: { readonly type: "integer"; readonly description: "Maximum number of recipes to return with full details (1-10, default 6). Each returned result includes ingredients, step-by-step instructions, image data, source attribution, and nutrition metadata.\n"; readonly default: 6; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "openmates"; readonly skill_id: "share-usecase"; readonly app_namespace_ts: "openmates"; readonly skill_method_ts: "shareUsecase"; readonly app_namespace_py: "openmates"; readonly skill_method_py: "share_usecase"; readonly description_key: "openmates_app.share_usecase.description"; readonly description: "Use when the user has explicitly agreed to anonymously share a summary of their intended use cases with the OpenMates team to help improve the product. NEVER call this without clear user consent."; readonly schema: { readonly type: "object"; readonly properties: { readonly summary: { readonly type: "string"; readonly description: "A brief summary (2-5 sentences) of what the user wants to use OpenMates for, as discussed in the conversation. Should capture the key use cases and interests.\n"; }; readonly language: { readonly type: "string"; readonly description: "ISO 639-1 language code of the conversation (e.g., 'en', 'de')"; }; }; readonly required: readonly ["summary", "language"]; }; }, { readonly app_id: "openmates"; readonly skill_id: "get-docs"; readonly app_namespace_ts: "openmates"; readonly skill_method_ts: "getDocs"; readonly app_namespace_py: "openmates"; readonly skill_method_py: "get_docs"; readonly description_key: "openmates_app.get_docs.description"; readonly description: "Use when the user shares an openmates.org/docs URL, or asks to read a specific OpenMates documentation page. Automatically triggered when an openmates docs URL is detected in the conversation."; readonly schema: { readonly type: "object"; readonly properties: { readonly url: { readonly type: "string"; readonly description: "An openmates.org/docs URL or a docs slug path (e.g., 'architecture/chats' or 'https://openmates.org/docs/architecture/chats')\n"; }; }; readonly required: readonly ["url"]; }; }, { readonly app_id: "pdf"; readonly skill_id: "read"; readonly app_namespace_ts: "pdf"; readonly skill_method_ts: "read"; readonly app_namespace_py: "pdf"; readonly skill_method_py: "read"; readonly description_key: "pdf.read.description"; readonly description: "Load and read the raw text content (markdown) of specific pages from an uploaded PDF document. Use when the user asks what a PDF says, wants you to summarise sections, or requests information that is likely textual (paragraphs, tables, headings). The embed TOON content includes a TOC and per-page token estimates — use them to select the most relevant pages. Limits output to 50 000 tokens; call again for remaining pages if needed. Pass the exact embed_ref (original filename) from the toon block —"; readonly schema: { readonly type: "object"; readonly properties: { readonly file_path: { readonly type: "string"; readonly description: "The original filename of the PDF (e.g. \"report.pdf\"). Use the exact embed_ref value from the toon block. The server resolves all cryptographic and storage details from this filename automatically.\n"; }; readonly pages: { readonly type: "array"; readonly description: "1-indexed page numbers to read (e.g. [1, 2, 3]). If omitted, reads from page 1 onwards up to the token budget."; readonly items: { readonly type: "integer"; }; }; }; readonly required: readonly ["file_path"]; }; }, { readonly app_id: "pdf"; readonly skill_id: "search"; readonly app_namespace_ts: "pdf"; readonly skill_method_ts: "search"; readonly app_namespace_py: "pdf"; readonly skill_method_py: "search"; readonly description_key: "pdf.search.description"; readonly description: "Search for specific text, keywords, or phrases across all pages of an uploaded PDF. Returns matching text blocks with surrounding context and page numbers. Use when the user asks to find where something is mentioned in the document, or when a targeted keyword search is faster than reading entire sections. No LLM call required — pure text search over the OCR data. Pass the exact embed_ref (original filename) from the toon block as file_path."; readonly schema: { readonly type: "object"; readonly properties: { readonly file_path: { readonly type: "string"; readonly description: "The original filename of the PDF. Use the exact embed_ref from the toon block. The server resolves all cryptographic and storage details automatically.\n"; }; readonly query: { readonly type: "string"; readonly description: "The search query string (case-insensitive substring match)."; }; readonly context_chars: { readonly type: "integer"; readonly description: "Number of characters of surrounding context to include per match (default: 200)."; }; }; readonly required: readonly ["file_path", "query"]; }; }, { readonly app_id: "pdf"; readonly skill_id: "view"; readonly app_namespace_ts: "pdf"; readonly skill_method_ts: "view"; readonly app_namespace_py: "pdf"; readonly skill_method_py: "view"; readonly description_key: "pdf.view.skill_description"; readonly description: "View one or more page screenshots from an uploaded PDF and return them as multimodal image blocks so the main inference model can see the pages directly. Use when the user asks about the visual layout, diagrams, charts, figures, or images on specific pages. Also useful when text OCR may have been imperfect (e.g. complex tables, mathematical notation, handwriting). Up to 5 pages can be viewed per call. Pass the exact embed_ref (original filename) from the toon block as file_path — the server reso"; readonly schema: { readonly type: "object"; readonly properties: { readonly file_path: { readonly type: "string"; readonly description: "The original filename of the PDF. Use the exact embed_ref from the toon block. The server resolves all cryptographic and storage details automatically.\n"; }; readonly pages: { readonly type: "array"; readonly description: "1-indexed page numbers to view (max 5). Example: [1, 2]."; readonly items: { readonly type: "integer"; }; }; readonly query: { readonly type: "string"; readonly description: "The user's question or instruction about the page(s)."; }; }; readonly required: readonly ["file_path", "pages", "query"]; }; }, { readonly app_id: "plans"; readonly skill_id: "create"; readonly app_namespace_ts: "plans"; readonly skill_method_ts: "create"; readonly app_namespace_py: "plans"; readonly skill_method_py: "create"; readonly description_key: "plans.skills.create.description"; readonly description: "Request creation of a user-visible plan. Durable plan content is client-side encrypted, so a capable connected client must apply the change."; readonly schema: { readonly type: "object"; readonly properties: { readonly title: { readonly type: "string"; readonly description: "Short user-facing plan title."; }; readonly summary: { readonly type: "string"; readonly description: "Optional plan summary."; }; readonly goal: { readonly type: "string"; readonly description: "Optional plan goal."; }; }; readonly required: readonly ["title"]; }; }, { readonly app_id: "plans"; readonly skill_id: "search"; readonly app_namespace_ts: "plans"; readonly skill_method_ts: "search"; readonly app_namespace_py: "plans"; readonly skill_method_py: "search"; readonly description_key: "plans.skills.search.description"; readonly description: "Search the user's encrypted plans through a connected capable client. Do not use server-visible metadata as a private plan-content fallback."; readonly schema: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Private plan text to search for on a connected client."; }; }; readonly required: readonly ["query"]; }; }, { readonly app_id: "projects"; readonly skill_id: "create"; readonly app_namespace_ts: "projects"; readonly skill_method_ts: "create"; readonly app_namespace_py: "projects"; readonly skill_method_py: "create"; readonly description_key: "projects.skills.create.description"; readonly description: "Request creation of a user-visible project. Durable project content is client-side encrypted, so a capable connected client must apply the change."; readonly schema: { readonly type: "object"; readonly properties: { readonly name: { readonly type: "string"; readonly description: "Short user-facing project name."; }; readonly description: { readonly type: "string"; readonly description: "Optional project description."; }; }; readonly required: readonly ["name"]; }; }, { readonly app_id: "projects"; readonly skill_id: "search"; readonly app_namespace_ts: "projects"; readonly skill_method_ts: "search"; readonly app_namespace_py: "projects"; readonly skill_method_py: "search"; readonly description_key: "projects.skills.search.description"; readonly description: "Search the user's encrypted projects through a connected capable client. Do not use server-visible metadata as a private project-content fallback."; readonly schema: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Private project text to search for on a connected client."; }; }; readonly required: readonly ["query"]; }; }, { readonly app_id: "reminder"; readonly skill_id: "set-reminder"; readonly app_namespace_ts: "reminder"; readonly skill_method_ts: "setReminder"; readonly app_namespace_py: "reminder"; readonly skill_method_py: "set_reminder"; readonly description_key: "reminder.set_reminder.description"; readonly description: "Schedule, create, or set up reminders for the user. Handles one-time and recurring reminders (e.g., \"every morning\", \"daily at 9am\", \"weekly\", \"monthly\"). Use when user wants to be reminded, notified, or alerted about something at a specific time or on a recurring schedule. Also use for automating tasks like \"get news every day\" or \"summarize updates weekly\"."; readonly schema: { readonly type: "object"; readonly properties: { readonly prompt: { readonly type: "string"; readonly description: "The reminder message/prompt that will be shown when the reminder fires"; }; readonly trigger_type: { readonly type: "string"; readonly enum: readonly ["specific", "random"]; readonly description: "'specific' for exact datetime, 'random' for random time within a window"; }; readonly trigger_datetime: { readonly type: "string"; readonly description: "ISO 8601 datetime for specific trigger (e.g., '2026-02-05T14:30:00'). Required if trigger_type is 'specific'."; }; readonly random_start_date: { readonly type: "string"; readonly description: "Start date for random window (YYYY-MM-DD). Required if trigger_type is 'random'."; }; readonly random_end_date: { readonly type: "string"; readonly description: "End date for random window (YYYY-MM-DD). Required if trigger_type is 'random'."; }; readonly random_time_start: { readonly type: "string"; readonly description: "Earliest time of day for random trigger (HH:MM, 24h format, e.g., '10:00'). Optional for random triggers."; }; readonly random_time_end: { readonly type: "string"; readonly description: "Latest time of day for random trigger (HH:MM, 24h format, e.g., '14:00'). Optional for random triggers."; }; readonly timezone: { readonly type: "string"; readonly description: "User's timezone (e.g., 'Europe/Berlin', 'America/New_York'). Required."; }; readonly target_type: { readonly type: "string"; readonly enum: readonly ["new_chat", "existing_chat", "embed"]; readonly default: "existing_chat"; readonly description: "'existing_chat' sends a follow-up in the current chat and is the default for reminders requested from chat, 'new_chat' creates a new chat when the user explicitly asks for a new chat or standalone reminder thread, 'embed' opens a saved embed fullscreen"; }; readonly new_chat_title: { readonly type: "string"; readonly description: "Title for the new chat. Required if target_type is 'new_chat'."; }; readonly target_embed_id: { readonly type: "string"; readonly description: "Embed ID to open when target_type is 'embed'."; }; readonly target_embed_app_id: { readonly type: "string"; readonly description: "App ID for the embed target. Optional; used by client display."; }; readonly target_embed_title: { readonly type: "string"; readonly description: "Display title for the embed target. Optional; used by client display."; }; readonly response_type: { readonly type: "string"; readonly enum: readonly ["simple", "full"]; readonly default: "simple"; readonly description: "'simple' = notification-only: no AI response is generated, just a notification, email, and a visual marker in the chat history. Use for passive nudges ('remind me about this', 'ping me tomorrow'). 'full' = action trigger: the AI executes a task when the reminder fires. Use ONLY when the user wants the AI to actively do something ('summarize the news every morning', 'give me an update on X'). Default is 'simple'."; }; readonly repeat: { readonly type: "object"; readonly description: "Configuration for repeating reminders. Omit for one-time reminders."; readonly properties: { readonly type: { readonly type: "string"; readonly enum: readonly ["daily", "weekly", "monthly", "custom"]; readonly description: "Type of repeat schedule"; }; readonly interval: { readonly type: "integer"; readonly minimum: 1; readonly description: "For custom type: repeat every N units"; }; readonly interval_unit: { readonly type: "string"; readonly enum: readonly ["days", "weeks", "months"]; readonly description: "For custom type: unit of the interval"; }; readonly day_of_week: { readonly type: "integer"; readonly minimum: 0; readonly maximum: 6; readonly description: "For weekly type: 0=Monday, 6=Sunday"; }; readonly day_of_month: { readonly type: "integer"; readonly minimum: 1; readonly maximum: 31; readonly description: "For monthly type: day of the month (1-31)"; }; readonly end_date: { readonly type: "string"; readonly description: "Optional: stop repeating after this date (YYYY-MM-DD)"; }; readonly max_occurrences: { readonly type: "integer"; readonly minimum: 1; readonly description: "Optional: maximum number of times to fire"; }; }; readonly required: readonly ["type"]; }; }; readonly required: readonly ["prompt", "trigger_type", "timezone"]; }; }, { readonly app_id: "reminder"; readonly skill_id: "list-reminders"; readonly app_namespace_ts: "reminder"; readonly skill_method_ts: "listReminders"; readonly app_namespace_py: "reminder"; readonly skill_method_py: "list_reminders"; readonly description_key: "reminder.list_reminders.description"; readonly description: "Show the user's existing scheduled reminders."; readonly schema: { readonly type: "object"; readonly properties: { readonly status: { readonly type: "string"; readonly enum: readonly ["pending", "all"]; readonly default: "pending"; readonly description: "Filter reminders by status. 'pending' shows only upcoming reminders."; }; }; }; }, { readonly app_id: "reminder"; readonly skill_id: "cancel-reminder"; readonly app_namespace_ts: "reminder"; readonly skill_method_ts: "cancelReminder"; readonly app_namespace_py: "reminder"; readonly skill_method_py: "cancel_reminder"; readonly description_key: "reminder.cancel_reminder.description"; readonly description: "Cancel or delete an existing reminder."; readonly schema: { readonly type: "object"; readonly properties: { readonly reminder_id: { readonly type: "string"; readonly description: "ID of the reminder to cancel"; }; }; readonly required: readonly ["reminder_id"]; }; }, { readonly app_id: "shopping"; readonly skill_id: "search_products"; readonly app_namespace_ts: "shopping"; readonly skill_method_ts: "searchProducts"; readonly app_namespace_py: "shopping"; readonly skill_method_py: "search_products"; readonly description_key: "app_skills.shopping.search_products.description"; readonly description: "Search products on REWE, Amazon, or Stoffe.de with real-time prices. Use category to route groceries, marketplace products, fabrics, sewing supplies, and patterns to compatible providers. Invalid provider/category combinations are rejected."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of product search requests. Each request searches for products matching a query on a compatible shopping provider.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query, e.g. \"bio joghurt\", \"coffee grinder\", \"wireless mouse\".\n"; }; readonly provider: { readonly type: "string"; readonly description: "Product provider. If omitted, inferred from category: grocery routes to REWE, fabrics/sewing_supplies/patterns route to Stoffe.de, and marketplace categories route to Amazon. Invalid explicit provider/category combinations are rejected.\n"; readonly enum: readonly ["REWE", "Amazon", "Stoffe.de"]; }; readonly category: { readonly type: "string"; readonly description: "Product category used for routing and provider compatibility. Fabrics can be searched on Stoffe.de or Amazon. Groceries can be searched on REWE or Amazon. Marketplace categories are Amazon-only.\n"; readonly enum: readonly ["grocery", "fabrics", "sewing_supplies", "patterns", "general_marketplace", "electronics", "home", "fashion", "beauty", "books", "sports", "toys", "automotive", "health", "music", "movies", "tools", "office", "pet_supplies", "video_games", "baby"]; }; readonly max_results: { readonly type: "integer"; readonly description: "Maximum number of products to return (1-20, default 10)."; readonly default: 10; }; readonly sort: { readonly type: "string"; readonly description: "Sort order for results. REWE supports: relevance, price_asc, price_desc, new. Amazon supports: relevance, price_asc, price_desc, review_rank, newest, best_sellers. Stoffe.de supports: relevance, price_asc, price_desc, new.\n"; readonly enum: readonly ["relevance", "price_asc", "price_desc", "new", "review_rank", "newest", "best_sellers"]; readonly default: "relevance"; }; readonly service_type: { readonly type: "string"; readonly description: "REWE-only fulfilment type. \"DELIVERY\" for home delivery (default). \"CLICK_AND_COLLECT\" for store pickup. Ignored for Amazon and Stoffe.de.\n"; readonly enum: readonly ["DELIVERY", "CLICK_AND_COLLECT"]; readonly default: "DELIVERY"; }; readonly country: { readonly type: "string"; readonly description: "Amazon-only marketplace country code. Example: us, uk, de, fr, it, es, ca, au, jp, in, br, mx, nl, sg, se, pl. If omitted, inferred from user language/locale with fallback to us.\n"; }; readonly department: { readonly type: "string"; readonly description: "Amazon-only category filter. Example: electronics, computers, fashion, home, books, sports, toys, beauty, grocery, automotive, health, music, movies, tools, office, pet_supplies, video_games, baby.\n"; readonly enum: readonly ["electronics", "computers", "fashion", "home", "books", "sports", "toys", "beauty", "grocery", "automotive", "health", "music", "movies", "tools", "office", "pet_supplies", "video_games", "baby"]; }; readonly min_price: { readonly type: "number"; readonly description: "Amazon-only minimum price filter (client-side after fetch)."; }; readonly max_price: { readonly type: "number"; readonly description: "Amazon-only maximum price filter (client-side after fetch)."; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "social_media"; readonly skill_id: "get-posts"; readonly app_namespace_ts: "socialMedia"; readonly skill_method_ts: "getPosts"; readonly app_namespace_py: "social_media"; readonly skill_method_py: "get_posts"; readonly description_key: "app_skills.social_media.get_posts.description"; readonly description: "Fetch recent social media posts from one or more specific platform pages or profiles. Supports Reddit subreddits, Bluesky profile feeds, and Mastodon public profiles. Use for profile monitoring, community research, and finding conversations to review manually. Costs 10 credits per request."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of social post fetch requests. For Reddit, page is the subreddit name without r/ (for example: privacy, selfhosted, buildinpublic). For Bluesky profile posts, page is the actor handle. For Mastodon, page is user@instance or a public profile URL.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly id: { readonly description: "Optional caller-supplied ID for correlating responses."; }; readonly platform: { readonly type: "string"; readonly description: "Social platform to fetch from."; readonly enum: readonly ["bluesky", "mastodon", "reddit"]; readonly default: "reddit"; }; readonly page: { readonly type: "string"; readonly description: "Platform page/profile identifier. For Reddit, this is the subreddit name. For Bluesky, this is an actor handle for profile feeds. For Mastodon, use user@instance or a profile URL."; }; readonly sort: { readonly type: "string"; readonly description: "Post listing sort. Reddit supports new/hot/rising/top/comments. Comments means most discussed in the selected time range. Bluesky and Mastodon profile feeds ignore this value."; readonly enum: readonly ["new", "hot", "rising", "top", "comments"]; readonly default: "new"; }; readonly time_range: { readonly type: "string"; readonly description: "Reddit time filter for top/comments sorts."; readonly enum: readonly ["hour", "day", "week", "month", "year", "all"]; }; readonly limit: { readonly type: "integer"; readonly description: "Number of posts to fetch per page."; readonly minimum: 1; readonly maximum: 25; readonly default: 10; }; readonly include_comments: { readonly type: "boolean"; readonly description: "Whether to fetch comments/replies for returned posts when supported."; readonly default: true; }; readonly comments_limit: { readonly type: "integer"; readonly description: "Number of comments/replies to fetch per post."; readonly minimum: 0; readonly maximum: 5; readonly default: 5; }; readonly comments_sort: { readonly type: "string"; readonly description: "Reddit comment sort. Bluesky and Mastodon ignore this value."; readonly enum: readonly ["confidence", "top", "new", "controversial", "old"]; readonly default: "top"; }; readonly min_score: { readonly type: "integer"; readonly description: "Minimum Reddit score/upvotes to include."; readonly minimum: 0; }; readonly min_comments: { readonly type: "integer"; readonly description: "Minimum Reddit comment count to include."; readonly minimum: 0; }; readonly exclude_stickied: { readonly type: "boolean"; readonly description: "Exclude stickied Reddit posts."; readonly default: true; }; readonly exclude_nsfw: { readonly type: "boolean"; readonly description: "Exclude NSFW Reddit posts."; readonly default: true; }; readonly include_self_posts: { readonly type: "boolean"; readonly description: "Include Reddit text/self posts."; readonly default: true; }; readonly include_link_posts: { readonly type: "boolean"; readonly description: "Include Reddit link/media posts."; readonly default: true; }; }; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "social_media"; readonly skill_id: "search"; readonly app_namespace_ts: "socialMedia"; readonly skill_method_ts: "search"; readonly app_namespace_py: "social_media"; readonly skill_method_py: "search"; readonly description_key: "app_skills.social_media.search.description"; readonly description: "Search supported social platforms for recent public posts around a topic. Use this for topic monitoring and broad discovery across pages/profiles, not for monitoring a known profile; use Get posts for profile/page posts. Omit platform to search every supported social platform. Costs 10 credits per request."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of social post search requests. For Bluesky, query is the topic to search and author optionally restricts results to a specific handle. For Mastodon, mastodon.social is searched by default and mastodon_instances can add more public instances.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly id: { readonly description: "Optional caller-supplied ID for correlating responses."; }; readonly platform: { readonly type: "string"; readonly description: "Social platform to search. Omit or use all to search every supported provider."; readonly enum: readonly ["all", "bluesky", "mastodon", "reddit"]; readonly default: "all"; }; readonly query: { readonly type: "string"; readonly description: "Topic or search query to find posts around."; }; readonly page: { readonly type: "string"; readonly description: "Optional subreddit/page to restrict Reddit search to, without r/. For Mastodon, optionally provide one extra instance such as fosstodon.org."; }; readonly mastodon_instances: { readonly type: "array"; readonly description: "Optional additional Mastodon instances to search after mastodon.social, for example fosstodon.org or hachyderm.io."; readonly items: { readonly type: "string"; }; }; readonly sort: { readonly type: "string"; readonly description: "Search sort. Bluesky supports latest/top. Reddit supports relevance/hot/top/new/comments/latest. Mastodon public search returns instance-ranked recent results and ignores sort."; readonly enum: readonly ["latest", "top", "new", "hot", "relevance", "comments"]; readonly default: "latest"; }; readonly time_range: { readonly type: "string"; readonly description: "Reddit time filter for top/comments search."; readonly enum: readonly ["hour", "day", "week", "month", "year", "all"]; }; readonly limit: { readonly type: "integer"; readonly description: "Number of posts to fetch per search."; readonly minimum: 1; readonly maximum: 25; readonly default: 10; }; readonly author: { readonly type: "string"; readonly description: "Optional platform profile/handle filter. For Bluesky, this maps to the author filter."; }; readonly include_comments: { readonly type: "boolean"; readonly description: "Whether to fetch comments/replies for returned posts when supported."; readonly default: false; }; readonly comments_limit: { readonly type: "integer"; readonly description: "Number of comments/replies to fetch per returned post when supported."; readonly minimum: 0; readonly maximum: 5; readonly default: 0; }; readonly comments_sort: { readonly type: "string"; readonly description: "Reddit comment sort."; readonly enum: readonly ["confidence", "top", "new", "controversial", "old"]; readonly default: "top"; }; readonly min_score: { readonly type: "integer"; readonly description: "Minimum Reddit score/upvotes to include."; readonly minimum: 0; }; readonly min_comments: { readonly type: "integer"; readonly description: "Minimum Reddit comment count to include."; readonly minimum: 0; }; readonly exclude_stickied: { readonly type: "boolean"; readonly description: "Exclude stickied Reddit posts."; readonly default: true; }; readonly exclude_nsfw: { readonly type: "boolean"; readonly description: "Exclude NSFW Reddit posts."; readonly default: true; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "tasks"; readonly skill_id: "create"; readonly app_namespace_ts: "tasks"; readonly skill_method_ts: "create"; readonly app_namespace_py: "tasks"; readonly skill_method_py: "create"; readonly description_key: "tasks.skills.create.description"; readonly description: "Create one or more user-visible tasks. Use this for planning, task capture, or breaking a request into trackable work. Default unclear assignees to the user."; readonly schema: { readonly type: "object"; readonly properties: { readonly tasks: { readonly type: "array"; readonly items: { readonly type: "object"; readonly properties: { readonly title: { readonly type: "string"; }; readonly description: { readonly type: "string"; }; readonly assignee: { readonly type: "string"; readonly enum: readonly ["user", "openmates"]; }; readonly status: { readonly type: "string"; readonly enum: readonly ["backlog", "todo", "in_progress", "blocked"]; }; }; }; }; readonly title: { readonly type: "string"; readonly description: "Single-task title when not using tasks[]."; }; readonly description: { readonly type: "string"; }; readonly assignee: { readonly type: "string"; readonly enum: readonly ["user", "openmates"]; }; }; readonly required: readonly []; }; }, { readonly app_id: "tasks"; readonly skill_id: "search"; readonly app_namespace_ts: "tasks"; readonly skill_method_ts: "search"; readonly app_namespace_py: "tasks"; readonly skill_method_py: "search"; readonly description_key: "tasks.skills.search.description"; readonly description: "Search the user's encrypted tasks through a connected capable client. Do not use server-visible metadata as a private task-content search fallback."; readonly schema: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Private task text to search for on a connected client."; }; }; readonly required: readonly ["query"]; }; }, { readonly app_id: "travel"; readonly skill_id: "search_connections"; readonly app_namespace_ts: "travel"; readonly skill_method_ts: "searchConnections"; readonly app_namespace_py: "travel"; readonly skill_method_py: "search_connections"; readonly description_key: "app_skills.travel.search_connections.description"; readonly description: "Search for flight or train connections for a particular date with details (airlines/operators, times, stops, durations, prices). Use when user asks about flights, train connections, or travel between cities on a specific date. Set transport_methods to [\"airplane\"] for flights or [\"train\"] for trains. If the user names a provider, set providers to one or more of: google_flights, deutsche_bahn, flix, transitous. If no provider is specified, all providers for the selected transport method are searc"; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of connection search requests. Each request searches for transport connections for a complete trip (one-way, round trip, or multi-stop).\n"; readonly items: { readonly type: "object"; readonly properties: { readonly origin: { readonly type: "string"; readonly description: "Flat route origin accepted from LLM or CLI callers. Prefer legs for round trips and multi-stop trips; single-leg flat requests are normalized into legs before execution.\n"; }; readonly destination: { readonly type: "string"; readonly description: "Flat route destination accepted from LLM or CLI callers. Prefer legs for round trips and multi-stop trips; single-leg flat requests are normalized into legs before execution.\n"; }; readonly date: { readonly type: "string"; readonly description: "Flat route departure date in YYYY-MM-DD format. Prefer legs for round trips and multi-stop trips; single-leg flat requests are normalized into legs before execution.\n"; }; readonly legs: { readonly type: "array"; readonly description: "Ordered list of trip legs. One-way trip = 1 leg. Round trip = 2 legs (outbound + return). Multi-stop = N legs. Each leg specifies an origin, destination, and departure date.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly origin: { readonly type: "string"; readonly description: "Origin city or location name (e.g. \"Munich\", \"London Heathrow\", \"Berlin\"). The system resolves this to airport codes or coordinates internally.\n"; }; readonly destination: { readonly type: "string"; readonly description: "Destination city or location name."; }; readonly date: { readonly type: "string"; readonly description: "Departure date in YYYY-MM-DD format."; }; }; readonly required: readonly ["origin", "destination", "date"]; }; }; readonly transport_methods: { readonly type: "array"; readonly description: "Transport types to search. Supported: \"airplane\" (worldwide via Google Flights), \"train\" (Germany + select European routes via Deutsche Bahn and FlixTrain). IMPORTANT: Set to [\"train\"] when user asks about trains, rail, or Deutsche Bahn.\n"; readonly items: { readonly type: "string"; readonly enum: readonly ["airplane", "train", "bus", "boat"]; }; readonly default: readonly ["airplane"]; }; readonly transport_method: { readonly type: "string"; readonly description: "Singular transport method alias accepted from LLM or CLI callers. Normalized into transport_methods before execution.\n"; readonly enum: readonly ["airplane", "train", "bus", "boat"]; }; readonly providers: { readonly type: "array"; readonly description: "Optional provider IDs to search. Use \"google_flights\" for flights, \"deutsche_bahn\" for Deutsche Bahn / ICE / Bahn.de / Sparpreis train searches, \"flix\" for FlixBus / FlixTrain, and \"transitous\" only for timetable-only public transport routing. If omitted, priced providers for the selected transport method are used, then filtered by countries if provided.\n"; readonly items: { readonly type: "string"; readonly enum: readonly ["google_flights", "deutsche_bahn", "flix", "transitous"]; }; }; readonly provider: { readonly type: "string"; readonly description: "Singular provider alias accepted from LLM or CLI callers. Normalized into providers before execution.\n"; readonly enum: readonly ["google_flights", "deutsche_bahn", "flix", "transitous"]; }; readonly countries: { readonly type: "array"; readonly description: "ISO 3166-1 alpha-2 country codes involved in the route, inferred from origin, destination, and known stops. Country matching is OR: a provider is relevant when it supports at least one listed country. Google Flights is global and remains eligible for airplane searches in all countries.\n"; readonly items: { readonly type: "string"; }; }; readonly passengers: { readonly type: "integer"; readonly description: "Number of adult passengers."; readonly default: 1; }; readonly travel_class: { readonly type: "string"; readonly description: "Cabin class for flights."; readonly enum: readonly ["economy", "premium_economy", "business", "first"]; readonly default: "economy"; }; readonly max_results: { readonly type: "integer"; readonly description: "Maximum number of connection options to return per transport method."; readonly default: 6; }; readonly non_stop_only: { readonly type: "boolean"; readonly description: "If true, only return direct/non-stop connections."; readonly default: false; }; readonly max_stops: { readonly type: "integer"; readonly description: "Maximum number of stops allowed. Use 0 for direct/non-stop only, 1 for up to one stop, or 2 for up to two stops."; }; readonly max_price: { readonly type: "number"; readonly description: "Maximum total price for the connection in the requested currency. Results above this price are filtered from strict matches."; }; readonly include_airlines: { readonly type: "array"; readonly description: "Only show flights from these airlines. Use IATA carrier codes when known, such as LH, BA, VY, or FR."; readonly items: { readonly type: "string"; }; }; readonly exclude_airlines: { readonly type: "array"; readonly description: "Exclude flights from these airlines. Use IATA carrier codes when known. Do not combine with include_airlines."; readonly items: { readonly type: "string"; }; }; readonly owned_passes: { readonly type: "array"; readonly description: "Fare or mobility pass IDs the traveller already owns, such as \"deutschland_ticket\". Use for pass-aware train pricing when the user says they have a Deutschlandticket.\n"; readonly items: { readonly type: "string"; }; }; readonly pass_only: { readonly type: "boolean"; readonly description: "If true, prefer routes covered by owned fare passes when supported. Use with owned_passes [\"deutschland_ticket\"] for Deutschlandticket-only routing.\n"; readonly default: false; }; readonly rail_products: { readonly type: "array"; readonly description: "Stable rail product filters for train searches. Use high_speed for ICE/high-speed, intercity for IC/EC, regional_express for IRE/RE-like services, regional for RB/local, s_bahn for S-Bahn, subway, tram, bus, or ferry.\n"; readonly items: { readonly type: "string"; readonly enum: readonly ["high_speed", "intercity", "regional_express", "regional", "s_bahn", "subway", "tram", "bus", "ferry"]; }; }; readonly min_departure_time: { readonly type: "string"; readonly description: "Earliest acceptable local departure time in HH:MM format."; }; readonly max_departure_time: { readonly type: "string"; readonly description: "Latest acceptable local departure time in HH:MM format."; }; readonly min_arrival_time: { readonly type: "string"; readonly description: "Earliest acceptable local arrival time in HH:MM format."; }; readonly max_arrival_time: { readonly type: "string"; readonly description: "Latest acceptable local arrival time in HH:MM format."; }; readonly max_duration_minutes: { readonly type: "integer"; readonly description: "Maximum total duration for the first leg, in minutes."; }; readonly min_transfer_minutes: { readonly type: "integer"; readonly description: "Minimum acceptable layover or transfer duration, in minutes. Defaults to 10."; readonly default: 10; }; readonly max_layover_minutes: { readonly type: "integer"; readonly description: "Maximum allowed layover or transfer duration, in minutes."; }; readonly avoid_overnight_layovers: { readonly type: "boolean"; readonly description: "If true, remove connections with overnight layovers or transfers."; readonly default: false; }; readonly currency: { readonly type: "string"; readonly description: "Preferred currency for prices (ISO 4217 code)."; readonly default: "EUR"; }; readonly sort_by: { readonly type: "string"; readonly description: "How to sort the results. Options: \"price_asc\" (cheapest first, default), \"price_desc\" (most expensive first), \"duration_asc\" (shortest first), \"duration_desc\" (longest first), \"departure_asc\" (earliest departure first), \"departure_desc\" (latest departure first), \"stops_asc\" (fewest stops first), \"stops_desc\" (most stops first).\n"; readonly enum: readonly ["price_asc", "price_desc", "duration_asc", "duration_desc", "departure_asc", "departure_desc", "stops_asc", "stops_desc"]; readonly default: "price_asc"; }; }; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "travel"; readonly skill_id: "search_stays"; readonly app_namespace_ts: "travel"; readonly skill_method_ts: "searchStays"; readonly app_namespace_py: "travel"; readonly skill_method_py: "search_stays"; readonly description_key: "app_skills.travel.search_stays.description"; readonly description: "Run this OpenMates app skill."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "Array of stay search requests. Each request searches for accommodation at a specific destination for given dates.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query describing the destination or property (e.g. \"Hotels in Paris\", \"Hostels near Eiffel Tower\", \"Barcelona beachfront hotel\").\n"; }; readonly check_in_date: { readonly type: "string"; readonly description: "Check-in date in YYYY-MM-DD format (e.g. \"2026-03-15\").\n"; }; readonly check_out_date: { readonly type: "string"; readonly description: "Check-out date in YYYY-MM-DD format (e.g. \"2026-03-18\").\n"; }; readonly adults: { readonly type: "integer"; readonly description: "Number of adult guests."; readonly default: 2; }; readonly children: { readonly type: "integer"; readonly description: "Number of children."; readonly default: 0; }; readonly currency: { readonly type: "string"; readonly description: "Price currency (ISO 4217 code, e.g. \"EUR\", \"USD\").\n"; readonly default: "EUR"; }; readonly sort_by: { readonly type: "string"; readonly description: "Sort order for results. Options: \"relevance\" (default), \"price_asc\" (lowest price first), \"rating_desc\" (highest rated first), \"reviews_desc\" (most reviewed).\n"; readonly default: "relevance"; }; readonly min_price: { readonly type: "number"; readonly description: "Minimum nightly price filter."; }; readonly max_price: { readonly type: "number"; readonly description: "Maximum nightly price filter."; }; readonly hotel_class: { readonly type: "string"; readonly description: "Comma-separated star rating filter (e.g. \"3,4,5\" for 3-star and above).\n"; }; readonly max_results: { readonly type: "integer"; readonly description: "Maximum number of results to return."; readonly default: 10; }; }; readonly required: readonly ["query", "check_in_date", "check_out_date"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "travel"; readonly skill_id: "get_flight"; readonly app_namespace_ts: "travel"; readonly skill_method_ts: "getFlight"; readonly app_namespace_py: "travel"; readonly skill_method_py: "get_flight"; readonly description_key: "app_skills.travel.get_flight.description"; readonly description: "Fetch the real GPS flight track and actual departure/landing times for a specific completed/past flight. Use when the user asks to see how a flight actually went, the real flight path on a map, or actual timing and runway info. Requires the IATA flight number (e.g. 'LH2472') and the departure date. Costs 7 credits per lookup."; readonly schema: { readonly type: "object"; readonly properties: { readonly flight_number: { readonly type: "string"; readonly description: "IATA flight number including the carrier code prefix (e.g. 'LH2472', 'BA234', 'AF447'). Do NOT include spaces.\n"; }; readonly departure_date: { readonly type: "string"; readonly description: "Departure date in YYYY-MM-DD format (e.g. '2026-03-05'). Must be a past/completed date — live tracking is not supported.\n"; }; readonly origin_iata: { readonly type: "string"; readonly description: "Optional IATA code of the departure airport (e.g. 'MUC'). Used for disambiguation when a flight number has multiple legs.\n"; }; readonly destination_iata: { readonly type: "string"; readonly description: "Optional IATA code of the destination airport (e.g. 'LHR'). Used for diversion detection.\n"; }; }; readonly required: readonly ["flight_number", "departure_date"]; }; }, { readonly app_id: "videos"; readonly skill_id: "generate"; readonly app_namespace_ts: "videos"; readonly skill_method_ts: "generate"; readonly app_namespace_py: "videos"; readonly skill_method_py: "generate"; readonly description_key: "app_skills.videos.generate.description"; readonly description: "Generate short photorealistic or generative footage from text prompts using Google Veo. Use this when the user asks for cinematic footage, realistic scenes, camera movement, stylized animation, or non-deterministic video generation. Do not use this for exact text slides, product announcements, diagrams, charts, UI-like motion graphics, or branded videos where exact text and layout matter; those requests should use videos.create with an explicit ```remotion:Name.tsx fence instead. Do not use this"; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED array of video generation request objects."; readonly items: { readonly type: "object"; readonly properties: { readonly prompt: { readonly type: "string"; readonly description: "Detailed text description of the video to generate."; }; readonly aspect_ratio: { readonly type: "string"; readonly enum: readonly ["16:9", "9:16"]; readonly default: "16:9"; }; readonly duration_seconds: { readonly type: "integer"; readonly enum: readonly [4, 6, 8]; readonly default: 8; }; readonly resolution: { readonly type: "string"; readonly enum: readonly ["720p", "1080p", "4k"]; readonly default: "720p"; }; readonly seed: { readonly type: "integer"; readonly description: "Optional seed for more reproducible output when supported."; }; readonly model: { readonly type: "string"; readonly enum: readonly ["veo-3.1-generate-preview", "veo-3.1-fast-generate-preview", "veo-3.0-generate-001"]; readonly default: "veo-3.1-generate-preview"; }; }; readonly required: readonly ["prompt"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "videos"; readonly skill_id: "create"; readonly app_namespace_ts: "videos"; readonly skill_method_ts: "create"; readonly app_namespace_py: "videos"; readonly skill_method_py: "create"; readonly description_key: "app_skills.videos.create.description"; readonly description: "Create deterministic code-backed videos with Remotion. Use this for text slides, product announcements, diagrams, charts, UI-like motion graphics, or branded videos where exact text and layout matter. The assistant must write an explicit ```remotion:Name.tsx fence; do not use this for photorealistic footage or generic TSX components."; readonly schema: { readonly type: "object"; readonly properties: { readonly source: { readonly type: "string"; readonly description: "Remotion TSX source code to render."; }; readonly filename: { readonly type: "string"; readonly description: "Source filename, for example ProductAnnouncement.tsx."; }; }; readonly required: readonly ["source"]; }; }, { readonly app_id: "videos"; readonly skill_id: "get_transcript"; readonly app_namespace_ts: "videos"; readonly skill_method_ts: "getTranscript"; readonly app_namespace_py: "videos"; readonly skill_method_py: "get_transcript"; readonly description_key: "videos.get_transcript.description"; readonly description: "Get the transcript/content of a specific YouTube video URL."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of transcript request objects for parallel processing. \nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single transcript.\nExample for single transcript: {\"requests\": [{\"url\": \"https://youtube.com/watch?v=abc123\"}]}\nExample for multiple transcripts: {\"requests\": [{\"url\": \"https://youtube.com/watch?v=abc123\"}, {\"url\": \"https://youtube.com/watch?v=def456\"}]}\nEach object must contain 'url' (YouTube video URL), and can include optional parameters (languages).\nNote: The 'id' field is auto-generated if not provided - you don't need to include it.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly url: { readonly type: "string"; readonly description: "YouTube video URL (supports youtube.com/watch?v= and youtu.be/ formats)"; }; readonly languages: { readonly type: "array"; readonly description: "List of language codes to try for transcript (ISO 639-1, e.g., 'en', 'de', 'es', 'fr'). The API will use the first available language."; readonly items: { readonly type: "string"; }; readonly default: readonly ["en", "de", "es", "fr"]; }; }; readonly required: readonly ["url"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "videos"; readonly skill_id: "search"; readonly app_namespace_ts: "videos"; readonly skill_method_ts: "search"; readonly app_namespace_py: "videos"; readonly skill_method_py: "search"; readonly description_key: "videos.search.description"; readonly description: "Search for videos, documentaries, tutorials, clips on the web."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of search request objects for parallel processing (up to 5 requests). \nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single search.\nExample for single search: {\"requests\": [{\"query\": \"Python tutorial\"}]}\nExample for multiple searches: {\"requests\": [{\"query\": \"Python tutorial\"}, {\"query\": \"FastAPI tutorial\"}]}\nEach object must contain 'query' (search query string), and can include optional parameters (count, country, search_lang, safesearch).\nNote: The 'id' field is auto-generated if not provided - you don't need to include it.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query string"; }; readonly count: { readonly type: "integer"; readonly description: "Number of results for this request (max 20)"; readonly minimum: 1; readonly maximum: 20; readonly default: 6; }; readonly country: { readonly type: "string"; readonly description: "Country code for localized results. Must be one of: AR, AU, AT, BE, BR, CA, CL, DK, FI, FR, DE, GR, HK, IN, ID, IT, JP, KR, MY, MX, NL, NZ, NO, CN, PL, PT, PH, RU, SA, ZA, ES, SE, CH, TW, TR, GB, US, or ALL (case-insensitive). Defaults to 'us' if invalid."; readonly enum: readonly ["AR", "AU", "AT", "BE", "BR", "CA", "CL", "DK", "FI", "FR", "DE", "GR", "HK", "IN", "ID", "IT", "JP", "KR", "MY", "MX", "NL", "NZ", "NO", "CN", "PL", "PT", "PH", "RU", "SA", "ZA", "ES", "SE", "CH", "TW", "TR", "GB", "US", "ALL", "ar", "au", "at", "be", "br", "ca", "cl", "dk", "fi", "fr", "de", "gr", "hk", "in", "id", "it", "jp", "kr", "my", "mx", "nl", "nz", "no", "cn", "pl", "pt", "ph", "ru", "sa", "za", "es", "se", "ch", "tw", "tr", "gb", "us", "all"]; readonly default: "us"; }; readonly search_lang: { readonly type: "string"; readonly description: "Language code for search (ISO 639-1, e.g., 'en', 'es', 'fr')"; readonly default: "en"; }; readonly safesearch: { readonly type: "string"; readonly description: "Safe search level"; readonly enum: readonly ["off", "moderate", "strict"]; readonly default: "moderate"; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "weather"; readonly skill_id: "forecast"; readonly app_namespace_ts: "weather"; readonly skill_method_ts: "forecast"; readonly app_namespace_py: "weather"; readonly skill_method_py: "forecast"; readonly description_key: "apps.weather.forecast.description"; readonly description: "Get current and upcoming weather forecasts for a place, including daily weather, temperatures, rain likelihood, and hourly details stored in day embeds. Use this for weather questions, forecast requests, and trip/day planning involving weather."; readonly schema: { readonly type: "object"; readonly properties: { readonly location: { readonly type: "string"; readonly description: "Place name for the forecast, e.g. Berlin, Karlsruhe, Tokyo. Required unless latitude and longitude are provided."; }; readonly days: { readonly type: "integer"; readonly description: "Number of forecast days to return. Defaults to 7. Maximum 14."; readonly minimum: 1; readonly maximum: 14; readonly default: 7; }; readonly latitude: { readonly type: "number"; readonly description: "Optional latitude in decimal degrees. Use with longitude for exact coordinates."; }; readonly longitude: { readonly type: "number"; readonly description: "Optional longitude in decimal degrees. Use with latitude for exact coordinates."; }; readonly timezone: { readonly type: "string"; readonly description: "Optional IANA timezone. Defaults to provider/location timezone."; }; readonly units: { readonly type: "string"; readonly description: "Unit system. Only metric is currently supported."; readonly enum: readonly ["metric"]; readonly default: "metric"; }; }; readonly required: readonly ["location"]; }; }, { readonly app_id: "weather"; readonly skill_id: "rain_radar"; readonly app_namespace_ts: "weather"; readonly skill_method_ts: "rainRadar"; readonly app_namespace_py: "weather"; readonly skill_method_py: "rain_radar"; readonly description_key: "apps.weather.rain_radar.description"; readonly description: "Get nearby German rain radar with a timeline, including whether rain is visible now, whether rain is expected around the selected location in about 10 minutes, and compact frame-by-frame rain intensity metadata. Use this for rain radar, precipitation radar, and hyperlocal \"will it rain here soon\" questions in Germany."; readonly schema: { readonly type: "object"; readonly properties: { readonly location: { readonly type: "string"; readonly description: "German place name for the radar, e.g. Berlin, Hamburg, Munich. Required unless latitude and longitude are provided."; }; readonly latitude: { readonly type: "number"; readonly description: "Optional latitude in decimal degrees. Use with longitude for exact coordinates. V1 supports Germany only."; }; readonly longitude: { readonly type: "number"; readonly description: "Optional longitude in decimal degrees. Use with latitude for exact coordinates. V1 supports Germany only."; }; readonly radius_km: { readonly type: "integer"; readonly description: "Radar radius around the location in kilometers. Defaults to 5 for a neighborhood/city-part view. Maximum 100."; readonly minimum: 1; readonly maximum: 100; readonly default: 5; }; readonly timezone: { readonly type: "string"; readonly description: "Optional IANA timezone. Defaults to provider/location timezone."; }; }; readonly required: readonly ["location"]; }; }, { readonly app_id: "web"; readonly skill_id: "search"; readonly app_namespace_ts: "web"; readonly skill_method_ts: "search"; readonly app_namespace_py: "web"; readonly skill_method_py: "search"; readonly description_key: "app_skills.web.search.description"; readonly description: "General web search for current information, prices, weather, facts, stocks, sports scores, etc. Use as a fallback when no specialized skill applies."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of search request objects for parallel processing (up to 5 requests). \nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single search.\nExample for single search: {\"requests\": [{\"query\": \"Python async\"}]}\nExample for multiple searches: {\"requests\": [{\"query\": \"Python async\"}, {\"query\": \"FastAPI best practices\"}]}\nEach object must contain 'query' (search query string), and can include optional parameters (count, country, search_lang, safesearch).\nNote: The 'id' field is auto-generated if not provided - you don't need to include it.\n"; readonly items: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Search query string"; }; readonly count: { readonly type: "integer"; readonly description: "Number of results for this request (max 20)"; readonly minimum: 1; readonly maximum: 20; readonly default: 6; }; readonly country: { readonly type: "string"; readonly description: "Country code for localized results. Must be one of: AR, AU, AT, BE, BR, CA, CL, DK, FI, FR, DE, GR, HK, IN, ID, IT, JP, KR, MY, MX, NL, NZ, NO, CN, PL, PT, PH, RU, SA, ZA, ES, SE, CH, TW, TR, GB, US, or ALL (case-insensitive). Defaults to 'us' if invalid."; readonly enum: readonly ["AR", "AU", "AT", "BE", "BR", "CA", "CL", "DK", "FI", "FR", "DE", "GR", "HK", "IN", "ID", "IT", "JP", "KR", "MY", "MX", "NL", "NZ", "NO", "CN", "PL", "PT", "PH", "RU", "SA", "ZA", "ES", "SE", "CH", "TW", "TR", "GB", "US", "ALL", "ar", "au", "at", "be", "br", "ca", "cl", "dk", "fi", "fr", "de", "gr", "hk", "in", "id", "it", "jp", "kr", "my", "mx", "nl", "nz", "no", "cn", "pl", "pt", "ph", "ru", "sa", "za", "es", "se", "ch", "tw", "tr", "gb", "us", "all"]; readonly default: "us"; }; readonly search_lang: { readonly type: "string"; readonly description: "Language code for search (ISO 639-1, e.g., 'en', 'es', 'fr')"; readonly default: "en"; }; readonly safesearch: { readonly type: "string"; readonly description: "Safe search level"; readonly enum: readonly ["off", "moderate", "strict"]; readonly default: "moderate"; }; readonly filter_tabloids: { readonly type: "boolean"; readonly description: "Filter out tabloid/boulevard media sources (e.g., BILD, Daily Mail, TMZ, The Sun) from results. Enabled by default for quality results. Set to false ONLY if the user explicitly asks for tabloid sources."; readonly default: true; }; }; readonly required: readonly ["query"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "web"; readonly skill_id: "read"; readonly app_namespace_ts: "web"; readonly skill_method_ts: "read"; readonly app_namespace_py: "web"; readonly skill_method_py: "read"; readonly description_key: "web.read.description"; readonly description: "Read and extract content from a specific URL or webpage the user provided."; readonly schema: { readonly type: "object"; readonly properties: { readonly requests: { readonly type: "array"; readonly description: "REQUIRED: Array of read request objects for parallel processing (up to 5 requests). \nThis parameter is MANDATORY - you MUST always provide a 'requests' array, even for a single URL.\nExample for single URL: {\"requests\": [{\"id\": 1, \"url\": \"https://example.com/article\"}]}\nExample for multiple URLs: {\"requests\": [{\"id\": 1, \"url\": \"https://example.com/article1\"}, {\"id\": 2, \"url\": \"https://example.com/article2\"}]}\nEach object must contain 'id' (unique identifier) and 'url' (webpage URL), and can include optional parameters (formats, only_main_content, max_age, timeout).\n"; readonly items: { readonly type: "object"; readonly properties: { readonly url: { readonly type: "string"; readonly description: "URL of the webpage to read/scrape"; }; readonly formats: { readonly type: "array"; readonly description: "List of output formats to include (e.g., 'markdown', 'html', 'summary')"; readonly items: { readonly type: "string"; }; readonly default: readonly ["markdown"]; }; readonly only_main_content: { readonly type: "boolean"; readonly description: "Whether to return only main content (excluding headers, navs, footers, etc.)"; readonly default: true; }; readonly max_age: { readonly type: "integer"; readonly description: "Cache age in milliseconds (default: 172800000 = 2 days). Returns cached version if available."; }; readonly timeout: { readonly type: "integer"; readonly description: "Timeout in milliseconds for the request"; }; }; readonly required: readonly ["url"]; }; }; }; readonly required: readonly ["requests"]; }; }, { readonly app_id: "workflows"; readonly skill_id: "create-or-modify"; readonly app_namespace_ts: "workflows"; readonly skill_method_ts: "createOrModify"; readonly app_namespace_py: "workflows"; readonly skill_method_py: "create_or_modify"; readonly description_key: "workflows.skills.create_or_modify.description"; readonly description: "Create or modify exactly one workflow from chat. Do not batch multiple workflows into one skill call."; readonly schema: { readonly type: "object"; readonly properties: { readonly workflow_id: { readonly type: "string"; readonly description: "Existing workflow ID when modifying a workflow."; }; readonly title: { readonly type: "string"; readonly description: "Short user-facing workflow title."; }; readonly graph: { readonly type: "object"; readonly description: "Valid WorkflowGraph definition."; }; }; readonly required: readonly ["title"]; }; }, { readonly app_id: "workflows"; readonly skill_id: "search"; readonly app_namespace_ts: "workflows"; readonly skill_method_ts: "search"; readonly app_namespace_py: "workflows"; readonly skill_method_py: "search"; readonly description_key: "workflows.skills.search.description"; readonly description: "Search the user's existing persisted workflows before proposing a new automation. Include temporary workflows only when the user explicitly asks about recent chat-created workflows."; readonly schema: { readonly type: "object"; readonly properties: { readonly query: { readonly type: "string"; readonly description: "Workflow title or intent text to search for."; }; readonly include_temporary: { readonly type: "boolean"; readonly description: "Include temporary chat-created workflows in the search results."; }; }; }; }]; declare class AiAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Run this OpenMates app skill. * Description key: ai.ask.description * Skill: ai/ask */ ask(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class AudioAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Generate short, non-speech sound effects from text prompts, such as UI confirmation ticks, gentle alerts, transitions, and product sounds. Do not use this for spoken words, narration, vocals, voice cloning, scams, public figures, or deceptive media; use audio.speak for explicit speech generation. * Description key: app_skills.audio.generate.description * Skill: audio/generate */ generate(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Convert explicit user-provided text into short speech audio using an OpenMates voice preset after a required GPT OSS safeguard approval. Do not use this for automatic assistant voice replies, long narration, voice cloning, raw provider voice IDs, impersonation, scams, or deceptive speech. * Description key: app_skills.audio.speak.description * Skill: audio/speak */ speak(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class BooksAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Run this OpenMates app skill. * Description key: books.translate.description * Skill: books/translate */ translate(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class BusinessAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Get official SEC EDGAR financial filing facts for explicit public company tickers, CIKs, or exact company names, including revenue, profit, cash flow, and balance sheet data. Use for company performance research and comparisons; do not use for private companies, investment advice, stock-price forecasts, portfolio decisions, or discovering companies by broad category. * Description key: app_skills.business.company_financials.description * Skill: business/company_financials */ companyFinancials(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class CodeAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Run this OpenMates app skill. * Description key: code.add_issue.description * Skill: code/add_issue */ addIssue(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Run this OpenMates app skill. * Description key: code.clean_repo.description * Skill: code/clean_repo */ cleanRepo(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Get latest documentation for programming libraries, frameworks, APIs, SDKs. Use for ANY programming-related query about a specific library or framework. * Description key: code.get_docs.description * Skill: code/get_docs */ getDocs(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Run this OpenMates app skill. * Description key: code.get_issues.description * Skill: code/get_issues */ getIssues(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Run this OpenMates app skill. * Description key: code.get_project_overview.description * Skill: code/get_project_overview */ getProjectOverview(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Turn an uploaded screenshot into one standalone index.html code embed with inline CSS and optional inline JavaScript. Use this when the user asks to convert a screenshot, mockup, UI image, or app screen into HTML. Do not use remote image URLs; pass source_image with the uploaded image embed_ref in chat, or image_base64 for REST/API calls. * Description key: app_skills.code.image_to_html.description * Skill: code/image_to_html */ imageToHtml(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Run this OpenMates app skill. * Description key: code.remove_secrets.description * Skill: code/remove_secrets */ removeSecrets(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search GitHub repositories. Use this instead of web.search whenever the user asks to find GitHub repos, repositories, open-source libraries, starred repos, or repo examples by topic, language, framework, or project need. Returns licensed repository embeds. Costs 10 credits per search. * Description key: code.search_repos.description * Skill: code/search_repos */ searchRepos(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class DesignAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search for free SVG icons for UI, product, interface, or graphic design. Use this when the user asks to find icons by name, concept, object, or action. Do not use it for brand-logo search or generated icon creation. * Description key: app_skills.design.search_icons.description * Skill: design/search_icons */ searchIcons(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class ElectronicsAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Use this skill when the user asks to find electronic components, especially power converters or voltage regulators matching input voltage, output voltage, output current, efficiency, BOM cost, footprint, or topology requirements. Currently supports category power_converters via Texas Instruments WEBENCH Power Designer. * Description key: electronics.search_components.description * Skill: electronics/search_components */ searchComponents(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class EventsAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search for local or online events, meetups, hackathons, conferences, workshops, networking events, parties, concerts, or any community gathering. Use ONLY this skill for event searches — do NOT additionally call web.search or any other search skill for the same query. Sources: Meetup, Luma, Eventbrite, Google Events, Resident Advisor (electronic music/clubs), Siegessäule (Berlin LGBTQ+ events), Berlin Philharmonic (classical concerts in Berlin), and official event schedules for GPN24, 39C3, 38C3 * Description key: events.search.description * Skill: events/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class FitnessAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search available Urban Sports Club public fitness classes. Use this when the user asks for dated fitness classes, course availability, free spots, on-site classes, online classes, or plan-filtered Urban Sports classes. Omit plan unless the user explicitly asks for Essential, Classic, Premium, or Max. * Description key: fitness.search_classes.description * Skill: fitness/search_classes */ searchClasses(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search Urban Sports Club public fitness locations. Use this when the user asks for gyms, studios, pools, or Urban Sports locations near a city, address, or radius. Do not use it for class availability; use fitness.search_classes for dated class searches. * Description key: fitness.search_locations.description * Skill: fitness/search_locations */ searchLocations(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class HealthAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Run this OpenMates app skill. * Description key: health.create_report.description * Skill: health/create_report */ createReport(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search available medical appointments at German doctors/specialists by speciality and city. Covers any medical booking — general practitioners, specialists (e.g. dentist, dermatologist, gynecologist), scans and imaging (e.g. MRT/MRI, CT, Röntgen, Ultraschall), vaccinations, check-ups, blood tests, and other examinations. Note: "Termin" in a medical context means appointment, not event — route here instead of events-search. Sources: Doctolib, Jameda (Germany only). * Description key: app_skills.health.search_appointments.description * Skill: health/search_appointments */ searchAppointments(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class HomeAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search for apartments, houses, and WG rooms in German cities. Searches ImmoScout24, Kleinanzeigen, and WG-Gesucht simultaneously. Returns listings with prices, sizes, rooms, addresses, and direct links. Costs 10 credits per search. Use when user asks about finding housing in Germany. * Description key: app_skills.home.search.description * Skill: home/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class ImagesAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Generate high-quality images from text prompts and/or reference images (image-to-image editing). Also use for: mockups, design concepts, visual mockup creation, logo mockups, product mockups, illustration requests, visual design, concept art, posters, banners, thumbnails, or any request that implies creating a visual output. Use output_filetype="svg" for logos, icons, illustrations, and any other vector graphics that need to be scalable or editable. When the user provides uploaded images as refe * Description key: images.generate.description * Skill: images/generate */ generate(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Quickly generate a draft/preview image from a text prompt and/or reference images (image-to-image). Also use for: quick mockups, rough design concepts, draft illustrations, sketches, quick visual previews, or any request for a fast/rough image. When the user provides uploaded images as references (embed_refs), pass them via reference_images. Do not use this for scam, spam, fake-document, fake-endorsement, public-figure impersonation, or watermark/detection-evasion requests. * Description key: images.generate_draft.description * Skill: images/generate_draft */ generateDraft(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class MailAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Run this OpenMates app skill. * Description key: app_skills.mail.search.description * Skill: mail/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class MapsAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search for places, businesses, restaurants, directions, locations. * Description key: maps.search.description * Skill: maps/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class MathAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * MANDATORY: Use this skill for ALL mathematical calculations without exception. This includes simple arithmetic such as addition, subtraction, multiplication (written as *, x, or ×), division, and parenthesised expressions like (4x22x7)/2 or (100+50)*3/2. Also use for algebra, trigonometry, calculus, unit conversions, symbolic simplification, equation solving, derivatives, and integrals. NEVER attempt to compute a numeric result yourself — always call this skill so results are guaranteed to be ex * Description key: math.calculate.description * Skill: math/calculate */ calculate(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class Models3dAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search public 3D model catalogs for existing models. Use this when the user wants to find, browse, compare, or link to existing 3D-printable or downloadable 3D models. Do not use it to generate new models. * Description key: app_skills.models3d.search.description * Skill: models3d/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class MusicAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Generate music from a text prompt, including full songs, instrumental tracks, background music, loops, jingles, lyric-based songs, and soundtrack cues. Use this when the user asks to create music or background music. Do not use this to imitate the voice, vocals, cadence, or persona of a real public figure, living artist, famous educator, or recognizable person. Use original voices and styles only, and reject scams, spam, or detection evasion. * Description key: app_skills.music.generate.description * Skill: music/generate */ generate(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class NewsAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search for news articles, current events, headlines, announcements. * Description key: news.search.description * Skill: news/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class NutritionAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search Edamam for recipes by natural-language query and nutrition filters. Returns recipe details with ingredients, step-by-step instructions, images, source links, and nutrition metadata. Recipes without instructions are filtered out. Best for: recipe recommendations, meal planning, dietary filtering, and cooking guidance. * Description key: app_skills.nutrition.search_recipes.description * Skill: nutrition/search_recipes */ searchRecipes(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class OpenmatesAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Use when the user shares an openmates.org/docs URL, or asks to read a specific OpenMates documentation page. Automatically triggered when an openmates docs URL is detected in the conversation. * Description key: openmates_app.get_docs.description * Skill: openmates/get-docs */ getDocs(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Use when the user has explicitly agreed to anonymously share a summary of their intended use cases with the OpenMates team to help improve the product. NEVER call this without clear user consent. * Description key: openmates_app.share_usecase.description * Skill: openmates/share-usecase */ shareUsecase(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class PdfAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Load and read the raw text content (markdown) of specific pages from an uploaded PDF document. Use when the user asks what a PDF says, wants you to summarise sections, or requests information that is likely textual (paragraphs, tables, headings). The embed TOON content includes a TOC and per-page token estimates — use them to select the most relevant pages. Limits output to 50 000 tokens; call again for remaining pages if needed. Pass the exact embed_ref (original filename) from the toon block — * Description key: pdf.read.description * Skill: pdf/read */ read(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search for specific text, keywords, or phrases across all pages of an uploaded PDF. Returns matching text blocks with surrounding context and page numbers. Use when the user asks to find where something is mentioned in the document, or when a targeted keyword search is faster than reading entire sections. No LLM call required — pure text search over the OCR data. Pass the exact embed_ref (original filename) from the toon block as file_path. * Description key: pdf.search.description * Skill: pdf/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * View one or more page screenshots from an uploaded PDF and return them as multimodal image blocks so the main inference model can see the pages directly. Use when the user asks about the visual layout, diagrams, charts, figures, or images on specific pages. Also useful when text OCR may have been imperfect (e.g. complex tables, mathematical notation, handwriting). Up to 5 pages can be viewed per call. Pass the exact embed_ref (original filename) from the toon block as file_path — the server reso * Description key: pdf.view.skill_description * Skill: pdf/view */ view(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class PlansAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Request creation of a user-visible plan. Durable plan content is client-side encrypted, so a capable connected client must apply the change. * Description key: plans.skills.create.description * Skill: plans/create */ create(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search the user's encrypted plans through a connected capable client. Do not use server-visible metadata as a private plan-content fallback. * Description key: plans.skills.search.description * Skill: plans/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class ProjectsAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Request creation of a user-visible project. Durable project content is client-side encrypted, so a capable connected client must apply the change. * Description key: projects.skills.create.description * Skill: projects/create */ create(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search the user's encrypted projects through a connected capable client. Do not use server-visible metadata as a private project-content fallback. * Description key: projects.skills.search.description * Skill: projects/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class ReminderAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Cancel or delete an existing reminder. * Description key: reminder.cancel_reminder.description * Skill: reminder/cancel-reminder */ cancelReminder(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Show the user's existing scheduled reminders. * Description key: reminder.list_reminders.description * Skill: reminder/list-reminders */ listReminders(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Schedule, create, or set up reminders for the user. Handles one-time and recurring reminders (e.g., "every morning", "daily at 9am", "weekly", "monthly"). Use when user wants to be reminded, notified, or alerted about something at a specific time or on a recurring schedule. Also use for automating tasks like "get news every day" or "summarize updates weekly". * Description key: reminder.set_reminder.description * Skill: reminder/set-reminder */ setReminder(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class ShoppingAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Search products on REWE, Amazon, or Stoffe.de with real-time prices. Use category to route groceries, marketplace products, fabrics, sewing supplies, and patterns to compatible providers. Invalid provider/category combinations are rejected. * Description key: app_skills.shopping.search_products.description * Skill: shopping/search_products */ searchProducts(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class SocialMediaAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Fetch recent social media posts from one or more specific platform pages or profiles. Supports Reddit subreddits, Bluesky profile feeds, and Mastodon public profiles. Use for profile monitoring, community research, and finding conversations to review manually. Costs 10 credits per request. * Description key: app_skills.social_media.get_posts.description * Skill: social_media/get-posts */ getPosts(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search supported social platforms for recent public posts around a topic. Use this for topic monitoring and broad discovery across pages/profiles, not for monitoring a known profile; use Get posts for profile/page posts. Omit platform to search every supported social platform. Costs 10 credits per request. * Description key: app_skills.social_media.search.description * Skill: social_media/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class TasksAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Create one or more user-visible tasks. Use this for planning, task capture, or breaking a request into trackable work. Default unclear assignees to the user. * Description key: tasks.skills.create.description * Skill: tasks/create */ create(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search the user's encrypted tasks through a connected capable client. Do not use server-visible metadata as a private task-content search fallback. * Description key: tasks.skills.search.description * Skill: tasks/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class TravelAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Fetch the real GPS flight track and actual departure/landing times for a specific completed/past flight. Use when the user asks to see how a flight actually went, the real flight path on a map, or actual timing and runway info. Requires the IATA flight number (e.g. 'LH2472') and the departure date. Costs 7 credits per lookup. * Description key: app_skills.travel.get_flight.description * Skill: travel/get_flight */ getFlight(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search for flight or train connections for a particular date with details (airlines/operators, times, stops, durations, prices). Use when user asks about flights, train connections, or travel between cities on a specific date. Set transport_methods to ["airplane"] for flights or ["train"] for trains. If the user names a provider, set providers to one or more of: google_flights, deutsche_bahn, flix, transitous. If no provider is specified, all providers for the selected transport method are searc * Description key: app_skills.travel.search_connections.description * Skill: travel/search_connections */ searchConnections(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Run this OpenMates app skill. * Description key: app_skills.travel.search_stays.description * Skill: travel/search_stays */ searchStays(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class VideosAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Create deterministic code-backed videos with Remotion. Use this for text slides, product announcements, diagrams, charts, UI-like motion graphics, or branded videos where exact text and layout matter. The assistant must write an explicit ```remotion:Name.tsx fence; do not use this for photorealistic footage or generic TSX components. * Description key: app_skills.videos.create.description * Skill: videos/create */ create(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Generate short photorealistic or generative footage from text prompts using Google Veo. Use this when the user asks for cinematic footage, realistic scenes, camera movement, stylized animation, or non-deterministic video generation. Do not use this for exact text slides, product announcements, diagrams, charts, UI-like motion graphics, or branded videos where exact text and layout matter; those requests should use videos.create with an explicit ```remotion:Name.tsx fence instead. Do not use this * Description key: app_skills.videos.generate.description * Skill: videos/generate */ generate(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Get the transcript/content of a specific YouTube video URL. * Description key: videos.get_transcript.description * Skill: videos/get_transcript */ getTranscript(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search for videos, documentaries, tutorials, clips on the web. * Description key: videos.search.description * Skill: videos/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class WeatherAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Get current and upcoming weather forecasts for a place, including daily weather, temperatures, rain likelihood, and hourly details stored in day embeds. Use this for weather questions, forecast requests, and trip/day planning involving weather. * Description key: apps.weather.forecast.description * Skill: weather/forecast */ forecast(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Get nearby German rain radar with a timeline, including whether rain is visible now, whether rain is expected around the selected location in about 10 minutes, and compact frame-by-frame rain intensity metadata. Use this for rain radar, precipitation radar, and hyperlocal "will it rain here soon" questions in Germany. * Description key: apps.weather.rain_radar.description * Skill: weather/rain_radar */ rainRadar(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class WebAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Read and extract content from a specific URL or webpage the user provided. * Description key: web.read.description * Skill: web/read */ read(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * General web search for current information, prices, weather, facts, stocks, sports scores, etc. Use as a fallback when no specialized skill applies. * Description key: app_skills.web.search.description * Skill: web/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class WorkflowsAppSkills { private readonly runSkill; constructor(runSkill: AppSkillRunner); /** * Create or modify exactly one workflow from chat. Do not batch multiple workflows into one skill call. * Description key: workflows.skills.create_or_modify.description * Skill: workflows/create-or-modify */ createOrModify(input: SkillInput, options?: AppSkillRunOptions): Promise; /** * Search the user's existing persisted workflows before proposing a new automation. Include temporary workflows only when the user explicitly asks about recent chat-created workflows. * Description key: workflows.skills.search.description * Skill: workflows/search */ search(input: SkillInput, options?: AppSkillRunOptions): Promise; } declare class GeneratedAppSkills { constructor(runSkill: AppSkillRunner); readonly ai: AiAppSkills; readonly audio: AudioAppSkills; readonly books: BooksAppSkills; readonly business: BusinessAppSkills; readonly code: CodeAppSkills; readonly design: DesignAppSkills; readonly electronics: ElectronicsAppSkills; readonly events: EventsAppSkills; readonly fitness: FitnessAppSkills; readonly health: HealthAppSkills; readonly home: HomeAppSkills; readonly images: ImagesAppSkills; readonly mail: MailAppSkills; readonly maps: MapsAppSkills; readonly math: MathAppSkills; readonly models3d: Models3dAppSkills; readonly music: MusicAppSkills; readonly news: NewsAppSkills; readonly nutrition: NutritionAppSkills; readonly openmates: OpenmatesAppSkills; readonly pdf: PdfAppSkills; readonly plans: PlansAppSkills; readonly projects: ProjectsAppSkills; readonly reminder: ReminderAppSkills; readonly shopping: ShoppingAppSkills; readonly socialMedia: SocialMediaAppSkills; readonly tasks: TasksAppSkills; readonly travel: TravelAppSkills; readonly videos: VideosAppSkills; readonly weather: WeatherAppSkills; readonly web: WebAppSkills; readonly workflows: WorkflowsAppSkills; } type DesignIconExportFormat = "svg" | "png"; interface DesignIconExportOptions { svgPath?: string; prefix?: string; name?: string; format?: DesignIconExportFormat; outputPath?: string; color?: string; palette?: boolean; allowPaletteRecolor?: boolean; size?: number; width?: number; height?: number; } interface DesignIconExportResult { format: DesignIconExportFormat; contentType: "image/svg+xml" | "image/png"; data: Uint8Array; svg: string; svgPath: string; outputPath?: string; } type AccountImportSource = "openmates" | "chatgpt" | "claude" | "gemini" | "opencode" | "other"; type AccountImportParserFormat = "claude" | "chatgpt" | "openmates" | "opencode" | "generic"; interface ImportedAssistantIdentity { category: AccountImportSource; sender_name: string; model_name: string; avatar_key: string; } interface ParsedImportMessage { role: "user" | "assistant" | "system"; content: string; created_at?: string | null; source_message_id?: string | null; provider_metadata: Record; imported_assistant_identity: ImportedAssistantIdentity | null; } interface ParsedImportUpload { source_upload_id: string; file_name: string; mime_type?: string | null; bytes?: number | null; content_ref: string; } interface ParsedImportChat { provider: AccountImportSource; parser_format: AccountImportParserFormat; selected_source: AccountImportSource; source_chat_id: string; source_fingerprint: string; title?: string | null; created_at?: string | null; updated_at?: string | null; messages: ParsedImportMessage[]; embeds: Array>; uploads: ParsedImportUpload[]; provider_labels: string[]; source_metadata: Record; } interface ParsedAccountImport { source: AccountImportSource; parserFormat: AccountImportParserFormat; chats: ParsedImportChat[]; skippedDomains: string[]; } declare const PRIORITY_LEVELS: readonly ["none", "low", "medium", "high", "urgent"]; type TaskPriorityLevel = typeof PRIORITY_LEVELS[number]; interface DecryptedUserTask { taskId: string; source?: string; projectionKind?: string | null; workflowId?: string | null; workflowRunId?: string | null; triggerId?: string | null; canCancel?: boolean; canDelete?: boolean; shortId: string; slug: string; title: string; description: string; labels: string[]; tags: string[]; latestInstruction: string; status: UserTaskStatus; assigneeType: UserTaskAssigneeType; assigneeHash: string | null; primaryChatId: string | null; linkedProjectIds: string[]; planId: string | null; dueAt: number | null; priority: number; priorityLevel: TaskPriorityLevel; position: number; queueState: string; blockedReasonCode: string | null; aiExecutionState: string | null; readOnly?: boolean; version: number; encrypted: UserTaskRecord; } interface TaskCreateOptions { title: string; description?: string; labels?: string[]; tags?: string[]; status?: UserTaskStatus; assign?: string; chatId?: string | null; projectIds?: string[]; planId?: string | null; dueAt?: number | null; priority?: TaskPriorityLevel | number | null; slug?: string; } interface TaskUpdateOptions { title?: string; description?: string; labels?: string[]; tags?: string[]; addLabels?: string[]; addTags?: string[]; removeLabels?: string[]; removeTags?: string[]; status?: UserTaskStatus; assign?: string; chatId?: string | null; projectIds?: string[]; planId?: string | null; priority?: TaskPriorityLevel | number | null; slug?: string; } interface DecryptedUserPlan { planId: string; shortId: string; slug: string; title: string; summary: string; goal: string; scopeIn: string; scopeOut: string; userFlows: string; currentFocus: string; assumptions: string; openQuestions: string; constraints: string; decisions: string; risks: string; referencePatterns: string; context: string; status: UserPlanStatus; primaryChatId: string | null; linkedProjectIds: string[]; currentPhaseId: string | null; currentStepId: string | null; currentTaskId: string | null; plannerFocusId: string | null; version: number; createdAt: number; updatedAt: number; completedAt: number | null; encrypted: UserPlanRecord; } interface DecryptedPlanLearning { learningId: string; type: UserPlanLearningType; targetKind: UserPlanLearningTargetKind; status: UserPlanLearningStatus; severity: UserPlanLearningLevel | null; confidence: UserPlanLearningLevel | null; linkedTaskIds: string[]; linkedCheckIds: string[]; appliedTaskId: string | null; title: string; observation: string; rootCause: string; suggestedChange: string; evidenceSummary: string; taskDraft: string; rejectionReason: string; version: number; createdAt: number; updatedAt: number; encrypted: UserPlanLearningRecord; } interface PlanCreateOptions { title: string; summary?: string; goal?: string; scopeIn?: string; scopeOut?: string; userFlows?: string; currentFocus?: string; assumptions?: string; openQuestions?: string; constraints?: string; decisions?: string; risks?: string; referencePatterns?: string; context?: string; status?: UserPlanStatus; primaryChatId?: string | null; primaryChatKey?: Uint8Array | null; linkedProjectIds?: string[]; linkedProjectKeys?: PlanProjectKey[]; currentPhaseId?: string | null; currentStepId?: string | null; currentTaskId?: string | null; plannerFocusId?: string | null; slug?: string; } interface PlanUpdateOptions { title?: string; summary?: string; goal?: string; scopeIn?: string; scopeOut?: string; userFlows?: string; currentFocus?: string; assumptions?: string; openQuestions?: string; constraints?: string; decisions?: string; risks?: string; referencePatterns?: string; context?: string; status?: UserPlanStatus; primaryChatId?: string | null; primaryChatKey?: Uint8Array | null; linkedProjectIds?: string[]; linkedProjectKeys?: PlanProjectKey[]; currentPhaseId?: string | null; currentStepId?: string | null; currentTaskId?: string | null; plannerFocusId?: string | null; slug?: string; } interface PlanProjectKey { projectId: string; projectKey: Uint8Array; } interface PlanCriterionCreateOptions { criterionId?: string; text: string; type?: string; status?: string; required?: boolean; linkedStepIds?: string[]; linkedTaskIds?: string[]; verificationIds?: string[]; } interface PlanVerificationCreateOptions { verificationId?: string; kind: string; phase?: string; status?: UserPlanVerificationStatus; requiredForDone?: boolean; covers?: string[]; threshold?: number | null; score?: number | null; confidence?: string | null; linkedTaskId?: string | null; runId?: string | null; command?: string; evaluationPrompt?: string; expectedResult?: string; } interface PlanVerificationEvidenceOptions { status: UserPlanVerificationStatus; score?: number | null; threshold?: number | null; confidence?: string | null; runId?: string | null; resultSummary?: string; requiredFixes?: string; } interface PlanVerificationUpdateOptions { kind?: string; phase?: string; status?: UserPlanVerificationStatus; lifecycleStatus?: string | null; requiredForDone?: boolean; covers?: string[]; sourceHash?: string | null; threshold?: number | null; score?: number | null; confidence?: string | null; linkedSubChatId?: string | null; sourceEmbedId?: string | null; runnerKind?: string | null; description?: string; command?: string; evaluationPrompt?: string; evaluatorInstructions?: string; expectedResult?: string; sourcePath?: string; redPhaseReason?: string; } interface PlanLearningCreateOptions { learningId?: string; type: UserPlanLearningType; targetKind: UserPlanLearningTargetKind; status?: UserPlanLearningStatus; severity?: UserPlanLearningLevel | null; confidence?: UserPlanLearningLevel | null; linkedTaskIds?: string[]; linkedCheckIds?: string[]; title: string; observation?: string; rootCause?: string; suggestedChange?: string; evidenceSummary?: string; taskDraft?: string; rejectionReason?: string; } interface PlanLearningUpdateOptions { status?: UserPlanLearningStatus; severity?: UserPlanLearningLevel | null; confidence?: UserPlanLearningLevel | null; linkedTaskIds?: string[]; linkedCheckIds?: string[]; appliedTaskId?: string | null; title?: string; observation?: string; rootCause?: string; suggestedChange?: string; evidenceSummary?: string; taskDraft?: string; rejectionReason?: string; } declare function buildCreateUserPlanInput(masterKey: Uint8Array, input: PlanCreateOptions): Promise; declare function buildUpdateUserPlanInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanUpdateOptions): Promise; declare function decryptUserPlan(record: UserPlanRecord, masterKey: Uint8Array): Promise; declare function decryptUserPlans(records: UserPlanRecord[], masterKey: Uint8Array): Promise; declare function buildCreatePlanLearningInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanLearningCreateOptions): Promise; declare function buildUpdatePlanLearningInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanLearningUpdateOptions): Promise>; declare function decryptPlanLearning(plan: DecryptedUserPlan, record: UserPlanLearningRecord, masterKey: Uint8Array): Promise; declare function decryptPlanLearnings(plan: DecryptedUserPlan, records: UserPlanLearningRecord[], masterKey: Uint8Array): Promise; declare function findPlan(plans: DecryptedUserPlan[], id: string): DecryptedUserPlan; declare function buildCreatePlanCriterionInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanCriterionCreateOptions): Promise; declare function buildCreatePlanVerificationInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanVerificationCreateOptions): Promise>; declare function buildPlanVerificationEvidenceInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanVerificationEvidenceOptions): Promise>; declare function buildUpdatePlanVerificationInput(plan: DecryptedUserPlan, masterKey: Uint8Array, input: PlanVerificationUpdateOptions): Promise>; declare function renderPlanList(plans: DecryptedUserPlan[]): string; declare function renderPlanDetail(plan: DecryptedUserPlan): string; declare function renderPlanLearningList(learnings: DecryptedPlanLearning[]): string; declare function renderPlanLearningDetail(learning: DecryptedPlanLearning): string; declare function findPlanLearning(learnings: DecryptedPlanLearning[], learningId: string): DecryptedPlanLearning; interface OpenMatesOptions { apiKey?: string; apiUrl?: string; deviceId?: string; deviceIdPath?: string; sdkName?: "cli" | "npm" | "pip"; } interface ChatCreateOptions { saveToAccount?: boolean; focusMode?: FocusModeSelection; chatId?: string; slug?: string; title?: string; goal?: string; goalTitle?: string; teamId?: string; } interface ChatSendOptions extends ChatCreateOptions { history?: Array> | { messages?: Array>; }; memoryIds?: string[]; model?: string; recoveryPollIntervalMs?: number; recoveryTimeoutMs?: number; connectedAccountDirectory?: ConnectedAccountDirectoryEntry[]; connectedAccountTokenRefInputs?: ConnectedAccountTurnTokenRefInput[]; senderName?: string; teamMemberMentions?: string[]; } interface ConnectedAccountDirectoryEntry { connected_account_id: string; app_id: string; provider_id?: string; account_ref: string; label: string; capabilities: string[]; runtime_modes?: Record; } interface ConnectedAccountTurnTokenRefInput { connected_account_id: string; app_id: string; provider_id?: string; allowed_actions: string[]; refresh_token_envelope: Record; action_scope?: Record; } interface ConnectedAccountSkillRunOptions { connectedAccountTokenRefInputs?: ConnectedAccountTurnTokenRefInput[]; chatId?: string; messageId?: string; promptInjectionProtection?: boolean; } interface FinanceCheckAccountsInput extends Record { period?: "monthly" | "quarterly" | "yearly" | "custom"; start_date?: string; end_date?: string; projection_horizon?: "monthly" | "quarterly" | "yearly"; connected_account_requests?: Array>; csv_statements?: Array<{ filename: string; content: string; }>; } interface ChatListOptions { limit?: number; offset?: number; } interface ConfirmedMutationOptions { confirmed?: boolean; } interface BankTransferOrderOptions { emailEncryptionKey?: string; } interface RequestOptions { query?: Record; } interface AccountExportStartOptions { domains?: string[]; filters?: Record; format?: "zip" | "directory"; includeAdvancedMetadata?: boolean; } interface AccountExportDownloadOptions extends AccountExportStartOptions { acceptPartial?: boolean; } interface AccountExportResponse { export: Record; } interface AccountExportManifestResponse { manifest: Record; } interface AccountExportChunksResponse { chunks: Array>; } interface AccountImportPreviewOptions { source: AccountImportSource; chats?: ParsedImportChat[]; chatCount?: number; sourceFingerprints?: string[]; estimatedTokens?: number; estimatedTokensByChat?: number[]; estimatedBytes?: number; } interface AccountImportCompleteOptions { importedChatIds: string[]; sourceFingerprints: string[]; recordCounts: Record; clientFailures?: Array>; } interface AccountImportRunOptions { select?: "default" | "all"; } interface ApiKeyCreateOptions { name: string; fullAccess?: boolean; scopes?: Record; creditLimit?: Record | null; expiresAt?: string | null; } interface ApiKeyRecord { id: string; name: string; keyPrefix: string; createdAt?: string | null; expiresAt?: string | null; lastUsedAt?: string | null; lastUsedLabel: string; fullAccess: boolean; scopes: Record; creditLimit?: Record | null; pendingDeviceCount: number; } interface ApiKeyCreateResult { apiKey: string; key: ApiKeyRecord; } interface ApplicationPreviewStartOptions { chatId: string; sharedContext?: string; requestedRuntime?: string; sourceMessageId?: string; wait?: boolean; timeoutMs?: number; } interface ApplicationPreviewStartResponse { session_id: string; preview_url: string; status: string; credits_per_minute: number; } interface ApplicationPreviewEvent { kind: string; text: string; timestamp: number; } interface ApplicationPreviewStatusResponse { session_id: string; status: string; events: ApplicationPreviewEvent[]; error?: string | null; charged_credits?: number | null; latest_screenshot_url?: string | null; latest_screenshot?: Record | null; auto_started: boolean; auto_opened_at?: number | null; } interface ApplicationPreviewStopResponse { session_id: string; status: string; charged_credits?: number | null; } interface EncryptedChatMetadata { id: string; slug?: string; encrypted_title?: string; encrypted_slug?: string; slug_lookup_hash?: string; encrypted_chat_key?: string; chat_key_wrappers?: ChatKeyWrapperRecord[]; encrypted_chat_summary?: string; encrypted_category?: string; title?: string; chat_summary?: string; category?: string; updated_at?: string | number; created_at?: string | number; [key: string]: unknown; } interface EncryptedDraftRecord { chatId: string; encryptedDraftMd: string; encryptedDraftPreview: string | null; draftV: number; } interface DraftRecord extends EncryptedDraftRecord { markdown: string; preview: string | null; } interface IdeaBucketAddInput extends Record { text: string; chatId?: string; bucketId?: string; scheduledSendAt?: number; prompt?: string; } interface IdeaBucketSettingsInput { processingPrompt?: string; processingTimes?: string[] | string; } interface IdeaBucketSettings { processingPrompt: string; processingTimes: string[]; entryId?: string; itemVersion?: number; source: "account" | "default"; } interface IdeaBucketProcessOptions { now?: boolean; } type IdeaBucketResult = Record; type TaskListFilters = { status?: UserTaskStatus; chatId?: string; projectId?: string; planId?: string; teamId?: string; labels?: string[]; tags?: string[]; priority?: TaskPriorityLevel | number | null; }; type TaskPlainCreateOptions = TaskCreateOptions; type TaskPlainUpdateOptions = TaskUpdateOptions; type TaskRecord = Omit; type PlanRecord = Omit; type PlanPlainCreateOptions = PlanCreateOptions; type PlanPlainUpdateOptions = PlanUpdateOptions; type ProjectPlainCreateOptions = { name: string; slug?: string; description?: string; icon?: string; color?: string; pinned?: boolean; archived?: boolean; }; type ProjectPlainUpdateOptions = Partial & { pinned: boolean; }>; type ProjectContextOptions = { personal: true; teamId?: never; } | { teamId: string; personal?: never; }; type TeamGeneratedProfileImageOptions = { iconName?: string; backgroundColor?: string; }; type TeamPlainCreateOptions = { name: string; description?: string | null; slug?: string | null; teamId?: string; profile?: TeamGeneratedProfileImageOptions; createdAt?: number; }; type ProjectRecordPlain = { projectId: string; slug: string; name: string; description: string; icon: string; color: string; pinned: boolean; archived: boolean; version: number | null; createdAt: number | null; updatedAt: number | null; lastOpenedAt: number | null; }; interface SdkSessionResponse { user?: { id?: string; }; key_wrapper?: { encrypted_key?: string; salt?: string; key_iv?: string; }; } interface ChatResponse { content?: string; [key: string]: unknown; } interface ChatMessageRecord { id: string; role: string; content: string; senderName: string | null; category: string | null; modelName: string | null; createdAt: number; preview: string; } type ChatMessageWindowDirection = "latest" | "before" | "after" | "around"; interface ChatMessageWindowCursor { created_at: number; message_id: string; } interface ChatMessagesOptions { chatId: string; direction?: ChatMessageWindowDirection; limit?: number; beforeTimestamp?: number; beforeMessageId?: string; afterTimestamp?: number; afterMessageId?: string; anchorMessageId?: string; respectCompressionBoundary?: boolean; all?: boolean; } interface ChatMessagesResult { chat: EncryptedChatMetadata; messages: ChatMessageRecord[]; hasMoreBefore: boolean; hasMoreAfter: boolean; startCursor: ChatMessageWindowCursor | null; endCursor: ChatMessageWindowCursor | null; anchorFound: boolean; serverMessageCount: number | null; } interface ChatForkOptions { chatId: string; fromMessageId: string; title?: string; } interface ChatRewindOptions { chatId: string; toMessageId: string; send?: string; dryRun?: boolean; confirmDestructive?: boolean; } interface ChatRetryOptions { chatId: string; dryRun?: boolean; confirmDestructive?: boolean; } interface EmbedKeyRecord { hashed_embed_id?: string; key_type?: string; hashed_chat_id?: string; encrypted_embed_key?: string; [key: string]: unknown; } interface ChatKeyWrapperRecord { hashed_chat_id?: string; key_type?: string; encrypted_chat_key?: string; [key: string]: unknown; } interface FocusModeSelection { appId: string; focusModeId: string; } declare class OpenMatesConfigError extends Error { constructor(message: string); } declare class OpenMatesApiError extends Error { readonly status: number; readonly data: unknown; constructor(status: number, data: unknown); } declare class OpenMates { readonly apps: GeneratedAppSkills; readonly account: OpenMatesAccount; readonly benchmark: OpenMatesBenchmark; readonly billing: OpenMatesBilling; readonly chats: OpenMatesChats; readonly connectedAccounts: OpenMatesConnectedAccounts; readonly docs: OpenMatesDocs; readonly design: OpenMatesDesign; readonly drafts: OpenMatesDrafts; readonly embeds: OpenMatesEmbeds; readonly feedback: OpenMatesFeedback; readonly finance: OpenMatesFinance; readonly inspirations: OpenMatesInspirations; readonly ideabucket: OpenMatesIdeaBucket; readonly apiKeys: OpenMatesApiKeys; readonly learningMode: OpenMatesLearningMode; readonly memories: OpenMatesMemories; readonly newChatSuggestions: OpenMatesNewChatSuggestions; readonly notifications: OpenMatesNotifications; readonly reminders: OpenMatesReminders; readonly history: OpenMatesHistory; readonly projects: OpenMatesProjects; readonly settings: OpenMatesSettings; readonly plans: OpenMatesPlans; readonly tasks: OpenMatesTasks; readonly teams: OpenMatesTeams; readonly workflows: OpenMatesWorkflows; private readonly apiKey?; private readonly apiUrl; private readonly deviceId; private readonly sdkName; private sdkSessionPromise?; private masterKeyPromise?; constructor(options?: OpenMatesOptions); runAppSkill(appId: string, skillId: string, input: unknown, options?: AppSkillRunOptions): Promise; runConnectedAccountSkill(appId: string, skillId: string, input: Record, options?: ConnectedAccountSkillRunOptions): Promise; request(path: string, body?: unknown, timeoutMs?: number, extraHeaders?: Record): Promise; patch(path: string, body?: unknown): Promise; put(path: string, body?: unknown): Promise; delete(path: string, body?: unknown): Promise; get(path: string): Promise; getPublic(path: string): Promise; getRaw(path: string): Promise<{ contentType: string; filename?: string; data: ArrayBuffer; }>; webOrigin(): string; masterKey(): Promise; sdkSession(): Promise; resolveEmbedKeyForShare(embedKeys: EmbedKeyRecord[], embedId: string): Promise; decryptChatMetadata(chat: T, chatKeyWrappers?: ChatKeyWrapperRecord[]): Promise; decryptLoadedChatPayload>(payload: T): Promise; private resolveLoadedChatKey; private decryptLoadedChatEmbeds; private resolveLoadedEmbedKey; private requestWithMethod; private getMasterKey; private loadMasterKey; private getSdkSession; private headers; private publicHeaders; private parseResponse; private resolveAsyncSkillResponse; private pollTaskUntilComplete; private safeJson; private wrapResolvedSkillResult; private mergeTaskResults; } declare class OpenMatesChats { private readonly client; constructor(client: OpenMates); list(options?: ChatListOptions): Promise; search(query: string, options?: ChatListOptions): Promise; load(chatId: string): Promise>; addToProject(chatId: string, projectId: string, options?: { folder?: string; }): Promise; removeFromProject(chatId: string, projectId: string): Promise<{ deleted: boolean; deletedCount: number; }>; messages(options: ChatMessagesOptions): Promise; messagePages(options: ChatMessagesOptions): AsyncGenerator; fork(options: ChatForkOptions): Promise>; rewind(options: ChatRewindOptions): Promise>; retry(options: ChatRetryOptions): Promise>; send(message: string, options?: ChatSendOptions): Promise; private sendSaved; private createAttachedGoalPlan; private pollRecoveryClaim; private openRecoveryClaim; export(chatId: string, options?: { format?: "json" | "markdown" | "yaml"; }): Promise>; delete(chatId: string, options: ConfirmedMutationOptions): Promise>; share(chatId: string, options?: { expires?: number; password?: string; }): Promise>; followUps(chatId: string): Promise; incognito(message: string): Promise; private loadPersonalEncryptedChat; } declare class OpenMatesIdeaBucket { private readonly client; constructor(client: OpenMates); settings(): Promise; saveSettings(input: IdeaBucketSettingsInput): Promise; add(input: IdeaBucketAddInput): Promise; status(bucketId?: string): Promise; process(bucketId: string, options?: IdeaBucketProcessOptions): Promise; private normalizeSettings; private settingsToMemoryValue; private buildEncryptedAddPayload; } declare class OpenMatesDrafts { private readonly client; constructor(client: OpenMates); listEncrypted(): Promise; list(): Promise; getEncrypted(chatId: string): Promise; get(chatId: string): Promise; private decrypt; } declare class OpenMatesAccount { private readonly client; constructor(client: OpenMates); info(): Promise>; setTimezone(timezone: string): Promise>; listInterests(): Promise>; setInterests(selectedTagIds: string[]): Promise>; clearInterests(): Promise>; startExport(options?: AccountExportStartOptions): Promise; getExport(exportId: string): Promise; exportJobManifest(exportId: string): Promise; exportChunks(exportId: string): Promise; exportChunk(exportId: string, chunkId: string): Promise>; iterExportChunks(exportId: string): AsyncGenerator>; completeExport(exportId: string): Promise; acceptPartialExport(exportId: string): Promise; cancelExport(exportId: string): Promise; downloadExport(options?: AccountExportDownloadOptions): Promise>; parseClaudeImport(payload: Buffer | Uint8Array | string, sourceName?: string, source?: AccountImportSource): Promise; parseGenericImport(payload: Buffer | Uint8Array | string, sourceName: string | undefined, source: "gemini" | "other"): Promise; parseChatGPTImport(payload: Buffer | Uint8Array | string, sourceName?: string, source?: AccountImportSource): Promise; parseOpenCodeImport(payload: Buffer | Uint8Array | string, sourceName?: string, source?: AccountImportSource): Promise; parseOpenMatesImport(payload: Buffer | Uint8Array | string, sourceName?: string, password?: string, source?: AccountImportSource): Promise; previewImport(options: AccountImportPreviewOptions): Promise>; confirmImport(importId: string, selectedFingerprints: string[]): Promise>; scanImport(importId: string, chats: ParsedImportChat[], sequence?: number, finalBatch?: boolean, batchId?: string): Promise>; importStatus(importId: string): Promise>; compressImport(importId: string, input: { sanitizedMessages: ParsedImportChat["messages"]; scanSequence: number; sourceFingerprint: string; priorSummary?: string; sequence?: number; finalBatch?: boolean; batchId?: string; }): Promise>; persistImport(importId: string, chats: ParsedImportChat[]): Promise>; completeImport(importId: string, options: AccountImportCompleteOptions): Promise>; importChats(parsed: ParsedAccountImport, options?: AccountImportRunOptions): Promise>; exportManifest(): Promise>; exportData(): Promise>; setUsername(username: string): Promise>; storageOverview(): Promise>; storageFiles(options?: RequestOptions): Promise>; deleteStorage(options: ConfirmedMutationOptions & { fileId?: string; category?: string; all?: boolean; }): Promise>; } declare class OpenMatesSettings { private readonly client; constructor(client: OpenMates); setLanguage(language: string): Promise>; setDarkMode(enabled: boolean): Promise>; setFont(font: string): Promise>; setModelDefaults(defaults: Record): Promise>; setChatAutoDelete(period: string): Promise>; shareDebugLogs(options: { duration?: string; confirmed: true; }): Promise>; } declare class OpenMatesApiKeys { private readonly client; constructor(client: OpenMates); list(): Promise<{ apiKeys: ApiKeyRecord[]; }>; create(options: ApiKeyCreateOptions): Promise; revoke(id: string): Promise>; private decryptRecord; } declare class OpenMatesMemories { private readonly client; constructor(client: OpenMates); list(options?: RequestOptions): Promise>; types(options?: RequestOptions): Promise>; create(input: Record): Promise>; update(id: string, input: Record): Promise>; delete(id: string, options: ConfirmedMutationOptions): Promise>; private storeMemory; } declare class OpenMatesBilling { private readonly client; constructor(client: OpenMates); overview(): Promise>; usage(options?: RequestOptions): Promise>; usageOverview(options?: RequestOptions): Promise>; usageDetails(options: { type: "chat" | "app" | "api_key"; identifier: string; yearMonth: string; }): Promise>; chatTotal(chatId: string): Promise>; usageSummaries(): Promise>; usageDaily(): Promise>; usageExport(options?: { months?: number; }): Promise<{ contentType: string; filename?: string; data: ArrayBuffer; }>; createBankTransferOrder(credits: number, options?: BankTransferOrderOptions): Promise>; bankTransferStatus(orderId: string): Promise>; listBankTransferOrders(): Promise>; listInvoices(): Promise>; downloadInvoice(invoiceId: string): Promise<{ contentType: string; filename?: string; data: ArrayBuffer; }>; downloadCreditNote(invoiceId: string): Promise<{ contentType: string; filename?: string; data: ArrayBuffer; }>; requestRefund(invoiceId: string, options: ConfirmedMutationOptions & { emailEncryptionKey?: string; }): Promise>; redeemGiftCard(code: string): Promise>; listRedeemedGiftCards(): Promise>; createGiftCardBankTransferOrder(credits: number, options?: BankTransferOrderOptions): Promise>; giftCardPurchaseStatus(orderId: string): Promise>; listPurchasedGiftCards(): Promise>; setLowBalanceAutoTopup(input: Record): Promise>; } declare class OpenMatesDesign { private readonly client; constructor(client: OpenMates); exportIcon(options: DesignIconExportOptions): Promise; } declare class OpenMatesNotifications { private readonly client; constructor(client: OpenMates); status(): Promise>; list(options?: { limit?: number; }): Promise>; } declare class OpenMatesReminders { private readonly client; constructor(client: OpenMates); list(): Promise>; update(id: string, input: Record): Promise>; delete(id: string, options: ConfirmedMutationOptions): Promise>; } declare class OpenMatesHistory { private readonly client; constructor(client: OpenMates); list(filters?: { objectType?: string; objectId?: string; limit?: number; }): Promise[]>; show(changeSetId: string): Promise>; undo(changeSetId: string): Promise>; } declare class OpenMatesProjects { private readonly client; constructor(client: OpenMates); list(options: ProjectContextOptions & { includeArchived?: boolean; }): Promise; show(projectId: string, context: ProjectContextOptions): Promise; create(input: ProjectPlainCreateOptions, context: ProjectContextOptions): Promise; update(projectId: string, input: ProjectPlainUpdateOptions, context: ProjectContextOptions): Promise; archive(projectId: string, context: ProjectContextOptions): Promise; unarchive(projectId: string, context: ProjectContextOptions): Promise; delete(projectId: string, options: ProjectContextOptions & ConfirmedMutationOptions): Promise<{ deleted: boolean; }>; history(projectId: string, options?: { limit?: number; }): Promise[]>; restore(projectId: string, options: { entryId: string; state?: "before" | "after"; }): Promise>; ask(instruction: string, options?: { create?: ProjectPlainCreateOptions; update?: { projectId: string; patch: ProjectPlainUpdateOptions; }; updates?: Array<{ projectId: string; patch: ProjectPlainUpdateOptions; }>; exactDelete?: Record; exactDeletes?: Record[]; }): Promise>; } declare class OpenMatesTasks { private readonly client; constructor(client: OpenMates); list(filters?: TaskListFilters): Promise; show(id: string, filters?: TaskListFilters): Promise; history(id: string, filters?: TaskListFilters & { limit?: number; }): Promise[]>; restore(id: string, options: { entryId: string; state?: "before" | "after"; filters?: TaskListFilters; }): Promise>; ask(instruction: string, options?: { create?: TaskPlainCreateOptions; creates?: TaskPlainCreateOptions[]; update?: { taskId: string; patch: TaskPlainUpdateOptions; filters?: TaskListFilters; }; updates?: Array<{ taskId: string; patch: TaskPlainUpdateOptions; filters?: TaskListFilters; }>; exactDelete?: Record; exactDeletes?: Record[]; }): Promise>; create(input: TaskPlainCreateOptions): Promise; update(id: string, input: TaskPlainUpdateOptions, filters?: TaskListFilters): Promise; edit(id: string, input: TaskPlainUpdateOptions, filters?: TaskListFilters): Promise; addToProject(id: string, projectId: string, options?: { filters?: TaskListFilters; }): Promise; removeFromProject(id: string, projectId: string, options?: { filters?: TaskListFilters; }): Promise; start(id: string, filters?: TaskListFilters): Promise; startAI(id: string, filters?: TaskListFilters): Promise; delete(id: string, options?: ConfirmedMutationOptions & { filters?: TaskListFilters; }): Promise<{ deleted?: boolean; task_id?: string; }>; deleteById(id: string, options?: ConfirmedMutationOptions & { filters?: TaskListFilters; }): Promise<{ deleted?: boolean; task_id?: string; }>; done(id: string, filters?: TaskListFilters): Promise; complete(id: string, filters?: TaskListFilters): Promise; block(id: string, reason: string, filters?: TaskListFilters): Promise; unblock(id: string, filters?: TaskListFilters): Promise; skip(id: string, filters?: TaskListFilters): Promise; reorder(id: string, move: Omit, filters?: TaskListFilters): Promise; move(id: string, move: Omit, filters?: TaskListFilters): Promise; private listRaw; private createRaw; private updateRaw; private startAIRaw; private listInternal; private resolve; private actionRaw; private actionById; } type PlanTextSectionFacade = { add: (planId: string, value: string) => Promise; update: (planId: string, value: string) => Promise; remove: (planId: string) => Promise; }; type PlanCriterionRecord = Omit & { criterionId: string; createdAt: number | null; updatedAt: number | null; }; type PlanCriterionUpdateOptions = Partial> & { evidence?: string; coverageNote?: string; waiverReason?: string; }; interface PlanAssumptionCreateOptions { assumptionId?: string; text: string; category?: string; status?: string; requiredBefore?: string; linkedSubChatId?: string | null; linkedTaskId?: string | null; linkedStepIds?: string[]; linkedCriterionIds?: string[]; sourceCount?: number; correctedText?: string; evidenceSummary?: string; blockerReason?: string; waiverReason?: string; sources?: string; } type PlanAssumptionUpdateOptions = Partial>; type PlanAssumptionRecord = Omit & { assumptionId: string; createdAt: number | null; updatedAt: number | null; }; interface PlanReferencePatternCreateOptions { patternId?: string; title: string; description?: string; category?: string; status?: string; requiredBefore?: string; sourceCount?: number; linkedTaskIds?: string[]; linkedCheckIds?: string[]; sources?: string; matchRules?: string; antiPatterns?: string; evidenceSummary?: string; waiverReason?: string; } type PlanReferencePatternUpdateOptions = Partial>; type PlanReferencePatternRecord = Omit & { patternId: string; createdAt: number | null; updatedAt: number | null; }; type PlanVerificationRecord = Omit & { verificationId: string; sourceHash: string | null; lifecycleStatus: string | null; linkedSubChatId: string | null; sourceEmbedId: string | null; runnerKind: string | null; description: string; evaluatorInstructions: string; sourcePath: string; redPhaseReason: string; resultSummary: string; requiredFixes: string; createdAt: number | null; updatedAt: number | null; }; type PlanLearningRecord = Omit; declare class OpenMatesPlans { private readonly client; readonly goal: { set: (planId: string, value: string) => Promise; }; readonly currentFocus: { set: (planId: string, value: string) => Promise; clear: (planId: string) => Promise; }; readonly successCriteria: { add: (planId: string, input: PlanCriterionCreateOptions) => Promise; update: (planId: string, criterionId: string, input: PlanCriterionUpdateOptions) => Promise; remove: (planId: string, criterionId: string) => Promise>; }; readonly tasks: { list: (planId: string) => Promise; add: (planId: string, input: TaskCreateOptions) => Promise>; update: (planId: string, taskId: string, input: TaskUpdateOptions) => Promise>; remove: (planId: string, taskId: string) => Promise>; }; readonly userFlows: PlanTextSectionFacade; readonly scopeIn: PlanTextSectionFacade; readonly scopeOut: PlanTextSectionFacade; readonly openQuestions: PlanTextSectionFacade & { answer: (planId: string, value: string) => Promise; }; readonly constraints: PlanTextSectionFacade; readonly decisions: PlanTextSectionFacade & { supersede: (planId: string, value: string) => Promise; }; readonly risks: PlanTextSectionFacade; readonly checks: { add: (planId: string, input: PlanVerificationCreateOptions) => Promise; update: (planId: string, checkId: string, input: PlanVerificationUpdateOptions) => Promise; remove: (planId: string, checkId: string) => Promise>; addEvidence: (planId: string, checkId: string, input: PlanVerificationEvidenceOptions) => Promise; getRun: (planId: string, checkId: string, runId: string) => Promise>; }; readonly assumptions: { add: (planId: string, input: PlanAssumptionCreateOptions) => Promise; update: (planId: string, assumptionId: string, input: PlanAssumptionUpdateOptions) => Promise; check: (planId: string, assumptionId: string, input?: PlanAssumptionUpdateOptions) => Promise; waive: (planId: string, assumptionId: string, input: PlanAssumptionUpdateOptions) => Promise; remove: (planId: string, assumptionId: string) => Promise>; }; readonly referencePatterns: { add: (planId: string, input: PlanReferencePatternCreateOptions) => Promise; update: (planId: string, patternId: string, input: PlanReferencePatternUpdateOptions) => Promise; inspect: (planId: string, patternId: string, input?: PlanReferencePatternUpdateOptions) => Promise; waive: (planId: string, patternId: string, input: PlanReferencePatternUpdateOptions) => Promise; remove: (planId: string, patternId: string) => Promise>; }; readonly learnings: { list: (planId: string) => Promise; show: (planId: string, learningId: string) => Promise; create: (planId: string, input: PlanLearningCreateOptions) => Promise; update: (planId: string, learningId: string, input: PlanLearningUpdateOptions) => Promise; remove: (planId: string, learningId: string) => Promise>; createTasks: (planId: string, input: UserPlanLearningCreateTasksInput) => Promise; }; readonly context: { artifacts: PlanTextSectionFacade; }; readonly activity: { list: (planId: string, options?: { limit?: number; }) => Promise[]>; }; constructor(client: OpenMates); private textSectionFacade; list(filters?: { status?: UserPlanStatus; chatId?: string; projectId?: string; activeOnly?: boolean; }): Promise; private listRaw; create(input: PlanCreateOptions): Promise; show(planId: string): Promise; update(planId: string, input: PlanUpdateOptions): Promise; addToProject(planId: string, projectId: string): Promise; removeFromProject(planId: string, projectId: string): Promise; history(planId: string, options?: { limit?: number; }): Promise[]>; private getRawPlan; restore(planId: string, options: { entryId: string; state?: "before" | "after"; }): Promise>; ask(instruction: string, options?: { create?: PlanCreateOptions; update?: { planId: string; patch: PlanUpdateOptions; }; updates?: Array<{ planId: string; patch: PlanUpdateOptions; }>; }): Promise>; activate(planId: string, input?: { chatId?: string | null; }): Promise; attach(planId: string, input?: { chatId?: string | null; }): Promise; start(planId: string): Promise; resume(planId: string): Promise; complete(planId: string): Promise; private decryptedPlanForChildren; private resolveDecryptedPlan; private getRawPlanById; private buildAskUpdate; private planKeyForChildren; createCriterion(planId: string, input: PlanCriterionCreateOptions): Promise; updateCriterion(planId: string, criterionId: string, input: PlanCriterionUpdateOptions): Promise; deleteCriterion(planId: string, criterionId: string): Promise>; listCriteria(planId: string): Promise; createVerification(planId: string, input: PlanVerificationCreateOptions): Promise; updateVerification(planId: string, verificationId: string, input: PlanVerificationUpdateOptions): Promise; deleteVerification(planId: string, verificationId: string): Promise>; listVerifications(planId: string): Promise; createAssumption(planId: string, input: PlanAssumptionCreateOptions): Promise; listAssumptions(planId: string): Promise; updateAssumption(planId: string, assumptionId: string, input: PlanAssumptionUpdateOptions): Promise; deleteAssumption(planId: string, assumptionId: string): Promise>; createReferencePattern(planId: string, input: PlanReferencePatternCreateOptions): Promise; listReferencePatterns(planId: string): Promise; updateReferencePattern(planId: string, patternId: string, input: PlanReferencePatternUpdateOptions): Promise; deleteReferencePattern(planId: string, patternId: string): Promise>; createLearning(planId: string, input: PlanLearningCreateOptions): Promise; listLearnings(planId: string): Promise; updateLearning(planId: string, learningId: string, input: PlanLearningUpdateOptions): Promise; deleteLearning(planId: string, learningId: string): Promise>; createLearningTasks(planId: string, input: UserPlanLearningCreateTasksInput): Promise; addVerificationEvidence(planId: string, verificationId: string, input: PlanVerificationEvidenceOptions): Promise; getVerificationRun(planId: string, verificationId: string, runId: string): Promise>; } declare class OpenMatesWorkflows { private readonly client; constructor(client: OpenMates); list(): Promise; private decryptWorkflowSlugs; private decryptWorkflowSlug; private resolveId; addToProject(workflowId: string, projectId: string, options?: { folder?: string; }): Promise; removeFromProject(workflowId: string, projectId: string): Promise<{ deleted: boolean; deletedCount: number; }>; temporary(): Promise; capabilities(): Promise; validateYaml(source: string): Promise>; createFromYaml(source: string): Promise<{ workflow: WorkflowDetail; validation: Record; }>; updateFromYaml(workflowId: string, source: string): Promise<{ workflow: WorkflowDetail; validation: Record; }>; history(workflowId: string, options?: { limit?: number; }): Promise[]>; restore(workflowId: string, options: { entryId: string; state?: "before" | "after"; }): Promise>; ask(input: { instruction: string; create?: Record; exactUpdate?: Record; exactAction?: Record; selectedObjectId?: string | null; }): Promise>; startInput(params: WorkflowInputStartParams): Promise; inputSession(sessionId: string): Promise; inputEvents(sessionId: string, afterEventId?: number): Promise; followUpInput(sessionId: string, text: string): Promise; stopInput(sessionId: string): Promise; undoInput(sessionId: string): Promise; get(workflowId: string): Promise; create(params: { title: string; slug?: string; description?: string | null; graph: WorkflowGraph; enabled?: boolean; runContentRetention?: WorkflowRunContentRetention; lifecycle?: "persisted" | "temporary"; source?: string; sourceChatId?: string | null; createdByAssistant?: boolean; autoDeleteAt?: number | null; }): Promise; update(workflowId: string, params: { title?: string; slug?: string; description?: string | null; graph?: WorkflowGraph; enabled?: boolean; runContentRetention?: WorkflowRunContentRetention; }): Promise; enable(workflowId: string): Promise; disable(workflowId: string): Promise; delete(workflowId: string, options?: ConfirmedMutationOptions): Promise<{ deleted: boolean; }>; keep(workflowId: string): Promise; run(workflowId: string, params: { idempotencyKey: string; mode?: "manual" | "test"; input?: Record; }): Promise; runs(workflowId: string): Promise; runDetail(workflowId: string, runId: string): Promise; stepTest(workflowId: string, stepId: string, params?: { input?: Record; confirmed?: boolean; }): Promise; cancelRun(workflowId: string, runId: string): Promise; respond(workflowId: string, runId: string, stepId: string, input: Record): Promise; upsertTemplateProjection(workflowId: string, params: WorkflowTemplateProjectionUpsertParams): Promise; getPublicTemplateProjection(templateId: string): Promise; revokeTemplateProjection(workflowId: string): Promise; unrevokeTemplateProjection(workflowId: string): Promise; completeImportedBinding(workflowId: string, params: WorkflowTemplateBindingCompletionParams): Promise; createTemplateShortUrl(params: WorkflowTemplateShortUrlParams): Promise; revokeShortUrl(token: string): Promise; importTemplate(payload: WorkflowTemplateImportPayload): Promise; } declare class OpenMatesDocs { private readonly client; constructor(client: OpenMates); list(): Promise>; search(query: string): Promise>; show(slug: string): Promise>; download(slug: string): Promise>; } declare class OpenMatesEmbeds { readonly preview: OpenMatesEmbedPreview; private readonly client; constructor(client: OpenMates); show(embedId: string): Promise>; addToProject(embedId: string, projectId: string, options?: { folder?: string; }): Promise; removeFromProject(embedId: string, projectId: string): Promise<{ deleted: boolean; deletedCount: number; }>; share(embedId: string, options?: { expires?: number; password?: string; }): Promise>; versions(embedId: string): Promise>; version(embedId: string, version: number): Promise>; restoreVersion(embedId: string, version: number, options: ConfirmedMutationOptions): Promise>; } declare class OpenMatesEmbedPreview { private readonly client; constructor(client: OpenMates); start(embedId: string, options: ApplicationPreviewStartOptions): Promise; status(sessionId: string): Promise; open(sessionId: string): Promise; stop(sessionId: string): Promise; private waitForRunning; } declare class OpenMatesConnectedAccounts { private readonly client; constructor(client: OpenMates); import(input: { payload: string; passcode: string; teamId?: string | null; }): Promise>; } declare class OpenMatesTeams { private readonly client; constructor(client: OpenMates); list(): Promise[]>; get(teamId: string): Promise>; create(input: Record): Promise>; createPlain(input: TeamPlainCreateOptions): Promise>; update(teamId: string, input: Record): Promise>; updateGeneratedProfileImage(teamId: string, input?: TeamGeneratedProfileImageOptions): Promise>; getProfileImage(teamId: string): Promise<{ contentType: string; filename?: string; data: ArrayBuffer; }>; invite(teamId: string, input: Record): Promise>; acceptInvite(inviteId: string, input?: Record): Promise>; declineInvite(inviteId: string, input?: Record): Promise>; accessRequests(teamId: string, status?: string): Promise[]>; approveAccess(teamId: string, accessRequestId: string, input?: Record): Promise>; rejectAccess(teamId: string, accessRequestId: string, input?: Record): Promise>; removeMember(teamId: string, memberUserId: string, input?: Record): Promise>; billing(teamId: string): Promise>; usage(teamId: string, memberUserId?: string): Promise[]>; createBankTransferOrder(teamId: string, credits: number, options?: BankTransferOrderOptions): Promise>; bankTransferStatus(teamId: string, orderId: string): Promise>; listBankTransferOrders(teamId: string): Promise>; memories(teamId: string): Promise[]>; export(teamId: string, input?: Record): Promise>; import(input: Record): Promise>; } declare class OpenMatesLearningMode { private readonly client; constructor(client: OpenMates); status(): Promise>; enable(input: { ageGroup: string; passcode: string; }): Promise>; disable(passcode: string): Promise>; } declare class OpenMatesInspirations { private readonly client; constructor(client: OpenMates); list(options?: { language?: string; }): Promise>; } declare class OpenMatesNewChatSuggestions { private readonly client; constructor(client: OpenMates); list(options?: { limit?: number; }): Promise>; } declare class OpenMatesFinance { private readonly client; constructor(client: OpenMates); checkAccounts(input: FinanceCheckAccountsInput, options?: ConnectedAccountSkillRunOptions): Promise>; } declare class OpenMatesFeedback { private readonly client; constructor(client: OpenMates); assistantResponse(input: { rating: number; }): Promise>; } declare class OpenMatesBenchmark { private readonly client; constructor(client: OpenMates); run(input: Record): Promise>; estimate(input: Record): Promise>; } declare const ASSISTANT_FEEDBACK_THANKS = "Thanks for the feedback!"; declare const ASSISTANT_FEEDBACK_REPORT_TITLE = "Assistant response quality bad:"; type AssistantFeedbackDecision = { rating: number; action: "thanks" | "report_issue"; message: string; reportTitle?: string; }; declare function buildAssistantFeedbackDecision(rating: number): AssistantFeedbackDecision; export { APP_SKILL_METADATA, ASSISTANT_FEEDBACK_REPORT_TITLE, ASSISTANT_FEEDBACK_THANKS, type ApiKeyCreateOptions, type ApiKeyCreateResult, type ApiKeyRecord, type AssistantFeedbackDecision, type ChatCreateOptions, type ChatListOptions, type ChatResponse, type DecryptedUserTask, type DesignIconExportFormat, type DesignIconExportOptions, type DesignIconExportResult, type DraftRecord, type EncryptedChatMetadata, type EncryptedDraftRecord, type FocusModeSelection, type IdeaBucketAddInput, type IdeaBucketProcessOptions, type IdeaBucketResult, type IdeaBucketSettings, type IdeaBucketSettingsInput, OpenMates, OpenMatesApiError, OpenMatesConfigError, type OpenMatesOptions, type PlanPlainCreateOptions, type PlanPlainUpdateOptions, type PlanRecord, type ProjectPlainCreateOptions, type ProjectPlainUpdateOptions, type ProjectRecordPlain, SUPPORT_URL, type TaskListFilters, type TaskPlainCreateOptions, type TaskPlainUpdateOptions, type TaskRecord, WorkflowCapability, WorkflowDetail, WorkflowGraph, WorkflowRunContentRetention, WorkflowRunDetail, WorkflowSummary, buildAssistantFeedbackDecision, buildCreatePlanCriterionInput, buildCreatePlanLearningInput, buildCreatePlanVerificationInput, buildCreateUserPlanInput, buildPlanVerificationEvidenceInput, buildUpdatePlanLearningInput, buildUpdatePlanVerificationInput, buildUpdateUserPlanInput, decryptPlanLearning, decryptPlanLearnings, decryptUserPlan, decryptUserPlans, defaultCloneBranchForVersion, findPlan, findPlanLearning, renderPlanDetail, renderPlanLearningDetail, renderPlanLearningList, renderPlanList, renderSupportInfo };