@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.
Files changed (69) hide show
  1. package/README.md +42 -3
  2. package/dist/cli/doctor.d.ts +35 -0
  3. package/dist/cli/doctor.d.ts.map +1 -0
  4. package/dist/cli/doctor.js +204 -0
  5. package/dist/cli/doctor.js.map +1 -0
  6. package/dist/cli/index.d.ts +12 -0
  7. package/dist/cli/index.d.ts.map +1 -1
  8. package/dist/cli/index.js +53 -1
  9. package/dist/cli/index.js.map +1 -1
  10. package/dist/cli/setup-wiki.d.ts +21 -0
  11. package/dist/cli/setup-wiki.d.ts.map +1 -0
  12. package/dist/cli/setup-wiki.js +20 -0
  13. package/dist/cli/setup-wiki.js.map +1 -0
  14. package/dist/cli/update-cmd.d.ts +39 -0
  15. package/dist/cli/update-cmd.d.ts.map +1 -0
  16. package/dist/cli/update-cmd.js +105 -0
  17. package/dist/cli/update-cmd.js.map +1 -0
  18. package/dist/cli/version-cmd.d.ts +29 -0
  19. package/dist/cli/version-cmd.d.ts.map +1 -0
  20. package/dist/cli/version-cmd.js +74 -0
  21. package/dist/cli/version-cmd.js.map +1 -0
  22. package/dist/index.js +12 -1
  23. package/dist/index.js.map +1 -1
  24. package/package.json +1 -1
  25. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-agy/plugin.json +1 -1
  28. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  29. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  31. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  37. package/plugins/lisa-expo-agy/plugin.json +1 -1
  38. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  40. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  43. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  48. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  53. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails-agy/plugin.json +1 -1
  58. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  63. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  68. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  69. 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
- curl -fsSL https://claude.ai/install.sh | bash
54
+ npm install -g @codyswann/lisa
55
+ lisa setup-project --type rails my-app
56
+ cd my-app
55
57
  ```
56
58
 
57
- > Ask Claude: "I just cloned this repo. Walk me through setup."
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 set of top-level commands that map to the work lifecycle. Run them in Claude Code; everything underneath — agents, sub-flows, and the supporting libraries that power each step — happens automatically.
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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"}
@@ -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}). */
@@ -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;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"}
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";
@@ -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;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"}
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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"}