@mozole/cli 1.4.2 → 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 (229) hide show
  1. package/LICENSE +16 -4
  2. package/README.md +85 -89
  3. package/dist/cli.d.ts +2 -2
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +204 -157
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/adopt.d.ts +5 -8
  8. package/dist/commands/adopt.d.ts.map +1 -1
  9. package/dist/commands/adopt.js +49 -812
  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 -149
  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 -37
  36. package/dist/commands/ui.d.ts.map +1 -1
  37. package/dist/commands/ui.js +75 -317
  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 -32
  64. package/dist/qa/runner.d.ts.map +1 -1
  65. package/dist/qa/runner.js +286 -336
  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 -30
  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 -39
  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/config/project.d.ts +0 -51
  150. package/dist/config/project.d.ts.map +0 -1
  151. package/dist/config/project.js +0 -81
  152. package/dist/config/project.js.map +0 -1
  153. package/dist/context/cce.d.ts +0 -39
  154. package/dist/context/cce.d.ts.map +0 -1
  155. package/dist/context/cce.js +0 -455
  156. package/dist/context/cce.js.map +0 -1
  157. package/dist/governor/fingerprint.d.ts +0 -7
  158. package/dist/governor/fingerprint.d.ts.map +0 -1
  159. package/dist/governor/fingerprint.js +0 -129
  160. package/dist/governor/fingerprint.js.map +0 -1
  161. package/dist/governor/hook.d.ts +0 -13
  162. package/dist/governor/hook.d.ts.map +0 -1
  163. package/dist/governor/hook.js +0 -389
  164. package/dist/governor/hook.js.map +0 -1
  165. package/dist/governor/state.d.ts +0 -45
  166. package/dist/governor/state.d.ts.map +0 -1
  167. package/dist/governor/state.js +0 -60
  168. package/dist/governor/state.js.map +0 -1
  169. package/dist/integrations/antigravity.d.ts +0 -20
  170. package/dist/integrations/antigravity.d.ts.map +0 -1
  171. package/dist/integrations/antigravity.js +0 -153
  172. package/dist/integrations/antigravity.js.map +0 -1
  173. package/dist/output.d.ts +0 -5
  174. package/dist/output.d.ts.map +0 -1
  175. package/dist/output.js +0 -2
  176. package/dist/output.js.map +0 -1
  177. package/dist/platform/executable.d.ts +0 -11
  178. package/dist/platform/executable.d.ts.map +0 -1
  179. package/dist/platform/executable.js +0 -69
  180. package/dist/platform/executable.js.map +0 -1
  181. package/dist/platform/process.d.ts +0 -25
  182. package/dist/platform/process.d.ts.map +0 -1
  183. package/dist/platform/process.js +0 -179
  184. package/dist/platform/process.js.map +0 -1
  185. package/dist/progress.d.ts +0 -44
  186. package/dist/progress.d.ts.map +0 -1
  187. package/dist/progress.js +0 -123
  188. package/dist/progress.js.map +0 -1
  189. package/dist/qa/diff.d.ts +0 -10
  190. package/dist/qa/diff.d.ts.map +0 -1
  191. package/dist/qa/diff.js +0 -91
  192. package/dist/qa/diff.js.map +0 -1
  193. package/dist/qa/server.d.ts +0 -10
  194. package/dist/qa/server.d.ts.map +0 -1
  195. package/dist/qa/server.js +0 -127
  196. package/dist/qa/server.js.map +0 -1
  197. package/dist/scaffold/adoption.d.ts +0 -17
  198. package/dist/scaffold/adoption.d.ts.map +0 -1
  199. package/dist/scaffold/adoption.js +0 -279
  200. package/dist/scaffold/adoption.js.map +0 -1
  201. package/dist/scaffold/legacy.d.ts +0 -4
  202. package/dist/scaffold/legacy.d.ts.map +0 -1
  203. package/dist/scaffold/legacy.js +0 -139
  204. package/dist/scaffold/legacy.js.map +0 -1
  205. package/dist/scaffold/routes.d.ts +0 -3
  206. package/dist/scaffold/routes.d.ts.map +0 -1
  207. package/dist/scaffold/routes.js +0 -37
  208. package/dist/scaffold/routes.js.map +0 -1
  209. package/dist/scaffold/standalone.d.ts +0 -7
  210. package/dist/scaffold/standalone.d.ts.map +0 -1
  211. package/dist/scaffold/standalone.js +0 -294
  212. package/dist/scaffold/standalone.js.map +0 -1
  213. package/dist/scaffold/templates.d.ts +0 -8
  214. package/dist/scaffold/templates.d.ts.map +0 -1
  215. package/dist/scaffold/templates.js +0 -312
  216. package/dist/scaffold/templates.js.map +0 -1
  217. package/dist/scaffold/write.d.ts +0 -2
  218. package/dist/scaffold/write.d.ts.map +0 -1
  219. package/dist/scaffold/write.js +0 -38
  220. package/dist/scaffold/write.js.map +0 -1
  221. package/dist/telemetry/store.d.ts +0 -33
  222. package/dist/telemetry/store.d.ts.map +0 -1
  223. package/dist/telemetry/store.js +0 -75
  224. package/dist/telemetry/store.js.map +0 -1
  225. package/dist/verify/runner.d.ts +0 -15
  226. package/dist/verify/runner.d.ts.map +0 -1
  227. package/dist/verify/runner.js +0 -112
  228. package/dist/verify/runner.js.map +0 -1
  229. package/docs/agent-audit.md +0 -24
package/CHANGELOG.md DELETED
@@ -1,30 +0,0 @@
1
- # Changelog
2
-
3
- ## 1.4.2
4
-
5
- - Package the default Tailwind CSS 4.3.3 and `@tailwindcss/vite` integration for Vite, React Router and PHP scaffolds.
6
- - Keep generated starter styles in the Tailwind base layer and verify that utility CSS is emitted in production builds.
7
- - Extend design guidance with static utility classes, semantic theme tokens and styling-pipeline checks for adopted projects.
8
-
9
- ## 1.4.1
10
-
11
- - Include Tailwind CSS 4.3.3 and its Vite plugin in every new project; keep starter styles in the base layer and verify generated utilities in production CSS.
12
-
13
- - Make `adopt` reconcile legacy and previously optimized projects with the current canonical project system without requiring an integration flag.
14
- - Archive Mozole-owned legacy state and managed files during migration, preserve unrelated user integrations and design exports, and restore managed changes if installation fails.
15
- - Refresh managed instruction blocks, standalone verification/QA scripts, PHP templates, tooling pins and configured project verifiers idempotently.
16
- - Keep CCE, governor, telemetry and token-optimization layers strictly opt-in through explicit integration flags.
17
-
18
- ## 1.4.0
19
-
20
- - Add provider-neutral design handoff and shared AGENTS.md guardrails for spacing, typography, contrast, assets and responsive validation; preserve user exports under docs/design/.
21
-
22
- - Make default scaffolds independent of the CLI: no CCE, governor, telemetry, caches, MCP, hooks, or optimization dependency. Environment variables cannot enable integration mode.
23
- - Keep useful basic AGENTS.md and CLAUDE.md guidance in plain projects. Require explicit integration flags for new/adopt; refresh managed agent blocks and hook definitions while preserving user content.
24
- - Track CCE retrieval through PostToolUse MCP events and provide a valid reason from the visual QA workflow.
25
- - Add recursive PHP syntax and minimum-version validation, strict API prefix matching, GET/HEAD handling, and 405/Allow responses.
26
- - Add `build:deploy` to assemble frontend, PHP API, and .htaccess with rollback on failed replacement. Default PHP configuration to production/debug-off.
27
- - Preserve failed creation logs before staging cleanup.
28
- - Add standalone browser QA and integration coverage for plain, PHP, and optimized scaffolds; provision PHP in Windows/Linux CI.
29
-
30
- Migration: default generated projects use standalone npm scripts rather than a project-local `mozole` executable. Use the globally installed CLI when desired, or pass `--cce-install` to generate the optional integration mode. Plain adoption migrates previously optimized projects to the current standalone system, archiving Mozole-owned integration remnants and preserving unrelated user integrations. Explicit flags select optimized adoption. Legacy PHP templates, managed scripts, instruction blocks and tooling pins are reconciled; customized backend files receive a review notice. Failed installation restores managed files and moved state.
@@ -1,7 +0,0 @@
1
- import type { Output } from "../output.js";
2
- import { type ProgressState } from "../progress.js";
3
- export declare function cceInstallCommand(cwd: string, output?: Output, options?: {
4
- verbose?: boolean | undefined;
5
- onProgress?: ((state: ProgressState) => void) | undefined;
6
- }): Promise<number>;
7
- //# sourceMappingURL=cce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cce.d.ts","sourceRoot":"","sources":["../../src/commands/cce.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAElE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACtD,GACL,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
@@ -1,37 +0,0 @@
1
- import { installCceRuntime, requireCceRuntime } from "../context/cce.js";
2
- import { TaskProgress } from "../progress.js";
3
- export async function cceInstallCommand(cwd, output = console, options = {}) {
4
- const progress = new TaskProgress({
5
- total: 3,
6
- title: "CCE Install",
7
- verbose: options.verbose,
8
- output,
9
- onUpdate: options.onProgress,
10
- });
11
- const controller = new AbortController();
12
- const abort = () => controller.abort();
13
- process.once("SIGINT", abort);
14
- process.once("SIGTERM", abort);
15
- try {
16
- progress.step("Installing uv and code-context-engine runtime");
17
- progress.logVerbose(`Running CCE installation in ${cwd}`);
18
- const runtime = await installCceRuntime(cwd, controller.signal);
19
- progress.step("Verifying CCE executable and runtime integrity");
20
- progress.logVerbose(`Validating CCE launcher: ${runtime.command}`);
21
- await requireCceRuntime(cwd, controller.signal);
22
- progress.step("Finalizing CCE configuration");
23
- progress.done("CCE installed and ready");
24
- output.log(`CCE READY\n\nRuntime persistent CCE tool\nCommand ${runtime.command}`);
25
- return 0;
26
- }
27
- catch (error) {
28
- progress.done();
29
- output.error(`CCE INSTALL FAIL\n\n${error instanceof Error ? error.message : String(error)}`);
30
- return controller.signal.aborted ? 130 : 1;
31
- }
32
- finally {
33
- process.removeListener("SIGINT", abort);
34
- process.removeListener("SIGTERM", abort);
35
- }
36
- }
37
- //# sourceMappingURL=cce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cce.js","sourceRoot":"","sources":["../../src/commands/cce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,MAAM,GAAW,OAAO,EACxB,OAAO,GAGH,EAAE;IAEN,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC;QAChC,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM;QACN,QAAQ,EAAE,OAAO,CAAC,UAAU;KAC7B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC/D,QAAQ,CAAC,UAAU,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAEhE,QAAQ,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAChE,QAAQ,CAAC,UAAU,CAAC,4BAA4B,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,MAAM,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAEhD,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,CACR,uDAAuD,OAAO,CAAC,OAAO,EAAE,CACzE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CACV,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAChF,CAAC;QACF,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Output } from "../output.js";
2
- export declare function logsCommand(cwd: string, name: string | undefined, raw: boolean, output?: Output): Promise<number>;
3
- //# sourceMappingURL=logs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
@@ -1,39 +0,0 @@
1
- import { readdir, readFile } from "node:fs/promises";
2
- import path from "node:path";
3
- import { findProjectRoot } from "../config/project.js";
4
- export async function logsCommand(cwd, name, raw, output = console) {
5
- try {
6
- const root = await findProjectRoot(cwd);
7
- const directory = path.join(root, ".mozole", "logs");
8
- let names = [];
9
- try {
10
- names = (await readdir(directory))
11
- .filter((entry) => entry.endsWith(".log"))
12
- .sort();
13
- }
14
- catch (error) {
15
- if (error.code !== "ENOENT")
16
- throw error;
17
- }
18
- if (!name) {
19
- output.log(names.length ? names.join("\n") : "No diagnostic logs.");
20
- return 0;
21
- }
22
- const filename = name.endsWith(".log") ? name : `${name}.log`;
23
- if (path.basename(filename) !== filename || !names.includes(filename)) {
24
- output.error(`Unknown log: ${name}`);
25
- return 2;
26
- }
27
- const contents = await readFile(path.join(directory, filename), "utf8");
28
- const delivered = raw
29
- ? contents
30
- : contents.split(/\r?\n/).slice(-81).join("\n");
31
- output.log(delivered.trimEnd());
32
- return 0;
33
- }
34
- catch (error) {
35
- output.error(`LOGS FAIL\n\n${error instanceof Error ? error.message : String(error)}`);
36
- return 2;
37
- }
38
- }
39
- //# sourceMappingURL=logs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAW,EACX,IAAwB,EACxB,GAAY,EACZ,MAAM,GAAW,OAAO;IAExB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,KAAK,GAAG,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;iBAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;iBACzC,IAAI,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,KAAK,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;YACpE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;QAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,GAAG;YACnB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CACV,gBAAgB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -1,12 +0,0 @@
1
- import type { Output } from "../output.js";
2
- import { type ProgressState } from "../progress.js";
3
- export declare function qaCommand(cwd: string, mode: {
4
- interactive: boolean;
5
- visual: boolean;
6
- diff?: boolean | undefined;
7
- force?: boolean | undefined;
8
- verbose?: boolean | undefined;
9
- reason?: string | undefined;
10
- onProgress?: ((state: ProgressState) => void) | undefined;
11
- }, output?: Output): Promise<number>;
12
- //# sourceMappingURL=qa.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qa.d.ts","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAoClE,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IACJ,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3D,EACD,MAAM,GAAE,MAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CA0HjB"}
@@ -1,143 +0,0 @@
1
- import { access, readdir } from "node:fs/promises";
2
- import path from "node:path";
3
- import { findProjectRoot, readConfig } from "../config/project.js";
4
- import { fileFingerprint, projectFingerprint, } from "../governor/fingerprint.js";
5
- import { qaStateKey, readGovernorState, writeGovernorState, } from "../governor/state.js";
6
- import { TaskProgress } from "../progress.js";
7
- import { runQa } from "../qa/runner.js";
8
- import { updateTelemetry } from "../telemetry/store.js";
9
- async function visualArtifactsCurrent(root, artifacts) {
10
- if (!artifacts?.length)
11
- return false;
12
- try {
13
- for (const artifact of artifacts) {
14
- const absolute = path.resolve(root, artifact.path);
15
- if (!absolute.startsWith(`${path.resolve(root)}${path.sep}`))
16
- return false;
17
- await access(absolute);
18
- if ((await fileFingerprint(absolute)) !== artifact.sha256)
19
- return false;
20
- }
21
- return true;
22
- }
23
- catch {
24
- return false;
25
- }
26
- }
27
- async function captureArtifactState(root) {
28
- const directory = path.join(root, ".mozole", "qa");
29
- const names = (await readdir(directory)).filter((name) => name.endsWith(".png") && !name.endsWith(".diff.png"));
30
- return Promise.all(names.sort().map(async (name) => ({
31
- path: path.posix.join(".mozole", "qa", name),
32
- sha256: await fileFingerprint(path.join(directory, name)),
33
- })));
34
- }
35
- export async function qaCommand(cwd, mode, output = console) {
36
- const progress = new TaskProgress({
37
- total: 3,
38
- title: mode.visual ? "Visual QA" : "QA",
39
- verbose: mode.verbose,
40
- output,
41
- onUpdate: mode.onProgress,
42
- });
43
- const controller = new AbortController();
44
- const abort = () => controller.abort();
45
- process.once("SIGINT", abort);
46
- process.once("SIGTERM", abort);
47
- try {
48
- progress.step("Preparing browser QA");
49
- const root = await findProjectRoot(cwd);
50
- const config = await readConfig(root);
51
- const key = qaStateKey(mode);
52
- const profile = mode.visual ? "visual" : "qa";
53
- const fingerprint = config.governor?.enabled
54
- ? await projectFingerprint(root, config, profile)
55
- : "";
56
- const normalFingerprint = config.governor?.enabled
57
- ? await projectFingerprint(root, config, "qa")
58
- : "";
59
- const state = config.governor?.enabled
60
- ? await readGovernorState(root)
61
- : undefined;
62
- const cached = state?.qa[key];
63
- const artifactsCurrent = mode.visual
64
- ? await visualArtifactsCurrent(root, cached?.artifacts)
65
- : true;
66
- if (config.governor?.enabled &&
67
- !mode.force &&
68
- !mode.diff &&
69
- cached?.fingerprint === fingerprint &&
70
- artifactsCurrent) {
71
- progress.done();
72
- const reused = mode.visual ? (cached.artifacts?.length ?? 0) : 0;
73
- const message = mode.visual
74
- ? `VISUAL QA CURRENT\n\nReused ${reused} screenshot artifacts.`
75
- : "QA CURRENT\n\nNo relevant changes since the last successful QA run.";
76
- output.log(message);
77
- if (config.telemetry?.enabled)
78
- await updateTelemetry(root, (telemetry) => {
79
- telemetry.qa.avoidedRuns++;
80
- telemetry.qa.browserLaunchesAvoided++;
81
- telemetry.qa.reusedVisualArtifacts += reused;
82
- telemetry.governor.modelFacingDiagnosticChars += message.length;
83
- });
84
- return 0;
85
- }
86
- // Visual QA hard gate: block unmotivated visual QA if routine QA already passed
87
- if (mode.visual && config.governor?.enabled && state) {
88
- const normalPassed = state.qa.normal?.fingerprint === normalFingerprint;
89
- const visualReason = mode.reason ??
90
- (process.env.MOZOLE_VISUAL_REASON ||
91
- (mode.force ? "force" : undefined));
92
- if (normalPassed && !visualReason) {
93
- progress.done();
94
- const message = 'VISUAL QA BLOCKED\n\nRoutine QA passed. Visual QA requires an explicit user request or a confirmed deterministic QA failure.\nRun routine `mozole qa` or pass --reason="<why>".';
95
- output.error(message);
96
- if (config.telemetry?.enabled) {
97
- await updateTelemetry(root, (telemetry) => {
98
- telemetry.governor.visualQaBlocked++;
99
- telemetry.governor.modelFacingDiagnosticChars += message.length;
100
- });
101
- }
102
- return 2;
103
- }
104
- }
105
- progress.step(`Running ${mode.visual ? "visual" : "browser"} QA probes across routes and viewports`);
106
- progress.logVerbose(`Routes: ${config.routes.join(", ")} | Viewports: ${config.qa.viewports.map((v) => `${v.width}x${v.height}`).join(", ")}`);
107
- const result = await runQa(root, config, mode, controller.signal);
108
- progress.done();
109
- (result.passed ? output.log : output.error)(result.output);
110
- if (state && result.passed) {
111
- const visualReason = mode.reason ?? process.env.MOZOLE_VISUAL_REASON;
112
- if (mode.visual && visualReason && config.telemetry?.enabled) {
113
- await updateTelemetry(root, (telemetry) => {
114
- telemetry.governor.justifiedEscalations++;
115
- });
116
- }
117
- state.qa[key] = {
118
- fingerprint: await projectFingerprint(root, config, profile),
119
- passedAt: new Date().toISOString(),
120
- routes: [...config.routes],
121
- viewports: config.qa.viewports.map((viewport) => `${viewport.width}x${viewport.height}`),
122
- ...(mode.visual ? { artifacts: await captureArtifactState(root) } : {}),
123
- ...(visualReason ? { reason: visualReason } : {}),
124
- };
125
- await writeGovernorState(root, state);
126
- }
127
- else if (state && cached?.fingerprint === fingerprint) {
128
- delete state.qa[key];
129
- await writeGovernorState(root, state);
130
- }
131
- return result.passed ? 0 : 1;
132
- }
133
- catch (error) {
134
- progress.done();
135
- output.error(`QA FAIL\n\n${error instanceof Error ? error.message : String(error)}\n\nIf Chromium is missing, run: npx playwright install chromium`);
136
- return controller.signal.aborted ? 130 : 2;
137
- }
138
- finally {
139
- process.removeListener("SIGINT", abort);
140
- process.removeListener("SIGTERM", abort);
141
- }
142
- }
143
- //# sourceMappingURL=qa.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"qa.js","sourceRoot":"","sources":["../../src/commands/qa.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import type { Output } from "../output.js";
2
- import { type ProgressState } from "../progress.js";
3
- interface CceSavings {
4
- queries: number;
5
- served_tokens: number;
6
- full_file_tokens: number;
7
- tokens_saved: number;
8
- savings_pct: number;
9
- buckets?: Record<string, {
10
- baseline?: number;
11
- served?: number;
12
- calls?: number;
13
- }>;
14
- }
15
- export interface CceRetrievalMetrics {
16
- queries: number;
17
- deliveredTokens: number;
18
- baselineTokens?: number;
19
- avoidedTokens?: number;
20
- reductionPct?: number;
21
- }
22
- export declare function parseCceSavings(output: string): CceSavings | undefined;
23
- export declare function cceRetrievalMetrics(savings: CceSavings): CceRetrievalMetrics;
24
- export declare function renderCceRetrieval(savings: CceSavings): string[];
25
- export declare function cceSavingsInvocation(cce: {
26
- command: string;
27
- prefix: string[];
28
- }): {
29
- command: string;
30
- args: string[];
31
- };
32
- export declare function statsCommand(cwd: string, output?: Output, options?: {
33
- verbose?: boolean | undefined;
34
- onProgress?: ((state: ProgressState) => void) | undefined;
35
- }): Promise<number>;
36
- export {};
37
- //# sourceMappingURL=stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAUlE,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CACd,MAAM,EACN;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CACvD,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CA2BtE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,mBAAmB,CAgC5E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,EAAE,CAShE;AACD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAEtC;AACD,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,MAAgB,EACxB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACtD,GACL,OAAO,CAAC,MAAM,CAAC,CAqGjB"}
@@ -1,169 +0,0 @@
1
- import { findProjectRoot, readConfig } from "../config/project.js";
2
- import { cceCommand } from "../context/cce.js";
3
- import { run } from "../platform/process.js";
4
- import { TaskProgress } from "../progress.js";
5
- import { readTelemetry } from "../telemetry/store.js";
6
- function number(value) {
7
- return new Intl.NumberFormat("en-US", {
8
- notation: value >= 10_000 ? "compact" : "standard",
9
- maximumFractionDigits: 1,
10
- }).format(value);
11
- }
12
- export function parseCceSavings(output) {
13
- const start = output.indexOf("{");
14
- const end = output.lastIndexOf("}");
15
- if (start < 0 || end < start)
16
- return undefined;
17
- try {
18
- const value = JSON.parse(output.slice(start, end + 1));
19
- const fields = [
20
- value.queries,
21
- value.served_tokens,
22
- value.full_file_tokens,
23
- value.tokens_saved,
24
- value.savings_pct,
25
- ];
26
- if (!Number.isInteger(value.queries) ||
27
- !fields.every((item) => typeof item === "number" && Number.isFinite(item) && item >= 0))
28
- return undefined;
29
- return value;
30
- }
31
- catch {
32
- return undefined;
33
- }
34
- }
35
- export function cceRetrievalMetrics(savings) {
36
- const queries = Math.max(0, Math.trunc(savings.queries));
37
- if (queries === 0)
38
- return { queries: 0, deliveredTokens: 0, avoidedTokens: 0 };
39
- const deliveredTokens = Math.max(0, savings.served_tokens);
40
- const retrieval = savings.buckets?.retrieval;
41
- const baseline = retrieval?.baseline;
42
- const retrievalServed = retrieval?.served;
43
- const calls = retrieval?.calls;
44
- const validBaseline = typeof baseline === "number" &&
45
- Number.isFinite(baseline) &&
46
- baseline > 0 &&
47
- typeof retrievalServed === "number" &&
48
- Number.isFinite(retrievalServed) &&
49
- retrievalServed >= deliveredTokens &&
50
- retrievalServed <= baseline &&
51
- typeof calls === "number" &&
52
- Number.isInteger(calls) &&
53
- calls === queries &&
54
- deliveredTokens <= baseline;
55
- if (!validBaseline)
56
- return { queries, deliveredTokens };
57
- const avoidedTokens = baseline - deliveredTokens;
58
- return {
59
- queries,
60
- deliveredTokens,
61
- baselineTokens: baseline,
62
- avoidedTokens,
63
- reductionPct: (avoidedTokens / baseline) * 100,
64
- };
65
- }
66
- export function renderCceRetrieval(savings) {
67
- const metrics = cceRetrievalMetrics(savings);
68
- return [
69
- ` queries ${number(metrics.queries)}`,
70
- ` delivered context ${number(metrics.deliveredTokens)} tokens`,
71
- ` retrieval baseline ${metrics.baselineTokens === undefined ? "N/A" : `${number(metrics.baselineTokens)} tokens`}`,
72
- ` avoided context ${metrics.avoidedTokens === undefined ? "N/A" : `${number(metrics.avoidedTokens)} tokens`}`,
73
- ` measured reduction ${metrics.reductionPct === undefined ? "N/A" : `${metrics.reductionPct.toFixed(1)}%`}`,
74
- ];
75
- }
76
- export function cceSavingsInvocation(cce) {
77
- return { command: cce.command, args: [...cce.prefix, "savings", "--json"] };
78
- }
79
- export async function statsCommand(cwd, output = console, options = {}) {
80
- const progress = new TaskProgress({
81
- total: 3,
82
- title: "Stats",
83
- verbose: options.verbose,
84
- output,
85
- onUpdate: options.onProgress,
86
- });
87
- try {
88
- progress.step("Locating project root and reading telemetry store");
89
- const root = await findProjectRoot(cwd);
90
- if (!(await readConfig(root)).telemetry?.enabled) {
91
- progress.done();
92
- output.log("Statistics are not enabled for this project.");
93
- return 0;
94
- }
95
- const telemetry = await readTelemetry(root);
96
- progress.logVerbose(`Loaded telemetry: verification runs=${telemetry.verification.runs}, qa runs=${telemetry.qa.runs}`);
97
- progress.step("Probing CCE context savings and measurements");
98
- const cce = await cceCommand();
99
- let cceLines = [];
100
- if (cce) {
101
- progress.logVerbose(`Querying CCE savings from ${cce.command}`);
102
- const invocation = cceSavingsInvocation(cce);
103
- const result = await run(invocation.command, invocation.args, {
104
- cwd: root,
105
- timeoutMs: 15_000,
106
- });
107
- const savings = result.exitCode === 0 ? parseCceSavings(result.stdout) : undefined;
108
- if (savings) {
109
- const retrieval = cceRetrievalMetrics(savings);
110
- progress.logVerbose(`CCE retrieval: ${retrieval.queries} queries, reduction=${retrieval.reductionPct?.toFixed(1) ?? "N/A"}`);
111
- cceLines = renderCceRetrieval(savings);
112
- }
113
- }
114
- else {
115
- progress.logVerbose("CCE not installed or available");
116
- }
117
- progress.step("Calculating agent efficiency metrics and reductions");
118
- const suppressed = telemetry.verification.rawChars - telemetry.verification.deliveredChars;
119
- const reduction = telemetry.verification.rawChars
120
- ? (suppressed / telemetry.verification.rawChars) * 100
121
- : 0;
122
- progress.done();
123
- output.log([
124
- "Mozole Agent Efficiency",
125
- "",
126
- "Context retrieval (CCE)",
127
- ...(cceLines.length
128
- ? cceLines
129
- : [" unavailable — run CCE queries to collect measurements"]),
130
- "",
131
- "Verification (measured)",
132
- ` runs ${telemetry.verification.runs}`,
133
- ` raw output ${number(telemetry.verification.rawChars)} chars`,
134
- ` delivered output ${number(telemetry.verification.deliveredChars)} chars`,
135
- ` suppressed output ${number(Math.max(0, suppressed))} chars`,
136
- ` reruns avoided ${telemetry.verification.avoidedRuns}`,
137
- ` output reduction ${reduction.toFixed(1)}%`,
138
- "",
139
- "QA (measured)",
140
- ` runs ${telemetry.qa.runs}`,
141
- ` probes ${telemetry.qa.probes}`,
142
- ` screenshots ${telemetry.qa.screenshots}`,
143
- ` non-visual runs ${telemetry.qa.runs - telemetry.qa.visualRuns}`,
144
- ` reruns avoided ${telemetry.qa.avoidedRuns}`,
145
- ` browser launches saved ${telemetry.qa.browserLaunchesAvoided}`,
146
- ` visual artifacts reused ${telemetry.qa.reusedVisualArtifacts}`,
147
- "",
148
- "Governor (enforced)",
149
- ` full reads blocked after CCE ${telemetry.governor.fullReadsBlockedAfterCce}`,
150
- ` repeated reads blocked ${telemetry.governor.repeatedReadsBlocked}`,
151
- ` visual QA blocked ${telemetry.governor.visualQaBlocked}`,
152
- ` redundant verify blocked ${telemetry.governor.redundantVerifyBlocked}`,
153
- ` redundant QA blocked ${telemetry.governor.redundantQaBlocked}`,
154
- ` justified escalations ${telemetry.governor.justifiedEscalations}`,
155
- ` repeated-read warnings ${telemetry.governor.repeatedReadWarnings}`,
156
- ` repeated-work warnings ${telemetry.governor.repeatedWorkWarnings}`,
157
- ` diagnostic payload ${number(telemetry.governor.modelFacingDiagnosticChars)} chars`,
158
- "",
159
- "No billing or model-token savings are inferred from character counts.",
160
- ].join("\n"));
161
- return 0;
162
- }
163
- catch (error) {
164
- progress.done();
165
- output.error(`STATS FAIL\n\n${error instanceof Error ? error.message : String(error)}`);
166
- return 2;
167
- }
168
- }
169
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -1,51 +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
- routes: string[];
11
- backend?: {
12
- enabled: true;
13
- runtime: "php";
14
- apiPrefix: string;
15
- port: number;
16
- } | undefined;
17
- qa: {
18
- viewports: Viewport[];
19
- visualDiffThreshold?: number | undefined;
20
- server: {
21
- command: string;
22
- args: string[];
23
- readinessPath: string;
24
- preferredPort: number;
25
- };
26
- };
27
- cce?: {
28
- enabled: boolean;
29
- initialized: boolean;
30
- command: string;
31
- };
32
- governor?: {
33
- enabled: boolean;
34
- mode: "warn" | "enforce";
35
- hooks: {
36
- codex: boolean;
37
- claude: boolean;
38
- };
39
- };
40
- telemetry?: {
41
- enabled: boolean;
42
- };
43
- verifiers: Array<{
44
- name: string;
45
- command: string;
46
- args: string[];
47
- }>;
48
- }
49
- export declare function readConfig(projectRoot: string): Promise<MozoleConfig>;
50
- export declare function findProjectRoot(start?: string): Promise<string>;
51
- //# sourceMappingURL=project.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/config/project.ts"],"names":[],"mappings":"AAGA,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,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,CAgF3E;AAED,wBAAsB,eAAe,CAAC,KAAK,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgB5E"}