@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
@@ -1,129 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { createReadStream } from "node:fs";
3
- import { readdir } from "node:fs/promises";
4
- import path from "node:path";
5
- const ignoredDirectories = new Set([
6
- ".cce",
7
- ".git",
8
- ".react-router",
9
- "build",
10
- "coverage",
11
- "dist",
12
- "deploy",
13
- "node_modules",
14
- ]);
15
- const ignoredMozoleDirectories = new Set(["backups", "logs", "qa", "state"]);
16
- const qaIrrelevant = /^(?:tests?|__tests__)\/|\/(?:__tests__)\/|\.(test|spec)\.[cm]?[jt]sx?$|(^|\/)(biome|vitest)(\.config)?\./i;
17
- const relevantExtension = /\.(?:[cm]?[jt]sx?|mdx?|css|scss|sass|less|html|json|ya?ml|toml|txt|xml|webmanifest|svg|png|jpe?g|gif|webp|avif|ico|woff2?|php)$/i;
18
- export function normalizeFingerprintPath(root, file, paths = path) {
19
- return paths
20
- .relative(paths.resolve(root), paths.resolve(file))
21
- .replaceAll("\\", "/");
22
- }
23
- function includeFile(relative, profile) {
24
- if (!relative || relative.startsWith("../"))
25
- return false;
26
- if (relative.startsWith(".mozole/"))
27
- return false;
28
- if (relative === ".mozole/telemetry.json")
29
- return false;
30
- if (profile !== "verification" && qaIrrelevant.test(relative))
31
- return false;
32
- if ([
33
- "package.json",
34
- "package-lock.json",
35
- "npm-shrinkwrap.json",
36
- "react-router.config.ts",
37
- "vite.config.ts",
38
- "tsconfig.json",
39
- ".htaccess",
40
- ].includes(relative))
41
- return true;
42
- if (relative.startsWith("public/") || /(^|\/)\.env(?:\.|$)/.test(relative))
43
- return true;
44
- return relevantExtension.test(relative);
45
- }
46
- async function filesBelow(root, directory = root) {
47
- const found = [];
48
- let entries;
49
- try {
50
- entries = await readdir(directory, { withFileTypes: true });
51
- }
52
- catch {
53
- return found;
54
- }
55
- entries.sort((left, right) => left.name.localeCompare(right.name));
56
- for (const entry of entries) {
57
- const absolute = path.join(directory, entry.name);
58
- const relative = normalizeFingerprintPath(root, absolute);
59
- try {
60
- if (entry.isSymbolicLink())
61
- continue;
62
- if (entry.isDirectory()) {
63
- if (ignoredDirectories.has(entry.name))
64
- continue;
65
- if (relative.startsWith(".mozole/") &&
66
- ignoredMozoleDirectories.has(entry.name))
67
- continue;
68
- found.push(...(await filesBelow(root, absolute)));
69
- }
70
- else if (entry.isFile()) {
71
- found.push(absolute);
72
- }
73
- }
74
- catch { }
75
- }
76
- return found;
77
- }
78
- function stable(value) {
79
- if (Array.isArray(value))
80
- return `[${value.map(stable).join(",")}]`;
81
- if (value && typeof value === "object")
82
- return `{${Object.entries(value)
83
- .sort(([left], [right]) => left.localeCompare(right))
84
- .map(([key, item]) => `${JSON.stringify(key)}:${stable(item)}`)
85
- .join(",")}}`;
86
- return JSON.stringify(value);
87
- }
88
- function configInputs(config, profile) {
89
- if (profile === "verification")
90
- return {
91
- verifiers: config.verifiers,
92
- backend: config.backend,
93
- mode: config.mode,
94
- };
95
- return {
96
- routes: config.routes,
97
- viewports: config.qa.viewports,
98
- server: config.qa.server,
99
- backend: config.backend,
100
- mode: profile,
101
- };
102
- }
103
- async function safeStreamHash(hash, file) {
104
- try {
105
- for await (const chunk of createReadStream(file))
106
- hash.update(chunk);
107
- }
108
- catch { }
109
- }
110
- export async function projectFingerprint(root, config, profile) {
111
- const hash = createHash("sha256");
112
- hash.update(`mozole:${profile}:v1\0${process.platform}\0${process.arch}\0${process.version}\0${stable(configInputs(config, profile))}\0`);
113
- for (const absolute of await filesBelow(root)) {
114
- const relative = normalizeFingerprintPath(root, absolute);
115
- if (!includeFile(relative, profile))
116
- continue;
117
- hash.update(relative);
118
- hash.update("\0");
119
- await safeStreamHash(hash, absolute);
120
- hash.update("\0");
121
- }
122
- return hash.digest("hex");
123
- }
124
- export async function fileFingerprint(file) {
125
- const hash = createHash("sha256");
126
- await safeStreamHash(hash, file);
127
- return hash.digest("hex");
128
- }
129
- //# sourceMappingURL=fingerprint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/governor/fingerprint.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- interface HookInput {
2
- cwd?: unknown;
3
- hook_event_name?: unknown;
4
- tool_name?: unknown;
5
- tool_input?: unknown;
6
- tool_response?: unknown;
7
- }
8
- import type { GovernorState } from "./state.js";
9
- export declare function isValidJustification(reason: unknown, retrievals?: GovernorState["cceRetrievals"], fingerprint?: string, now?: number): boolean;
10
- export declare function evaluateGovernorHook(input: HookInput): Promise<Record<string, unknown> | undefined>;
11
- export declare function governorHookCommand(): Promise<number>;
12
- export {};
13
- //# sourceMappingURL=hook.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/governor/hook.ts"],"names":[],"mappings":"AAYA,UAAU,SAAS;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA8DhD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,UAAU,GAAE,aAAa,CAAC,eAAe,CAAM,EAC/C,WAAW,CAAC,EAAE,MAAM,EACpB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAmDT;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CA2U9C;AASD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAW3D"}
@@ -1,389 +0,0 @@
1
- import { createHash } from "node:crypto";
2
- import { access } from "node:fs/promises";
3
- import path from "node:path";
4
- import { findProjectRoot, readConfig } from "../config/project.js";
5
- import { updateTelemetry } from "../telemetry/store.js";
6
- import { fileFingerprint, normalizeFingerprintPath, projectFingerprint, } from "./fingerprint.js";
7
- import { readGovernorState, writeGovernorState } from "./state.js";
8
- const WILDCARD_RETRIEVAL_READ_LIMIT = 3;
9
- const JUSTIFICATION_EVIDENCE_MAX_AGE_MS = 5 * 60_000;
10
- const GENERIC_EVIDENCE_WORDS = new Set([
11
- "and",
12
- "ast",
13
- "code",
14
- "context",
15
- "edit",
16
- "editing",
17
- "exported",
18
- "file",
19
- "for",
20
- "from",
21
- "full",
22
- "implement",
23
- "implementation",
24
- "inspect",
25
- "inspecting",
26
- "modules",
27
- "read",
28
- "refactoring",
29
- "requested",
30
- "source",
31
- "structure",
32
- "the",
33
- "understand",
34
- "understanding",
35
- "value",
36
- "values",
37
- "whole",
38
- "with",
39
- ]);
40
- function object(value) {
41
- return value && typeof value === "object"
42
- ? value
43
- : {};
44
- }
45
- function hookBlockMessage(reason) {
46
- return {
47
- hookSpecificOutput: {
48
- hookEventName: "PreToolUse",
49
- permissionDecision: "deny",
50
- permissionReason: reason,
51
- additionalContext: reason,
52
- },
53
- };
54
- }
55
- function hookWarnMessage(message) {
56
- return {
57
- hookSpecificOutput: {
58
- hookEventName: "PreToolUse",
59
- permissionDecision: "allow",
60
- additionalContext: message,
61
- },
62
- };
63
- }
64
- export function isValidJustification(reason, retrievals = {}, fingerprint, now = Date.now()) {
65
- if (typeof reason !== "string" || reason.trim().length < 8)
66
- return false;
67
- const normalizedReason = reason.toLowerCase().replaceAll("\\", "/");
68
- const reasonWords = new Set(normalizedReason.match(/[a-z_$][a-z0-9_$.-]*/g) ?? []);
69
- for (const [key, retrieval] of Object.entries(retrievals)) {
70
- const retrievedAt = Date.parse(retrieval.retrievedAt);
71
- const age = now - retrievedAt;
72
- if (!Number.isFinite(retrievedAt) ||
73
- age < 0 ||
74
- age > JUSTIFICATION_EVIDENCE_MAX_AGE_MS ||
75
- (fingerprint && retrieval.fingerprint !== fingerprint))
76
- continue;
77
- if (key !== "*") {
78
- const normalizedPath = key.toLowerCase().replaceAll("\\", "/");
79
- const basename = path.posix.basename(normalizedPath);
80
- if (normalizedReason.includes(normalizedPath) ||
81
- normalizedReason.includes(basename))
82
- return true;
83
- }
84
- const query = retrieval.query?.toLowerCase().replaceAll("\\", "/");
85
- if (!query)
86
- continue;
87
- const concreteReferences = [
88
- ...(query.match(/(?:[a-z]:)?[a-z0-9_.-]+(?:\/[a-z0-9_.-]+)+(?::\d+(?:-\d+)?)?/g) ?? []),
89
- ...(query.match(/\b\d+-\d+\b/g) ?? []),
90
- ];
91
- if (concreteReferences.some((reference) => normalizedReason.includes(reference)))
92
- return true;
93
- const queryWords = query.match(/[a-z_$][a-z0-9_$.-]*/g) ?? [];
94
- if (queryWords.some((word) => word.length >= 3 &&
95
- !GENERIC_EVIDENCE_WORDS.has(word) &&
96
- reasonWords.has(word)))
97
- return true;
98
- }
99
- return false;
100
- }
101
- export async function evaluateGovernorHook(input) {
102
- const cwd = typeof input.cwd === "string" ? input.cwd : process.cwd();
103
- const root = await findProjectRoot(cwd);
104
- const config = await readConfig(root);
105
- if (!config.governor?.enabled)
106
- return;
107
- const toolName = typeof input.tool_name === "string" ? input.tool_name : "";
108
- const toolInput = object(input.tool_input);
109
- // 1. CCE query / retrieval tracking
110
- const isCceTool = /cce|context_search|expand_chunk|related_context/i.test(toolName);
111
- const command = typeof toolInput.command === "string"
112
- ? toolInput.command
113
- : typeof toolInput.cmd === "string"
114
- ? toolInput.cmd
115
- : undefined;
116
- const isCceCommand = command && /\bcce\s+search\b/i.test(command);
117
- if (isCceTool || isCceCommand) {
118
- if (input.hook_event_name === "PreToolUse")
119
- return;
120
- const response = object(input.tool_response);
121
- if (response.isError === true ||
122
- response.error ||
123
- (typeof response.exit_code === "number" && response.exit_code !== 0))
124
- return;
125
- const state = await readGovernorState(root);
126
- const fingerprint = await projectFingerprint(root, config, "verification");
127
- const targetFile = [
128
- toolInput.file_path,
129
- toolInput.path,
130
- toolInput.filename,
131
- ].find((item) => typeof item === "string");
132
- const query = typeof toolInput.query === "string" ? toolInput.query : command;
133
- const retrievedAt = new Date().toISOString();
134
- state.cceRetrievals["*"] = {
135
- retrievedAt,
136
- ...(query ? { query } : {}),
137
- fingerprint,
138
- remainingReads: WILDCARD_RETRIEVAL_READ_LIMIT,
139
- };
140
- if (targetFile) {
141
- const rel = normalizeFingerprintPath(root, path.resolve(cwd, targetFile));
142
- state.cceRetrievals[rel] = {
143
- retrievedAt,
144
- ...(query ? { query } : {}),
145
- fingerprint,
146
- };
147
- }
148
- await writeGovernorState(root, state);
149
- return;
150
- }
151
- if (input.hook_event_name === "PostToolUse")
152
- return;
153
- // 2. File read evaluation (CCE-first gating & repeated-read blocking)
154
- const candidate = [
155
- toolInput.file_path,
156
- toolInput.path,
157
- toolInput.filename,
158
- toolInput.AbsolutePath,
159
- toolInput.TargetFile,
160
- ].find((item) => typeof item === "string");
161
- if (candidate &&
162
- (/read|file|view/i.test(toolName) ||
163
- (command && /\b(cat|head|less|type)\s+/i.test(command)))) {
164
- const absolute = path.resolve(cwd, candidate);
165
- if (absolute !== root &&
166
- !absolute.startsWith(`${path.resolve(root)}${path.sep}`))
167
- return;
168
- try {
169
- await access(absolute);
170
- }
171
- catch {
172
- return;
173
- }
174
- const relPath = normalizeFingerprintPath(root, absolute);
175
- const content = await fileFingerprint(absolute);
176
- const isBounded = toolInput.offset !== undefined ||
177
- toolInput.limit !== undefined ||
178
- toolInput.StartLine !== undefined ||
179
- toolInput.EndLine !== undefined ||
180
- toolInput.start_line !== undefined ||
181
- toolInput.end_line !== undefined;
182
- const justification = toolInput.reason ?? toolInput.justification;
183
- const region = `${String(toolInput.offset ?? toolInput.StartLine ?? "")}\0${String(toolInput.limit ?? toolInput.EndLine ?? "")}`;
184
- const key = `${relPath}\0${region}`;
185
- const state = await readGovernorState(root);
186
- const previous = state.reads[key];
187
- const fileRetrieval = state.cceRetrievals[relPath];
188
- const wildcardRetrieval = state.cceRetrievals["*"];
189
- const currentFingerprint = await projectFingerprint(root, config, "verification");
190
- const hasJustification = isValidJustification(justification, state.cceRetrievals, currentFingerprint);
191
- const currentCceRetrieval = fileRetrieval?.fingerprint === currentFingerprint ||
192
- (wildcardRetrieval?.fingerprint === currentFingerprint &&
193
- (wildcardRetrieval.remainingReads ?? 0) > 0);
194
- if (fileRetrieval?.fingerprint !== currentFingerprint &&
195
- wildcardRetrieval?.fingerprint === currentFingerprint &&
196
- (wildcardRetrieval.remainingReads ?? 0) > 0) {
197
- wildcardRetrieval.remainingReads = Math.max(0, (wildcardRetrieval.remainingReads ?? 0) - 1);
198
- await writeGovernorState(root, state);
199
- }
200
- // CCE-first gate: non-trivial source reads require current retrieval evidence.
201
- if (!currentCceRetrieval) {
202
- const message = `CCE REQUIRED\n\nUse CCE \`context_search\` before inspecting ${relPath}. If retrieval is insufficient, use \`expand_chunk\`/\`related_context\`, then a bounded changed-region read. Full-file reads require a concrete correctness reason.`;
203
- if (config.telemetry?.enabled) {
204
- await updateTelemetry(root, (telemetry) => {
205
- telemetry.governor.fullReadsBlockedAfterCce++;
206
- telemetry.governor.modelFacingDiagnosticChars += message.length;
207
- });
208
- }
209
- state.reads[key] = {
210
- content,
211
- seenAt: new Date().toISOString(),
212
- blocked: true,
213
- };
214
- await writeGovernorState(root, state);
215
- return hookBlockMessage(message);
216
- }
217
- // Current CCE retrieval still does not authorize an unjustified broad read.
218
- if (currentCceRetrieval && !isBounded && !hasJustification) {
219
- const message = `CCE GUARD\n\n${relPath} was already retrieved via CCE. Escalate progressively:\n 1. Targeted additional CCE query\n 2. Bounded range read (offset/limit or StartLine/EndLine)\n 3. Full-file read only when genuinely necessary with a concrete reason.`;
220
- if (config.telemetry?.enabled) {
221
- await updateTelemetry(root, (telemetry) => {
222
- telemetry.governor.fullReadsBlockedAfterCce++;
223
- telemetry.governor.modelFacingDiagnosticChars += message.length;
224
- });
225
- }
226
- state.reads[key] = {
227
- content,
228
- seenAt: new Date().toISOString(),
229
- blocked: true,
230
- };
231
- await writeGovernorState(root, state);
232
- return hookBlockMessage(message);
233
- }
234
- // Repeated read check: same file region unchanged without justification
235
- if (previous?.content === content &&
236
- !previous.blocked &&
237
- !hasJustification) {
238
- if (config.governor.mode === "warn" && previous.warned) {
239
- return;
240
- }
241
- const message = `CONTEXT GUARD\n\n${relPath} was already inspected and has not changed. Prefer CCE, git diff, or a changed-region read.`;
242
- if (config.telemetry?.enabled) {
243
- await updateTelemetry(root, (telemetry) => {
244
- telemetry.governor.repeatedReadsBlocked++;
245
- telemetry.governor.repeatedReadWarnings++;
246
- telemetry.governor.modelFacingDiagnosticChars += message.length;
247
- });
248
- }
249
- previous.seenAt = new Date().toISOString();
250
- previous.warned = true;
251
- previous.blocked = true;
252
- await writeGovernorState(root, state);
253
- if (config.governor.mode === "warn") {
254
- return hookWarnMessage(message);
255
- }
256
- return hookBlockMessage(message);
257
- }
258
- // Only bounded reads or explicitly justified full-file escalation reach here.
259
- const escalationLevel = isBounded
260
- ? "bounded"
261
- : "justified_full";
262
- if (hasJustification && config.telemetry?.enabled) {
263
- await updateTelemetry(root, (telemetry) => {
264
- telemetry.governor.justifiedEscalations++;
265
- });
266
- }
267
- state.reads[key] = {
268
- content,
269
- seenAt: new Date().toISOString(),
270
- escalationLevel,
271
- };
272
- const keys = Object.keys(state.reads);
273
- for (const stale of keys.slice(0, Math.max(0, keys.length - 100)))
274
- delete state.reads[stale];
275
- await writeGovernorState(root, state);
276
- return;
277
- }
278
- // 3. Command evaluation (Visual QA gate, rerun checks, runaway guard)
279
- if (!command || !/bash|exec|shell/i.test(toolName))
280
- return;
281
- const qaFingerprint = await projectFingerprint(root, config, "qa");
282
- const verifyFingerprint = await projectFingerprint(root, config, "verification");
283
- const state = await readGovernorState(root);
284
- // Visual QA hard gate
285
- const isVisualQa = /\b(mozole\s+qa|npm\s+run\s+qa:visual)\b.*--visual|\bnpm\s+run\s+qa:visual\b/i.test(command);
286
- if (isVisualQa) {
287
- const normalPassed = state.qa.normal?.fingerprint === qaFingerprint;
288
- const hasVisualReason = /--reason=|--force/i.test(command) ||
289
- Boolean(process.env.MOZOLE_VISUAL_REASON);
290
- if (normalPassed && !hasVisualReason) {
291
- const message = "VISUAL QA GUARD\n\nRoutine QA passed. Visual QA is only allowed when explicitly requested by user or when deterministic QA fails. Run routine `mozole qa` or stop.";
292
- if (config.telemetry?.enabled) {
293
- await updateTelemetry(root, (telemetry) => {
294
- telemetry.governor.visualQaBlocked++;
295
- telemetry.governor.modelFacingDiagnosticChars += message.length;
296
- });
297
- }
298
- return hookBlockMessage(message);
299
- }
300
- }
301
- // Redundant verify check
302
- const isVerify = /\b(mozole\s+verify|npm\s+run\s+verify)\b/i.test(command) &&
303
- !command.includes("--force");
304
- if (isVerify && state.verification?.fingerprint === verifyFingerprint) {
305
- const message = "VERIFY GUARD\n\nNo relevant changes since the last successful verification. Stop or make a relevant edit.";
306
- if (config.telemetry?.enabled) {
307
- await updateTelemetry(root, (telemetry) => {
308
- telemetry.governor.redundantVerifyBlocked++;
309
- telemetry.governor.modelFacingDiagnosticChars += message.length;
310
- });
311
- }
312
- if (config.governor.mode === "enforce") {
313
- return hookBlockMessage(message);
314
- }
315
- return hookWarnMessage(message);
316
- }
317
- // Redundant QA check
318
- const isNormalQa = /\b(mozole\s+qa|npm\s+run\s+qa)\b/i.test(command) &&
319
- !isVisualQa &&
320
- !command.includes("--force");
321
- if (isNormalQa && state.qa.normal?.fingerprint === qaFingerprint) {
322
- const message = "QA GUARD\n\nRoutine QA already passed for the current project state. Stop exploration or make a relevant edit.";
323
- if (config.telemetry?.enabled) {
324
- await updateTelemetry(root, (telemetry) => {
325
- telemetry.governor.redundantQaBlocked++;
326
- telemetry.governor.modelFacingDiagnosticChars += message.length;
327
- });
328
- }
329
- if (config.governor.mode === "enforce") {
330
- return hookBlockMessage(message);
331
- }
332
- return hookWarnMessage(message);
333
- }
334
- // Runaway / duplicate command guard
335
- const commandHash = createHash("sha256").update(command).digest("hex");
336
- const previous = state.commands.find((item) => item.command === commandHash && item.fingerprint === verifyFingerprint);
337
- if (!previous) {
338
- state.commands.push({
339
- command: commandHash,
340
- fingerprint: verifyFingerprint,
341
- seenAt: new Date().toISOString(),
342
- });
343
- state.commands = state.commands.slice(-50);
344
- await writeGovernorState(root, state);
345
- return;
346
- }
347
- if (previous.warned)
348
- return;
349
- previous.warned = true;
350
- previous.seenAt = new Date().toISOString();
351
- await writeGovernorState(root, state);
352
- const complete = state.verification?.fingerprint === verifyFingerprint &&
353
- Object.values(state.qa).some((evidence) => evidence.fingerprint === qaFingerprint);
354
- const message = complete
355
- ? "RUNAWAY GUARD\n\nTask is complete (verification and QA passed). Stop exploration."
356
- : "EXECUTION GUARD\n\nThis identical command already ran without a relevant project mutation.";
357
- if (config.telemetry?.enabled) {
358
- await updateTelemetry(root, (telemetry) => {
359
- telemetry.governor.repeatedWorkWarnings++;
360
- telemetry.governor.modelFacingDiagnosticChars += message.length;
361
- });
362
- }
363
- if (complete || config.governor.mode === "enforce") {
364
- return hookBlockMessage(message);
365
- }
366
- return hookWarnMessage(message);
367
- }
368
- async function stdin() {
369
- const chunks = [];
370
- for await (const chunk of process.stdin)
371
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
372
- return Buffer.concat(chunks).toString("utf8");
373
- }
374
- export async function governorHookCommand() {
375
- try {
376
- const raw = await stdin();
377
- if (!raw.trim())
378
- return 0;
379
- const result = await evaluateGovernorHook(JSON.parse(raw));
380
- if (result)
381
- process.stdout.write(JSON.stringify(result));
382
- return 0;
383
- }
384
- catch {
385
- // Hooks must never crash host process
386
- return 0;
387
- }
388
- }
389
- //# sourceMappingURL=hook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/governor/hook.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- export interface EvidenceState {
2
- fingerprint: string;
3
- passedAt: string;
4
- checks?: string[];
5
- routes?: string[];
6
- viewports?: string[];
7
- artifacts?: Array<{
8
- path: string;
9
- sha256: string;
10
- }>;
11
- reason?: string;
12
- }
13
- export interface GovernorState {
14
- schemaVersion: 1;
15
- verification?: EvidenceState;
16
- qa: Record<string, EvidenceState>;
17
- reads: Record<string, {
18
- content: string;
19
- seenAt: string;
20
- warned?: boolean;
21
- blocked?: boolean;
22
- escalationLevel?: "cce" | "bounded" | "justified_full" | "small_file";
23
- }>;
24
- cceRetrievals: Record<string, {
25
- retrievedAt: string;
26
- query?: string;
27
- fingerprint?: string;
28
- remainingReads?: number;
29
- }>;
30
- commands: Array<{
31
- command: string;
32
- fingerprint: string;
33
- seenAt: string;
34
- warned?: boolean;
35
- blocked?: boolean;
36
- }>;
37
- }
38
- export declare const emptyGovernorState: () => GovernorState;
39
- export declare function readGovernorState(root: string): Promise<GovernorState>;
40
- export declare function writeGovernorState(root: string, value: GovernorState): Promise<void>;
41
- export declare function qaStateKey(mode: {
42
- interactive: boolean;
43
- visual: boolean;
44
- }): string;
45
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/governor/state.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAC;IACjB,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClC,KAAK,EAAE,MAAM,CACX,MAAM,EACN;QACE,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,eAAe,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,gBAAgB,GAAG,YAAY,CAAC;KACvE,CACF,CAAC;IACF,aAAa,EAAE,MAAM,CACnB,MAAM,EACN;QACE,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CACF,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,eAAO,MAAM,kBAAkB,QAAO,aAMpC,CAAC;AASH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkC5E;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB,GAAG,MAAM,CAIT"}