@codyswann/lisa 4.75.1 → 4.76.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 (114) hide show
  1. package/all/copy-overwrite/scripts/lib/npm-update-helper.mjs +14 -18
  2. package/all/copy-overwrite/scripts/npm-updater-helper-graph.json +1 -1
  3. package/dist/cli/remote-environment-contract.d.ts.map +1 -1
  4. package/dist/cli/remote-environment-contract.js +1 -0
  5. package/dist/cli/remote-environment-contract.js.map +1 -1
  6. package/dist/cli/ui-setup-readiness-install.d.ts.map +1 -1
  7. package/dist/cli/ui-setup-readiness-install.js +5 -1
  8. package/dist/cli/ui-setup-readiness-install.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-owned-hash-ledger.d.ts.map +1 -1
  14. package/dist/core/lisa-owned-hash-ledger.js +4 -0
  15. package/dist/core/lisa-owned-hash-ledger.js.map +1 -1
  16. package/dist/core/lisa.d.ts +17 -0
  17. package/dist/core/lisa.d.ts.map +1 -1
  18. package/dist/core/lisa.js +59 -0
  19. package/dist/core/lisa.js.map +1 -1
  20. package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
  21. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  22. package/dist/core/upstream-evidence-manifest.js +8 -4
  23. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  24. package/dist/devin/enforcement-fallback-installer.d.ts +51 -0
  25. package/dist/devin/enforcement-fallback-installer.d.ts.map +1 -0
  26. package/dist/devin/enforcement-fallback-installer.js +186 -0
  27. package/dist/devin/enforcement-fallback-installer.js.map +1 -0
  28. package/dist/devin/plugin-installer.d.ts +43 -0
  29. package/dist/devin/plugin-installer.d.ts.map +1 -0
  30. package/dist/devin/plugin-installer.js +78 -0
  31. package/dist/devin/plugin-installer.js.map +1 -0
  32. package/dist/health/plugin-inspection.d.ts.map +1 -1
  33. package/dist/health/plugin-inspection.js +1 -0
  34. package/dist/health/plugin-inspection.js.map +1 -1
  35. package/package.json +4 -4
  36. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  37. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  38. package/plugins/lisa-agy/plugin.json +1 -1
  39. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  41. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  42. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +1 -1
  46. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-devin/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-devin/.devin-plugin/plugin.json +1 -1
  50. package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +9 -0
  51. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  53. package/plugins/lisa-expo-agy/plugin.json +1 -1
  54. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +1 -1
  58. package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +9 -0
  59. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  61. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  62. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +1 -1
  66. package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +9 -0
  67. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  69. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  70. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  72. package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +1 -1
  73. package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +1 -1
  74. package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +9 -0
  75. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  78. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +1 -1
  81. package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +1 -1
  82. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  83. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  84. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  85. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  86. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  87. package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +1 -1
  88. package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +1 -1
  89. package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +9 -0
  90. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  91. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  92. package/plugins/lisa-rails-agy/plugin.json +1 -1
  93. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  95. package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +1 -1
  96. package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +1 -1
  97. package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +9 -0
  98. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  99. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  100. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  101. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  102. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  103. package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +1 -1
  104. package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +1 -1
  105. package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +9 -0
  106. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  107. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  108. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  109. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  110. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  111. package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +1 -1
  112. package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +1 -1
  113. package/scripts/generate-devin-plugin-artifacts.mjs +13 -2
  114. package/ui/index.html +14 -1
@@ -0,0 +1,51 @@
1
+ /** Dispatcher path that identifies the Lisa-owned handler. */
2
+ export declare const DEVIN_FALLBACK_DISPATCHER = "scripts/lisa-enforcement-fallback.sh";
3
+ /** Devin tools whose calls the dispatcher's guards evaluate. */
4
+ export declare const DEVIN_FALLBACK_MATCHER = "^(exec|write|edit|apply_patch)$";
5
+ /**
6
+ * The handler command. Devin sets `DEVIN_PROJECT_DIR` (and `CLAUDE_PROJECT_DIR`)
7
+ * to the project root; the git/pwd fallback covers a runner that does not.
8
+ * Without `jq` the payload passes unchanged, exactly as the guards behave when
9
+ * they cannot parse it.
10
+ *
11
+ * The root has leading and trailing whitespace trimmed (never inner spaces —
12
+ * a project path may contain them) before the fallback applies, so a `" "`
13
+ * value cannot survive and point at a dispatcher that cannot exist. Every
14
+ * failure that would otherwise ALLOW the call fails closed with exit 2, the
15
+ * only status Devin blocks on: a missing dispatcher, and a tool-name mapping
16
+ * that could not run (no `jq`, or `jq` failed) — forwarding the raw lowercase
17
+ * `exec` would make every Bash guard stand down.
18
+ */
19
+ export declare const DEVIN_FALLBACK_COMMAND: string;
20
+ /** `.devin/hooks.v1.json`: event name → matcher groups. */
21
+ type DevinHooksFile = Readonly<Record<string, unknown>>;
22
+ /** Result of installing the fallback. */
23
+ export interface DevinEnforcementFallbackResult {
24
+ /** Files written, relative to the project root. */
25
+ readonly managedFiles: readonly string[];
26
+ /** Number of Lisa-owned hook handlers in the written file. */
27
+ readonly hookEntries: number;
28
+ }
29
+ /**
30
+ * Whether a `.devin/hooks.v1.json` body carries the current Lisa fallback
31
+ * handler under PreToolUse. Used by readiness checks, so a file that merely
32
+ * exists (or is `{}`) is not mistaken for an installed fallback.
33
+ * @param raw - File contents, or undefined when absent
34
+ * @returns True when the exact Lisa handler is registered
35
+ */
36
+ export declare function hasDevinFallback(raw: string | undefined): boolean;
37
+ /**
38
+ * Merge the Lisa fallback into a parsed hooks file.
39
+ * @param existing - Parsed host file, or `{}`
40
+ * @returns The file with exactly one Lisa PreToolUse handler
41
+ */
42
+ export declare function mergeDevinFallback(existing: DevinHooksFile): DevinHooksFile;
43
+ /**
44
+ * Reconcile `.devin/hooks.v1.json` so it holds exactly one Lisa enforcement
45
+ * fallback handler alongside any host-authored hooks.
46
+ * @param destDir - Host project root
47
+ * @returns Managed file and handler counts
48
+ */
49
+ export declare function installDevinEnforcementFallback(destDir: string): Promise<DevinEnforcementFallbackResult>;
50
+ export {};
51
+ //# sourceMappingURL=enforcement-fallback-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcement-fallback-installer.d.ts","sourceRoot":"","sources":["../../src/devin/enforcement-fallback-installer.ts"],"names":[],"mappings":"AA4BA,8DAA8D;AAC9D,eAAO,MAAM,yBAAyB,yCAAyC,CAAC;AAEhF,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,oCAAoC,CAAC;AAExE;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,QAQvB,CAAC;AAyBb,2DAA2D;AAC3D,KAAK,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAExD,yCAAyC;AACzC,MAAM,WAAW,8BAA8B;IAC7C,mDAAmD;IACnD,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAcD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAoBjE;AAkBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,GAAG,cAAc,CAS3E;AA0CD;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,8BAA8B,CAAC,CAgBzC"}
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Install the repository-owned Devin enforcement fallback hook.
3
+ *
4
+ * Devin CLI reads project hooks from `.devin/hooks.v1.json`, where the whole
5
+ * file is the hooks object (`{ "PreToolUse": [ { matcher, hooks } ] }`). It
6
+ * also reads `.claude/settings.json` hooks, but those never fire on Devin: their
7
+ * `Bash` / `Write|Edit|MultiEdit` matchers name Claude tools, and Devin's tools
8
+ * are `exec` / `write` / `edit` (measured by run on Devin CLI 3000.11.3,
9
+ * CodySwannGT/lisa#4427). So without this file a Devin session whose Lisa
10
+ * plugin is missing, disabled, or untrusted runs with no enforcement at all.
11
+ *
12
+ * The single Lisa entry routes Devin's shell and file-edit tools to
13
+ * `scripts/lisa-enforcement-fallback.sh` — the same dispatcher Claude and
14
+ * Codex use — after rewriting the payload's lowercase `tool_name` to the
15
+ * Claude name the guards test for. Host-authored entries are preserved; the
16
+ * Lisa entry is recognised by its EXACT command (see {@link LISA_OWNED_COMMANDS}),
17
+ * so no marker field has to be added to a schema Lisa does not own, and a host
18
+ * command that merely calls the dispatcher alongside its own checks is never
19
+ * mistaken for Lisa's and removed.
20
+ * @module devin/enforcement-fallback-installer
21
+ */
22
+ import * as fse from "fs-extra";
23
+ import { readFile, rename, writeFile } from "node:fs/promises";
24
+ import * as path from "node:path";
25
+ const DEVIN_DIR = ".devin";
26
+ const HOOKS_FILENAME = "hooks.v1.json";
27
+ /** Dispatcher path that identifies the Lisa-owned handler. */
28
+ export const DEVIN_FALLBACK_DISPATCHER = "scripts/lisa-enforcement-fallback.sh";
29
+ /** Devin tools whose calls the dispatcher's guards evaluate. */
30
+ export const DEVIN_FALLBACK_MATCHER = "^(exec|write|edit|apply_patch)$";
31
+ /**
32
+ * The handler command. Devin sets `DEVIN_PROJECT_DIR` (and `CLAUDE_PROJECT_DIR`)
33
+ * to the project root; the git/pwd fallback covers a runner that does not.
34
+ * Without `jq` the payload passes unchanged, exactly as the guards behave when
35
+ * they cannot parse it.
36
+ *
37
+ * The root has leading and trailing whitespace trimmed (never inner spaces —
38
+ * a project path may contain them) before the fallback applies, so a `" "`
39
+ * value cannot survive and point at a dispatcher that cannot exist. Every
40
+ * failure that would otherwise ALLOW the call fails closed with exit 2, the
41
+ * only status Devin blocks on: a missing dispatcher, and a tool-name mapping
42
+ * that could not run (no `jq`, or `jq` failed) — forwarding the raw lowercase
43
+ * `exec` would make every Bash guard stand down.
44
+ */
45
+ export const DEVIN_FALLBACK_COMMAND = [
46
+ "root=\"$(printf '%s' \"${DEVIN_PROJECT_DIR-}\" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')\"",
47
+ '[ -n "$root" ] || root="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"',
48
+ `[ -f "$root/${DEVIN_FALLBACK_DISPATCHER}" ] || { echo "Lisa enforcement dispatcher missing at $root/${DEVIN_FALLBACK_DISPATCHER}; refusing (run lisa apply)" >&2; exit 2; }`,
49
+ "payload=$(cat)",
50
+ `mapped=$(printf '%s' "$payload" | jq -c 'if (.tool_name | type) == "string" then .tool_name |= ({"exec": "Bash", "write": "Write", "edit": "Edit"}[.] // .) else . end' 2>/dev/null) || mapped=""`,
51
+ `[ -n "$mapped" ] || { echo "Lisa could not map the Devin tool name (jq missing or failed); refusing" >&2; exit 2; }`,
52
+ `printf '%s' "$mapped" | /bin/bash "$root/${DEVIN_FALLBACK_DISPATCHER}"`,
53
+ ].join("; ");
54
+ /**
55
+ * Every command string Lisa has ever written as its fallback handler. Ownership
56
+ * is an exact match against this list: when the command changes, the previous
57
+ * spelling stays here so a re-apply replaces it instead of leaving a stale copy.
58
+ */
59
+ const LISA_OWNED_COMMANDS = new Set([
60
+ DEVIN_FALLBACK_COMMAND,
61
+ ]);
62
+ /**
63
+ * Whether a handler is the Lisa-owned dispatcher entry.
64
+ * @param handler - Hook handler from the host file
65
+ * @returns True when its command runs the Lisa dispatcher
66
+ */
67
+ function isLisaHandler(handler) {
68
+ return (typeof handler.command === "string" &&
69
+ LISA_OWNED_COMMANDS.has(handler.command));
70
+ }
71
+ /**
72
+ * Whether a `.devin/hooks.v1.json` body carries the current Lisa fallback
73
+ * handler under PreToolUse. Used by readiness checks, so a file that merely
74
+ * exists (or is `{}`) is not mistaken for an installed fallback.
75
+ * @param raw - File contents, or undefined when absent
76
+ * @returns True when the exact Lisa handler is registered
77
+ */
78
+ export function hasDevinFallback(raw) {
79
+ if (raw === undefined)
80
+ return false;
81
+ try {
82
+ const parsed = JSON.parse(raw);
83
+ if (parsed === null || typeof parsed !== "object")
84
+ return false;
85
+ const groups = parsed.PreToolUse;
86
+ if (!Array.isArray(groups))
87
+ return false;
88
+ return groups.some(group => group?.matcher === DEVIN_FALLBACK_MATCHER &&
89
+ Array.isArray(group.hooks) &&
90
+ group.hooks.some(handler => handler?.type === "command" &&
91
+ handler.command === DEVIN_FALLBACK_COMMAND));
92
+ }
93
+ catch {
94
+ return false;
95
+ }
96
+ }
97
+ /**
98
+ * Remove every Lisa-owned handler from one event's groups, dropping groups
99
+ * left with no handlers. Host handlers and fields are kept verbatim.
100
+ * @param groups - The event's matcher groups as read from disk
101
+ * @returns Groups without Lisa handlers
102
+ */
103
+ function withoutLisaHandlers(groups) {
104
+ if (!Array.isArray(groups))
105
+ return [];
106
+ return groups.flatMap(group => {
107
+ if (!Array.isArray(group?.hooks))
108
+ return [group];
109
+ const kept = group.hooks.filter(handler => !isLisaHandler(handler));
110
+ if (kept.length === group.hooks.length)
111
+ return [group];
112
+ return kept.length > 0 ? [{ ...group, hooks: kept }] : [];
113
+ });
114
+ }
115
+ /**
116
+ * Merge the Lisa fallback into a parsed hooks file.
117
+ * @param existing - Parsed host file, or `{}`
118
+ * @returns The file with exactly one Lisa PreToolUse handler
119
+ */
120
+ export function mergeDevinFallback(existing) {
121
+ const lisaGroup = {
122
+ matcher: DEVIN_FALLBACK_MATCHER,
123
+ hooks: [{ type: "command", command: DEVIN_FALLBACK_COMMAND, timeout: 30 }],
124
+ };
125
+ return {
126
+ ...existing,
127
+ PreToolUse: [...withoutLisaHandlers(existing.PreToolUse), lisaGroup],
128
+ };
129
+ }
130
+ /**
131
+ * Parse JSON, naming the file when it is malformed.
132
+ * @param raw - File contents
133
+ * @param file - Path for the error message
134
+ * @returns The parsed value
135
+ */
136
+ function parseJson(raw, file) {
137
+ try {
138
+ return JSON.parse(raw);
139
+ }
140
+ catch (err) {
141
+ const reason = err instanceof Error ? err.message : String(err);
142
+ throw new Error(`${file} is not valid JSON (${reason}); refusing to overwrite it`);
143
+ }
144
+ }
145
+ /**
146
+ * Parse the host file, refusing anything that is not a JSON object rather than
147
+ * overwriting host content Lisa cannot read.
148
+ * @param raw - File contents
149
+ * @param file - Path for the error message
150
+ * @returns Parsed hooks file
151
+ */
152
+ function parseHooksFile(raw, file) {
153
+ const parsed = parseJson(raw, file);
154
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
155
+ throw new Error(`${file} must be a JSON object of hook events; refusing to overwrite it`);
156
+ }
157
+ const preToolUse = parsed.PreToolUse;
158
+ if (preToolUse !== undefined && !Array.isArray(preToolUse)) {
159
+ throw new Error(`${file} has a PreToolUse value that is not an array; refusing to overwrite it`);
160
+ }
161
+ return parsed;
162
+ }
163
+ /**
164
+ * Reconcile `.devin/hooks.v1.json` so it holds exactly one Lisa enforcement
165
+ * fallback handler alongside any host-authored hooks.
166
+ * @param destDir - Host project root
167
+ * @returns Managed file and handler counts
168
+ */
169
+ export async function installDevinEnforcementFallback(destDir) {
170
+ const hooksPath = path.join(destDir, DEVIN_DIR, HOOKS_FILENAME);
171
+ await fse.ensureDir(path.dirname(hooksPath));
172
+ const existing = (await fse.pathExists(hooksPath))
173
+ ? parseHooksFile(await readFile(hooksPath, "utf8"), hooksPath)
174
+ : {};
175
+ const merged = mergeDevinFallback(existing);
176
+ // Write beside the target and rename over it, so an interrupted apply can
177
+ // never leave a truncated hooks file that silently disables every hook.
178
+ const tempPath = `${hooksPath}.${process.pid}.tmp`;
179
+ await writeFile(tempPath, `${JSON.stringify(merged, null, 2)}\n`, "utf8");
180
+ await rename(tempPath, hooksPath);
181
+ return {
182
+ managedFiles: Object.freeze([path.join(DEVIN_DIR, HOOKS_FILENAME)]),
183
+ hookEntries: 1,
184
+ };
185
+ }
186
+ //# sourceMappingURL=enforcement-fallback-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enforcement-fallback-installer.js","sourceRoot":"","sources":["../../src/devin/enforcement-fallback-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /** Result of one Devin plugin install. */
2
+ export interface DevinPluginInstallResult {
3
+ /** True when devin was on PATH and an install was attempted. */
4
+ readonly attempted: boolean;
5
+ /** True when the install command exited 0. */
6
+ readonly installed: boolean;
7
+ /** Absolute variant directory passed to `devin plugins install`. */
8
+ readonly source: string | undefined;
9
+ /** Error message captured on failure, or undefined on success/no-op. */
10
+ readonly error: string | undefined;
11
+ }
12
+ /** Runs one `devin` invocation; injectable for tests. */
13
+ export type DevinRunner = (args: readonly string[]) => Promise<void>;
14
+ /** Outcome of probing for the Devin CLI. */
15
+ export interface DevinDetection {
16
+ /** True when `devin --version` exited 0. */
17
+ readonly available: boolean;
18
+ /**
19
+ * Why the probe failed, when it failed for any reason OTHER than the CLI
20
+ * being absent. Undefined when the CLI is simply not installed (ENOENT) or
21
+ * when it is available — so a broken install is reported, never mistaken
22
+ * for an absent one.
23
+ */
24
+ readonly error: string | undefined;
25
+ }
26
+ /**
27
+ * Probe for the Devin CLI.
28
+ * @param run - Runner used to probe `devin --version`
29
+ * @returns Availability, plus the failure reason when the CLI exists but the probe failed
30
+ */
31
+ export declare function detectDevin(run?: DevinRunner): Promise<DevinDetection>;
32
+ /**
33
+ * Install one Lisa Devin plugin variant from Lisa's `plugins/` directory.
34
+ *
35
+ * The caller detects `devin` once (see {@link detectDevin}) and calls this per
36
+ * variant, so a missing CLI costs one probe rather than one per variant.
37
+ * @param lisaPluginRoot - Absolute path to Lisa's `plugins/` directory
38
+ * @param variantName - Variant directory (`lisa-devin`, `lisa-typescript-devin`, …)
39
+ * @param run - Runner for the `devin` CLI
40
+ * @returns Install result
41
+ */
42
+ export declare function installDevinPlugin(lisaPluginRoot: string, variantName?: string, run?: DevinRunner): Promise<DevinPluginInstallResult>;
43
+ //# sourceMappingURL=plugin-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-installer.d.ts","sourceRoot":"","sources":["../../src/devin/plugin-installer.ts"],"names":[],"mappings":"AAyBA,0CAA0C;AAC1C,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAWrE,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,GAAG,GAAE,WAA2B,GAC/B,OAAO,CAAC,cAAc,CAAC,CAUzB;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,MAAqB,EAClC,GAAG,GAAE,WAA2B,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CAiBnC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Detect `devin` (Devin CLI) and install Lisa's Devin plugin variants.
3
+ *
4
+ * Devin installs plugins natively from a local path:
5
+ * `devin plugins install --local -y <plugins/lisa-devin>`. `--local` keeps the
6
+ * install on this machine instead of recording it in the user's Devin Cloud
7
+ * plugin manifest, and `-y` skips the interactive trust prompt (the source is
8
+ * Lisa's own package, which the operator already chose to install). Re-running
9
+ * the install against the same source refreshes it, so the pass is idempotent.
10
+ *
11
+ * Detection rule: `devin` must be on `$PATH`. If absent, no-op — the
12
+ * repository enforcement fallback (`.devin/hooks.v1.json`) still governs a
13
+ * Devin session in the project.
14
+ * @module devin/plugin-installer
15
+ */
16
+ import { execFile } from "node:child_process";
17
+ import { existsSync } from "node:fs";
18
+ import * as path from "node:path";
19
+ import { promisify } from "node:util";
20
+ const execFileAsync = promisify(execFile);
21
+ /** Bound on one `devin plugins install` call. */
22
+ const INSTALL_TIMEOUT_MS = 120_000;
23
+ /**
24
+ * Default runner: execFile (no shell), so the plugin path is a single argv
25
+ * entry and never subject to quoting or expansion.
26
+ * @param args - Arguments after `devin`
27
+ */
28
+ const defaultRunner = async (args) => {
29
+ await execFileAsync("devin", [...args], { timeout: INSTALL_TIMEOUT_MS });
30
+ };
31
+ /**
32
+ * Probe for the Devin CLI.
33
+ * @param run - Runner used to probe `devin --version`
34
+ * @returns Availability, plus the failure reason when the CLI exists but the probe failed
35
+ */
36
+ export async function detectDevin(run = defaultRunner) {
37
+ try {
38
+ await run(["--version"]);
39
+ return { available: true, error: undefined };
40
+ }
41
+ catch (err) {
42
+ const code = err?.code;
43
+ if (code === "ENOENT")
44
+ return { available: false, error: undefined };
45
+ const message = err instanceof Error ? err.message : String(err);
46
+ return { available: false, error: message };
47
+ }
48
+ }
49
+ /**
50
+ * Install one Lisa Devin plugin variant from Lisa's `plugins/` directory.
51
+ *
52
+ * The caller detects `devin` once (see {@link detectDevin}) and calls this per
53
+ * variant, so a missing CLI costs one probe rather than one per variant.
54
+ * @param lisaPluginRoot - Absolute path to Lisa's `plugins/` directory
55
+ * @param variantName - Variant directory (`lisa-devin`, `lisa-typescript-devin`, …)
56
+ * @param run - Runner for the `devin` CLI
57
+ * @returns Install result
58
+ */
59
+ export async function installDevinPlugin(lisaPluginRoot, variantName = "lisa-devin", run = defaultRunner) {
60
+ const source = path.join(lisaPluginRoot, variantName);
61
+ if (!existsSync(path.join(source, ".devin-plugin", "plugin.json"))) {
62
+ return {
63
+ attempted: true,
64
+ installed: false,
65
+ source,
66
+ error: `Lisa Devin variant not found at ${source}/.devin-plugin/plugin.json — run \`bun run build:plugins\` first`,
67
+ };
68
+ }
69
+ try {
70
+ await run(["plugins", "install", "--local", "-y", source]);
71
+ return { attempted: true, installed: true, source, error: undefined };
72
+ }
73
+ catch (err) {
74
+ const message = err instanceof Error ? err.message : String(err);
75
+ return { attempted: true, installed: false, source, error: message };
76
+ }
77
+ }
78
+ //# sourceMappingURL=plugin-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-installer.js","sourceRoot":"","sources":["../../src/devin/plugin-installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,iDAAiD;AACjD,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAiBnC;;;;GAIG;AACH,MAAM,aAAa,GAAgB,KAAK,EAAC,IAAI,EAAC,EAAE;IAC9C,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAC3E,CAAC,CAAC;AAeF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAmB,aAAa;IAEhC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACzB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA0C,EAAE,IAAI,CAAC;QAC/D,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,cAAsB,EACtB,cAAsB,YAAY,EAClC,MAAmB,aAAa;IAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO;YACL,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,KAAK;YAChB,MAAM;YACN,KAAK,EAAE,mCAAmC,MAAM,kEAAkE;SACnH,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-inspection.d.ts","sourceRoot":"","sources":["../../src/health/plugin-inspection.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAa3B;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;AAEhC,4CAA4C;AAC5C,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,qBA4CrC,CAAC;AAwBL;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,gBAAgB,CAAC,CA0D3B"}
1
+ {"version":3,"file":"plugin-inspection.d.ts","sourceRoot":"","sources":["../../src/health/plugin-inspection.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAa3B;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAC;AAEhC,4CAA4C;AAC5C,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,EAAE,qBA4CrC,CAAC;AAyBL;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,gBAAgB,CAAC,CA0D3B"}
@@ -65,6 +65,7 @@ function configuredHarness(config) {
65
65
  "agy",
66
66
  "copilot",
67
67
  "opencode",
68
+ "devin",
68
69
  "fleet",
69
70
  ].includes(harness)
70
71
  ? harness
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-inspection.js","sourceRoot":"","sources":["../../src/health/plugin-inspection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-inspection.js","sourceRoot":"","sources":["../../src/health/plugin-inspection.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -189,7 +189,7 @@
189
189
  "qs": "^6.16.0"
190
190
  },
191
191
  "name": "@codyswann/lisa",
192
- "version": "4.75.1",
192
+ "version": "4.76.0",
193
193
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
194
194
  "main": "dist/index.js",
195
195
  "exports": {
@@ -345,7 +345,7 @@
345
345
  "test": "tests"
346
346
  },
347
347
  "types": "./dist/index.d.ts",
348
- "lisaReleaseCommit": "da9f544cbc289f30711c26f846e4b2d78d7f0332",
349
- "gitHead": "da9f544cbc289f30711c26f846e4b2d78d7f0332",
350
- "lisaReleaseTag": "v4.75.1"
348
+ "lisaReleaseCommit": "7d92d4d2113c7b3a7b17aa8191951e507b999b8a",
349
+ "gitHead": "7d92d4d2113c7b3a7b17aa8191951e507b999b8a",
350
+ "lisaReleaseTag": "v4.76.0"
351
351
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -9,6 +9,11 @@
9
9
  # Usage: devin-tool-name-shim.sh <hook command> [args...]
10
10
  payload=$(cat)
11
11
  normalized=$payload
12
+ mapped=
13
+ case $payload in
14
+ *'"tool_name"'*) needs_mapping=1 ;;
15
+ *) needs_mapping=0 ;;
16
+ esac
12
17
  if command -v jq >/dev/null 2>&1; then
13
18
  mapped=$(printf '%s' "$payload" | jq -c '
14
19
  if (.tool_name | type) == "string" then
@@ -27,4 +32,8 @@ if command -v jq >/dev/null 2>&1; then
27
32
  }[.] // .)
28
33
  else . end' 2>/dev/null) && [ -n "$mapped" ] && normalized=$mapped
29
34
  fi
35
+ if [ "$needs_mapping" = 1 ] && [ -z "${mapped:-}" ]; then
36
+ echo "Lisa could not map the Devin tool name (jq missing or failed); refusing" >&2
37
+ exit 2
38
+ fi
30
39
  printf '%s' "$normalized" | "$@"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "4.75.1",
3
+ "version": "4.76.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": "4.75.1",
3
+ "version": "4.76.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": "4.75.1",
3
+ "version": "4.76.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": "4.75.1",
3
+ "version": "4.76.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"