@codyswann/lisa 3.33.7 → 3.33.8
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/all/copy-overwrite/scripts/lisa-gates.mjs +35 -3
- package/all/copy-overwrite/scripts/lisa-run-gates.mjs +6 -0
- package/dist/configs/eslint/base.d.ts.map +1 -1
- package/dist/configs/eslint/base.js +8 -0
- package/dist/configs/eslint/base.js.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +2 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +5 -4
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/eslint-plugin-component-structure/rules/enforce-component-structure.js +63 -43
- package/package.json +2 -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-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- 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/typescript/copy-contents/.husky/pre-push +88 -1
|
@@ -158,51 +158,71 @@ module.exports = {
|
|
|
158
158
|
// Check for required files in the directory (only once per directory)
|
|
159
159
|
// We'll do this check only for the first file we encounter
|
|
160
160
|
const cache = new Map();
|
|
161
|
-
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* List the component directory, or return null when there is no directory
|
|
164
|
+
* to list.
|
|
165
|
+
*
|
|
166
|
+
* The previous form wrapped this read AND every `context.report` call below
|
|
167
|
+
* in one bare `catch (_err) {}`. That swallowed three different things
|
|
168
|
+
* behind one comment: a missing directory (expected), an unreadable one
|
|
169
|
+
* (EACCES/EMFILE — the check could not run), and any error thrown by the
|
|
170
|
+
* reporting calls themselves (the rule is broken). Only the first is
|
|
171
|
+
* "nothing to check"; the other two made a rule that could not run
|
|
172
|
+
* indistinguishable from a rule that found nothing wrong.
|
|
173
|
+
* @returns {string[]|null} Directory entries, or null when absent
|
|
174
|
+
*/
|
|
175
|
+
const readComponentDir = () => {
|
|
176
|
+
if (cache.has(dirPath)) return cache.get(dirPath);
|
|
162
177
|
try {
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
);
|
|
175
|
-
const hasView = files.some(
|
|
176
|
-
f =>
|
|
177
|
-
f === `${componentName}View.tsx` || f === `${componentName}View.jsx`
|
|
178
|
-
);
|
|
179
|
-
const hasIndex = files.some(
|
|
180
|
-
f => f === "index.ts" || f === "index.tsx" || f === "index.jsx"
|
|
181
|
-
);
|
|
178
|
+
const dirFiles = fs.readdirSync(dirPath);
|
|
179
|
+
cache.set(dirPath, dirFiles);
|
|
180
|
+
return dirFiles;
|
|
181
|
+
} catch (error) {
|
|
182
|
+
// A path that is not a directory is the one genuinely uninteresting
|
|
183
|
+
// case: there is nothing to check. Anything else means the check did
|
|
184
|
+
// not run, and must not be reported as a clean result.
|
|
185
|
+
if (error.code === "ENOENT" || error.code === "ENOTDIR") return null;
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
182
189
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
190
|
+
const checkRequiredFiles = () => {
|
|
191
|
+
const files = readComponentDir();
|
|
192
|
+
if (files === null) return;
|
|
193
|
+
const hasContainer = files.some(
|
|
194
|
+
f =>
|
|
195
|
+
f === `${componentName}Container.tsx` ||
|
|
196
|
+
f === `${componentName}Container.jsx`
|
|
197
|
+
);
|
|
198
|
+
const hasView = files.some(
|
|
199
|
+
f =>
|
|
200
|
+
f === `${componentName}View.tsx` || f === `${componentName}View.jsx`
|
|
201
|
+
);
|
|
202
|
+
const hasIndex = files.some(
|
|
203
|
+
f => f === "index.ts" || f === "index.tsx" || f === "index.jsx"
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
if (!hasContainer) {
|
|
207
|
+
context.report({
|
|
208
|
+
node: context.getSourceCode().ast,
|
|
209
|
+
messageId: "missingContainer",
|
|
210
|
+
data: { componentName },
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
if (!hasView) {
|
|
214
|
+
context.report({
|
|
215
|
+
node: context.getSourceCode().ast,
|
|
216
|
+
messageId: "missingView",
|
|
217
|
+
data: { componentName },
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
if (!hasIndex) {
|
|
221
|
+
context.report({
|
|
222
|
+
node: context.getSourceCode().ast,
|
|
223
|
+
messageId: "missingIndex",
|
|
224
|
+
data: { componentName },
|
|
225
|
+
});
|
|
206
226
|
}
|
|
207
227
|
};
|
|
208
228
|
|
package/package.json
CHANGED
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"check:duplicate-versions": "node scripts/check-duplicate-versions.mjs",
|
|
46
46
|
"check:required-check-promotions": "node scripts/check-required-check-promotions.mjs",
|
|
47
47
|
"check:work-item": "node scripts/lisa-work-item.mjs validate-pr",
|
|
48
|
+
"check:work-item:push": "node scripts/lisa-work-item.mjs validate-push",
|
|
48
49
|
"check:thresholds": "node plugins/src/base/hooks/threshold-ratchet.mjs --base HEAD^",
|
|
49
50
|
"verify:health-contract": "bun run build:dist && node scripts/verify-health-contract-built.mjs",
|
|
50
51
|
"verify:health-deterministic": "bun run build:dist && node scripts/verify-health-deterministic-built.mjs",
|
|
@@ -131,7 +132,7 @@
|
|
|
131
132
|
"ws": ">=8.21.0"
|
|
132
133
|
},
|
|
133
134
|
"name": "@codyswann/lisa",
|
|
134
|
-
"version": "3.33.
|
|
135
|
+
"version": "3.33.8",
|
|
135
136
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
136
137
|
"main": "dist/index.js",
|
|
137
138
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.33.
|
|
3
|
+
"version": "3.33.8",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.33.
|
|
3
|
+
"version": "3.33.8",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.33.
|
|
3
|
+
"version": "3.33.8",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.33.
|
|
3
|
+
"version": "3.33.8",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "3.33.
|
|
3
|
+
"version": "3.33.8",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, for Claude Code and Codex",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|