Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9280dc8
feat: yesno/selection agent plugins
JarbasAl Mar 18, 2026
d087e63
fix: default plugins
JarbasAl Apr 8, 2026
c189de5
fix: dependencies
JarbasAl Apr 8, 2026
268c197
chore: drop requirements.txt, deps now in pyproject.toml
JarbasAl Apr 8, 2026
a89c796
fix: correct test patch paths and expected fallback types
JarbasAl Apr 8, 2026
e838787
chore: drop duplicate unit_tests workflow
JarbasAl Apr 8, 2026
5da520d
test: add ask_yesno and ask_selection tests
JarbasAl Apr 8, 2026
d106049
test: require ovoscope for e2e tests, add [test] extras
JarbasAl Apr 8, 2026
97db28d
fix: remove unsupported message kwarg from ask_yesno/ask_selection calls
JarbasAl Apr 8, 2026
8608140
.
JarbasAl Apr 8, 2026
7c7a5a7
fix: forward min_conf to OptionMatcher engine via config dict
JarbasAl Apr 8, 2026
388a51c
docs: sync documentation after yesno/selection plugin integration
JarbasAl Apr 8, 2026
e4b27d8
fix: move ovoscope e2e tests out of build_tests path to prevent hangs
JarbasAl Apr 8, 2026
225c882
fix: unblock speak(wait=True) in e2e tests by emitting audio_output_end
JarbasAl Apr 8, 2026
e1aed90
Delete MAINTENANCE_REPORT.md
JarbasAl Apr 9, 2026
b6d5707
fix: use bus.on("speak") not on("message") to avoid recursion in e2e …
JarbasAl Apr 9, 2026
6657d3e
chore: merge ovoscope e2e tests back into build_tests
JarbasAl Apr 9, 2026
eb213ad
fix: delay audio_output_end emission past sess.is_speaking=True
JarbasAl Apr 9, 2026
46b2fec
test: remove fragile ovoscope e2e tests for ask_yesno/ask_selection
JarbasAl Apr 9, 2026
4ae7bda
chore: drop ovoscope from test deps, revert install_extras
JarbasAl Apr 9, 2026
2f223b2
test: restore ovoscope e2e tests with proper TTS wait fix
JarbasAl Apr 9, 2026
9d48773
fix: restore SessionManager.bus after e2e tests to prevent state leak
JarbasAl Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/build_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ jobs:
secrets: inherit
with:
test_path: 'test/unittests'
install_extras: 'test'
15 changes: 0 additions & 15 deletions .github/workflows/test.yml

This file was deleted.

35 changes: 0 additions & 35 deletions MAINTENANCE_REPORT.md

This file was deleted.

63 changes: 61 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,62 @@
# OVOS Workshop
OVOS Workshop contains skill base classes and supporting tools to build skills
and applications for OpenVoiceOS systems.

Base classes, decorators, and helpers for building skills and applications for OpenVoiceOS.

## Install

```bash
pip install ovos-workshop
```

Runtime dependencies include `ovos-yes-no-plugin` and `ovos-option-matcher-fuzzy-plugin`, which back the `ask_yesno` and `ask_selection` skill methods.

## Quick Start

```python
from ovos_workshop.skills.ovos import OVOSSkill
from ovos_workshop.decorators import intent_handler


class HelloWorldSkill(OVOSSkill):

@intent_handler("hello.intent")
def handle_hello(self, message):
self.speak_dialog("hello.response")


def create_skill():
return HelloWorldSkill()
```

Register in `pyproject.toml`:

```toml
[project.entry-points."opm.skills"]
hello-world-skill = "hello_world_skill:HelloWorldSkill"
```

## Configuration

Key settings a skill can accept in its `settings.json`:

| Key | Default | Description |
|-----|---------|-------------|
| `ask_yesno_plugin` | `ovos-solver-yes-no-plugin` | YesNoEngine plugin used by `ask_yesno()` |
| `ask_selection_plugin` | `ovos-option-matcher-fuzzy-plugin` | OptionMatcherEngine plugin used by `ask_selection()` |

Both keys can also be set system-wide under the `skills` block in `mycroft.conf`.

## Documentation

Full reference is in [`docs/`](docs/index.md):

- [Skill classes](docs/skill-classes.md)
- [OVOSSkill base class](docs/ovos-skill.md)
- [ask_yesno / ask_selection plugin system](docs/skill-interaction.md)
- [Decorators](docs/decorators.md)
- [Settings](docs/settings.md)
- [Resource files](docs/resource-files.md)

## License

Apache 2.0
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ OVOSSkill ovos_workshop/skills/ovos.py
| [app.md](app.md) | `OVOSAbstractApplication` | Skill-like app that runs without the intent service |
| [game-skill.md](game-skill.md) | `OVOSGameSkill`, `ConversationalGameSkill` | OCP-integrated game loop with converse and auto-save |
| [auto-translatable.md](auto-translatable.md) | `UniversalSkill`, `UniversalFallback` | Auto-translate input/output for any language |
| [skill-interaction.md](skill-interaction.md) | `OVOSSkill.ask_yesno`, `OVOSSkill.ask_selection` | Pluggable yes/no and option-selection engines |
| [skill-api.md](skill-api.md) | `SkillApi`, `skill_api_method` | Inter-skill RPC over the MessageBus |
| [filesystem.md](filesystem.md) | `FileSystemAccess` | Sandboxed, XDG-compliant file storage for skills |
| [resource-files.md](resource-files.md) | `SkillResources` | Locale, dialog, vocab, regex, and other resource files |
Expand Down
2 changes: 2 additions & 0 deletions docs/ovos-skill.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ choice = self.ask_selection(["A", "B", "C"], "Pick one")

`get_response` suspends the converse channel for this skill until the user responds or a timeout is hit. Raise `AbortQuestion` to cancel gracefully.

`ask_yesno` and `ask_selection` are backed by pluggable engine plugins. The active plugin can be set per-skill via `settings.json` (`ask_yesno_plugin`, `ask_selection_plugin`) or system-wide in `mycroft.conf` under the `skills` block. Defaults are `ovos-solver-yes-no-plugin` and `ovos-option-matcher-fuzzy-plugin`, both installed as runtime dependencies. See [skill-interaction.md](skill-interaction.md) for full configuration reference.

## Intent Registration

```python
Expand Down
Loading
Loading