- Created
QUICK_FACTS.mdwith machine-readable package metadata. - Created
FAQ.mdwith common Q&A. - Created
MAINTENANCE_REPORT.md(this file) as the change log. - Created
SUGGESTIONS.mdwith initial improvement proposals. - Created
docs/index.mdas the documentation entry point (if missing).
Establishing the required file set mandated by AGENTS.md for all active workspace repositories.
- All required files exist at repo root and
docs/folder. - No existing content was overwritten.
- AI Model: Claude Sonnet 4.6
- Actions Taken: Generated boilerplate compliance scaffold (QUICK_FACTS, FAQ, MAINTENANCE_REPORT, SUGGESTIONS, docs/index).
- Oversight: Files are stubs — human review and enrichment required before treating as authoritative.
templates/tts.py:346— Fixedlstrip/rstripcharacter-set stripping of<speak>tags. Replaced withremoveprefix("<speak>").removesuffix("</speak>")(Python 3.9+) for correct substring removal. (TTS.format_speak_tags)templates/tts.py:362–364— Fixedvalidate_ssmldiscarding the return value offormat_speak_tags. Now assigns the result back toutterance. Speak tags are only injected when already present in the utterance to preserve test semantics. (TTS.validate_ssml)templates/vad.py:104— Fixed incorrect return annotation-> byteswhen function can returnNoneimplicitly. Changed to-> Optional[bytes]. (OVOSVADPlugin.extract_speech)stt.py:91— Replaced bareassertvalidation withif not ...: raise ValueError(...)so it is not silently skipped under Python-Ooptimised mode. (get_stt_config)utils/config.py:83–88— Fixedvalid_configs.append(configs[lang])which was nesting a list inside a list. Changed to.extend()so individual config dicts are appended. (get_valid_plugin_configs)tts.py:174— Wrappedos.listdir(VOICES_FOLDER)withif not os.path.isdir(VOICES_FOLDER): continueto preventFileNotFoundErrorwhen directory does not exist. (get_voices)wakewords.py:162— Same guard added foros.listdir(WW_FOLDER). (get_wws)skills.py:174— Changed bareexcept:toexcept Exception:. (load_skill_plugins)ocp.py:71— Changed bareexcept:toexcept Exception:. (OVOSOCPFactory.load)utils/config.py:105— Changed bareexcept:toexcept Exception:. (sort_plugin_configs)installation.py:64— Changed bareexcept:toexcept Exception:. (search_pip)templates/solvers.py:276— Changed bareexcept:toexcept Exception:. (QuestionSolver.search)templates/audio.py:257— Changed bareexcept:toexcept Exception:. (OVOSAudioPlugin.get_track_length)templates/transformers.py:33— Fixed-> (list, dict)tuple-expression annotation onMetadataTransformer.transformto-> dict(matches actual return value).templates/transformers.py:68— Fixed-> (list, dict)annotation onUtteranceTransformer.transformto-> Tuple[List[str], dict].
- All 1020 tests pass.
- Coverage: 85% (unchanged from before).
- AI Model: Claude Sonnet 4.6
- Actions Taken: Read AUDIT.md, read each affected source file, applied minimal targeted fixes for each confirmed bug, ran full test suite, confirmed all tests pass.
- Oversight: Human review recommended for
validate_ssmllogic change (speak-tag injection guard).
- Created
test/unittests/test_embeddings_templates.py: 68 tests coveringEmbeddingsDB(all collection/embedding CRUD methods, batch methods, 30+ distance metrics including cosine, euclidean, manhattan, jaccard, KL divergence, Mahalanobis, etc.) andTextEmbedder,ImageEmbedder,FaceEmbedder,VoiceEmbedderinit/get_embeddings. Coversovos_plugin_manager/templates/embeddings.pylines 8, 45, 61, 71, 81, 99, 130, 170, 196, 209, 239–496, 518, 540, 562, 584. - Created
test/unittests/test_media_templates.py: 28 tests coveringMediaBackend(load_track, ocp_start/stop/pause/resume/error, seek, shutdown, track_info),AudioPlayerBackend,VideoPlayerBackend,WebPlayerBackend,RemoteAudio/Video/WebPlayerBackend. Coversovos_plugin_manager/templates/media.pylines 20–27, 34, 37–40, 45–49, 53–57, 62–68, 72–75, 79–84, 88, 174–176, 184–186, 194, 201, 208–209, 214–215, 232–233, 238–239, 257–258, 263–264. - Created
test/unittests/test_phal_template_extended.py: 60 tests coveringPHALPluginmouth event delegation (active/inactive for talk, think, listen, smile, viseme, viseme_list, reset), all 30+ stub event handlers (on_record_begin through on_weather_display), runtime_requirements, shutdown, andAdminPlugin. Coversovos_plugin_manager/templates/phal.pyuncovered lines. - Created
test/unittests/test_thirdparty_sr.py: 21 tests coveringsrAudioData.get_flac_data(mocked subprocess),srAudioFile.__enter__/__exit__with WAV, reentrancy guard, invalid-file ValueError path,AudioFileStream.read(mono and stereo),get_flac_converter, andget_segmentedge cases. Coversovos_plugin_manager/thirdparty/sr.pylines 128–131, 209, 236–274, 302–312, 323–383, 391–394, 406–408, 426–445. - Created
test/unittests/test_tts_template_streaming.py: 35 tests coveringTTS.plugin_idauto-discovery,_init_playback(start/no-start paths),TTS.initvalidation,TTS.stop/shutdown,TTS.viseme(empty, duration, bare tokens),_replace_phonetic_spellings(with/without dict, disabled),load_spellingswith deprecated config arg,TTSContext.get_from_cachecache-hit path,ConcatTTSinit/config/concat/get_tts,StreamingTTSCallbacks(stream_start/chunk/stop, pulse_duck, no-player error),StreamingTTS.get_tts. Coversovos_plugin_manager/templates/tts.pylines 119–123, 211–215, 266–267, 394–399, 409–415, 428, 432–442, 456–458, 496–499, 506, 556, 605–607, 637–649, 664–666, 692–695, 750–756, 763, 767–783, 796–798, 813–829, 837–848.
Push test coverage from 77% to 86% (target was 85%) by adding targeted tests for the highest-impact uncovered template files.
uv run pytest test/ --cov=ovos_plugin_manager --cov-report=term-missing→ TOTAL 5325 770 86% (1020 passed, 0 failed)- All 4 new test modules pass independently.
- AI Model: Claude Sonnet 4.6
- Actions Taken: Read source files, identified uncovered code paths, wrote concrete subclasses and test cases, verified all tests pass.
- Oversight: Human review of new test logic recommended before merging.
- Replaced stub
AUDIT.mdwith a full evidence-based audit covering every source file underovos_plugin_manager/. - Replaced stub
SUGGESTIONS.mdwith 14 concrete, evidence-backed refactor/enhancement proposals.
Comprehensive audit requested to surface bugs, performance issues, type annotation gaps, and code smells across the entire package.
- All findings verified against source code line numbers at time of audit.
- No code was modified; audit is read-only.
- AI Model: Claude Sonnet 4.6
- Actions Taken: Read all 70+ Python source files in
ovos_plugin_manager/, identified and documented bugs/correctness issues, performance bottlenecks, type annotation gaps, and code smells with exact file:line citations. Wrote comprehensiveAUDIT.mdandSUGGESTIONS.md. - Oversight: All findings require human verification before any remediation work begins.
pyproject.toml: Added[project.optional-dependencies]withtestextra to fix CI dependency resolution..github/workflows/build-tests.yml: Added Python 3.9 to the test matrix for consistency withrequires-python..github/workflows/release_workflow.yml: Added a check for theignore-for-releaselabel to prevent unintended releases from docs/tests-only PRs.ovos_plugin_manager/installation.py:- Fixed
max_resultsenforcement insearch_piprecursive calls. - Fixed
pip_installstring vs list input handling (guaranteed list internally). - Fixed
pip_installmasking failures withAttributeErrorby ensuring pipes are used even whenprint_logs=True.
- Fixed
ovos_plugin_manager/templates/tts.py: Replaced bareexceptinsentence_tokenizewithexcept Exceptionand added a warning log for the fallback path.ovos_plugin_manager/templates/vad.py: Updatedextract_speechdocstring to accurately reflect return value when input ends while triggered.docs/configuration.md: Fixed incorrect statement about dialect priority boost semantics (clarified that higher values are more preferred).ovos_plugin_manager/plugin_entry.py: Updatedinstall()to pass list arguments topip_install()for consistency.
Address critical and major issues identified during CodeRabbit review of PR #376 to ensure stability, security, and documentation accuracy.
- Manual verification of all code changes against review comments.
- CI workflows updated and validated locally (schema-wise).
- AI Model: Gemini 2.0 Pro
- Actions Taken: Triage 33 CodeRabbit comments, applied fixes for 10+ high-priority items covering CI, installation logic, templates, and documentation.
- Oversight: Human review of logic changes in
pip_installandrelease_workflow.ymlrecommended.
pyproject.toml: Addedpydantic~=2.0to[project.optional-dependencies] testlist. GitHub Actions installs with extras from pyproject.toml, not requirements.txt; missing pydantic caused pytest ModuleNotFoundError.test/unittests/test_agent_tools.py: Removed dead placeholder definitionclass MathToolBox(MathToolBox if False else object)(lines 48–49). Was causing Ruff F821 (Undefined name) warning; immediately shadowed by real class definition on line 52.docs/index.md: Fixed entry-point name fromopm.persona.tooltoopm.agents.toolbox(line 24). Matches actual ToolBox class entry point in implementation.ovos_plugin_manager/templates/agent_tools.py:handle_discover()(line 123): Addedself.refresh_tools()call before broadcasting. Prevents stale cache if initialdiscover_tools()fails; ensures dynamic tool discovery works for bus-only clients.handle_call()(line 145): Changedresult.model_dump()toresult.model_dump(mode='json'). Ensures JSON serialization consistency withmodel_json_schema()intool_json_list; handles datetime, UUID, enum, aliased fields correctly.validate_input()(line 170): Removed{tool_kwargs}from error message. Security fix: prevents echoing raw arguments (which may contain secrets) onto shared messagebus.validate_output()(line 193): Removed{raw_result}from error message. Security fix: prevents echoing raw output data (which may contain secrets) onto shared messagebus.
Address 6 critical CodeRabbit issues on PR #340 (tool plugins feature): cache staleness, JSON serialization divergence, security leaks, test placeholder cleanup, missing dependency, and documentation accuracy.
- All 1011 unit tests pass (including 21 agent_tools tests).
- Python syntax verified via
py_compile. - Cache refresh behavior confirmed in test_agent_tools.py via mock assertions.
- AI Model: Claude Haiku 4.5
- Actions Taken: Fetched PR feedback via gh_pr_comments.py, triaged 6 CodeRabbit issues by severity, applied targeted fixes to 4 files, ran full test suite, verified all tests pass.
- Oversight: Security fixes to error messages and JSON serialization require human code review to ensure no loss of debug information needed for troubleshooting.