@codyswann/lisa 4.75.2 → 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.
- package/dist/cli/remote-environment-contract.d.ts.map +1 -1
- package/dist/cli/remote-environment-contract.js +1 -0
- package/dist/cli/remote-environment-contract.js.map +1 -1
- package/dist/cli/ui-setup-readiness-install.d.ts.map +1 -1
- package/dist/cli/ui-setup-readiness-install.js +5 -1
- package/dist/cli/ui-setup-readiness-install.js.map +1 -1
- package/dist/core/config.d.ts +4 -3
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +1 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/lisa.d.ts +17 -0
- package/dist/core/lisa.d.ts.map +1 -1
- package/dist/core/lisa.js +59 -0
- package/dist/core/lisa.js.map +1 -1
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +6 -2
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/dist/devin/enforcement-fallback-installer.d.ts +51 -0
- package/dist/devin/enforcement-fallback-installer.d.ts.map +1 -0
- package/dist/devin/enforcement-fallback-installer.js +186 -0
- package/dist/devin/enforcement-fallback-installer.js.map +1 -0
- package/dist/devin/plugin-installer.d.ts +43 -0
- package/dist/devin/plugin-installer.d.ts.map +1 -0
- package/dist/devin/plugin-installer.js +78 -0
- package/dist/devin/plugin-installer.js.map +1 -0
- package/dist/health/plugin-inspection.d.ts.map +1 -1
- package/dist/health/plugin-inspection.js +1 -0
- package/dist/health/plugin-inspection.js.map +1 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-devin/.devin-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-devin/hooks/devin-tool-name-shim.sh +9 -0
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-devin/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-devin/.devin-plugin/plugin.json +1 -1
- package/scripts/generate-devin-plugin-artifacts.mjs +13 -2
- 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;
|
|
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"}
|
|
@@ -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.
|
|
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": "
|
|
349
|
-
"gitHead": "
|
|
350
|
-
"lisaReleaseTag": "v4.
|
|
348
|
+
"lisaReleaseCommit": "7d92d4d2113c7b3a7b17aa8191951e507b999b8a",
|
|
349
|
+
"gitHead": "7d92d4d2113c7b3a7b17aa8191951e507b999b8a",
|
|
350
|
+
"lisaReleaseTag": "v4.76.0"
|
|
351
351
|
}
|
|
@@ -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" | "$@"
|