@codyswann/lisa 2.132.7 → 2.133.1
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/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-project.d.ts +26 -0
- package/dist/cli/setup-project.d.ts.map +1 -0
- package/dist/cli/setup-project.js +138 -0
- package/dist/cli/setup-project.js.map +1 -0
- package/dist/cli/starters.d.ts +27 -0
- package/dist/cli/starters.d.ts.map +1 -0
- package/dist/cli/starters.js +43 -0
- package/dist/cli/starters.js.map +1 -0
- package/dist/utils/pm-env.d.ts +59 -0
- package/dist/utils/pm-env.d.ts.map +1 -0
- package/dist/utils/pm-env.js +76 -0
- package/dist/utils/pm-env.js.map +1 -0
- package/dist/utils/postinstall-trampoline.d.ts +5 -8
- package/dist/utils/postinstall-trampoline.d.ts.map +1 -1
- package/dist/utils/postinstall-trampoline.js +22 -10
- package/dist/utils/postinstall-trampoline.js.map +1 -1
- package/package.json +1 -1
- 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-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- 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-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-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-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-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-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-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/dist/cli/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { runApply } from "./apply.js";
|
|
3
3
|
import { printUpdateWarning } from "./print-update-warning.js";
|
|
4
|
+
import { runSetupProject } from "./setup-project.js";
|
|
4
5
|
import { runUpdateCheck } from "./update-check.js";
|
|
5
6
|
/**
|
|
6
7
|
* Injectable collaborators for {@link createProgram}. Defaults wire the real
|
|
@@ -10,6 +11,8 @@ import { runUpdateCheck } from "./update-check.js";
|
|
|
10
11
|
export interface ProgramDependencies {
|
|
11
12
|
/** Applies Lisa to a destination (defaults to the real {@link runApply}). */
|
|
12
13
|
runApply: typeof runApply;
|
|
14
|
+
/** Creates a starter-backed project and applies Lisa overlays. */
|
|
15
|
+
runSetupProject: typeof runSetupProject;
|
|
13
16
|
/** Runs the non-fatal npm update check (defaults to {@link runUpdateCheck}). */
|
|
14
17
|
runUpdateCheck: typeof runUpdateCheck;
|
|
15
18
|
/** Prints the update warning (defaults to {@link printUpdateWarning}). */
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,kEAAkE;IAClE,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,gFAAgF;IAChF,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;CAC/C;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,YAAY,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC9C,OAAO,CA0DT;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { runApply } from "./apply.js";
|
|
3
3
|
import { printUpdateWarning } from "./print-update-warning.js";
|
|
4
|
+
import { runSetupProject } from "./setup-project.js";
|
|
4
5
|
import { addSharedOptions } from "./shared-options.js";
|
|
6
|
+
import { SETUP_TYPES } from "./starters.js";
|
|
5
7
|
import { runUpdateCheck } from "./update-check.js";
|
|
6
8
|
import { getPackageVersion } from "./version.js";
|
|
7
9
|
const DEFAULT_DEPENDENCIES = {
|
|
8
10
|
runApply,
|
|
11
|
+
runSetupProject,
|
|
9
12
|
runUpdateCheck,
|
|
10
13
|
printUpdateWarning,
|
|
11
14
|
};
|
|
@@ -51,6 +54,13 @@ export function createProgram(dependencies = {}) {
|
|
|
51
54
|
.argument("[destination]", "Path to the project directory")).action(async (destination, options) => {
|
|
52
55
|
await deps.runApply(destination, options);
|
|
53
56
|
});
|
|
57
|
+
addSharedOptions(program
|
|
58
|
+
.command("setup-project")
|
|
59
|
+
.description("Create a new Lisa-managed project from a starter repo")
|
|
60
|
+
.requiredOption("--type <type>", `Project type: ${SETUP_TYPES.join(" | ")}`)
|
|
61
|
+
.argument("[destination]", "Project name or path (default: ./<type>-app)")).action(async (destination, options) => {
|
|
62
|
+
await deps.runSetupProject(destination, options);
|
|
63
|
+
});
|
|
54
64
|
return program;
|
|
55
65
|
}
|
|
56
66
|
export { createPrompter } from "./prompts.js";
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAkBjD,MAAM,oBAAoB,GAAwB;IAChD,QAAQ;IACR,eAAe;IACf,cAAc;IACd,kBAAkB;CACnB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAC3B,eAA6C,EAAE;IAE/C,MAAM,IAAI,GAAwB;QAChC,GAAG,oBAAoB;QACvB,GAAG,YAAY;KAChB,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,MAAM,CAAC;SACZ,WAAW,CACV,0FAA0F,CAC3F;SACA,OAAO,CAAC,iBAAiB,EAAE,CAAC;SAC5B,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC,CAAC;IAEpE,2EAA2E;IAC3E,wEAAwE;IACxE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;QACnC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,4EAA4E;IAC5E,8EAA8E;IAC9E,0EAA0E;IAC1E,uEAAuE;IACvE,gBAAgB,CACd,OAAO;SACJ,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;SACrC,WAAW,CAAC,0DAA0D,CAAC;SACvE,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAC9D,CAAC,MAAM,CAAC,KAAK,EAAE,WAA+B,EAAE,OAAmB,EAAE,EAAE;QACtE,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,gBAAgB,CACd,OAAO;SACJ,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,uDAAuD,CAAC;SACpE,cAAc,CACb,eAAe,EACf,iBAAiB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAC3C;SACA,QAAQ,CAAC,eAAe,EAAE,8CAA8C,CAAC,CAC7E,CAAC,MAAM,CACN,KAAK,EACH,WAA+B,EAC/B,OAAuC,EACvC,EAAE;QACF,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type CLIOptions } from "./shared-options.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parsed options for the setup-project command.
|
|
4
|
+
*/
|
|
5
|
+
export interface SetupProjectOptions extends CLIOptions {
|
|
6
|
+
type?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Injectable collaborators for setup-project.
|
|
10
|
+
*/
|
|
11
|
+
export interface SetupProjectDependencies {
|
|
12
|
+
runApply: (destination: string | undefined, options: CLIOptions) => Promise<void>;
|
|
13
|
+
runCommand: (command: string, args: readonly string[], options?: {
|
|
14
|
+
cwd?: string;
|
|
15
|
+
}) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export declare const DEFAULT_SETUP_PROJECT_DEPENDENCIES: SetupProjectDependencies;
|
|
18
|
+
/**
|
|
19
|
+
* Create a Lisa-managed project from a starter and then apply overlays.
|
|
20
|
+
* @param destination - Optional project name or path
|
|
21
|
+
* @param options - Parsed setup-project options
|
|
22
|
+
* @param dependencies - Injectable collaborators
|
|
23
|
+
* @returns Promise that resolves after setup and apply complete
|
|
24
|
+
*/
|
|
25
|
+
export declare function runSetupProject(destination: string | undefined, options: SetupProjectOptions, dependencies?: SetupProjectDependencies): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=setup-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-project.d.ts","sourceRoot":"","sources":["../../src/cli/setup-project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,CACR,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,UAAU,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,UAAU,EAAE,CACV,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAmBD,eAAO,MAAM,kCAAkC,EAAE,wBAKhD,CAAC;AA6GF;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,mBAAmB,EAC5B,YAAY,GAAE,wBAA6D,GAC1E,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { readdir, rm } from "node:fs/promises";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import { isSetupType, resolveStarter, SETUP_TYPES } from "./starters.js";
|
|
6
|
+
/**
|
|
7
|
+
* Remove setup-project-only fields from the options forwarded to apply.
|
|
8
|
+
* @param options - Parsed setup-project options
|
|
9
|
+
* @returns Shared apply options without undefined optional properties
|
|
10
|
+
*/
|
|
11
|
+
function toCliOptions(options) {
|
|
12
|
+
return {
|
|
13
|
+
...(options.dryRun !== undefined ? { dryRun: options.dryRun } : {}),
|
|
14
|
+
...(options.yes !== undefined ? { yes: options.yes } : {}),
|
|
15
|
+
...(options.validate !== undefined ? { validate: options.validate } : {}),
|
|
16
|
+
...(options.skipGitCheck !== undefined
|
|
17
|
+
? { skipGitCheck: options.skipGitCheck }
|
|
18
|
+
: {}),
|
|
19
|
+
...(options.harness !== undefined ? { harness: options.harness } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export const DEFAULT_SETUP_PROJECT_DEPENDENCIES = {
|
|
23
|
+
runApply: async () => {
|
|
24
|
+
throw new Error("runApply dependency was not configured");
|
|
25
|
+
},
|
|
26
|
+
runCommand,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Run a command as a child process and reject on non-zero exit.
|
|
30
|
+
* @param command - Executable name
|
|
31
|
+
* @param args - Command arguments
|
|
32
|
+
* @param options - Spawn options
|
|
33
|
+
* @param options.cwd - Optional working directory for the command
|
|
34
|
+
* @returns Promise that resolves when the command exits successfully
|
|
35
|
+
*/
|
|
36
|
+
async function runCommand(command, args, options = {}) {
|
|
37
|
+
await new Promise((resolve, reject) => {
|
|
38
|
+
const child = spawn(command, args, {
|
|
39
|
+
cwd: options.cwd,
|
|
40
|
+
stdio: "inherit",
|
|
41
|
+
});
|
|
42
|
+
child.once("error", reject);
|
|
43
|
+
child.once("exit", code => {
|
|
44
|
+
if (code === 0) {
|
|
45
|
+
resolve();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
reject(new Error(`${command} ${args.join(" ")} exited ${code ?? 1}`));
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check whether a destination exists and contains files.
|
|
54
|
+
* @param destination - Project destination path
|
|
55
|
+
* @returns True when the destination directory is non-empty
|
|
56
|
+
*/
|
|
57
|
+
async function directoryIsNonEmpty(destination) {
|
|
58
|
+
if (!existsSync(destination)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return (await readdir(destination)).length > 0;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Detect whether the GitHub CLI is authenticated.
|
|
65
|
+
* @param deps - Injectable setup-project dependencies
|
|
66
|
+
* @returns True when `gh auth status` succeeds
|
|
67
|
+
*/
|
|
68
|
+
async function ghIsAuthenticated(deps) {
|
|
69
|
+
try {
|
|
70
|
+
await deps.runCommand("gh", ["auth", "status"]);
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Clone or create the starter project for a setup type.
|
|
79
|
+
* @param type - Lisa setup type
|
|
80
|
+
* @param destination - Project destination path
|
|
81
|
+
* @param deps - Injectable setup-project dependencies
|
|
82
|
+
* @returns Promise that resolves after the starter is available locally
|
|
83
|
+
*/
|
|
84
|
+
async function cloneStarter(type, destination, deps) {
|
|
85
|
+
if (!isSetupType(type)) {
|
|
86
|
+
throw new Error(`Unknown setup type ${JSON.stringify(type)}. Valid types: ${SETUP_TYPES.join(", ")}`);
|
|
87
|
+
}
|
|
88
|
+
const starter = resolveStarter(type);
|
|
89
|
+
const parentDir = path.dirname(destination);
|
|
90
|
+
const projectName = path.basename(destination);
|
|
91
|
+
const starterRef = `${starter.owner}/${starter.repo}`;
|
|
92
|
+
if (await ghIsAuthenticated(deps)) {
|
|
93
|
+
await deps.runCommand("gh", [
|
|
94
|
+
"repo",
|
|
95
|
+
"create",
|
|
96
|
+
projectName,
|
|
97
|
+
"--template",
|
|
98
|
+
starterRef,
|
|
99
|
+
"--public",
|
|
100
|
+
"--clone",
|
|
101
|
+
], { cwd: parentDir });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
await deps.runCommand("git", [
|
|
105
|
+
"clone",
|
|
106
|
+
"--depth=1",
|
|
107
|
+
`https://github.com/${starterRef}.git`,
|
|
108
|
+
destination,
|
|
109
|
+
]);
|
|
110
|
+
await rm(path.join(destination, ".git"), { recursive: true, force: true });
|
|
111
|
+
await deps.runCommand("git", ["init", "-b", "main"], { cwd: destination });
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create a Lisa-managed project from a starter and then apply overlays.
|
|
115
|
+
* @param destination - Optional project name or path
|
|
116
|
+
* @param options - Parsed setup-project options
|
|
117
|
+
* @param dependencies - Injectable collaborators
|
|
118
|
+
* @returns Promise that resolves after setup and apply complete
|
|
119
|
+
*/
|
|
120
|
+
export async function runSetupProject(destination, options, dependencies = DEFAULT_SETUP_PROJECT_DEPENDENCIES) {
|
|
121
|
+
if (!options.type) {
|
|
122
|
+
throw new Error(`Missing required --type. Valid types: ${SETUP_TYPES.join(", ")}`);
|
|
123
|
+
}
|
|
124
|
+
if (!isSetupType(options.type)) {
|
|
125
|
+
throw new Error(`Unknown setup type ${JSON.stringify(options.type)}. Valid types: ${SETUP_TYPES.join(", ")}`);
|
|
126
|
+
}
|
|
127
|
+
const resolvedDestination = path.resolve(destination ?? `./${options.type}-app`);
|
|
128
|
+
if (!(await directoryIsNonEmpty(resolvedDestination))) {
|
|
129
|
+
if (options.dryRun || options.validate) {
|
|
130
|
+
console.log(`Would create ${resolvedDestination} from ${resolveStarter(options.type).owner}/${resolveStarter(options.type).repo}`);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
await cloneStarter(options.type, resolvedDestination, dependencies);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
await dependencies.runApply(resolvedDestination, toCliOptions(options));
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=setup-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-project.js","sourceRoot":"","sources":["../../src/cli/setup-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const SETUP_TYPES: readonly ["rails", "typescript", "expo", "nestjs", "cdk", "wiki", "harper-wiki"];
|
|
2
|
+
/**
|
|
3
|
+
* Supported starter-backed project setup types.
|
|
4
|
+
*/
|
|
5
|
+
export type SetupType = (typeof SETUP_TYPES)[number];
|
|
6
|
+
/**
|
|
7
|
+
* Metadata for a starter repository used by setup-project.
|
|
8
|
+
*/
|
|
9
|
+
export interface Starter {
|
|
10
|
+
readonly owner: string;
|
|
11
|
+
readonly repo: string;
|
|
12
|
+
readonly template: true;
|
|
13
|
+
}
|
|
14
|
+
export declare const STARTERS: Record<SetupType, Starter>;
|
|
15
|
+
/**
|
|
16
|
+
* Check whether a raw string is a supported setup type.
|
|
17
|
+
* @param value - Raw setup type value
|
|
18
|
+
* @returns True when value is a supported setup type
|
|
19
|
+
*/
|
|
20
|
+
export declare function isSetupType(value: string): value is SetupType;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the configured starter template for a setup type.
|
|
23
|
+
* @param type - Valid Lisa setup type
|
|
24
|
+
* @returns Starter repository metadata
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveStarter(type: SetupType): Starter;
|
|
27
|
+
//# sourceMappingURL=starters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starters.d.ts","sourceRoot":"","sources":["../../src/cli/starters.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,kFAQd,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;CACzB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAgB/C,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEvD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const SETUP_TYPES = [
|
|
2
|
+
"rails",
|
|
3
|
+
"typescript",
|
|
4
|
+
"expo",
|
|
5
|
+
"nestjs",
|
|
6
|
+
"cdk",
|
|
7
|
+
"wiki",
|
|
8
|
+
"harper-wiki",
|
|
9
|
+
];
|
|
10
|
+
export const STARTERS = {
|
|
11
|
+
rails: { owner: "CodySwannGT", repo: "railsstarter", template: true },
|
|
12
|
+
typescript: {
|
|
13
|
+
owner: "CodySwannGT",
|
|
14
|
+
repo: "typescriptstarter",
|
|
15
|
+
template: true,
|
|
16
|
+
},
|
|
17
|
+
expo: { owner: "CodySwannGT", repo: "expostarter", template: true },
|
|
18
|
+
nestjs: { owner: "CodySwannGT", repo: "nestjsstarter", template: true },
|
|
19
|
+
cdk: { owner: "CodySwannGT", repo: "cdkstarter", template: true },
|
|
20
|
+
wiki: { owner: "CodySwannGT", repo: "wikistarter", template: true },
|
|
21
|
+
"harper-wiki": {
|
|
22
|
+
owner: "CodySwannGT",
|
|
23
|
+
repo: "harperwikistarter",
|
|
24
|
+
template: true,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Check whether a raw string is a supported setup type.
|
|
29
|
+
* @param value - Raw setup type value
|
|
30
|
+
* @returns True when value is a supported setup type
|
|
31
|
+
*/
|
|
32
|
+
export function isSetupType(value) {
|
|
33
|
+
return SETUP_TYPES.includes(value);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve the configured starter template for a setup type.
|
|
37
|
+
* @param type - Valid Lisa setup type
|
|
38
|
+
* @returns Starter repository metadata
|
|
39
|
+
*/
|
|
40
|
+
export function resolveStarter(type) {
|
|
41
|
+
return STARTERS[type];
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=starters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starters.js","sourceRoot":"","sources":["../../src/cli/starters.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO;IACP,YAAY;IACZ,MAAM;IACN,QAAQ;IACR,KAAK;IACL,MAAM;IACN,aAAa;CACL,CAAC;AAgBX,MAAM,CAAC,MAAM,QAAQ,GAA+B;IAClD,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;IACrE,UAAU,EAAE;QACV,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,IAAI;KACf;IACD,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,EAAE;IACvE,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;IACjE,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;IACnE,aAAa,EAAE;QACb,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,IAAI;KACf;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAkB,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAe;IAC5C,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file pm-env.ts
|
|
3
|
+
* @description Package-manager environment sanitization for the postinstall
|
|
4
|
+
* reconciliation trampoline.
|
|
5
|
+
*
|
|
6
|
+
* When Lisa's postinstall schedules a detached reconciliation child (and that
|
|
7
|
+
* child in turn spawns `bun install` / a Lisa re-invocation), the child must
|
|
8
|
+
* resolve its target project STRICTLY from the explicit `cwd` / projectDir
|
|
9
|
+
* argument — never from package-manager-injected environment variables that pin
|
|
10
|
+
* the package manager to a different project. This module centralizes the list
|
|
11
|
+
* of those dangerous variables and the function that strips them.
|
|
12
|
+
* @module utils
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Package-manager-injected environment variable PREFIXES that pin a package
|
|
16
|
+
* manager to a project directory OTHER than the one it is being told to operate
|
|
17
|
+
* on via `cwd` / the positional argument.
|
|
18
|
+
*
|
|
19
|
+
* We scrub the whole `npm_config_*` / `npm_package_*` / `npm_lifecycle_*`
|
|
20
|
+
* families rather than enumerating individual keys, because any one of them can
|
|
21
|
+
* leak a stale project path and new ones appear across package-manager versions.
|
|
22
|
+
*/
|
|
23
|
+
export declare const PM_PATH_ENV_PREFIXES: readonly string[];
|
|
24
|
+
/**
|
|
25
|
+
* Standalone package-manager-injected environment variable NAMES that, like the
|
|
26
|
+
* prefixed families, can redirect a re-spawned package manager to a sibling
|
|
27
|
+
* project. `INIT_CWD` is the classic one; `npm_config_local_prefix` (covered by
|
|
28
|
+
* the prefix list above) is the most dangerous, because Lisa's own postinstall
|
|
29
|
+
* script derives `PROJECT_ROOT` from it and bun/npm honour it over `cwd`.
|
|
30
|
+
*/
|
|
31
|
+
export declare const PM_PATH_ENV_NAMES: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* Decide whether a single environment variable name is a package-manager
|
|
34
|
+
* path/lifecycle variable that must be stripped before a reconciliation re-run.
|
|
35
|
+
* @param key - Environment variable name
|
|
36
|
+
* @returns true when the variable could redirect a re-spawned package manager
|
|
37
|
+
*/
|
|
38
|
+
export declare function isPackageManagerPathEnvVar(key: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Strip every package-manager-injected variable that could redirect a re-spawned
|
|
41
|
+
* package manager (or Lisa re-invocation) away from the explicit target directory.
|
|
42
|
+
*
|
|
43
|
+
* Returns a NEW object — the input is not mutated. Used both for the detached
|
|
44
|
+
* trampoline child's environment and as the source of truth the inline
|
|
45
|
+
* trampoline script reuses to scrub the environment of the `bun install` / Lisa
|
|
46
|
+
* processes it spawns.
|
|
47
|
+
*
|
|
48
|
+
* Background: during a batched concurrent multi-project Lisa update, the
|
|
49
|
+
* detached reconciliation child inherited `npm_config_local_prefix` / `INIT_CWD`
|
|
50
|
+
* pointing at a SIBLING project. bun/npm honour `npm_config_local_prefix` (and
|
|
51
|
+
* Lisa's postinstall script reads it as `PROJECT_ROOT`) over `cwd`, so the
|
|
52
|
+
* re-run + its `bun install` resolved to the wrong project, writing one
|
|
53
|
+
* project's package.json into another. Stripping these vars makes the
|
|
54
|
+
* reconciliation path strictly project-local.
|
|
55
|
+
* @param env - Source environment (typically a copy of process.env)
|
|
56
|
+
* @returns A copy of env with all package-manager path/lifecycle vars removed
|
|
57
|
+
*/
|
|
58
|
+
export declare function sanitizeEnvForReconciliation(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
59
|
+
//# sourceMappingURL=pm-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm-env.d.ts","sourceRoot":"","sources":["../../src/utils/pm-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAIxC,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAMrC,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAK/D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,CAAC,UAAU,GACrB,MAAM,CAAC,UAAU,CAInB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file pm-env.ts
|
|
3
|
+
* @description Package-manager environment sanitization for the postinstall
|
|
4
|
+
* reconciliation trampoline.
|
|
5
|
+
*
|
|
6
|
+
* When Lisa's postinstall schedules a detached reconciliation child (and that
|
|
7
|
+
* child in turn spawns `bun install` / a Lisa re-invocation), the child must
|
|
8
|
+
* resolve its target project STRICTLY from the explicit `cwd` / projectDir
|
|
9
|
+
* argument — never from package-manager-injected environment variables that pin
|
|
10
|
+
* the package manager to a different project. This module centralizes the list
|
|
11
|
+
* of those dangerous variables and the function that strips them.
|
|
12
|
+
* @module utils
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Package-manager-injected environment variable PREFIXES that pin a package
|
|
16
|
+
* manager to a project directory OTHER than the one it is being told to operate
|
|
17
|
+
* on via `cwd` / the positional argument.
|
|
18
|
+
*
|
|
19
|
+
* We scrub the whole `npm_config_*` / `npm_package_*` / `npm_lifecycle_*`
|
|
20
|
+
* families rather than enumerating individual keys, because any one of them can
|
|
21
|
+
* leak a stale project path and new ones appear across package-manager versions.
|
|
22
|
+
*/
|
|
23
|
+
export const PM_PATH_ENV_PREFIXES = [
|
|
24
|
+
"npm_config_",
|
|
25
|
+
"npm_package_",
|
|
26
|
+
"npm_lifecycle_",
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Standalone package-manager-injected environment variable NAMES that, like the
|
|
30
|
+
* prefixed families, can redirect a re-spawned package manager to a sibling
|
|
31
|
+
* project. `INIT_CWD` is the classic one; `npm_config_local_prefix` (covered by
|
|
32
|
+
* the prefix list above) is the most dangerous, because Lisa's own postinstall
|
|
33
|
+
* script derives `PROJECT_ROOT` from it and bun/npm honour it over `cwd`.
|
|
34
|
+
*/
|
|
35
|
+
export const PM_PATH_ENV_NAMES = [
|
|
36
|
+
"INIT_CWD",
|
|
37
|
+
"npm_node_execpath",
|
|
38
|
+
"npm_execpath",
|
|
39
|
+
"PROJECT_CWD",
|
|
40
|
+
"BUN_INSTALL_CACHE_DIR",
|
|
41
|
+
];
|
|
42
|
+
/**
|
|
43
|
+
* Decide whether a single environment variable name is a package-manager
|
|
44
|
+
* path/lifecycle variable that must be stripped before a reconciliation re-run.
|
|
45
|
+
* @param key - Environment variable name
|
|
46
|
+
* @returns true when the variable could redirect a re-spawned package manager
|
|
47
|
+
*/
|
|
48
|
+
export function isPackageManagerPathEnvVar(key) {
|
|
49
|
+
if (PM_PATH_ENV_NAMES.includes(key)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return PM_PATH_ENV_PREFIXES.some(prefix => key.startsWith(prefix));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Strip every package-manager-injected variable that could redirect a re-spawned
|
|
56
|
+
* package manager (or Lisa re-invocation) away from the explicit target directory.
|
|
57
|
+
*
|
|
58
|
+
* Returns a NEW object — the input is not mutated. Used both for the detached
|
|
59
|
+
* trampoline child's environment and as the source of truth the inline
|
|
60
|
+
* trampoline script reuses to scrub the environment of the `bun install` / Lisa
|
|
61
|
+
* processes it spawns.
|
|
62
|
+
*
|
|
63
|
+
* Background: during a batched concurrent multi-project Lisa update, the
|
|
64
|
+
* detached reconciliation child inherited `npm_config_local_prefix` / `INIT_CWD`
|
|
65
|
+
* pointing at a SIBLING project. bun/npm honour `npm_config_local_prefix` (and
|
|
66
|
+
* Lisa's postinstall script reads it as `PROJECT_ROOT`) over `cwd`, so the
|
|
67
|
+
* re-run + its `bun install` resolved to the wrong project, writing one
|
|
68
|
+
* project's package.json into another. Stripping these vars makes the
|
|
69
|
+
* reconciliation path strictly project-local.
|
|
70
|
+
* @param env - Source environment (typically a copy of process.env)
|
|
71
|
+
* @returns A copy of env with all package-manager path/lifecycle vars removed
|
|
72
|
+
*/
|
|
73
|
+
export function sanitizeEnvForReconciliation(env) {
|
|
74
|
+
return Object.fromEntries(Object.entries(env).filter(([key]) => !isPackageManagerPathEnvVar(key)));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=pm-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pm-env.js","sourceRoot":"","sources":["../../src/utils/pm-env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,aAAa;IACb,cAAc;IACd,gBAAgB;CACR,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,UAAU;IACV,mBAAmB;IACnB,cAAc;IACd,aAAa;IACb,uBAAuB;CACf,CAAC;AAEX;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,4BAA4B,CAC1C,GAAsB;IAEtB,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CACxE,CAAC;AACJ,CAAC"}
|
|
@@ -124,14 +124,11 @@ export declare function regenerateLockfilesInProcess(projectDir: string, spawnFn
|
|
|
124
124
|
* trampoline child then detects the parent exiting and re-runs Lisa after the
|
|
125
125
|
* package manager has finished writing package.json.
|
|
126
126
|
*
|
|
127
|
-
* A blocking (non-detached) CI variant was previously attempted
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* exit — a wait that can never complete. After the 120 s `MAX_WAIT_MS` timeout
|
|
133
|
-
* the child exits without running reconciliation at all. Always using the
|
|
134
|
-
* detached pattern avoids this deadlock and ensures reconciliation actually runs.
|
|
127
|
+
* A blocking (non-detached) CI variant was previously attempted but created a
|
|
128
|
+
* circular deadlock (PM waits for Lisa, Lisa waits for the child, the child
|
|
129
|
+
* polls `parentPid` waiting for the PM) that only resolves after the 120 s
|
|
130
|
+
* `MAX_WAIT_MS` timeout — without running reconciliation. Always detaching
|
|
131
|
+
* avoids this deadlock and ensures reconciliation actually runs.
|
|
135
132
|
* @param projectDir - Absolute path to the project directory Lisa will reconcile
|
|
136
133
|
* @param lisaDistDir - Absolute path to Lisa's dist directory (where index.js lives)
|
|
137
134
|
* @param parentPid - PID of the package-manager process to wait on (usually process.ppid)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall-trampoline.d.ts","sourceRoot":"","sources":["../../src/utils/postinstall-trampoline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"postinstall-trampoline.d.ts","sourceRoot":"","sources":["../../src/utils/postinstall-trampoline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAwC3C;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AA6DD;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,IAAI,OAAO,CASvC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,OAAO,GACd,OAAO,CAYT;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,GACjB,SAAS,cAAc,EAAE,CAI3B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,iBAAiB,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,4BAA4B,CAChD,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,2BAA2B,CAC/C,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EAMjB,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf"}
|
|
@@ -3,6 +3,7 @@ import { createHash } from "node:crypto";
|
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import * as path from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { PM_PATH_ENV_NAMES, PM_PATH_ENV_PREFIXES, sanitizeEnvForReconciliation, } from "./pm-env.js";
|
|
6
7
|
/**
|
|
7
8
|
* Env var set by npm/bun/yarn/pnpm when running lifecycle scripts (postinstall, etc.).
|
|
8
9
|
* Used to detect whether Lisa was invoked as a postinstall child of a package manager.
|
|
@@ -255,14 +256,11 @@ export async function regenerateLockfilesInProcess(projectDir, spawnFn = spawn)
|
|
|
255
256
|
* trampoline child then detects the parent exiting and re-runs Lisa after the
|
|
256
257
|
* package manager has finished writing package.json.
|
|
257
258
|
*
|
|
258
|
-
* A blocking (non-detached) CI variant was previously attempted
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
* exit — a wait that can never complete. After the 120 s `MAX_WAIT_MS` timeout
|
|
264
|
-
* the child exits without running reconciliation at all. Always using the
|
|
265
|
-
* detached pattern avoids this deadlock and ensures reconciliation actually runs.
|
|
259
|
+
* A blocking (non-detached) CI variant was previously attempted but created a
|
|
260
|
+
* circular deadlock (PM waits for Lisa, Lisa waits for the child, the child
|
|
261
|
+
* polls `parentPid` waiting for the PM) that only resolves after the 120 s
|
|
262
|
+
* `MAX_WAIT_MS` timeout — without running reconciliation. Always detaching
|
|
263
|
+
* avoids this deadlock and ensures reconciliation actually runs.
|
|
266
264
|
* @param projectDir - Absolute path to the project directory Lisa will reconcile
|
|
267
265
|
* @param lisaDistDir - Absolute path to Lisa's dist directory (where index.js lives)
|
|
268
266
|
* @param parentPid - PID of the package-manager process to wait on (usually process.ppid)
|
|
@@ -294,7 +292,10 @@ spawnFn = spawn) {
|
|
|
294
292
|
detached: true,
|
|
295
293
|
stdio: "ignore",
|
|
296
294
|
env: {
|
|
297
|
-
|
|
295
|
+
// Strip PM path/lifecycle vars before the child inherits the env: a stale
|
|
296
|
+
// npm_config_local_prefix / INIT_CWD from a SIBLING project's concurrent
|
|
297
|
+
// install would otherwise redirect the re-run to the wrong project. See pm-env.ts.
|
|
298
|
+
...sanitizeEnvForReconciliation(inheritedEnv()),
|
|
298
299
|
// Prevent the child from seeing package-manager lifecycle env vars that would
|
|
299
300
|
// make it think it's a lifecycle script (breaks isRunningAsLifecycleScript).
|
|
300
301
|
[LIFECYCLE_ENV_VAR]: "",
|
|
@@ -343,6 +344,8 @@ function buildTrampolineSource(params) {
|
|
|
343
344
|
nodeBin: JSON.stringify(params.nodeBin),
|
|
344
345
|
trampolineEnvVar: JSON.stringify(params.trampolineEnvVar),
|
|
345
346
|
lockfilePlans: JSON.stringify(params.lockfileRegenPlans),
|
|
347
|
+
pmEnvPrefixes: JSON.stringify(PM_PATH_ENV_PREFIXES),
|
|
348
|
+
pmEnvNames: JSON.stringify(PM_PATH_ENV_NAMES),
|
|
346
349
|
};
|
|
347
350
|
return [
|
|
348
351
|
buildTrampolinePrelude(literals),
|
|
@@ -356,6 +359,8 @@ function buildTrampolineSource(params) {
|
|
|
356
359
|
* cap enforced by eslint.
|
|
357
360
|
* @param literals - Inlined JSON-safe literals
|
|
358
361
|
* @param literals.lockfilePlans - JSON-serialized lockfile plan table
|
|
362
|
+
* @param literals.pmEnvPrefixes - JSON-serialized package-manager env var prefixes to strip
|
|
363
|
+
* @param literals.pmEnvNames - JSON-serialized package-manager env var names to strip
|
|
359
364
|
* @returns JS source fragment
|
|
360
365
|
*/
|
|
361
366
|
function buildTrampolinePrelude(literals) {
|
|
@@ -366,6 +371,13 @@ function buildTrampolinePrelude(literals) {
|
|
|
366
371
|
const path = require("node:path");
|
|
367
372
|
|
|
368
373
|
const LOCKFILE_PLANS = ${literals.lockfilePlans};
|
|
374
|
+
const PM_ENV_PREFIXES = ${literals.pmEnvPrefixes};
|
|
375
|
+
const PM_ENV_NAMES = ${literals.pmEnvNames};
|
|
376
|
+
// Strip PM path/lifecycle vars from spawned bun/Lisa env. Mirrors pm-env.ts.
|
|
377
|
+
function sanitizeEnv(env) {
|
|
378
|
+
const bad = (k) => PM_ENV_NAMES.indexOf(k) !== -1 || PM_ENV_PREFIXES.some((p) => k.startsWith(p));
|
|
379
|
+
return Object.fromEntries(Object.entries(env).filter(([k]) => !bad(k)));
|
|
380
|
+
}
|
|
369
381
|
`;
|
|
370
382
|
}
|
|
371
383
|
/**
|
|
@@ -416,7 +428,7 @@ function buildTrampolineHelpers(literals) {
|
|
|
416
428
|
const child = spawn(command, args, {
|
|
417
429
|
cwd: ${literals.projectDir},
|
|
418
430
|
stdio: "ignore",
|
|
419
|
-
env: Object.assign(
|
|
431
|
+
env: Object.assign(sanitizeEnv(process.env), { [${literals.trampolineEnvVar}]: "1" }),
|
|
420
432
|
});
|
|
421
433
|
child.on("exit", (code) => resolve(code === 0));
|
|
422
434
|
child.on("error", () => resolve(false));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall-trampoline.js","sourceRoot":"","sources":["../../src/utils/postinstall-trampoline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"postinstall-trampoline.js","sourceRoot":"","sources":["../../src/utils/postinstall-trampoline.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"lodash": ">=4.18.1"
|
|
84
84
|
},
|
|
85
85
|
"name": "@codyswann/lisa",
|
|
86
|
-
"version": "2.
|
|
86
|
+
"version": "2.133.1",
|
|
87
87
|
"description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
|
|
88
88
|
"main": "dist/index.js",
|
|
89
89
|
"exports": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.133.1",
|
|
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.
|
|
3
|
+
"version": "2.133.1",
|
|
4
4
|
"description": "Connect staff roles to Telegram or Slack via OpenClaw — facilitator/specialist hub-and-spoke routing and repo-coding topics, across Claude and Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Cody Swann"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lisa-openclaw",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.133.1",
|
|
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.
|
|
3
|
+
"version": "2.133.1",
|
|
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.
|
|
3
|
+
"version": "2.133.1",
|
|
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"
|