Skip to content
Open
30 changes: 3 additions & 27 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,12 @@
# Changelog

## [7.0.10a1](https://github.com/OpenVoiceOS/ovos-workshop/tree/7.0.10a1) (2025-11-09)
## [8.0.1a1](https://github.com/OpenVoiceOS/ovos-workshop/tree/8.0.1a1) (2025-12-16)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-workshop/compare/7.0.9a1...7.0.10a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovos-workshop/compare/8.0.0...8.0.1a1)

**Merged pull requests:**

- fix: deprecations, imports, unittests [\#373](https://github.com/OpenVoiceOS/ovos-workshop/pull/373) ([JarbasAl](https://github.com/JarbasAl))

## [7.0.9a1](https://github.com/OpenVoiceOS/ovos-workshop/tree/7.0.9a1) (2025-07-08)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-workshop/compare/7.0.8a1...7.0.9a1)

**Merged pull requests:**

- fix: ocp skills [\#365](https://github.com/OpenVoiceOS/ovos-workshop/pull/365) ([JarbasAl](https://github.com/JarbasAl))

## [7.0.8a1](https://github.com/OpenVoiceOS/ovos-workshop/tree/7.0.8a1) (2025-07-08)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-workshop/compare/7.0.7a1...7.0.8a1)

**Merged pull requests:**

- fix: rm \_\_del\_\_ method [\#368](https://github.com/OpenVoiceOS/ovos-workshop/pull/368) ([JarbasAl](https://github.com/JarbasAl))

## [7.0.7a1](https://github.com/OpenVoiceOS/ovos-workshop/tree/7.0.7a1) (2025-06-21)

[Full Changelog](https://github.com/OpenVoiceOS/ovos-workshop/compare/7.0.6...7.0.7a1)

**Merged pull requests:**

- refactor/remove the compatibility layer with MycroftSkill in the skill launcher [\#362](https://github.com/OpenVoiceOS/ovos-workshop/pull/362) ([JarbasAl](https://github.com/JarbasAl))
- fix: standalone skills wait\_for\_core [\#375](https://github.com/OpenVoiceOS/ovos-workshop/pull/375) ([JarbasAl](https://github.com/JarbasAl))



Expand Down
92 changes: 46 additions & 46 deletions downstream_report.txt
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
ovos-workshop==7.0.9a1
├── ovos-skill-screenshot==0.0.7 [requires: ovos-workshop]
├── ovos-skill-fallback-unknown==0.1.9 [requires: ovos-workshop>=6.0.0,<8.0.0]
├── ovos-skill-parrot==0.1.26a1 [requires: ovos-workshop>=7.0.0,<8.0.0]
├── ovos-skill-application-launcher==0.5.14 [requires: ovos-workshop>=6.0.0,<8.0.0]
├── ovos-skill-icanhazdadjokes==0.3.7 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos_padatious==1.4.3 [requires: ovos-workshop>=0.1.7,<8.0.0]
├── ovos_common_query_pipeline_plugin==1.1.9 [requires: ovos-workshop>=0.1.7,<8.0.0]
├── ovos-skill-laugh==0.2.3 [requires: ovos-workshop]
├── ovos-skill-fuster-quotes==0.0.4 [requires: ovos-workshop]
├── ovos-skill-local-media==0.2.13a1 [requires: ovos-workshop>=2.4.0,<8.0.0]
├── ovos-skill-pyradios==0.1.5 [requires: ovos-workshop>=0.0.16,<8.0.0]
├── ovos_core==2.1.1 [requires: ovos-workshop>=7.0.6,<8.0.0]
ovos_workshop==7.0.10a1
├── ovos-skill-fallback-unknown==0.1.9 [requires: ovos_workshop>=6.0.0,<8.0.0]
├── ovos-skill-parrot==0.1.26a1 [requires: ovos_workshop>=7.0.0,<8.0.0]
├── ovos-skill-speedtest==0.3.7a2 [requires: ovos_workshop>=0.0.12,<8.0.0]
├── ovos-skill-icanhazdadjokes==0.3.7 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos_padatious==1.4.3 [requires: ovos_workshop>=0.1.7,<8.0.0]
├── ovos-skill-screenshot==0.0.8a3 [requires: ovos_workshop]
├── ovos_common_query_pipeline_plugin==1.1.9 [requires: ovos_workshop>=0.1.7,<8.0.0]
├── ovos_core==2.1.2a1 [requires: ovos_workshop>=7.0.6,<9.0.0]
│ └── ovoscope==0.7.2 [requires: ovos_core>=2.0.4a2]
├── ovos_skill_ddg==0.3.6 [requires: ovos-workshop>=3.4.0,<8.0.0]
├── ovos-skill-date-time==1.1.6a1 [requires: ovos-workshop>=0.0.16,<8.0.0]
├── ovos-skill-dictation==0.2.20a1 [requires: ovos-workshop>=7.0.0,<8.0.0]
├── ovos-skill-camera==1.0.5a6 [requires: ovos-workshop>=0.0.12]
├── ovos-skill-ip==0.2.8 [requires: ovos-workshop]
├── ovos_m2v_pipeline==0.0.7 [requires: ovos-workshop>=0.1.7,<8.0.0]
├── ovos-skill-weather==1.0.8a3 [requires: ovos-workshop>=2.2.0,<8.0.0]
├── ovos_adapt_parser==1.0.9 [requires: ovos-workshop>=0.1.7,<8.0.0]
├── ovos-skill-cmd==0.2.11 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos-skill-naptime==0.3.16a1 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos_plugin_common_play==1.2.2a1 [requires: ovos-workshop>=2.4.2,<8.0.0]
├── ovos-skill-volume==0.1.17a3 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos-skill-personal==0.1.20a1 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos-skill-number-facts==0.1.12 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos-skill-randomness==0.1.2 [requires: ovos-workshop]
├── ovos-skill-alerts==0.1.28a1 [requires: ovos-workshop>=7.0.0,<8.0.0]
├── ovos-skill-speedtest==0.3.7a1 [requires: ovos-workshop>=0.0.12,<8.0.0]
├── ovos-skill-iss-location==0.2.16 [requires: ovos-workshop>=0.0.12,<8.0.0]
├── ovos-skill-somafm==0.1.6a1 [requires: ovos-workshop>=0.0.16]
├── ovos-skill-homescreen==3.0.3 [requires: ovos-workshop>=2.4.0,<8.0.0]
├── ovos-skill-wikihow==0.3.3 [requires: ovos-workshop>=3.4.0a1,<8.0.0]
├── ovos-skill-word-of-the-day==0.2.0 [requires: ovos-workshop]
├── ovos-skill-wolfie==0.5.8 [requires: ovos-workshop>=3.4.0a1,<8.0.0]
├── ovos-skill-diagnostics==0.0.8 [requires: ovos-workshop>=0.0.12]
├── ovos_skill_wordnet==0.2.6 [requires: ovos-workshop>=3.3.0,<8.0.0]
├── ovos-skill-color-picker==0.0.7 [requires: ovos-workshop]
├── ovos-skill-news==0.4.6a1 [requires: ovos-workshop>=0.0.16,<8.0.0]
├── ovos_ocp_pipeline_plugin==1.1.18 [requires: ovos-workshop>=0.1.7,<8.0.0]
├── ovos-skill-confucius-quotes==0.1.13 [requires: ovos-workshop>=0.0.15,<8.0.0]
├── ovos-skill-youtube-music==0.1.7 [requires: ovos-workshop>=0.0.16,<8.0.0]
├── ovos-skill-wikipedia==0.8.13 [requires: ovos-workshop>=3.4.0,<8.0.0]
├── ovos-skill-moviemaster==0.0.12 [requires: ovos-workshop>=0.0.11,<8.0.0]
└── ovos-skill-days-in-history==0.3.11 [requires: ovos-workshop>=3.1.0,<8.0.0]
├── ovos-skill-laugh==0.2.3 [requires: ovos_workshop]
├── ovos-skill-fuster-quotes==0.0.4 [requires: ovos_workshop]
├── ovos-skill-local-media==0.2.13a1 [requires: ovos_workshop>=2.4.0,<8.0.0]
├── ovos-skill-pyradios==0.1.5 [requires: ovos_workshop>=0.0.16,<8.0.0]
├── ovos_skill_ddg==0.3.6 [requires: ovos_workshop>=3.4.0,<8.0.0]
├── ovos-skill-date-time==1.1.6a1 [requires: ovos_workshop>=0.0.16,<8.0.0]
├── ovos_skill_wordnet==0.2.7a1 [requires: ovos_workshop>=3.3.0,<8.0.0]
├── ovos-skill-naptime==0.3.16a2 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos-skill-ip==0.2.8 [requires: ovos_workshop]
├── ovos_m2v_pipeline==0.0.7 [requires: ovos_workshop>=0.1.7,<8.0.0]
├── ovos-skill-weather==1.0.8a3 [requires: ovos_workshop>=2.2.0,<8.0.0]
├── ovos_adapt_parser==1.0.9 [requires: ovos_workshop>=0.1.7,<8.0.0]
├── ovos-skill-personal==0.1.20a3 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos-skill-cmd==0.2.11 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos-skill-diagnostics==0.0.9a1 [requires: ovos_workshop>=0.0.12]
├── ovos_plugin_common_play==1.2.2a1 [requires: ovos_workshop>=2.4.2,<8.0.0]
├── ovos-skill-volume==0.1.17a3 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos-skill-number-facts==0.1.12 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos-skill-randomness==0.1.2 [requires: ovos_workshop]
├── ovos-skill-alerts==0.1.28a1 [requires: ovos_workshop>=7.0.0,<8.0.0]
├── ovos-skill-iss-location==0.2.16 [requires: ovos_workshop>=0.0.12,<8.0.0]
├── ovos-skill-somafm==0.1.6a1 [requires: ovos_workshop>=0.0.16]
├── ovos-skill-application-launcher==0.5.15a1 [requires: ovos_workshop>=6.0.0,<8.0.0]
├── ovos-skill-dictation==0.2.20a3 [requires: ovos_workshop>=7.0.0,<8.0.0]
├── ovos-skill-homescreen==3.0.3 [requires: ovos_workshop>=2.4.0,<8.0.0]
├── ovos-skill-wikihow==0.3.3 [requires: ovos_workshop>=3.4.0a1,<8.0.0]
├── ovos-skill-word-of-the-day==0.2.0 [requires: ovos_workshop]
├── ovos-skill-wolfie==0.5.8 [requires: ovos_workshop>=3.4.0a1,<8.0.0]
├── ovos-skill-color-picker==0.0.7 [requires: ovos_workshop]
├── ovos-skill-news==0.4.6a1 [requires: ovos_workshop>=0.0.16,<8.0.0]
├── ovos_ocp_pipeline_plugin==1.1.18 [requires: ovos_workshop>=0.1.7,<8.0.0]
├── ovos-skill-confucius-quotes==0.1.13 [requires: ovos_workshop>=0.0.15,<8.0.0]
├── ovos-skill-camera==1.0.5a7 [requires: ovos_workshop>=0.0.12]
├── ovos-skill-youtube-music==0.1.7 [requires: ovos_workshop>=0.0.16,<8.0.0]
├── ovos-skill-wikipedia==0.8.13 [requires: ovos_workshop>=3.4.0,<8.0.0]
├── ovos-skill-moviemaster==0.0.12 [requires: ovos_workshop>=0.0.11,<8.0.0]
└── ovos-skill-days-in-history==0.3.11 [requires: ovos_workshop>=3.1.0,<8.0.0]
33 changes: 23 additions & 10 deletions ovos_workshop/skill_launcher.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os
import sys
import threading
from os.path import isdir
from inspect import isclass
from types import ModuleType
Expand Down Expand Up @@ -534,21 +535,27 @@ def _connect_to_core(self):
self.bus.run_in_thread()
self.bus.connected_event.wait()

LOG.debug("checking skills service status")
response = self.bus.wait_for_response(
Message(f'mycroft.skills.is_ready',
context={"source": "workshop", "destination": "skills"}))
if response and response.data['status']:
LOG.info("connected to core")
self.load_skill()
else:
LOG.warning("Skills service not ready yet. Load on ready event.")

self.bus.on("mycroft.ready", self.load_skill)
self.bus.on("skillmanager.activate", self.do_load)
self.bus.on("skillmanager.deactivate", self.do_unload)
self.bus.on("skillmanager.keep", self.do_unload)

def wait_for_core(t=1):
LOG.debug("checking skills service status")
response = self.bus.wait_for_response(
Message('mycroft.skills.is_ready',
context={"source": self.skill_id, "destination": "skills"}))
if response is not None and response.data.get('status'):
LOG.info("connected to core")
self.load_skill()
return

LOG.warning(f"ovos-core not yet ready. Waiting {t} seconds until next skill loading attempt")
threading.Event().wait(t)
wait_for_core(min(60, t*2))

wait_for_core()

def load_skill(self, message: Optional[Message] = None):
"""
Load the skill associated with this SkillContainer instance.
Expand Down Expand Up @@ -635,10 +642,16 @@ def _launch_script():
skill_id = sys.argv[1]
skill_directory = sys.argv[2]
skill = SkillContainer(skill_id, skill_directory)
elif os.environ.get("SKILL_ID"):
# allow launching without args if env var is set, might be useful for containers
skill_id = os.environ["SKILL_ID"]
skill = SkillContainer(skill_id)
else:
print("USAGE: ovos-skill-launcher {skill_id} [path/to/my/skill_id]")
raise SystemExit(2)

skill.run()


if __name__ == "__main__":
_launch_script()
4 changes: 2 additions & 2 deletions ovos_workshop/version.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# START_VERSION_BLOCK
VERSION_MAJOR = 8
VERSION_MINOR = 0
VERSION_BUILD = 0
VERSION_ALPHA = 0
VERSION_BUILD = 1
VERSION_ALPHA = 1
# END_VERSION_BLOCK
Loading