openmates 0.15.0-alpha.75 → 0.15.0-alpha.76

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.
@@ -12951,7 +12951,7 @@ var APP_SKILL_METADATA = [
12951
12951
  "app_namespace_py": "code",
12952
12952
  "skill_method_py": "image_to_html",
12953
12953
  "description_key": "app_skills.code.image_to_html.description",
12954
- "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; reference an uploaded image or pass image_base64.",
12954
+ "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.",
12955
12955
  "schema": {
12956
12956
  "type": "object",
12957
12957
  "properties": {
@@ -12963,7 +12963,11 @@ var APP_SKILL_METADATA = [
12963
12963
  "properties": {
12964
12964
  "image_base64": {
12965
12965
  "type": "string",
12966
- "description": "Base64-encoded PNG, JPEG, or WEBP image bytes."
12966
+ "description": "Base64-encoded PNG, JPEG, or WEBP image bytes. Use this for REST/API calls."
12967
+ },
12968
+ "source_image": {
12969
+ "type": "string",
12970
+ "description": "Uploaded image filename/embed_ref from the conversation. Use this in chat/CLI when the user references an attached screenshot or mockup."
12967
12971
  },
12968
12972
  "mime_type": {
12969
12973
  "type": "string",
@@ -12972,7 +12976,7 @@ var APP_SKILL_METADATA = [
12972
12976
  "image/jpeg",
12973
12977
  "image/webp"
12974
12978
  ],
12975
- "description": "MIME type for image_base64."
12979
+ "description": "MIME type for image_base64. Optional when using source_image because the server resolves it from the uploaded image."
12976
12980
  },
12977
12981
  "filename": {
12978
12982
  "type": "string",
@@ -12985,11 +12989,7 @@ var APP_SKILL_METADATA = [
12985
12989
  "default": 2,
12986
12990
  "description": "Maximum E2B render-feedback correction passes."
12987
12991
  }
12988
- },
12989
- "required": [
12990
- "image_base64",
12991
- "mime_type"
12992
- ]
12992
+ }
12993
12993
  }
12994
12994
  }
12995
12995
  },
@@ -14576,6 +14576,106 @@ Note: The 'id' field is auto-generated if not provided - you don't need to inclu
14576
14576
  ]
14577
14577
  }
14578
14578
  },
14579
+ {
14580
+ "app_id": "plans",
14581
+ "skill_id": "create",
14582
+ "app_namespace_ts": "plans",
14583
+ "skill_method_ts": "create",
14584
+ "app_namespace_py": "plans",
14585
+ "skill_method_py": "create",
14586
+ "description_key": "plans.skills.create.description",
14587
+ "description": "Request creation of a user-visible plan. Durable plan content is client-side encrypted, so a capable connected client must apply the change.",
14588
+ "schema": {
14589
+ "type": "object",
14590
+ "properties": {
14591
+ "title": {
14592
+ "type": "string",
14593
+ "description": "Short user-facing plan title."
14594
+ },
14595
+ "summary": {
14596
+ "type": "string",
14597
+ "description": "Optional plan summary."
14598
+ },
14599
+ "goal": {
14600
+ "type": "string",
14601
+ "description": "Optional plan goal."
14602
+ }
14603
+ },
14604
+ "required": [
14605
+ "title"
14606
+ ]
14607
+ }
14608
+ },
14609
+ {
14610
+ "app_id": "plans",
14611
+ "skill_id": "search",
14612
+ "app_namespace_ts": "plans",
14613
+ "skill_method_ts": "search",
14614
+ "app_namespace_py": "plans",
14615
+ "skill_method_py": "search",
14616
+ "description_key": "plans.skills.search.description",
14617
+ "description": "Search the user's encrypted plans through a connected capable client. Do not use server-visible metadata as a private plan-content fallback.",
14618
+ "schema": {
14619
+ "type": "object",
14620
+ "properties": {
14621
+ "query": {
14622
+ "type": "string",
14623
+ "description": "Private plan text to search for on a connected client."
14624
+ }
14625
+ },
14626
+ "required": [
14627
+ "query"
14628
+ ]
14629
+ }
14630
+ },
14631
+ {
14632
+ "app_id": "projects",
14633
+ "skill_id": "create",
14634
+ "app_namespace_ts": "projects",
14635
+ "skill_method_ts": "create",
14636
+ "app_namespace_py": "projects",
14637
+ "skill_method_py": "create",
14638
+ "description_key": "projects.skills.create.description",
14639
+ "description": "Request creation of a user-visible project. Durable project content is client-side encrypted, so a capable connected client must apply the change.",
14640
+ "schema": {
14641
+ "type": "object",
14642
+ "properties": {
14643
+ "name": {
14644
+ "type": "string",
14645
+ "description": "Short user-facing project name."
14646
+ },
14647
+ "description": {
14648
+ "type": "string",
14649
+ "description": "Optional project description."
14650
+ }
14651
+ },
14652
+ "required": [
14653
+ "name"
14654
+ ]
14655
+ }
14656
+ },
14657
+ {
14658
+ "app_id": "projects",
14659
+ "skill_id": "search",
14660
+ "app_namespace_ts": "projects",
14661
+ "skill_method_ts": "search",
14662
+ "app_namespace_py": "projects",
14663
+ "skill_method_py": "search",
14664
+ "description_key": "projects.skills.search.description",
14665
+ "description": "Search the user's encrypted projects through a connected capable client. Do not use server-visible metadata as a private project-content fallback.",
14666
+ "schema": {
14667
+ "type": "object",
14668
+ "properties": {
14669
+ "query": {
14670
+ "type": "string",
14671
+ "description": "Private project text to search for on a connected client."
14672
+ }
14673
+ },
14674
+ "required": [
14675
+ "query"
14676
+ ]
14677
+ }
14678
+ },
14579
14679
  {
14580
14680
  "app_id": "reminder",
14581
14681
  "skill_id": "set-reminder",
@@ -15259,7 +15359,7 @@ Note: The 'id' field is auto-generated if not provided - you don't need to inclu
15259
15359
  "app_namespace_py": "travel",
15260
15360
  "skill_method_py": "search_connections",
15261
15361
  "description_key": "app_skills.travel.search_connections.description",
15262
- "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. If no provider is specified, all providers for the selected transport method are searched. Add cou',
15362
+ "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',
15263
15363
  "schema": {
15264
15364
  "type": "object",
15265
15365
  "properties": {
@@ -15313,13 +15413,14 @@ Note: The 'id' field is auto-generated if not provided - you don't need to inclu
15313
15413
  },
15314
15414
  "providers": {
15315
15415
  "type": "array",
15316
- "description": 'Optional provider IDs to search. Use "google_flights" for flights, "deutsche_bahn" for Deutsche Bahn / ICE / Bahn.de / Sparpreis train searches, and "flix" for FlixBus / FlixTrain. If omitted, all providers for the selected transport method are used, then filtered by countries if provided.\n',
15416
+ "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',
15317
15417
  "items": {
15318
15418
  "type": "string",
15319
15419
  "enum": [
15320
15420
  "google_flights",
15321
15421
  "deutsche_bahn",
15322
- "flix"
15422
+ "flix",
15423
+ "transitous"
15323
15424
  ]
15324
15425
  }
15325
15426
  },
@@ -15378,6 +15479,36 @@ Note: The 'id' field is auto-generated if not provided - you don't need to inclu
15378
15479
  "type": "string"
15379
15480
  }
15380
15481
  },
15482
+ "owned_passes": {
15483
+ "type": "array",
15484
+ "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',
15485
+ "items": {
15486
+ "type": "string"
15487
+ }
15488
+ },
15489
+ "pass_only": {
15490
+ "type": "boolean",
15491
+ "description": 'If true, prefer routes covered by owned fare passes when supported. Use with owned_passes ["deutschland_ticket"] for Deutschlandticket-only routing.\n',
15492
+ "default": false
15493
+ },
15494
+ "rail_products": {
15495
+ "type": "array",
15496
+ "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",
15497
+ "items": {
15498
+ "type": "string",
15499
+ "enum": [
15500
+ "high_speed",
15501
+ "intercity",
15502
+ "regional_express",
15503
+ "regional",
15504
+ "s_bahn",
15505
+ "subway",
15506
+ "tram",
15507
+ "bus",
15508
+ "ferry"
15509
+ ]
15510
+ }
15511
+ },
15381
15512
  "min_departure_time": {
15382
15513
  "type": "string",
15383
15514
  "description": "Earliest acceptable local departure time in HH:MM format."
@@ -16296,7 +16427,7 @@ var CodeAppSkills = class {
16296
16427
  return this.runSkill("code", "get_project_overview", input, options);
16297
16428
  }
16298
16429
  /**
16299
- * 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; reference an uploaded image or pass image_base64.
16430
+ * 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.
16300
16431
  * Description key: app_skills.code.image_to_html.description
16301
16432
  * Skill: code/image_to_html
16302
16433
  */
@@ -16592,6 +16723,50 @@ var PdfAppSkills = class {
16592
16723
  return this.runSkill("pdf", "view", input, options);
16593
16724
  }
16594
16725
  };
16726
+ var PlansAppSkills = class {
16727
+ runSkill;
16728
+ constructor(runSkill) {
16729
+ this.runSkill = runSkill;
16730
+ }
16731
+ /**
16732
+ * Request creation of a user-visible plan. Durable plan content is client-side encrypted, so a capable connected client must apply the change.
16733
+ * Description key: plans.skills.create.description
16734
+ * Skill: plans/create
16735
+ */
16736
+ async create(input, options) {
16737
+ return this.runSkill("plans", "create", input, options);
16738
+ }
16739
+ /**
16740
+ * Search the user's encrypted plans through a connected capable client. Do not use server-visible metadata as a private plan-content fallback.
16741
+ * Description key: plans.skills.search.description
16742
+ * Skill: plans/search
16743
+ */
16744
+ async search(input, options) {
16745
+ return this.runSkill("plans", "search", input, options);
16746
+ }
16747
+ };
16748
+ var ProjectsAppSkills = class {
16749
+ runSkill;
16750
+ constructor(runSkill) {
16751
+ this.runSkill = runSkill;
16752
+ }
16753
+ /**
16754
+ * Request creation of a user-visible project. Durable project content is client-side encrypted, so a capable connected client must apply the change.
16755
+ * Description key: projects.skills.create.description
16756
+ * Skill: projects/create
16757
+ */
16758
+ async create(input, options) {
16759
+ return this.runSkill("projects", "create", input, options);
16760
+ }
16761
+ /**
16762
+ * Search the user's encrypted projects through a connected capable client. Do not use server-visible metadata as a private project-content fallback.
16763
+ * Description key: projects.skills.search.description
16764
+ * Skill: projects/search
16765
+ */
16766
+ async search(input, options) {
16767
+ return this.runSkill("projects", "search", input, options);
16768
+ }
16769
+ };
16595
16770
  var ReminderAppSkills = class {
16596
16771
  runSkill;
16597
16772
  constructor(runSkill) {
@@ -16694,7 +16869,7 @@ var TravelAppSkills = class {
16694
16869
  return this.runSkill("travel", "get_flight", input, options);
16695
16870
  }
16696
16871
  /**
16697
- * 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. If no provider is specified, all providers for the selected transport method are searched. Add cou
16872
+ * 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
16698
16873
  * Description key: app_skills.travel.search_connections.description
16699
16874
  * Skill: travel/search_connections
16700
16875
  */
@@ -16836,6 +17011,8 @@ var GeneratedAppSkills = class {
16836
17011
  this.nutrition = new NutritionAppSkills(runSkill);
16837
17012
  this.openmates = new OpenmatesAppSkills(runSkill);
16838
17013
  this.pdf = new PdfAppSkills(runSkill);
17014
+ this.plans = new PlansAppSkills(runSkill);
17015
+ this.projects = new ProjectsAppSkills(runSkill);
16839
17016
  this.reminder = new ReminderAppSkills(runSkill);
16840
17017
  this.shopping = new ShoppingAppSkills(runSkill);
16841
17018
  this.socialMedia = new SocialMediaAppSkills(runSkill);
@@ -16866,6 +17043,8 @@ var GeneratedAppSkills = class {
16866
17043
  nutrition;
16867
17044
  openmates;
16868
17045
  pdf;
17046
+ plans;
17047
+ projects;
16869
17048
  reminder;
16870
17049
  shopping;
16871
17050
  socialMedia;
@@ -22133,6 +22312,27 @@ function formatPrice(amount, currency) {
22133
22312
  const cur = str(currency)?.toUpperCase() ?? "";
22134
22313
  return cur ? `${cur} ${amount}` : String(amount);
22135
22314
  }
22315
+ function fareNumberValue(value) {
22316
+ if (typeof value === "number" && Number.isFinite(value)) return value;
22317
+ if (typeof value !== "string" || !value.trim()) return null;
22318
+ const parsed = Number(value);
22319
+ return Number.isFinite(parsed) ? parsed : null;
22320
+ }
22321
+ function fareRecord(value) {
22322
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
22323
+ }
22324
+ function formatFare(value) {
22325
+ const fare = fareRecord(value.fare);
22326
+ const confidence = str(fare?.confidence);
22327
+ if (confidence === "timetable_only") return "Timetable only";
22328
+ if (fare?.is_pass_only === true) return str(fare.summary) ?? "Covered by pass";
22329
+ const amount = fare?.amount ?? value.total_price ?? value.price;
22330
+ const currency = fare?.currency ?? value.currency;
22331
+ const price = formatPrice(amount, currency);
22332
+ if (!price) return confidence === "unknown" ? "Fare unknown" : "";
22333
+ if (fare?.is_partial === true || value.fare_is_partial === true) return `${price} (partial fare)`;
22334
+ return price;
22335
+ }
22136
22336
  function trunc(s, max) {
22137
22337
  return s.length > max ? s.slice(0, max) + "\u2026" : s;
22138
22338
  }
@@ -22630,7 +22830,12 @@ async function renderTravelConnectionsPreview(c, ln, _client) {
22630
22830
  }
22631
22831
  if (count !== null) ln(`\x1B[2m${count} connections\x1B[0m`);
22632
22832
  if (Array.isArray(results) && results.length > 0) {
22633
- const prices = results.map((r) => typeof r.total_price === "number" ? r.total_price : null).filter((p) => p !== null);
22833
+ const prices = results.map((r) => {
22834
+ const fare = fareRecord(r.fare);
22835
+ const confidence = str(fare?.confidence);
22836
+ if (confidence && !["confirmed", "partial"].includes(confidence)) return null;
22837
+ return fareNumberValue(fare?.amount ?? r.total_price);
22838
+ }).filter((p) => p !== null);
22634
22839
  if (prices.length > 0) {
22635
22840
  const min = Math.min(...prices);
22636
22841
  const currency = str(results[0].currency) ?? "EUR";
@@ -22652,7 +22857,7 @@ async function renderTravelConnectionsFullscreen(c, client) {
22652
22857
  const dep = str(r.departure)?.slice(11, 16) ?? "";
22653
22858
  const arr = str(r.arrival)?.slice(11, 16) ?? "";
22654
22859
  const duration = str(r.duration) ?? "";
22655
- const price = formatPrice(r.total_price ?? r.price, r.currency);
22860
+ const price = formatFare(r);
22656
22861
  const stops = typeof r.stops === "number" ? r.stops === 0 ? "Direct" : `${r.stops} stops` : "";
22657
22862
  const carriers = Array.isArray(r.carriers) ? r.carriers.join(", ") : str(r.carrier) ?? "";
22658
22863
  if (origin && dest)
@@ -23037,7 +23242,7 @@ function renderByDirectType(embed, c, ln) {
23037
23242
  case "travel-connection": {
23038
23243
  const origin = str(c.origin) ?? "";
23039
23244
  const dest = str(c.destination) ?? "";
23040
- const price = formatPrice(c.total_price ?? c.price, c.currency);
23245
+ const price = formatFare(c);
23041
23246
  const dep = str(c.departure)?.slice(11, 16) ?? "";
23042
23247
  const arr = str(c.arrival)?.slice(11, 16) ?? "";
23043
23248
  if (origin && dest) ln(`${origin} \u2192 ${dest}`);
@@ -70318,6 +70523,14 @@ function buildTravelConnectionsRequest(positionals, flags) {
70318
70523
  };
70319
70524
  const transport = stringFlag2(flags, "transport") ?? stringFlag2(flags, "transport-method");
70320
70525
  if (transport) request.transport_methods = [transport];
70526
+ const providers = csvFlag(flags, "providers") ?? csvFlag(flags, "provider");
70527
+ if (providers) request.providers = providers;
70528
+ const ownedPasses = csvFlag(flags, "owned_passes") ?? csvFlag(flags, "owned-passes");
70529
+ if (ownedPasses) request.owned_passes = ownedPasses;
70530
+ const railProducts = csvFlag(flags, "rail_products") ?? csvFlag(flags, "rail-products");
70531
+ if (railProducts) request.rail_products = railProducts;
70532
+ const passOnly = booleanFlag(flags, "pass_only") ?? booleanFlag(flags, "pass-only");
70533
+ if (passOnly !== void 0) request.pass_only = passOnly;
70321
70534
  return request;
70322
70535
  }
70323
70536
  function buildCodeImageToHtmlRequest(positionals, flags) {
@@ -70373,6 +70586,22 @@ function stringFlag2(flags, name) {
70373
70586
  const raw = readFlag(flags, name);
70374
70587
  return typeof raw === "string" && raw.trim() ? raw.trim() : void 0;
70375
70588
  }
70589
+ function csvFlag(flags, name) {
70590
+ const raw = readFlag(flags, name);
70591
+ if (typeof raw !== "string" || !raw.trim()) return void 0;
70592
+ const values = raw.split(/[,\n]/).map((value) => value.trim()).filter(Boolean);
70593
+ return values.length > 0 ? values : void 0;
70594
+ }
70595
+ function booleanFlag(flags, name) {
70596
+ const raw = readFlag(flags, name);
70597
+ if (raw === void 0) return void 0;
70598
+ if (raw === true) return true;
70599
+ if (raw === false) return false;
70600
+ const normalized = raw.trim().toLowerCase();
70601
+ if (["1", "true", "yes", "on"].includes(normalized)) return true;
70602
+ if (["0", "false", "no", "off"].includes(normalized)) return false;
70603
+ return true;
70604
+ }
70376
70605
  function coerceAppSkillFlagValue(name, raw, schema) {
70377
70606
  if (schema.type === "boolean") return raw === true || raw === "true";
70378
70607
  if (schema.type === "integer") {
@@ -70415,6 +70644,10 @@ ${command.description}
70415
70644
  console.log(" --destination <place> Route destination for a typed connection search.");
70416
70645
  console.log(" --date <YYYY-MM-DD> Departure date for a typed connection search.");
70417
70646
  console.log(" --transport <mode> Optional transport mode, e.g. train or plane.");
70647
+ console.log(" --providers <csv> Optional providers, e.g. deutsche_bahn,transitous.");
70648
+ console.log(" --owned-passes <csv> Optional owned passes, e.g. deutschland_ticket.");
70649
+ console.log(" --pass-only Prefer pass-covered routes when supported.");
70650
+ console.log(" --rail-products <csv> Optional rail filters, e.g. high_speed,regional.");
70418
70651
  }
70419
70652
  if (command.app_id === "code" && command.skill_id === "image_to_html") {
70420
70653
  console.log(" --file <path> Local PNG, JPEG, or WEBP screenshot to convert.");
@@ -76160,6 +76393,7 @@ export {
76160
76393
  ASSISTANT_FEEDBACK_THANKS,
76161
76394
  ASSISTANT_FEEDBACK_REPORT_TITLE,
76162
76395
  buildAssistantFeedbackDecision,
76396
+ buildTravelConnectionsRequest,
76163
76397
  serializeToYaml,
76164
76398
  getExtForLang
76165
76399
  };
package/dist/cli.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env node
2
+ declare function buildTravelConnectionsRequest(positionals: string[], flags: Record<string, string | boolean>): Record<string, unknown>;
2
3
  /** Format a share duration for display */
3
4
  /**
4
5
  * Simple YAML serializer for chat export (no external dependency).
@@ -9,4 +10,4 @@ declare function serializeToYaml(data: Record<string, unknown>, indent?: number)
9
10
  /** Map language identifier to file extension for code embed downloads. */
10
11
  declare function getExtForLang(language: string): string;
11
12
 
12
- export { getExtForLang, serializeToYaml };
13
+ export { buildTravelConnectionsRequest, getExtForLang, serializeToYaml };
package/dist/cli.js CHANGED
@@ -1,10 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ buildTravelConnectionsRequest,
3
4
  getExtForLang,
4
5
  serializeToYaml
5
- } from "./chunk-U4XICRVH.js";
6
+ } from "./chunk-YZ75YWCS.js";
6
7
  import "./chunk-MLWBMJEN.js";
7
8
  export {
9
+ buildTravelConnectionsRequest,
8
10
  getExtForLang,
9
11
  serializeToYaml
10
12
  };
package/dist/index.d.ts CHANGED
@@ -2711,7 +2711,7 @@ declare const APP_SKILL_METADATA: readonly [{
2711
2711
  readonly app_namespace_py: "code";
2712
2712
  readonly skill_method_py: "image_to_html";
2713
2713
  readonly description_key: "app_skills.code.image_to_html.description";
2714
- 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; reference an uploaded image or pass image_base64.";
2714
+ 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.";
2715
2715
  readonly schema: {
2716
2716
  readonly type: "object";
2717
2717
  readonly properties: {
@@ -2723,12 +2723,16 @@ declare const APP_SKILL_METADATA: readonly [{
2723
2723
  readonly properties: {
2724
2724
  readonly image_base64: {
2725
2725
  readonly type: "string";
2726
- readonly description: "Base64-encoded PNG, JPEG, or WEBP image bytes.";
2726
+ readonly description: "Base64-encoded PNG, JPEG, or WEBP image bytes. Use this for REST/API calls.";
2727
+ };
2728
+ readonly source_image: {
2729
+ readonly type: "string";
2730
+ readonly description: "Uploaded image filename/embed_ref from the conversation. Use this in chat/CLI when the user references an attached screenshot or mockup.";
2727
2731
  };
2728
2732
  readonly mime_type: {
2729
2733
  readonly type: "string";
2730
2734
  readonly enum: readonly ["image/png", "image/jpeg", "image/webp"];
2731
- readonly description: "MIME type for image_base64.";
2735
+ readonly description: "MIME type for image_base64. Optional when using source_image because the server resolves it from the uploaded image.";
2732
2736
  };
2733
2737
  readonly filename: {
2734
2738
  readonly type: "string";
@@ -2742,7 +2746,6 @@ declare const APP_SKILL_METADATA: readonly [{
2742
2746
  readonly description: "Maximum E2B render-feedback correction passes.";
2743
2747
  };
2744
2748
  };
2745
- readonly required: readonly ["image_base64", "mime_type"];
2746
2749
  };
2747
2750
  };
2748
2751
  };
@@ -3991,6 +3994,94 @@ declare const APP_SKILL_METADATA: readonly [{
3991
3994
  };
3992
3995
  readonly required: readonly ["file_path", "pages", "query"];
3993
3996
  };
3997
+ }, {
3998
+ readonly app_id: "plans";
3999
+ readonly skill_id: "create";
4000
+ readonly app_namespace_ts: "plans";
4001
+ readonly skill_method_ts: "create";
4002
+ readonly app_namespace_py: "plans";
4003
+ readonly skill_method_py: "create";
4004
+ readonly description_key: "plans.skills.create.description";
4005
+ 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.";
4006
+ readonly schema: {
4007
+ readonly type: "object";
4008
+ readonly properties: {
4009
+ readonly title: {
4010
+ readonly type: "string";
4011
+ readonly description: "Short user-facing plan title.";
4012
+ };
4013
+ readonly summary: {
4014
+ readonly type: "string";
4015
+ readonly description: "Optional plan summary.";
4016
+ };
4017
+ readonly goal: {
4018
+ readonly type: "string";
4019
+ readonly description: "Optional plan goal.";
4020
+ };
4021
+ };
4022
+ readonly required: readonly ["title"];
4023
+ };
4024
+ }, {
4025
+ readonly app_id: "plans";
4026
+ readonly skill_id: "search";
4027
+ readonly app_namespace_ts: "plans";
4028
+ readonly skill_method_ts: "search";
4029
+ readonly app_namespace_py: "plans";
4030
+ readonly skill_method_py: "search";
4031
+ readonly description_key: "plans.skills.search.description";
4032
+ 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.";
4033
+ readonly schema: {
4034
+ readonly type: "object";
4035
+ readonly properties: {
4036
+ readonly query: {
4037
+ readonly type: "string";
4038
+ readonly description: "Private plan text to search for on a connected client.";
4039
+ };
4040
+ };
4041
+ readonly required: readonly ["query"];
4042
+ };
4043
+ }, {
4044
+ readonly app_id: "projects";
4045
+ readonly skill_id: "create";
4046
+ readonly app_namespace_ts: "projects";
4047
+ readonly skill_method_ts: "create";
4048
+ readonly app_namespace_py: "projects";
4049
+ readonly skill_method_py: "create";
4050
+ readonly description_key: "projects.skills.create.description";
4051
+ 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.";
4052
+ readonly schema: {
4053
+ readonly type: "object";
4054
+ readonly properties: {
4055
+ readonly name: {
4056
+ readonly type: "string";
4057
+ readonly description: "Short user-facing project name.";
4058
+ };
4059
+ readonly description: {
4060
+ readonly type: "string";
4061
+ readonly description: "Optional project description.";
4062
+ };
4063
+ };
4064
+ readonly required: readonly ["name"];
4065
+ };
4066
+ }, {
4067
+ readonly app_id: "projects";
4068
+ readonly skill_id: "search";
4069
+ readonly app_namespace_ts: "projects";
4070
+ readonly skill_method_ts: "search";
4071
+ readonly app_namespace_py: "projects";
4072
+ readonly skill_method_py: "search";
4073
+ readonly description_key: "projects.skills.search.description";
4074
+ 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.";
4075
+ readonly schema: {
4076
+ readonly type: "object";
4077
+ readonly properties: {
4078
+ readonly query: {
4079
+ readonly type: "string";
4080
+ readonly description: "Private project text to search for on a connected client.";
4081
+ };
4082
+ };
4083
+ readonly required: readonly ["query"];
4084
+ };
3994
4085
  }, {
3995
4086
  readonly app_id: "reminder";
3996
4087
  readonly skill_id: "set-reminder";
@@ -4509,7 +4600,7 @@ declare const APP_SKILL_METADATA: readonly [{
4509
4600
  readonly app_namespace_py: "travel";
4510
4601
  readonly skill_method_py: "search_connections";
4511
4602
  readonly description_key: "app_skills.travel.search_connections.description";
4512
- 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. If no provider is specified, all providers for the selected transport method are searched. Add cou";
4603
+ 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";
4513
4604
  readonly schema: {
4514
4605
  readonly type: "object";
4515
4606
  readonly properties: {
@@ -4552,10 +4643,10 @@ declare const APP_SKILL_METADATA: readonly [{
4552
4643
  };
4553
4644
  readonly providers: {
4554
4645
  readonly type: "array";
4555
- readonly description: "Optional provider IDs to search. Use \"google_flights\" for flights, \"deutsche_bahn\" for Deutsche Bahn / ICE / Bahn.de / Sparpreis train searches, and \"flix\" for FlixBus / FlixTrain. If omitted, all providers for the selected transport method are used, then filtered by countries if provided.\n";
4646
+ 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";
4556
4647
  readonly items: {
4557
4648
  readonly type: "string";
4558
- readonly enum: readonly ["google_flights", "deutsche_bahn", "flix"];
4649
+ readonly enum: readonly ["google_flights", "deutsche_bahn", "flix", "transitous"];
4559
4650
  };
4560
4651
  };
4561
4652
  readonly countries: {
@@ -4608,6 +4699,26 @@ declare const APP_SKILL_METADATA: readonly [{
4608
4699
  readonly type: "string";
4609
4700
  };
4610
4701
  };
4702
+ readonly owned_passes: {
4703
+ readonly type: "array";
4704
+ 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";
4705
+ readonly items: {
4706
+ readonly type: "string";
4707
+ };
4708
+ };
4709
+ readonly pass_only: {
4710
+ readonly type: "boolean";
4711
+ readonly description: "If true, prefer routes covered by owned fare passes when supported. Use with owned_passes [\"deutschland_ticket\"] for Deutschlandticket-only routing.\n";
4712
+ readonly default: false;
4713
+ };
4714
+ readonly rail_products: {
4715
+ readonly type: "array";
4716
+ 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";
4717
+ readonly items: {
4718
+ readonly type: "string";
4719
+ readonly enum: readonly ["high_speed", "intercity", "regional_express", "regional", "s_bahn", "subway", "tram", "bus", "ferry"];
4720
+ };
4721
+ };
4611
4722
  readonly min_departure_time: {
4612
4723
  readonly type: "string";
4613
4724
  readonly description: "Earliest acceptable local departure time in HH:MM format.";
@@ -5230,7 +5341,7 @@ declare class CodeAppSkills {
5230
5341
  */
5231
5342
  getProjectOverview<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5232
5343
  /**
5233
- * 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; reference an uploaded image or pass image_base64.
5344
+ * 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.
5234
5345
  * Description key: app_skills.code.image_to_html.description
5235
5346
  * Skill: code/image_to_html
5236
5347
  */
@@ -5444,6 +5555,38 @@ declare class PdfAppSkills {
5444
5555
  */
5445
5556
  view<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5446
5557
  }
5558
+ declare class PlansAppSkills {
5559
+ private readonly runSkill;
5560
+ constructor(runSkill: AppSkillRunner);
5561
+ /**
5562
+ * Request creation of a user-visible plan. Durable plan content is client-side encrypted, so a capable connected client must apply the change.
5563
+ * Description key: plans.skills.create.description
5564
+ * Skill: plans/create
5565
+ */
5566
+ create<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5567
+ /**
5568
+ * Search the user's encrypted plans through a connected capable client. Do not use server-visible metadata as a private plan-content fallback.
5569
+ * Description key: plans.skills.search.description
5570
+ * Skill: plans/search
5571
+ */
5572
+ search<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5573
+ }
5574
+ declare class ProjectsAppSkills {
5575
+ private readonly runSkill;
5576
+ constructor(runSkill: AppSkillRunner);
5577
+ /**
5578
+ * Request creation of a user-visible project. Durable project content is client-side encrypted, so a capable connected client must apply the change.
5579
+ * Description key: projects.skills.create.description
5580
+ * Skill: projects/create
5581
+ */
5582
+ create<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5583
+ /**
5584
+ * Search the user's encrypted projects through a connected capable client. Do not use server-visible metadata as a private project-content fallback.
5585
+ * Description key: projects.skills.search.description
5586
+ * Skill: projects/search
5587
+ */
5588
+ search<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5589
+ }
5447
5590
  declare class ReminderAppSkills {
5448
5591
  private readonly runSkill;
5449
5592
  constructor(runSkill: AppSkillRunner);
@@ -5518,7 +5661,7 @@ declare class TravelAppSkills {
5518
5661
  */
5519
5662
  getFlight<T = unknown>(input: SkillInput, options?: AppSkillRunOptions): Promise<T>;
5520
5663
  /**
5521
- * 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. If no provider is specified, all providers for the selected transport method are searched. Add cou
5664
+ * 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
5522
5665
  * Description key: app_skills.travel.search_connections.description
5523
5666
  * Skill: travel/search_connections
5524
5667
  */
@@ -5628,6 +5771,8 @@ declare class GeneratedAppSkills {
5628
5771
  readonly nutrition: NutritionAppSkills;
5629
5772
  readonly openmates: OpenmatesAppSkills;
5630
5773
  readonly pdf: PdfAppSkills;
5774
+ readonly plans: PlansAppSkills;
5775
+ readonly projects: ProjectsAppSkills;
5631
5776
  readonly reminder: ReminderAppSkills;
5632
5777
  readonly shopping: ShoppingAppSkills;
5633
5778
  readonly socialMedia: SocialMediaAppSkills;
package/dist/index.js CHANGED
@@ -36,7 +36,7 @@ import {
36
36
  renderPlanList,
37
37
  renderSupportInfo,
38
38
  serializeToYaml
39
- } from "./chunk-U4XICRVH.js";
39
+ } from "./chunk-YZ75YWCS.js";
40
40
  import "./chunk-MLWBMJEN.js";
41
41
  export {
42
42
  APP_SKILL_METADATA,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.15.0-alpha.75",
3
+ "version": "0.15.0-alpha.76",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",