@codyswann/lisa 2.148.0 → 2.150.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 (102) hide show
  1. package/dist/codex/command-skill-transformer.d.ts +4 -2
  2. package/dist/codex/command-skill-transformer.d.ts.map +1 -1
  3. package/dist/codex/command-skill-transformer.js +10 -7
  4. package/dist/codex/command-skill-transformer.js.map +1 -1
  5. package/dist/codex/skills-installer.d.ts +1 -2
  6. package/dist/codex/skills-installer.d.ts.map +1 -1
  7. package/dist/codex/skills-installer.js +9 -176
  8. package/dist/codex/skills-installer.js.map +1 -1
  9. package/dist/core/config.d.ts +4 -3
  10. package/dist/core/config.d.ts.map +1 -1
  11. package/dist/core/config.js +1 -0
  12. package/dist/core/config.js.map +1 -1
  13. package/dist/core/lisa-skill-sources.d.ts +63 -0
  14. package/dist/core/lisa-skill-sources.d.ts.map +1 -0
  15. package/dist/core/lisa-skill-sources.js +197 -0
  16. package/dist/core/lisa-skill-sources.js.map +1 -0
  17. package/dist/core/lisa.d.ts +12 -0
  18. package/dist/core/lisa.d.ts.map +1 -1
  19. package/dist/core/lisa.js +53 -0
  20. package/dist/core/lisa.js.map +1 -1
  21. package/dist/opencode/manifest.d.ts +26 -0
  22. package/dist/opencode/manifest.d.ts.map +1 -0
  23. package/dist/opencode/manifest.js +94 -0
  24. package/dist/opencode/manifest.js.map +1 -0
  25. package/dist/opencode/mcp-installer.d.ts +89 -0
  26. package/dist/opencode/mcp-installer.d.ts.map +1 -0
  27. package/dist/opencode/mcp-installer.js +160 -0
  28. package/dist/opencode/mcp-installer.js.map +1 -0
  29. package/dist/opencode/settings-installer.d.ts +41 -0
  30. package/dist/opencode/settings-installer.d.ts.map +1 -0
  31. package/dist/opencode/settings-installer.js +127 -0
  32. package/dist/opencode/settings-installer.js.map +1 -0
  33. package/dist/opencode/skills-installer.d.ts +32 -0
  34. package/dist/opencode/skills-installer.d.ts.map +1 -0
  35. package/dist/opencode/skills-installer.js +159 -0
  36. package/dist/opencode/skills-installer.js.map +1 -0
  37. package/package.json +2 -1
  38. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa/rules/reference/leaf-only-lifecycle.md +9 -4
  41. package/plugins/lisa/skills/github-build-intake/SKILL.md +10 -0
  42. package/plugins/lisa/skills/jira-build-intake/SKILL.md +10 -0
  43. package/plugins/lisa/skills/linear-build-intake/SKILL.md +10 -0
  44. package/plugins/lisa-agy/plugin.json +1 -1
  45. package/plugins/lisa-agy/skills/github-build-intake/SKILL.md +10 -0
  46. package/plugins/lisa-agy/skills/jira-build-intake/SKILL.md +10 -0
  47. package/plugins/lisa-agy/skills/linear-build-intake/SKILL.md +10 -0
  48. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  51. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-copilot/rules/reference/leaf-only-lifecycle.md +9 -4
  55. package/plugins/lisa-copilot/skills/github-build-intake/SKILL.md +10 -0
  56. package/plugins/lisa-copilot/skills/jira-build-intake/SKILL.md +10 -0
  57. package/plugins/lisa-copilot/skills/linear-build-intake/SKILL.md +10 -0
  58. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-cursor/rules/leaf-only-lifecycle-reference.mdc +9 -4
  60. package/plugins/lisa-cursor/skills/github-build-intake/SKILL.md +10 -0
  61. package/plugins/lisa-cursor/skills/jira-build-intake/SKILL.md +10 -0
  62. package/plugins/lisa-cursor/skills/linear-build-intake/SKILL.md +10 -0
  63. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-expo-agy/plugin.json +1 -1
  66. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  70. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  71. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  75. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  76. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  77. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  78. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  80. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  81. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  82. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  84. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  85. package/plugins/lisa-rails-agy/plugin.json +1 -1
  86. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  89. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  90. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  91. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  92. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  93. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  95. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  96. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  97. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  98. package/plugins/src/base/rules/reference/leaf-only-lifecycle.md +9 -4
  99. package/plugins/src/base/skills/github-build-intake/SKILL.md +10 -0
  100. package/plugins/src/base/skills/jira-build-intake/SKILL.md +10 -0
  101. package/plugins/src/base/skills/linear-build-intake/SKILL.md +10 -0
  102. package/scripts/internal-opencode-skill-policy.json +3 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-openclaw",
3
- "version": "2.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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-rails",
3
- "version": "2.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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.148.0",
3
+ "version": "2.150.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"
@@ -58,7 +58,7 @@ So the exception is narrow only at the top: childlessness promotes every type **
58
58
 
59
59
  ## Parent status rollup (the state machine)
60
60
 
61
- A parent/container never sets its own lifecycle state; it **derives** it from the roll-up of its children's states. Rollup is evaluated whenever a child transitions (or when intake observes the child set). Using the canonical build-lifecycle roles from `config-resolution` (`ready`, `claimed`, `review`, `blocked`, `done`):
61
+ A parent/container never sets its own lifecycle state; it **derives** it from the roll-up of its children's states. Rollup is evaluated whenever a child transitions — the **forward** arm runs in each `*-build-intake` done step the moment a leaf reaches `done`, walking the leaf's ancestor chain (see Citation → Rollup) — or when intake observes the child set, with `repair-intake` as the **recovery** net for parents left un-rolled. Using the canonical build-lifecycle roles from `config-resolution` (`ready`, `claimed`, `review`, `blocked`, `done`):
62
62
 
63
63
  Evaluate over the **env ladder** `in-progress < dev < staging < production` — the ordered keys of the project's env-keyed `done` map, with `claimed`/`review` as the rung below the first env (a single-environment project has only the `production` rung). Take the **first** match:
64
64
 
@@ -114,9 +114,14 @@ Skills that enforce this invariant or perform rollup cite this rule by slug (the
114
114
  - **Decomposition / write** (`*-to-tracker`, `*-write-*`) — apply the `ready` role to leaves only; never to containers.
115
115
  - **Validate** (`*-validate-*`) — FAIL a container carrying the build-ready role; FAIL a childless **Epic** marked build-ready (a childless Story/Spike is a valid leaf and passes).
116
116
  - **Build intake** (`*-build-intake`, `tracker-build-intake`) — dispatch leaves only; move or safe-block containers with stale build-ready roles according to vendor lifecycle semantics.
117
- - **Rollup** — derive parent state from children per the state machine above. `repair-intake`
118
- also uses this rule to close out parent/container rollups that were left open after every
119
- required child became terminal.
117
+ - **Rollup** — derive parent state from children per the state machine above. The **forward**
118
+ rollup fires the moment a leaf transitions to `done`: each `*-build-intake` done step (`3d.1`)
119
+ walks the leaf's ancestor chain and invokes `*-sync --rollup`, so a parent advances/closes as
120
+ soon as its last required child ships rather than waiting on a cron. `*-sync --rollup` is the
121
+ single rollup implementation; `repair-intake` calls the same path as the **recovery** net,
122
+ closing out parent/container rollups that were left open after every required child became
123
+ terminal — e.g. children closed outside the Lisa flow (external automation), or completed while
124
+ no forward `*-build-intake` cycle ran.
120
125
  - **Terminal native closure** (`*-build-intake`, `repair-intake`, terminal helpers) — after a leaf
121
126
  or all-terminal rollup parent reaches the true terminal `done` role, finalize it through the
122
127
  provider's native close / complete / resolve mechanism where available; never do this for
@@ -300,6 +300,16 @@ This close is idempotent: if the issue is already closed, record that native clo
300
300
 
301
301
  For any non-Success outcome, do NOT transition. The issue sits in `$CLAIMED` (or wherever `lisa:github-agent` left it) — humans take it from there.
302
302
 
303
+ #### 3d.1 Roll up the parent chain (forward rollup)
304
+
305
+ Run this **only after a successful `$DONE` transition in 3d** (the leaf actually reached an env — intermediate or terminal). This is the **forward** arm of the `leaf-only-lifecycle` rule's *"rollup is evaluated whenever a child transitions"* requirement: a leaf reaching `$DONE` is exactly such a transition, so its parent's derived state may now have changed — the last open child of a Story just shipped, so the Story rolls up to `$DONE` and closes, which may in turn complete its Epic. Without this step a fully-built parent stays open until the recovery `lisa:repair-intake` cron happens to run.
306
+
307
+ 1. Resolve the leaf's parent using the same hierarchy `lisa:github-read-issue` uses — native sub-issue parent first (GraphQL `parent`), then body parentage (`Parent: #<n>` / `Parent Epic: #<n>`). If the leaf has no parent, skip — nothing to roll up.
308
+ 2. Walk **up the ancestor chain bottom-up**: for the immediate parent, then its parent, and so on, invoke `lisa:github-sync <org>/<repo>#<ancestor> --rollup`. That skill derives the ancestor's `status:*` from its children per `leaf-only-lifecycle`, applies it only when it differs (never `status:ready`), and performs terminal native closure (`gh issue close --reason completed`) when the derived env is the production/terminal `$DONE`. It is idempotent and safe-defaults (suggests, does not guess) when the rolled state is ambiguous.
309
+ 3. Stop walking up when an ancestor has no parent, or when `--rollup` reports no change (a higher ancestor cannot advance past an unchanged child). Record each rolled-up ancestor and its derived state in the summary.
310
+
311
+ This does not re-implement the state machine — it delegates to `lisa:github-sync --rollup`, the single rollup implementation `lisa:repair-intake` also uses, so the forward and recovery paths can never drift. Children closed **outside** this flow (e.g. by external automation) are not observed here; `lisa:repair-intake` remains the recovery net for those.
312
+
303
313
  #### 3e. Stop
304
314
 
305
315
  Stop immediately after the first claimed, skipped, blocked, held, or errored issue. Later scheduler invocations process the remaining ready issues.
@@ -218,6 +218,16 @@ If `lisa:jira-agent` returned Success:
218
218
 
219
219
  For any non-Success outcome, do NOT transition. The ticket sits in `$CLAIMED` (or wherever `lisa:jira-agent` left it for the Blocked case) — the cycle's job is done; humans take it from there.
220
220
 
221
+ #### 3d.1 Roll up the parent chain (forward rollup)
222
+
223
+ Run this **only after a successful `$DONE` transition in 3d**. This is the **forward** arm of the `leaf-only-lifecycle` rule's *"rollup is evaluated whenever a child transitions"* requirement: a leaf reaching `$DONE` may complete its parent Story, which may in turn complete its Epic. Without this step a fully-built parent stays open until the recovery `lisa:repair-intake` cron happens to run.
224
+
225
+ 1. Resolve the ticket's parent using the same hierarchy `lisa:jira-read-ticket` uses — the native Epic → Story → Sub-task parentage (parent field / Epic link). If the ticket has no parent, skip — nothing to roll up.
226
+ 2. Walk **up the ancestor chain bottom-up** (Sub-task → Story → Epic): for each ancestor invoke `lisa:jira-sync <ANCESTOR-KEY> --rollup`. That skill derives the ancestor's status from its children per `leaf-only-lifecycle`, applies it via `lisa:atlassian-access` `operation: transition` only when it differs (never the build-ready status), and performs terminal native resolution (`statusCategory = Done` with a resolution when the workflow requires one) when the derived env is the terminal `$DONE`. It is idempotent and safe-defaults (suggests, does not guess) when the rolled state is ambiguous.
227
+ 3. Stop walking up when an ancestor has no parent, or when `--rollup` reports no change. Record each rolled-up ancestor and its derived state in the summary.
228
+
229
+ This does not re-implement the state machine — it delegates to `lisa:jira-sync --rollup`, the single rollup implementation `lisa:repair-intake` also uses, so the forward and recovery paths can never drift. Children closed **outside** this flow are not observed here; `lisa:repair-intake` remains the recovery net for those.
230
+
221
231
  #### 3e. Stop
222
232
 
223
233
  Stop immediately after the first claimed, skipped, blocked, held, or errored ticket. Later scheduler invocations process the remaining ready tickets.
@@ -228,6 +228,16 @@ If `lisa:linear-agent` returned Success:
228
228
 
229
229
  For any non-Success outcome, do NOT transition. The Issue sits where the agent left it — humans take it from there.
230
230
 
231
+ #### 3d.1 Roll up the parent chain (forward rollup)
232
+
233
+ Run this **only after a successful `$DONE` transition in 3d**. This is the **forward** arm of the `leaf-only-lifecycle` rule's *"rollup is evaluated whenever a child transitions"* requirement: a leaf reaching `$DONE` may complete its parent Issue, which may in turn complete its Project. Without this step a fully-built parent stays open until the recovery `lisa:repair-intake` cron happens to run.
234
+
235
+ 1. Resolve the Issue's parent using the same hierarchy `lisa:linear-read-issue` uses — native parentage: a sub-issue's `parentId`, and Project membership via `projectId` for the Epic-equivalent. If the Issue has no parent, skip — nothing to roll up.
236
+ 2. Walk **up the ancestor chain bottom-up** (sub-issue → parent Issue → Project): for each ancestor invoke `lisa:linear-sync <ANCESTOR-ID> --rollup`. That skill derives the ancestor's `status:*` from its children per `leaf-only-lifecycle`, applies it via `mcp__linear-server__save_issue` only when it differs (never `status:ready`), and moves the native Linear `state` to the configured Done / Completed state when the derived env is the terminal `$DONE`. It is idempotent and safe-defaults (suggests, does not guess) when the rolled state is ambiguous.
237
+ 3. Stop walking up when an ancestor has no parent, or when `--rollup` reports no change. Record each rolled-up ancestor and its derived state in the summary.
238
+
239
+ This does not re-implement the state machine — it delegates to `lisa:linear-sync --rollup`, the single rollup implementation `lisa:repair-intake` also uses, so the forward and recovery paths can never drift. Children closed **outside** this flow are not observed here; `lisa:repair-intake` remains the recovery net for those.
240
+
231
241
  #### 3e. Stop
232
242
 
233
243
  Stop immediately after the first claimed, skipped, blocked, held, or errored Issue. Later scheduler invocations process the remaining ready Issues.
@@ -0,0 +1,3 @@
1
+ {
2
+ "denylistedSkills": ["harness-parity-council"]
3
+ }