@codyswann/lisa 2.163.7 → 2.164.1

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.
Files changed (68) hide show
  1. package/dist/codex/hooks-installer.d.ts.map +1 -1
  2. package/dist/codex/hooks-installer.js +8 -0
  3. package/dist/codex/hooks-installer.js.map +1 -1
  4. package/dist/codex/scripts/lint-on-edit.sh +7 -9
  5. package/dist/codex/scripts/shell-write-nudge.sh +81 -0
  6. package/dist/opencode/plugin-templates/lisa-lint-on-edit.ts +8 -9
  7. package/package.json +1 -1
  8. package/plugins/lisa/.claude-plugin/plugin.json +10 -1
  9. package/plugins/lisa/.codex-plugin/hooks.json +11 -0
  10. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  11. package/plugins/lisa/hooks/shell-write-nudge.sh +86 -0
  12. package/plugins/lisa-agy/plugin.json +1 -1
  13. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  16. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-copilot/.claude-plugin/plugin.json +12 -1
  19. package/plugins/lisa-copilot/hooks/shell-write-nudge.sh +86 -0
  20. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-cursor/hooks/hooks.json +6 -0
  22. package/plugins/lisa-cursor/hooks/shell-write-nudge.sh +86 -0
  23. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  25. package/plugins/lisa-expo-agy/plugin.json +1 -1
  26. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  31. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  35. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  36. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  41. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  46. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-rails-agy/plugin.json +1 -1
  51. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-typescript/hooks/lint-on-edit.sh +15 -61
  56. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  57. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript-copilot/hooks/lint-on-edit.sh +15 -61
  59. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript-cursor/hooks/lint-on-edit.sh +15 -61
  61. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  64. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/src/base/.claude-plugin/plugin.json +6 -0
  67. package/plugins/src/base/hooks/shell-write-nudge.sh +86 -0
  68. package/plugins/src/typescript/hooks/lint-on-edit.sh +15 -61
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
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.163.7",
3
+ "version": "2.164.1",
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.163.7",
3
+ "version": "2.164.1",
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.163.7",
3
+ "version": "2.164.1",
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.163.7",
3
+ "version": "2.164.1",
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-phaser",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -4,17 +4,15 @@
4
4
  # =============================================================================
5
5
  # Lint-on-Edit Hook (PostToolUse - Write|Edit)
6
6
  # =============================================================================
7
- # Runs oxlint --fix, then ESLint --fix --quiet --cache on each edited
8
- # TypeScript file. Part of the inline self-correction pipeline:
9
- # prettier → ast-grep → oxlint --fix → eslint --fix
7
+ # Runs oxlint on each edited TypeScript file. Full ESLint remains enforced at
8
+ # the commit/CI chokepoint via the project lint scripts.
10
9
  #
11
- # oxlint runs first because it's a Rust-native linter (~1000x faster) that
12
- # covers the majority of rules, leaving only the slow / type-aware / plugin
13
- # rules for ESLint to handle.
10
+ # oxlint is Rust-native and covers the fast-feedback rule tier in milliseconds;
11
+ # ESLint stays out of the edit-time path.
14
12
  #
15
13
  # Behavior:
16
- # - Exit 0: lint passes or auto-fix resolved all errors
17
- # - Exit 2: unfixable errors remain blocks Claude so it fixes them immediately
14
+ # - Exit 0: lint passes
15
+ # - Exit 2: oxlint errors remain - blocks Claude so it fixes them immediately
18
16
  #
19
17
  # @see .claude/rules/verfication.md "Self-Correction Loop" section
20
18
  # =============================================================================
@@ -49,7 +47,7 @@ esac
49
47
 
50
48
  cd "$CLAUDE_PROJECT_DIR" || exit 0
51
49
 
52
- # Resolve oxlint and ESLint binaries — prefer local node_modules/.bin
50
+ # Resolve oxlint binary - prefer local node_modules/.bin
53
51
  if [ -x "./node_modules/.bin/oxlint" ]; then
54
52
  OXLINT_CMD="./node_modules/.bin/oxlint"
55
53
  elif [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
@@ -62,19 +60,7 @@ else
62
60
  OXLINT_CMD="npx oxlint"
63
61
  fi
64
62
 
65
- if [ -x "./node_modules/.bin/eslint" ]; then
66
- ESLINT_CMD="./node_modules/.bin/eslint"
67
- elif [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
68
- ESLINT_CMD="bunx eslint"
69
- elif [ -f "pnpm-lock.yaml" ]; then
70
- ESLINT_CMD="pnpm exec eslint"
71
- elif [ -f "yarn.lock" ]; then
72
- ESLINT_CMD="yarn exec eslint"
73
- else
74
- ESLINT_CMD="npx eslint"
75
- fi
76
-
77
- # 1) oxlint --fix (REQUIRED in the Phase 2 hybrid pipeline)
63
+ # oxlint (REQUIRED in the Phase 2 hybrid pipeline)
78
64
  # If oxlint is missing the project is out of sync with the current Lisa
79
65
  # governance — fail loudly rather than silently skipping. ESLint alone is
80
66
  # no longer a complete lint pass.
@@ -89,46 +75,14 @@ if [ ! -f ".oxlintrc.json" ] && [ ! -f ".oxlintrc.jsonc" ] && [ ! -f "oxlint.con
89
75
  exit 2
90
76
  fi
91
77
 
92
- echo "Running oxlint --fix on: $FILE_PATH"
93
- OX_OUTPUT=$($OXLINT_CMD --fix --quiet "$FILE_PATH" 2>&1)
78
+ echo "Running oxlint on: $FILE_PATH"
79
+ OX_OUTPUT=$($OXLINT_CMD --quiet "$FILE_PATH" 2>&1)
94
80
  OX_EXIT=$?
95
81
  if [ $OX_EXIT -ne 0 ]; then
96
- # Re-run without --fix to capture remaining errors
97
- OX_OUTPUT=$($OXLINT_CMD --quiet "$FILE_PATH" 2>&1)
98
- OX_EXIT=$?
99
- if [ $OX_EXIT -ne 0 ]; then
100
- echo "oxlint found unfixable errors in: $FILE_PATH" >&2
101
- echo "$OX_OUTPUT" >&2
102
- exit 2
103
- fi
104
- fi
105
-
106
- # 2) ESLint --fix --quiet --cache
107
- # --quiet: suppress warnings, only show errors
108
- # --cache: use ESLint cache for performance
109
- # --rule: disable no-unused-vars auto-fix to prevent removing imports that Claude
110
- # plans to use in a subsequent edit (pre-commit hook still catches them)
111
- echo "Running ESLint --fix on: $FILE_PATH"
112
-
113
- # First pass: attempt auto-fix
114
- OUTPUT=$($ESLINT_CMD --fix --quiet --cache --rule '@typescript-eslint/no-unused-vars: off' "$FILE_PATH" 2>&1)
115
- FIX_EXIT=$?
116
-
117
- if [ $FIX_EXIT -eq 0 ]; then
118
- echo "ESLint: No errors in $(basename "$FILE_PATH")"
119
- exit 0
120
- fi
121
-
122
- # Auto-fix resolved some issues but errors remain — re-run to get remaining errors
123
- OUTPUT=$($ESLINT_CMD --quiet --cache "$FILE_PATH" 2>&1)
124
- LINT_EXIT=$?
125
-
126
- if [ $LINT_EXIT -eq 0 ]; then
127
- echo "ESLint: Auto-fixed all errors in $(basename "$FILE_PATH")"
128
- exit 0
82
+ echo "oxlint found errors in: $FILE_PATH" >&2
83
+ echo "$OX_OUTPUT" >&2
84
+ exit 2
129
85
  fi
130
86
 
131
- # Unfixable errors remain block with feedback
132
- echo "ESLint found unfixable errors in: $FILE_PATH" >&2
133
- echo "$OUTPUT" >&2
134
- exit 2
87
+ echo "oxlint: No errors in $(basename "$FILE_PATH")"
88
+ exit 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -4,17 +4,15 @@
4
4
  # =============================================================================
5
5
  # Lint-on-Edit Hook (PostToolUse - Write|Edit)
6
6
  # =============================================================================
7
- # Runs oxlint --fix, then ESLint --fix --quiet --cache on each edited
8
- # TypeScript file. Part of the inline self-correction pipeline:
9
- # prettier → ast-grep → oxlint --fix → eslint --fix
7
+ # Runs oxlint on each edited TypeScript file. Full ESLint remains enforced at
8
+ # the commit/CI chokepoint via the project lint scripts.
10
9
  #
11
- # oxlint runs first because it's a Rust-native linter (~1000x faster) that
12
- # covers the majority of rules, leaving only the slow / type-aware / plugin
13
- # rules for ESLint to handle.
10
+ # oxlint is Rust-native and covers the fast-feedback rule tier in milliseconds;
11
+ # ESLint stays out of the edit-time path.
14
12
  #
15
13
  # Behavior:
16
- # - Exit 0: lint passes or auto-fix resolved all errors
17
- # - Exit 2: unfixable errors remain blocks Claude so it fixes them immediately
14
+ # - Exit 0: lint passes
15
+ # - Exit 2: oxlint errors remain - blocks Claude so it fixes them immediately
18
16
  #
19
17
  # @see .claude/rules/verfication.md "Self-Correction Loop" section
20
18
  # =============================================================================
@@ -49,7 +47,7 @@ esac
49
47
 
50
48
  cd "$CLAUDE_PROJECT_DIR" || exit 0
51
49
 
52
- # Resolve oxlint and ESLint binaries — prefer local node_modules/.bin
50
+ # Resolve oxlint binary - prefer local node_modules/.bin
53
51
  if [ -x "./node_modules/.bin/oxlint" ]; then
54
52
  OXLINT_CMD="./node_modules/.bin/oxlint"
55
53
  elif [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
@@ -62,19 +60,7 @@ else
62
60
  OXLINT_CMD="npx oxlint"
63
61
  fi
64
62
 
65
- if [ -x "./node_modules/.bin/eslint" ]; then
66
- ESLINT_CMD="./node_modules/.bin/eslint"
67
- elif [ -f "bun.lockb" ] || [ -f "bun.lock" ]; then
68
- ESLINT_CMD="bunx eslint"
69
- elif [ -f "pnpm-lock.yaml" ]; then
70
- ESLINT_CMD="pnpm exec eslint"
71
- elif [ -f "yarn.lock" ]; then
72
- ESLINT_CMD="yarn exec eslint"
73
- else
74
- ESLINT_CMD="npx eslint"
75
- fi
76
-
77
- # 1) oxlint --fix (REQUIRED in the Phase 2 hybrid pipeline)
63
+ # oxlint (REQUIRED in the Phase 2 hybrid pipeline)
78
64
  # If oxlint is missing the project is out of sync with the current Lisa
79
65
  # governance — fail loudly rather than silently skipping. ESLint alone is
80
66
  # no longer a complete lint pass.
@@ -89,46 +75,14 @@ if [ ! -f ".oxlintrc.json" ] && [ ! -f ".oxlintrc.jsonc" ] && [ ! -f "oxlint.con
89
75
  exit 2
90
76
  fi
91
77
 
92
- echo "Running oxlint --fix on: $FILE_PATH"
93
- OX_OUTPUT=$($OXLINT_CMD --fix --quiet "$FILE_PATH" 2>&1)
78
+ echo "Running oxlint on: $FILE_PATH"
79
+ OX_OUTPUT=$($OXLINT_CMD --quiet "$FILE_PATH" 2>&1)
94
80
  OX_EXIT=$?
95
81
  if [ $OX_EXIT -ne 0 ]; then
96
- # Re-run without --fix to capture remaining errors
97
- OX_OUTPUT=$($OXLINT_CMD --quiet "$FILE_PATH" 2>&1)
98
- OX_EXIT=$?
99
- if [ $OX_EXIT -ne 0 ]; then
100
- echo "oxlint found unfixable errors in: $FILE_PATH" >&2
101
- echo "$OX_OUTPUT" >&2
102
- exit 2
103
- fi
104
- fi
105
-
106
- # 2) ESLint --fix --quiet --cache
107
- # --quiet: suppress warnings, only show errors
108
- # --cache: use ESLint cache for performance
109
- # --rule: disable no-unused-vars auto-fix to prevent removing imports that Claude
110
- # plans to use in a subsequent edit (pre-commit hook still catches them)
111
- echo "Running ESLint --fix on: $FILE_PATH"
112
-
113
- # First pass: attempt auto-fix
114
- OUTPUT=$($ESLINT_CMD --fix --quiet --cache --rule '@typescript-eslint/no-unused-vars: off' "$FILE_PATH" 2>&1)
115
- FIX_EXIT=$?
116
-
117
- if [ $FIX_EXIT -eq 0 ]; then
118
- echo "ESLint: No errors in $(basename "$FILE_PATH")"
119
- exit 0
120
- fi
121
-
122
- # Auto-fix resolved some issues but errors remain — re-run to get remaining errors
123
- OUTPUT=$($ESLINT_CMD --quiet --cache "$FILE_PATH" 2>&1)
124
- LINT_EXIT=$?
125
-
126
- if [ $LINT_EXIT -eq 0 ]; then
127
- echo "ESLint: Auto-fixed all errors in $(basename "$FILE_PATH")"
128
- exit 0
82
+ echo "oxlint found errors in: $FILE_PATH" >&2
83
+ echo "$OX_OUTPUT" >&2
84
+ exit 2
129
85
  fi
130
86
 
131
- # Unfixable errors remain block with feedback
132
- echo "ESLint found unfixable errors in: $FILE_PATH" >&2
133
- echo "$OUTPUT" >&2
134
- exit 2
87
+ echo "oxlint: No errors in $(basename "$FILE_PATH")"
88
+ exit 0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.163.7",
3
+ "version": "2.164.1",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"