@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,193 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import { createWriteStream } from "node:fs";
3
- import { mkdir, readdir, rm, rmdir } from "node:fs/promises";
4
- import net from "node:net";
5
- import path from "node:path";
6
- import { prepareSpawn, terminateProcess } from "../platform/process.js";
7
- import { listTemplateProjects } from "./workspace.js";
8
- const MAX_SERVER_LOG_BYTES = 10 * 1024 * 1024;
9
- async function portAvailable(port) {
10
- return await new Promise((resolve) => {
11
- const server = net.createServer();
12
- server.unref();
13
- server.once("error", () => resolve(false));
14
- server.listen(port, "127.0.0.1", () => server.close(() => resolve(true)));
15
- });
16
- }
17
- export async function availablePort(preferred, reserved = new Set(), probe = portAvailable) {
18
- for (let port = preferred; port <= 65535; port += 1) {
19
- if (!reserved.has(port) && (await probe(port)))
20
- return port;
21
- }
22
- throw new Error(`No available port at or above ${preferred}.`);
23
- }
24
- async function waitForReady(server, child, timeoutMs = 20_000) {
25
- const url = `http://127.0.0.1:${server.port}${server.readinessPath}`;
26
- const deadline = Date.now() + timeoutMs;
27
- while (Date.now() < deadline) {
28
- if (child.exitCode !== null) {
29
- throw new Error(`Development server exited with code ${child.exitCode}.`);
30
- }
31
- try {
32
- const response = await fetch(url, { signal: AbortSignal.timeout(750) });
33
- if (response.ok)
34
- return;
35
- }
36
- catch { }
37
- await new Promise((resolve) => setTimeout(resolve, 100));
38
- }
39
- throw new Error(`Development server was not ready within ${timeoutMs}ms.`);
40
- }
41
- export class TemplateServerManager {
42
- root;
43
- #servers = new Map();
44
- #processes = new Map();
45
- constructor(root) {
46
- this.root = root;
47
- }
48
- async refresh() {
49
- const projects = await listTemplateProjects(this.root);
50
- const discovered = new Set(projects.map((project) => project.relativePath));
51
- for (const project of projects) {
52
- const previous = this.#servers.get(project.relativePath);
53
- this.#servers.set(project.relativePath, {
54
- ...project,
55
- status: previous?.status ?? "stopped",
56
- port: previous?.port ?? project.preferredPort,
57
- ...(previous?.pid ? { pid: previous.pid } : {}),
58
- ...(previous?.error ? { error: previous.error } : {}),
59
- ...(previous?.logFile ? { logFile: previous.logFile } : {}),
60
- });
61
- }
62
- for (const key of this.#servers.keys()) {
63
- if (!discovered.has(key) && !this.#processes.has(key))
64
- this.#servers.delete(key);
65
- }
66
- return this.list();
67
- }
68
- list() {
69
- return [...this.#servers.values()].sort((left, right) => left.relativePath.localeCompare(right.relativePath));
70
- }
71
- async start(relativePath) {
72
- const server = this.#servers.get(relativePath);
73
- if (!server)
74
- throw new Error(`Unknown project: ${relativePath}`);
75
- if (this.#processes.has(relativePath))
76
- return server;
77
- const reserved = new Set(this.list()
78
- .filter((candidate) => candidate.status !== "stopped")
79
- .map((candidate) => candidate.port));
80
- server.port = await availablePort(server.preferredPort, reserved);
81
- server.status = "starting";
82
- delete server.error;
83
- const args = [...server.args, "--port", String(server.port)];
84
- const prepared = prepareSpawn(server.command, args);
85
- const logDirectory = path.join(this.root, ".mozole", "logs", "servers");
86
- await mkdir(logDirectory, { recursive: true });
87
- const safeName = server.relativePath.replace(/[^a-z0-9._-]/gi, "-");
88
- const logFile = path.join(logDirectory, `${safeName}.log`);
89
- const log = createWriteStream(logFile, { flags: "w" });
90
- let logBytes = 0;
91
- let logTruncated = false;
92
- const writeLog = (chunk) => {
93
- if (logTruncated)
94
- return;
95
- const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
96
- const remaining = MAX_SERVER_LOG_BYTES - logBytes;
97
- if (buffer.length <= remaining) {
98
- log.write(buffer);
99
- logBytes += buffer.length;
100
- return;
101
- }
102
- if (remaining > 0)
103
- log.write(buffer.subarray(0, remaining));
104
- log.write("\n[... server log truncated at 10 MiB ...]\n");
105
- logBytes = MAX_SERVER_LOG_BYTES;
106
- logTruncated = true;
107
- };
108
- writeLog(`[${new Date().toISOString()}] ${server.command} ${args.join(" ")}\n`);
109
- const child = spawn(prepared.command, prepared.args, {
110
- cwd: server.root,
111
- env: { ...process.env, PORT: String(server.port) },
112
- shell: false,
113
- windowsHide: true,
114
- windowsVerbatimArguments: prepared.windowsVerbatimArguments,
115
- detached: process.platform !== "win32",
116
- stdio: ["ignore", "pipe", "pipe"],
117
- });
118
- server.pid = child.pid;
119
- server.logFile = logFile;
120
- child.stdout?.on("data", writeLog);
121
- child.stderr?.on("data", writeLog);
122
- this.#processes.set(relativePath, { child, log });
123
- child.once("close", (code) => {
124
- this.#processes.delete(relativePath);
125
- log.end();
126
- delete server.pid;
127
- if (server.status !== "stopped") {
128
- server.status = code === 0 ? "stopped" : "failed";
129
- if (code !== 0)
130
- server.error = `Exited with code ${code ?? 1}`;
131
- }
132
- });
133
- child.once("error", (error) => {
134
- server.status = "failed";
135
- server.error = error.message;
136
- });
137
- try {
138
- await waitForReady(server, child);
139
- server.status = "running";
140
- }
141
- catch (error) {
142
- server.status = "failed";
143
- server.error = error instanceof Error ? error.message : String(error);
144
- terminateProcess(child.pid);
145
- }
146
- return server;
147
- }
148
- async stop(relativePath) {
149
- const server = this.#servers.get(relativePath);
150
- const running = this.#processes.get(relativePath);
151
- if (!server || !running) {
152
- if (server)
153
- server.status = "stopped";
154
- return;
155
- }
156
- server.status = "stopped";
157
- const closed = new Promise((resolve) => running.child.once("close", () => resolve()));
158
- terminateProcess(running.child.pid);
159
- await Promise.race([
160
- closed,
161
- new Promise((resolve) => setTimeout(resolve, 2_000)),
162
- ]);
163
- if (running.child.exitCode === null)
164
- terminateProcess(running.child.pid, true);
165
- this.#processes.delete(relativePath);
166
- running.log.end();
167
- delete server.pid;
168
- const localModules = path.join(server.root, "node_modules");
169
- try {
170
- for (const entry of await readdir(localModules))
171
- if (entry === ".vite" || entry.startsWith(".vite-"))
172
- await rm(path.join(localModules, entry), {
173
- recursive: true,
174
- force: true,
175
- });
176
- }
177
- catch (error) {
178
- if (error.code !== "ENOENT")
179
- throw error;
180
- }
181
- try {
182
- await rmdir(localModules);
183
- }
184
- catch (error) {
185
- if (!["ENOENT", "ENOTEMPTY"].includes(error.code ?? ""))
186
- throw error;
187
- }
188
- }
189
- async stopAll() {
190
- await Promise.all([...this.#processes.keys()].map((key) => this.stop(key)));
191
- }
192
- }
193
- //# sourceMappingURL=servers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"servers.js","sourceRoot":"","sources":["../../src/template/servers.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- export interface TemplateConfig {
2
- schemaVersion: 1;
3
- kind: "mozole-template";
4
- name: string;
5
- projects: "managed";
6
- sharedDependencies: true;
7
- }
8
- export interface TemplateProject {
9
- name: string;
10
- root: string;
11
- relativePath: string;
12
- preferredPort: number;
13
- readinessPath: string;
14
- command: string;
15
- args: string[];
16
- }
17
- export declare function readTemplateConfig(root: string): Promise<TemplateConfig>;
18
- export declare function isTemplateRoot(root: string): Promise<boolean>;
19
- export declare function findTemplateRoot(start?: string): Promise<string | undefined>;
20
- export declare function initializeTemplateRoot(root: string): Promise<void>;
21
- export declare function listTemplateProjects(root: string): Promise<TemplateProject[]>;
22
- export declare function registerTemplateProject(root: string, projectRoot: string): Promise<void>;
23
- //# sourceMappingURL=workspace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/template/workspace.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,CAAC,CAAC;IACjB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,kBAAkB,EAAE,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA2DD,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAczB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,gBAAgB,CACpC,KAAK,SAAgB,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcxE;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,eAAe,EAAE,CAAC,CAiC5B;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -1,152 +0,0 @@
1
- import { lstat, mkdir, readdir, readFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { readConfig } from "../config/project.js";
4
- import { writeFiles } from "../scaffold/write.js";
5
- import { TOOLCHAIN } from "../version.js";
6
- const marker = path.join(".mozole", "template.json");
7
- function templateFiles(name) {
8
- const cliSpec = process.env.MOZOLE_CLI_SPEC ?? TOOLCHAIN.mozoleCli;
9
- const packageName = name
10
- .toLowerCase()
11
- .replace(/[^a-z0-9._-]+/g, "-")
12
- .replace(/^[^a-z0-9]+|[^a-z0-9]+$/g, "") || "mozole-template";
13
- const config = {
14
- schemaVersion: 1,
15
- kind: "mozole-template",
16
- name,
17
- projects: "managed",
18
- sharedDependencies: true,
19
- };
20
- return {
21
- [marker]: `${JSON.stringify(config, null, 2)}\n`,
22
- "package.json": `${JSON.stringify({
23
- name: packageName,
24
- private: true,
25
- engines: { node: TOOLCHAIN.node },
26
- workspaces: [],
27
- dependencies: {
28
- isbot: TOOLCHAIN.isbot,
29
- react: TOOLCHAIN.react,
30
- "react-dom": TOOLCHAIN.reactDom,
31
- "react-router": TOOLCHAIN.reactRouter,
32
- },
33
- devDependencies: {
34
- "@biomejs/biome": TOOLCHAIN.biome,
35
- "@mozole/cli": cliSpec,
36
- "@react-router/dev": TOOLCHAIN.reactRouter,
37
- "@tailwindcss/vite": TOOLCHAIN.tailwindVite,
38
- "@testing-library/jest-dom": TOOLCHAIN.testingLibraryJestDom,
39
- "@testing-library/react": TOOLCHAIN.testingLibraryReact,
40
- "@testing-library/user-event": TOOLCHAIN.testingLibraryUserEvent,
41
- "@types/node": TOOLCHAIN.typesNode,
42
- "@types/react": TOOLCHAIN.typesReact,
43
- "@types/react-dom": TOOLCHAIN.typesReactDom,
44
- "@vitejs/plugin-react": TOOLCHAIN.viteReact,
45
- jsdom: TOOLCHAIN.jsdom,
46
- playwright: TOOLCHAIN.playwright,
47
- tailwindcss: TOOLCHAIN.tailwindcss,
48
- typescript: TOOLCHAIN.typescript,
49
- vite: TOOLCHAIN.vite,
50
- vitest: TOOLCHAIN.vitest,
51
- },
52
- }, null, 2)}\n`,
53
- ".gitignore": "node_modules/\n.mozole/logs/\n*.log\n.DS_Store\n",
54
- };
55
- }
56
- export async function readTemplateConfig(root) {
57
- const value = JSON.parse(await readFile(path.join(root, marker), "utf8"));
58
- if (value.schemaVersion !== 1 ||
59
- value.kind !== "mozole-template" ||
60
- typeof value.name !== "string" ||
61
- value.projects !== "managed" ||
62
- value.sharedDependencies !== true) {
63
- throw new Error("Unsupported or invalid .mozole/template.json");
64
- }
65
- return value;
66
- }
67
- export async function isTemplateRoot(root) {
68
- try {
69
- await readTemplateConfig(root);
70
- return true;
71
- }
72
- catch {
73
- return false;
74
- }
75
- }
76
- export async function findTemplateRoot(start = process.cwd()) {
77
- let current = path.resolve(start);
78
- while (true) {
79
- if (await isTemplateRoot(current))
80
- return current;
81
- const parent = path.dirname(current);
82
- if (parent === current)
83
- return undefined;
84
- current = parent;
85
- }
86
- }
87
- export async function initializeTemplateRoot(root) {
88
- const target = path.resolve(root);
89
- await mkdir(target, { recursive: true });
90
- for (const protectedFile of [marker, "package.json"]) {
91
- try {
92
- await lstat(path.join(target, protectedFile));
93
- throw new Error(`Cannot initialize ${target}: ${protectedFile} already exists.`);
94
- }
95
- catch (error) {
96
- if (error.code !== "ENOENT")
97
- throw error;
98
- }
99
- }
100
- await writeFiles(target, templateFiles(path.basename(target)));
101
- }
102
- export async function listTemplateProjects(root) {
103
- await readTemplateConfig(root);
104
- const projects = [];
105
- const visit = async (directory) => {
106
- const entries = await readdir(directory, { withFileTypes: true });
107
- for (const entry of entries) {
108
- if (!entry.isDirectory() ||
109
- entry.name.startsWith(".") ||
110
- entry.name === "node_modules")
111
- continue;
112
- const projectRoot = path.join(directory, entry.name);
113
- try {
114
- const config = await readConfig(projectRoot);
115
- projects.push({
116
- name: config.name,
117
- root: projectRoot,
118
- relativePath: path.relative(root, projectRoot),
119
- preferredPort: config.qa.server.preferredPort,
120
- readinessPath: config.qa.server.readinessPath,
121
- command: config.qa.server.command,
122
- args: [...config.qa.server.args],
123
- });
124
- continue;
125
- }
126
- catch { }
127
- await visit(projectRoot);
128
- }
129
- };
130
- await visit(root);
131
- return projects.sort((left, right) => left.relativePath.localeCompare(right.relativePath));
132
- }
133
- export async function registerTemplateProject(root, projectRoot) {
134
- await readTemplateConfig(root);
135
- const relative = path.relative(root, projectRoot);
136
- if (!relative ||
137
- path.isAbsolute(relative) ||
138
- relative.split(path.sep).includes(".."))
139
- throw new Error("Template project must be inside the workspace root.");
140
- const packageFile = path.join(root, "package.json");
141
- const packageJson = JSON.parse(await readFile(packageFile, "utf8"));
142
- if (!Array.isArray(packageJson.workspaces))
143
- throw new Error("Template package.json workspaces must be an array.");
144
- const workspacePath = relative.split(path.sep).join("/");
145
- const workspaces = new Set(packageJson.workspaces.filter((value) => typeof value === "string"));
146
- if (workspaces.has(workspacePath))
147
- return;
148
- workspaces.add(workspacePath);
149
- packageJson.workspaces = [...workspaces].sort();
150
- await writeFiles(root, { "package.json": `${JSON.stringify(packageJson, null, 2)}\n` }, true);
151
- }
152
- //# sourceMappingURL=workspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/template/workspace.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import type { MozoleConfig } from "../config/project.js";
2
- import { sanitizeTerminalText } from "../output-safety.js";
3
- export interface CheckResult {
4
- name: string;
5
- passed: boolean;
6
- detail?: string | undefined;
7
- rawChars: number;
8
- }
9
- export declare const stripAnsi: typeof sanitizeTerminalText;
10
- export declare function actionableFailure(output: string, limit?: number): string;
11
- export declare function runVerification(root: string, config: MozoleConfig, signal?: AbortSignal, onStep?: (checkName: string, index: number, total: number) => void): Promise<{
12
- results: CheckResult[];
13
- output: string;
14
- passed: boolean;
15
- }>;
16
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/verify/runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAM3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,eAAO,MAAM,SAAS,6BAAuB,CAAC;AAE9C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,MAAM,CAoBpE;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjE,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CA4FtE"}
@@ -1,112 +0,0 @@
1
- import { access } from "node:fs/promises";
2
- import path from "node:path";
3
- import { sanitizeTerminalText } from "../output-safety.js";
4
- import { npmExecutable, resolveExecutable } from "../platform/executable.js";
5
- import { run } from "../platform/process.js";
6
- import { inspectBackendScaffold } from "../scaffold/backend.js";
7
- import { updateTelemetry } from "../telemetry/store.js";
8
- export const stripAnsi = sanitizeTerminalText;
9
- export function actionableFailure(output, limit = 18) {
10
- const clean = stripAnsi(output)
11
- .split(/\r?\n/)
12
- .map((line) => line.trimEnd());
13
- const meaningful = clean.filter((line) => line.trim() &&
14
- !/^\s*(npm (warn|notice)|at async |at process\.)/i.test(line));
15
- const failureIndex = meaningful.findIndex((line) => /error|failed|expected|received|×|✗/i.test(line));
16
- const start = failureIndex < 0
17
- ? Math.max(0, meaningful.length - limit)
18
- : Math.max(0, failureIndex - 3);
19
- return meaningful
20
- .slice(start, start + limit)
21
- .join("\n")
22
- .slice(0, 4000);
23
- }
24
- export async function runVerification(root, config, signal, onStep) {
25
- const optionalChecks = [];
26
- try {
27
- await access(path.join(root, "composer.json"));
28
- const composer = await resolveExecutable("composer");
29
- optionalChecks.push({
30
- name: "composer",
31
- command: composer ?? "composer",
32
- args: ["validate", "--no-check-publish"],
33
- });
34
- }
35
- catch { }
36
- const checks = [
37
- { name: "lint", command: npmExecutable(), args: ["run", "lint"] },
38
- { name: "typecheck", command: npmExecutable(), args: ["run", "typecheck"] },
39
- { name: "tests", command: npmExecutable(), args: ["run", "test:run"] },
40
- { name: "build", command: npmExecutable(), args: ["run", "build"] },
41
- ...optionalChecks,
42
- ...config.verifiers,
43
- ];
44
- const results = [];
45
- const backendOffset = config.backend?.enabled ? 1 : 0;
46
- const total = checks.length + backendOffset;
47
- if (config.backend?.enabled) {
48
- onStep?.("backend", 1, total);
49
- const backend = await inspectBackendScaffold(root, config);
50
- results.push({
51
- name: "backend",
52
- passed: backend.healthy,
53
- detail: backend.healthy ? undefined : backend.detail,
54
- rawChars: backend.detail.length,
55
- });
56
- if (!backend.healthy) {
57
- const body = `VERIFY FAIL\n\nbackend ✗\n\n${backend.detail}`;
58
- return { results, output: body, passed: false };
59
- }
60
- }
61
- for (let i = 0; i < checks.length; i++) {
62
- const check = checks[i];
63
- if (!check)
64
- continue;
65
- onStep?.(check.name, i + 1 + backendOffset, total);
66
- let result;
67
- try {
68
- result = await run(check.command, check.args, {
69
- cwd: root,
70
- timeoutMs: 600_000,
71
- signal,
72
- logFile: path.join(root, ".mozole", "logs", `verify-${check.name}.log`),
73
- });
74
- }
75
- catch (error) {
76
- if (signal?.aborted)
77
- throw error;
78
- const detail = `Unable to execute ${check.command}: ${error instanceof Error ? error.message : String(error)}`;
79
- results.push({
80
- name: check.name,
81
- passed: false,
82
- detail,
83
- rawChars: detail.length,
84
- });
85
- break;
86
- }
87
- signal?.throwIfAborted();
88
- const combined = `${result.stdout}\n${result.stderr}`;
89
- results.push({
90
- name: check.name,
91
- passed: result.exitCode === 0,
92
- detail: result.exitCode === 0 ? undefined : actionableFailure(combined),
93
- rawChars: combined.length,
94
- });
95
- if (result.exitCode !== 0)
96
- break;
97
- }
98
- const passed = results.length === total && results.every((result) => result.passed);
99
- const resultBody = passed
100
- ? `VERIFY PASS\n\n${results.map((result) => `${result.name.padEnd(10)} ✓`).join("\n")}`
101
- : `VERIFY FAIL\n\n${results.map((result) => `${result.name.padEnd(10)} ${result.passed ? "✓" : "✗"}`).join("\n")}\n\n${results.find((result) => !result.passed)?.detail ?? "Unknown failure"}`;
102
- const body = resultBody;
103
- if (config.telemetry?.enabled)
104
- await updateTelemetry(root, (telemetry) => {
105
- telemetry.verification.runs++;
106
- telemetry.verification.rawChars += results.reduce((sum, result) => sum + result.rawChars, 0);
107
- telemetry.verification.deliveredChars += body.length;
108
- telemetry.governor.modelFacingDiagnosticChars += body.length;
109
- });
110
- return { results, output: body, passed };
111
- }
112
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/verify/runner.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- # Agent integration audit — 1.4.2
2
-
3
- ## Findings and changes
4
-
5
- 1. Default scaffold removed agent files but still serialized CCE/governor/telemetry settings and CCE toolchain metadata. Its CLI dependency also installed optimization code. Plain output now contains neither that metadata nor the CLI dependency; project scripts run independently. Regression tests scan generated files and installed dependency locks.
6
- 2. Verification and QA loaded fingerprints and wrote governor state even when the governor was disabled. Both paths now bypass that work unless explicitly enabled. Repeated-run tests assert no state or telemetry files are created.
7
- 3. Default adoption installed CCE integrations without flags. Plain adoption now uses standalone scripts and basic guidance. Explicit `--cce-install` selects managed integration adoption. Without that flag, previously optimized projects migrate to standalone mode: Mozole-owned integrations and state are archived/removed from the active system, while unrelated user integrations are preserved.
8
- 4. AGENTS.md was absent by default, depriving agents of useful commands and architecture. Plain projects now include concise, integration-free guidance. CLAUDE.md imports it with `@AGENTS.md`. Tests check that every documented npm command actually exists, including PHP commands.
9
- 5. PreToolUse matchers did not observe CCE MCP retrieval. Optional hooks now register matching PostToolUse handlers. Retrieval is recorded after execution; explicit tool-error responses are ignored. PreToolUse retains read/command enforcement.
10
- 6. Existing managed instruction blocks and hook groups were skipped during adoption, preserving obsolete policies. They now update idempotently while preserving unowned content and handlers. An unclosed managed block fails instead of truncating user text.
11
- 7. The visual workflow called a command that could be rejected after successful normal QA. It now supplies `--reason=explicit-workflow`.
12
- 8. README described enforcing hooks as advisory-only. Documentation now reflects denial behavior and host trust requirements.
13
-
14
- ## Scope and evidence
15
-
16
- - Tested generated guidance, hook event wiring, successful/error retrieval handling, default/adopt isolation, repeated verification/QA without state, and preservation/idempotency.
17
- - Plain frontend and PHP projects are built and browser-tested using their own npm scripts. Optimized smoke covers managed workspace files and CLI QA; it deliberately skips live CCE indexing.
18
- - AGENTS.md is instruction input, not proof that an agent has followed it. Nested `AGENTS.override.md`, host settings, and hook trust can change behavior. Codex/Claude/Antigravity interactive host sessions were not launched as part of this audit. The tests validate generated contracts and executable hook handlers, not every host's activation state.
19
- - An unavailable optional CCE runtime is reported during creation; enabling the integration is not a claim that indexing succeeded. Repair commands are printed.
20
-
21
- ## Primary references checked
22
-
23
- - [Codex AGENTS.md discovery and scope](https://learn.chatgpt.com/docs/agent-configuration/agents-md): root-to-current-directory discovery; overrides and size limits.
24
- - [Codex hooks](https://learn.chatgpt.com/docs/hooks): PreToolUse/PostToolUse matchers, MCP coverage, permission decisions, and project hook trust.