Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-skills/src/lexigram/ai/skills/__init__.py: 50%

18 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""Lexigram AI Skills — composable, registry-based skill execution platform.""" 

2 

3from __future__ import annotations 

4 

5import importlib.metadata 

6from typing import TYPE_CHECKING 

7 

8__path__ = __import__("pkgutil").extend_path(__path__, __name__) 

9 

10from lexigram.ai.skills.constants import __version__ as __version__ 

11 

12if TYPE_CHECKING: 

13 from lexigram.ai.skills.base import AbstractSkill 

14 from lexigram.ai.skills.executor import SkillExecutor 

15 from lexigram.ai.skills.hooks import ( 

16 SkillExecutedHook, 

17 SkillExecutionFailedHook, 

18 SkillRegisteredHook, 

19 ) 

20 from lexigram.ai.skills.registry import SkillRegistry 

21 

22_LAZY_IMPORTS: dict[str, str] = { 

23 # --- Base --- 

24 "AbstractSkill": "lexigram.ai.skills.base", 

25 "FunctionSkill": "lexigram.ai.skills.base", 

26 "ToolSkillAdapter": "lexigram.ai.skills.base", 

27 # --- Hooks --- 

28 "SkillExecutedHook": "lexigram.ai.skills.hooks", 

29 "SkillExecutionFailedHook": "lexigram.ai.skills.hooks", 

30 "SkillRegisteredHook": "lexigram.ai.skills.hooks", 

31 # --- Builtin --- 

32 "CodeExecutionSkill": "lexigram.ai.skills.builtin.code_execution", 

33 "DatabaseQuerySkill": "lexigram.ai.skills.builtin.database_query", 

34 "DateTimeSkill": "lexigram.ai.skills.builtin.datetime_skill", 

35 "FileReadSkill": "lexigram.ai.skills.builtin.file_operations", 

36 "FileWriteSkill": "lexigram.ai.skills.builtin.file_operations", 

37 "HTTPRequestSkill": "lexigram.ai.skills.builtin.http_request", 

38 "MathSkill": "lexigram.ai.skills.builtin.math_skill", 

39 "TextSummarizeSkill": "lexigram.ai.skills.builtin.text_processing", 

40 "TextTranslateSkill": "lexigram.ai.skills.builtin.text_processing", 

41 "WebSearchSkill": "lexigram.ai.skills.builtin.web_search", 

42 # --- Caching --- 

43 "SkillResultCache": "lexigram.ai.skills.caching.skill_cache", 

44 # --- Composition --- 

45 "SkillChain": "lexigram.ai.skills.composition.chain", 

46 "ParallelSkills": "lexigram.ai.skills.composition.parallel", 

47 "SkillPipeline": "lexigram.ai.skills.composition.pipeline", 

48 "SkillRouter": "lexigram.ai.skills.composition.router", 

49 # --- Config --- 

50 "SkillsConfig": "lexigram.ai.skills.config", 

51 # --- Decorators --- 

52 "skill": "lexigram.ai.skills.decorators", 

53 "skill_param": "lexigram.ai.skills.decorators", 

54 # --- DI --- 

55 "SkillsProvider": "lexigram.ai.skills.di.provider", 

56 # --- Discovery --- 

57 "MCPSkillBridge": "lexigram.ai.skills.discovery.mcp_bridge", 

58 "ModuleScanner": "lexigram.ai.skills.discovery.module_scanner", 

59 "SkillSourceScanner": "lexigram.ai.skills.discovery.skill_source_scanner", 

60 "SkillLoader": "lexigram.ai.skills.discovery.skill_loader", 

61 # --- Exceptions --- 

62 "SkillAlreadyRegisteredError": "lexigram.ai.skills.exceptions", 

63 "SkillExecutionError": "lexigram.ai.skills.exceptions", 

64 "SkillNotFoundError": "lexigram.ai.skills.exceptions", 

65 "SkillPermissionDeniedError": "lexigram.ai.skills.exceptions", 

66 "SkillRoutingError": "lexigram.ai.skills.exceptions", 

67 "SkillTimeoutError": "lexigram.ai.skills.exceptions", 

68 "SkillValidationError": "lexigram.ai.skills.exceptions", 

69 # --- Executor --- 

70 "SkillExecutor": "lexigram.ai.skills.executor", 

71 # --- Module --- 

72 "SkillsModule": "lexigram.ai.skills.module", 

73 # --- Permissions --- 

74 "PermissionChecker": "lexigram.ai.skills.permissions.permission_checker", 

75 # --- Registry --- 

76 "SkillRegistry": "lexigram.ai.skills.registry", 

77 # --- Validation --- 

78 "validate_params": "lexigram.ai.skills.validation.schema", 

79 "validate_non_empty_string": "lexigram.ai.skills.validation.validators", 

80 "validate_positive_int": "lexigram.ai.skills.validation.validators", 

81 "validate_range": "lexigram.ai.skills.validation.validators", 

82 # --- Contracts --- 

83 "SkillDefinition": "lexigram.contracts.ai.skills", 

84 "SkillError": "lexigram.contracts.ai.skills", 

85 "SkillExecutorProtocol": "lexigram.contracts.ai.skills", 

86 "SkillProtocol": "lexigram.contracts.ai.skills", 

87 "SkillRegistryProtocol": "lexigram.contracts.ai.skills", 

88 "SkillResult": "lexigram.contracts.ai.skills", 

89 # --- Events --- 

90 "SkillExecutedEvent": "lexigram.ai.skills.events", 

91} 

92 

93 

94def __getattr__(name: str) -> object: 

95 if name in _LAZY_IMPORTS: 

96 import importlib 

97 

98 module = importlib.import_module(_LAZY_IMPORTS[name]) 

99 value = getattr(module, name) 

100 globals()[name] = value 

101 return value 

102 msg = f"module {__name__!r} has no attribute {name!r}" 

103 raise AttributeError(msg) 

104 

105 

106def __dir__() -> list[str]: 

107 return sorted(set(__all__) | set(_LAZY_IMPORTS.keys())) 

108 

109 

110__all__ = list(_LAZY_IMPORTS.keys())