Skip to content

feat: manifest side of ovos.skills.list (OVOS-INTENT-4 §8.6/§10.3) - #970

Draft
JarbasAl wants to merge 1 commit into
devfrom
fix/ovos-skills-list-manifest
Draft

feat: manifest side of ovos.skills.list (OVOS-INTENT-4 §8.6/§10.3)#970
JarbasAl wants to merge 1 commit into
devfrom
fix/ovos-skills-list-manifest

Conversation

@JarbasAl

@JarbasAl JarbasAl commented Sep 9, 2026

Copy link
Copy Markdown
Member

🤖 Auto-generated by Claude Sonnet 5 via Claude Code — NOT human-reviewed. Verify before acting.

IntentManifest now indexes ovos.skill.loaded announcements and answers ovos.skills.list, implementing the manifest side of OVOS-INTENT-4 §8.6/§10.3 (architecture#251, 887f248, approved). The reader needs to decide whether the ovos.skill.loaded producer side (ovos-workshop#623, already open) should merge first — this PR's consumer is inert without it, since no producer on dev currently emits that event.

Governing clause, §10.3: "session_id is an optional filter. When present the response carries the skills loaded in the effective scope of that session: those announced under default plus those announced under that session_id... When absent the response carries every announced skill under every session." Each entry carries skill_id, session_id, capabilities, and intents (the manifest row count for that scope); an empty index answers {"ok": true, "skills": []}.

The response is built with message.response(...) so the topic derives as ovos.skills.list.response per OVOS-MSG-1 §5.3. ovos.skill.deregister drops the announcement alongside the intent registrations it already removes. Unknown capability names are dropped at announcement time rather than surfaced or rejected, per the §8.6 vocabulary (fallback, common_query, converse). Entries sort with default first, then skill_id, matching the existing ovos.intent.describe ordering convention.

ovos.skills.fallback.list and its FallbackService registry were checked against current dev and are already absent — there was nothing to remove there. skillmanager.list / mycroft.skills.list are untouched.

Verified against source: read the full ovos_core/intent_services/manifest.py on this branch's dev base before editing, confirmed _session_id_of/raw_session_id behavior by inspection, and confirmed Message.response derives <topic>.response by reading ovos_bus_client.message.Message.response's source directly in the installed environment. Test-extra install (uv pip install -e ".[test]") confirmed by checking matcher plugins load and end2end fixtures collect.

Seven new tests in test/unittests/test_intent_manifest.py::TestSkillsListManifest assert values (capability lists, intent counts, exact session-id sets, ordering) rather than structure. Reverting only the manifest.py hunk and running that class fails all 7 with AttributeError: 'IntentManifest' object has no attribute '_on_skill_loaded'; restoring it passes all 7. Full test/unittests suite: 623 passed. test/end2end/test_intent_pipeline.py: 4 passed, 8 subtests passed (single run, no flake observed).

IntentManifest subscribes to ovos.skill.loaded (OVOS-INTENT-4 §8.6)
and indexes (session_id, skill_id) -> capabilities, reading the
session from context.session.session_id exactly as _session_id_of
does for intent registrations. ovos.skill.deregister drops the
announcement alongside the registrations it already removes.

A new ovos.skills.list handler answers over message.response (so the
topic derives as ovos.skills.list.response per OVOS-MSG-1 §5.3) with
{"ok": true, "skills": [...]}, each entry carrying skill_id,
session_id, capabilities and intents (the manifest row count for that
scope). The session_id filter follows §10.3/§11.2: "default" plus the
named session, or every session when omitted. Unknown capability
names are dropped at announcement time per the §8.6 vocabulary. An
empty index answers an empty list, never silence. Entries sort with
"default" first, then skill_id.

ovos.skills.fallback.list and its FallbackService registry were
already absent from dev, so no removal was needed there.

Fail-before: reverting only the manifest.py change and running the
new TestSkillsListManifest class fails all 7 tests with
AttributeError ('IntentManifest' object has no attribute
'_on_skill_loaded'/'_on_skills_list'); restoring the change passes
all 7, and the full unittest suite (623 tests) and the
test_intent_pipeline.py end2end suite (4 tests) remain green.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 9, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown

Just the facts, ma'am. Here's your report. 👮‍♂️

I've aggregated the results of the automated checks for this PR below.

📚 Docs

Checking the status... yep, it's done! ✅

✅ All required documentation files present.

README.md

🔒 Security (pip-audit)

Ensuring our code is secure by design. 📐

✅ No known vulnerabilities found (113 packages scanned).

🔎 Type Check

Checking the alignment of your contribution. 📏

mypy: 367 error(s) found

test/unittests/test_main.py:13:1: error: Skipping analyzing "ovos_bus_client": module is installed, but missing library stubs or py.typed marker [import-untyped]

Errors (showing first 10/367)
test/unittests/test_skill/__init__.py:15:1: error: Skipping analyzing "ovos_workshop.skills.ovos": module is installed, but missing library stubs or py.typed marker  [import-untyped]
test/end2end/conftest.py:10:1: error: Cannot find implementation or library stub for module named "pytest"  [import-not-found]
ovos_core/transformers.py:3:1: error: Skipping analyzing "ovos_config": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:4:1: error: Skipping analyzing "ovos_plugin_manager.intent_transformers": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:5:1: error: Skipping analyzing "ovos_plugin_manager.metadata_transformers": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:6:1: error: Skipping analyzing "ovos_plugin_manager.templates.transformers": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:7:1: error: Skipping analyzing "ovos_plugin_manager.text_transformers": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:8:1: error: Skipping analyzing "ovos_plugin_manager.transformer_services": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:13:1: error: Skipping analyzing "ovos_plugin_manager.typed_slots_transformers": module is installed, but missing library stubs or py.typed marker  [import-untyped]
ovos_core/transformers.py:14:1: error: Skipping analyzing "ovos_utils.log": module is installed, but missing library stubs or py.typed marker  [import-untyped]

📡 Channel Compat — stable

Checking if everything is still on track. 🛤️

🚧 Channel unresolvable with this checkout — the repo's dependency floors exceed what the channel pins (fleet finding; see the install log).

Constraints: https://raw.githubusercontent.com/OpenVoiceOS/OpenVoiceOS/main/constraints-stable.txt
Resolved stack: channel-compat-stable artifact (constraints + pip freeze).

🌍 Locale Build

The latest check report is officially filed. 📁

✅ Locale properly configured (65 files, 18 languages)

Locale directories found:

  • ovos_core/intent_services/locale

Localization coverage:

  • ovos_core/intent_services/locale: 65 files in 18 languages (pt-br, it-it, gl-es, de-de, pt-pt...)

pyproject.toml:[tool.setuptools.package-data.ovos_core] includes locale

  • intent_services/locale/*/*.voc

Build manifest: ✅ 32 locale files included in package

🔌 Plugin Detection

Ensuring the plugin remains a valuable addition to OVOS. 💎

Plugin Status: ERRORS (1)

Plugin Info:

  • Name: ovos-core
  • Description: The spiritual successor to Mycroft AI, OVOS is flexible voice assistant software that can be run almost anywhere!

OPM Detection:

Plugin Type Wheel Editable
pipeline

Entry Point Validation:

Entry Point Type Import Interface
ovos-converse-pipeline-plugin pipeline ✅ 1195ms
ovos-fallback-pipeline-plugin pipeline ✅ 2ms
ovos-stop-pipeline-plugin pipeline ✅ 45ms

⊘ No settingsmeta.json
requires-python >=3.10 — running Python 3.11

Issues:

  • ❌ Import time for ovos-converse-pipeline-plugin exceeds 500ms (1195ms)
  • ⚠️ No settingsmeta.json found
  • ⚠️ No settingsmeta.json found

📊 Coverage

Evaluating the thoroughness of our test suite. 🔎

⚠️ 74.3% total coverage

Files below 80% coverage (10 files)
File Coverage Missing lines
ovos_core/__init__.py 0.0% 7
ovos_core/intent_services/__init__.py 0.0% 1
ovos_core/version.py 0.0% 18
ovos_core/transformers.py 50.0% 32
ovos_core/skill_installer.py 50.4% 134
ovos_core/intent_services/working_session.py 60.3% 23
ovos_core/skill_manager.py 63.3% 160
ovos_core/__main__.py 69.0% 9
ovos_core/intent_services/dispatcher.py 73.3% 35
ovos_core/intent_services/service.py 76.6% 135

Full report: download the coverage-report artifact.

🔨 Build Tests

Checking if the code is ready for prime time. 📺

✅ All versions pass

Python Build Install Tests
3.10
3.11
3.12
3.13
3.14

🔌 Skill Tests (ovoscope)

Ensuring the skill provides a consistent and delightful experience. 💖

18/42 passed

TestActiveHandlersOnlyIsNotPolled — 1/1

❌ **TestAdaptIntent** — 0/4
Test Result
test_padatious_no_match ❌ subtests passed
test_adapt_match ❌ subtests passed
test_intent_blacklist ❌ subtests passed
test_skill_blacklist ❌ subtests passed

test_padatious_no_match failure:

[gw1] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_adapt_match failure:

[gw0] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_intent_blacklist failure:

[gw1] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
❌ **TestCancelIntentMidSentence** — 0/1
Test Result
test_cancel_match ❌ subtests passed

test_cancel_match failure:

[gw2] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
✅ **TestCompletionSyncE2E** — 3/3 ✅ **TestContext1EndToEndReachability** — 3/3
❌ **TestConverse** — 0/1
Test Result
test_parrot_mode ❌ subtests passed

test_parrot_mode failure:

[gw0] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
❌ **TestDeactivate** — 2/3
Test Result
test_deactivate_inside_converse ❌ subtests passed
test_activate ✅ passed
test_deactivate ✅ passed

test_deactivate_inside_converse failure:

[gw1] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
❌ **TestFallback** — 0/1
Test Result
test_fallback_match ❌ subtests passed

test_fallback_match failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
✅ **TestGGWaveSkillInstall** — 2/2 ✅ **TestGlobalStopSpec** — 1/1
❌ **TestIntentPipelineRouting** — 0/4
Test Result
test_blacklisted_skill_falls_through_to_failure ❌ subtests passed
test_no_match_produces_intent_failure ❌ subtests passed
test_padatious_intent_matched ❌ subtests passed
test_high_priority_stage_handles_before_low ❌ subtests passed

test_blacklisted_skill_falls_through_to_failure failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_no_match_produces_intent_failure failure:

[gw2] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_padatious_intent_matched failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
❌ **TestLangDisambiguation** — 0/4
Test Result
test_metadata_preferred_over_text_detection ❌ subtests passed
test_stt_lang ❌ subtests passed
test_lang_text_detection ❌ subtests passed
test_invalid_lang_detection ❌ subtests passed

test_metadata_preferred_over_text_detection failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_stt_lang failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_lang_text_detection failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
✅ **TestLegacyGlobalStop** — 1/1
❌ **TestLegacyIntentIdBackCompat** — 0/2
Test Result
test_legacy_dispatch_topic_fires_handler ❌ subtests passed
test_legacy_blacklist_id_suppresses ❌ subtests passed

test_legacy_dispatch_topic_fires_handler failure:

[gw0] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_legacy_blacklist_id_suppresses failure:

[gw3] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
✅ **TestLegacyTargetedStop** — 1/1
❌ **TestNoSkills** — 0/2
Test Result
test_complete_failure ❌ subtests passed
test_routing ❌ subtests passed

test_complete_failure failure:

[gw2] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_routing failure:

[gw2] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
❌ **TestPadatiousIntent** — 0/4
Test Result
test_adapt_no_match ❌ subtests passed
test_padatious_match ❌ subtests passed
test_skill_blacklist ❌ subtests passed
test_intent_blacklist ❌ subtests passed

test_adapt_no_match failure:

[gw1] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_padatious_match failure:

[gw0] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python

test_skill_blacklist failure:

[gw1] linux -- Python 3.11.16 /opt/hostedtoolcache/Python/3.11.16/x64/bin/python
✅ **TestResponseModeHolderStopE2E** — 2/2 ✅ **TestTargetedStopResolves** — 1/1 ✅ **TestTargetedStopSpec** — 1/1

🚌 Bus Coverage

A deep dive into the sea of message bus results. 🌊

🔴 Coverage Summary

Metric Status Coverage
Listeners █░░░░░░░░░ 11.3% 28/248 handlers
Emitters ██████████ 100% 42/42 observed
Assertions ██████████ 100% 42/42 asserted

📊 Per-Skill Breakdown

Skill Listeners Observed Asserted
AdaptPipeline 0/14 (0.0%) 0/0 0/0
ConverseService 2/4 (50.0%) 0/0 0/0
FallbackService 0/2 (0.0%) 0/0 0/0
IntentDispatcher 1/2 (50.0%) 0/0 0/0
IntentManifest 0/10 (0.0%) 0/0 0/0
IntentService 2/4 (50.0%) 0/0 0/0
PadaciosoPipeline 0/11 (0.0%) 0/0 0/0
PadatiousPipeline 0/15 (0.0%) 0/0 0/0
SkillManager 0/8 (0.0%) 0/0 0/0
StopService 1/2 (50.0%) 0/0 0/0
_LegacyStopBridge 1/3 (33.3%) 0/0 0/0
__core__ 7/39 (17.9%) 9/9 9/9
keyword-templates 0/2 (0.0%) 0/0 0/0
ovos-ahocorasick-ner-plugin 0/1 (0.0%) 0/0 0/0
ovos-skill-count.openvoiceos 0/17 (0.0%) 0/0 0/0
ovos-skill-hello-world.openvoiceos 1/25 (4.0%) 9/9 9/9
ovos-skill-parrot.openvoiceos 7/35 (20.0%) 12/12 12/12
test-adapt-hello-world.openvoiceos 1/21 (4.8%) 9/9 9/9
test_activation.openvoiceos 3/29 (10.3%) 3/3 3/3
type 2/4 (50.0%) 0/0 0/0
🔍 Detailed Message Type Breakdown

AdaptPipeline

⚠️ Uncovered Listeners:

  • ovos.intent.deregister (Intent)
  • ovos.intent.disable (Intent)
  • ovos.intent.enable (Intent)
  • ovos.intent.register.keyword (Intent)
  • detach_intent
  • detach_skill
  • intent.service.adapt.get
  • intent.service.adapt.manifest.get
  • intent.service.adapt.vocab.manifest.get
  • ovos.entity.deregister
  • ovos.entity.register
  • ovos.skill.deregister
  • register_intent
  • register_vocab

ConverseService

⚠️ Uncovered Listeners:

  • intent.service.active_skills.get
  • intent.service.skills.activate
    ✅ Covered Listeners:
  • converse:skill (4x)
  • intent.service.skills.deactivate (1x)

FallbackService

⚠️ Uncovered Listeners:

  • ovos.skills.fallback.deregister
  • ovos.skills.fallback.register

IntentDispatcher

⚠️ Uncovered Listeners:

  • mycroft.skill.handler.error
    ✅ Covered Listeners:
  • mycroft.skill.handler.complete (11x)

IntentManifest

⚠️ Uncovered Listeners:

  • ovos.intent.deregister (Intent)
  • ovos.intent.describe (Intent)
  • ovos.intent.disable (Intent)
  • ovos.intent.enable (Intent)
  • ovos.intent.list (Intent)
  • ovos.intent.register.keyword (Intent)
  • ovos.intent.register.template (Intent)
  • ovos.skill.deregister
  • ovos.skill.loaded
  • ovos.skills.list

IntentService

⚠️ Uncovered Listeners:

  • intent.service.intent.get (Intent)
  • intent.service.pipelines.reload
    ✅ Covered Listeners:
  • intent.service.skills.deactivate (1x)
  • ovos.utterance.handle (8x)

PadaciosoPipeline

⚠️ Uncovered Listeners:

  • ovos.intent.deregister (Intent)
  • ovos.intent.disable (Intent)
  • ovos.intent.enable (Intent)
  • ovos.intent.register.template (Intent)
  • padatious:register_entity (Intent)
  • padatious:register_intent (Intent)
  • detach_intent
  • detach_skill
  • ovos.entity.deregister
  • ovos.entity.register
  • ovos.skill.deregister

PadatiousPipeline

⚠️ Uncovered Listeners:

  • ovos.intent.deregister (Intent)
  • ovos.intent.disable (Intent)
  • ovos.intent.enable (Intent)
  • ovos.intent.register.template (Intent)
  • padatious:register_entity (Intent)
  • padatious:register_intent (Intent)
  • detach_intent
  • detach_skill
  • intent.service.padatious.entities.manifest.get
  • intent.service.padatious.get
  • intent.service.padatious.manifest.get
  • mycroft.skills.train
  • ovos.entity.deregister
  • ovos.entity.register
  • ovos.skill.deregister

SkillManager

⚠️ Uncovered Listeners:

  • padatious:register_intent (Intent)
  • mycroft.skills.trained
  • register_intent
  • skill.converse.get_response.disable
  • skillmanager.activate
  • skillmanager.deactivate
  • skillmanager.keep
  • skillmanager.list

StopService

⚠️ Uncovered Listeners:

  • ovos-stop-pipeline-plugin:global_stop (Intent)
    ✅ Covered Listeners:
  • ovos.utterance.handled (16x)

_LegacyStopBridge

⚠️ Uncovered Listeners:

  • stop:global (Intent)
  • stop:skill (Intent)
    ✅ Covered Listeners:
  • ovos.intent.matched (10x)

__core__

⚠️ Uncovered Listeners:

  • ovos-skill-count.openvoiceos:stop (Intent)
  • ovos.intent.handler.error (Intent)
  • add_context
  • clear_context
  • message
  • mycroft.ovos-skill-count.openvoiceos.all_loaded
  • mycroft.ovos-skill-count.openvoiceos.is_alive
  • mycroft.ovos-skill-count.openvoiceos.is_ready
  • mycroft.ovos-skill-hello-world.openvoiceos.all_loaded
  • mycroft.ovos-skill-hello-world.openvoiceos.is_alive
  • mycroft.ovos-skill-hello-world.openvoiceos.is_ready
  • mycroft.ovos-skill-parrot.openvoiceos.all_loaded
  • mycroft.ovos-skill-parrot.openvoiceos.is_alive
  • mycroft.ovos-skill-parrot.openvoiceos.is_ready
  • mycroft.test-adapt-hello-world.openvoiceos.all_loaded
  • mycroft.test-adapt-hello-world.openvoiceos.is_alive
  • mycroft.test-adapt-hello-world.openvoiceos.is_ready
  • mycroft.test_activation.openvoiceos.all_loaded
  • mycroft.test_activation.openvoiceos.is_alive
  • mycroft.test_activation.openvoiceos.is_ready
  • ovos-skill-count.openvoiceos.set
  • ovos-skill-count.openvoiceos.stop.response
  • ovos-skill-hello-world.openvoiceos.set
  • ovos-skill-parrot.openvoiceos.set
  • ovos.session.sync
  • ovos.session.update_default
  • ovos.skills.converse.force_timeout
  • ovos.stop.pong
  • remove_context
  • skill.converse.get_response.enable
  • test-adapt-hello-world.openvoiceos.set
  • test_activation.openvoiceos.set
    ✅ Covered Listeners:
  • mycroft.skill.handler.start (3x)
  • ovos.converse.pong (3x)
  • ovos.intent.handler.complete (2x)
  • ovos.intent.handler.start (2x)
  • ovos.utterance.speak (11x)
  • skill.converse.pong (3x)
  • skill.converse.response (2x)

📤 Emitters:

  • mycroft.audio.play_sound (Asserted ✅)
  • ovos-skill-hello-world.openvoiceos:Greetings.intent (Asserted ✅)
  • ovos-skill-parrot.openvoiceos.converse.ping (Asserted ✅)
  • ovos.converse.ping (Asserted ✅)
  • ovos.intent.unmatched (Asserted ✅)
  • ovos.utterance.handle (Asserted ✅)
  • ovos.utterance.handled (Asserted ✅)
  • recognizer_loop:utterance (Asserted ✅)
  • test_deactivate (Asserted ✅)

keyword-templates

⚠️ Uncovered Listeners:

  • ovos.intent.register.template (Intent)
  • padatious:register_intent (Intent)

ovos-ahocorasick-ner-plugin

⚠️ Uncovered Listeners:

  • padatious:register_entity (Intent)

ovos-skill-count.openvoiceos

⚠️ Uncovered Listeners:

  • ovos-skill-count.openvoiceos:count_to_n (Intent)
  • question:action (Intent)
  • question:action.ovos-skill-count.openvoiceos (Intent)
  • question:query (Intent)
  • homescreen.metadata.get
  • mycroft.skill.disable_intent
  • mycroft.skill.enable_intent
  • mycroft.skill.remove_cross_context
  • mycroft.skill.set_cross_context
  • mycroft.skills.settings.changed
  • mycroft.stop
  • ovos-skill-count.openvoiceos.converse.get_response
  • ovos-skill-count.openvoiceos.stop
  • ovos-skill-count.openvoiceos.stop.ping
  • ovos.common_query.ping
  • ovos.skills.settings_changed
  • ovos.stop.ping

ovos-skill-hello-world.openvoiceos

⚠️ Uncovered Listeners:

  • ovos-skill-hello-world.openvoiceos:HelloWorldIntent (Intent)
  • ovos-skill-hello-world.openvoiceos:HowAreYou (Intent)
  • ovos-skill-hello-world.openvoiceos:ThankYouIntent (Intent)
  • question:action (Intent)
  • question:action.ovos-skill-hello-world.openvoiceos (Intent)
  • question:query (Intent)
  • hello.world
  • homescreen.metadata.get
  • mycroft.ovos-skill-hello-world.openvoiceos.all_loaded
  • mycroft.ovos-skill-hello-world.openvoiceos.is_alive
  • mycroft.ovos-skill-hello-world.openvoiceos.is_ready
  • mycroft.skill.disable_intent
  • mycroft.skill.enable_intent
  • mycroft.skill.remove_cross_context
  • mycroft.skill.set_cross_context
  • mycroft.skills.settings.changed
  • mycroft.stop
  • ovos-skill-hello-world.openvoiceos.converse.get_response
  • ovos-skill-hello-world.openvoiceos.set
  • ovos-skill-hello-world.openvoiceos.stop
  • ovos-skill-hello-world.openvoiceos.stop.ping
  • ovos.common_query.ping
  • ovos.skills.settings_changed
  • ovos.stop.ping
    ✅ Covered Listeners:
  • ovos-skill-hello-world.openvoiceos:Greetings (2x)

📤 Emitters:

  • mycroft.skill.handler.complete (Asserted ✅)
  • mycroft.skill.handler.start (Asserted ✅)
  • ovos-skill-hello-world.openvoiceos.activate (Asserted ✅)
  • ovos-skill-hello-world.openvoiceos:Greetings (Asserted ✅)
  • ovos.intent.handler.complete (Asserted ✅)
  • ovos.intent.handler.start (Asserted ✅)
  • ovos.intent.matched (Asserted ✅)
  • ovos.utterance.handled (Asserted ✅)
  • ovos.utterance.speak (Asserted ✅)

ovos-skill-parrot.openvoiceos

⚠️ Uncovered Listeners:

  • ovos-skill-parrot.openvoiceos:did_you_hear_me (Intent)
  • ovos-skill-parrot.openvoiceos:repeat_stt (Intent)
  • ovos-skill-parrot.openvoiceos:repeat_tts (Intent)
  • ovos-skill-parrot.openvoiceos:speak (Intent)
  • ovos-skill-parrot.openvoiceos:stop_parrot (Intent)
  • question:action (Intent)
  • question:action.ovos-skill-parrot.openvoiceos (Intent)
  • question:query (Intent)
  • homescreen.metadata.get
  • intent.service.skills.activated
  • mycroft.ovos-skill-parrot.openvoiceos.all_loaded
  • mycroft.ovos-skill-parrot.openvoiceos.is_alive
  • mycroft.ovos-skill-parrot.openvoiceos.is_ready
  • mycroft.skill.disable_intent
  • mycroft.skill.enable_intent
  • mycroft.skill.remove_cross_context
  • mycroft.skill.set_cross_context
  • mycroft.skills.settings.changed
  • mycroft.stop
  • ovos-skill-parrot.openvoiceos.converse.get_response
  • ovos-skill-parrot.openvoiceos.deactivate
  • ovos-skill-parrot.openvoiceos.set
  • ovos-skill-parrot.openvoiceos.stop
  • ovos-skill-parrot.openvoiceos.stop.ping
  • ovos.common_query.ping
  • ovos.skills.settings_changed
  • ovos.stop.ping
  • speak
    ✅ Covered Listeners:
  • intent.service.skills.deactivated (1x)
  • ovos-skill-parrot.openvoiceos.activate (2x)
  • ovos-skill-parrot.openvoiceos.converse.ping (6x)
  • ovos-skill-parrot.openvoiceos.converse.request (4x)
  • ovos-skill-parrot.openvoiceos:start_parrot (2x)
  • ovos.converse.ping (6x)
  • recognizer_loop:utterance (6x)

📤 Emitters:

  • converse:skill (Asserted ✅)
  • mycroft.skill.handler.complete (Asserted ✅)
  • mycroft.skill.handler.start (Asserted ✅)
  • ovos-skill-parrot.openvoiceos.activate (Asserted ✅)
  • ovos-skill-parrot.openvoiceos.converse.request (Asserted ✅)
  • ovos-skill-parrot.openvoiceos:start_parrot (Asserted ✅)
  • ovos.converse.pong (Asserted ✅)
  • ovos.intent.matched (Asserted ✅)
  • ovos.utterance.handled (Asserted ✅)
  • ovos.utterance.speak (Asserted ✅)
  • skill.converse.pong (Asserted ✅)
  • skill.converse.response (Asserted ✅)

test-adapt-hello-world.openvoiceos

⚠️ Uncovered Listeners:

  • question:action (Intent)
  • question:action.test-adapt-hello-world.openvoiceos (Intent)
  • question:query (Intent)
  • homescreen.metadata.get
  • mycroft.skill.disable_intent
  • mycroft.skill.enable_intent
  • mycroft.skill.remove_cross_context
  • mycroft.skill.set_cross_context
  • mycroft.skills.settings.changed
  • mycroft.stop
  • mycroft.test-adapt-hello-world.openvoiceos.all_loaded
  • mycroft.test-adapt-hello-world.openvoiceos.is_alive
  • mycroft.test-adapt-hello-world.openvoiceos.is_ready
  • ovos.common_query.ping
  • ovos.skills.settings_changed
  • ovos.stop.ping
  • test-adapt-hello-world.openvoiceos.converse.get_response
  • test-adapt-hello-world.openvoiceos.set
  • test-adapt-hello-world.openvoiceos.stop
  • test-adapt-hello-world.openvoiceos.stop.ping
    ✅ Covered Listeners:
  • test-adapt-hello-world.openvoiceos:HelloWorldIntent (2x)

📤 Emitters:

  • mycroft.skill.handler.complete (Asserted ✅)
  • mycroft.skill.handler.start (Asserted ✅)
  • ovos.intent.handler.complete (Asserted ✅)
  • ovos.intent.handler.start (Asserted ✅)
  • ovos.intent.matched (Asserted ✅)
  • ovos.utterance.handled (Asserted ✅)
  • ovos.utterance.speak (Asserted ✅)
  • test-adapt-hello-world.openvoiceos.activate (Asserted ✅)
  • test-adapt-hello-world.openvoiceos:HelloWorldIntent (Asserted ✅)

test_activation.openvoiceos

⚠️ Uncovered Listeners:

  • question:action (Intent)
  • question:action.test_activation.openvoiceos (Intent)
  • question:query (Intent)
  • homescreen.metadata.get
  • intent.service.skills.activated
  • mycroft.skill.disable_intent
  • mycroft.skill.enable_intent
  • mycroft.skill.remove_cross_context
  • mycroft.skill.set_cross_context
  • mycroft.skills.settings.changed
  • mycroft.stop
  • mycroft.test_activation.openvoiceos.all_loaded
  • mycroft.test_activation.openvoiceos.is_alive
  • mycroft.test_activation.openvoiceos.is_ready
  • ovos.common_query.ping
  • ovos.converse.ping
  • ovos.skills.settings_changed
  • ovos.stop.ping
  • test_activate
  • test_activation.openvoiceos.activate
  • test_activation.openvoiceos.converse.get_response
  • test_activation.openvoiceos.converse.ping
  • test_activation.openvoiceos.converse.request
  • test_activation.openvoiceos.set
  • test_activation.openvoiceos.stop
  • test_activation.openvoiceos.stop.ping
    ✅ Covered Listeners:
  • intent.service.skills.deactivated (1x)
  • test_activation.openvoiceos.deactivate (1x)
  • test_deactivate (1x)

📤 Emitters:

  • intent.service.skills.deactivate (Asserted ✅)
  • intent.service.skills.deactivated (Asserted ✅)
  • test_activation.openvoiceos.deactivate (Asserted ✅)

type

⚠️ Uncovered Listeners:

  • recognizer_loop:record_begin (Intent)
  • recognizer_loop:record_end (Intent)
    ✅ Covered Listeners:
  • recognizer_loop:audio_output_end (2x)
  • recognizer_loop:audio_output_start (11x)

⚖️ License Check

Ensuring our project remains legally compliant. ✅

✅ No license violations found.

Policy: Apache 2.0 (universal donor). StrongCopyleft / NetworkCopyleft / WeakCopyleft / Other / Error categories fail. MPL allowed.


The bits must flow. 🌊

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant