openmates 0.23.0-alpha.6 → 0.23.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2454,6 +2454,7 @@ import { createInterface as createInterface2 } from "readline/promises";
2454
2454
  import { stdin as stdin2, stdout } from "process";
2455
2455
  import { Writable } from "stream";
2456
2456
  import qrcode from "qrcode-terminal";
2457
+ import { decode as toonDecode } from "@toon-format/toon";
2457
2458
 
2458
2459
  // ../ui/src/utils/appMemoryRequests.ts
2459
2460
  var REQUEST_TYPE = "app_settings_memories_request";
@@ -10762,6 +10763,13 @@ function parseEmbedContentObject(rawContent) {
10762
10763
  try {
10763
10764
  return JSON.parse(rawContent);
10764
10765
  } catch {
10766
+ try {
10767
+ const decoded = toonDecode(rawContent, { strict: true });
10768
+ if (decoded && typeof decoded === "object" && !Array.isArray(decoded)) {
10769
+ return decoded;
10770
+ }
10771
+ } catch {
10772
+ }
10765
10773
  return parseYamlLikeContent(rawContent);
10766
10774
  }
10767
10775
  }
@@ -13526,13 +13534,7 @@ var OpenMatesClient = class _OpenMatesClient {
13526
13534
  const textPreview = await decryptField("encrypted_text_preview");
13527
13535
  let content = null;
13528
13536
  const rawContent = await decryptField("encrypted_content");
13529
- if (rawContent) {
13530
- try {
13531
- content = JSON.parse(rawContent);
13532
- } catch {
13533
- content = parseYamlLikeContent(rawContent);
13534
- }
13535
- }
13537
+ if (rawContent) content = parseEmbedContentObject(rawContent);
13536
13538
  content = await this.refreshRemotionVideoCreateContent(embedId, content);
13537
13539
  const strVal = (v) => typeof v === "string" && v.trim() ? v.trim() : null;
13538
13540
  const resolvedType = type ?? strVal(content?.type) ?? null;
@@ -24655,6 +24657,99 @@ Each object must contain 'id' (unique identifier) and 'url' (webpage URL), and c
24655
24657
  }
24656
24658
  }
24657
24659
  }
24660
+ },
24661
+ {
24662
+ "app_id": "hosting",
24663
+ "skill_id": "search_domains",
24664
+ "app_namespace_ts": "hosting",
24665
+ "skill_method_ts": "searchDomains",
24666
+ "app_namespace_py": "hosting",
24667
+ "skill_method_py": "search_domains",
24668
+ "description_key": "app_skills.hosting.search_domains.description",
24669
+ "description": "Check an exact domain name or discover available domain names through Gandi. Use one grouped request per independent name or idea. A fully qualified domain is checked exactly. Put explicitly requested suffixes in tlds and explicit tax country and currency in country and currency; defaults are DE and EUR. Use availability=prefer_available by default: show confirmed available names first and checked in-use names only to fill remaining result slots. Use available_only only when the user wants no in",
24670
+ "schema": {
24671
+ "type": "object",
24672
+ "properties": {
24673
+ "requests": {
24674
+ "type": "array",
24675
+ "minItems": 1,
24676
+ "maxItems": 5,
24677
+ "description": "One to five independent domain checks or name searches.",
24678
+ "items": {
24679
+ "type": "object",
24680
+ "properties": {
24681
+ "id": {
24682
+ "description": "Optional caller ID echoed in this group's result.",
24683
+ "anyOf": [
24684
+ {
24685
+ "type": "string"
24686
+ },
24687
+ {
24688
+ "type": "integer"
24689
+ }
24690
+ ]
24691
+ },
24692
+ "query": {
24693
+ "type": "string",
24694
+ "description": "An exact fully qualified domain (up to 253 characters), a short name, or a keyword idea (up to 100 characters).",
24695
+ "minLength": 1,
24696
+ "maxLength": 253
24697
+ },
24698
+ "tlds": {
24699
+ "type": "array",
24700
+ "maxItems": 5,
24701
+ "items": {
24702
+ "type": "string"
24703
+ },
24704
+ "description": "Optional suffixes such as .com or .net. For a short single-label name, check each exact name plus suffix before suggestions.\n"
24705
+ },
24706
+ "country": {
24707
+ "type": "string",
24708
+ "default": "DE",
24709
+ "description": "Two-letter tax country code; returned explicitly with prices."
24710
+ },
24711
+ "currency": {
24712
+ "type": "string",
24713
+ "default": "EUR",
24714
+ "enum": [
24715
+ "EUR",
24716
+ "USD"
24717
+ ],
24718
+ "description": "Supported quote currency. Unsupported currencies are rejected."
24719
+ },
24720
+ "max_results": {
24721
+ "type": "integer",
24722
+ "minimum": 1,
24723
+ "maximum": 20,
24724
+ "default": 10,
24725
+ "description": "Maximum selected results per group. Checked pool remains at most 40."
24726
+ },
24727
+ "availability": {
24728
+ "type": "string",
24729
+ "enum": [
24730
+ "prefer_available",
24731
+ "available_only",
24732
+ "all"
24733
+ ],
24734
+ "default": "prefer_available",
24735
+ "description": "prefer_available selects confirmed available first, then checked unavailable names only to fill a shortfall. available_only never fills with unavailable. all preserves ranked checked available and unavailable order. Unknown checks remain diagnostic only.\n"
24736
+ },
24737
+ "relevance_criteria": {
24738
+ "type": "string",
24739
+ "maxLength": 1e3,
24740
+ "description": "Optional natural-language goal for ranking checked candidates. Set when the user states a material brand, name-fit, renewal-price, term, premium, or restriction preference that should change order. Copy the goal faithfully; omit for neutral lookup or discovery. Ranking uses only evidenced provider facts and drops scores below 1.\n"
24741
+ }
24742
+ },
24743
+ "required": [
24744
+ "query"
24745
+ ]
24746
+ }
24747
+ }
24748
+ },
24749
+ "required": [
24750
+ "requests"
24751
+ ]
24752
+ }
24658
24753
  }
24659
24754
  ];
24660
24755
  var AiAppSkills = class {
@@ -25337,6 +25432,20 @@ var WorkflowsAppSkills = class {
25337
25432
  return this.runSkill("workflows", "search", input, options);
25338
25433
  }
25339
25434
  };
25435
+ var HostingAppSkills = class {
25436
+ runSkill;
25437
+ constructor(runSkill) {
25438
+ this.runSkill = runSkill;
25439
+ }
25440
+ /**
25441
+ * Check an exact domain name or discover available domain names through Gandi. Use one grouped request per independent name or idea. A fully qualified domain is checked exactly. Put explicitly requested suffixes in tlds and explicit tax country and currency in country and currency; defaults are DE and EUR. Use availability=prefer_available by default: show confirmed available names first and checked in-use names only to fill remaining result slots. Use available_only only when the user wants no in
25442
+ * Description key: app_skills.hosting.search_domains.description
25443
+ * Skill: hosting/search_domains
25444
+ */
25445
+ async searchDomains(input, options) {
25446
+ return this.runSkill("hosting", "search_domains", input, options);
25447
+ }
25448
+ };
25340
25449
  var GeneratedAppSkills = class {
25341
25450
  constructor(runSkill) {
25342
25451
  this.ai = new AiAppSkills(runSkill);
@@ -25350,6 +25459,7 @@ var GeneratedAppSkills = class {
25350
25459
  this.fitness = new FitnessAppSkills(runSkill);
25351
25460
  this.health = new HealthAppSkills(runSkill);
25352
25461
  this.home = new HomeAppSkills(runSkill);
25462
+ this.hosting = new HostingAppSkills(runSkill);
25353
25463
  this.images = new ImagesAppSkills(runSkill);
25354
25464
  this.mail = new MailAppSkills(runSkill);
25355
25465
  this.maps = new MapsAppSkills(runSkill);
@@ -25383,6 +25493,7 @@ var GeneratedAppSkills = class {
25383
25493
  fitness;
25384
25494
  health;
25385
25495
  home;
25496
+ hosting;
25386
25497
  images;
25387
25498
  mail;
25388
25499
  maps;
@@ -25407,7 +25518,7 @@ var GeneratedAppSkills = class {
25407
25518
  };
25408
25519
 
25409
25520
  // src/sdk.ts
25410
- import { decode as toonDecode } from "@toon-format/toon";
25521
+ import { decode as toonDecode2 } from "@toon-format/toon";
25411
25522
  import { createHash as createHash15, createHmac as createHmac4, randomBytes as randomBytes7, randomUUID as randomUUID11 } from "crypto";
25412
25523
  import { chmodSync as chmodSync4, existsSync as existsSync8, mkdirSync as mkdirSync7, readFileSync as readFileSync10, writeFileSync as writeFileSync5 } from "fs";
25413
25524
  import { homedir as homedir5 } from "os";
@@ -26925,7 +27036,7 @@ function parseMaybeJson(value) {
26925
27036
  return JSON.parse(value);
26926
27037
  } catch {
26927
27038
  try {
26928
- return toonDecode(value, { strict: false });
27039
+ return toonDecode2(value, { strict: false });
26929
27040
  } catch {
26930
27041
  return value;
26931
27042
  }
@@ -56398,6 +56509,14 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
56398
56509
  }
56399
56510
  }
56400
56511
  },
56512
+ hosting: {
56513
+ search_domains: {
56514
+ text: "Search domains",
56515
+ description: {
56516
+ text: "Check domain availability and indicative registration and renewal prices."
56517
+ }
56518
+ }
56519
+ },
56401
56520
  images: {
56402
56521
  view: {
56403
56522
  text: "Image",
@@ -57194,6 +57313,20 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
57194
57313
  text: "Research posts and community comments."
57195
57314
  }
57196
57315
  },
57316
+ hosting: {
57317
+ text: "Hosting",
57318
+ description: {
57319
+ text: "Find domain names and check availability and prices."
57320
+ },
57321
+ skills: {
57322
+ search_domains: {
57323
+ text: "Search domains",
57324
+ description: {
57325
+ text: "Check domain availability and indicative registration and renewal prices."
57326
+ }
57327
+ }
57328
+ }
57329
+ },
57197
57330
  web: {
57198
57331
  text: "Web",
57199
57332
  description: {
@@ -58784,6 +58917,179 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
58784
58917
  }
58785
58918
  }
58786
58919
  },
58920
+ chat_settings: {
58921
+ plan: {
58922
+ text: "Plan"
58923
+ },
58924
+ recipient_decrypting: {
58925
+ text: "Decrypting chat\u2026"
58926
+ },
58927
+ recipient_password_title: {
58928
+ text: "Password Required"
58929
+ },
58930
+ recipient_password_detail: {
58931
+ text: "This shared chat is protected with a password."
58932
+ },
58933
+ recipient_password_placeholder: {
58934
+ text: "Enter password"
58935
+ },
58936
+ recipient_access: {
58937
+ text: "Access Chat"
58938
+ },
58939
+ recipient_unavailable_title: {
58940
+ text: "Unable to Load Chat"
58941
+ },
58942
+ recipient_unavailable_detail: {
58943
+ text: "This shared chat is no longer available or the link is invalid."
58944
+ },
58945
+ recipient_expired: {
58946
+ text: "This shared chat link has expired."
58947
+ },
58948
+ recipient_invalid_password: {
58949
+ text: "Incorrect password. Please try again."
58950
+ },
58951
+ recipient_short_disabled: {
58952
+ text: "This shared chat link is disabled."
58953
+ },
58954
+ recipient_lock_symbol: {
58955
+ text: "\u{1F512}"
58956
+ },
58957
+ recipient_warning_symbol: {
58958
+ text: "\u26A0\uFE0F"
58959
+ },
58960
+ summary_empty: {
58961
+ text: "No summary available yet."
58962
+ },
58963
+ loading_plans: {
58964
+ text: "Loading chat plans..."
58965
+ },
58966
+ loading_tasks: {
58967
+ text: "Loading chat tasks..."
58968
+ },
58969
+ no_plan: {
58970
+ text: "No plan is linked to this chat yet."
58971
+ },
58972
+ no_shared_plan: {
58973
+ text: "No shared plan is available for this chat."
58974
+ },
58975
+ no_tasks: {
58976
+ text: "No tasks are linked to this chat yet."
58977
+ },
58978
+ no_shared_tasks: {
58979
+ text: "No shared tasks are available for this chat."
58980
+ },
58981
+ create_task: {
58982
+ text: "Create task"
58983
+ },
58984
+ creating: {
58985
+ text: "Creating..."
58986
+ },
58987
+ task_title: {
58988
+ text: "What should happen next?"
58989
+ },
58990
+ task_context: {
58991
+ text: "Optional task context"
58992
+ },
58993
+ shared_readonly: {
58994
+ text: "This is a shared chat. Details are read-only for everyone except the owner."
58995
+ },
58996
+ share_readonly: {
58997
+ text: "This shared chat is read-only. Only the owner can change password, expiration, community sharing, or stop sharing."
58998
+ },
58999
+ files: {
59000
+ text: "Files"
59001
+ },
59002
+ download_files: {
59003
+ text: "Download files"
59004
+ },
59005
+ downloadable_empty: {
59006
+ text: "No downloadable files yet"
59007
+ },
59008
+ downloadable_one: {
59009
+ text: "{count} downloadable item"
59010
+ },
59011
+ downloadable_many: {
59012
+ text: "{count} downloadable items"
59013
+ },
59014
+ no_files: {
59015
+ text: "No downloadable files found for this chat yet."
59016
+ },
59017
+ community: {
59018
+ text: "Share with community"
59019
+ },
59020
+ community_detail: {
59021
+ text: "Allow this shared chat to appear in community surfaces."
59022
+ },
59023
+ password: {
59024
+ text: "Password protection"
59025
+ },
59026
+ password_detail: {
59027
+ text: "Require a short password before opening the shared chat."
59028
+ },
59029
+ auto_expire: {
59030
+ text: "Auto expire"
59031
+ },
59032
+ expire_detail: {
59033
+ text: "Expire the share link after 10 minutes."
59034
+ },
59035
+ show_qr: {
59036
+ text: "Show QR code"
59037
+ },
59038
+ hide_qr: {
59039
+ text: "Hide QR code"
59040
+ },
59041
+ show_url: {
59042
+ text: "Show URL"
59043
+ },
59044
+ hide_url: {
59045
+ text: "Hide URL"
59046
+ },
59047
+ stop_sharing: {
59048
+ text: "Stop sharing"
59049
+ },
59050
+ download_chat: {
59051
+ text: "Download chat"
59052
+ },
59053
+ download_zip: {
59054
+ text: "Download chat zip"
59055
+ },
59056
+ link_unavailable: {
59057
+ text: "The original share link is not stored on this device. Open the chat from its share link again to save it here."
59058
+ },
59059
+ short_fallback: {
59060
+ text: "Short link unavailable. Using a long encrypted link."
59061
+ },
59062
+ share_failed: {
59063
+ text: "Could not create share link."
59064
+ },
59065
+ stop_failed: {
59066
+ text: "Could not stop sharing."
59067
+ },
59068
+ password_invalid: {
59069
+ text: "Use a password between 1 and 10 characters."
59070
+ },
59071
+ export_failed: {
59072
+ text: "Could not download chat data."
59073
+ },
59074
+ usage_empty: {
59075
+ text: "No usage entries available for this chat yet."
59076
+ },
59077
+ download_usage: {
59078
+ text: "Download usage data"
59079
+ },
59080
+ share_created: {
59081
+ text: "Share link created."
59082
+ },
59083
+ ten_minutes: {
59084
+ text: "10 minutes"
59085
+ },
59086
+ never: {
59087
+ text: "never"
59088
+ },
59089
+ progress: {
59090
+ text: "{percent}% complete"
59091
+ }
59092
+ },
58787
59093
  chats: {
58788
59094
  chat: {
58789
59095
  welcome: {
@@ -66576,7 +66882,7 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
66576
66882
  text: "Web, search, and content retrieval (only when you use a web or search skill)"
66577
66883
  },
66578
66884
  description: {
66579
- text: "These providers are only used when you invoke a web, videos, news, web-read, or design icon search skill. They see the content of what you search for, the URLs you ask to read, or the public icon identifiers you ask to preview, but no user identifier \u2014 they do not know which OpenMates user made each request."
66885
+ text: "These providers are used only when you use web, media, icon, or domain search and reading skills. They may receive your query, requested URL, or domain name, but no OpenMates user identifier."
66580
66886
  },
66581
66887
  brave: {
66582
66888
  heading: {
@@ -66603,6 +66909,9 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
66603
66909
  }
66604
66910
  },
66605
66911
  webshare: {
66912
+ domain_fallback: {
66913
+ text: "For domain searches, Webshare is a fallback when the direct Gandi request fails. It sees the Gandi host and connection metadata, but cannot read the HTTPS-encrypted domain query or an OpenMates user identifier."
66914
+ },
66606
66915
  heading: {
66607
66916
  text: "Webshare (rotating proxy)"
66608
66917
  },
@@ -66610,6 +66919,14 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
66610
66919
  text: "Webshare provides a rotating proxy for requests to services that would otherwise block us. We route YouTube transcript requests (for the videos get-transcript skill) and doctor appointment searches (for the health search-appointments skill \u2014 see Group H) through Webshare. Webshare sees the URLs we route through it."
66611
66920
  }
66612
66921
  },
66922
+ gandi: {
66923
+ heading: {
66924
+ text: "Gandi (domain search)"
66925
+ },
66926
+ description: {
66927
+ text: "Gandi receives domain names or search keywords, country and currency when you use Hosting's domain search. OpenMates sends requests from its server over HTTPS without your OpenMates user identifier or Gandi credentials. Prices are indicative; no registration is performed."
66928
+ }
66929
+ },
66613
66930
  google_maps: {
66614
66931
  heading: {
66615
66932
  text: "Google Maps Platform (places search)"
@@ -70398,6 +70715,51 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
70398
70715
  }
70399
70716
  },
70400
70717
  app_settings_memories: {
70718
+ validation_key_length: {
70719
+ text: "Key must be {limit} characters or fewer"
70720
+ },
70721
+ validation_value_length: {
70722
+ text: "Value must be {limit} characters or fewer"
70723
+ },
70724
+ validation_required: {
70725
+ text: "{field} is required"
70726
+ },
70727
+ validation_length: {
70728
+ text: "{field} must be {limit} characters or fewer"
70729
+ },
70730
+ validation_integer: {
70731
+ text: "{field} must be an integer"
70732
+ },
70733
+ validation_number: {
70734
+ text: "{field} must be a number"
70735
+ },
70736
+ validation_boolean: {
70737
+ text: "{field} must be true or false"
70738
+ },
70739
+ validation_json: {
70740
+ text: "{field} must contain valid JSON"
70741
+ },
70742
+ validation_json_array: {
70743
+ text: "{field} must contain a JSON array"
70744
+ },
70745
+ validation_json_object: {
70746
+ text: "{field} must contain a JSON object"
70747
+ },
70748
+ validation_unsupported_type: {
70749
+ text: "Unsupported field type: {type}"
70750
+ },
70751
+ validation_allowed_value: {
70752
+ text: "{field} must be one of the allowed values"
70753
+ },
70754
+ validation_minimum: {
70755
+ text: "{field} must be at least {limit}"
70756
+ },
70757
+ validation_maximum: {
70758
+ text: "{field} must be at most {limit}"
70759
+ },
70760
+ validation_invalid_type: {
70761
+ text: "{field} contains an invalid value"
70762
+ },
70401
70763
  text: "Memories",
70402
70764
  item_key_required: {
70403
70765
  text: "Entry key is required"
@@ -71023,6 +71385,16 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
71023
71385
  }
71024
71386
  },
71025
71387
  app_store_examples: {
71388
+ hosting: {
71389
+ search_domains: {
71390
+ "1": {
71391
+ text: "Check if example.com is available"
71392
+ },
71393
+ "2": {
71394
+ text: "Find available domain names for a coffee shop"
71395
+ }
71396
+ }
71397
+ },
71026
71398
  web: {
71027
71399
  search: {
71028
71400
  "1": {
@@ -77021,6 +77393,88 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
77021
77393
  }
77022
77394
  },
77023
77395
  workflows: {
77396
+ sidebar: {
77397
+ loading: {
77398
+ text: "Loading workflows..."
77399
+ },
77400
+ empty: {
77401
+ text: "No workflows yet."
77402
+ },
77403
+ manual: {
77404
+ text: "Manual"
77405
+ }
77406
+ },
77407
+ home: {
77408
+ greeting: {
77409
+ text: "Hey {name}!"
77410
+ },
77411
+ fallback_name: {
77412
+ text: "there"
77413
+ },
77414
+ subtitle: {
77415
+ text: "What do you want to automate next?"
77416
+ },
77417
+ show_all: {
77418
+ text: "Show all"
77419
+ },
77420
+ back_to_recent: {
77421
+ text: "Back to recent"
77422
+ },
77423
+ search: {
77424
+ text: "Search"
77425
+ },
77426
+ search_unavailable: {
77427
+ text: "Workflow search is coming soon."
77428
+ },
77429
+ retention_none: {
77430
+ text: "No durable run content"
77431
+ },
77432
+ retention_last5: {
77433
+ text: "Keep latest 5 encrypted runs"
77434
+ },
77435
+ badge_new: {
77436
+ text: "New"
77437
+ },
77438
+ badge_enabled: {
77439
+ text: "Enabled"
77440
+ },
77441
+ badge_paused: {
77442
+ text: "Paused"
77443
+ },
77444
+ starter_badge: {
77445
+ text: "Starter"
77446
+ },
77447
+ starter_rain_title: {
77448
+ text: "Daily weather and news"
77449
+ },
77450
+ starter_rain_summary: {
77451
+ text: "Rain timing and the latest articles in a new chat"
77452
+ },
77453
+ starter_news_title: {
77454
+ text: "Weekly AI events"
77455
+ },
77456
+ starter_news_summary: {
77457
+ text: "Discover AI events for the upcoming week"
77458
+ },
77459
+ starter_apartments_title: {
77460
+ text: "Find new apartments every hour"
77461
+ },
77462
+ starter_apartments_summary: {
77463
+ text: "Only previously undelivered listings"
77464
+ },
77465
+ inspiration_phrase: {
77466
+ text: "A useful workflow starts with one trigger, one decision, and one visible result."
77467
+ },
77468
+ inspiration_title: {
77469
+ text: "Design a Workflow Trigger"
77470
+ },
77471
+ inspiration_feature_title: {
77472
+ text: "Workflow planning tip"
77473
+ },
77474
+ inspiration_feature_description: {
77475
+ text: "Start automation with a clear trigger."
77476
+ }
77477
+ },
77024
77478
  template_share: {
77025
77479
  title: {
77026
77480
  text: "Share as template"
@@ -77036,6 +77490,81 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
77036
77490
  },
77037
77491
  revoked: {
77038
77492
  text: "Template access revoked."
77493
+ },
77494
+ owner_description: {
77495
+ text: "Recipients import a disabled copy and reconnect their own accounts, schedules, permissions, and notification preferences."
77496
+ },
77497
+ preparing: {
77498
+ text: "Preparing..."
77499
+ },
77500
+ copy_short: {
77501
+ text: "Copy short link"
77502
+ },
77503
+ copy_offline: {
77504
+ text: "Copy offline link"
77505
+ },
77506
+ revoke: {
77507
+ text: "Revoke template access"
77508
+ },
77509
+ restore: {
77510
+ text: "Restore template access"
77511
+ },
77512
+ link_created: {
77513
+ text: "Short template link created."
77514
+ },
77515
+ link_copied: {
77516
+ text: "Link copied."
77517
+ },
77518
+ access_restored: {
77519
+ text: "Template access restored. Create a new short link to share it again."
77520
+ },
77521
+ preview_label: {
77522
+ text: "Workflow template"
77523
+ },
77524
+ import_disabled: {
77525
+ text: "Imported workflows start disabled."
77526
+ },
77527
+ preview_step_summary: {
77528
+ text: "{count} steps. Imported workflows start disabled."
77529
+ },
77530
+ importing: {
77531
+ text: "Importing..."
77532
+ },
77533
+ complete_before_enable: {
77534
+ text: "Complete before enabling"
77535
+ },
77536
+ binding_explanation: {
77537
+ text: "This imported workflow remains disabled until these recipient-owned bindings are confirmed."
77538
+ },
77539
+ binding_schedule: {
77540
+ text: "Choose your schedule and timezone"
77541
+ },
77542
+ binding_app_skill: {
77543
+ text: "Connect"
77544
+ },
77545
+ binding_notifications: {
77546
+ text: "Choose notification preferences"
77547
+ },
77548
+ binding_other: {
77549
+ text: "Complete requirement"
77550
+ },
77551
+ mark_complete: {
77552
+ text: "Mark complete"
77553
+ },
77554
+ completed: {
77555
+ text: "Completed"
77556
+ },
77557
+ enabling: {
77558
+ text: "Enabling..."
77559
+ },
77560
+ enable: {
77561
+ text: "Enable workflow"
77562
+ },
77563
+ import_done: {
77564
+ text: "Workflow imported disabled. Complete its binding requirements before enabling it."
77565
+ },
77566
+ binding_done: {
77567
+ text: "Binding requirement completed."
77039
77568
  }
77040
77569
  },
77041
77570
  version_history: {
@@ -77105,7 +77634,7 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
77105
77634
  text: "New"
77106
77635
  },
77107
77636
  ai_edit_placeholder: {
77108
- text: "Describe a change to this workflow"
77637
+ text: "Describe workflow change."
77109
77638
  },
77110
77639
  ai_edit_submit: {
77111
77640
  text: "Update workflow"
@@ -77603,7 +78132,7 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
77603
78132
  text: "Chat title"
77604
78133
  },
77605
78134
  message_placeholder: {
77606
- text: "Enter the message here. Type @ to add a variable from an earlier step, or select one below."
78135
+ text: "Enter the message here. Type @ to add a variable from an earlier step."
77607
78136
  },
77608
78137
  only_new_results: {
77609
78138
  text: "Only results not previously sent"
@@ -77884,6 +78413,12 @@ As of mid-2026, the severe supply shocks from the 2024\u20132025 avian flu have
77884
78413
  file_binding_failed: {
77885
78414
  text: "Could not confirm this binding."
77886
78415
  },
78416
+ ai_create_submit: {
78417
+ text: "Create workflow"
78418
+ },
78419
+ ai_create_submitting: {
78420
+ text: "Creating..."
78421
+ },
77887
78422
  website_text: {
77888
78423
  text: "Page text"
77889
78424
  },
package/dist/cli.js CHANGED
@@ -19,7 +19,7 @@ import {
19
19
  serializeToYaml,
20
20
  shouldRequireTrustedAccountGuard,
21
21
  waitForWorkflowRun
22
- } from "./chunk-MV74J4GG.js";
22
+ } from "./chunk-EYKKNZBW.js";
23
23
  import "./chunk-IWKP55ZB.js";
24
24
  import "./chunk-BBKJZ23O.js";
25
25
  export {
package/dist/index.d.ts CHANGED
@@ -4313,6 +4313,84 @@ declare const APP_SKILL_METADATA: readonly [{
4313
4313
  };
4314
4314
  };
4315
4315
  };
4316
+ }, {
4317
+ readonly app_id: "hosting";
4318
+ readonly skill_id: "search_domains";
4319
+ readonly app_namespace_ts: "hosting";
4320
+ readonly skill_method_ts: "searchDomains";
4321
+ readonly app_namespace_py: "hosting";
4322
+ readonly skill_method_py: "search_domains";
4323
+ readonly description_key: "app_skills.hosting.search_domains.description";
4324
+ readonly description: "Check an exact domain name or discover available domain names through Gandi. Use one grouped request per independent name or idea. A fully qualified domain is checked exactly. Put explicitly requested suffixes in tlds and explicit tax country and currency in country and currency; defaults are DE and EUR. Use availability=prefer_available by default: show confirmed available names first and checked in-use names only to fill remaining result slots. Use available_only only when the user wants no in";
4325
+ readonly schema: {
4326
+ readonly type: "object";
4327
+ readonly properties: {
4328
+ readonly requests: {
4329
+ readonly type: "array";
4330
+ readonly minItems: 1;
4331
+ readonly maxItems: 5;
4332
+ readonly description: "One to five independent domain checks or name searches.";
4333
+ readonly items: {
4334
+ readonly type: "object";
4335
+ readonly properties: {
4336
+ readonly id: {
4337
+ readonly description: "Optional caller ID echoed in this group's result.";
4338
+ readonly anyOf: readonly [{
4339
+ readonly type: "string";
4340
+ }, {
4341
+ readonly type: "integer";
4342
+ }];
4343
+ };
4344
+ readonly query: {
4345
+ readonly type: "string";
4346
+ readonly description: "An exact fully qualified domain (up to 253 characters), a short name, or a keyword idea (up to 100 characters).";
4347
+ readonly minLength: 1;
4348
+ readonly maxLength: 253;
4349
+ };
4350
+ readonly tlds: {
4351
+ readonly type: "array";
4352
+ readonly maxItems: 5;
4353
+ readonly items: {
4354
+ readonly type: "string";
4355
+ };
4356
+ readonly description: "Optional suffixes such as .com or .net. For a short single-label name, check each exact name plus suffix before suggestions.\n";
4357
+ };
4358
+ readonly country: {
4359
+ readonly type: "string";
4360
+ readonly default: "DE";
4361
+ readonly description: "Two-letter tax country code; returned explicitly with prices.";
4362
+ };
4363
+ readonly currency: {
4364
+ readonly type: "string";
4365
+ readonly default: "EUR";
4366
+ readonly enum: readonly ["EUR", "USD"];
4367
+ readonly description: "Supported quote currency. Unsupported currencies are rejected.";
4368
+ };
4369
+ readonly max_results: {
4370
+ readonly type: "integer";
4371
+ readonly minimum: 1;
4372
+ readonly maximum: 20;
4373
+ readonly default: 10;
4374
+ readonly description: "Maximum selected results per group. Checked pool remains at most 40.";
4375
+ };
4376
+ readonly availability: {
4377
+ readonly type: "string";
4378
+ readonly enum: readonly ["prefer_available", "available_only", "all"];
4379
+ readonly default: "prefer_available";
4380
+ readonly description: "prefer_available selects confirmed available first, then checked unavailable names only to fill a shortfall. available_only never fills with unavailable. all preserves ranked checked available and unavailable order. Unknown checks remain diagnostic only.\n";
4381
+ };
4382
+ readonly relevance_criteria: {
4383
+ readonly type: "string";
4384
+ readonly maxLength: 1000;
4385
+ readonly description: "Optional natural-language goal for ranking checked candidates. Set when the user states a material brand, name-fit, renewal-price, term, premium, or restriction preference that should change order. Copy the goal faithfully; omit for neutral lookup or discovery. Ranking uses only evidenced provider facts and drops scores below 1.\n";
4386
+ };
4387
+ };
4388
+ readonly required: readonly ["query"];
4389
+ };
4390
+ };
4391
+ };
4392
+ readonly required: readonly ["requests"];
4393
+ };
4316
4394
  }];
4317
4395
  declare class AiAppSkills {
4318
4396
  private readonly runSkill;
@@ -4808,6 +4886,16 @@ declare class WorkflowsAppSkills {
4808
4886
  */
4809
4887
  search<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
4810
4888
  }
4889
+ declare class HostingAppSkills {
4890
+ private readonly runSkill;
4891
+ constructor(runSkill: AppSkillRunner);
4892
+ /**
4893
+ * Check an exact domain name or discover available domain names through Gandi. Use one grouped request per independent name or idea. A fully qualified domain is checked exactly. Put explicitly requested suffixes in tlds and explicit tax country and currency in country and currency; defaults are DE and EUR. Use availability=prefer_available by default: show confirmed available names first and checked in-use names only to fill remaining result slots. Use available_only only when the user wants no in
4894
+ * Description key: app_skills.hosting.search_domains.description
4895
+ * Skill: hosting/search_domains
4896
+ */
4897
+ searchDomains<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
4898
+ }
4811
4899
  declare class GeneratedAppSkills {
4812
4900
  constructor(runSkill: AppSkillRunner);
4813
4901
  readonly ai: AiAppSkills;
@@ -4821,6 +4909,7 @@ declare class GeneratedAppSkills {
4821
4909
  readonly fitness: FitnessAppSkills;
4822
4910
  readonly health: HealthAppSkills;
4823
4911
  readonly home: HomeAppSkills;
4912
+ readonly hosting: HostingAppSkills;
4824
4913
  readonly images: ImagesAppSkills;
4825
4914
  readonly mail: MailAppSkills;
4826
4915
  readonly maps: MapsAppSkills;
package/dist/index.js CHANGED
@@ -43,7 +43,7 @@ import {
43
43
  selectAssistantMessagesForSpeech,
44
44
  serializeToYaml,
45
45
  summarizeAssistantSpeech
46
- } from "./chunk-MV74J4GG.js";
46
+ } from "./chunk-EYKKNZBW.js";
47
47
  import "./chunk-IWKP55ZB.js";
48
48
  import "./chunk-BBKJZ23O.js";
49
49
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.23.0-alpha.6",
3
+ "version": "0.23.0-alpha.8",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",