@codyswann/lisa 2.254.0 → 2.256.0

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 (118) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/skills/lisa-automation-status/SKILL.md +11 -3
  5. package/plugins/lisa/.codex-plugin/skills/lisa-exploratory-qa/SKILL.md +30 -0
  6. package/plugins/lisa/.codex-plugin/skills/lisa-intake/SKILL.md +40 -0
  7. package/plugins/lisa/.codex-plugin/skills/lisa-learnings-audit/SKILL.md +46 -10
  8. package/plugins/lisa/.codex-plugin/skills/lisa-monitor/SKILL.md +36 -0
  9. package/plugins/lisa/.codex-plugin/skills/lisa-project-ideation/SKILL.md +36 -0
  10. package/plugins/lisa/.codex-plugin/skills/lisa-repair-intake/SKILL.md +34 -0
  11. package/plugins/lisa/scripts/automation-run-record.mjs +110 -0
  12. package/plugins/lisa/scripts/automation-status-claude-adapter.mjs +64 -8
  13. package/plugins/lisa/scripts/automation-status-codex-adapter.mjs +61 -5
  14. package/plugins/lisa/scripts/automation-status-report.mjs +30 -0
  15. package/plugins/lisa/scripts/automation-status-run-history.mjs +185 -0
  16. package/plugins/lisa/skills/lisa-automation-status/SKILL.md +11 -3
  17. package/plugins/lisa/skills/lisa-exploratory-qa/SKILL.md +30 -0
  18. package/plugins/lisa/skills/lisa-intake/SKILL.md +40 -0
  19. package/plugins/lisa/skills/lisa-learnings-audit/SKILL.md +46 -10
  20. package/plugins/lisa/skills/lisa-monitor/SKILL.md +36 -0
  21. package/plugins/lisa/skills/lisa-project-ideation/SKILL.md +36 -0
  22. package/plugins/lisa/skills/lisa-repair-intake/SKILL.md +34 -0
  23. package/plugins/lisa-agy/plugin.json +1 -1
  24. package/plugins/lisa-agy/scripts/automation-run-record.mjs +110 -0
  25. package/plugins/lisa-agy/scripts/automation-status-claude-adapter.mjs +64 -8
  26. package/plugins/lisa-agy/scripts/automation-status-codex-adapter.mjs +61 -5
  27. package/plugins/lisa-agy/scripts/automation-status-report.mjs +30 -0
  28. package/plugins/lisa-agy/scripts/automation-status-run-history.mjs +185 -0
  29. package/plugins/lisa-agy/skills/lisa-automation-status/SKILL.md +11 -3
  30. package/plugins/lisa-agy/skills/lisa-exploratory-qa/SKILL.md +30 -0
  31. package/plugins/lisa-agy/skills/lisa-intake/SKILL.md +40 -0
  32. package/plugins/lisa-agy/skills/lisa-learnings-audit/SKILL.md +46 -10
  33. package/plugins/lisa-agy/skills/lisa-monitor/SKILL.md +36 -0
  34. package/plugins/lisa-agy/skills/lisa-project-ideation/SKILL.md +36 -0
  35. package/plugins/lisa-agy/skills/lisa-repair-intake/SKILL.md +34 -0
  36. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  39. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-copilot/scripts/automation-run-record.mjs +110 -0
  43. package/plugins/lisa-copilot/scripts/automation-status-claude-adapter.mjs +64 -8
  44. package/plugins/lisa-copilot/scripts/automation-status-codex-adapter.mjs +61 -5
  45. package/plugins/lisa-copilot/scripts/automation-status-report.mjs +30 -0
  46. package/plugins/lisa-copilot/scripts/automation-status-run-history.mjs +185 -0
  47. package/plugins/lisa-copilot/skills/lisa-automation-status/SKILL.md +11 -3
  48. package/plugins/lisa-copilot/skills/lisa-exploratory-qa/SKILL.md +30 -0
  49. package/plugins/lisa-copilot/skills/lisa-intake/SKILL.md +40 -0
  50. package/plugins/lisa-copilot/skills/lisa-learnings-audit/SKILL.md +46 -10
  51. package/plugins/lisa-copilot/skills/lisa-monitor/SKILL.md +36 -0
  52. package/plugins/lisa-copilot/skills/lisa-project-ideation/SKILL.md +36 -0
  53. package/plugins/lisa-copilot/skills/lisa-repair-intake/SKILL.md +34 -0
  54. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-cursor/scripts/automation-run-record.mjs +110 -0
  56. package/plugins/lisa-cursor/scripts/automation-status-claude-adapter.mjs +64 -8
  57. package/plugins/lisa-cursor/scripts/automation-status-codex-adapter.mjs +61 -5
  58. package/plugins/lisa-cursor/scripts/automation-status-report.mjs +30 -0
  59. package/plugins/lisa-cursor/scripts/automation-status-run-history.mjs +185 -0
  60. package/plugins/lisa-cursor/skills/lisa-automation-status/SKILL.md +11 -3
  61. package/plugins/lisa-cursor/skills/lisa-exploratory-qa/SKILL.md +30 -0
  62. package/plugins/lisa-cursor/skills/lisa-intake/SKILL.md +40 -0
  63. package/plugins/lisa-cursor/skills/lisa-learnings-audit/SKILL.md +46 -10
  64. package/plugins/lisa-cursor/skills/lisa-monitor/SKILL.md +36 -0
  65. package/plugins/lisa-cursor/skills/lisa-project-ideation/SKILL.md +36 -0
  66. package/plugins/lisa-cursor/skills/lisa-repair-intake/SKILL.md +34 -0
  67. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-expo-agy/plugin.json +1 -1
  70. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  74. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  75. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  79. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  80. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  85. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  89. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  90. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  94. package/plugins/lisa-rails-agy/plugin.json +1 -1
  95. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  98. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  99. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  100. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  101. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  104. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  105. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  106. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  107. package/plugins/src/base/scripts/automation-run-record.mjs +110 -0
  108. package/plugins/src/base/scripts/automation-status-claude-adapter.mjs +64 -8
  109. package/plugins/src/base/scripts/automation-status-codex-adapter.mjs +61 -5
  110. package/plugins/src/base/scripts/automation-status-report.mjs +30 -0
  111. package/plugins/src/base/scripts/automation-status-run-history.mjs +185 -0
  112. package/plugins/src/base/skills/lisa-automation-status/SKILL.md +11 -3
  113. package/plugins/src/base/skills/lisa-exploratory-qa/SKILL.md +30 -0
  114. package/plugins/src/base/skills/lisa-intake/SKILL.md +40 -0
  115. package/plugins/src/base/skills/lisa-learnings-audit/SKILL.md +46 -10
  116. package/plugins/src/base/skills/lisa-monitor/SKILL.md +36 -0
  117. package/plugins/src/base/skills/lisa-project-ideation/SKILL.md +36 -0
  118. package/plugins/src/base/skills/lisa-repair-intake/SKILL.md +34 -0
@@ -975,6 +975,40 @@ Report outcomes in these buckets:
975
975
  State every item repaired this cycle and the action taken. If the output would be long, group by
976
976
  bucket and show compact refs plus counts.
977
977
 
978
+ ## Run outcome
979
+
980
+ As the registered `intake-repair` automation loop, each cycle conforms to the
981
+ `automation-runbook-contract` rule: it ends in **exactly one** of the six run outcomes and records it,
982
+ so a cycle that found nothing stuck and a cycle where the repair machinery itself broke never look
983
+ alike. A run outcome describes this *cycle*; the Summary-report buckets above describe *what happened
984
+ to each item* — the two never merge in the one-line summary.
985
+
986
+ | This cycle's exit path | Run outcome |
987
+ |---|---|
988
+ | Nothing actionable — the idle case (walk step 5): examined N, all active or in backoff | `nothing-needed` |
989
+ | Repairs applied **and confirmed** this cycle — `resumed` / `resynced` / `recovered` / `unblocked` / `closed_out` / `rolled_up` / `relinked` / `normalized_ready` | `change-proved` |
990
+ | Repair produced new work for a human to pick up — e.g. an unmergeable PR or failed deploy filed as a **build-ready fix ticket** and left `blocked` | `candidate-proposed` |
991
+ | A repair reached an autonomy boundary needing a human (a protected-deploy approval before it can proceed) | `approval-requested` |
992
+ | The loop itself could not run — the queue is unreadable or tracker credentials are revoked | `recovery-required` |
993
+
994
+ Record **exactly one** outcome per invocation through the run-record CLI, naming this loop's runbook
995
+ (the `--summary` is the operator-readable one-liner in the contract's exemplar voice — plain,
996
+ specific, actionable, e.g. `Examined 14 items; all active or in backoff — nothing to repair.` for
997
+ `nothing-needed`):
998
+
999
+ ```bash
1000
+ node "${CLAUDE_PLUGIN_ROOT}/scripts/automation-run-record.mjs" \
1001
+ --loop-id intake-repair --outcome change-proved \
1002
+ --summary "Recovered 3 stalled builds and closed out 2 rollups; all confirmed." \
1003
+ --runbook .lisa/automations/intake-repair.runbook.md [--ref <item-url>]...
1004
+ ```
1005
+
1006
+ If `${CLAUDE_PLUGIN_ROOT}` is unset, resolve the plugin scripts directory directly — the built copy
1007
+ `plugins/lisa/scripts/automation-run-record.mjs` or the source
1008
+ `plugins/src/base/scripts/automation-run-record.mjs`. If recording still fails, **degrade, never
1009
+ abort** (per `automation-runbook-contract`): note the recording failure in the run output and finish
1010
+ the cycle — a recording failure is a degradation to report, never a reason to block the loop.
1011
+
978
1012
  ## Schedule examples
979
1013
 
980
1014
  ```text
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Harper/Fabric-specific Lisa rules for TypeScript component apps.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-harper-fabric",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Harper/Fabric-specific rules for TypeScript component apps",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "NestJS-specific skills and migration write-protection hooks.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-nestjs",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "NestJS-specific skills (GraphQL, TypeORM) and hooks (migration write-protection)",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
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.254.0",
3
+ "version": "2.256.0",
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.254.0",
3
+ "version": "2.256.0",
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.254.0",
3
+ "version": "2.256.0",
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.254.0",
3
+ "version": "2.256.0",
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-phaser",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-phaser",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Phaser 4 game-development rules for TypeScript projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Ruby on Rails-specific skills and hooks for RuboCop and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-rails",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Ruby on Rails-specific hooks — RuboCop linting/formatting and ast-grep scanning on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "TypeScript-specific hooks for formatting, linting, and ast-grep scanning on edit.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-typescript",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "TypeScript-specific hooks — Prettier formatting, ESLint linting, ast-grep scanning, and error-suppression blocking on edit",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-wiki",
3
- "version": "2.254.0",
3
+ "version": "2.256.0",
4
4
  "description": "LLM Wiki — a distributable, git-native markdown knowledge base for Claude Code and Codex",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -260,3 +260,113 @@ async function writeJsonlAtomically(filePath, records) {
260
260
  await writeFile(tempPath, content, "utf8");
261
261
  await rename(tempPath, filePath);
262
262
  }
263
+
264
+ const CLI_USAGE = `Usage: node automation-run-record.mjs \\
265
+ --loop-id <slug> --outcome <${AUTOMATION_RUN_OUTCOMES.join("|")}> \\
266
+ --summary "<operator-readable one-liner>" --runbook <path> \\
267
+ [--ref <url>]... [--run-id <id>] [--project-root <dir>]`;
268
+
269
+ /**
270
+ * Translate a repeatable-flag argv into a {@link RecordAutomationRunInput}.
271
+ *
272
+ * Every flag takes a following value; `--ref` may repeat and accumulates into
273
+ * `refs`. Unknown flags and value-less flags throw so a typo never silently
274
+ * records the wrong thing.
275
+ *
276
+ * @param {readonly string[]} argv
277
+ * @returns {RecordAutomationRunInput}
278
+ */
279
+ function parseAutomationRunRecordArgv(argv) {
280
+ /** @type {Record<string, string>} */
281
+ const single = {};
282
+ /** @type {string[]} */
283
+ const refs = [];
284
+ const flags = {
285
+ "--loop-id": "loopId",
286
+ "--outcome": "outcome",
287
+ "--summary": "summary",
288
+ "--runbook": "runbook",
289
+ "--run-id": "runId",
290
+ "--project-root": "projectRoot",
291
+ };
292
+
293
+ for (let index = 0; index < argv.length; index += 1) {
294
+ const token = argv[index];
295
+ const eq = token.indexOf("=");
296
+ const flag = eq === -1 ? token : token.slice(0, eq);
297
+ const inlineValue = eq === -1 ? undefined : token.slice(eq + 1);
298
+ const takeValue = () => {
299
+ if (inlineValue !== undefined) {
300
+ return inlineValue;
301
+ }
302
+ index += 1;
303
+ if (index >= argv.length) {
304
+ throw new Error(`Missing value for ${flag}.`);
305
+ }
306
+ return argv[index];
307
+ };
308
+
309
+ if (flag === "--ref") {
310
+ refs.push(takeValue());
311
+ continue;
312
+ }
313
+ const key = flags[flag];
314
+ if (!key) {
315
+ throw new Error(`Unknown flag "${flag}".`);
316
+ }
317
+ single[key] = takeValue();
318
+ }
319
+
320
+ return { ...single, refs };
321
+ }
322
+
323
+ /**
324
+ * Argv-driven CLI wrapper so registered loop skills can record an outcome with
325
+ * one portable `node …/automation-run-record.mjs --outcome …` call. Delegates
326
+ * validation to {@link recordAutomationRun}; surfaces its errors verbatim.
327
+ *
328
+ * @param {readonly string[]} argv
329
+ * @returns {Promise<number>} process exit code
330
+ */
331
+ export async function runAutomationRunRecordCli(argv) {
332
+ if (argv.includes("--help") || argv.includes("-h")) {
333
+ process.stdout.write(`${CLI_USAGE}\n`);
334
+ return 0;
335
+ }
336
+ let input;
337
+ try {
338
+ input = parseAutomationRunRecordArgv(argv);
339
+ } catch (error) {
340
+ process.stderr.write(`${error.message}\n\n${CLI_USAGE}\n`);
341
+ return 2;
342
+ }
343
+ try {
344
+ const result = await recordAutomationRun(input);
345
+ process.stdout.write(
346
+ `${JSON.stringify({
347
+ path: result.path,
348
+ appended: result.appended,
349
+ outcome: result.record.outcome,
350
+ loop_id: result.record.loop_id,
351
+ run_id: result.record.run_id,
352
+ })}\n`
353
+ );
354
+ return 0;
355
+ } catch (error) {
356
+ process.stderr.write(`${error.message}\n`);
357
+ return 1;
358
+ }
359
+ }
360
+
361
+ // CLI entrypoint.
362
+ if (import.meta.url === `file://${process.argv[1]}`) {
363
+ runAutomationRunRecordCli(process.argv.slice(2)).then(
364
+ code => {
365
+ process.exitCode = code;
366
+ },
367
+ error => {
368
+ process.stderr.write(`${error?.message ?? error}\n`);
369
+ process.exitCode = 1;
370
+ }
371
+ );
372
+ }