@codyswann/lisa 4.53.4 → 4.53.5

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 (59) hide show
  1. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  2. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  3. package/dist/core/upstream-evidence-manifest.js +6 -4
  4. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  5. package/expo/copy-overwrite/plugins/withAndroidSplashNoClientExit.js +106 -8
  6. package/package.json +4 -4
  7. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  8. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  9. package/plugins/lisa-agy/plugin.json +1 -1
  10. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  13. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-expo-agy/plugin.json +1 -1
  20. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  30. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  34. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  35. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  39. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  40. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  44. package/plugins/lisa-rails-agy/plugin.json +1 -1
  45. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  49. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  50. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  55. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  57. package/typescript/copy-contents/.husky/commit-msg +52 -14
  58. package/typescript/copy-contents/.husky/pre-commit +52 -18
  59. package/typescript/copy-contents/.husky/pre-push +52 -14
@@ -1,21 +1,59 @@
1
1
  # BEGIN: AI GUARDRAILS
2
2
 
3
- # Detect package manager (check if tool is available before using it)
4
- # Priority: bun > yarn > npm (bun first since package.json engines prefer it)
5
- if ([ -f "bun.lockb" ] || [ -f "bun.lock" ]) && command -v bun >/dev/null 2>&1; then
6
- PACKAGE_MANAGER="bun"
7
- EXECUTOR="bunx"
8
- elif [ -f "yarn.lock" ] && command -v yarn >/dev/null 2>&1; then
9
- PACKAGE_MANAGER="yarn"
10
- EXECUTOR="yarn"
11
- elif [ -f "package-lock.json" ]; then
12
- PACKAGE_MANAGER="npm"
13
- EXECUTOR="npx"
14
- else
15
- # Default to npm if no lock file is found or tool is not available
3
+ # --- lisa:pm-detect ---
4
+ # Detect the package manager this project wants, honoring explicit opt-outs.
5
+ # Precedence: packageManager field > engines "please-use-<pm>" sentinel >
6
+ # lockfile presence (minus any PM the engines forbid) > npm default.
7
+ #
8
+ # The order this replaced claimed to come from `package.json` engines and never
9
+ # read them. Two things were wrong with that. It keyed on lockfile presence
10
+ # ALONE, which is the one thing this product's own installer hook says it must
11
+ # not do: an npm-only project (engines.bun = "please-use-npm", CI runs
12
+ # `npm ci`) that picks up a stray bun.lock gets bun here and npm there, so two
13
+ # Lisa components in one repository disagree about which manager runs the
14
+ # gates. And the justification described LISA's package.json, copied verbatim
15
+ # into repositories whose engines say something else entirely.
16
+ #
17
+ # `pnpm` was absent from the chain, so a pnpm project matched no branch and
18
+ # fell through to npm. Seven sibling detectors in this product already know
19
+ # `pnpm-lock.yaml`; this family was the only one that did not.
20
+ #
21
+ # Kept in step with `install-pkgs.sh`, deliberately: the two must agree, and
22
+ # the failure mode of drift is silent disagreement rather than an error.
23
+ lisa_detect_pm() {
24
+ _field="" _forced="" _forbidden=""
25
+ if [ -f package.json ] && command -v jq >/dev/null 2>&1; then
26
+ _field=$(jq -r '(.packageManager // "") | sub("@.*$";"")' package.json 2>/dev/null)
27
+ _forced=$(jq -r 'first((.engines // {})[] | strings | capture("please-use-(?<pm>bun|npm|yarn|pnpm)")?.pm) // ""' package.json 2>/dev/null)
28
+ _forbidden=$(jq -r '[(.engines // {}) | to_entries[] | select(((.value|strings) // "") | test("please-use|do-not-use";"i")) | .key] | join(" ")' package.json 2>/dev/null)
29
+ fi
30
+ case "$_field" in bun | npm | yarn | pnpm) printf '%s\n' "$_field"; return 0 ;; esac
31
+ case "$_forced" in bun | npm | yarn | pnpm) printf '%s\n' "$_forced"; return 0 ;; esac
32
+ _pm_allowed() { case " $_forbidden " in *" $1 "*) return 1 ;; *) return 0 ;; esac; }
33
+ if { [ -f bun.lockb ] || [ -f bun.lock ]; } && _pm_allowed bun; then printf 'bun\n'; return 0; fi
34
+ if [ -f pnpm-lock.yaml ] && _pm_allowed pnpm; then printf 'pnpm\n'; return 0; fi
35
+ if [ -f yarn.lock ] && _pm_allowed yarn; then printf 'yarn\n'; return 0; fi
36
+ if [ -f package-lock.json ] && _pm_allowed npm; then printf 'npm\n'; return 0; fi
37
+ printf 'npm\n'
38
+ }
39
+
40
+ PACKAGE_MANAGER="$(lisa_detect_pm)"
41
+ # A manager that is not installed is NAMED, never silently swapped. The branch
42
+ # this replaced answered "npm" for three different inputs — a pnpm project, a
43
+ # bun project on a machine without bun, a yarn project without yarn — and
44
+ # printed that answer as a detection. A confident wrong tool at commit time
45
+ # costs more than a named fallback.
46
+ if ! command -v "$PACKAGE_MANAGER" >/dev/null 2>&1; then
47
+ echo "⚠️ $PACKAGE_MANAGER is this project's package manager but is not on PATH; running gates with npm instead."
16
48
  PACKAGE_MANAGER="npm"
17
- EXECUTOR="npx"
18
49
  fi
50
+ case "$PACKAGE_MANAGER" in
51
+ bun) RUNNER="bun run"; EXECUTOR="bunx" ;;
52
+ pnpm) RUNNER="pnpm run"; EXECUTOR="pnpm exec" ;;
53
+ yarn) RUNNER="yarn"; EXECUTOR="yarn" ;;
54
+ *) RUNNER="npm run"; EXECUTOR="npx" ;;
55
+ esac
56
+ # --- end lisa:pm-detect ---
19
57
 
20
58
  # Get the commit message file path
21
59
  COMMIT_MSG_FILE=$1
@@ -1,24 +1,58 @@
1
1
  # BEGIN: AI GUARDRAILS
2
- # Detect package manager (check if tool is available before using it)
3
- # Priority: bun > yarn > npm (bun first since package.json engines prefer it)
4
- if ([ -f "bun.lockb" ] || [ -f "bun.lock" ]) && command -v bun >/dev/null 2>&1; then
5
- PACKAGE_MANAGER="bun"
6
- RUNNER="bun run"
7
- EXECUTOR="bunx"
8
- elif [ -f "yarn.lock" ] && command -v yarn >/dev/null 2>&1; then
9
- PACKAGE_MANAGER="yarn"
10
- RUNNER="yarn"
11
- EXECUTOR="yarn"
12
- elif [ -f "package-lock.json" ]; then
13
- PACKAGE_MANAGER="npm"
14
- RUNNER="npm run"
15
- EXECUTOR="npx"
16
- else
17
- # Default to npm if no lock file is found or tool is not available
2
+ # --- lisa:pm-detect ---
3
+ # Detect the package manager this project wants, honoring explicit opt-outs.
4
+ # Precedence: packageManager field > engines "please-use-<pm>" sentinel >
5
+ # lockfile presence (minus any PM the engines forbid) > npm default.
6
+ #
7
+ # The order this replaced claimed to come from `package.json` engines and never
8
+ # read them. Two things were wrong with that. It keyed on lockfile presence
9
+ # ALONE, which is the one thing this product's own installer hook says it must
10
+ # not do: an npm-only project (engines.bun = "please-use-npm", CI runs
11
+ # `npm ci`) that picks up a stray bun.lock gets bun here and npm there, so two
12
+ # Lisa components in one repository disagree about which manager runs the
13
+ # gates. And the justification described LISA's package.json, copied verbatim
14
+ # into repositories whose engines say something else entirely.
15
+ #
16
+ # `pnpm` was absent from the chain, so a pnpm project matched no branch and
17
+ # fell through to npm. Seven sibling detectors in this product already know
18
+ # `pnpm-lock.yaml`; this family was the only one that did not.
19
+ #
20
+ # Kept in step with `install-pkgs.sh`, deliberately: the two must agree, and
21
+ # the failure mode of drift is silent disagreement rather than an error.
22
+ lisa_detect_pm() {
23
+ _field="" _forced="" _forbidden=""
24
+ if [ -f package.json ] && command -v jq >/dev/null 2>&1; then
25
+ _field=$(jq -r '(.packageManager // "") | sub("@.*$";"")' package.json 2>/dev/null)
26
+ _forced=$(jq -r 'first((.engines // {})[] | strings | capture("please-use-(?<pm>bun|npm|yarn|pnpm)")?.pm) // ""' package.json 2>/dev/null)
27
+ _forbidden=$(jq -r '[(.engines // {}) | to_entries[] | select(((.value|strings) // "") | test("please-use|do-not-use";"i")) | .key] | join(" ")' package.json 2>/dev/null)
28
+ fi
29
+ case "$_field" in bun | npm | yarn | pnpm) printf '%s\n' "$_field"; return 0 ;; esac
30
+ case "$_forced" in bun | npm | yarn | pnpm) printf '%s\n' "$_forced"; return 0 ;; esac
31
+ _pm_allowed() { case " $_forbidden " in *" $1 "*) return 1 ;; *) return 0 ;; esac; }
32
+ if { [ -f bun.lockb ] || [ -f bun.lock ]; } && _pm_allowed bun; then printf 'bun\n'; return 0; fi
33
+ if [ -f pnpm-lock.yaml ] && _pm_allowed pnpm; then printf 'pnpm\n'; return 0; fi
34
+ if [ -f yarn.lock ] && _pm_allowed yarn; then printf 'yarn\n'; return 0; fi
35
+ if [ -f package-lock.json ] && _pm_allowed npm; then printf 'npm\n'; return 0; fi
36
+ printf 'npm\n'
37
+ }
38
+
39
+ PACKAGE_MANAGER="$(lisa_detect_pm)"
40
+ # A manager that is not installed is NAMED, never silently swapped. The branch
41
+ # this replaced answered "npm" for three different inputs — a pnpm project, a
42
+ # bun project on a machine without bun, a yarn project without yarn — and
43
+ # printed that answer as a detection. A confident wrong tool at commit time
44
+ # costs more than a named fallback.
45
+ if ! command -v "$PACKAGE_MANAGER" >/dev/null 2>&1; then
46
+ echo "⚠️ $PACKAGE_MANAGER is this project's package manager but is not on PATH; running gates with npm instead."
18
47
  PACKAGE_MANAGER="npm"
19
- RUNNER="npm run"
20
- EXECUTOR="npx"
21
48
  fi
49
+ case "$PACKAGE_MANAGER" in
50
+ bun) RUNNER="bun run"; EXECUTOR="bunx" ;;
51
+ pnpm) RUNNER="pnpm run"; EXECUTOR="pnpm exec" ;;
52
+ yarn) RUNNER="yarn"; EXECUTOR="yarn" ;;
53
+ *) RUNNER="npm run"; EXECUTOR="npx" ;;
54
+ esac
55
+ # --- end lisa:pm-detect ---
22
56
 
23
57
  echo "📦 Using package manager: $PACKAGE_MANAGER"
24
58
 
@@ -480,22 +480,60 @@ for GIT_LOCAL_ENV_VAR in $GIT_LOCAL_ENV_VARS; do
480
480
  done
481
481
  unset GIT_LOCAL_ENV_VAR GIT_LOCAL_ENV_VARS
482
482
 
483
- # Detect package manager (check if tool is available before using it)
484
- # Priority: bun > yarn > npm (bun first since package.json engines prefer it)
485
- if ([ -f "bun.lockb" ] || [ -f "bun.lock" ]) && command -v bun >/dev/null 2>&1; then
486
- PACKAGE_MANAGER="bun"
487
- RUNNER="bun run"
488
- elif [ -f "yarn.lock" ] && command -v yarn >/dev/null 2>&1; then
489
- PACKAGE_MANAGER="yarn"
490
- RUNNER="yarn"
491
- elif [ -f "package-lock.json" ]; then
492
- PACKAGE_MANAGER="npm"
493
- RUNNER="npm run"
494
- else
495
- # Default to npm if no lock file is found or tool is not available
483
+ # --- lisa:pm-detect ---
484
+ # Detect the package manager this project wants, honoring explicit opt-outs.
485
+ # Precedence: packageManager field > engines "please-use-<pm>" sentinel >
486
+ # lockfile presence (minus any PM the engines forbid) > npm default.
487
+ #
488
+ # The order this replaced claimed to come from `package.json` engines and never
489
+ # read them. Two things were wrong with that. It keyed on lockfile presence
490
+ # ALONE, which is the one thing this product's own installer hook says it must
491
+ # not do: an npm-only project (engines.bun = "please-use-npm", CI runs
492
+ # `npm ci`) that picks up a stray bun.lock gets bun here and npm there, so two
493
+ # Lisa components in one repository disagree about which manager runs the
494
+ # gates. And the justification described LISA's package.json, copied verbatim
495
+ # into repositories whose engines say something else entirely.
496
+ #
497
+ # `pnpm` was absent from the chain, so a pnpm project matched no branch and
498
+ # fell through to npm. Seven sibling detectors in this product already know
499
+ # `pnpm-lock.yaml`; this family was the only one that did not.
500
+ #
501
+ # Kept in step with `install-pkgs.sh`, deliberately: the two must agree, and
502
+ # the failure mode of drift is silent disagreement rather than an error.
503
+ lisa_detect_pm() {
504
+ _field="" _forced="" _forbidden=""
505
+ if [ -f package.json ] && command -v jq >/dev/null 2>&1; then
506
+ _field=$(jq -r '(.packageManager // "") | sub("@.*$";"")' package.json 2>/dev/null)
507
+ _forced=$(jq -r 'first((.engines // {})[] | strings | capture("please-use-(?<pm>bun|npm|yarn|pnpm)")?.pm) // ""' package.json 2>/dev/null)
508
+ _forbidden=$(jq -r '[(.engines // {}) | to_entries[] | select(((.value|strings) // "") | test("please-use|do-not-use";"i")) | .key] | join(" ")' package.json 2>/dev/null)
509
+ fi
510
+ case "$_field" in bun | npm | yarn | pnpm) printf '%s\n' "$_field"; return 0 ;; esac
511
+ case "$_forced" in bun | npm | yarn | pnpm) printf '%s\n' "$_forced"; return 0 ;; esac
512
+ _pm_allowed() { case " $_forbidden " in *" $1 "*) return 1 ;; *) return 0 ;; esac; }
513
+ if { [ -f bun.lockb ] || [ -f bun.lock ]; } && _pm_allowed bun; then printf 'bun\n'; return 0; fi
514
+ if [ -f pnpm-lock.yaml ] && _pm_allowed pnpm; then printf 'pnpm\n'; return 0; fi
515
+ if [ -f yarn.lock ] && _pm_allowed yarn; then printf 'yarn\n'; return 0; fi
516
+ if [ -f package-lock.json ] && _pm_allowed npm; then printf 'npm\n'; return 0; fi
517
+ printf 'npm\n'
518
+ }
519
+
520
+ PACKAGE_MANAGER="$(lisa_detect_pm)"
521
+ # A manager that is not installed is NAMED, never silently swapped. The branch
522
+ # this replaced answered "npm" for three different inputs — a pnpm project, a
523
+ # bun project on a machine without bun, a yarn project without yarn — and
524
+ # printed that answer as a detection. A confident wrong tool at commit time
525
+ # costs more than a named fallback.
526
+ if ! command -v "$PACKAGE_MANAGER" >/dev/null 2>&1; then
527
+ echo "⚠️ $PACKAGE_MANAGER is this project's package manager but is not on PATH; running gates with npm instead."
496
528
  PACKAGE_MANAGER="npm"
497
- RUNNER="npm run"
498
529
  fi
530
+ case "$PACKAGE_MANAGER" in
531
+ bun) RUNNER="bun run"; EXECUTOR="bunx" ;;
532
+ pnpm) RUNNER="pnpm run"; EXECUTOR="pnpm exec" ;;
533
+ yarn) RUNNER="yarn"; EXECUTOR="yarn" ;;
534
+ *) RUNNER="npm run"; EXECUTOR="npx" ;;
535
+ esac
536
+ # --- end lisa:pm-detect ---
499
537
 
500
538
  echo "📦 Using package manager: $PACKAGE_MANAGER"
501
539