@codyswann/lisa 4.71.4 → 4.71.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.
Files changed (91) hide show
  1. package/all/copy-overwrite/scripts/lisa-hooks/block-direct-issue-create.sh +20 -2
  2. package/all/copy-overwrite/scripts/lisa-hooks/block-managed-file-edits.sh +71 -10
  3. package/dist/core/lisa-owned-hash-ledger.d.ts.map +1 -1
  4. package/dist/core/lisa-owned-hash-ledger.js +8 -0
  5. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  6. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  7. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  8. package/dist/core/upstream-evidence-manifest.js +11 -8
  9. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  10. package/dist/opencode/plugin-templates/block-managed-file-edits.sh +71 -10
  11. package/dist/opencode/plugin-templates/lisa-block-direct-issue-create.ts +8 -2
  12. package/package.json +4 -4
  13. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa/.codex-plugin/skills/lisa-drive-pr-to-merge/SKILL.md +89 -5
  16. package/plugins/lisa/.codex-plugin/skills/lisa-queue-status/SKILL.md +43 -3
  17. package/plugins/lisa/hooks/block-direct-issue-create.sh +20 -2
  18. package/plugins/lisa/hooks/block-managed-file-edits.sh +71 -10
  19. package/plugins/lisa/skills/lisa-drive-pr-to-merge/SKILL.md +89 -5
  20. package/plugins/lisa/skills/lisa-queue-status/SKILL.md +43 -3
  21. package/plugins/lisa-agy/hooks/block-direct-issue-create.sh +20 -2
  22. package/plugins/lisa-agy/hooks/block-managed-file-edits.sh +71 -10
  23. package/plugins/lisa-agy/plugin.json +1 -1
  24. package/plugins/lisa-agy/skills/lisa-drive-pr-to-merge/SKILL.md +89 -5
  25. package/plugins/lisa-agy/skills/lisa-queue-status/SKILL.md +43 -3
  26. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-copilot/hooks/block-direct-issue-create.sh +20 -2
  33. package/plugins/lisa-copilot/hooks/block-managed-file-edits.sh +71 -10
  34. package/plugins/lisa-copilot/skills/lisa-drive-pr-to-merge/SKILL.md +89 -5
  35. package/plugins/lisa-copilot/skills/lisa-queue-status/SKILL.md +43 -3
  36. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cursor/hooks/block-direct-issue-create.sh +20 -2
  38. package/plugins/lisa-cursor/hooks/block-managed-file-edits.sh +71 -10
  39. package/plugins/lisa-cursor/skills/lisa-drive-pr-to-merge/SKILL.md +89 -5
  40. package/plugins/lisa-cursor/skills/lisa-queue-status/SKILL.md +43 -3
  41. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  43. package/plugins/lisa-expo/.codex-plugin/skills/expo-router-best-practices/references/static-export-verification.md +1 -1
  44. package/plugins/lisa-expo/skills/expo-router-best-practices/references/static-export-verification.md +1 -1
  45. package/plugins/lisa-expo-agy/plugin.json +1 -1
  46. package/plugins/lisa-expo-agy/skills/expo-router-best-practices/references/static-export-verification.md +1 -1
  47. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-expo-copilot/skills/expo-router-best-practices/references/static-export-verification.md +1 -1
  49. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-expo-cursor/skills/expo-router-best-practices/references/static-export-verification.md +1 -1
  51. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  54. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  58. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  59. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  63. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  64. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  68. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  69. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  73. package/plugins/lisa-rails-agy/plugin.json +1 -1
  74. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  78. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  79. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  83. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  84. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  85. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  86. package/plugins/src/base/hooks/block-direct-issue-create.sh +20 -2
  87. package/plugins/src/base/hooks/block-managed-file-edits.sh +71 -10
  88. package/plugins/src/base/skills/lisa-drive-pr-to-merge/SKILL.md +89 -5
  89. package/plugins/src/base/skills/lisa-queue-status/SKILL.md +43 -3
  90. package/plugins/src/expo/skills/expo-router-best-practices/references/static-export-verification.md +1 -1
  91. package/typescript/copy-contents/.husky/commit-msg +28 -31
@@ -174,13 +174,16 @@ echo "🤖 Checking for AI co-authorship..."
174
174
  # "AI-Agent: <their own name>" to self-attest as the agent — the trailer is
175
175
  # the attestation surface, not a proof, so the gate documents rather than
176
176
  # polices that.) CodySwannGT/lisa#4282, CodySwannGT/lisa#4294.
177
- LISA_FLEET_AGENT_RE="Claude|Codex|Cursor|OpenCode|Antigravity|Copilot"
177
+ # The exemption is an exact declared identity, never a first-name prefix.
178
+ # Include native Claude/Codex attribution forms installed by Lisa.
179
+ # Trailers attest attribution; the email is not cryptographic identity proof.
180
+ LISA_FLEET_IDENTITY_RE="Claude|Claude <noreply@anthropic\.com>|Codex <(codex|noreply)@openai\.com>|Cursor <noreply@cursor\.com>|OpenCode <noreply@opencode\.ai>|Antigravity <noreply@google\.com>|Copilot <noreply@github\.com>"
178
181
  # Co-authors come from the message's trailer block via git-interpret-trailers —
179
182
  # a "Co-authored-by:" string inside prose is not attribution — and every entry
180
183
  # is judged on its own, so a fleet trailer can never cover a sibling trailer
181
184
  # whose agent owes metadata. The AI-* checks below read the SAME parsed
182
185
  # trailer block, so an "AI-Agent:" line in body prose cannot satisfy them.
183
- ALL_TRAILERS=$(git interpret-trailers --parse "$COMMIT_MSG_FILE" 2>/dev/null || true)
186
+ ALL_TRAILERS=$(git interpret-trailers --parse --no-divider "$COMMIT_MSG_FILE" 2>/dev/null || true)
184
187
  COAUTHOR_TRAILERS=$(printf '%s\n' "$ALL_TRAILERS" | grep -iE "^Co-authored-by:" || true)
185
188
 
186
189
  if ! printf '%s\n' "$COAUTHOR_TRAILERS" | grep -Eiq "Co-authored-by:"; then
@@ -189,12 +192,25 @@ else
189
192
  no_coauthor=0
190
193
  fi
191
194
 
195
+ # A driver is singular even when multiple agents pair on the commit.
196
+ ai_agent_count=$(printf '%s\n' "$ALL_TRAILERS" | grep -icE '^AI-Agent:' || true)
197
+ if [ "$ai_agent_count" -gt 1 ]; then
198
+ echo "❌ Commit attribution must name exactly one AI-Agent driver."
199
+ lisa_commit_gate_families ai-coauthorship
200
+ exit 1
201
+ fi
202
+
192
203
  nonfleet_coauthor=0
204
+ opencode_coauthor=0
193
205
  if [ "$no_coauthor" -eq 0 ]; then
194
206
  while IFS= read -r trailer; do
195
207
  [ -z "$trailer" ] && continue
196
208
  agent_name=$(printf '%s' "${trailer#*:}" | sed -e 's/<[^>]*>//g' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
197
- if ! printf '%s\n' "$agent_name" | grep -Eiq "^(${LISA_FLEET_AGENT_RE})([[:space:]]|$)"; then
209
+ identity=$(printf '%s' "${trailer#*:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
210
+ if printf '%s\n' "$agent_name" | grep -Eiq '^OpenCode$'; then
211
+ opencode_coauthor=1
212
+ fi
213
+ if ! printf '%s\n' "$identity" | grep -Eiq "^(${LISA_FLEET_IDENTITY_RE})$"; then
198
214
  nonfleet_coauthor=1
199
215
  fi
200
216
  done <<LISA_COAUTHOR_TRAILERS
@@ -202,7 +218,9 @@ $COAUTHOR_TRAILERS
202
218
  LISA_COAUTHOR_TRAILERS
203
219
  fi
204
220
 
205
- if [ "$nonfleet_coauthor" -eq 1 ]; then
221
+ # OpenCode co-authorship requires metadata, but AI-Agent may name any listed
222
+ # driver. A supplied AI-Agent driver is validated even on fleet-only commits.
223
+ if [ "$nonfleet_coauthor" -eq 1 ] || [ "$opencode_coauthor" -eq 1 ] || [ "$ai_agent_count" -eq 1 ]; then
206
224
  missing_agent_metadata=0
207
225
  for trailer in AI-Agent AI-Model AI-Effort; do
208
226
  if ! printf '%s\n' "$ALL_TRAILERS" | grep -Eiq "^${trailer}:[[:space:]]*[^[:space:]]"; then
@@ -234,7 +252,12 @@ LISA_COAUTHOR_NAME_CHECK
234
252
  fi
235
253
  if [ "$missing_agent_metadata" -eq 1 ]; then
236
254
  echo ""
237
- echo "❌ Non-fleet agents must include AI metadata trailers!"
255
+ if [ "$opencode_coauthor" -eq 1 ] && [ "$nonfleet_coauthor" -eq 0 ]; then
256
+ echo "❌ OpenCode commits must include AI metadata trailers!"
257
+ echo "For an OpenCode driver: AI-Agent: OpenCode"
258
+ else
259
+ echo "❌ Non-fleet agents must include AI metadata trailers!"
260
+ fi
238
261
  echo ""
239
262
  echo "Agents outside the supported fleet (Claude, Codex, Cursor, OpenCode,"
240
263
  echo "Antigravity, Copilot) must carry provenance metadata alongside the"
@@ -280,30 +303,4 @@ elif [ "$no_coauthor" -eq 1 ]; then
280
303
  exit 1
281
304
  fi
282
305
 
283
- if printf '%s\n' "$COAUTHOR_TRAILERS" | grep -Eiq "Co-authored-by:.*OpenCode"; then
284
- missing_opencode_metadata=0
285
- if ! printf '%s\n' "$ALL_TRAILERS" | grep -Eiq "^AI-Agent:[[:space:]]*OpenCode[[:space:]]*$"; then
286
- missing_opencode_metadata=1
287
- fi
288
- if ! printf '%s\n' "$ALL_TRAILERS" | grep -Eiq "^AI-Model:[[:space:]]*[^[:space:]].*$"; then
289
- missing_opencode_metadata=1
290
- fi
291
- if ! printf '%s\n' "$ALL_TRAILERS" | grep -Eiq "^AI-Effort:[[:space:]]*[^[:space:]].*$"; then
292
- missing_opencode_metadata=1
293
- fi
294
-
295
- if [ "$missing_opencode_metadata" -eq 1 ]; then
296
- echo ""
297
- echo "❌ OpenCode commits must include AI metadata trailers!"
298
- echo ""
299
- echo "Expected trailers:"
300
- echo " AI-Agent: OpenCode"
301
- echo " AI-Model: <provider/model>"
302
- echo " AI-Effort: <effort or runtime value>"
303
- echo ""
304
- lisa_commit_gate_families ai-coauthorship
305
- exit 1
306
- fi
307
- fi
308
-
309
306
  # END: AI GUARDRAILS