@codyswann/lisa 2.158.0 → 2.158.2
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/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/parity-safety-net.sh +25 -7
- 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-copilot/hooks/parity-safety-net.sh +25 -7
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/parity-safety-net.sh +25 -7
- 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-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/plugins/src/base/hooks/parity-safety-net.sh +25 -7
package/package.json
CHANGED
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"lodash": ">=4.18.1"
|
|
85
85
|
},
|
|
86
86
|
"name": "@codyswann/lisa",
|
|
87
|
-
"version": "2.158.
|
|
87
|
+
"version": "2.158.2",
|
|
88
88
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
89
89
|
"main": "dist/index.js",
|
|
90
90
|
"exports": {
|
|
@@ -61,14 +61,32 @@ fi
|
|
|
61
61
|
|
|
62
62
|
# 2. Force-pushing a protected branch. `--force-with-lease` is the safe,
|
|
63
63
|
# non-clobbering alternative and is intentionally NOT blocked.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
#
|
|
65
|
+
# The force flag AND the protected-branch name must appear in the SAME
|
|
66
|
+
# `git push` statement. Checking them independently over the whole command is
|
|
67
|
+
# a false-positive magnet: an unrelated `-f` (a `[ -f file ]` test, `rm -f`,
|
|
68
|
+
# `grep -f`, `tail -f`) plus an unrelated protected name (`--base main`,
|
|
69
|
+
# `origin/main`, `git fetch origin main`) alongside any feature-branch
|
|
70
|
+
# `git push` would wrongly block. So split the command into statements
|
|
71
|
+
# (`;`, `&&`, `||`, `|`, newlines), keep only the `git push` segments, and
|
|
72
|
+
# inspect each in isolation — a real `git push --force origin main` still
|
|
73
|
+
# matches, while a feature-branch push next to `[ -f ]`/`--base main` passes.
|
|
74
|
+
# Normalize bash line-continuations (backslash + newline → space) before
|
|
75
|
+
# segmenting the command. Without this, "git push --force origin \<newline>main"
|
|
76
|
+
# gets split by the grep into a segment that matches --force but not `main`,
|
|
77
|
+
# letting a protected force-push slip past the guard.
|
|
78
|
+
normalized_command_str="$(printf '%s' "$command_str" | sed ':a;N;$!ba;s/\\\n/ /g')"
|
|
79
|
+
|
|
80
|
+
while IFS= read -r push_stmt; do
|
|
81
|
+
if printf '%s' "$push_stmt" \
|
|
82
|
+
| grep -Eiq '(--force([[:space:]]|=|$)|[[:space:]]-f([[:space:]]|$))' \
|
|
83
|
+
&& ! printf '%s' "$push_stmt" | grep -Eiq -- '--force-with-lease' \
|
|
84
|
+
&& printf '%s' "$push_stmt" \
|
|
85
|
+
| grep -Eiq '(^|[^[:alnum:]_/-])(main|master|production|prod|release)([^[:alnum:]_/-]|$)'; then
|
|
86
|
+
block "force-pushing a protected branch (use --force-with-lease, or push a feature branch)"
|
|
70
87
|
fi
|
|
71
|
-
|
|
88
|
+
done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
|
|
89
|
+
| grep -Ei '(^|[^[:alnum:]_-])git[[:space:]]+push\b')
|
|
72
90
|
|
|
73
91
|
# 3. `git reset --hard` while the working tree has uncommitted changes — this
|
|
74
92
|
# silently discards them. Only blocks when the tree is actually dirty, so a
|
|
@@ -61,14 +61,32 @@ fi
|
|
|
61
61
|
|
|
62
62
|
# 2. Force-pushing a protected branch. `--force-with-lease` is the safe,
|
|
63
63
|
# non-clobbering alternative and is intentionally NOT blocked.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
#
|
|
65
|
+
# The force flag AND the protected-branch name must appear in the SAME
|
|
66
|
+
# `git push` statement. Checking them independently over the whole command is
|
|
67
|
+
# a false-positive magnet: an unrelated `-f` (a `[ -f file ]` test, `rm -f`,
|
|
68
|
+
# `grep -f`, `tail -f`) plus an unrelated protected name (`--base main`,
|
|
69
|
+
# `origin/main`, `git fetch origin main`) alongside any feature-branch
|
|
70
|
+
# `git push` would wrongly block. So split the command into statements
|
|
71
|
+
# (`;`, `&&`, `||`, `|`, newlines), keep only the `git push` segments, and
|
|
72
|
+
# inspect each in isolation — a real `git push --force origin main` still
|
|
73
|
+
# matches, while a feature-branch push next to `[ -f ]`/`--base main` passes.
|
|
74
|
+
# Normalize bash line-continuations (backslash + newline → space) before
|
|
75
|
+
# segmenting the command. Without this, "git push --force origin \<newline>main"
|
|
76
|
+
# gets split by the grep into a segment that matches --force but not `main`,
|
|
77
|
+
# letting a protected force-push slip past the guard.
|
|
78
|
+
normalized_command_str="$(printf '%s' "$command_str" | sed ':a;N;$!ba;s/\\\n/ /g')"
|
|
79
|
+
|
|
80
|
+
while IFS= read -r push_stmt; do
|
|
81
|
+
if printf '%s' "$push_stmt" \
|
|
82
|
+
| grep -Eiq '(--force([[:space:]]|=|$)|[[:space:]]-f([[:space:]]|$))' \
|
|
83
|
+
&& ! printf '%s' "$push_stmt" | grep -Eiq -- '--force-with-lease' \
|
|
84
|
+
&& printf '%s' "$push_stmt" \
|
|
85
|
+
| grep -Eiq '(^|[^[:alnum:]_/-])(main|master|production|prod|release)([^[:alnum:]_/-]|$)'; then
|
|
86
|
+
block "force-pushing a protected branch (use --force-with-lease, or push a feature branch)"
|
|
70
87
|
fi
|
|
71
|
-
|
|
88
|
+
done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
|
|
89
|
+
| grep -Ei '(^|[^[:alnum:]_-])git[[:space:]]+push\b')
|
|
72
90
|
|
|
73
91
|
# 3. `git reset --hard` while the working tree has uncommitted changes — this
|
|
74
92
|
# silently discards them. Only blocks when the tree is actually dirty, so a
|
|
@@ -61,14 +61,32 @@ fi
|
|
|
61
61
|
|
|
62
62
|
# 2. Force-pushing a protected branch. `--force-with-lease` is the safe,
|
|
63
63
|
# non-clobbering alternative and is intentionally NOT blocked.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
#
|
|
65
|
+
# The force flag AND the protected-branch name must appear in the SAME
|
|
66
|
+
# `git push` statement. Checking them independently over the whole command is
|
|
67
|
+
# a false-positive magnet: an unrelated `-f` (a `[ -f file ]` test, `rm -f`,
|
|
68
|
+
# `grep -f`, `tail -f`) plus an unrelated protected name (`--base main`,
|
|
69
|
+
# `origin/main`, `git fetch origin main`) alongside any feature-branch
|
|
70
|
+
# `git push` would wrongly block. So split the command into statements
|
|
71
|
+
# (`;`, `&&`, `||`, `|`, newlines), keep only the `git push` segments, and
|
|
72
|
+
# inspect each in isolation — a real `git push --force origin main` still
|
|
73
|
+
# matches, while a feature-branch push next to `[ -f ]`/`--base main` passes.
|
|
74
|
+
# Normalize bash line-continuations (backslash + newline → space) before
|
|
75
|
+
# segmenting the command. Without this, "git push --force origin \<newline>main"
|
|
76
|
+
# gets split by the grep into a segment that matches --force but not `main`,
|
|
77
|
+
# letting a protected force-push slip past the guard.
|
|
78
|
+
normalized_command_str="$(printf '%s' "$command_str" | sed ':a;N;$!ba;s/\\\n/ /g')"
|
|
79
|
+
|
|
80
|
+
while IFS= read -r push_stmt; do
|
|
81
|
+
if printf '%s' "$push_stmt" \
|
|
82
|
+
| grep -Eiq '(--force([[:space:]]|=|$)|[[:space:]]-f([[:space:]]|$))' \
|
|
83
|
+
&& ! printf '%s' "$push_stmt" | grep -Eiq -- '--force-with-lease' \
|
|
84
|
+
&& printf '%s' "$push_stmt" \
|
|
85
|
+
| grep -Eiq '(^|[^[:alnum:]_/-])(main|master|production|prod|release)([^[:alnum:]_/-]|$)'; then
|
|
86
|
+
block "force-pushing a protected branch (use --force-with-lease, or push a feature branch)"
|
|
70
87
|
fi
|
|
71
|
-
|
|
88
|
+
done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
|
|
89
|
+
| grep -Ei '(^|[^[:alnum:]_-])git[[:space:]]+push\b')
|
|
72
90
|
|
|
73
91
|
# 3. `git reset --hard` while the working tree has uncommitted changes — this
|
|
74
92
|
# silently discards them. Only blocks when the tree is actually dirty, so a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.158.
|
|
3
|
+
"version": "2.158.2",
|
|
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.158.
|
|
3
|
+
"version": "2.158.2",
|
|
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.158.
|
|
3
|
+
"version": "2.158.2",
|
|
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.158.
|
|
3
|
+
"version": "2.158.2",
|
|
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.158.
|
|
3
|
+
"version": "2.158.2",
|
|
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"
|
|
@@ -61,14 +61,32 @@ fi
|
|
|
61
61
|
|
|
62
62
|
# 2. Force-pushing a protected branch. `--force-with-lease` is the safe,
|
|
63
63
|
# non-clobbering alternative and is intentionally NOT blocked.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
#
|
|
65
|
+
# The force flag AND the protected-branch name must appear in the SAME
|
|
66
|
+
# `git push` statement. Checking them independently over the whole command is
|
|
67
|
+
# a false-positive magnet: an unrelated `-f` (a `[ -f file ]` test, `rm -f`,
|
|
68
|
+
# `grep -f`, `tail -f`) plus an unrelated protected name (`--base main`,
|
|
69
|
+
# `origin/main`, `git fetch origin main`) alongside any feature-branch
|
|
70
|
+
# `git push` would wrongly block. So split the command into statements
|
|
71
|
+
# (`;`, `&&`, `||`, `|`, newlines), keep only the `git push` segments, and
|
|
72
|
+
# inspect each in isolation — a real `git push --force origin main` still
|
|
73
|
+
# matches, while a feature-branch push next to `[ -f ]`/`--base main` passes.
|
|
74
|
+
# Normalize bash line-continuations (backslash + newline → space) before
|
|
75
|
+
# segmenting the command. Without this, "git push --force origin \<newline>main"
|
|
76
|
+
# gets split by the grep into a segment that matches --force but not `main`,
|
|
77
|
+
# letting a protected force-push slip past the guard.
|
|
78
|
+
normalized_command_str="$(printf '%s' "$command_str" | sed ':a;N;$!ba;s/\\\n/ /g')"
|
|
79
|
+
|
|
80
|
+
while IFS= read -r push_stmt; do
|
|
81
|
+
if printf '%s' "$push_stmt" \
|
|
82
|
+
| grep -Eiq '(--force([[:space:]]|=|$)|[[:space:]]-f([[:space:]]|$))' \
|
|
83
|
+
&& ! printf '%s' "$push_stmt" | grep -Eiq -- '--force-with-lease' \
|
|
84
|
+
&& printf '%s' "$push_stmt" \
|
|
85
|
+
| grep -Eiq '(^|[^[:alnum:]_/-])(main|master|production|prod|release)([^[:alnum:]_/-]|$)'; then
|
|
86
|
+
block "force-pushing a protected branch (use --force-with-lease, or push a feature branch)"
|
|
70
87
|
fi
|
|
71
|
-
|
|
88
|
+
done < <(printf '%s' "$normalized_command_str" | tr '&|;' '\n' \
|
|
89
|
+
| grep -Ei '(^|[^[:alnum:]_-])git[[:space:]]+push\b')
|
|
72
90
|
|
|
73
91
|
# 3. `git reset --hard` while the working tree has uncommitted changes — this
|
|
74
92
|
# silently discards them. Only blocks when the tree is actually dirty, so a
|