@codyswann/lisa 4.57.5 → 4.57.6
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-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +21 -1
- package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
- package/dist/core/lisa-owned-hash-ledger.js +4 -0
- package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +3 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/hooks/block-direct-issue-create.sh +21 -1
- package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +21 -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-copilot/hooks/block-direct-issue-create.sh +21 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +21 -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/plugins/src/base/hooks/block-direct-issue-create.sh +21 -1
package/package.json
CHANGED
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
"zod-validation-error": "^4.0.0"
|
|
188
188
|
},
|
|
189
189
|
"name": "@codyswann/lisa",
|
|
190
|
-
"version": "4.57.
|
|
190
|
+
"version": "4.57.6",
|
|
191
191
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
192
192
|
"main": "dist/index.js",
|
|
193
193
|
"exports": {
|
|
@@ -336,7 +336,7 @@
|
|
|
336
336
|
"test": "tests"
|
|
337
337
|
},
|
|
338
338
|
"types": "./dist/index.d.ts",
|
|
339
|
-
"lisaReleaseCommit": "
|
|
340
|
-
"gitHead": "
|
|
341
|
-
"lisaReleaseTag": "v4.57.
|
|
339
|
+
"lisaReleaseCommit": "ca16d765559f9b01551173de44c24c92d58a64f9",
|
|
340
|
+
"gitHead": "ca16d765559f9b01551173de44c24c92d58a64f9",
|
|
341
|
+
"lisaReleaseTag": "v4.57.6"
|
|
342
342
|
}
|
|
@@ -1005,6 +1005,25 @@ GLUED_OPERATORS = ("&&", "||", ";;", ";", "|", "&")
|
|
|
1005
1005
|
SEGMENT_BOUNDARIES = set(GLUED_OPERATORS) | {"(", ")", "{", "}"}
|
|
1006
1006
|
|
|
1007
1007
|
|
|
1008
|
+
def strip_full_line_comments(text):
|
|
1009
|
+
"""Blank lines beginning with `#` after optional whitespace.
|
|
1010
|
+
|
|
1011
|
+
This bounded fallback prevents ordinary prose comments from matching a
|
|
1012
|
+
creation token after an apostrophe defeats shlex (CodySwannGT/lisa#3551).
|
|
1013
|
+
It does not determine quote context: a leading `#` inside a multiline
|
|
1014
|
+
string is also removed. This is a textual guard, not shell interpretation.
|
|
1015
|
+
|
|
1016
|
+
Args:
|
|
1017
|
+
text: The raw command or file text.
|
|
1018
|
+
|
|
1019
|
+
Returns:
|
|
1020
|
+
The text with whole-line comments blanked, line count preserved.
|
|
1021
|
+
"""
|
|
1022
|
+
return "\n".join(
|
|
1023
|
+
"" if line.lstrip().startswith("#") else line for line in text.split("\n")
|
|
1024
|
+
)
|
|
1025
|
+
|
|
1026
|
+
|
|
1008
1027
|
def strip_heredocs(text):
|
|
1009
1028
|
"""Drop heredoc bodies so quoted prose cannot be read as argv.
|
|
1010
1029
|
|
|
@@ -2344,7 +2363,8 @@ def scan(text, depth, from_file=False):
|
|
|
2344
2363
|
# `unparseable_reads_only` for why this does not narrow the fallback.
|
|
2345
2364
|
if unparseable_reads_only(text):
|
|
2346
2365
|
return None
|
|
2347
|
-
|
|
2366
|
+
# Ignore whole-line prose comments when applying the fallback matcher.
|
|
2367
|
+
if UNPARSEABLE_CREATION.search(strip_full_line_comments(text)):
|
|
2348
2368
|
return (
|
|
2349
2369
|
"an unparseable command that reads as a tracker creation",
|
|
2350
2370
|
[ready_role],
|
|
@@ -1005,6 +1005,25 @@ GLUED_OPERATORS = ("&&", "||", ";;", ";", "|", "&")
|
|
|
1005
1005
|
SEGMENT_BOUNDARIES = set(GLUED_OPERATORS) | {"(", ")", "{", "}"}
|
|
1006
1006
|
|
|
1007
1007
|
|
|
1008
|
+
def strip_full_line_comments(text):
|
|
1009
|
+
"""Blank lines beginning with `#` after optional whitespace.
|
|
1010
|
+
|
|
1011
|
+
This bounded fallback prevents ordinary prose comments from matching a
|
|
1012
|
+
creation token after an apostrophe defeats shlex (CodySwannGT/lisa#3551).
|
|
1013
|
+
It does not determine quote context: a leading `#` inside a multiline
|
|
1014
|
+
string is also removed. This is a textual guard, not shell interpretation.
|
|
1015
|
+
|
|
1016
|
+
Args:
|
|
1017
|
+
text: The raw command or file text.
|
|
1018
|
+
|
|
1019
|
+
Returns:
|
|
1020
|
+
The text with whole-line comments blanked, line count preserved.
|
|
1021
|
+
"""
|
|
1022
|
+
return "\n".join(
|
|
1023
|
+
"" if line.lstrip().startswith("#") else line for line in text.split("\n")
|
|
1024
|
+
)
|
|
1025
|
+
|
|
1026
|
+
|
|
1008
1027
|
def strip_heredocs(text):
|
|
1009
1028
|
"""Drop heredoc bodies so quoted prose cannot be read as argv.
|
|
1010
1029
|
|
|
@@ -2344,7 +2363,8 @@ def scan(text, depth, from_file=False):
|
|
|
2344
2363
|
# `unparseable_reads_only` for why this does not narrow the fallback.
|
|
2345
2364
|
if unparseable_reads_only(text):
|
|
2346
2365
|
return None
|
|
2347
|
-
|
|
2366
|
+
# Ignore whole-line prose comments when applying the fallback matcher.
|
|
2367
|
+
if UNPARSEABLE_CREATION.search(strip_full_line_comments(text)):
|
|
2348
2368
|
return (
|
|
2349
2369
|
"an unparseable command that reads as a tracker creation",
|
|
2350
2370
|
[ready_role],
|
|
@@ -1005,6 +1005,25 @@ GLUED_OPERATORS = ("&&", "||", ";;", ";", "|", "&")
|
|
|
1005
1005
|
SEGMENT_BOUNDARIES = set(GLUED_OPERATORS) | {"(", ")", "{", "}"}
|
|
1006
1006
|
|
|
1007
1007
|
|
|
1008
|
+
def strip_full_line_comments(text):
|
|
1009
|
+
"""Blank lines beginning with `#` after optional whitespace.
|
|
1010
|
+
|
|
1011
|
+
This bounded fallback prevents ordinary prose comments from matching a
|
|
1012
|
+
creation token after an apostrophe defeats shlex (CodySwannGT/lisa#3551).
|
|
1013
|
+
It does not determine quote context: a leading `#` inside a multiline
|
|
1014
|
+
string is also removed. This is a textual guard, not shell interpretation.
|
|
1015
|
+
|
|
1016
|
+
Args:
|
|
1017
|
+
text: The raw command or file text.
|
|
1018
|
+
|
|
1019
|
+
Returns:
|
|
1020
|
+
The text with whole-line comments blanked, line count preserved.
|
|
1021
|
+
"""
|
|
1022
|
+
return "\n".join(
|
|
1023
|
+
"" if line.lstrip().startswith("#") else line for line in text.split("\n")
|
|
1024
|
+
)
|
|
1025
|
+
|
|
1026
|
+
|
|
1008
1027
|
def strip_heredocs(text):
|
|
1009
1028
|
"""Drop heredoc bodies so quoted prose cannot be read as argv.
|
|
1010
1029
|
|
|
@@ -2344,7 +2363,8 @@ def scan(text, depth, from_file=False):
|
|
|
2344
2363
|
# `unparseable_reads_only` for why this does not narrow the fallback.
|
|
2345
2364
|
if unparseable_reads_only(text):
|
|
2346
2365
|
return None
|
|
2347
|
-
|
|
2366
|
+
# Ignore whole-line prose comments when applying the fallback matcher.
|
|
2367
|
+
if UNPARSEABLE_CREATION.search(strip_full_line_comments(text)):
|
|
2348
2368
|
return (
|
|
2349
2369
|
"an unparseable command that reads as a tracker creation",
|
|
2350
2370
|
[ready_role],
|
|
@@ -1005,6 +1005,25 @@ GLUED_OPERATORS = ("&&", "||", ";;", ";", "|", "&")
|
|
|
1005
1005
|
SEGMENT_BOUNDARIES = set(GLUED_OPERATORS) | {"(", ")", "{", "}"}
|
|
1006
1006
|
|
|
1007
1007
|
|
|
1008
|
+
def strip_full_line_comments(text):
|
|
1009
|
+
"""Blank lines beginning with `#` after optional whitespace.
|
|
1010
|
+
|
|
1011
|
+
This bounded fallback prevents ordinary prose comments from matching a
|
|
1012
|
+
creation token after an apostrophe defeats shlex (CodySwannGT/lisa#3551).
|
|
1013
|
+
It does not determine quote context: a leading `#` inside a multiline
|
|
1014
|
+
string is also removed. This is a textual guard, not shell interpretation.
|
|
1015
|
+
|
|
1016
|
+
Args:
|
|
1017
|
+
text: The raw command or file text.
|
|
1018
|
+
|
|
1019
|
+
Returns:
|
|
1020
|
+
The text with whole-line comments blanked, line count preserved.
|
|
1021
|
+
"""
|
|
1022
|
+
return "\n".join(
|
|
1023
|
+
"" if line.lstrip().startswith("#") else line for line in text.split("\n")
|
|
1024
|
+
)
|
|
1025
|
+
|
|
1026
|
+
|
|
1008
1027
|
def strip_heredocs(text):
|
|
1009
1028
|
"""Drop heredoc bodies so quoted prose cannot be read as argv.
|
|
1010
1029
|
|
|
@@ -2344,7 +2363,8 @@ def scan(text, depth, from_file=False):
|
|
|
2344
2363
|
# `unparseable_reads_only` for why this does not narrow the fallback.
|
|
2345
2364
|
if unparseable_reads_only(text):
|
|
2346
2365
|
return None
|
|
2347
|
-
|
|
2366
|
+
# Ignore whole-line prose comments when applying the fallback matcher.
|
|
2367
|
+
if UNPARSEABLE_CREATION.search(strip_full_line_comments(text)):
|
|
2348
2368
|
return (
|
|
2349
2369
|
"an unparseable command that reads as a tracker creation",
|
|
2350
2370
|
[ready_role],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "4.57.
|
|
3
|
+
"version": "4.57.6",
|
|
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": "4.57.
|
|
3
|
+
"version": "4.57.6",
|
|
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": "4.57.
|
|
3
|
+
"version": "4.57.6",
|
|
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": "4.57.
|
|
3
|
+
"version": "4.57.6",
|
|
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": "4.57.
|
|
3
|
+
"version": "4.57.6",
|
|
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"
|