@codyswann/lisa 2.189.1 → 2.189.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.
Files changed (53) hide show
  1. package/package.json +2 -2
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa-agy/plugin.json +1 -1
  5. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  6. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  7. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  8. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  10. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  14. package/plugins/lisa-expo-agy/plugin.json +1 -1
  15. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  20. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  25. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  30. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  35. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-rails-agy/plugin.json +1 -1
  40. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  45. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  50. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  52. package/scripts/install-claude-plugins.sh +75 -17
  53. package/typescript/package-lisa/package.lisa.json +1 -1
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "knip:fix": "knip --fix",
19
19
  "sg:scan": "ast-grep scan",
20
20
  "build:plugins": "bash scripts/build-plugins.sh",
21
- "prepare": "node -e \"if (process.env.INIT_CWD && process.env.INIT_CWD.includes('.serverless')) { process.exit(0); }\" && husky install || true",
21
+ "prepare": "node -e \"if (process.env.INIT_CWD?.includes('.serverless')) process.exit(0); process.exit(1);\" || husky install || true",
22
22
  "start": "node dist/index.js",
23
23
  "dev": "tsx src/index.ts",
24
24
  "test:watch": "vitest",
@@ -94,7 +94,7 @@
94
94
  "ws": ">=8.20.1"
95
95
  },
96
96
  "name": "@codyswann/lisa",
97
- "version": "2.189.1",
97
+ "version": "2.189.3",
98
98
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
99
99
  "main": "dist/index.js",
100
100
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, 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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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.189.1",
3
+ "version": "2.189.3",
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-wiki",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.189.1",
3
+ "version": "2.189.3",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -6,16 +6,79 @@ set -euo pipefail
6
6
  PROJECT_ROOT="${npm_config_local_prefix:-${INIT_CWD:-}}"
7
7
  if [ -z "$PROJECT_ROOT" ]; then exit 0; fi
8
8
 
9
- LISA_DIR="$PROJECT_ROOT/node_modules/@codyswann/lisa"
10
- if [ ! -d "$LISA_DIR" ]; then exit 0; fi
9
+ SETTINGS_FILE="$PROJECT_ROOT/.claude/settings.json"
10
+
11
+ harness_includes_codex() {
12
+ [ "${IS_LISA_SELF:-false}" = "true" ] && return 0
13
+ node -e '
14
+ const fs = require("fs");
15
+ const path = process.argv[1];
16
+ try {
17
+ const parsed = JSON.parse(fs.readFileSync(path, "utf8"));
18
+ const harness = parsed.harness === "all" ? "fleet" : parsed.harness;
19
+ process.exit(harness === "codex" || harness === "fleet" ? 0 : 1);
20
+ } catch {
21
+ process.exit(1);
22
+ }
23
+ ' "$PROJECT_ROOT/.lisa.config.json" >/dev/null 2>&1
24
+ }
25
+
26
+ detect_lisa_stack() {
27
+ local settings_file="$1"
28
+ [ -f "$settings_file" ] || return 0
29
+ command -v jq >/dev/null 2>&1 || return 0
30
+ local stack
31
+ for stack in expo nestjs cdk harper-fabric rails; do
32
+ if jq -e "(.enabledPlugins // {}) | has(\"lisa-${stack}@lisa\")" "$settings_file" >/dev/null 2>&1; then
33
+ printf '%s\n' "$stack"
34
+ return 0
35
+ fi
36
+ done
37
+ }
38
+
39
+ install_codex_lisa_plugins() {
40
+ harness_includes_codex || return 0
41
+ command -v codex >/dev/null 2>&1 || return 0
42
+
43
+ # Codex reads the Lisa marketplace from the project/repo root. For the Lisa
44
+ # repo itself this points at the working tree, not node_modules, so postinstall
45
+ # never needs to run the full template/deletion engine just to expose skills.
46
+ (cd "$PROJECT_ROOT" && codex plugin marketplace add "$PROJECT_ROOT" </dev/null >/dev/null 2>&1) || true
47
+ (cd "$PROJECT_ROOT" && codex plugin add "lisa@lisa" </dev/null >/dev/null 2>&1) || true
48
+
49
+ local lisa_stack
50
+ lisa_stack="$(detect_lisa_stack "$SETTINGS_FILE")"
51
+ case "$lisa_stack" in
52
+ rails) ;;
53
+ *)
54
+ (cd "$PROJECT_ROOT" && codex plugin add "lisa-typescript@lisa" </dev/null >/dev/null 2>&1) || true
55
+ ;;
56
+ esac
57
+
58
+ if [ -n "$lisa_stack" ]; then
59
+ (cd "$PROJECT_ROOT" && codex plugin add "lisa-${lisa_stack}@lisa" </dev/null >/dev/null 2>&1) || true
60
+ fi
61
+ }
11
62
 
12
63
  # Skip running Lisa on itself — the Lisa repo IS the template source.
13
- # Self-running causes chicken-and-egg issues (npm package deletes source files).
64
+ # Self-running the full apply causes chicken-and-egg issues (npm package
65
+ # deletes source files). The self path below only registers plugin surfaces.
14
66
  PACKAGE_NAME=$(node -e "console.log(require('$PROJECT_ROOT/package.json').name || '')" 2>/dev/null || true)
15
- if [ "$PACKAGE_NAME" = "@codyswann/lisa" ]; then exit 0; fi
67
+ IS_LISA_SELF=false
68
+ if [ "$PACKAGE_NAME" = "@codyswann/lisa" ]; then
69
+ IS_LISA_SELF=true
70
+ LISA_DIR="$PROJECT_ROOT"
71
+ else
72
+ LISA_DIR="$PROJECT_ROOT/node_modules/@codyswann/lisa"
73
+ if [ ! -d "$LISA_DIR" ]; then exit 0; fi
74
+ fi
16
75
 
17
76
  cd "$PROJECT_ROOT"
18
77
 
78
+ if [ "$IS_LISA_SELF" = "true" ]; then
79
+ install_codex_lisa_plugins
80
+ fi
81
+
19
82
  # Apply Lisa templates non-interactively (init when missing, update when present),
20
83
  # EXCEPT in CI. --skip-git-check bypasses the dirty working directory check since
21
84
  # package.json and the lockfile are always uncommitted during postinstall.
@@ -34,18 +97,21 @@ cd "$PROJECT_ROOT"
34
97
  # each path is written exactly once by its most-specific stack — there is no
35
98
  # intermediate clobbered state to be interrupted in. See src/core/lisa.ts
36
99
  # loadCopyOverwriteOwnership.
37
- if [ -z "${CI:-}" ]; then
100
+ if [ "$IS_LISA_SELF" != "true" ] && [ -z "${CI:-}" ]; then
38
101
  if ! node "$LISA_DIR/dist/index.js" --yes --skip-git-check "$PROJECT_ROOT"; then
39
102
  echo "⚠️ Warning: Lisa template application failed. Migration may be incomplete." >&2
40
103
  fi
41
104
  fi
42
105
 
106
+ if [ "$IS_LISA_SELF" != "true" ]; then
107
+ install_codex_lisa_plugins
108
+ fi
109
+
43
110
  # Strip only hook entries that reference deleted .claude/hooks/*.sh scripts
44
111
  # (hooks moved to plugin.json; file-path hooks would produce "No such file or directory" errors).
45
112
  # Preserve inline command hooks (e.g. `command -v entire ...`, `echo ...`) and stack-template hooks
46
113
  # from rails/merge/.claude/settings.json.
47
- SETTINGS_FILE="$PROJECT_ROOT/.claude/settings.json"
48
- if [ -f "$SETTINGS_FILE" ] && command -v python3 >/dev/null 2>&1; then
114
+ if [ "$IS_LISA_SELF" != "true" ] && [ -f "$SETTINGS_FILE" ] && command -v python3 >/dev/null 2>&1; then
49
115
  python3 - "$SETTINGS_FILE" <<'PYEOF'
50
116
  import json, sys
51
117
  path = sys.argv[1]
@@ -132,7 +198,7 @@ fi
132
198
  # here — but ONLY the Lisa-shipped file (identified by its marker rule name), so a
133
199
  # project's own hand-authored `.safety-net.json` is never touched.
134
200
  LEGACY_SAFETY_NET="$PROJECT_ROOT/.safety-net.json"
135
- if [ -f "$LEGACY_SAFETY_NET" ] && command -v jq >/dev/null 2>&1; then
201
+ if [ "$IS_LISA_SELF" != "true" ] && [ -f "$LEGACY_SAFETY_NET" ] && command -v jq >/dev/null 2>&1; then
136
202
  if jq -e '
137
203
  (.rules | type == "array")
138
204
  and ([.rules[]?.name] | index("block-git-commit-no-verify") != null)
@@ -255,15 +321,7 @@ fi
255
321
  claude plugin install "lisa@lisa" --scope project </dev/null 2>&1 || true
256
322
 
257
323
  # Detect which stack plugin to install from .claude/settings.json
258
- LISA_STACK=""
259
- if [ -f "$SETTINGS_FILE" ] && command -v jq >/dev/null 2>&1; then
260
- for stack in expo nestjs cdk harper-fabric rails; do
261
- if jq -e "(.enabledPlugins // {}) | has(\"lisa-${stack}@lisa\")" "$SETTINGS_FILE" >/dev/null 2>&1; then
262
- LISA_STACK="$stack"
263
- break
264
- fi
265
- done
266
- fi
324
+ LISA_STACK="$(detect_lisa_stack "$SETTINGS_FILE")"
267
325
 
268
326
  # Install typescript layer for all TS-based stacks (everything except rails)
269
327
  case "$LISA_STACK" in
@@ -16,7 +16,7 @@
16
16
  "knip:check": "knip",
17
17
  "knip:fix": "knip --fix",
18
18
  "sg:scan": "ast-grep scan",
19
- "prepare": "node -e \"if (process.env.INIT_CWD && process.env.INIT_CWD.includes('.serverless')) { process.exit(0); }\" && husky install || true"
19
+ "prepare": "node -e \"if (process.env.INIT_CWD?.includes('.serverless')) process.exit(0); process.exit(1);\" || husky install || true"
20
20
  },
21
21
  "devDependencies": {
22
22
  "eslint-plugin-oxlint": "^1.62.0",