@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,205 +1,40 @@
1
- import { cp, lstat, mkdtemp, rename, rm } from "node:fs/promises";
2
1
  import path from "node:path";
3
- import { cceCommand, initializeCce } from "../context/cce.js";
4
- import { configureAntigravityMcp } from "../integrations/antigravity.js";
5
- import { npmExecutable } from "../platform/executable.js";
6
- import { run } from "../platform/process.js";
7
- import { TaskProgress } from "../progress.js";
8
- import { projectTemplates } from "../scaffold/templates.js";
9
- import { writeFiles } from "../scaffold/write.js";
10
- import { findTemplateRoot, listTemplateProjects, registerTemplateProject, } from "../template/workspace.js";
11
- export async function newCommand(name, cwd, output = console, options = {}) {
12
- if (!name ||
13
- name === "." ||
14
- path.isAbsolute(name) ||
15
- name.includes("/") ||
16
- name.includes("\\") ||
17
- !/^[a-z0-9][a-z0-9._-]*$/.test(name)) {
18
- output.error("Usage: mozole new <name>\nName must be one safe directory segment.");
19
- return 2;
20
- }
21
- const target = path.resolve(cwd, name);
22
- try {
23
- await lstat(target);
24
- output.error(`Cannot create ${target}: path already exists.`);
25
- return 2;
26
- }
27
- catch { }
28
- const templateRoot = await findTemplateRoot(cwd);
29
- if (templateRoot) {
30
- const enclosingProject = (await listTemplateProjects(templateRoot)).find((project) => {
31
- const relative = path.relative(project.root, cwd);
32
- return (relative === "" ||
33
- (!path.isAbsolute(relative) &&
34
- !relative.split(path.sep).includes("..")));
35
- });
36
- if (enclosingProject) {
37
- output.error(`Cannot create a project inside ${enclosingProject.relativePath}. Run \`mozole new\` from the template root or a category folder.`);
38
- return 2;
39
- }
40
- }
41
- const shouldInstallCce = Boolean((options.cceInstall || options.installCce) && !options.scaffold);
42
- const isScaffold = !shouldInstallCce;
43
- const totalSteps = (shouldInstallCce ? 7 : 6) + (templateRoot ? 1 : 0);
44
- const progress = new TaskProgress({
45
- total: totalSteps,
46
- title: "New Project",
47
- verbose: options.verbose,
48
- output,
49
- onUpdate: options.onProgress,
50
- });
51
- const staging = await mkdtemp(path.join(cwd, `.mozole-${name}-`));
52
- const controller = new AbortController();
53
- const abort = () => controller.abort();
54
- process.once("SIGINT", abort);
55
- process.once("SIGTERM", abort);
56
- let moved = false;
57
- try {
58
- progress.step("Scaffolding project template files and configs");
59
- progress.logVerbose(`Writing template files to staging: ${staging}`);
60
- await writeFiles(staging, projectTemplates(name, {
61
- scaffold: isScaffold,
62
- backend: options.backend,
63
- sharedDependencies: Boolean(templateRoot),
64
- }));
65
- if (process.env.MOZOLE_SKIP_INSTALL !== "1") {
66
- if (templateRoot) {
67
- progress.step("Using shared template dependencies");
68
- }
69
- else {
70
- progress.step("Installing package dependencies (npm install)");
71
- progress.logVerbose("Running npm install");
72
- const installed = await run(npmExecutable(), ["install", "--no-fund", "--no-audit"], {
73
- cwd: staging,
74
- timeoutMs: 600_000,
75
- signal: controller.signal,
76
- logFile: path.join(staging, ".mozole", "logs", "npm-install.log"),
77
- });
78
- if (installed.exitCode !== 0)
79
- throw new Error(`npm install failed. See .mozole/logs/npm-install.log`);
80
- }
81
- progress.step("Formatting generated project with Biome");
82
- progress.logVerbose("Running biome format --write .");
83
- const formatted = await run(npmExecutable(), [
84
- "exec",
85
- "--",
86
- "biome",
87
- "format",
88
- "--write",
89
- templateRoot ? staging : ".",
90
- ], {
91
- cwd: templateRoot ?? staging,
92
- timeoutMs: 600_000,
93
- signal: controller.signal,
94
- logFile: path.join(staging, ".mozole", "logs", "biome-format.log"),
95
- });
96
- if (formatted.exitCode !== 0)
97
- throw new Error("Biome formatting failed. See .mozole/logs/biome-format.log");
98
- if (templateRoot) {
99
- progress.step("Using shared Playwright browser runtime");
100
- }
101
- else if (process.env.MOZOLE_SKIP_BROWSER !== "1") {
102
- progress.step("Provisioning Playwright Chromium browser");
103
- progress.logVerbose("Running playwright install chromium");
104
- const browser = await run(npmExecutable(), ["exec", "--", "playwright", "install", "chromium"], {
105
- cwd: staging,
106
- timeoutMs: 600_000,
107
- signal: controller.signal,
108
- logFile: path.join(staging, ".mozole", "logs", "playwright-install.log"),
109
- });
110
- if (browser.exitCode !== 0)
111
- throw new Error("Chromium installation failed. See .mozole/logs/playwright-install.log");
112
- }
113
- }
114
- else {
115
- progress.step("Skipping dependency installation (MOZOLE_SKIP_INSTALL)");
116
- progress.step("Skipping formatting (MOZOLE_SKIP_INSTALL)");
117
- }
118
- progress.step("Moving staging workspace to target directory");
119
- await rename(staging, target);
120
- moved = true;
121
- if (templateRoot) {
122
- progress.step("Registering project in shared npm workspace");
123
- await registerTemplateProject(templateRoot, target);
124
- if (process.env.MOZOLE_SKIP_INSTALL !== "1") {
125
- const linked = await run(npmExecutable(), ["install", "--no-fund", "--no-audit"], {
126
- cwd: templateRoot,
127
- timeoutMs: 600_000,
128
- signal: controller.signal,
129
- logFile: path.join(templateRoot, ".mozole", "logs", "npm-install.log"),
130
- });
131
- if (linked.exitCode !== 0)
132
- throw new Error("Shared workspace registration failed. See ../.mozole/logs/npm-install.log");
133
- }
134
- }
135
- let cceMessage;
136
- if (shouldInstallCce) {
137
- const cceRuntime = await cceCommand();
138
- if (!cceRuntime)
139
- cceMessage =
140
- "CCE runtime unavailable. Run mozole cce install, then mozole adopt . --cce-install.";
141
- if (process.env.MOZOLE_SKIP_CCE !== "1") {
142
- progress.step("Initializing CCE vector index & embedding model");
143
- progress.logVerbose("Running CCE init");
144
- const cce = await initializeCce(target, controller.signal, cceRuntime);
145
- if (controller.signal.aborted)
146
- throw new Error("Creation cancelled.");
147
- if (cce?.exitCode === 0)
148
- cceMessage = "CCE indexed and configured.";
149
- else if (cce)
150
- cceMessage =
151
- "CCE setup needs attention; see .mozole/logs/cce-init.log.";
152
- }
153
- else {
154
- progress.step("Skipping CCE initialization (MOZOLE_SKIP_CCE)");
155
- }
156
- progress.step("Configuring Antigravity MCP and final workspace");
157
- const cceLauncher = cceRuntime?.prefix.length
158
- ? "uvx"
159
- : "cce";
160
- await configureAntigravityMcp(target, cceLauncher, cceRuntime?.command);
2
+ import pc from "picocolors";
3
+ import { scaffoldNewProject } from "../scaffold/index.js";
4
+ import { exists, findPrototypeRoot } from "../utils/fs.js";
5
+ export async function createNewProject(options) {
6
+ const cwd = options.cwd ?? process.cwd();
7
+ const name = options.name.trim();
8
+ let targetDir = options.targetDir;
9
+ if (!targetDir) {
10
+ const protoRoot = await findPrototypeRoot(cwd);
11
+ if (protoRoot) {
12
+ targetDir = path.join(protoRoot, "projects", name);
161
13
  }
162
14
  else {
163
- progress.step("Finalizing scaffold workspace");
164
- }
165
- progress.done(`Created ${name}`);
166
- let nextSteps = `Next:\n cd ${name}\n npm run dev`;
167
- if (options.backend) {
168
- nextSteps += `\n # In a separate terminal (PHP 8.0+):\n npm run dev:api\n # Production bundle:\n npm run build:deploy`;
169
- }
170
- nextSteps += `\n npm run verify`;
171
- if (templateRoot) {
172
- const backToTemplate = path.relative(target, templateRoot) || ".";
173
- nextSteps += `\n # Or manage every project from the template root:\n cd ${backToTemplate}\n mozole ui`;
15
+ targetDir = path.join(cwd, name);
174
16
  }
175
- const summary = cceMessage
176
- ? `\nCreated ${name}\n${cceMessage}\n\n${nextSteps}`
177
- : `\nCreated ${name} (${isScaffold ? "scaffold mode" : "optimized mode"}${templateRoot ? ", shared template dependencies" : ""})\n\n${nextSteps}`;
178
- output.log(summary);
179
- return 0;
180
17
  }
181
- catch (error) {
182
- progress.done();
183
- let retainedLogs = "";
184
- if (!moved) {
185
- const logs = await mkdtemp(path.join(cwd, `.mozole-${name}-failure-`));
186
- try {
187
- await cp(path.join(staging, ".mozole", "logs"), path.join(logs, "logs"), { recursive: true });
188
- retainedLogs = `\nRetained logs: ${path.join(logs, "logs")}`;
189
- }
190
- catch (logError) {
191
- await rm(logs, { recursive: true, force: true });
192
- if (logError.code !== "ENOENT")
193
- retainedLogs = `\nCould not retain logs: ${String(logError)}`;
194
- }
195
- await rm(staging, { recursive: true, force: true });
196
- }
197
- output.error(`CREATE FAIL\n\n${error instanceof Error ? error.message : String(error)}${retainedLogs}\nCleanup: ${moved ? `project remains at ${target}` : "incomplete staging directory removed"}`);
198
- return controller.signal.aborted ? 130 : 1;
199
- }
200
- finally {
201
- process.removeListener("SIGINT", abort);
202
- process.removeListener("SIGTERM", abort);
18
+ if (await exists(targetDir)) {
19
+ throw new Error(`Target directory already exists: ${targetDir}`);
203
20
  }
21
+ console.log(pc.cyan(`\n⚔ Scaffolding Mozole project: ${pc.bold(name)}`));
22
+ console.log(` Profile: ${options.flagship ? pc.magenta("Flagship Creative (Wouter + Lenis + Canvas)") : pc.blue("Standard Production (React Router 7 + SSG)")}`);
23
+ console.log(` Backend: ${pc.yellow(options.backend ?? "php (Pure PHP 8.1+ Zero-Dependency)")}`);
24
+ console.log(` Destination: ${targetDir}\n`);
25
+ await scaffoldNewProject({
26
+ targetDir,
27
+ name,
28
+ flagship: options.flagship,
29
+ backend: options.backend,
30
+ initGit: options.initGit ?? true,
31
+ });
32
+ console.log(pc.green(`āœ“ Project successfully generated at ${targetDir}`));
33
+ console.log("\nNext steps:");
34
+ console.log(` 1. ${pc.cyan(`cd ${path.relative(cwd, targetDir) || "."}`)}`);
35
+ console.log(` 2. ${pc.cyan("npm install")}`);
36
+ console.log(` 3. ${pc.cyan("mozole verify")}`);
37
+ console.log(` 4. ${pc.cyan("npm run dev")}\n`);
38
+ return targetDir;
204
39
  }
205
40
  //# sourceMappingURL=new.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAW3D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA0B;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAEjC,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAClC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CACT,cAAc,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,EAAE,CACrJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,qCAAqC,CAAC,EAAE,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,IAAI,CAAC,CAAC;IAE7C,MAAM,kBAAkB,CAAC;QACvB,SAAS;QACT,IAAI;QACJ,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;KACjC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAEhD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface PhaseCommandOptions {
2
+ action?: "status" | "next" | "reopen";
3
+ phaseId?: string;
4
+ cwd?: string;
5
+ }
6
+ export declare function getProjectPhaseStatus(projectRoot: string): Promise<{
7
+ currentPhase: string;
8
+ content: string;
9
+ }>;
10
+ export declare function phaseCommand(options?: PhaseCommandOptions): Promise<void>;
11
+ //# sourceMappingURL=phase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase.d.ts","sourceRoot":"","sources":["../../src/commands/phase.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBpD;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8GnF"}
@@ -0,0 +1,106 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ import { PHASES, generatePhasesStatusMd } from "../scaffold/phases.js";
5
+ import { atomicWrite, exists, findProjectRoot } from "../utils/fs.js";
6
+ import { formatPhaseCommitMessage, isGitRepo, stageAndCommit } from "../utils/git.js";
7
+ export async function getProjectPhaseStatus(projectRoot) {
8
+ const statusPath = path.join(projectRoot, "docs", "phases", "status.md");
9
+ if (!(await exists(statusPath))) {
10
+ throw new Error(`Phase status file not found: ${statusPath}. Run 'mozole adopt' or 'mozole new'.`);
11
+ }
12
+ const content = await fs.readFile(statusPath, "utf8");
13
+ const match = content.match(/^\*\*Current Phase:\*\*\s*Phase\s*([^\r\n]+)$/im);
14
+ const phaseRaw = match?.[1]?.trim() ?? "";
15
+ if (!match || !PHASES.some((phase) => phase.id === phaseRaw)) {
16
+ throw new Error(`Invalid current phase in ${statusPath}; expected Phase 00 through 10.`);
17
+ }
18
+ const currentPhase = phaseRaw;
19
+ return { currentPhase, content };
20
+ }
21
+ export async function phaseCommand(options = {}) {
22
+ const cwd = options.cwd ?? process.cwd();
23
+ const projectRoot = (await findProjectRoot(cwd)) ?? cwd;
24
+ const { currentPhase, content } = await getProjectPhaseStatus(projectRoot);
25
+ const action = options.action ?? "status";
26
+ if (!["status", "next", "reopen"].includes(action)) {
27
+ throw new Error(`Invalid phase action '${action}'. Expected status, next, or reopen.`);
28
+ }
29
+ const persistPhase = async (phase, message) => {
30
+ const statusPath = path.join(projectRoot, "docs", "phases", "status.md");
31
+ await atomicWrite(statusPath, generatePhasesStatusMd(phase));
32
+ if (await isGitRepo(projectRoot)) {
33
+ try {
34
+ const result = await stageAndCommit(projectRoot, message);
35
+ if (!result.success)
36
+ throw new Error(result.output);
37
+ }
38
+ catch (error) {
39
+ await atomicWrite(statusPath, content);
40
+ throw new Error(`Phase change not committed; status restored. ${String(error)}`);
41
+ }
42
+ console.log(pc.green(` āœ“ Git commit created: ${message}`));
43
+ }
44
+ };
45
+ if (action === "status") {
46
+ console.log(pc.cyan(`\nšŸ“‹ Mozole 10-Step Development Phases: ${pc.bold(`Phase ${currentPhase}`)}`));
47
+ console.log(pc.gray("═".repeat(65)));
48
+ for (const p of PHASES) {
49
+ const num = Number(p.id);
50
+ const currentNum = Number(currentPhase);
51
+ let badge = pc.gray("[PENDING]");
52
+ if (num < currentNum)
53
+ badge = pc.green("[COMPLETED]");
54
+ else if (num === currentNum)
55
+ badge = pc.yellow(pc.bold("[IN PROGRESS]"));
56
+ console.log(`\n Phase ${p.id}: ${pc.bold(p.name)} ${badge}`);
57
+ console.log(` ${pc.dim(p.description)}`);
58
+ for (const item of p.checklist) {
59
+ const mark = num < currentNum ? pc.green("āœ“") : num === currentNum ? pc.yellow("ā—‹") : pc.gray("•");
60
+ console.log(` ${mark} ${item}`);
61
+ }
62
+ }
63
+ console.log(pc.gray(`\n${"═".repeat(65)}`));
64
+ console.log(`Run ${pc.cyan("mozole phase next")} when current phase criteria are fulfilled.\n`);
65
+ return;
66
+ }
67
+ if (action === "next") {
68
+ const currentNum = Number(currentPhase);
69
+ if (currentNum >= 10) {
70
+ console.log(pc.green("\nšŸŽ‰ All 10 phases completed! Project is production launched."));
71
+ console.log("Routine maintenance can continue here. Reopen a phase only for architectural changes.\n");
72
+ return;
73
+ }
74
+ const currentDef = PHASES.find((p) => p.id === currentPhase);
75
+ const nextNum = currentNum + 1;
76
+ const nextPhase = String(nextNum).padStart(2, "0");
77
+ const nextDef = PHASES.find((p) => p.id === nextPhase);
78
+ console.log(pc.cyan(`\nAdvancing from Phase ${currentPhase} to Phase ${nextPhase}...`));
79
+ await persistPhase(nextPhase, formatPhaseCommitMessage(currentPhase, `complete ${currentDef?.name ?? "phase"} and advance to phase ${nextPhase}`));
80
+ console.log(pc.green(`\nāœ“ Advanced to Phase ${nextPhase}: ${nextDef?.name}`));
81
+ console.log(` ${nextDef?.description}`);
82
+ console.log(pc.cyan("\nUpcoming Checklist:"));
83
+ for (const item of nextDef?.checklist ?? []) {
84
+ console.log(` ā—‹ ${item}`);
85
+ }
86
+ console.log();
87
+ return;
88
+ }
89
+ if (action === "reopen") {
90
+ const targetPhaseId = options.phaseId ? String(options.phaseId).padStart(2, "0") : undefined;
91
+ if (!targetPhaseId) {
92
+ throw new Error("Specify a phase ID to reopen, e.g. 'mozole phase reopen 02'");
93
+ }
94
+ const targetDef = PHASES.find((p) => p.id === targetPhaseId);
95
+ if (!targetDef) {
96
+ throw new Error(`Invalid phase ID '${targetPhaseId}'. Valid phases are 00 through 10.`);
97
+ }
98
+ if (Number(targetPhaseId) >= Number(currentPhase)) {
99
+ throw new Error("Only a completed phase can be reopened. Use 'mozole phase next' to advance.");
100
+ }
101
+ console.log(pc.yellow(`\nReopening Phase ${targetPhaseId} for post-launch maintenance...`));
102
+ await persistPhase(targetPhaseId, `chore(phase-${targetPhaseId}): reopen phase for maintenance`);
103
+ console.log(pc.green(`āœ“ Reopened Phase ${targetPhaseId}: ${targetDef.name}\n`));
104
+ }
105
+ }
106
+ //# sourceMappingURL=phase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase.js","sourceRoot":"","sources":["../../src/commands/phase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface PrototypeInitOptions {
2
+ cwd?: string;
3
+ name?: string;
4
+ }
5
+ export declare function prototypeInit(options?: PrototypeInitOptions): Promise<void>;
6
+ //# sourceMappingURL=prototype.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prototype.d.ts","sourceRoot":"","sources":["../../src/commands/prototype.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BrF"}
@@ -0,0 +1,28 @@
1
+ import path from "node:path";
2
+ import pc from "picocolors";
3
+ import { scaffoldAgentPolicies } from "../scaffold/agents.js";
4
+ import { atomicWrite, exists } from "../utils/fs.js";
5
+ import { initGit } from "../utils/git.js";
6
+ export async function prototypeInit(options = {}) {
7
+ const cwd = options.cwd ?? process.cwd();
8
+ const name = options.name ?? path.basename(cwd);
9
+ const configPath = path.join(cwd, "mozole.config.json");
10
+ if (await exists(configPath)) {
11
+ console.log(pc.yellow(`Mozole prototype repository already initialized at ${cwd}`));
12
+ return;
13
+ }
14
+ const config = {
15
+ version: "2.0.0",
16
+ name,
17
+ projectsDir: "projects",
18
+ defaultBackend: "php",
19
+ };
20
+ await atomicWrite(configPath, JSON.stringify(config, null, 2));
21
+ await atomicWrite(path.join(cwd, "projects", ".gitkeep"), "");
22
+ await atomicWrite(path.join(cwd, "shared", ".gitkeep"), "");
23
+ await scaffoldAgentPolicies(cwd, name);
24
+ await initGit(cwd, "feat: initialize mozole prototype ecosystem");
25
+ console.log(pc.green(`āœ“ Initialized Mozole Prototype workspace in ${cwd}`));
26
+ console.log(` Run ${pc.cyan("mozole new <client-name>")} to generate a new project.`);
27
+ }
28
+ //# sourceMappingURL=prototype.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prototype.js","sourceRoot":"","sources":["../../src/commands/prototype.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAO1C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEhD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACxD,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,sDAAsD,GAAG,EAAE,CAAC,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,OAAO;QAChB,IAAI;QACJ,WAAW,EAAE,UAAU;QACvB,cAAc,EAAE,KAAK;KACtB,CAAC;IAEF,MAAM,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/D,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAE5D,MAAM,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,MAAM,OAAO,CAAC,GAAG,EAAE,6CAA6C,CAAC,CAAC;IAElE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,+CAA+C,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,6BAA6B,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface RepomapCommandOptions {
2
+ action?: "sync" | "check";
3
+ cwd?: string;
4
+ }
5
+ export declare function repomapCommand(options?: RepomapCommandOptions): Promise<void>;
6
+ //# sourceMappingURL=repomap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repomap.d.ts","sourceRoot":"","sources":["../../src/commands/repomap.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEvF"}
@@ -0,0 +1,71 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import pc from "picocolors";
4
+ import { generateRepomapComponents, generateRepomapRoutes, generateRepomapTokens, } from "../scaffold/repomap.js";
5
+ import { atomicWrite, exists, findProjectRoot } from "../utils/fs.js";
6
+ export async function repomapCommand(options = {}) {
7
+ const cwd = options.cwd ?? process.cwd();
8
+ const projectRoot = (await findProjectRoot(cwd)) ?? cwd;
9
+ const action = options.action ?? "sync";
10
+ if (action !== "sync" && action !== "check") {
11
+ throw new Error(`Invalid repomap action '${action}'. Expected sync or check.`);
12
+ }
13
+ const repomapDir = path.join(projectRoot, "docs", "repomap");
14
+ if (!(await exists(repomapDir))) {
15
+ throw new Error(`Repomap directory not found: ${repomapDir}. Run 'mozole adopt' to initialize.`);
16
+ }
17
+ const requiredFiles = ["architecture.md", "components.md", "routes.md", "tokens.md"];
18
+ if (action === "check") {
19
+ console.log(pc.cyan(`\nšŸ” Checking docs/repomap architectural index in ${projectRoot}...`));
20
+ let allOk = true;
21
+ for (const file of requiredFiles) {
22
+ const filePath = path.join(repomapDir, file);
23
+ if (!(await exists(filePath))) {
24
+ console.log(pc.red(` āœ— Missing: docs/repomap/${file}`));
25
+ allOk = false;
26
+ }
27
+ else {
28
+ const stat = await fs.stat(filePath);
29
+ if (stat.size === 0) {
30
+ console.log(pc.yellow(` ! Empty: docs/repomap/${file}`));
31
+ allOk = false;
32
+ }
33
+ else {
34
+ console.log(pc.green(` āœ“ Found: docs/repomap/${file} (${stat.size} bytes)`));
35
+ }
36
+ }
37
+ }
38
+ if (!allOk) {
39
+ throw new Error("Repomap index validation failed. Run 'mozole repomap sync' to restore.");
40
+ }
41
+ console.log(pc.green("\nāœ“ Repomap architectural index is complete and healthy.\n"));
42
+ return;
43
+ }
44
+ if (action === "sync") {
45
+ console.log(pc.cyan(`\nšŸ”„ Syncing docs/repomap architectural index in ${projectRoot}...`));
46
+ // Components
47
+ const compPath = path.join(repomapDir, "components.md");
48
+ if (!(await exists(compPath))) {
49
+ await atomicWrite(compPath, generateRepomapComponents());
50
+ console.log(pc.green(" āœ“ Generated docs/repomap/components.md"));
51
+ }
52
+ else {
53
+ console.log(pc.gray(" • docs/repomap/components.md up to date"));
54
+ }
55
+ // Routes
56
+ const routesPath = path.join(repomapDir, "routes.md");
57
+ if (!(await exists(routesPath))) {
58
+ await atomicWrite(routesPath, generateRepomapRoutes());
59
+ console.log(pc.green(" āœ“ Generated docs/repomap/routes.md"));
60
+ }
61
+ else {
62
+ console.log(pc.gray(" • docs/repomap/routes.md up to date"));
63
+ }
64
+ // Tokens
65
+ const tokensPath = path.join(repomapDir, "tokens.md");
66
+ await atomicWrite(tokensPath, generateRepomapTokens());
67
+ console.log(pc.green(" āœ“ Synchronized docs/repomap/tokens.md"));
68
+ console.log(pc.green("\nāœ“ Repomap index synchronized successfully.\n"));
69
+ }
70
+ }
71
+ //# sourceMappingURL=repomap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repomap.js","sourceRoot":"","sources":["../../src/commands/repomap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface TestCommandOptions {
2
+ cwd?: string;
3
+ type?: "contract" | "a11y" | "probe" | "all";
4
+ }
5
+ export declare function testCommand(options?: TestCommandOptions): Promise<void>;
6
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;CAC9C;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8HjF"}