@codyswann/lisa 2.133.4 → 2.134.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/README.md +42 -3
- package/dist/cli/doctor.d.ts +35 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +204 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +53 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/setup-wiki.d.ts +21 -0
- package/dist/cli/setup-wiki.d.ts.map +1 -0
- package/dist/cli/setup-wiki.js +20 -0
- package/dist/cli/setup-wiki.js.map +1 -0
- package/dist/cli/update-cmd.d.ts +39 -0
- package/dist/cli/update-cmd.d.ts.map +1 -0
- package/dist/cli/update-cmd.js +105 -0
- package/dist/cli/update-cmd.js.map +1 -0
- package/dist/cli/version-cmd.d.ts +29 -0
- package/dist/cli/version-cmd.d.ts.map +1 -0
- package/dist/cli/version-cmd.js +74 -0
- package/dist/cli/version-cmd.js.map +1 -0
- package/dist/index.js +12 -1
- package/dist/index.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/README.md
CHANGED
|
@@ -51,14 +51,53 @@ Templates follow governance rules: some files are overwritten on every update (e
|
|
|
51
51
|
## Quick Start
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
|
-
|
|
54
|
+
npm install -g @codyswann/lisa
|
|
55
|
+
lisa setup-project --type rails my-app
|
|
56
|
+
cd my-app
|
|
55
57
|
```
|
|
56
58
|
|
|
57
|
-
|
|
59
|
+
To add Lisa to an existing project instead, run:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
lisa apply /path/to/project
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The historical positional form still works for backwards compatibility:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
lisa /path/to/project
|
|
69
|
+
```
|
|
58
70
|
|
|
59
71
|
## Working With Lisa
|
|
60
72
|
|
|
61
|
-
Lisa exposes a small
|
|
73
|
+
Lisa exposes a small global CLI for project setup plus slash commands for the work lifecycle. Everything underneath — agents, sub-flows, and the supporting libraries that power each step — happens automatically.
|
|
74
|
+
|
|
75
|
+
### Global CLI
|
|
76
|
+
|
|
77
|
+
Install Lisa once and use the explicit setup commands for new or existing projects:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm install -g @codyswann/lisa
|
|
81
|
+
lisa setup-project --type rails my-app
|
|
82
|
+
lisa setup-wiki
|
|
83
|
+
lisa apply /path/to/project
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Supported starter-backed setup types are `rails`, `typescript`, `expo`, `nestjs`, `cdk`, `wiki`, and `harper-wiki`. `setup-project --type wiki` creates a wiki-first repository; `setup-wiki` adds or repairs an embedded `wiki/` in the current project.
|
|
87
|
+
|
|
88
|
+
Maintenance commands are intentionally small:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
lisa doctor [path]
|
|
92
|
+
lisa version
|
|
93
|
+
lisa update
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`lisa version` reports the installed package version, latest npm version, install path, and default harness. `lisa update` prints the package-manager update command and only runs it when `--yes` is supplied. Normal commands perform a non-fatal npm update check unless `--no-update-check` or `LISA_SKIP_UPDATE_CHECK=1` is set.
|
|
97
|
+
|
|
98
|
+
### Lisa Workflow Commands
|
|
99
|
+
|
|
100
|
+
Run these in Claude Code or the supported harness for the project.
|
|
62
101
|
|
|
63
102
|
### The Lifecycle
|
|
64
103
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { runUpdateCheck } from "./update-check.js";
|
|
2
|
+
/** Status values emitted by Lisa doctor checks. */
|
|
3
|
+
type DoctorStatus = "ok" | "warn" | "fail";
|
|
4
|
+
/** One Lisa doctor check result. */
|
|
5
|
+
export interface DoctorCheck {
|
|
6
|
+
name: string;
|
|
7
|
+
status: DoctorStatus;
|
|
8
|
+
detail: string;
|
|
9
|
+
}
|
|
10
|
+
/** Machine-readable doctor result. */
|
|
11
|
+
export interface DoctorResult {
|
|
12
|
+
checks: DoctorCheck[];
|
|
13
|
+
}
|
|
14
|
+
/** Options parsed for `lisa doctor`. */
|
|
15
|
+
export interface DoctorOptions {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
offline?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Runtime collaborators for doctor. */
|
|
20
|
+
export interface DoctorDependencies {
|
|
21
|
+
fetchImpl: typeof fetch;
|
|
22
|
+
runUpdateCheck: typeof runUpdateCheck;
|
|
23
|
+
setExitCode: (code: number) => void;
|
|
24
|
+
write: (message: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Run Lisa doctor checks.
|
|
28
|
+
* @param targetPath - Optional project path
|
|
29
|
+
* @param options - Parsed command options
|
|
30
|
+
* @param dependencies - Optional collaborators for tests
|
|
31
|
+
* @returns Doctor result
|
|
32
|
+
*/
|
|
33
|
+
export declare function runDoctor(targetPath: string | undefined, options: DoctorOptions, dependencies?: Partial<DoctorDependencies>): Promise<DoctorResult>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,mDAAmD;AACnD,KAAK,YAAY,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;AAM3C,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,wCAAwC;AACxC,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAmMD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,aAAa,EACtB,YAAY,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC7C,OAAO,CAAC,YAAY,CAAC,CA8BvB"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { createDetectorRegistry } from "../detection/index.js";
|
|
5
|
+
import { STARTERS } from "./starters.js";
|
|
6
|
+
import { runUpdateCheck } from "./update-check.js";
|
|
7
|
+
const VERSION_CHECK_NAME = "Lisa version current?";
|
|
8
|
+
const STARTER_HEALTH_NAME = "Starter health";
|
|
9
|
+
const PROJECT_CONFIG_CHECK_NAME = "Project Lisa config present?";
|
|
10
|
+
const DEFAULT_DEPENDENCIES = {
|
|
11
|
+
fetchImpl: fetch,
|
|
12
|
+
runUpdateCheck,
|
|
13
|
+
setExitCode: code => {
|
|
14
|
+
process.exitCode = code;
|
|
15
|
+
},
|
|
16
|
+
write: message => console.log(message),
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Check Lisa's installed version against npm.
|
|
20
|
+
* @param deps - Runtime dependencies
|
|
21
|
+
* @param offline - Skip network check
|
|
22
|
+
* @returns Doctor check result
|
|
23
|
+
*/
|
|
24
|
+
async function checkVersion(deps, offline) {
|
|
25
|
+
if (offline) {
|
|
26
|
+
return {
|
|
27
|
+
name: VERSION_CHECK_NAME,
|
|
28
|
+
status: "ok",
|
|
29
|
+
detail: "Skipped network check in offline mode",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const result = await deps.runUpdateCheck();
|
|
33
|
+
if (result.isOutdated && result.latest) {
|
|
34
|
+
return {
|
|
35
|
+
name: VERSION_CHECK_NAME,
|
|
36
|
+
status: "warn",
|
|
37
|
+
detail: `Installed ${result.current}; latest is ${result.latest}`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
name: VERSION_CHECK_NAME,
|
|
42
|
+
status: result.latest ? "ok" : "warn",
|
|
43
|
+
detail: result.latest
|
|
44
|
+
? `Installed ${result.current}; latest is ${result.latest}`
|
|
45
|
+
: `Latest version unavailable${result.reason ? ` (${result.reason})` : ""}`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate Lisa project configuration files.
|
|
50
|
+
* @param targetPath - Project path to inspect
|
|
51
|
+
* @returns Doctor check result
|
|
52
|
+
*/
|
|
53
|
+
async function checkProjectConfig(targetPath) {
|
|
54
|
+
const configPaths = [".lisa.config.json", ".lisa.config.local.json"]
|
|
55
|
+
.map(fileName => path.join(targetPath, fileName))
|
|
56
|
+
.filter(configPath => existsSync(configPath));
|
|
57
|
+
if (configPaths.length === 0) {
|
|
58
|
+
return {
|
|
59
|
+
name: PROJECT_CONFIG_CHECK_NAME,
|
|
60
|
+
status: "warn",
|
|
61
|
+
detail: "No .lisa.config.json or .lisa.config.local.json found",
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
for (const configPath of configPaths) {
|
|
65
|
+
try {
|
|
66
|
+
JSON.parse(await readFile(configPath, "utf8"));
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
name: PROJECT_CONFIG_CHECK_NAME,
|
|
71
|
+
status: "fail",
|
|
72
|
+
detail: `${path.basename(configPath)} is not parseable JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
name: PROJECT_CONFIG_CHECK_NAME,
|
|
78
|
+
status: "ok",
|
|
79
|
+
detail: configPaths.map(configPath => path.basename(configPath)).join(", "),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Detect the target project type.
|
|
84
|
+
* @param targetPath - Project path to inspect
|
|
85
|
+
* @returns Doctor check result
|
|
86
|
+
*/
|
|
87
|
+
async function checkProjectType(targetPath) {
|
|
88
|
+
const detectorRegistry = createDetectorRegistry();
|
|
89
|
+
const detectedTypes = detectorRegistry.expandAndOrderTypes(await detectorRegistry.detectAll(targetPath));
|
|
90
|
+
if (detectedTypes.length === 0) {
|
|
91
|
+
return {
|
|
92
|
+
name: "Project type detection",
|
|
93
|
+
status: "warn",
|
|
94
|
+
detail: "No Lisa project type detected",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
name: "Project type detection",
|
|
99
|
+
status: "ok",
|
|
100
|
+
detail: detectedTypes.join(", "),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Confirm starter repositories are reachable and marked as templates.
|
|
105
|
+
* @param deps - Runtime dependencies
|
|
106
|
+
* @param offline - Skip network checks
|
|
107
|
+
* @returns Doctor check result
|
|
108
|
+
*/
|
|
109
|
+
async function checkStarterHealth(deps, offline) {
|
|
110
|
+
if (offline) {
|
|
111
|
+
return {
|
|
112
|
+
name: STARTER_HEALTH_NAME,
|
|
113
|
+
status: "ok",
|
|
114
|
+
detail: "Skipped GitHub starter checks in offline mode",
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const checks = await Promise.all(Object.values(STARTERS).map(async (starter) => {
|
|
118
|
+
const failurePrefix = `${starter.repo}:`;
|
|
119
|
+
try {
|
|
120
|
+
const response = await deps.fetchImpl(`https://api.github.com/repos/${starter.owner}/${starter.repo}`);
|
|
121
|
+
if (!response.ok) {
|
|
122
|
+
return `${failurePrefix} http-${response.status}`;
|
|
123
|
+
}
|
|
124
|
+
const body = (await response.json());
|
|
125
|
+
if (body.is_template !== true) {
|
|
126
|
+
return `${failurePrefix} not-template`;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return `${failurePrefix} unreachable`;
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}));
|
|
134
|
+
const failures = checks.filter((check) => check !== null);
|
|
135
|
+
return {
|
|
136
|
+
name: STARTER_HEALTH_NAME,
|
|
137
|
+
status: failures.length === 0 ? "ok" : "warn",
|
|
138
|
+
detail: failures.length === 0
|
|
139
|
+
? "Starter repositories are reachable templates"
|
|
140
|
+
: failures.join(", "),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check basic wiki contract files when a wiki exists.
|
|
145
|
+
* @param targetPath - Project path to inspect
|
|
146
|
+
* @returns Doctor check result
|
|
147
|
+
*/
|
|
148
|
+
function checkWiki(targetPath) {
|
|
149
|
+
const wikiPath = path.join(targetPath, "wiki");
|
|
150
|
+
if (!existsSync(wikiPath)) {
|
|
151
|
+
return {
|
|
152
|
+
name: "Wiki health",
|
|
153
|
+
status: "ok",
|
|
154
|
+
detail: "No wiki directory present",
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const required = [
|
|
158
|
+
"lisa-wiki.config.json",
|
|
159
|
+
"schema/llm-wiki-contract.md",
|
|
160
|
+
"index.md",
|
|
161
|
+
];
|
|
162
|
+
const missing = required.filter(fileName => {
|
|
163
|
+
return !existsSync(path.join(wikiPath, fileName));
|
|
164
|
+
});
|
|
165
|
+
return {
|
|
166
|
+
name: "Wiki health",
|
|
167
|
+
status: missing.length === 0 ? "ok" : "fail",
|
|
168
|
+
detail: missing.length === 0
|
|
169
|
+
? "Required wiki files are present"
|
|
170
|
+
: `Missing ${missing.join(", ")}`,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Run Lisa doctor checks.
|
|
175
|
+
* @param targetPath - Optional project path
|
|
176
|
+
* @param options - Parsed command options
|
|
177
|
+
* @param dependencies - Optional collaborators for tests
|
|
178
|
+
* @returns Doctor result
|
|
179
|
+
*/
|
|
180
|
+
export async function runDoctor(targetPath, options, dependencies = {}) {
|
|
181
|
+
const deps = { ...DEFAULT_DEPENDENCIES, ...dependencies };
|
|
182
|
+
const resolvedTarget = path.resolve(targetPath ?? process.cwd());
|
|
183
|
+
const checks = [
|
|
184
|
+
await checkVersion(deps, options.offline === true),
|
|
185
|
+
await checkProjectConfig(resolvedTarget),
|
|
186
|
+
await checkProjectType(resolvedTarget),
|
|
187
|
+
await checkStarterHealth(deps, options.offline === true),
|
|
188
|
+
checkWiki(resolvedTarget),
|
|
189
|
+
];
|
|
190
|
+
const result = { checks };
|
|
191
|
+
if (options.json) {
|
|
192
|
+
deps.write(JSON.stringify(result, null, 2));
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
deps.write(checks
|
|
196
|
+
.map(check => `${check.status.toUpperCase()} ${check.name}: ${check.detail}`)
|
|
197
|
+
.join("\n"));
|
|
198
|
+
}
|
|
199
|
+
if (checks.some(check => check.status === "fail")) {
|
|
200
|
+
deps.setExitCode(1);
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { runApply } from "./apply.js";
|
|
3
|
+
import { runDoctor } from "./doctor.js";
|
|
3
4
|
import { printUpdateWarning } from "./print-update-warning.js";
|
|
4
5
|
import { runSetupProject } from "./setup-project.js";
|
|
6
|
+
import { runSetupWiki } from "./setup-wiki.js";
|
|
7
|
+
import { runUpdate } from "./update-cmd.js";
|
|
5
8
|
import { runUpdateCheck } from "./update-check.js";
|
|
9
|
+
import { runVersion } from "./version-cmd.js";
|
|
6
10
|
/**
|
|
7
11
|
* Injectable collaborators for {@link createProgram}. Defaults wire the real
|
|
8
12
|
* apply action and npm update-check; tests override them to observe the program
|
|
@@ -13,6 +17,14 @@ export interface ProgramDependencies {
|
|
|
13
17
|
runApply: typeof runApply;
|
|
14
18
|
/** Creates a starter-backed project and applies Lisa overlays. */
|
|
15
19
|
runSetupProject: typeof runSetupProject;
|
|
20
|
+
/** Prepares an existing project for embedded wiki setup. */
|
|
21
|
+
runSetupWiki: typeof runSetupWiki;
|
|
22
|
+
/** Prints Lisa CLI version metadata. */
|
|
23
|
+
runVersion: typeof runVersion;
|
|
24
|
+
/** Prints or runs the package-manager update command. */
|
|
25
|
+
runUpdate: typeof runUpdate;
|
|
26
|
+
/** Diagnoses Lisa project health. */
|
|
27
|
+
runDoctor: typeof runDoctor;
|
|
16
28
|
/** Runs the non-fatal npm update check (defaults to {@link runUpdateCheck}). */
|
|
17
29
|
runUpdateCheck: typeof runUpdateCheck;
|
|
18
30
|
/** 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;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,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,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,QAAQ,CAAC;IAC1B,kEAAkE;IAClE,eAAe,EAAE,OAAO,eAAe,CAAC;IACxC,4DAA4D;IAC5D,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,wCAAwC;IACxC,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,yDAAyD;IACzD,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,qCAAqC;IACrC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,gFAAgF;IAChF,cAAc,EAAE,OAAO,cAAc,CAAC;IACtC,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;CAC/C;AAwDD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,YAAY,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC9C,OAAO,CAwET;AAED,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,17 +1,59 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { runApply } from "./apply.js";
|
|
3
|
+
import { runDoctor } from "./doctor.js";
|
|
3
4
|
import { printUpdateWarning } from "./print-update-warning.js";
|
|
4
5
|
import { runSetupProject } from "./setup-project.js";
|
|
6
|
+
import { runSetupWiki } from "./setup-wiki.js";
|
|
5
7
|
import { addSharedOptions } from "./shared-options.js";
|
|
6
8
|
import { SETUP_TYPES } from "./starters.js";
|
|
9
|
+
import { runUpdate } from "./update-cmd.js";
|
|
7
10
|
import { runUpdateCheck } from "./update-check.js";
|
|
11
|
+
import { runVersion } from "./version-cmd.js";
|
|
8
12
|
import { getPackageVersion } from "./version.js";
|
|
9
13
|
const DEFAULT_DEPENDENCIES = {
|
|
10
14
|
runApply,
|
|
11
15
|
runSetupProject,
|
|
16
|
+
runSetupWiki,
|
|
17
|
+
runVersion,
|
|
18
|
+
runUpdate,
|
|
19
|
+
runDoctor,
|
|
12
20
|
runUpdateCheck,
|
|
13
21
|
printUpdateWarning,
|
|
14
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Register CLI maintenance commands that do not run the root update warning.
|
|
25
|
+
* @param program - Commander program to mutate
|
|
26
|
+
* @param deps - Program dependencies
|
|
27
|
+
* @returns The same Commander program
|
|
28
|
+
*/
|
|
29
|
+
function addMaintenanceCommands(program, deps) {
|
|
30
|
+
program
|
|
31
|
+
.command("version")
|
|
32
|
+
.description("Print Lisa CLI version info")
|
|
33
|
+
.action(async () => {
|
|
34
|
+
await deps.runVersion();
|
|
35
|
+
});
|
|
36
|
+
program
|
|
37
|
+
.command("update")
|
|
38
|
+
.description("Print (or run with --yes) the recommended package-manager update command")
|
|
39
|
+
.option("--yes", "Execute the update command after printing it")
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
const code = await deps.runUpdate(options);
|
|
42
|
+
if (code !== 0) {
|
|
43
|
+
process.exitCode = code;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
program
|
|
47
|
+
.command("doctor")
|
|
48
|
+
.description("Diagnose Lisa, project, starter, and wiki health")
|
|
49
|
+
.argument("[path]", "Project path to inspect")
|
|
50
|
+
.option("--json", "Emit JSON")
|
|
51
|
+
.option("--offline", "Skip network checks")
|
|
52
|
+
.action(async (targetPath, options) => {
|
|
53
|
+
await deps.runDoctor(targetPath, options);
|
|
54
|
+
});
|
|
55
|
+
return program;
|
|
56
|
+
}
|
|
15
57
|
/**
|
|
16
58
|
* Create and configure the CLI program.
|
|
17
59
|
*
|
|
@@ -36,7 +78,10 @@ export function createProgram(dependencies = {}) {
|
|
|
36
78
|
.option("--no-update-check", "Skip the npm latest-version check");
|
|
37
79
|
// Run the npm update-check once per invocation, before the matched action.
|
|
38
80
|
// It is non-fatal: a failed check never blocks the action from running.
|
|
39
|
-
program.hook("preAction", async () => {
|
|
81
|
+
program.hook("preAction", async (_thisCommand, actionCommand) => {
|
|
82
|
+
if (["doctor", "update", "version"].includes(actionCommand.name())) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
40
85
|
if (program.opts().updateCheck === false) {
|
|
41
86
|
return;
|
|
42
87
|
}
|
|
@@ -61,6 +106,13 @@ export function createProgram(dependencies = {}) {
|
|
|
61
106
|
.argument("[destination]", "Project name or path (default: ./<type>-app)")).action(async (destination, options) => {
|
|
62
107
|
await deps.runSetupProject(destination, options);
|
|
63
108
|
});
|
|
109
|
+
addSharedOptions(program
|
|
110
|
+
.command("setup-wiki")
|
|
111
|
+
.description("Prepare an existing project for embedded Lisa wiki setup")
|
|
112
|
+
.argument("[path]", "Project path (default: current directory)")).action(async (destination, options) => {
|
|
113
|
+
await deps.runSetupWiki(destination, options);
|
|
114
|
+
});
|
|
115
|
+
addMaintenanceCommands(program, deps);
|
|
64
116
|
return program;
|
|
65
117
|
}
|
|
66
118
|
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,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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type CLIOptions } from "./shared-options.js";
|
|
2
|
+
/** Options parsed for the setup-wiki command. */
|
|
3
|
+
export type SetupWikiOptions = CLIOptions;
|
|
4
|
+
/** Runtime collaborators for setup-wiki. */
|
|
5
|
+
export interface SetupWikiDependencies {
|
|
6
|
+
runApply: (destination: string | undefined, options: CLIOptions) => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Prepare an existing project for embedded Lisa wiki setup.
|
|
10
|
+
*
|
|
11
|
+
* The wiki kernel is delivered through Lisa's plugin and skill overlay, so the
|
|
12
|
+
* CLI command reuses the normal apply path against the target project. After
|
|
13
|
+
* apply, the runtime-specific `/setup:wiki` or `$lisa-wiki-setup` command owns
|
|
14
|
+
* the interactive wiki scaffold/repair workflow.
|
|
15
|
+
* @param destination - Optional project path, defaults to the current directory
|
|
16
|
+
* @param options - Parsed shared Lisa options
|
|
17
|
+
* @param dependencies - Injectable collaborators
|
|
18
|
+
* @returns Promise that resolves after Lisa apply completes
|
|
19
|
+
*/
|
|
20
|
+
export declare function runSetupWiki(destination: string | undefined, options: SetupWikiOptions, dependencies?: SetupWikiDependencies): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=setup-wiki.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wiki.d.ts","sourceRoot":"","sources":["../../src/cli/setup-wiki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C,4CAA4C;AAC5C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,CACR,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,UAAU,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,gBAAgB,EACzB,YAAY,GAAE,qBAA4C,GACzD,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { runApply } from "./apply.js";
|
|
2
|
+
const DEFAULT_DEPENDENCIES = {
|
|
3
|
+
runApply,
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Prepare an existing project for embedded Lisa wiki setup.
|
|
7
|
+
*
|
|
8
|
+
* The wiki kernel is delivered through Lisa's plugin and skill overlay, so the
|
|
9
|
+
* CLI command reuses the normal apply path against the target project. After
|
|
10
|
+
* apply, the runtime-specific `/setup:wiki` or `$lisa-wiki-setup` command owns
|
|
11
|
+
* the interactive wiki scaffold/repair workflow.
|
|
12
|
+
* @param destination - Optional project path, defaults to the current directory
|
|
13
|
+
* @param options - Parsed shared Lisa options
|
|
14
|
+
* @param dependencies - Injectable collaborators
|
|
15
|
+
* @returns Promise that resolves after Lisa apply completes
|
|
16
|
+
*/
|
|
17
|
+
export async function runSetupWiki(destination, options, dependencies = DEFAULT_DEPENDENCIES) {
|
|
18
|
+
await dependencies.runApply(destination ?? ".", options);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=setup-wiki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wiki.js","sourceRoot":"","sources":["../../src/cli/setup-wiki.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAatC,MAAM,oBAAoB,GAA0B;IAClD,QAAQ;CACT,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAA+B,EAC/B,OAAyB,EACzB,eAAsC,oBAAoB;IAE1D,MAAM,YAAY,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
/** Options parsed for `lisa update`. */
|
|
3
|
+
export interface UpdateCommandOptions {
|
|
4
|
+
yes?: boolean;
|
|
5
|
+
}
|
|
6
|
+
/** Runtime collaborators for the update command. */
|
|
7
|
+
export interface UpdateCommandDependencies {
|
|
8
|
+
/** Current working directory. */
|
|
9
|
+
cwd: string;
|
|
10
|
+
/** Environment map used for package-manager detection. */
|
|
11
|
+
env: NodeJS.ProcessEnv;
|
|
12
|
+
/** Spawn implementation used when --yes is passed. */
|
|
13
|
+
spawn: typeof spawn;
|
|
14
|
+
/** Write user-facing output. */
|
|
15
|
+
write: (message: string) => void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Detect the preferred package manager from the user agent or lockfiles.
|
|
19
|
+
* @param deps - Runtime dependencies
|
|
20
|
+
* @returns Package manager command
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectPackageManager(deps: Pick<UpdateCommandDependencies, "cwd" | "env">): "npm" | "pnpm" | "yarn" | "bun";
|
|
23
|
+
/**
|
|
24
|
+
* Compose the global Lisa update command for a package manager.
|
|
25
|
+
* @param packageManager - Detected package manager
|
|
26
|
+
* @returns Command and arguments ready for spawn
|
|
27
|
+
*/
|
|
28
|
+
export declare function getUpdateCommand(packageManager: string): {
|
|
29
|
+
command: string;
|
|
30
|
+
args: string[];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Run `lisa update`.
|
|
34
|
+
* @param options - Parsed command options
|
|
35
|
+
* @param dependencies - Optional collaborators for tests
|
|
36
|
+
* @returns Child exit code when --yes runs, otherwise 0
|
|
37
|
+
*/
|
|
38
|
+
export declare function runUpdate(options: UpdateCommandOptions, dependencies?: Partial<UpdateCommandDependencies>): Promise<number>;
|
|
39
|
+
//# sourceMappingURL=update-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/update-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C,wCAAwC;AACxC,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACxC,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,sDAAsD;IACtD,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,gCAAgC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAmBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE,KAAK,GAAG,KAAK,CAAC,GACnD,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CA0BjC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAoBA;AAqBD;;;;;GAKG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,oBAAoB,EAC7B,YAAY,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACpD,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
const LISA_LATEST_PACKAGE = "@codyswann/lisa@latest";
|
|
5
|
+
const DEFAULT_DEPENDENCIES = {
|
|
6
|
+
cwd: process.cwd(),
|
|
7
|
+
env: getProcessEnv(),
|
|
8
|
+
spawn,
|
|
9
|
+
write: message => console.log(message),
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Read process.env through one explicit, reviewable exception to the app-template
|
|
13
|
+
* env rule. The CLI needs externally supplied package-manager metadata.
|
|
14
|
+
* @returns Current process environment
|
|
15
|
+
*/
|
|
16
|
+
function getProcessEnv() {
|
|
17
|
+
// eslint-disable-next-line no-restricted-syntax -- CLI package-manager detection must read externally supplied process env once
|
|
18
|
+
return process.env;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Detect the preferred package manager from the user agent or lockfiles.
|
|
22
|
+
* @param deps - Runtime dependencies
|
|
23
|
+
* @returns Package manager command
|
|
24
|
+
*/
|
|
25
|
+
export function detectPackageManager(deps) {
|
|
26
|
+
const userAgent = deps.env.npm_config_user_agent ?? "";
|
|
27
|
+
if (userAgent.startsWith("pnpm")) {
|
|
28
|
+
return "pnpm";
|
|
29
|
+
}
|
|
30
|
+
if (userAgent.startsWith("yarn")) {
|
|
31
|
+
return "yarn";
|
|
32
|
+
}
|
|
33
|
+
if (userAgent.startsWith("bun")) {
|
|
34
|
+
return "bun";
|
|
35
|
+
}
|
|
36
|
+
if (userAgent.startsWith("npm")) {
|
|
37
|
+
return "npm";
|
|
38
|
+
}
|
|
39
|
+
if (existsSync(path.join(deps.cwd, "bun.lockb"))) {
|
|
40
|
+
return "bun";
|
|
41
|
+
}
|
|
42
|
+
if (existsSync(path.join(deps.cwd, "pnpm-lock.yaml"))) {
|
|
43
|
+
return "pnpm";
|
|
44
|
+
}
|
|
45
|
+
if (existsSync(path.join(deps.cwd, "yarn.lock"))) {
|
|
46
|
+
return "yarn";
|
|
47
|
+
}
|
|
48
|
+
return "npm";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Compose the global Lisa update command for a package manager.
|
|
52
|
+
* @param packageManager - Detected package manager
|
|
53
|
+
* @returns Command and arguments ready for spawn
|
|
54
|
+
*/
|
|
55
|
+
export function getUpdateCommand(packageManager) {
|
|
56
|
+
switch (packageManager) {
|
|
57
|
+
case "bun":
|
|
58
|
+
return { command: "bun", args: ["add", "-g", LISA_LATEST_PACKAGE] };
|
|
59
|
+
case "pnpm":
|
|
60
|
+
return {
|
|
61
|
+
command: "pnpm",
|
|
62
|
+
args: ["add", "-g", LISA_LATEST_PACKAGE],
|
|
63
|
+
};
|
|
64
|
+
case "yarn":
|
|
65
|
+
return {
|
|
66
|
+
command: "yarn",
|
|
67
|
+
args: ["global", "add", LISA_LATEST_PACKAGE],
|
|
68
|
+
};
|
|
69
|
+
default:
|
|
70
|
+
return {
|
|
71
|
+
command: "npm",
|
|
72
|
+
args: ["install", "-g", LISA_LATEST_PACKAGE],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Execute a child command and resolve to its exit code.
|
|
78
|
+
* @param deps - Runtime dependencies
|
|
79
|
+
* @param command - Executable name
|
|
80
|
+
* @param args - Command arguments
|
|
81
|
+
* @returns Child process exit code
|
|
82
|
+
*/
|
|
83
|
+
async function runSpawn(deps, command, args) {
|
|
84
|
+
return await new Promise((resolve, reject) => {
|
|
85
|
+
const child = deps.spawn(command, args, { stdio: "inherit" });
|
|
86
|
+
child.once("error", reject);
|
|
87
|
+
child.once("exit", code => resolve(code ?? 1));
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Run `lisa update`.
|
|
92
|
+
* @param options - Parsed command options
|
|
93
|
+
* @param dependencies - Optional collaborators for tests
|
|
94
|
+
* @returns Child exit code when --yes runs, otherwise 0
|
|
95
|
+
*/
|
|
96
|
+
export async function runUpdate(options, dependencies = {}) {
|
|
97
|
+
const deps = { ...DEFAULT_DEPENDENCIES, ...dependencies };
|
|
98
|
+
const updateCommand = getUpdateCommand(detectPackageManager(deps));
|
|
99
|
+
deps.write([updateCommand.command, ...updateCommand.args].join(" "));
|
|
100
|
+
if (!options.yes) {
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
return await runSpawn(deps, updateCommand.command, updateCommand.args);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=update-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-cmd.js","sourceRoot":"","sources":["../../src/cli/update-cmd.ts"],"names":[],"mappings":"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"}
|