@codyswann/lisa 2.178.2 → 2.178.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/skills/atomic-design-gluestack/SKILL.md +8 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +109 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/SKILL.md +8 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/scripts/validate_styling.py +109 -0
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/SKILL.md +8 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo-agy/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +109 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/SKILL.md +8 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo-agy/skills/gluestack-nativewind/scripts/validate_styling.py +109 -0
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/SKILL.md +8 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo-copilot/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +109 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/SKILL.md +8 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo-copilot/skills/gluestack-nativewind/scripts/validate_styling.py +109 -0
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/SKILL.md +8 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/lisa-expo-cursor/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +109 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/SKILL.md +8 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/lisa-expo-cursor/skills/gluestack-nativewind/scripts/validate_styling.py +109 -0
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/expo/skills/atomic-design-gluestack/SKILL.md +8 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/scripts/test_validate_atomic_structure.py +240 -0
- package/plugins/src/expo/skills/atomic-design-gluestack/scripts/validate_atomic_structure.py +109 -0
- package/plugins/src/expo/skills/gluestack-nativewind/SKILL.md +8 -0
- package/plugins/src/expo/skills/gluestack-nativewind/scripts/test_validate_styling.py +240 -0
- package/plugins/src/expo/skills/gluestack-nativewind/scripts/validate_styling.py +109 -0
|
@@ -19,6 +19,7 @@ Arguments:
|
|
|
19
19
|
Can be a file or directory.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
+
import json
|
|
22
23
|
import os
|
|
23
24
|
import re
|
|
24
25
|
import sys
|
|
@@ -99,6 +100,109 @@ SKIP_PATTERNS = [
|
|
|
99
100
|
]
|
|
100
101
|
|
|
101
102
|
|
|
103
|
+
SEALED_DESIGN_SYSTEM_MARKERS = [
|
|
104
|
+
".claude/rules/use-the-design-library.md",
|
|
105
|
+
".claude/rules/figma-design-system.md",
|
|
106
|
+
"docs/design-system/tokens.md",
|
|
107
|
+
"docs/design-system-rfc.md",
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
ATOM_BARREL_MARKERS = [
|
|
111
|
+
"components/atoms/index.ts",
|
|
112
|
+
"components/atoms/index.tsx",
|
|
113
|
+
"src/components/atoms/index.ts",
|
|
114
|
+
"src/components/atoms/index.tsx",
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def find_project_roots(path: str) -> list[Path]:
|
|
119
|
+
"""Find candidate roots for marker detection, from nearest to farthest.
|
|
120
|
+
|
|
121
|
+
Returns all package boundaries (package.json or .git directories) found
|
|
122
|
+
when walking up from ``path``. In a monorepo this means both the inner
|
|
123
|
+
package root and the workspace root are returned, so seal markers stored at
|
|
124
|
+
the workspace level are not missed.
|
|
125
|
+
"""
|
|
126
|
+
current = Path(path).resolve()
|
|
127
|
+
if current.is_file():
|
|
128
|
+
current = current.parent
|
|
129
|
+
|
|
130
|
+
return [
|
|
131
|
+
candidate
|
|
132
|
+
for candidate in [current, *current.parents]
|
|
133
|
+
if (candidate / "package.json").exists() or (candidate / ".git").exists()
|
|
134
|
+
] or [current]
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def has_design_system_eslint_rule(project_root: Path) -> bool:
|
|
138
|
+
"""Detect project-owned design-system lint rules.
|
|
139
|
+
|
|
140
|
+
Only matches actual rule/plugin identifier syntax (``design-system/``) so
|
|
141
|
+
that comments, package names, or arbitrary strings containing
|
|
142
|
+
``design-system`` as a substring do not trigger a false positive.
|
|
143
|
+
"""
|
|
144
|
+
eslint_files = [
|
|
145
|
+
".eslintrc",
|
|
146
|
+
".eslintrc.js",
|
|
147
|
+
".eslintrc.cjs",
|
|
148
|
+
".eslintrc.yaml",
|
|
149
|
+
".eslintrc.yml",
|
|
150
|
+
".eslintrc.json",
|
|
151
|
+
"eslint.config.js",
|
|
152
|
+
"eslint.config.mjs",
|
|
153
|
+
"eslint.config.cjs",
|
|
154
|
+
"eslint.config.ts",
|
|
155
|
+
"eslint.config.mts",
|
|
156
|
+
"eslint.config.cts",
|
|
157
|
+
]
|
|
158
|
+
|
|
159
|
+
for eslint_file in eslint_files:
|
|
160
|
+
path = project_root / eslint_file
|
|
161
|
+
if not path.exists() or not path.is_file():
|
|
162
|
+
continue
|
|
163
|
+
try:
|
|
164
|
+
content = path.read_text(encoding="utf-8")
|
|
165
|
+
except UnicodeDecodeError:
|
|
166
|
+
continue
|
|
167
|
+
if re.search(r"\bdesign-system/", content):
|
|
168
|
+
return True
|
|
169
|
+
|
|
170
|
+
# Check package.json eslintConfig field explicitly so that dependency
|
|
171
|
+
# names (e.g. "design-system" in dependencies) don't cause false positives.
|
|
172
|
+
package_json_path = project_root / "package.json"
|
|
173
|
+
if package_json_path.exists() and package_json_path.is_file():
|
|
174
|
+
try:
|
|
175
|
+
pkg = json.loads(package_json_path.read_text(encoding="utf-8"))
|
|
176
|
+
eslint_config = pkg.get("eslintConfig")
|
|
177
|
+
if eslint_config is not None:
|
|
178
|
+
eslint_config_str = json.dumps(eslint_config)
|
|
179
|
+
if re.search(r"\bdesign-system/", eslint_config_str):
|
|
180
|
+
return True
|
|
181
|
+
except (json.JSONDecodeError, UnicodeDecodeError):
|
|
182
|
+
pass
|
|
183
|
+
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def has_sealed_design_system(path: str) -> bool:
|
|
188
|
+
"""Check whether this project has a closed local design-system seal."""
|
|
189
|
+
project_roots = find_project_roots(path)
|
|
190
|
+
has_seal_marker = any(
|
|
191
|
+
(root / marker).exists()
|
|
192
|
+
for root in project_roots
|
|
193
|
+
for marker in SEALED_DESIGN_SYSTEM_MARKERS
|
|
194
|
+
)
|
|
195
|
+
has_atom_barrel = any(
|
|
196
|
+
(root / marker).exists()
|
|
197
|
+
for root in project_roots
|
|
198
|
+
for marker in ATOM_BARREL_MARKERS
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
if has_seal_marker or has_atom_barrel:
|
|
202
|
+
return True
|
|
203
|
+
return any(has_design_system_eslint_rule(root) for root in project_roots)
|
|
204
|
+
|
|
205
|
+
|
|
102
206
|
def should_skip_file(file_path: str) -> bool:
|
|
103
207
|
"""Check if file should be skipped."""
|
|
104
208
|
for pattern in SKIP_PATTERNS:
|
|
@@ -270,6 +374,11 @@ def main():
|
|
|
270
374
|
print(f"❌ Path not found: {path}")
|
|
271
375
|
sys.exit(1)
|
|
272
376
|
|
|
377
|
+
if has_sealed_design_system(path):
|
|
378
|
+
print("Sealed design system detected; deferring to the project's design-library rules.")
|
|
379
|
+
print("Skipping generic Gluestack NativeWind validation.")
|
|
380
|
+
sys.exit(0)
|
|
381
|
+
|
|
273
382
|
print(f"🔍 Validating styling patterns in: {path}\n")
|
|
274
383
|
|
|
275
384
|
# Validate
|