"class @org.thingpedia.builtin.thingengine.builtin extends @org.thingpedia.volume-control\n#_[thingpedia_name=\"Miscellaneous Interfaces\"]\n#_[thingpedia_description=\"Time, random numbers, and other commands not specific to any skill.\"]\n#_[name=\"Miscellaneous Interfaces\"]\n#_[description=\"Time, random numbers, and other commands not specific to any skill.\"]\n#_[canonical=\"miscellaneous interfaces\"]\n#_[help=\"I can give you the current date and time, pick random numbers, and help you set various preferences.\"]\n#[repository=\"https://github.com/stanford-oval/genie-toolkit\"]\n#[subcategory=\"service\"]\n#[license=\"Apache-2.0\"]\n#[license_gplcompatible=true] {\n  import loader from @org.thingpedia.builtin();\n\n  import config from @org.thingpedia.config.builtin();\n\n  monitorable query get_gps(out location : Location\n                            #_[canonical={\n                              default=\"preposition\",\n                              base=[\"coordinates\"],\n                              preposition=[\"in #\", \"at #\", \"around #\"]\n                            }],\n                            out altitude : Measure(m)\n                            #_[canonical={\n                              default=\"base\",\n                              base=[\"altitude\"],\n                              preposition=[\"at # above sea level\"]\n                            }]\n                            #[min_number=0m]\n                            #[max_number=15000m],\n                            out bearing : Number\n                            #_[canonical={\n                              base=[\"bearing\"],\n                              passive_verb=[\"facing #\"]\n                            }],\n                            out speed : Measure(mps)\n                            #_[canonical={\n                              base=[\"speed\"],\n                              passive_verb=[\"going at #\", \"moving at #\"],\n                              preposition=[\"at #\"]\n                            }])\n  #_[canonical=[\"my current location\", \"my current position\", \"my current geocoordinates\"]]\n  #_[result=[\"your current location is ${location}\", \"you are currently in ${location}\"]]\n  #_[on_error={\n    unsupported_platform=[\"i cannot access your location in this version of Genie\"]\n  }]\n  #[minimal_projection=[\"location\"]]\n  #[poll_interval=0ms]\n  #[doc=\"get last known GPS location\"]\n  #[confirm=false];\n\n  query get_time(out time : Time\n                 #_[canonical=[\"time\"]]\n                 #[filterable=false])\n  #_[canonical=[\"current time\", \"time\", \"time of day\"]]\n  #_[result=[\"right now, it's ${time}\", \"it's ${time}\", \"the current time is ${time}\"]]\n  #[doc=\"get the current time\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  query get_date(out date : Date\n                 #_[canonical=[\"date\"]]\n                 #[filterable=false])\n  #_[canonical=[\"today 's date\", \"date\", \"current date\"]]\n  #_[confirmation=\"today's date\"]\n  #_[result=[\"today is ${date}-absolute.\"]]\n  #[doc=\"get the current date\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  query get_random_between(in opt low : Number\n                           #_[canonical={\n                             base=[\"lower bound\", \"minimum number\"],\n                             passive_verb=[\"higher than #\", \"more than #\"]\n                           }],\n                           in opt high : Number\n                           #_[canonical={\n                             base=[\"upper bound\", \"maximum number\"],\n                             passive_verb=[\"higher than #\", \"more than #\"]\n                           }],\n                           out random : Number\n                           #_[canonical={\n                             base=[\"number\", \"result\"]\n                           }]\n                           #[filterable=false])\n  #_[canonical=[\"random number\", \"random integer\"]]\n  #_[result=[\"${random}\", \"your number is ${random}\", \"i chose ${random}\"]]\n  #_[confirmation=\"a random integer between $low and $high\"]\n  #[doc=\"get a uniform random integer between `low` and `high`\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  query get_name(out name : String\n                 #_[canonical=[\"name\"]]\n                 #[string_values=\"tt:person_first_name\"]\n                 #[filterable=false])\n  #_[canonical=[\"my name\", \"user 's name\"]]\n  #_[result=[\"your name is ${name}\", \"you are ${name}\"]]\n  #_[on_error={\n    unset=[\"i do not know your name yet . would you like to tell me ?\", \"you have not told me your name yet\"]\n  }]\n  #_[confirmation=\"your name\"]\n  #[doc=\"get the user's preferred name (a setting)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  query device_info(in req id : Entity(tt:device)\n                    #_[canonical={\n                      base=[\"name\"],\n                      passive_verb=[\"named #\", \"called #\"]\n                    }],\n                    out help : String\n                    #_[canonical={\n                      base=[\"help\", \"documentation\"]\n                    }]\n                    #[string_values=\"tt:long_free_text\"]\n                    #[filterable=false],\n                    out description : String\n                    #_[canonical={\n                      base=[\"description\"]\n                    }]\n                    #[string_values=\"tt:long_free_text\"]\n                    #[filterable=false],\n                    out category : Enum(service, media, social_network, communication, home, health, data_management)\n                    #_[canonical={\n                      base=[\"category\"],\n                      adjective=[\"#\"],\n                      preposition=[\"in the # category\"]\n                    }],\n                    out thingpedia_url : Entity(tt:url)\n                    #_[canonical={\n                      base=[\"thingpedia page\", \"thingpedia link\"]\n                    }]\n                    #[filterable=false],\n                    out website : Entity(tt:url)\n                    #_[canonical={\n                      base=[\"website\", \"link\", \"url\"]\n                    }]\n                    #[filterable=false],\n                    out issue_tracker : Entity(tt:url)\n                    #_[canonical={\n                      base=[\"issue tracking website\", \"bug report url\"]\n                    }]\n                    #[filterable=false])\n  #_[canonical=[\"information about a device\", \"information about a skill\", \"information about a thingpedia device\", \"information about a supported skill\", \"help about a skill\", \"skill help\", \"skill documentation\", \"help with a skill\"]]\n  #_[result=[\"with ${id} , ${help} . visit the thingpedia page for additional information\", \"the description of ${id} is ${description} . visit the thingpedia page for additional information\"]]\n  #_[formatted=[{\n    type=\"rdl\",\n    displayTitle=\"${id}\",\n    webCallback=\"${thingpedia_url}\"\n  }]]\n  #[doc=\"query info about supported Thingpedia devices\"]\n  #[minimal_projection=[]]\n  #[confirm=false];\n\n  list query configured_device_info(out id : Entity(tt:device_id)\n                                    #_[canonical={\n                                      base=[\"name\"],\n                                      passive_verb=[\"named #\", \"called #\"]\n                                    }],\n                                    out description : String\n                                    #_[canonical={\n                                      base=[\"description\"]\n                                    }]\n                                    #[string_values=\"tt:long_free_text\"]\n                                    #[filterable=false],\n                                    out kind : Entity(tt:device)\n                                    #_[canonical={\n                                      base=[\"kind\"],\n                                      adjective=[\"#\"],\n                                      preposition=[\"in the # kind\"]\n                                    }],\n                                    out version : Number\n                                    #_[canonical={\n                                      base=[\"version\"],\n                                      passive_verb=[\"version #\"]\n                                    }],\n                                    out category : Enum(physical, online, data, system)\n                                    #_[canonical={\n                                      base=[\"category\"],\n                                      adjective=[\"#\"],\n                                      preposition=[\"in the # category\"]\n                                    }],\n                                    out is_transient : Boolean\n                                    #_[canonical={\n                                      base=[\"is transient\"]\n                                    }],\n                                    out auth_type : String\n                                    #_[canonical={\n                                      base=[\"authentication type\"]\n                                    }]\n                                    #[filterable=false])\n  #_[canonical=[\"information about configured devices\", \"information about configured entities\", \"configured devices\", \"configured entities\", \"device list\", \"entity list\", \"iot devices\", \"iot entities\"]]\n  #_[result={\n    list =\"You have ${id}\"\n  }]\n  #[doc=\"query info about configured devices\"]\n  #[minimal_projection=[]]\n  #[confirm=false];\n\n  action open_url(in req url : Entity(tt:url)\n                  #_[prompt=[\"what url do you want to open\", \"what do you want to open\"]]\n                  #_[canonical={\n                    base=[\"url\", \"link\", \"page\"],\n                    preposition=[\"to #\"]\n                  }])\n  #_[canonical=[\"open a url\", \"open a link\"]]\n  #_[on_error={\n    unsupported_platform=[\"opening files is not possible in this version of Genie\"]\n  }]\n  #[doc=\"open a file/link\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action say(in req message : String\n             #_[prompt=\"what would you like me to say\"]\n             #_[canonical=\"message\"]\n             #[string_values=\"tt:long_free_text\"],\n             out message_output : String\n             #_[canonical=\"message\"])\n  #_[result=\"${message_output}\"]\n  #_[formatted=[{\n    type=\"sound\",\n    name=\"alarm-clock-elapsed\",\n    exclusive=false,\n    before=true\n  }]]\n  #_[canonical=\"say\"]\n  #[doc=\"makes Genie say something\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action alert(out time : Time\n               #_[canonical=[\"time\"]])\n  #_[result=\"It is ${time}\"]\n  #_[formatted=[{\n    type=\"sound\",\n    name=\"alarm-clock-elapsed\",\n    exclusive=false,\n    before=true\n  }]]\n  #_[canonical=\"alert\"]\n  #[doc=\"makes Genie show/play a generic alert\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action timer_expire(out duration : Measure(ms)\n                      #_[canonical=\"duration\"])\n  #_[result=\"It has been ${duration}\"]\n  #_[formatted=[{\n    type=\"sound\",\n    name=\"alarm-clock-elapsed\",\n    exclusive=false,\n    before=true\n  }]]\n  #_[canonical=\"timer expire\"]\n  #[doc=\"makes Genie play a generic alert and show/say the elapsed time\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action debug_log(in req message : String\n                   #_[prompt=[\"what should i write in the logs\", \"what do you want me to write\"]]\n                   #_[canonical=\"message\"]\n                   #[string_values=\"tt:long_free_text\"])\n  #_[canonical=[\"log a message\", \"record a message\", \"write a message in the logs\"]]\n  #_[confirmation=\"write $message in the developer logs\"]\n  #[doc=\"log a message in the developer logs\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action faq_reply(in req question : Enum(about_almond_identity, about_almond_age, about_almond_how_are_you, about_almond_special, about_almond_motivation, about_almond_location, about_almond_comparison, about_almond_comparison_general, about_almond_training, about_almond_partner, about_almond_junk, about_almond_preference, about_almond_thingpedia, about_almond_interest, about_almond_registration, check_capability_home_assistant, check_capability_phone, check_capability_music_platform, general_help, iot_help, command_help, positive_emotion_thanks, positive_emotion_cool, negative_emotion_empathy, abusive, revoke_consent, how_to_train, how_to_configure_skill, how_to_disable_skill, how_to_set_language, how_to_access_settings, how_to_use_wakeword, how_to_report_bug, how_to_show_general_examples, how_to_show_home_assistant_examples, troubleshooting_home_assistant)\n                   #_[prompt=\"what would you like to know\"]\n                   #_[canonical=\"message\"],\n                   out reply : String\n                   #_[canonical=[\"reply\", \"answer\"]])\n  #_[result=\"${reply}\"]\n  #_[canonical=\"ask question about Genie\"]\n  #_[confirmation=\"reply to $question\"]\n  #[doc=\"asks a question about Genie\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action configure(in req device : Entity(tt:device)\n                   #_[prompt=\"what device do you want to configure\"])\n  #_[canonical=[\"configure a new skill\", \"enable a new skill\"]]\n  #_[on_error={\n    unsupported_skill=[\"i do not know ${device} yet\", \"${device} is not supported yet\"],\n    unsupported_platform=[\"you need to go to the configure new skill page to enable new skills\"]\n  }]\n  #_[confirmation=\"configure a new $device\"]\n  #[doc=\"configure a specific device by type\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_language(in req language : Entity(tt:iso_lang_code)\n                      #_[canonical={\n                        base=[\"language\"],\n                        preposition=[\"to #\"]\n                      }])\n  #_[canonical=[\"set the language\", \"change the language\", \"set the assistant language\", \"set the language of the assistant\"]]\n  #_[on_error={\n    unsupported_language=[\"${language} is not supported yet\", \"i do not support ${language} yet\"],\n    unsupported_platform_cloud=[\"you need to go to the user profile page to change the language\"]\n  }]\n  #_[confirmation=\"set the language to $language\"]\n  #[doc=\"change the assistant language (not supported on all platforms)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_timezone(in req timezone : Entity(tt:timezone)\n                      #_[canonical={\n                        base=[\"time zone\"],\n                        preposition=[\"to #\"]\n                      }])\n  #_[canonical=[\"set the time zone\", \"change the time zone\", \"set the time zone of the assistant\"]]\n  #_[on_error={\n    unsupported_platform=[\"i cannot change the time zone on this system . use the system settings to change my timezone\"],\n    unsupported_platform_cloud=[\"you need to go to the user profile page to change the time zone\"]\n  }]\n  #_[confirmation=\"set the time zone to $timezone\"]\n  #[doc=\"change the assistant time zone (not supported on all platforms)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_wake_word(in req word : String\n                       #_[canonical={\n                         base=[\"word\"],\n                         preposition=[\"to #\"]\n                       }]\n                       #[string_values=\"tt:word\"])\n  #_[canonical=[\"set the name of the assistant\", \"set the wake word\", \"set the hot word\", \"change the wake word\", \"set the assistant name\", \"change the assistant name\"]]\n  #_[on_error={\n    unsupported=[\"changing the wake word is not supported yet\", \"i do not yet support changing my name\"]\n  }]\n  #_[confirmation=\"set the wake word to $language\"]\n  #[doc=\"change the assistant name (wake word) (not supported yet)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_voice_output(in req status : Enum(on, off)\n                          #_[canonical={\n                            base=[\"status\", \"preference\"],\n                            preposition=[\"to #\"]\n                          }])\n  #_[canonical=[\"change the voice output setting\"]]\n  #_[on_error={\n    unsupported=[\"voice output is not supported on this platform\"]\n  }]\n  #_[confirmation=\"turn ${status} voice output\"]\n  #[doc=\"turn on or off voice output\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_voice_input(in req status : Enum(on, off)\n                         #_[canonical={\n                           base=[\"status\", \"preference\"],\n                           preposition=[\"to #\"]\n                         }])\n  #_[canonical=[\"change the voice input setting\"]]\n  #_[on_error={\n    unsupported=[\"voice input is not supported on this platform\"]\n  }]\n  #_[confirmation=\"turn ${status} voice input\"]\n  #[doc=\"turn on or off voice input\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_name(in req name : String\n                  #_[canonical={\n                    base=[\"name\"],\n                    preposition=[\"to #\"]\n                  }]\n                  #[string_values=\"tt:person_first_name\"])\n  #_[canonical=[\"change my name\", \"set my name\"]]\n  #_[confirmation=\"change your name to ${name}\"]\n  #[doc=\"change the user's preferred name (a setting)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_location(in opt type : Enum(current, home, work)\n                      #_[prompt=\"what type of location would you like to change\"]\n                      #[default=enum current],\n                      in req location : Location\n                      #_[canonical={\n                        base=[\"location\", \"place\", \"address\"],\n                        preposition=[\"to #\", \"as #\"]\n                      }])\n  #_[canonical=[\"set my location\", \"set my address\", \"remember my location\", \"configure my location\"]]\n  #_[confirmation=\"change your ${type} location to ${name}\"]\n  #[doc=\"change the user's preferred locations (a setting)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action set_temperature_unit(in req unit : Enum(celsius, fahrenheit, kelvin)\n                              #_[prompt=\"what unit should i use\"]\n                              #_[canonical={\n                                base=[\"unit\"],\n                                preposition=[\"to #\", \"as #\"]\n                              }])\n  #_[canonical=[\"set my preferred temperature unit\", \"change the temperature unit\", \"set the default temperature unit\"]]\n  #[doc=\"change the user's preferred temperature unit (a setting)\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action stop()\n  #_[canonical=[\"stop audio\", \"stop playing\", \"stop playback\"]]\n  #[doc=\"pause the currently playing skill\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action pause()\n  #_[canonical=[\"pause\", \"pause audio\", \"pause playback\", \"pause playing\"]]\n  #[doc=\"pause the currently playing skill\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n\n  action resume()\n  #_[canonical=[\"resume\", \"resume audio\", \"resume playback\", \"resume playing\", \"start playing again\", \"continue playback\", \"continue playing\"]]\n  #_[on_error={\n    unsupported=[\"the current skill does not support resuming audio. please report this issue to the skill developer.\"],\n    no_device_playing=[\"nothing is currently playing yet. to play music, you can say play music.\"]\n  }]\n  #[doc=\"resume the currently playing skill\"]\n  #[confirm=false]\n  #[minimal_projection=[]];\n}"
