chore(skills): docs + ruff format for skill-management-console
Tests / Test passed: 855

Documents Skill Management in CLOUD_DEPLOYMENT.md (cloud-skill store,
per-host entitlement, incremental sync, local authoring/override,
inventory report, skills:admin scope) and applies ruff check/format to
all touched modules. All tasks complete; full non-integration suite
green (593 passed) and openspec validate --strict passes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 08:10:20 +08:00
co-authored by Claude Opus 4.6
parent fd0ea3a066
commit f8054cb58c
9 changed files with 83 additions and 53 deletions
+4 -11
View File
@@ -9,16 +9,15 @@ Override semantics (design D8/D9/D11): a local override shadows the cloud
skill at read time, wins against sync updates, and is reported with
``origin = "cloud"`` and ``locally_overridden = true`` while it shadows.
"""
from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass
from typing import Literal
from skills_learning.models import (
FlowTemplateSkill,
KnowledgeSkill,
Skill,
SkillMetadata,
)
from storage.local_skills import LocalSkillStore
@@ -72,9 +71,7 @@ class SkillCatalogView:
if meta.id in override_ids:
override = self._local.get_override(meta.id)
if override is not None:
summaries.append(
SkillSummary(override.metadata, "cloud", True)
)
summaries.append(SkillSummary(override.metadata, "cloud", True))
continue
summaries.append(SkillSummary(meta, "cloud", False))
@@ -96,9 +93,7 @@ class SkillCatalogView:
if meta.id in override_ids:
override = self._local.get_override(meta.id)
if override is not None:
summaries.append(
SkillSummary(override.metadata, "cloud", True)
)
summaries.append(SkillSummary(override.metadata, "cloud", True))
continue
summaries.append(SkillSummary(meta, "cloud", False))
@@ -148,9 +143,7 @@ class SkillCatalogView:
return self._local.has_override(cloud_skill_id)
def _tools_valid(
skill: FlowTemplateSkill, registered_tools: set[str]
) -> bool:
def _tools_valid(skill: FlowTemplateSkill, registered_tools: set[str]) -> bool:
return all(step.tool_name in registered_tools for step in skill.steps)