@codyswann/lisa 1.46.4 → 1.47.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 (24) hide show
  1. package/all/copy-overwrite/.claude/hooks/verify-completion.sh +77 -0
  2. package/all/copy-overwrite/.claude/rules/lisa.md +2 -1
  3. package/all/copy-overwrite/.claude/rules/verfication.md +55 -0
  4. package/all/copy-overwrite/.claude/settings.json +22 -0
  5. package/package.json +1 -1
  6. package/typescript/copy-contents/.husky/pre-push +113 -102
  7. package/typescript/copy-overwrite/.claude/hooks/lint-on-edit.sh +61 -85
  8. package/typescript/copy-overwrite/.claude/settings.json +22 -0
  9. package/typescript/copy-overwrite/.github/workflows/auto-update-pr-branches.yml +15 -1
  10. package/typescript/copy-overwrite/.github/workflows/claude-ci-auto-fix.yml +34 -1
  11. package/typescript/copy-overwrite/.github/workflows/claude-code-review-response.yml +12 -11
  12. package/typescript/copy-overwrite/.github/workflows/claude-deploy-auto-fix.yml +143 -0
  13. package/typescript/copy-overwrite/.github/workflows/claude-nightly-code-complexity.yml +2 -1
  14. package/typescript/copy-overwrite/.github/workflows/claude-nightly-test-coverage.yml +2 -1
  15. package/typescript/copy-overwrite/.github/workflows/claude-nightly-test-improvement.yml +4 -2
  16. package/typescript/copy-overwrite/.github/workflows/claude.yml +2 -1
  17. package/typescript/copy-overwrite/.github/workflows/create-github-issue-on-failure.yml +115 -0
  18. package/typescript/copy-overwrite/.github/workflows/create-issue-on-failure.yml +176 -0
  19. package/typescript/copy-overwrite/.github/workflows/create-jira-issue-on-failure.yml +197 -0
  20. package/typescript/copy-overwrite/.github/workflows/create-sentry-issue-on-failure.yml +269 -0
  21. package/typescript/copy-overwrite/.github/workflows/quality.yml +85 -97
  22. package/typescript/copy-overwrite/audit.ignore.config.json +87 -0
  23. package/typescript/copy-overwrite/eslint.ignore.config.json +4 -1
  24. package/typescript/create-only/audit.ignore.local.json +3 -0
@@ -964,30 +964,53 @@ jobs:
964
964
  fi
965
965
  working-directory: ${{ inputs.working_directory || '.' }}
966
966
 
967
- - name: 🔒 Run security audit
967
+ - name: 📋 Load audit exclusions
968
+ id: audit_exclusions
968
969
  run: |
969
- if [ "${{ inputs.package_manager }}" = "npm" ]; then
970
- # Run npm audit in JSON mode and filter out known false positives before failing.
971
- # npm audit lacks a native --ignore flag, so we parse JSON and exclude by GHSA ID.
972
-
973
- # Excluding GHSA-3ppc-4f35-3m26: minimatch ReDoS via repeated wildcards
974
- # Nested dep in aws-cdk-lib; fix requires minimatch v10 (incompatible with ^3.1.2)
975
- # Risk: None - dev-time CDK tooling, no production runtime exposure
976
-
977
- # Excluding GHSA-7r86-cg39-jmmj: minimatch ReDoS via multiple non-adjacent GLOBSTAR segments
978
- # Same transitive dependency chain as GHSA-3ppc-4f35-3m26
979
- # Risk: None - only devDependency tooling, never processes untrusted user input
970
+ GHSA_IDS=""
971
+ CVE_IDS=""
972
+ for config_file in audit.ignore.config.json audit.ignore.local.json; do
973
+ if [ -f "$config_file" ]; then
974
+ FILE_IDS=$(jq -r '.exclusions[].id' "$config_file" 2>/dev/null)
975
+ if [ -n "$FILE_IDS" ]; then
976
+ GHSA_IDS="$GHSA_IDS $FILE_IDS"
977
+ fi
978
+ FILE_CVES=$(jq -r '.exclusions[] | select(.cve != null) | .cve' "$config_file" 2>/dev/null)
979
+ if [ -n "$FILE_CVES" ]; then
980
+ CVE_IDS="$CVE_IDS $FILE_CVES"
981
+ fi
982
+ fi
983
+ done
984
+ GHSA_IDS=$(echo "$GHSA_IDS" | tr ' ' '\n' | sort -u | grep -v '^$' | tr '\n' ' ')
985
+ CVE_IDS=$(echo "$CVE_IDS" | tr ' ' '\n' | sort -u | grep -v '^$' | tr '\n' ' ')
986
+ echo "ghsa_ids=$GHSA_IDS" >> $GITHUB_OUTPUT
987
+ echo "cve_ids=$CVE_IDS" >> $GITHUB_OUTPUT
988
+ echo "Loaded GHSA exclusions: $GHSA_IDS"
989
+ echo "Loaded CVE exclusions: $CVE_IDS"
990
+ working-directory: ${{ inputs.working_directory || '.' }}
980
991
 
981
- # Excluding GHSA-23c5-xmqv-rm74: minimatch ReDoS via nested *() extglobs
982
- # Same transitive dependency chain as GHSA-3ppc-4f35-3m26
983
- # Risk: None - only devDependency tooling, never processes untrusted user input
992
+ - name: 🔒 Run security audit
993
+ run: |
994
+ GHSA_IDS="${{ steps.audit_exclusions.outputs.ghsa_ids }}"
995
+ CVE_IDS="${{ steps.audit_exclusions.outputs.cve_ids }}"
984
996
 
985
- # Excluding GHSA-2g4f-4pwh-qvx6: ajv ReDoS with $data option
986
- # Nested dep in aws-cdk-lib and eslint; no fix available via npm
987
- # Risk: Low - $data option not used in this application
997
+ if [ "${{ inputs.package_manager }}" = "npm" ]; then
998
+ # Build jq exclusion filter for npm audit GHSA IDs
999
+ NPM_EXCLUDE_FILTER=""
1000
+ for _id in $GHSA_IDS; do
1001
+ if [ -n "$NPM_EXCLUDE_FILTER" ]; then
1002
+ NPM_EXCLUDE_FILTER="$NPM_EXCLUDE_FILTER or . == \"$_id\""
1003
+ else
1004
+ NPM_EXCLUDE_FILTER=". == \"$_id\""
1005
+ fi
1006
+ done
988
1007
 
989
1008
  AUDIT_JSON=$(npm audit --production --json 2>/dev/null || true)
990
- UNFIXED_HIGH=$(echo "$AUDIT_JSON" | jq '[.vulnerabilities | to_entries[] | select(.value.severity == "high" or .value.severity == "critical") | .value.via[] | select(type == "object") | .url | ltrimstr("https://github.com/advisories/")] | unique | map(select(. == "GHSA-3ppc-4f35-3m26" or . == "GHSA-7r86-cg39-jmmj" or . == "GHSA-23c5-xmqv-rm74" or . == "GHSA-2g4f-4pwh-qvx6" | not)) | length')
1009
+ if [ -n "$NPM_EXCLUDE_FILTER" ]; then
1010
+ UNFIXED_HIGH=$(echo "$AUDIT_JSON" | jq "[.vulnerabilities | to_entries[] | select(.value.severity == \"high\" or .value.severity == \"critical\") | .value.via[] | select(type == \"object\") | .url | ltrimstr(\"https://github.com/advisories/\")] | unique | map(select($NPM_EXCLUDE_FILTER | not)) | length")
1011
+ else
1012
+ UNFIXED_HIGH=$(echo "$AUDIT_JSON" | jq '[.vulnerabilities | to_entries[] | select(.value.severity == "high" or .value.severity == "critical") | .value.via[] | select(type == "object") | .url | ltrimstr("https://github.com/advisories/")] | unique | length')
1013
+ fi
991
1014
  if [ "$UNFIXED_HIGH" -gt 0 ]; then
992
1015
  echo "::warning::Found high or critical vulnerabilities (after excluding known false positives)"
993
1016
  npm audit --production --audit-level=high || true
@@ -995,26 +1018,42 @@ jobs:
995
1018
  fi
996
1019
  echo "::notice::No high or critical vulnerabilities found (excluding known false positives)"
997
1020
  elif [ "${{ inputs.package_manager }}" = "yarn" ]; then
998
- # Yarn audit outputs newline-delimited JSON, so we need to parse each line
999
-
1000
- # Excluding GHSA-5j98-mcp5-4vw2 (CVE-2025-64756): glob CLI command injection
1001
- # This vulnerability only affects the glob CLI (--cmd flag), not library usage
1002
- # We only use glob as a library through Babel and other tools - never invoke CLI
1003
- # Risk: None - vulnerable code path is not executed in our application
1004
-
1005
- # Excluding GHSA-w532-jxjh-hjhj (CVE-2025-29907): jsPDF ReDoS in addImage
1006
- # Excluding GHSA-8mvj-3j78-4qmw (CVE-2025-57810): jsPDF DoS in addImage
1007
- # These require user control of addImage input with malicious data
1008
- # Our usage is controlled and doesn't expose this attack vector
1009
- # Tracked for upgrade in separate security remediation ticket
1010
-
1011
- # Excluding GHSA-36jr-mh4h-2g58: d3-color ReDoS
1012
- # Transitive dependency through react-native-svg-charts (unmaintained)
1013
- # Replacement charting library evaluation in progress
1014
- # Risk: Low - color parsing is not user-controlled in our implementation
1015
-
1016
- # Filter by both GHSA ID and CVE ID for robustness
1017
- yarn audit --groups dependencies --json | jq -r 'select(.type == "auditAdvisory") | select(.data.advisory.severity == "high" or .data.advisory.severity == "critical") | select((.data.advisory.github_advisory_id == "GHSA-5j98-mcp5-4vw2" or .data.advisory.github_advisory_id == "GHSA-w532-jxjh-hjhj" or .data.advisory.github_advisory_id == "GHSA-8mvj-3j78-4qmw" or .data.advisory.github_advisory_id == "GHSA-36jr-mh4h-2g58" or (.data.advisory.cves | any(. == "CVE-2025-64756" or . == "CVE-2025-29907" or . == "CVE-2025-57810"))) | not) | .data.advisory' > high_vulns.json
1021
+ # Build jq filter for GHSA IDs
1022
+ GHSA_FILTER=""
1023
+ for _id in $GHSA_IDS; do
1024
+ if [ -n "$GHSA_FILTER" ]; then
1025
+ GHSA_FILTER="$GHSA_FILTER or .data.advisory.github_advisory_id == \"$_id\""
1026
+ else
1027
+ GHSA_FILTER=".data.advisory.github_advisory_id == \"$_id\""
1028
+ fi
1029
+ done
1030
+
1031
+ # Build jq filter for CVE IDs
1032
+ CVE_FILTER=""
1033
+ for _cve in $CVE_IDS; do
1034
+ if [ -n "$CVE_FILTER" ]; then
1035
+ CVE_FILTER="$CVE_FILTER or . == \"$_cve\""
1036
+ else
1037
+ CVE_FILTER=". == \"$_cve\""
1038
+ fi
1039
+ done
1040
+
1041
+ # Combine GHSA and CVE filters
1042
+ COMBINED_FILTER=""
1043
+ if [ -n "$GHSA_FILTER" ] && [ -n "$CVE_FILTER" ]; then
1044
+ COMBINED_FILTER="($GHSA_FILTER or (.data.advisory.cves | any($CVE_FILTER)))"
1045
+ elif [ -n "$GHSA_FILTER" ]; then
1046
+ COMBINED_FILTER="($GHSA_FILTER)"
1047
+ elif [ -n "$CVE_FILTER" ]; then
1048
+ COMBINED_FILTER="((.data.advisory.cves | any($CVE_FILTER)))"
1049
+ fi
1050
+
1051
+ if [ -n "$COMBINED_FILTER" ]; then
1052
+ yarn audit --groups dependencies --json | jq -r "select(.type == \"auditAdvisory\") | select(.data.advisory.severity == \"high\" or .data.advisory.severity == \"critical\") | select(($COMBINED_FILTER) | not) | .data.advisory" > high_vulns.json
1053
+ else
1054
+ yarn audit --groups dependencies --json | jq -r 'select(.type == "auditAdvisory") | select(.data.advisory.severity == "high" or .data.advisory.severity == "critical") | .data.advisory' > high_vulns.json
1055
+ fi
1056
+
1018
1057
  if [ -s high_vulns.json ]; then
1019
1058
  echo "::error::Found high or critical vulnerabilities:"
1020
1059
  cat high_vulns.json
@@ -1023,64 +1062,13 @@ jobs:
1023
1062
  echo "::notice::No high or critical vulnerabilities found (excluding known false positives)"
1024
1063
  fi
1025
1064
  elif [ "${{ inputs.package_manager }}" = "bun" ]; then
1026
- # Excluding GHSA-5j98-mcp5-4vw2 (CVE-2025-64756): glob CLI command injection
1027
- # This vulnerability only affects the glob CLI (--cmd flag), not library usage
1028
- # We only use glob as a library through Babel and other tools - never invoke CLI
1029
-
1030
- # Excluding GHSA-8qq5-rm4j-mr97: node-tar path sanitization vulnerability
1031
- # Nested dependency in @expo/cli - bun resolves to patched version but audit still flags it
1032
- # Risk: Low - only affects tar extraction with malicious filenames, not our use case
1033
-
1034
- # Excluding GHSA-37qj-frw5-hhjh: fast-xml-parser RangeError DoS with numeric entities
1035
- # Transitive dependency via @react-native-community/cli (Android/iOS build tooling)
1036
- # Parent packages pin ^4.4.1; fix requires major version 5.x (incompatible)
1037
- # Risk: None - CLI build tool, not a production runtime dependency
1038
-
1039
- # Excluding GHSA-3ppc-4f35-3m26: minimatch ReDoS via repeated wildcards
1040
- # Transitive dependency in devDependencies (eslint, jest, nodemon, ts-morph, etc.)
1041
- # Fix requires minimatch v10 which changes export shape (object vs function),
1042
- # breaking test-exclude (used by Jest coverage). No production code path is affected.
1043
- # Risk: None - only devDependency tooling, never processes untrusted user input
1044
-
1045
- # Excluding GHSA-jmr7-xgp7-cmfj: fast-xml-parser DoS through entity expansion in DOCTYPE
1046
- # Transitive dependency via AWS SDK (@aws-sdk/xml-builder) and snowflake-sdk
1047
- # Resolution to >=5.3.6 set in package.json but bun audit still flags intermediate ranges
1048
- # Risk: Low - XML parsing of untrusted DOCTYPE content not in our code paths
1049
-
1050
- # Excluding GHSA-m7jm-9gc2-mpf2: fast-xml-parser entity encoding bypass via regex injection
1051
- # Same transitive path as GHSA-jmr7-xgp7-cmfj (AWS SDK, snowflake-sdk)
1052
- # Resolution to >=5.3.6 set in package.json but bun audit still flags intermediate ranges
1053
- # Risk: Low - no untrusted XML with DOCTYPE entity names processed
1054
-
1055
- # Excluding GHSA-r6q2-hw4h-h46w: node-tar race condition via Unicode Ligature Collisions on macOS APFS
1056
- # Transitive via @nestjs/apollo > @apollo/gateway > make-fetch-happen > cacache > tar
1057
- # Resolution to ^7.5.8 set in package.json but bun audit still flags intermediate ranges
1058
- # Risk: None - tar extraction not used in production runtime
1059
-
1060
- # Excluding GHSA-34x7-hfp2-rc4v: node-tar arbitrary file creation via hardlink path traversal
1061
- # Same transitive path as GHSA-r6q2-hw4h-h46w
1062
- # Risk: None - tar extraction not used in production runtime
1063
-
1064
- # Excluding GHSA-83g3-92jg-28cx: node-tar arbitrary file read/write via hardlink target escape
1065
- # Same transitive path as GHSA-r6q2-hw4h-h46w
1066
- # Risk: None - tar extraction not used in production runtime
1067
-
1068
- # Excluding GHSA-3h5v-q93c-6h6q: ws DoS when handling request with many HTTP headers
1069
- # Transitive via @nestjs/graphql, graphql-ws, openai, serverless-offline, serverless-esbuild
1070
- # Resolution to ^8.17.1 set in package.json but bun audit still flags intermediate ranges
1071
- # Risk: Low - WebSocket servers behind API Gateway which limits headers
1072
-
1073
- # Excluding GHSA-7r86-cg39-jmmj: minimatch ReDoS via multiple non-adjacent GLOBSTAR segments
1074
- # Same transitive dependency chain as GHSA-3ppc-4f35-3m26 (eslint, jest, ts-morph, etc.)
1075
- # Fix requires minimatch >=3.1.3 but bun cannot override transitive dependency version ranges
1076
- # Risk: None - only devDependency tooling, never processes untrusted user input
1077
-
1078
- # Excluding GHSA-23c5-xmqv-rm74: minimatch ReDoS via nested *() extglobs
1079
- # Same transitive dependency chain as GHSA-3ppc-4f35-3m26 (eslint, jest, ts-morph, etc.)
1080
- # Fix requires minimatch >=3.1.3 but bun cannot override transitive dependency version ranges
1081
- # Risk: None - only devDependency tooling, never processes untrusted user input
1082
-
1083
- if ! bun audit --audit-level=high --ignore GHSA-5j98-mcp5-4vw2 --ignore GHSA-8qq5-rm4j-mr97 --ignore GHSA-37qj-frw5-hhjh --ignore GHSA-3ppc-4f35-3m26 --ignore GHSA-jmr7-xgp7-cmfj --ignore GHSA-m7jm-9gc2-mpf2 --ignore GHSA-r6q2-hw4h-h46w --ignore GHSA-34x7-hfp2-rc4v --ignore GHSA-83g3-92jg-28cx --ignore GHSA-3h5v-q93c-6h6q --ignore GHSA-7r86-cg39-jmmj --ignore GHSA-23c5-xmqv-rm74; then
1065
+ # Build --ignore flags dynamically from exclusion list
1066
+ BUN_IGNORE_FLAGS=""
1067
+ for _id in $GHSA_IDS; do
1068
+ BUN_IGNORE_FLAGS="$BUN_IGNORE_FLAGS --ignore $_id"
1069
+ done
1070
+
1071
+ if ! bun audit --audit-level=high $BUN_IGNORE_FLAGS; then
1084
1072
  echo "::warning::Found high or critical vulnerabilities"
1085
1073
  exit 1
1086
1074
  fi
@@ -0,0 +1,87 @@
1
+ {
2
+ "exclusions": [
3
+ {
4
+ "id": "GHSA-5j98-mcp5-4vw2",
5
+ "cve": "CVE-2025-64756",
6
+ "package": "glob",
7
+ "reason": "CLI command injection — only affects glob CLI --cmd flag, not library usage"
8
+ },
9
+ {
10
+ "id": "GHSA-8qq5-rm4j-mr97",
11
+ "package": "node-tar",
12
+ "reason": "Path sanitization vulnerability — nested in @expo/cli, tar extraction not in our code path"
13
+ },
14
+ {
15
+ "id": "GHSA-37qj-frw5-hhjh",
16
+ "package": "fast-xml-parser",
17
+ "reason": "RangeError DoS with numeric entities — transitive via React Native CLI, build tool only"
18
+ },
19
+ {
20
+ "id": "GHSA-3ppc-4f35-3m26",
21
+ "package": "minimatch",
22
+ "reason": "ReDoS via repeated wildcards — devDeps only, fix requires breaking minimatch v10"
23
+ },
24
+ {
25
+ "id": "GHSA-7r86-cg39-jmmj",
26
+ "package": "minimatch",
27
+ "reason": "ReDoS via multiple non-adjacent GLOBSTAR segments — devDeps only, fix requires minimatch >=3.1.3"
28
+ },
29
+ {
30
+ "id": "GHSA-23c5-xmqv-rm74",
31
+ "package": "minimatch",
32
+ "reason": "ReDoS via nested *() extglobs — devDeps only, fix requires minimatch >=3.1.3"
33
+ },
34
+ {
35
+ "id": "GHSA-2g4f-4pwh-qvx6",
36
+ "package": "ajv",
37
+ "reason": "ReDoS with $data option — $data option not used, nested in aws-cdk-lib/eslint"
38
+ },
39
+ {
40
+ "id": "GHSA-jmr7-xgp7-cmfj",
41
+ "package": "fast-xml-parser",
42
+ "reason": "DoS through entity expansion in DOCTYPE — transitive via AWS SDK, no untrusted XML parsing"
43
+ },
44
+ {
45
+ "id": "GHSA-m7jm-9gc2-mpf2",
46
+ "package": "fast-xml-parser",
47
+ "reason": "Entity encoding bypass via regex injection — same path as GHSA-jmr7-xgp7-cmfj"
48
+ },
49
+ {
50
+ "id": "GHSA-r6q2-hw4h-h46w",
51
+ "package": "node-tar",
52
+ "reason": "Race condition via Unicode Ligature Collisions on macOS APFS — transitive via NestJS/Apollo, tar not used in production"
53
+ },
54
+ {
55
+ "id": "GHSA-34x7-hfp2-rc4v",
56
+ "package": "node-tar",
57
+ "reason": "Arbitrary file creation via hardlink path traversal — same path as GHSA-r6q2-hw4h-h46w"
58
+ },
59
+ {
60
+ "id": "GHSA-83g3-92jg-28cx",
61
+ "package": "node-tar",
62
+ "reason": "Arbitrary file read/write via hardlink target escape — same path as GHSA-r6q2-hw4h-h46w"
63
+ },
64
+ {
65
+ "id": "GHSA-3h5v-q93c-6h6q",
66
+ "package": "ws",
67
+ "reason": "DoS via many HTTP headers — WebSocket servers behind API Gateway which limits headers"
68
+ },
69
+ {
70
+ "id": "GHSA-w532-jxjh-hjhj",
71
+ "cve": "CVE-2025-29907",
72
+ "package": "jsPDF",
73
+ "reason": "ReDoS in addImage — controlled usage only, no user-controlled input to addImage"
74
+ },
75
+ {
76
+ "id": "GHSA-8mvj-3j78-4qmw",
77
+ "cve": "CVE-2025-57810",
78
+ "package": "jsPDF",
79
+ "reason": "DoS in addImage — controlled usage only, no user-controlled input to addImage"
80
+ },
81
+ {
82
+ "id": "GHSA-36jr-mh4h-2g58",
83
+ "package": "d3-color",
84
+ "reason": "ReDoS — transitive via react-native-svg-charts, color parsing not user-controlled"
85
+ }
86
+ ]
87
+ }
@@ -70,6 +70,9 @@
70
70
  "scripts/**",
71
71
 
72
72
  "lib/**/*.js",
73
- "cdk.out/**"
73
+ "cdk.out/**",
74
+
75
+ "audit.ignore.config.json",
76
+ "audit.ignore.local.json"
74
77
  ]
75
78
  }
@@ -0,0 +1,3 @@
1
+ {
2
+ "exclusions": []
3
+ }