@hawkeyexl/manni 4.3.1 → 4.4.1

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 (225) hide show
  1. package/README.md +9 -1
  2. package/dist/batch-GFNLTGOH.js +36 -0
  3. package/dist/build-COYIQ25L.js +31 -0
  4. package/dist/calibrate-MDBLJKEE.js +31 -0
  5. package/dist/capture-LRML2PKV.js +32 -0
  6. package/dist/check-ASPIHA6B.js +40 -0
  7. package/dist/check-ASPIHA6B.js.map +1 -0
  8. package/dist/check-EDLBYL5N.js +27 -0
  9. package/dist/check-EDLBYL5N.js.map +1 -0
  10. package/dist/check-HYNGXYJV.js +18 -0
  11. package/dist/check-HYNGXYJV.js.map +1 -0
  12. package/dist/chunk-2B7ZNTPV.js +230 -0
  13. package/dist/chunk-2B7ZNTPV.js.map +1 -0
  14. package/dist/chunk-2H7UOFLK.js +11 -0
  15. package/dist/chunk-2H7UOFLK.js.map +1 -0
  16. package/dist/chunk-37LP5HMZ.js +1042 -0
  17. package/dist/chunk-37LP5HMZ.js.map +1 -0
  18. package/dist/chunk-3VK37OR2.js +2957 -0
  19. package/dist/chunk-3VK37OR2.js.map +1 -0
  20. package/dist/chunk-4IUC2MNL.js +2165 -0
  21. package/dist/chunk-4IUC2MNL.js.map +1 -0
  22. package/dist/{chunk-3R23C5DT.js → chunk-4TSWU2SU.js} +2 -14
  23. package/dist/chunk-4TSWU2SU.js.map +1 -0
  24. package/dist/chunk-57NEQRVO.js +10921 -0
  25. package/dist/chunk-57NEQRVO.js.map +1 -0
  26. package/dist/chunk-6JSSEWBG.js +6737 -0
  27. package/dist/chunk-6JSSEWBG.js.map +1 -0
  28. package/dist/chunk-6OYEI2VV.js +88 -0
  29. package/dist/chunk-6OYEI2VV.js.map +1 -0
  30. package/dist/chunk-77AINBYM.js +19 -0
  31. package/dist/chunk-77AINBYM.js.map +1 -0
  32. package/dist/chunk-7UKO3ASZ.js +54 -0
  33. package/dist/chunk-7UKO3ASZ.js.map +1 -0
  34. package/dist/chunk-A5ULMVHQ.js +164 -0
  35. package/dist/chunk-A5ULMVHQ.js.map +1 -0
  36. package/dist/chunk-C4SQM22E.js +299 -0
  37. package/dist/chunk-C4SQM22E.js.map +1 -0
  38. package/dist/chunk-CK7SKVHR.js +1042 -0
  39. package/dist/chunk-CK7SKVHR.js.map +1 -0
  40. package/dist/{chunk-G5CM2VGQ.js → chunk-DXNZS72W.js} +8 -94
  41. package/dist/chunk-DXNZS72W.js.map +1 -0
  42. package/dist/chunk-EPH54CAY.js +374 -0
  43. package/dist/chunk-EPH54CAY.js.map +1 -0
  44. package/dist/{chunk-KJR7OVDX.js → chunk-FBEQCK47.js} +56 -137
  45. package/dist/chunk-FBEQCK47.js.map +1 -0
  46. package/dist/{chunk-IOYXPBCL.js → chunk-G3T47CFV.js} +1 -7
  47. package/dist/{chunk-IOYXPBCL.js.map → chunk-G3T47CFV.js.map} +1 -1
  48. package/dist/chunk-GCQRPUSB.js +1287 -0
  49. package/dist/chunk-GCQRPUSB.js.map +1 -0
  50. package/dist/chunk-GLP5PSXB.js +72 -0
  51. package/dist/chunk-GLP5PSXB.js.map +1 -0
  52. package/dist/chunk-I2AH3CJJ.js +1192 -0
  53. package/dist/chunk-I2AH3CJJ.js.map +1 -0
  54. package/dist/chunk-IDV6HJCB.js +388 -0
  55. package/dist/chunk-IDV6HJCB.js.map +1 -0
  56. package/dist/chunk-IKEWBMCN.js +98 -0
  57. package/dist/chunk-IKEWBMCN.js.map +1 -0
  58. package/dist/chunk-JCDXE76J.js +52 -0
  59. package/dist/chunk-JCDXE76J.js.map +1 -0
  60. package/dist/chunk-JXLTXMJ7.js +455 -0
  61. package/dist/chunk-JXLTXMJ7.js.map +1 -0
  62. package/dist/chunk-LJ2RDH3F.js +49 -0
  63. package/dist/chunk-LJ2RDH3F.js.map +1 -0
  64. package/dist/chunk-M2JCK5F6.js +805 -0
  65. package/dist/chunk-M2JCK5F6.js.map +1 -0
  66. package/dist/chunk-M3W7J6MU.js +4398 -0
  67. package/dist/chunk-M3W7J6MU.js.map +1 -0
  68. package/dist/chunk-MMTSSTG7.js +23 -0
  69. package/dist/chunk-MMTSSTG7.js.map +1 -0
  70. package/dist/chunk-MNH7QO4Z.js +15 -0
  71. package/dist/chunk-MNH7QO4Z.js.map +1 -0
  72. package/dist/chunk-MWJLZMBL.js +934 -0
  73. package/dist/chunk-MWJLZMBL.js.map +1 -0
  74. package/dist/chunk-MYMBCTDE.js +387 -0
  75. package/dist/chunk-MYMBCTDE.js.map +1 -0
  76. package/dist/chunk-NCPWXHDO.js +683 -0
  77. package/dist/chunk-NCPWXHDO.js.map +1 -0
  78. package/dist/chunk-NLXTXE5Y.js +1661 -0
  79. package/dist/chunk-NLXTXE5Y.js.map +1 -0
  80. package/dist/{chunk-CFDUZRM2.js → chunk-NXV7WE2D.js} +32 -240
  81. package/dist/chunk-NXV7WE2D.js.map +1 -0
  82. package/dist/chunk-OWBRDNRZ.js +16 -0
  83. package/dist/chunk-OWBRDNRZ.js.map +1 -0
  84. package/dist/{chunk-KTSJ2ZHA.js → chunk-PAU352SV.js} +5 -3
  85. package/dist/{chunk-KTSJ2ZHA.js.map → chunk-PAU352SV.js.map} +1 -1
  86. package/dist/chunk-PCE7QHXJ.js +68 -0
  87. package/dist/chunk-PCE7QHXJ.js.map +1 -0
  88. package/dist/chunk-PIKOVN6W.js +1651 -0
  89. package/dist/chunk-PIKOVN6W.js.map +1 -0
  90. package/dist/chunk-PNPQTHBT.js +17 -0
  91. package/dist/chunk-PNPQTHBT.js.map +1 -0
  92. package/dist/chunk-PU6DFJMY.js +1975 -0
  93. package/dist/chunk-PU6DFJMY.js.map +1 -0
  94. package/dist/chunk-Q35YIDBV.js +1202 -0
  95. package/dist/chunk-Q35YIDBV.js.map +1 -0
  96. package/dist/{chunk-5HNHEUD5.js → chunk-QQUKGCAJ.js} +3 -3
  97. package/dist/chunk-QRWGPQKO.js +198 -0
  98. package/dist/chunk-QRWGPQKO.js.map +1 -0
  99. package/dist/{chunk-UBMMXS2Y.js → chunk-QZ6LRSNV.js} +69 -48
  100. package/dist/{chunk-UBMMXS2Y.js.map → chunk-QZ6LRSNV.js.map} +1 -1
  101. package/dist/chunk-RL5XWQOL.js +3872 -0
  102. package/dist/chunk-RL5XWQOL.js.map +1 -0
  103. package/dist/chunk-RNVYGWIC.js +30 -0
  104. package/dist/chunk-RNVYGWIC.js.map +1 -0
  105. package/dist/chunk-SE4JN5XN.js +19 -0
  106. package/dist/chunk-SE4JN5XN.js.map +1 -0
  107. package/dist/chunk-SKSDRUUK.js +622 -0
  108. package/dist/chunk-SKSDRUUK.js.map +1 -0
  109. package/dist/chunk-TIUTIOFB.js +25 -0
  110. package/dist/chunk-TIUTIOFB.js.map +1 -0
  111. package/dist/chunk-TK3FC4RF.js +3090 -0
  112. package/dist/chunk-TK3FC4RF.js.map +1 -0
  113. package/dist/chunk-TU2WUBVZ.js +2 -0
  114. package/dist/chunk-TU2WUBVZ.js.map +1 -0
  115. package/dist/chunk-TZOYZK2E.js +98 -0
  116. package/dist/chunk-TZOYZK2E.js.map +1 -0
  117. package/dist/chunk-UJCVAWP7.js +178 -0
  118. package/dist/chunk-UJCVAWP7.js.map +1 -0
  119. package/dist/chunk-UKZNLVJW.js +17 -0
  120. package/dist/chunk-UKZNLVJW.js.map +1 -0
  121. package/dist/{chunk-HAPTXWU2.js → chunk-UQISLDAV.js} +4 -4
  122. package/dist/chunk-WB3QM6PP.js +5440 -0
  123. package/dist/chunk-WB3QM6PP.js.map +1 -0
  124. package/dist/chunk-YB4IBW3M.js +96 -0
  125. package/dist/chunk-YB4IBW3M.js.map +1 -0
  126. package/dist/chunk-YEUYKR62.js +72 -0
  127. package/dist/chunk-YEUYKR62.js.map +1 -0
  128. package/dist/chunk-YJOGUXGP.js +634 -0
  129. package/dist/chunk-YJOGUXGP.js.map +1 -0
  130. package/dist/chunk-YNHZHSSM.js +41 -0
  131. package/dist/chunk-YNHZHSSM.js.map +1 -0
  132. package/dist/chunk-YTURO7SI.js +979 -0
  133. package/dist/chunk-YTURO7SI.js.map +1 -0
  134. package/dist/chunk-ZXRAE55H.js +31 -0
  135. package/dist/chunk-ZXRAE55H.js.map +1 -0
  136. package/dist/cli-3BIBYHFK.js +473 -0
  137. package/dist/cli-3BIBYHFK.js.map +1 -0
  138. package/dist/cli-673OTRGE.js +28 -0
  139. package/dist/cli-673OTRGE.js.map +1 -0
  140. package/dist/cli-6HIDIFVT.js +1203 -0
  141. package/dist/cli-6HIDIFVT.js.map +1 -0
  142. package/dist/cli-6UB5N6CU.js +232 -0
  143. package/dist/cli-6UB5N6CU.js.map +1 -0
  144. package/dist/cli-LFP5ZGYS.js +346 -0
  145. package/dist/cli-LFP5ZGYS.js.map +1 -0
  146. package/dist/cli-MN7PYMBI.js +552 -0
  147. package/dist/cli-MN7PYMBI.js.map +1 -0
  148. package/dist/cli-PYPX6O6E.js +739 -0
  149. package/dist/cli-PYPX6O6E.js.map +1 -0
  150. package/dist/cli-RPM5PELX.js +626 -0
  151. package/dist/cli-RPM5PELX.js.map +1 -0
  152. package/dist/cli-VI7VHWNZ.js +423 -0
  153. package/dist/cli-VI7VHWNZ.js.map +1 -0
  154. package/dist/cli.d.ts +12 -2
  155. package/dist/cli.js +109 -7661
  156. package/dist/cli.js.map +1 -1
  157. package/dist/docmeta.js +15 -3
  158. package/dist/docmeta.js.map +1 -1
  159. package/dist/github-6QMYOHC3.js +27 -0
  160. package/dist/github-6QMYOHC3.js.map +1 -0
  161. package/dist/github-SXPGP5DB.js +32 -0
  162. package/dist/github-SXPGP5DB.js.map +1 -0
  163. package/dist/index.d.ts +65 -3
  164. package/dist/index.js +407 -337
  165. package/dist/index.js.map +1 -1
  166. package/dist/json-7WV7KL6H.js +17 -0
  167. package/dist/json-7WV7KL6H.js.map +1 -0
  168. package/dist/json-SY7KLNC7.js +35 -0
  169. package/dist/json-SY7KLNC7.js.map +1 -0
  170. package/dist/lint-ASMJLLPA.js +28 -0
  171. package/dist/lint-ASMJLLPA.js.map +1 -0
  172. package/dist/list-KZNVTNVC.js +31 -0
  173. package/dist/list-KZNVTNVC.js.map +1 -0
  174. package/dist/list-Q57YTFUQ.js +29 -0
  175. package/dist/list-Q57YTFUQ.js.map +1 -0
  176. package/dist/page-KSGV5RD4.js +41 -0
  177. package/dist/page-KSGV5RD4.js.map +1 -0
  178. package/dist/picker-3XF36MJF.js +14 -0
  179. package/dist/picker-3XF36MJF.js.map +1 -0
  180. package/dist/pretty-A5EGTN35.js +37 -0
  181. package/dist/pretty-A5EGTN35.js.map +1 -0
  182. package/dist/pretty-CXSDXNAS.js +43 -0
  183. package/dist/pretty-CXSDXNAS.js.map +1 -0
  184. package/dist/reporters-HUY7UXFS.js +42 -0
  185. package/dist/reporters-HUY7UXFS.js.map +1 -0
  186. package/dist/reporters-K2VUKSAK.js +71 -0
  187. package/dist/reporters-K2VUKSAK.js.map +1 -0
  188. package/dist/reporters-M6LJ2IYU.js +21 -0
  189. package/dist/reporters-M6LJ2IYU.js.map +1 -0
  190. package/dist/run-3DYJNRIG.js +33 -0
  191. package/dist/run-3DYJNRIG.js.map +1 -0
  192. package/dist/term-BIQUPMOR.js +1592 -0
  193. package/dist/term-BIQUPMOR.js.map +1 -0
  194. package/dist/types-Y6TXHM7M.js +10 -0
  195. package/dist/types-Y6TXHM7M.js.map +1 -0
  196. package/dist/validate-53RKM2XG.js +16 -0
  197. package/dist/validate-53RKM2XG.js.map +1 -0
  198. package/package.json +1 -1
  199. package/plugin/manni/.claude-plugin/plugin.json +9 -0
  200. package/plugin/manni/hooks/hooks.json +69 -0
  201. package/plugin/manni/hooks/manni.mjs +157 -0
  202. package/plugin/manni/skills/check/SKILL.md +20 -0
  203. package/plugin/manni/skills/evals/SKILL.md +27 -0
  204. package/plugin/manni/skills/fix/SKILL.md +56 -0
  205. package/plugin/manni/skills/setup/SKILL.md +41 -0
  206. package/dist/batch-A5HZKYIW.js +0 -18
  207. package/dist/calibrate-S5K6QHUY.js +0 -13
  208. package/dist/capture-OZEZDABQ.js +0 -15
  209. package/dist/chunk-3R23C5DT.js.map +0 -1
  210. package/dist/chunk-CFDUZRM2.js.map +0 -1
  211. package/dist/chunk-G5CM2VGQ.js.map +0 -1
  212. package/dist/chunk-KJR7OVDX.js.map +0 -1
  213. package/dist/chunk-V4KUVE47.js +0 -27170
  214. package/dist/chunk-V4KUVE47.js.map +0 -1
  215. package/dist/chunk-ZQBTK3DO.js +0 -26518
  216. package/dist/chunk-ZQBTK3DO.js.map +0 -1
  217. package/dist/picker-6HRMETE7.js +0 -12
  218. package/plugin/tracevals/.claude-plugin/plugin.json +0 -9
  219. package/plugin/tracevals/hooks/hooks.json +0 -17
  220. /package/dist/{batch-A5HZKYIW.js.map → batch-GFNLTGOH.js.map} +0 -0
  221. /package/dist/{calibrate-S5K6QHUY.js.map → build-COYIQ25L.js.map} +0 -0
  222. /package/dist/{capture-OZEZDABQ.js.map → calibrate-MDBLJKEE.js.map} +0 -0
  223. /package/dist/{picker-6HRMETE7.js.map → capture-LRML2PKV.js.map} +0 -0
  224. /package/dist/{chunk-5HNHEUD5.js.map → chunk-QQUKGCAJ.js.map} +0 -0
  225. /package/dist/{chunk-HAPTXWU2.js.map → chunk-UQISLDAV.js.map} +0 -0
@@ -0,0 +1,739 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ readStdin
4
+ } from "./chunk-TZOYZK2E.js";
5
+ import "./chunk-UKZNLVJW.js";
6
+ import "./chunk-QRWGPQKO.js";
7
+ import "./chunk-A5ULMVHQ.js";
8
+ import {
9
+ memberOf,
10
+ retainMembers
11
+ } from "./chunk-M3W7J6MU.js";
12
+ import "./chunk-IDV6HJCB.js";
13
+ import {
14
+ extractorForExtension,
15
+ resolveTargetSet,
16
+ supportedExtensions,
17
+ withSharedWalks
18
+ } from "./chunk-57NEQRVO.js";
19
+ import {
20
+ fail
21
+ } from "./chunk-YEUYKR62.js";
22
+ import {
23
+ shouldColor
24
+ } from "./chunk-RNVYGWIC.js";
25
+ import "./chunk-MNH7QO4Z.js";
26
+ import {
27
+ findFamilyConfigFile,
28
+ notice,
29
+ readFamilyConfigFile
30
+ } from "./chunk-Q35YIDBV.js";
31
+ import {
32
+ package_default
33
+ } from "./chunk-UJCVAWP7.js";
34
+ import {
35
+ programName
36
+ } from "./chunk-OWBRDNRZ.js";
37
+ import {
38
+ ToolError,
39
+ errorMessage
40
+ } from "./chunk-G3T47CFV.js";
41
+ import "./chunk-2H7UOFLK.js";
42
+
43
+ // src/family/cli.ts
44
+ import { resolve as resolve5 } from "node:path";
45
+ import { Command, Option } from "commander";
46
+
47
+ // src/family/core/envelope.ts
48
+ function str(value) {
49
+ return typeof value === "string" && value.length > 0 ? value : void 0;
50
+ }
51
+ function record(value) {
52
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
53
+ }
54
+ function parseEnvelope(text) {
55
+ let parsed;
56
+ try {
57
+ parsed = JSON.parse(text);
58
+ } catch {
59
+ return void 0;
60
+ }
61
+ const doc = record(parsed);
62
+ const event = str(doc?.hook_event_name);
63
+ if (doc === void 0 || event === void 0) return void 0;
64
+ const input = record(doc.tool_input);
65
+ const filePath = str(input?.file_path) ?? str(input?.notebook_path);
66
+ const cwd = str(doc.cwd);
67
+ const toolName = str(doc.tool_name);
68
+ const model = str(doc.model) ?? str(record(doc.model)?.id);
69
+ return {
70
+ event,
71
+ stopHookActive: doc.stop_hook_active === true,
72
+ ...cwd === void 0 ? {} : { cwd },
73
+ ...toolName === void 0 ? {} : { toolName },
74
+ ...filePath === void 0 ? {} : { filePath },
75
+ ...model === void 0 ? {} : { model }
76
+ };
77
+ }
78
+ async function readEnvelope(stream = process.stdin) {
79
+ if (stream.isTTY) return void 0;
80
+ try {
81
+ return parseEnvelope(await readStdin(stream));
82
+ } catch {
83
+ return void 0;
84
+ }
85
+ }
86
+
87
+ // src/family/core/in-play.ts
88
+ import { relative, resolve, sep } from "node:path";
89
+ import { parse as parseYaml } from "yaml";
90
+ var FamilyError = class extends ToolError {
91
+ constructor(message, quiet = false) {
92
+ super(message);
93
+ this.quiet = quiet;
94
+ this.name = "FamilyError";
95
+ }
96
+ quiet;
97
+ };
98
+ function noConfigError(cwd) {
99
+ return new FamilyError(
100
+ `No manni.config.yaml found from ${cwd} up to the repository root. manni check runs the checks it sets up.`,
101
+ true
102
+ );
103
+ }
104
+ function nothingSetUpError() {
105
+ return new FamilyError(
106
+ "Nothing is set up to check in manni.config.yaml. manni status says what each domain needs.",
107
+ true
108
+ );
109
+ }
110
+ var DOMAINS = ["meta", "cite", "lint", "docevals", "term", "graph"];
111
+ var COMMANDS = {
112
+ meta: "meta validate",
113
+ cite: "cite check",
114
+ lint: "lint check",
115
+ docevals: "docevals run",
116
+ term: "term check",
117
+ graph: "graph check"
118
+ };
119
+ var NOT_SET_UP = {
120
+ meta: "no meta: section",
121
+ cite: "no page carries citations",
122
+ lint: "no lint: section",
123
+ docevals: "no page resolves any evals",
124
+ term: "no terms in any collection",
125
+ graph: "no graph: section"
126
+ };
127
+ var META_DEFAULTS_ONLY = "only the built-in default schemas cover these files";
128
+ var NOT_CHECKED = [
129
+ ["a11y", "run manni a11y check against a running site"],
130
+ ["tracevals", "run manni tracevals run over sessions"]
131
+ ];
132
+ function plural(n, one, many = `${one}s`) {
133
+ return `${String(n)} ${n === 1 ? one : many}`;
134
+ }
135
+ function toError(message) {
136
+ return new FamilyError(message);
137
+ }
138
+ async function loadFamily(cwd, configPath) {
139
+ const file = configPath === void 0 ? await findFamilyConfigFile(cwd, toError) : await readFamilyConfigFile(configPath, cwd, toError);
140
+ if (file === null) throw noConfigError(cwd);
141
+ const doc = parseYaml(file.text);
142
+ const sections = doc !== null && typeof doc === "object" && !Array.isArray(doc) ? new Set(Object.keys(doc)) : /* @__PURE__ */ new Set();
143
+ return { file, configPath: configPath ?? file.source, sections, collections: file.collections };
144
+ }
145
+ function labelFrom(cwd, path) {
146
+ return relative(cwd, path).split(sep).join("/");
147
+ }
148
+ function collectionsOf(family, cwd, label) {
149
+ return memberOf(family.collections, family.file.dir, cwd, label);
150
+ }
151
+ async function listMembers(family, cwd) {
152
+ const dir = family.file.dir;
153
+ const { files } = await resolveTargetSet({
154
+ inputs: family.collections.flatMap((c) => c.paths),
155
+ cwd: dir,
156
+ allowEmpty: true
157
+ });
158
+ return retainMembers(files, (label) => memberOf(family.collections, dir, dir, label)).map(
159
+ (label) => labelFrom(cwd, resolve(dir, label))
160
+ );
161
+ }
162
+
163
+ // src/family/commands/check.ts
164
+ import { extname, resolve as resolve3 } from "node:path";
165
+
166
+ // src/family/core/changed.ts
167
+ import { execFile } from "node:child_process";
168
+ import { posix, resolve as resolve2 } from "node:path";
169
+ import { promisify } from "node:util";
170
+ var run = promisify(execFile);
171
+ async function git(args, cwd) {
172
+ const { stdout } = await run("git", args, {
173
+ cwd,
174
+ shell: false,
175
+ windowsHide: true,
176
+ maxBuffer: 64 * 1024 * 1024
177
+ });
178
+ return stdout;
179
+ }
180
+ function parsePorcelain(output) {
181
+ const fields = output.split("\0");
182
+ const files = [];
183
+ const removed = [];
184
+ for (let i = 0; i < fields.length; i++) {
185
+ const entry = fields[i] ?? "";
186
+ if (entry.length < 4) continue;
187
+ const xy = entry.slice(0, 2);
188
+ const path = entry.slice(3);
189
+ if (xy.includes("R") || xy.includes("C")) {
190
+ i++;
191
+ if (xy.includes("R")) removed.push(fields[i] ?? "");
192
+ }
193
+ if (xy.includes("D")) removed.push(path);
194
+ else files.push(path);
195
+ }
196
+ return { files, removed };
197
+ }
198
+ async function changedFiles(cwd) {
199
+ const prefix = (await git(["rev-parse", "--show-prefix"], cwd)).trim();
200
+ const status = await git(
201
+ ["status", "--porcelain=v1", "-z", "--untracked-files=all"],
202
+ cwd
203
+ );
204
+ const { files, removed } = parsePorcelain(status);
205
+ const absolute = (path) => resolve2(cwd, posix.relative(prefix, path));
206
+ return { files: files.map(absolute), removed: removed.map(absolute), dirty: status.length > 0 };
207
+ }
208
+
209
+ // src/family/commands/check.ts
210
+ var CHECK_FORMATS = ["pretty", "json", "github"];
211
+ async function runDomain(domain, ctx) {
212
+ const { family, cwd, inputs, onNotice } = ctx;
213
+ const configPath = family.configPath;
214
+ switch (domain) {
215
+ case "meta": {
216
+ const [{ runValidate }, { render: renderMeta }] = await Promise.all([
217
+ import("./validate-53RKM2XG.js"),
218
+ import("./reporters-K2VUKSAK.js")
219
+ ]);
220
+ const run2 = await runValidate({ inputs, configPath, cwd, skipDefaultOnly: true, onNotice });
221
+ if (run2.results.length === 0) {
222
+ return { skipped: family.sections.has("meta") ? META_DEFAULTS_ONLY : NOT_SET_UP.meta };
223
+ }
224
+ return {
225
+ failed: run2.summary.failed > 0,
226
+ render: (format, color) => renderMeta(format, run2.results, run2.summary, { color, quiet: true, frame: run2.frame, onNotice })
227
+ };
228
+ }
229
+ case "cite": {
230
+ const [{ runCheck: runCite }, { renderCheckPretty: citePretty }, { renderCheckJson: citeJson }, { renderCheckGithub: citeGithub }] = await Promise.all([
231
+ import("./check-ASPIHA6B.js"),
232
+ import("./pretty-CXSDXNAS.js"),
233
+ import("./json-7WV7KL6H.js"),
234
+ import("./github-SXPGP5DB.js")
235
+ ]);
236
+ const run2 = await runCite({ inputs, configPath, cwd, onNotice });
237
+ if (!run2.pages.some((p) => p.citations.length > 0 || p.findings.length > 0)) {
238
+ return { skipped: NOT_SET_UP.cite };
239
+ }
240
+ return {
241
+ failed: run2.summary.failed > 0,
242
+ render: (format, color) => format === "json" ? citeJson(run2) : format === "github" ? citeGithub(run2) : citePretty(run2, { color, quiet: true })
243
+ };
244
+ }
245
+ case "lint": {
246
+ if (!family.sections.has("lint")) return { skipped: NOT_SET_UP.lint };
247
+ const [{ runLint }, { render: renderLint }] = await Promise.all([
248
+ import("./lint-ASMJLLPA.js"),
249
+ import("./reporters-HUY7UXFS.js")
250
+ ]);
251
+ const run2 = await runLint({ inputs, configPath, cwd, onNotice });
252
+ return {
253
+ failed: run2.summary.failed > 0,
254
+ render: (format, color) => renderLint(run2, format, { color })
255
+ };
256
+ }
257
+ case "docevals": {
258
+ const [{ runRun: runDocevals }, { render: renderDocevals }, { DocevalsError }] = await Promise.all([
259
+ import("./run-3DYJNRIG.js"),
260
+ import("./reporters-M6LJ2IYU.js"),
261
+ import("./types-Y6TXHM7M.js")
262
+ ]);
263
+ let report;
264
+ try {
265
+ report = await runDocevals(inputs, {
266
+ config: configPath,
267
+ cwd,
268
+ deterministicOnly: true,
269
+ generate: false,
270
+ execution: false,
271
+ toolVersion: package_default.version
272
+ });
273
+ } catch (err) {
274
+ if (err instanceof DocevalsError && err.code === "nothing-resolved") {
275
+ return { skipped: NOT_SET_UP.docevals };
276
+ }
277
+ throw err;
278
+ }
279
+ return {
280
+ failed: report.exitCode !== 0,
281
+ render: (format, color) => renderDocevals(report, format, { color })
282
+ };
283
+ }
284
+ case "term": {
285
+ const [{ runCheck: runTerm }, { renderFindingsPretty: termPretty }, { renderFindingsJson: termJson }, { renderFindingsGithub: termGithub }] = await Promise.all([
286
+ import("./check-EDLBYL5N.js"),
287
+ import("./pretty-A5EGTN35.js"),
288
+ import("./json-SY7KLNC7.js"),
289
+ import("./github-6QMYOHC3.js")
290
+ ]);
291
+ const report = await runTerm({ inputs, configPath, cwd, allowEmpty: true, onNotice });
292
+ if (report.terms === 0) return { skipped: NOT_SET_UP.term };
293
+ return {
294
+ failed: report.summary.failed > 0,
295
+ render: (format, color) => format === "json" ? termJson(report) : format === "github" ? termGithub(report) : termPretty(report, { color, references: true })
296
+ };
297
+ }
298
+ case "graph": {
299
+ if (!family.sections.has("graph")) return { skipped: NOT_SET_UP.graph };
300
+ const [{ buildGraph }, { runCheck: runGraph, renderCheck: renderGraph }] = await Promise.all([
301
+ import("./build-COYIQ25L.js"),
302
+ import("./check-HYNGXYJV.js")
303
+ ]);
304
+ const built = await buildGraph({ config: configPath, cwd });
305
+ for (const warning of built.warnings) onNotice(warning);
306
+ const report = await runGraph({ config: configPath, cwd, turtle: built.turtle });
307
+ return {
308
+ failed: report.exitCode !== 0,
309
+ render: (format) => renderGraph(report, format)
310
+ };
311
+ }
312
+ }
313
+ }
314
+ async function outcome(domain, ctx) {
315
+ const command = COMMANDS[domain];
316
+ try {
317
+ const result = await runDomain(domain, ctx);
318
+ if ("skipped" in result) return { command, status: "skipped", message: result.skipped };
319
+ return { command, status: result.failed ? "fail" : "pass", render: result.render };
320
+ } catch (err) {
321
+ return { command, status: "error", message: errorMessage(err) };
322
+ }
323
+ }
324
+ function isDocument(label) {
325
+ return supportedExtensions().includes(extname(label).toLowerCase());
326
+ }
327
+ function runFamilyCheck(opts) {
328
+ return withSharedWalks(() => checkUnshared(opts));
329
+ }
330
+ async function checkUnshared(opts) {
331
+ const cwd = resolve3(opts.cwd ?? process.cwd());
332
+ const onNotice = opts.onNotice ?? (() => void 0);
333
+ const family = await loadFamily(cwd, opts.configPath);
334
+ if (family.collections.length === 0) throw nothingSetUpError();
335
+ const isMember = (label) => collectionsOf(family, cwd, label).length > 0;
336
+ let files;
337
+ let domains;
338
+ let inputs;
339
+ switch (opts.scope.kind) {
340
+ case "all":
341
+ files = await listMembers(family, cwd);
342
+ inputs = [];
343
+ domains = [...DOMAINS];
344
+ break;
345
+ case "paths": {
346
+ const { files: named } = await resolveTargetSet({
347
+ inputs: opts.scope.paths,
348
+ cwd,
349
+ ...opts.allowMissing === true ? { allowEmpty: true } : {}
350
+ });
351
+ const outside = named.filter((label) => !isMember(label));
352
+ if (outside.length > 0) {
353
+ onNotice(`Skipped ${plural(outside.length, "file")} outside every collection: ${outside.join(", ")}`);
354
+ }
355
+ files = named.filter((label) => isMember(label) && isDocument(label));
356
+ inputs = files;
357
+ domains = files.length > 0 ? ["meta", "cite", "lint", "docevals"] : [];
358
+ break;
359
+ }
360
+ case "changed": {
361
+ const changed = await changedFiles(cwd);
362
+ if (!changed.dirty) return { status: "pass", files: [], checks: [] };
363
+ const memberDocuments = (paths) => paths.map((path) => labelFrom(cwd, path)).filter((l) => isDocument(l) && isMember(l));
364
+ files = memberDocuments(changed.files);
365
+ inputs = files;
366
+ const pageChanged = files.length > 0 || memberDocuments(changed.removed).length > 0;
367
+ domains = [
368
+ ...files.length > 0 ? ["meta", "lint", "docevals"] : [],
369
+ "cite",
370
+ ...pageChanged ? ["term"] : []
371
+ ];
372
+ break;
373
+ }
374
+ }
375
+ const checks = [];
376
+ for (const domain of domains) {
377
+ const setWide = domain === "term" || domain === "graph" || domain === "cite" && opts.scope.kind !== "paths";
378
+ checks.push(await outcome(domain, { family, cwd, inputs: setWide ? [] : inputs, onNotice }));
379
+ }
380
+ if (opts.scope.kind === "all" && checks.every((c) => c.status === "skipped")) {
381
+ throw nothingSetUpError();
382
+ }
383
+ return { status: checks.some((c) => c.status === "fail") ? "fail" : "pass", files, checks };
384
+ }
385
+ function exitCodeFor(run2) {
386
+ if (run2.checks.some((c) => c.status === "error")) return 2;
387
+ return run2.status === "fail" ? 1 : 0;
388
+ }
389
+ function isRan(check) {
390
+ return check.status === "pass" || check.status === "fail";
391
+ }
392
+ function firstLine(message) {
393
+ return message.split("\n", 1)[0] ?? "";
394
+ }
395
+ function renderFailures(run2) {
396
+ return run2.checks.filter((c) => c.status === "fail").map((c) => `${c.command}
397
+ ${c.render("pretty", false)}`).join("\n\n");
398
+ }
399
+ function renderPretty(run2, color) {
400
+ const blocks = [];
401
+ for (const check of run2.checks) {
402
+ if (isRan(check)) blocks.push(`${check.command}
403
+ ${check.render("pretty", color)}`);
404
+ }
405
+ const notRun = run2.checks.filter((c) => !isRan(c));
406
+ if (notRun.length > 0) {
407
+ const width = Math.max(...notRun.map((c) => c.command.length)) + 3;
408
+ blocks.push(
409
+ notRun.map((c) => `${c.status.padEnd(9)}${c.command.padEnd(width)}${firstLine(c.message)}`).join("\n")
410
+ );
411
+ }
412
+ const count = (status) => run2.checks.filter((c) => c.status === status).length;
413
+ const errors = count("error");
414
+ blocks.push(
415
+ `${plural(run2.checks.length, "check")} over ${plural(run2.files.length, "file")}: ${String(count("fail"))} failed, ${String(count("skipped"))} skipped` + (errors > 0 ? `, ${String(errors)} could not run` : "")
416
+ );
417
+ return blocks.join("\n\n");
418
+ }
419
+ function jsonEntry(c) {
420
+ if (!isRan(c)) return { command: c.command, status: c.status, message: c.message };
421
+ try {
422
+ return { command: c.command, status: c.status, report: JSON.parse(c.render("json", false)) };
423
+ } catch {
424
+ return { command: c.command, status: "error", message: `${c.command} -f json printed output that is not JSON` };
425
+ }
426
+ }
427
+ function renderJson(run2) {
428
+ return JSON.stringify(
429
+ {
430
+ status: run2.status,
431
+ files: run2.files,
432
+ checks: run2.checks.map(jsonEntry)
433
+ },
434
+ null,
435
+ 2
436
+ );
437
+ }
438
+ function renderGithub(run2) {
439
+ return run2.checks.filter(isRan).map((c) => c.render("github", false)).filter((text) => text.length > 0).join("\n");
440
+ }
441
+ function render(run2, format, color) {
442
+ return format === "json" ? renderJson(run2) : format === "github" ? renderGithub(run2) : renderPretty(run2, color);
443
+ }
444
+ var EDIT_TOOLS = ["Edit", "Write", "MultiEdit", "NotebookEdit"];
445
+ function hookReply(run2, envelope) {
446
+ const failed = run2.status === "fail";
447
+ if (envelope.event === "PostToolUse") {
448
+ const files = run2.files.join(", ");
449
+ if (failed) {
450
+ return {
451
+ exitCode: 2,
452
+ stderr: `manni found errors in ${files}. Fix them before you continue.
453
+
454
+ ${renderFailures(run2)}
455
+ `
456
+ };
457
+ }
458
+ const errors = run2.checks.filter((c) => c.status === "error");
459
+ if (errors.length === 0) return { exitCode: 0 };
460
+ const additionalContext = errors.map((c) => `manni ${c.command} could not check ${files}: ${firstLine(c.message)}`).join("\n");
461
+ return {
462
+ exitCode: 0,
463
+ stdout: `${JSON.stringify({ hookSpecificOutput: { hookEventName: "PostToolUse", additionalContext } })}
464
+ `
465
+ };
466
+ }
467
+ if (envelope.event === "Stop" && failed) {
468
+ const reply = envelope.stopHookActive ? { systemMessage: "manni still reports errors after one repair pass. Run manni check to see them." } : {
469
+ decision: "block",
470
+ reason: `manni found errors in the files you changed. Fix them, then finish.
471
+
472
+ ${renderFailures(run2)}`
473
+ };
474
+ return { exitCode: 0, stdout: `${JSON.stringify(reply)}
475
+ ` };
476
+ }
477
+ return { exitCode: 0 };
478
+ }
479
+ function hookFailure(message, envelope, file) {
480
+ if (envelope.event !== "PostToolUse" || file === void 0) return { exitCode: 0 };
481
+ const additionalContext = `manni check could not check ${file}: ${firstLine(message)}`;
482
+ return {
483
+ exitCode: 0,
484
+ stdout: `${JSON.stringify({ hookSpecificOutput: { hookEventName: "PostToolUse", additionalContext } })}
485
+ `
486
+ };
487
+ }
488
+
489
+ // src/family/commands/status.ts
490
+ import { appendFileSync, existsSync, readFileSync } from "node:fs";
491
+ import { extname as extname2, resolve as resolve4 } from "node:path";
492
+ var STATUS_FORMATS = ["pretty", "json"];
493
+ function pages(n, one, many) {
494
+ return n === 1 ? `1 page ${one}` : `${String(n)} pages ${many}`;
495
+ }
496
+ function ownSchemaCount(cwd, members) {
497
+ let n = 0;
498
+ for (const label of members) {
499
+ const extractor = extractorForExtension(extname2(label));
500
+ if (extractor === void 0) continue;
501
+ try {
502
+ const { data } = extractor.extract(readFileSync(resolve4(cwd, label), "utf8"), label);
503
+ if (data.$schema !== void 0) n++;
504
+ } catch {
505
+ }
506
+ }
507
+ return n;
508
+ }
509
+ async function citedPages(cwd, configPath) {
510
+ const { prepareRun, readTarget } = await import("./check-ASPIHA6B.js");
511
+ const { readPage } = await import("./page-KSGV5RD4.js");
512
+ const prepared = await prepareRun({ inputs: [], configPath, cwd, checkSources: false }, "checked", "check");
513
+ let n = 0;
514
+ for (const file of prepared.files) {
515
+ const content = await readTarget(prepared.run, file);
516
+ const { citations } = (await prepared.setupFor(file, content)).options;
517
+ const read = readPage(file, content, { markers: false, ...citations === void 0 ? {} : { citations } });
518
+ if (read.citations.length > 0) n++;
519
+ }
520
+ return n;
521
+ }
522
+ async function row(domain, family, cwd, members) {
523
+ const configPath = family.configPath;
524
+ const inPlay = (reason) => ({ name: domain, status: "in-play", reason });
525
+ const notSetUp = { name: domain, status: "not-set-up", reason: NOT_SET_UP[domain] };
526
+ const section = family.sections.has(domain);
527
+ switch (domain) {
528
+ case "meta": {
529
+ if (section) return inPlay("meta: section");
530
+ const n = ownSchemaCount(cwd, members);
531
+ return n > 0 ? inPlay(pages(n, "names its own $schema", "name their own $schema")) : notSetUp;
532
+ }
533
+ case "cite": {
534
+ const n = await citedPages(cwd, configPath);
535
+ return n > 0 ? inPlay(pages(n, "carries citations", "carry citations")) : notSetUp;
536
+ }
537
+ case "docevals": {
538
+ const { runList: listEvals } = await import("./list-KZNVTNVC.js");
539
+ const { plans } = await listEvals([], { config: configPath, cwd });
540
+ const n = plans.filter((p) => !p.skip && p.evals.length > 0).length;
541
+ if (n === 0) return notSetUp;
542
+ return inPlay(section ? "docevals: section" : pages(n, "declares evals", "declare evals"));
543
+ }
544
+ case "term": {
545
+ const { runList: listTerms } = await import("./list-Q57YTFUQ.js");
546
+ const { terms } = await listTerms({ inputs: [], configPath, cwd, allowEmpty: true });
547
+ return terms.length > 0 ? inPlay(plural(terms.length, "term")) : notSetUp;
548
+ }
549
+ case "lint":
550
+ case "graph":
551
+ return section ? inPlay(`${domain}: section`) : notSetUp;
552
+ }
553
+ }
554
+ function runStatus(opts = {}) {
555
+ return withSharedWalks(() => statusUnshared(opts));
556
+ }
557
+ async function statusUnshared(opts) {
558
+ const cwd = resolve4(opts.cwd ?? process.cwd());
559
+ const family = await loadFamily(cwd, opts.configPath);
560
+ const members = family.collections.length === 0 ? [] : await listMembers(family, cwd);
561
+ const domains = [];
562
+ for (const domain of DOMAINS) {
563
+ if (family.collections.length === 0) {
564
+ domains.push({ name: domain, status: "not-set-up", reason: "no collections: in manni.config.yaml" });
565
+ continue;
566
+ }
567
+ try {
568
+ domains.push(await row(domain, family, cwd, members));
569
+ } catch (err) {
570
+ const message = errorMessage(err).split("\n", 1)[0] ?? "";
571
+ domains.push({ name: domain, status: "unknown", reason: `manni ${COMMANDS[domain]} could not run: ${message}` });
572
+ }
573
+ }
574
+ for (const [name, reason] of NOT_CHECKED) domains.push({ name, status: "not-checked", reason });
575
+ return {
576
+ version: package_default.version,
577
+ config: family.file.source,
578
+ collections: family.collections.map((c) => ({
579
+ name: c.name,
580
+ files: members.filter((label) => collectionsOf(family, cwd, label).includes(c.name)).length
581
+ })),
582
+ domains
583
+ };
584
+ }
585
+ var STATE_LABEL = {
586
+ "in-play": "in play",
587
+ "not-set-up": "not set up",
588
+ "not-checked": "not checked",
589
+ unknown: "unknown"
590
+ };
591
+ function renderStatus(report, format) {
592
+ if (format === "json") return JSON.stringify(report, null, 2);
593
+ const head = [
594
+ `manni ${report.version}`,
595
+ `config ${report.config}`,
596
+ ...report.collections.map((c) => `collection ${c.name} (${plural(c.files, "file")})`)
597
+ ].join(" ");
598
+ const rows = report.domains.map(
599
+ (d) => `${d.name.padEnd(11)}${STATE_LABEL[d.status].padEnd(14)}${d.reason}`
600
+ );
601
+ return [head, "", ...rows].join("\n");
602
+ }
603
+ var FIX_SKILL = "manni:fix";
604
+ var PAGE_WIDE = [["term", "the glossary"]];
605
+ function prose(items, conjunction) {
606
+ return items.length <= 1 ? items[0] ?? "" : `${items.slice(0, -1).join(", ")} ${conjunction} ${items.at(-1) ?? ""}`;
607
+ }
608
+ function agentLines(report) {
609
+ const names = prose(report.collections.map((c) => c.name), "or");
610
+ const inPlay = new Set(report.domains.filter((d) => d.status === "in-play").map((d) => d.name));
611
+ const plus = inPlay.has("cite") ? ", plus every citation" : "";
612
+ const pageWide = PAGE_WIDE.filter(([domain]) => inPlay.has(domain)).map(([, what]) => what);
613
+ const also = pageWide.length === 0 ? "" : ` It checks ${prose(pageWide, "and")} too when you changed a page.`;
614
+ return [
615
+ `After you edit a file in ${names}, manni check runs on it, and errors come back to you at once.`,
616
+ `Before you finish, manni check runs on every file you changed${plus}.${also} You get one repair pass.`,
617
+ `The ${FIX_SKILL} skill says how to repair each finding.`
618
+ ].join("\n");
619
+ }
620
+ var MODEL_ID = /^[A-Za-z0-9._:/@-]+$/;
621
+ function exportGeneratedBy(envelope, env = process.env) {
622
+ const file = env.CLAUDE_ENV_FILE;
623
+ const model = envelope.model?.replace(/\[[^\]]*\]$/, "");
624
+ if (model === void 0 || !MODEL_ID.test(model)) return false;
625
+ if (file === void 0 || file === "" || env.MANNI_GENERATED_BY !== void 0) return false;
626
+ const existing = existsSync(file) ? readFileSync(file, "utf8") : "";
627
+ const lead = existing === "" || existing.endsWith("\n") ? "" : "\n";
628
+ appendFileSync(file, `${lead}export MANNI_GENERATED_BY=${model}
629
+ `, "utf8");
630
+ return true;
631
+ }
632
+
633
+ // src/family/cli.ts
634
+ function send(reply) {
635
+ if (reply.stdout !== void 0) process.stdout.write(reply.stdout);
636
+ if (reply.stderr !== void 0) process.stderr.write(reply.stderr);
637
+ process.exitCode = reply.exitCode;
638
+ }
639
+ function hookScope(envelope, cwd) {
640
+ if (envelope.event === "Stop") return { scope: { kind: "changed" } };
641
+ if (envelope.event !== "PostToolUse") return void 0;
642
+ if (envelope.toolName === void 0 || !EDIT_TOOLS.includes(envelope.toolName)) return void 0;
643
+ if (envelope.filePath === void 0) return void 0;
644
+ const file = labelFrom(cwd, resolve5(cwd, envelope.filePath));
645
+ return { scope: { kind: "paths", paths: [file] }, file };
646
+ }
647
+ async function checkUnderHook(paths, options, envelope) {
648
+ const cwd = resolve5(envelope.cwd ?? process.cwd());
649
+ const asked = paths.length > 0 ? { scope: { kind: "paths", paths }, file: paths.join(", ") } : hookScope(envelope, cwd);
650
+ if (asked === void 0) return;
651
+ try {
652
+ const run2 = await runFamilyCheck({
653
+ cwd,
654
+ scope: asked.scope,
655
+ allowMissing: true,
656
+ ...options.config === void 0 ? {} : { configPath: options.config },
657
+ // stdout and stderr are the hook's channels; a notice is not for the agent.
658
+ onNotice: () => void 0
659
+ });
660
+ send(hookReply(run2, envelope));
661
+ } catch (err) {
662
+ if (err instanceof FamilyError && err.quiet) return;
663
+ send(hookFailure(errorMessage(err), envelope, asked.file));
664
+ }
665
+ }
666
+ function buildCheck() {
667
+ return new Command("check").description("Run every check this repository has set up, and nothing else").argument("[paths...]", "files, directories, or globs; the per-file checks run on the collection members among them").option("-c, --config <path>", "path to a manni config file").addOption(
668
+ new Option("-f, --format <format>", "output (not read under a hook)").choices(CHECK_FORMATS).default("pretty")
669
+ ).option("--no-color", "disable colored output").showHelpAfterError("(add --help for usage)").exitOverride().addHelpText(
670
+ "after",
671
+ [
672
+ "",
673
+ "Examples:",
674
+ " manni check # every in-play check, the CI gate",
675
+ " manni check docs/limits.md # per-file checks on one page",
676
+ " manni check -f github # in a GitHub workflow",
677
+ " manni check docs/ -f json # scripting form"
678
+ ].join("\n")
679
+ ).action(async (paths, options) => {
680
+ const envelope = await readEnvelope();
681
+ if (envelope !== void 0) {
682
+ await checkUnderHook(paths, options, envelope);
683
+ return;
684
+ }
685
+ try {
686
+ const run2 = await runFamilyCheck({
687
+ scope: paths.length > 0 ? { kind: "paths", paths } : { kind: "all" },
688
+ ...options.config === void 0 ? {} : { configPath: options.config },
689
+ onNotice: notice
690
+ });
691
+ for (const check of run2.checks) {
692
+ if (check.status === "error") {
693
+ process.stderr.write(`${programName()} ${check.command} could not run: ${check.message}
694
+ `);
695
+ }
696
+ }
697
+ const color = shouldColor({ noColor: !options.color, isTTY: process.stdout.isTTY });
698
+ const text = render(run2, options.format, color);
699
+ if (text.length > 0) process.stdout.write(`${text}
700
+ `);
701
+ process.exitCode = exitCodeFor(run2);
702
+ } catch (err) {
703
+ fail(err);
704
+ }
705
+ });
706
+ }
707
+ function buildStatus() {
708
+ return new Command("status").description("Say what is set up here, and so what manni check runs").option("-c, --config <path>", "path to a manni config file").addOption(
709
+ new Option("-f, --format <format>", "output").choices(STATUS_FORMATS).default("pretty")
710
+ ).showHelpAfterError("(add --help for usage)").exitOverride().action(async (options) => {
711
+ const envelope = await readEnvelope();
712
+ const configOption = options.config === void 0 ? {} : { configPath: options.config };
713
+ if (envelope?.event === "SessionStart") {
714
+ try {
715
+ const report = await runStatus({ cwd: resolve5(envelope.cwd ?? process.cwd()), ...configOption });
716
+ const lines = report.domains.some((d) => d.status === "in-play") ? `
717
+
718
+ ${agentLines(report)}` : "";
719
+ process.stdout.write(`${renderStatus(report, "pretty")}${lines}
720
+ `);
721
+ exportGeneratedBy(envelope);
722
+ } catch {
723
+ }
724
+ return;
725
+ }
726
+ try {
727
+ const report = await runStatus(configOption);
728
+ process.stdout.write(`${renderStatus(report, options.format)}
729
+ `);
730
+ } catch (err) {
731
+ fail(err);
732
+ }
733
+ });
734
+ }
735
+ export {
736
+ buildCheck,
737
+ buildStatus
738
+ };
739
+ //# sourceMappingURL=cli-PYPX6O6E.js.map