ulysses/services
Ernest Hysa f4aef0dcf7
fix(skills): scope skill reads to caller owner (#777)
read_skill_md and read_skill_reference walk all skill files via
_iter_skill_files and return the first match by slug, regardless
of owner. In a multi-user deployment where two users have skills
with the same slug under different categories, a caller scoped
to owner='alice' can read Bob's skill content.

This is the same cross-tenant leak class as the update_skill /
delete_skill fix (PR #755, merged), but on the read path.

Changes:
- read_skill_md / read_skill_reference accept owner= param (default
  None = match ownerless only, matching the write-path convention).
- 7 callers updated: tool_implementations.py (view, view_ref, patch),
  builtin_actions.py (test_skills), skills_routes.py (audit, source,
  test routes).
- Tests: read scoping (alice reads hers, not bob's), positive update
  scoping (alice can mutate her own), ownerless-match default.
2026-06-02 11:21:27 +09:00
..
docs Odysseus v1.0 2026-05-31 23:58:26 +09:00
faces Odysseus v1.0 2026-05-31 23:58:26 +09:00
hwfit fix: require GGUF sources for llama downloads (#368) 2026-06-01 22:47:47 +09:00
memory fix(skills): scope skill reads to caller owner (#777) 2026-06-02 11:21:27 +09:00
research Add native Windows compatibility layer 2026-06-01 15:09:47 +09:00
search Fix invalidate_search_cache using a key that never matches stored entries (#852) 2026-06-02 10:53:33 +09:00
shell Odysseus v1.0 2026-05-31 23:58:26 +09:00
stt fix(stt): make local microphone transcription work without torch (#801) 2026-06-02 11:16:54 +09:00
tts Honor disabled speech service toggles (#814) 2026-06-02 10:44:39 +09:00
youtube Odysseus v1.0 2026-05-31 23:58:26 +09:00
__init__.py Odysseus v1.0 2026-05-31 23:58:26 +09:00