@codyswann/lisa 2.219.0 → 2.220.0
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-contents/gitignore +6 -1
- package/cdk/copy-overwrite/eslint.config.ts +25 -3
- package/cdk/copy-overwrite/eslint.slow.config.ts +28 -1
- package/dist/core/learnings-document.d.ts +22 -0
- package/dist/core/learnings-document.d.ts.map +1 -0
- package/dist/core/learnings-document.js +106 -0
- package/dist/core/learnings-document.js.map +1 -0
- package/dist/core/learnings-writer.d.ts +1 -13
- package/dist/core/learnings-writer.d.ts.map +1 -1
- package/dist/core/learnings-writer.js +2 -70
- package/dist/core/learnings-writer.js.map +1 -1
- package/expo/copy-overwrite/eslint.config.ts +26 -3
- package/expo/copy-overwrite/eslint.slow.config.ts +32 -1
- package/expo/copy-overwrite/scripts/check-e2e-coverage.mjs +1 -1
- package/expo/create-only/e2e.thresholds.json +3 -2
- package/expo/package-lisa/package.lisa.json +4 -2
- package/harper-fabric/copy-overwrite/eslint.config.ts +24 -2
- package/nestjs/copy-overwrite/eslint.config.ts +27 -3
- package/nestjs/copy-overwrite/eslint.slow.config.ts +33 -2
- package/package.json +2 -1
- package/phaser/copy-contents/gitignore +13 -0
- package/phaser/copy-overwrite/.github/workflows/ci.yml +3 -0
- package/phaser/copy-overwrite/.husky/pre-push.verify +4 -1
- package/phaser/copy-overwrite/eslint.config.ts +28 -3
- 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/rails/create-only/.github/workflows/ci.yml +12 -0
- package/scripts/check-learnings-budget.ts +219 -0
- package/typescript/copy-contents/.husky/pre-commit +4 -1
- package/typescript/copy-overwrite/audit.ignore.config.json +0 -5
- package/typescript/copy-overwrite/eslint.config.ts +27 -3
- package/typescript/copy-overwrite/eslint.slow.config.ts +32 -1
- package/typescript/package-lisa/package.lisa.json +4 -2
|
@@ -13,14 +13,43 @@
|
|
|
13
13
|
* files, since NestJS uses `forwardRef()` to handle circular module
|
|
14
14
|
* dependencies at runtime.
|
|
15
15
|
*
|
|
16
|
+
* The optional (create-only) eslint.ignore.config.local.json `ignores` are
|
|
17
|
+
* merged into the ignore list so host customizations survive the
|
|
18
|
+
* copy-overwrite of eslint.ignore.config.json on each Lisa update.
|
|
19
|
+
*
|
|
16
20
|
* @see https://github.com/import-js/eslint-plugin-import
|
|
17
21
|
* @module eslint.slow.config
|
|
18
22
|
*/
|
|
23
|
+
import { existsSync } from "fs";
|
|
24
|
+
import { createRequire } from "module";
|
|
25
|
+
import path from "path";
|
|
26
|
+
import { fileURLToPath } from "url";
|
|
27
|
+
|
|
19
28
|
import { getSlowConfig } from "@codyswann/lisa/eslint/slow";
|
|
29
|
+
|
|
20
30
|
import ignoreConfig from "./eslint.ignore.config.json" with { type: "json" };
|
|
21
31
|
|
|
22
|
-
|
|
23
|
-
|
|
32
|
+
const require = createRequire(import.meta.url);
|
|
33
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
34
|
+
const __dirname = path.dirname(__filename);
|
|
35
|
+
|
|
36
|
+
// Merge the optional project-owned eslint.ignore.config.local.json (create-only,
|
|
37
|
+
// never copy-overwritten) so host ignore customizations are not wiped when Lisa
|
|
38
|
+
// overwrites eslint.ignore.config.json on update.
|
|
39
|
+
const localIgnores: string[] = existsSync(
|
|
40
|
+
path.join(__dirname, "eslint.ignore.config.local.json")
|
|
41
|
+
)
|
|
42
|
+
? (require("./eslint.ignore.config.local.json").ignores ?? [])
|
|
43
|
+
: [];
|
|
44
|
+
|
|
45
|
+
// Annotate with the factory's return type so `tsc --noEmit` under
|
|
46
|
+
// `declaration: true` does not surface @eslint/core's `RulesConfig` in the
|
|
47
|
+
// emitted declaration (TS2883). Do NOT import `Linter` from "eslint" directly —
|
|
48
|
+
// that trips knip's unlisted-dependency check.
|
|
49
|
+
const config: ReturnType<typeof getSlowConfig> = [
|
|
50
|
+
...getSlowConfig({
|
|
51
|
+
ignorePatterns: [...(ignoreConfig.ignores || []), ...localIgnores],
|
|
52
|
+
}),
|
|
24
53
|
|
|
25
54
|
// NestJS modules use forwardRef() to resolve circular dependencies at runtime.
|
|
26
55
|
// ESLint's static import/no-cycle analysis cannot understand this pattern.
|
|
@@ -31,3 +60,5 @@ export default [
|
|
|
31
60
|
},
|
|
32
61
|
},
|
|
33
62
|
];
|
|
63
|
+
|
|
64
|
+
export default config;
|
package/package.json
CHANGED
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"lisa:commit-and-pr:local": "bash scripts/lisa-commit-and-pr-local.sh",
|
|
32
32
|
"prepublishOnly": "$npm_execpath run build",
|
|
33
33
|
"check:plugins": "bash scripts/check-plugins-sync.sh",
|
|
34
|
+
"check:learnings-budget": "bun scripts/check-learnings-budget.ts",
|
|
34
35
|
"check:rules-pairing": "bash scripts/check-rules-pairing.sh",
|
|
35
36
|
"check:workflow-inputs": "node scripts/detect-stale-workflow-inputs.mjs --project . --project typescript/create-only --project rails/create-only --json"
|
|
36
37
|
},
|
|
@@ -101,7 +102,7 @@
|
|
|
101
102
|
"form-data": ">=4.0.6"
|
|
102
103
|
},
|
|
103
104
|
"name": "@codyswann/lisa",
|
|
104
|
-
"version": "2.
|
|
105
|
+
"version": "2.220.0",
|
|
105
106
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
106
107
|
"main": "dist/index.js",
|
|
107
108
|
"exports": {
|
|
@@ -2,4 +2,17 @@
|
|
|
2
2
|
.vite/
|
|
3
3
|
.lisabak/
|
|
4
4
|
.lisabak
|
|
5
|
+
|
|
6
|
+
# The base guardrails block ignores any `example/` directory, which would
|
|
7
|
+
# otherwise re-ignore the committed Phaser example art. Re-include the example
|
|
8
|
+
# asset folders here (this block is written after the base block, so
|
|
9
|
+
# last-match-wins keeps them tracked). Both the folder and a `/**` recursion
|
|
10
|
+
# are needed — git will not re-include files inside an ignored directory
|
|
11
|
+
# unless the directory itself is un-ignored first.
|
|
12
|
+
!assets/src/sprites/example/
|
|
13
|
+
!assets/src/sprites/example/**
|
|
14
|
+
!assets/src/images/example/
|
|
15
|
+
!assets/src/images/example/**
|
|
16
|
+
!public/assets/images/example/
|
|
17
|
+
!public/assets/images/example/**
|
|
5
18
|
# END: AI GUARDRAILS PHASER
|
|
@@ -5,6 +5,9 @@ name: 🔍 CI Quality Checks
|
|
|
5
5
|
|
|
6
6
|
on:
|
|
7
7
|
pull_request:
|
|
8
|
+
# Include labeled/unlabeled so toggling the verification-exempt label
|
|
9
|
+
# re-runs CI (the verification gate keys on PR labels).
|
|
10
|
+
types: [opened, synchronize, reopened, labeled, unlabeled]
|
|
8
11
|
workflow_dispatch:
|
|
9
12
|
|
|
10
13
|
jobs:
|
|
@@ -15,5 +15,8 @@
|
|
|
15
15
|
#
|
|
16
16
|
if [ -f scripts/check-verification-coverage.mjs ]; then
|
|
17
17
|
echo "✅ Verification (UAT) coverage check..."
|
|
18
|
-
|
|
18
|
+
# No `|| exit 1`: this file is sourced by .husky/pre-push. A hard `exit`
|
|
19
|
+
# here would terminate the parent hook before it can print its own failure
|
|
20
|
+
# message — let the non-zero status bubble up to the caller's handler.
|
|
21
|
+
node scripts/check-verification-coverage.mjs
|
|
19
22
|
fi
|
|
@@ -7,11 +7,16 @@
|
|
|
7
7
|
* ESLint 9 Flat Config
|
|
8
8
|
*
|
|
9
9
|
* Thin wrapper around @codyswann/lisa Phaser config factory.
|
|
10
|
-
* Customize via eslint.config.local.ts
|
|
10
|
+
* Customize via eslint.config.local.ts, eslint.thresholds.json, and the
|
|
11
|
+
* optional (create-only) eslint.ignore.config.local.json — its `ignores` are
|
|
12
|
+
* merged into the ignore list so host customizations survive the
|
|
13
|
+
* copy-overwrite of eslint.ignore.config.json on each Lisa update.
|
|
11
14
|
*
|
|
12
15
|
* @see https://eslint.org/docs/latest/use/configure/configuration-files-new
|
|
13
16
|
* @module eslint.config
|
|
14
17
|
*/
|
|
18
|
+
import { existsSync } from "fs";
|
|
19
|
+
import { createRequire } from "module";
|
|
15
20
|
import path from "path";
|
|
16
21
|
import { fileURLToPath } from "url";
|
|
17
22
|
|
|
@@ -25,14 +30,34 @@ import ignoreConfig from "./eslint.ignore.config.json" with { type: "json" };
|
|
|
25
30
|
import thresholdsConfig from "./eslint.thresholds.json" with { type: "json" };
|
|
26
31
|
import localConfig from "./eslint.config.local";
|
|
27
32
|
|
|
33
|
+
const require = createRequire(import.meta.url);
|
|
28
34
|
const __filename = fileURLToPath(import.meta.url);
|
|
29
35
|
const __dirname = path.dirname(__filename);
|
|
30
36
|
|
|
31
|
-
|
|
37
|
+
// Merge the optional project-owned eslint.ignore.config.local.json (create-only,
|
|
38
|
+
// never copy-overwritten) so host ignore customizations are not wiped when Lisa
|
|
39
|
+
// overwrites eslint.ignore.config.json on update.
|
|
40
|
+
const localIgnores: string[] = existsSync(
|
|
41
|
+
path.join(__dirname, "eslint.ignore.config.local.json")
|
|
42
|
+
)
|
|
43
|
+
? (require("./eslint.ignore.config.local.json").ignores ?? [])
|
|
44
|
+
: [];
|
|
45
|
+
|
|
46
|
+
// Annotate with the factory's return type so `tsc --noEmit` under
|
|
47
|
+
// `declaration: true` does not surface @eslint/core's `RulesConfig` in the
|
|
48
|
+
// emitted declaration (TS2883). Do NOT import `Linter` from "eslint" directly —
|
|
49
|
+
// that trips knip's unlisted-dependency check.
|
|
50
|
+
const config: ReturnType<typeof getPhaserConfig> = [
|
|
32
51
|
...getPhaserConfig({
|
|
33
52
|
tsconfigRootDir: __dirname,
|
|
34
|
-
ignorePatterns: [
|
|
53
|
+
ignorePatterns: [
|
|
54
|
+
...defaultPhaserIgnores,
|
|
55
|
+
...(ignoreConfig.ignores || []),
|
|
56
|
+
...localIgnores,
|
|
57
|
+
],
|
|
35
58
|
thresholds: { ...defaultThresholds, ...thresholdsConfig },
|
|
36
59
|
}),
|
|
37
60
|
...localConfig,
|
|
38
61
|
];
|
|
62
|
+
|
|
63
|
+
export default config;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.220.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.220.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.220.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.220.0",
|
|
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": "2.
|
|
3
|
+
"version": "2.220.0",
|
|
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"
|