@mozole/cli 1.4.3 → 2.0.0-b

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 (249) hide show
  1. package/LICENSE +16 -4
  2. package/README.md +85 -112
  3. package/dist/cli.d.ts +2 -2
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +204 -184
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/adopt.d.ts +5 -10
  8. package/dist/commands/adopt.d.ts.map +1 -1
  9. package/dist/commands/adopt.js +49 -849
  10. package/dist/commands/adopt.js.map +1 -1
  11. package/dist/commands/doctor.d.ts +1 -7
  12. package/dist/commands/doctor.d.ts.map +1 -1
  13. package/dist/commands/doctor.js +69 -377
  14. package/dist/commands/doctor.js.map +1 -1
  15. package/dist/commands/new.d.ts +8 -10
  16. package/dist/commands/new.d.ts.map +1 -1
  17. package/dist/commands/new.js +32 -197
  18. package/dist/commands/new.js.map +1 -1
  19. package/dist/commands/phase.d.ts +11 -0
  20. package/dist/commands/phase.d.ts.map +1 -0
  21. package/dist/commands/phase.js +106 -0
  22. package/dist/commands/phase.js.map +1 -0
  23. package/dist/commands/prototype.d.ts +6 -0
  24. package/dist/commands/prototype.d.ts.map +1 -0
  25. package/dist/commands/prototype.js +28 -0
  26. package/dist/commands/prototype.js.map +1 -0
  27. package/dist/commands/repomap.d.ts +6 -0
  28. package/dist/commands/repomap.d.ts.map +1 -0
  29. package/dist/commands/repomap.js +71 -0
  30. package/dist/commands/repomap.js.map +1 -0
  31. package/dist/commands/test.d.ts +6 -0
  32. package/dist/commands/test.d.ts.map +1 -0
  33. package/dist/commands/test.js +115 -0
  34. package/dist/commands/test.js.map +1 -0
  35. package/dist/commands/ui.d.ts +1 -42
  36. package/dist/commands/ui.d.ts.map +1 -1
  37. package/dist/commands/ui.js +74 -466
  38. package/dist/commands/ui.js.map +1 -1
  39. package/dist/commands/verify.d.ts +12 -7
  40. package/dist/commands/verify.d.ts.map +1 -1
  41. package/dist/commands/verify.js +148 -65
  42. package/dist/commands/verify.js.map +1 -1
  43. package/dist/qa/a11y.d.ts +24 -0
  44. package/dist/qa/a11y.d.ts.map +1 -0
  45. package/dist/qa/a11y.js +124 -0
  46. package/dist/qa/a11y.js.map +1 -0
  47. package/dist/qa/breakpoints.d.ts +16 -0
  48. package/dist/qa/breakpoints.d.ts.map +1 -0
  49. package/dist/qa/breakpoints.js +45 -0
  50. package/dist/qa/breakpoints.js.map +1 -0
  51. package/dist/qa/contract.d.ts +21 -0
  52. package/dist/qa/contract.d.ts.map +1 -0
  53. package/dist/qa/contract.js +116 -0
  54. package/dist/qa/contract.js.map +1 -0
  55. package/dist/qa/index.d.ts +6 -0
  56. package/dist/qa/index.d.ts.map +1 -0
  57. package/dist/qa/index.js +6 -0
  58. package/dist/qa/index.js.map +1 -0
  59. package/dist/qa/probe.d.ts +48 -0
  60. package/dist/qa/probe.d.ts.map +1 -0
  61. package/dist/qa/probe.js +206 -0
  62. package/dist/qa/probe.js.map +1 -0
  63. package/dist/qa/runner.d.ts +27 -33
  64. package/dist/qa/runner.d.ts.map +1 -1
  65. package/dist/qa/runner.js +286 -332
  66. package/dist/qa/runner.js.map +1 -1
  67. package/dist/scaffold/agents.d.ts +5 -0
  68. package/dist/scaffold/agents.d.ts.map +1 -0
  69. package/dist/scaffold/agents.js +84 -0
  70. package/dist/scaffold/agents.js.map +1 -0
  71. package/dist/scaffold/backend.d.ts +6 -8
  72. package/dist/scaffold/backend.d.ts.map +1 -1
  73. package/dist/scaffold/backend.js +318 -199
  74. package/dist/scaffold/backend.js.map +1 -1
  75. package/dist/scaffold/design.d.ts +4 -3
  76. package/dist/scaffold/design.d.ts.map +1 -1
  77. package/dist/scaffold/design.js +38 -47
  78. package/dist/scaffold/design.js.map +1 -1
  79. package/dist/scaffold/flagship.d.ts +8 -0
  80. package/dist/scaffold/flagship.d.ts.map +1 -0
  81. package/dist/scaffold/flagship.js +337 -0
  82. package/dist/scaffold/flagship.js.map +1 -0
  83. package/dist/scaffold/index.d.ts +9 -0
  84. package/dist/scaffold/index.d.ts.map +1 -0
  85. package/dist/scaffold/index.js +48 -0
  86. package/dist/scaffold/index.js.map +1 -0
  87. package/dist/scaffold/phases.d.ts +10 -0
  88. package/dist/scaffold/phases.d.ts.map +1 -0
  89. package/dist/scaffold/phases.js +165 -0
  90. package/dist/scaffold/phases.js.map +1 -0
  91. package/dist/scaffold/repomap.d.ts +6 -0
  92. package/dist/scaffold/repomap.d.ts.map +1 -0
  93. package/dist/scaffold/repomap.js +89 -0
  94. package/dist/scaffold/repomap.js.map +1 -0
  95. package/dist/scaffold/standard.d.ts +13 -0
  96. package/dist/scaffold/standard.d.ts.map +1 -0
  97. package/dist/scaffold/standard.js +371 -0
  98. package/dist/scaffold/standard.js.map +1 -0
  99. package/dist/scaffold/tokens.d.ts +3 -0
  100. package/dist/scaffold/tokens.d.ts.map +1 -0
  101. package/dist/scaffold/tokens.js +126 -0
  102. package/dist/scaffold/tokens.js.map +1 -0
  103. package/dist/server/manager.d.ts +23 -0
  104. package/dist/server/manager.d.ts.map +1 -0
  105. package/dist/server/manager.js +96 -0
  106. package/dist/server/manager.js.map +1 -0
  107. package/dist/utils/ai-trace.d.ts +8 -0
  108. package/dist/utils/ai-trace.d.ts.map +1 -0
  109. package/dist/utils/ai-trace.js +69 -0
  110. package/dist/utils/ai-trace.js.map +1 -0
  111. package/dist/utils/browser.d.ts +10 -0
  112. package/dist/utils/browser.d.ts.map +1 -0
  113. package/dist/utils/browser.js +127 -0
  114. package/dist/utils/browser.js.map +1 -0
  115. package/dist/utils/fs.d.ts +11 -0
  116. package/dist/utils/fs.d.ts.map +1 -0
  117. package/dist/utils/fs.js +166 -0
  118. package/dist/utils/fs.js.map +1 -0
  119. package/dist/utils/git.d.ts +9 -0
  120. package/dist/utils/git.d.ts.map +1 -0
  121. package/dist/utils/git.js +69 -0
  122. package/dist/utils/git.js.map +1 -0
  123. package/dist/utils/process.d.ts +21 -0
  124. package/dist/utils/process.d.ts.map +1 -0
  125. package/dist/utils/process.js +120 -0
  126. package/dist/utils/process.js.map +1 -0
  127. package/dist/version.d.ts +21 -36
  128. package/dist/version.d.ts.map +1 -1
  129. package/dist/version.js +21 -44
  130. package/dist/version.js.map +1 -1
  131. package/package.json +19 -38
  132. package/CHANGELOG.md +0 -38
  133. package/dist/commands/cce.d.ts +0 -7
  134. package/dist/commands/cce.d.ts.map +0 -1
  135. package/dist/commands/cce.js +0 -37
  136. package/dist/commands/cce.js.map +0 -1
  137. package/dist/commands/logs.d.ts +0 -3
  138. package/dist/commands/logs.d.ts.map +0 -1
  139. package/dist/commands/logs.js +0 -40
  140. package/dist/commands/logs.js.map +0 -1
  141. package/dist/commands/qa.d.ts +0 -12
  142. package/dist/commands/qa.d.ts.map +0 -1
  143. package/dist/commands/qa.js +0 -143
  144. package/dist/commands/qa.js.map +0 -1
  145. package/dist/commands/stats.d.ts +0 -37
  146. package/dist/commands/stats.d.ts.map +0 -1
  147. package/dist/commands/stats.js +0 -169
  148. package/dist/commands/stats.js.map +0 -1
  149. package/dist/commands/template.d.ts +0 -8
  150. package/dist/commands/template.d.ts.map +0 -1
  151. package/dist/commands/template.js +0 -392
  152. package/dist/commands/template.js.map +0 -1
  153. package/dist/config/project.d.ts +0 -54
  154. package/dist/config/project.d.ts.map +0 -1
  155. package/dist/config/project.js +0 -100
  156. package/dist/config/project.js.map +0 -1
  157. package/dist/context/cce.d.ts +0 -39
  158. package/dist/context/cce.d.ts.map +0 -1
  159. package/dist/context/cce.js +0 -455
  160. package/dist/context/cce.js.map +0 -1
  161. package/dist/governor/fingerprint.d.ts +0 -7
  162. package/dist/governor/fingerprint.d.ts.map +0 -1
  163. package/dist/governor/fingerprint.js +0 -120
  164. package/dist/governor/fingerprint.js.map +0 -1
  165. package/dist/governor/hook.d.ts +0 -13
  166. package/dist/governor/hook.d.ts.map +0 -1
  167. package/dist/governor/hook.js +0 -389
  168. package/dist/governor/hook.js.map +0 -1
  169. package/dist/governor/state.d.ts +0 -45
  170. package/dist/governor/state.d.ts.map +0 -1
  171. package/dist/governor/state.js +0 -60
  172. package/dist/governor/state.js.map +0 -1
  173. package/dist/integrations/antigravity.d.ts +0 -20
  174. package/dist/integrations/antigravity.d.ts.map +0 -1
  175. package/dist/integrations/antigravity.js +0 -153
  176. package/dist/integrations/antigravity.js.map +0 -1
  177. package/dist/output-safety.d.ts +0 -3
  178. package/dist/output-safety.d.ts.map +0 -1
  179. package/dist/output-safety.js +0 -44
  180. package/dist/output-safety.js.map +0 -1
  181. package/dist/output.d.ts +0 -5
  182. package/dist/output.d.ts.map +0 -1
  183. package/dist/output.js +0 -2
  184. package/dist/output.js.map +0 -1
  185. package/dist/platform/executable.d.ts +0 -11
  186. package/dist/platform/executable.d.ts.map +0 -1
  187. package/dist/platform/executable.js +0 -69
  188. package/dist/platform/executable.js.map +0 -1
  189. package/dist/platform/process.d.ts +0 -27
  190. package/dist/platform/process.d.ts.map +0 -1
  191. package/dist/platform/process.js +0 -189
  192. package/dist/platform/process.js.map +0 -1
  193. package/dist/progress.d.ts +0 -44
  194. package/dist/progress.d.ts.map +0 -1
  195. package/dist/progress.js +0 -123
  196. package/dist/progress.js.map +0 -1
  197. package/dist/qa/artifacts.d.ts +0 -3
  198. package/dist/qa/artifacts.d.ts.map +0 -1
  199. package/dist/qa/artifacts.js +0 -15
  200. package/dist/qa/artifacts.js.map +0 -1
  201. package/dist/qa/diff.d.ts +0 -10
  202. package/dist/qa/diff.d.ts.map +0 -1
  203. package/dist/qa/diff.js +0 -90
  204. package/dist/qa/diff.js.map +0 -1
  205. package/dist/qa/server.d.ts +0 -10
  206. package/dist/qa/server.d.ts.map +0 -1
  207. package/dist/qa/server.js +0 -127
  208. package/dist/qa/server.js.map +0 -1
  209. package/dist/scaffold/adoption.d.ts +0 -17
  210. package/dist/scaffold/adoption.d.ts.map +0 -1
  211. package/dist/scaffold/adoption.js +0 -279
  212. package/dist/scaffold/adoption.js.map +0 -1
  213. package/dist/scaffold/legacy.d.ts +0 -4
  214. package/dist/scaffold/legacy.d.ts.map +0 -1
  215. package/dist/scaffold/legacy.js +0 -139
  216. package/dist/scaffold/legacy.js.map +0 -1
  217. package/dist/scaffold/routes.d.ts +0 -3
  218. package/dist/scaffold/routes.d.ts.map +0 -1
  219. package/dist/scaffold/routes.js +0 -37
  220. package/dist/scaffold/routes.js.map +0 -1
  221. package/dist/scaffold/standalone.d.ts +0 -7
  222. package/dist/scaffold/standalone.d.ts.map +0 -1
  223. package/dist/scaffold/standalone.js +0 -374
  224. package/dist/scaffold/standalone.js.map +0 -1
  225. package/dist/scaffold/templates.d.ts +0 -9
  226. package/dist/scaffold/templates.d.ts.map +0 -1
  227. package/dist/scaffold/templates.js +0 -317
  228. package/dist/scaffold/templates.js.map +0 -1
  229. package/dist/scaffold/write.d.ts +0 -2
  230. package/dist/scaffold/write.d.ts.map +0 -1
  231. package/dist/scaffold/write.js +0 -38
  232. package/dist/scaffold/write.js.map +0 -1
  233. package/dist/telemetry/store.d.ts +0 -33
  234. package/dist/telemetry/store.d.ts.map +0 -1
  235. package/dist/telemetry/store.js +0 -75
  236. package/dist/telemetry/store.js.map +0 -1
  237. package/dist/template/servers.d.ts +0 -21
  238. package/dist/template/servers.d.ts.map +0 -1
  239. package/dist/template/servers.js +0 -193
  240. package/dist/template/servers.js.map +0 -1
  241. package/dist/template/workspace.d.ts +0 -23
  242. package/dist/template/workspace.d.ts.map +0 -1
  243. package/dist/template/workspace.js +0 -152
  244. package/dist/template/workspace.js.map +0 -1
  245. package/dist/verify/runner.d.ts +0 -16
  246. package/dist/verify/runner.d.ts.map +0 -1
  247. package/dist/verify/runner.js +0 -112
  248. package/dist/verify/runner.js.map +0 -1
  249. package/docs/agent-audit.md +0 -24
@@ -1,392 +0,0 @@
1
- import { cp, lstat, mkdir, readFile, rename, rm, rmdir, writeFile, } from "node:fs/promises";
2
- import path from "node:path";
3
- import { readConfig } from "../config/project.js";
4
- import { npmExecutable } from "../platform/executable.js";
5
- import { run } from "../platform/process.js";
6
- import { findTemplateRoot, initializeTemplateRoot, listTemplateProjects, registerTemplateProject, } from "../template/workspace.js";
7
- import { adoptCommand } from "./adopt.js";
8
- export async function templateInitCommand(target, cwd, output = console) {
9
- const root = path.resolve(cwd, target ?? ".");
10
- let targetExisted = false;
11
- let gitignoreExisted = false;
12
- let initialized = false;
13
- try {
14
- try {
15
- targetExisted = (await lstat(root)).isDirectory();
16
- }
17
- catch (error) {
18
- if (error.code !== "ENOENT")
19
- throw error;
20
- }
21
- if (targetExisted) {
22
- try {
23
- await lstat(path.join(root, ".gitignore"));
24
- gitignoreExisted = true;
25
- }
26
- catch (error) {
27
- if (error.code !== "ENOENT")
28
- throw error;
29
- }
30
- }
31
- await initializeTemplateRoot(root);
32
- initialized = true;
33
- if (process.env.MOZOLE_SKIP_INSTALL !== "1") {
34
- const installed = await run(npmExecutable(), ["install", "--no-fund", "--no-audit"], {
35
- cwd: root,
36
- timeoutMs: 600_000,
37
- logFile: path.join(root, ".mozole", "logs", "npm-install.log"),
38
- });
39
- if (installed.exitCode !== 0)
40
- throw new Error("Shared dependency installation failed. See .mozole/logs/npm-install.log.");
41
- if (process.env.MOZOLE_SKIP_BROWSER !== "1") {
42
- const browser = await run(npmExecutable(), ["exec", "--", "playwright", "install", "chromium"], {
43
- cwd: root,
44
- timeoutMs: 600_000,
45
- logFile: path.join(root, ".mozole", "logs", "playwright-install.log"),
46
- });
47
- if (browser.exitCode !== 0)
48
- throw new Error("Chromium installation failed. See .mozole/logs/playwright-install.log.");
49
- }
50
- }
51
- output.log(`Created Mozole template workspace at ${root}\n\nNext:\n cd ${path.relative(cwd, root) || "."}\n mozole new my-project\n mozole ui`);
52
- return 0;
53
- }
54
- catch (error) {
55
- if (initialized) {
56
- if (!targetExisted) {
57
- await rm(root, { recursive: true, force: true });
58
- }
59
- else {
60
- await rm(path.join(root, "package.json"), { force: true });
61
- await rm(path.join(root, ".mozole", "template.json"), { force: true });
62
- if (!gitignoreExisted)
63
- await rm(path.join(root, ".gitignore"), { force: true });
64
- try {
65
- await rmdir(path.join(root, ".mozole"));
66
- }
67
- catch { }
68
- }
69
- }
70
- output.error(`TEMPLATE INIT FAIL\n\n${error instanceof Error ? error.message : String(error)}`);
71
- return 1;
72
- }
73
- }
74
- export async function templateListCommand(cwd, output = console) {
75
- const root = await findTemplateRoot(cwd);
76
- if (!root) {
77
- output.error("No Mozole template workspace found. Run `mozole template init <folder>`.");
78
- return 2;
79
- }
80
- const projects = await listTemplateProjects(root);
81
- output.log(projects.length
82
- ? projects
83
- .map((project) => `${project.relativePath}\thttp://127.0.0.1:${project.preferredPort}${project.readinessPath}`)
84
- .join("\n")
85
- : "No Mozole projects found in this template workspace.");
86
- return 0;
87
- }
88
- async function optionalRead(file) {
89
- try {
90
- return await readFile(file);
91
- }
92
- catch (error) {
93
- if (error.code === "ENOENT")
94
- return undefined;
95
- throw error;
96
- }
97
- }
98
- async function atomicWrite(file, contents) {
99
- await mkdir(path.dirname(file), { recursive: true });
100
- const temporary = `${file}.${process.pid}.tmp`;
101
- try {
102
- await writeFile(temporary, contents, { flag: "wx" });
103
- await rename(temporary, file);
104
- }
105
- finally {
106
- await rm(temporary, { force: true });
107
- }
108
- }
109
- function dependencyMap(value, label) {
110
- if (value === undefined)
111
- return {};
112
- if (!value ||
113
- typeof value !== "object" ||
114
- Array.isArray(value) ||
115
- !Object.values(value).every((version) => typeof version === "string"))
116
- throw new Error(`${label} must contain package version strings.`);
117
- return value;
118
- }
119
- async function mergeRootDependencies(root, projectRoot) {
120
- const rootFile = path.join(root, "package.json");
121
- const projectFile = path.join(projectRoot, "package.json");
122
- const rootPackage = JSON.parse(await readFile(rootFile, "utf8"));
123
- const projectPackage = JSON.parse(await readFile(projectFile, "utf8"));
124
- if (!rootPackage || typeof rootPackage !== "object")
125
- throw new Error("Template package.json must contain an object.");
126
- if (!projectPackage || typeof projectPackage !== "object")
127
- throw new Error("Project package.json must contain an object.");
128
- const runtime = dependencyMap(rootPackage.dependencies, "dependencies");
129
- const development = dependencyMap(rootPackage.devDependencies, "devDependencies");
130
- const requestedRuntime = {
131
- ...dependencyMap(projectPackage.peerDependencies, "peerDependencies"),
132
- ...dependencyMap(projectPackage.optionalDependencies, "optionalDependencies"),
133
- ...dependencyMap(projectPackage.dependencies, "dependencies"),
134
- };
135
- const requestedDevelopment = dependencyMap(projectPackage.devDependencies, "devDependencies");
136
- const conflicts = [];
137
- const merge = (requested, preferred, other) => {
138
- for (const [name, version] of Object.entries(requested)) {
139
- const current = preferred[name] ?? other[name];
140
- if (current && current !== version) {
141
- conflicts.push(`${name}: template ${current}, project ${version}`);
142
- continue;
143
- }
144
- if (!current)
145
- preferred[name] = version;
146
- }
147
- };
148
- merge(requestedRuntime, runtime, development);
149
- merge(requestedDevelopment, development, runtime);
150
- for (const field of [
151
- "dependencies",
152
- "optionalDependencies",
153
- "peerDependencies",
154
- ]) {
155
- const values = dependencyMap(projectPackage[field], field);
156
- for (const name of Object.keys(values)) {
157
- const requested = values[name];
158
- if (requested !== undefined)
159
- values[name] = runtime[name] ?? development[name] ?? requested;
160
- }
161
- projectPackage[field] = values;
162
- }
163
- const projectDevelopment = dependencyMap(projectPackage.devDependencies, "devDependencies");
164
- for (const name of Object.keys(projectDevelopment)) {
165
- const requested = projectDevelopment[name];
166
- if (requested !== undefined)
167
- projectDevelopment[name] =
168
- development[name] ?? runtime[name] ?? requested;
169
- }
170
- projectPackage.devDependencies = projectDevelopment;
171
- rootPackage.dependencies = runtime;
172
- rootPackage.devDependencies = development;
173
- await atomicWrite(rootFile, `${JSON.stringify(rootPackage, null, 2)}\n`);
174
- await atomicWrite(projectFile, `${JSON.stringify(projectPackage, null, 2)}\n`);
175
- return conflicts;
176
- }
177
- function safeWorkspaceName(projectRoot, packageName) {
178
- const candidate = (packageName?.split("/").pop() || path.basename(projectRoot))
179
- .toLowerCase()
180
- .replace(/[^a-z0-9._-]+/g, "-")
181
- .replace(/^[^a-z0-9]+|[^a-z0-9]+$/g, "");
182
- if (!candidate)
183
- throw new Error("Cannot derive a safe workspace name.");
184
- return candidate;
185
- }
186
- async function recoverSharedDependencyDeclarations(projectRoot, projectPackage) {
187
- const currentCount = [
188
- projectPackage.dependencies,
189
- projectPackage.devDependencies,
190
- projectPackage.optionalDependencies,
191
- projectPackage.peerDependencies,
192
- ].reduce((total, values) => total + Object.keys(values ?? {}).length, 0);
193
- if (currentCount > 1)
194
- return false;
195
- try {
196
- const backup = JSON.parse(await readFile(path.join(projectRoot, ".mozole", "backups", "package.json.before-adopt"), "utf8"));
197
- const backupDependencies = {
198
- ...backup.dependencies,
199
- ...backup.devDependencies,
200
- };
201
- if (!backupDependencies.react ||
202
- (!backupDependencies.vite && !backupDependencies["@react-router/dev"]))
203
- return false;
204
- for (const field of [
205
- "dependencies",
206
- "devDependencies",
207
- "optionalDependencies",
208
- "peerDependencies",
209
- ])
210
- projectPackage[field] = {
211
- ...backup[field],
212
- ...projectPackage[field],
213
- };
214
- await atomicWrite(path.join(projectRoot, "package.json"), `${JSON.stringify(projectPackage, null, 2)}\n`);
215
- return true;
216
- }
217
- catch {
218
- return false;
219
- }
220
- }
221
- async function ensureUniquePackageName(root, projectRoot, projectPackage) {
222
- const rootPackage = JSON.parse(await readFile(path.join(root, "package.json"), "utf8"));
223
- const workspaces = Array.isArray(rootPackage.workspaces)
224
- ? rootPackage.workspaces.filter((value) => typeof value === "string")
225
- : [];
226
- const names = new Set();
227
- for (const workspace of workspaces) {
228
- const workspaceRoot = path.resolve(root, ...workspace.split("/"));
229
- if (workspaceRoot === projectRoot)
230
- continue;
231
- try {
232
- const value = JSON.parse(await readFile(path.join(workspaceRoot, "package.json"), "utf8"));
233
- if (typeof value.name === "string")
234
- names.add(value.name);
235
- }
236
- catch { }
237
- }
238
- if (projectPackage.name && !names.has(projectPackage.name))
239
- return undefined;
240
- const relativeName = path
241
- .relative(root, projectRoot)
242
- .normalize("NFKD")
243
- .replace(/[\u0300-\u036f]/g, "-")
244
- .split(path.sep)
245
- .join("-");
246
- let candidate = safeWorkspaceName(projectRoot, relativeName);
247
- let suffix = 2;
248
- while (names.has(candidate))
249
- candidate = `${candidate}-${suffix++}`;
250
- const previous = projectPackage.name;
251
- projectPackage.name = candidate;
252
- await atomicWrite(path.join(projectRoot, "package.json"), `${JSON.stringify(projectPackage, null, 2)}\n`);
253
- return previous ? `${previous} → ${candidate}` : candidate;
254
- }
255
- export async function templateAdoptCommand(input, cwd, output = console, options = {}) {
256
- if (!input) {
257
- output.error("Usage: mozole template adopt <project-path>");
258
- return 2;
259
- }
260
- const root = await findTemplateRoot(cwd);
261
- if (!root) {
262
- output.error("No Mozole template workspace found. Run `mozole template init <folder>`.");
263
- return 2;
264
- }
265
- const source = path.resolve(cwd, input);
266
- let staging;
267
- let target = source;
268
- let copied = false;
269
- const rootPackageFile = path.join(root, "package.json");
270
- const rootLockFile = path.join(root, "package-lock.json");
271
- const rootPackageBefore = await optionalRead(rootPackageFile);
272
- const rootLockBefore = await optionalRead(rootLockFile);
273
- let localModulesBackup;
274
- let localLockBackup;
275
- let childPackageBefore;
276
- try {
277
- const sourceStat = await lstat(source);
278
- if (!sourceStat.isDirectory() || sourceStat.isSymbolicLink())
279
- throw new Error("Project path must be a real directory.");
280
- const rawPackage = JSON.parse(await readFile(path.join(source, "package.json"), "utf8"));
281
- const relativeSource = path.relative(root, source);
282
- const isInsideWorkspace = Boolean(relativeSource) &&
283
- !path.isAbsolute(relativeSource) &&
284
- !relativeSource.split(path.sep).includes("..");
285
- const sourceDependencies = {
286
- ...dependencyMap(rawPackage.dependencies, "dependencies"),
287
- ...dependencyMap(rawPackage.devDependencies, "devDependencies"),
288
- };
289
- const alreadyShared = isInsideWorkspace
290
- ? await readConfig(source)
291
- .then((config) => config.workspace?.sharedDependencies === true)
292
- .catch(() => false)
293
- : false;
294
- if (!alreadyShared &&
295
- (!sourceDependencies.react ||
296
- (!sourceDependencies.vite && !sourceDependencies["@react-router/dev"])))
297
- throw new Error("Expected a React project using Vite or React Router Framework Mode.");
298
- if (!isInsideWorkspace) {
299
- const name = safeWorkspaceName(source, rawPackage.name);
300
- target = path.join(root, name);
301
- try {
302
- await lstat(target);
303
- throw new Error(`Cannot import project: ${target} already exists.`);
304
- }
305
- catch (error) {
306
- if (error.code !== "ENOENT")
307
- throw error;
308
- }
309
- staging = path.join(root, `.mozole-template-adopt-${name}-${process.pid}`);
310
- await cp(source, staging, {
311
- recursive: true,
312
- filter: (entry) => !entry
313
- .split(path.sep)
314
- .some((segment) => segment === "node_modules" || segment === ".git"),
315
- });
316
- await rename(staging, target);
317
- staging = undefined;
318
- copied = true;
319
- }
320
- childPackageBefore = await optionalRead(path.join(target, "package.json"));
321
- const recoveredDependencies = alreadyShared
322
- ? await recoverSharedDependencyDeclarations(target, rawPackage)
323
- : false;
324
- const renamedPackage = await ensureUniquePackageName(root, target, rawPackage);
325
- const nodeModules = path.join(target, "node_modules");
326
- try {
327
- await lstat(nodeModules);
328
- localModulesBackup = path.join(target, `.mozole-node-modules-${process.pid}.backup`);
329
- await rename(nodeModules, localModulesBackup);
330
- }
331
- catch (error) {
332
- if (error.code !== "ENOENT")
333
- throw error;
334
- }
335
- const childLock = path.join(target, "package-lock.json");
336
- try {
337
- await lstat(childLock);
338
- localLockBackup = path.join(target, `.mozole-package-lock-${process.pid}.backup`);
339
- await rename(childLock, localLockBackup);
340
- }
341
- catch (error) {
342
- if (error.code !== "ENOENT")
343
- throw error;
344
- }
345
- const conflicts = await mergeRootDependencies(root, target);
346
- await registerTemplateProject(root, target);
347
- const code = await adoptCommand(target, root, output, {
348
- ...options,
349
- sharedDependencies: true,
350
- workspaceRoot: root,
351
- });
352
- if (code !== 0)
353
- throw new Error(`Project adoption exited with code ${code}.`);
354
- if (localLockBackup) {
355
- const backupFile = path.join(target, ".mozole", "backups", "package-lock.before-template-adopt");
356
- await atomicWrite(backupFile, await readFile(localLockBackup));
357
- await rm(localLockBackup, { force: true });
358
- localLockBackup = undefined;
359
- }
360
- if (localModulesBackup) {
361
- await rm(localModulesBackup, { recursive: true, force: true });
362
- localModulesBackup = undefined;
363
- }
364
- output.log(`TEMPLATE ADOPT PASS\n\n${target}\nShared dependencies are owned by ${root}.${renamedPackage ? `\nWorkspace package renamed: ${renamedPackage}` : ""}${recoveredDependencies
365
- ? "\nDependency declarations recovered from the adoption backup."
366
- : ""}${conflicts.length
367
- ? `\nStandardized to template versions:\n${conflicts.map((item) => ` ${item}`).join("\n")}`
368
- : ""}`);
369
- return 0;
370
- }
371
- catch (error) {
372
- if (rootPackageBefore)
373
- await atomicWrite(rootPackageFile, rootPackageBefore);
374
- if (rootLockBefore)
375
- await atomicWrite(rootLockFile, rootLockBefore);
376
- else
377
- await rm(rootLockFile, { force: true });
378
- if (localLockBackup)
379
- await rename(localLockBackup, path.join(target, "package-lock.json"));
380
- if (localModulesBackup)
381
- await rename(localModulesBackup, path.join(target, "node_modules"));
382
- if (!copied && childPackageBefore)
383
- await atomicWrite(path.join(target, "package.json"), childPackageBefore);
384
- if (copied)
385
- await rm(target, { recursive: true, force: true });
386
- if (staging)
387
- await rm(staging, { recursive: true, force: true });
388
- output.error(`TEMPLATE ADOPT FAIL\n\n${error instanceof Error ? error.message : String(error)}\n${copied ? "Imported copy removed; source project preserved." : "Template dependency metadata restored."}`);
389
- return 1;
390
- }
391
- }
392
- //# sourceMappingURL=template.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- export interface Viewport {
2
- width: number;
3
- height: number;
4
- }
5
- export interface MozoleConfig {
6
- schemaVersion: number;
7
- name: string;
8
- mode?: "optimized" | "scaffold" | undefined;
9
- framework: "react-router";
10
- workspace?: {
11
- sharedDependencies: true;
12
- } | undefined;
13
- routes: string[];
14
- backend?: {
15
- enabled: true;
16
- runtime: "php";
17
- apiPrefix: string;
18
- port: number;
19
- } | undefined;
20
- qa: {
21
- viewports: Viewport[];
22
- visualDiffThreshold?: number | undefined;
23
- server: {
24
- command: string;
25
- args: string[];
26
- readinessPath: string;
27
- preferredPort: number;
28
- };
29
- };
30
- cce?: {
31
- enabled: boolean;
32
- initialized: boolean;
33
- command: string;
34
- };
35
- governor?: {
36
- enabled: boolean;
37
- mode: "warn" | "enforce";
38
- hooks: {
39
- codex: boolean;
40
- claude: boolean;
41
- };
42
- };
43
- telemetry?: {
44
- enabled: boolean;
45
- };
46
- verifiers: Array<{
47
- name: string;
48
- command: string;
49
- args: string[];
50
- }>;
51
- }
52
- export declare function readConfig(projectRoot: string): Promise<MozoleConfig>;
53
- export declare function findProjectRoot(start?: string): Promise<string>;
54
- //# sourceMappingURL=project.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/config/project.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;IAC5C,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE;QAAE,kBAAkB,EAAE,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IACrD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EACJ;QACE,OAAO,EAAE,IAAI,CAAC;QACd,OAAO,EAAE,KAAK,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;KACd,GACD,SAAS,CAAC;IACd,EAAE,EAAE;QACF,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QACzC,MAAM,EAAE;YACN,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,aAAa,EAAE,MAAM,CAAC;YACtB,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC;KACH,CAAC;IACF,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;QACzB,KAAK,EAAE;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC;KAC5C,CAAC;IACF,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACjC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CACrE;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAoG3E;AAED,wBAAsB,eAAe,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB5E"}
@@ -1,100 +0,0 @@
1
- import { readFile, stat } from "node:fs/promises";
2
- import path from "node:path";
3
- import { visualArtifactKey } from "../qa/artifacts.js";
4
- const MAX_QA_ROUTES = 100;
5
- const MAX_QA_VIEWPORTS = 20;
6
- const MAX_VIEWPORT_DIMENSION = 7680;
7
- export async function readConfig(projectRoot) {
8
- const contents = await readFile(path.join(projectRoot, ".mozole", "project.json"), "utf8");
9
- const value = JSON.parse(contents);
10
- if (value.qa && typeof value.qa === "object") {
11
- value.qa.visualDiffThreshold ??= 0.01;
12
- }
13
- const validBackend = value.backend === undefined ||
14
- (value.backend &&
15
- typeof value.backend === "object" &&
16
- value.backend.enabled === true &&
17
- value.backend.runtime === "php" &&
18
- typeof value.backend.apiPrefix === "string" &&
19
- value.backend.apiPrefix.startsWith("/") &&
20
- Number.isInteger(value.backend.port) &&
21
- value.backend.port > 0 &&
22
- value.backend.port <= 65535);
23
- const validVisualDiffThreshold = typeof value.qa?.visualDiffThreshold === "number" &&
24
- Number.isFinite(value.qa.visualDiffThreshold) &&
25
- value.qa.visualDiffThreshold >= 0 &&
26
- value.qa.visualDiffThreshold <= 1;
27
- if (value.schemaVersion !== 1 ||
28
- typeof value.name !== "string" ||
29
- (value.mode !== undefined &&
30
- value.mode !== "optimized" &&
31
- value.mode !== "scaffold") ||
32
- value.framework !== "react-router" ||
33
- (value.workspace !== undefined &&
34
- (typeof value.workspace !== "object" ||
35
- value.workspace.sharedDependencies !== true)) ||
36
- !validBackend ||
37
- !Array.isArray(value.routes) ||
38
- value.routes.length === 0 ||
39
- value.routes.length > MAX_QA_ROUTES ||
40
- !value.routes.every((route) => typeof route === "string" &&
41
- route.startsWith("/") &&
42
- !route.startsWith("//") &&
43
- route.length <= 2048) ||
44
- new Set(value.routes).size !== value.routes.length ||
45
- new Set(value.routes.map(visualArtifactKey)).size !== value.routes.length ||
46
- !Array.isArray(value.qa?.viewports) ||
47
- value.qa.viewports.length === 0 ||
48
- value.qa.viewports.length > MAX_QA_VIEWPORTS ||
49
- !value.qa.viewports.every((viewport) => Number.isInteger(viewport.width) &&
50
- viewport.width > 0 &&
51
- viewport.width <= MAX_VIEWPORT_DIMENSION &&
52
- Number.isInteger(viewport.height) &&
53
- viewport.height > 0 &&
54
- viewport.height <= MAX_VIEWPORT_DIMENSION) ||
55
- new Set(value.qa.viewports.map((viewport) => `${viewport.width}x${viewport.height}`)).size !== value.qa.viewports.length ||
56
- !validVisualDiffThreshold ||
57
- typeof value.qa.server?.command !== "string" ||
58
- !Array.isArray(value.qa.server.args) ||
59
- !value.qa.server.args.every((argument) => typeof argument === "string") ||
60
- typeof value.qa.server.readinessPath !== "string" ||
61
- !value.qa.server.readinessPath.startsWith("/") ||
62
- !Number.isInteger(value.qa.server.preferredPort) ||
63
- value.qa.server.preferredPort <= 0 ||
64
- value.qa.server.preferredPort > 65535 ||
65
- !Array.isArray(value.verifiers) ||
66
- !value.verifiers.every((verifier) => typeof verifier.name === "string" &&
67
- typeof verifier.command === "string" &&
68
- Array.isArray(verifier.args) &&
69
- verifier.args.every((argument) => typeof argument === "string")) ||
70
- (value.cce !== undefined &&
71
- (typeof value.cce.enabled !== "boolean" ||
72
- typeof value.cce.initialized !== "boolean" ||
73
- typeof value.cce.command !== "string")) ||
74
- (value.governor !== undefined &&
75
- (typeof value.governor.enabled !== "boolean" ||
76
- !["warn", "enforce"].includes(value.governor.mode) ||
77
- typeof value.governor.hooks?.codex !== "boolean" ||
78
- typeof value.governor.hooks?.claude !== "boolean")) ||
79
- (value.telemetry !== undefined &&
80
- typeof value.telemetry.enabled !== "boolean")) {
81
- throw new Error("Unsupported or invalid .mozole/project.json");
82
- }
83
- return value;
84
- }
85
- export async function findProjectRoot(start = process.cwd()) {
86
- let current = path.resolve(start);
87
- while (true) {
88
- try {
89
- const fileStat = await stat(path.join(current, ".mozole", "project.json"));
90
- if (fileStat.isFile())
91
- return current;
92
- }
93
- catch { }
94
- const parent = path.dirname(current);
95
- if (parent === current)
96
- throw new Error("No Mozole project found. Run `mozole new` or `mozole adopt`.");
97
- current = parent;
98
- }
99
- }
100
- //# sourceMappingURL=project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/config/project.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { type RunResult } from "../platform/process.js";
2
- export interface CceRuntime {
3
- command: string;
4
- prefix: string[];
5
- }
6
- export interface CceInstallPlan {
7
- command: string;
8
- args: string[];
9
- label: string;
10
- }
11
- export declare function cceUvxPrefix(): string[];
12
- export declare function cceToolInstallArgs(): string[];
13
- export declare function isBrokenUvTrampoline(output: string): boolean;
14
- export interface CandidateProbeResult {
15
- valid: boolean;
16
- brokenTrampoline: boolean;
17
- version?: string | undefined;
18
- error?: string | undefined;
19
- }
20
- export declare function probeCceCandidate(command: string, prefix?: string[], cwd?: string, signal?: AbortSignal): Promise<CandidateProbeResult>;
21
- export interface CceRuntimeInspection {
22
- runtime?: CceRuntime | undefined;
23
- healthy: boolean;
24
- brokenTrampoline: boolean;
25
- value?: string | undefined;
26
- source?: "direct" | "uvx_fallback" | "known_path" | "uninstalled" | undefined;
27
- }
28
- export declare function inspectCceRuntime(resolve?: (command: string) => Promise<string | undefined>, cwd?: string, signal?: AbortSignal): Promise<CceRuntimeInspection>;
29
- export declare function cceCommand(resolve?: (command: string) => Promise<string | undefined>, cwd?: string): Promise<CceRuntime | undefined>;
30
- export declare function cceInstallPlan(resolve?: (command: string) => Promise<string | undefined>, platform?: NodeJS.Platform, isRoot?: boolean): Promise<CceInstallPlan | undefined>;
31
- export declare function installCceRuntime(cwd: string, signal?: AbortSignal): Promise<CceRuntime>;
32
- export declare function requireCceRuntime(root: string, signal?: AbortSignal, resolve?: (command: string) => Promise<string | undefined>): Promise<CceRuntime>;
33
- export declare function initializeCce(root: string, signal?: AbortSignal, runtime?: CceRuntime): Promise<RunResult | undefined>;
34
- export interface CceRetrievalProbe {
35
- healthy: boolean;
36
- value?: string | undefined;
37
- }
38
- export declare function probeCceRetrieval(root: string, runtime?: CceRuntime, timeoutMs?: number, signal?: AbortSignal): Promise<CceRetrievalProbe>;
39
- //# sourceMappingURL=cce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cce.d.ts","sourceRoot":"","sources":["../../src/context/cce.ts"],"names":[],"mappings":"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"}