@hawkeyexl/manni 4.8.1 → 4.10.0

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 (173) hide show
  1. package/README.md +1 -1
  2. package/dist/{batch-QMHYWGUA.js → batch-6NICDKRE.js} +12 -12
  3. package/dist/{build-ZGA3O3P4.js → build-3KP2K3XN.js} +11 -11
  4. package/dist/{calibrate-KBMFGKP3.js → calibrate-LUA3DWKD.js} +13 -13
  5. package/dist/{capture-C46UXFRK.js → capture-NETOHCB4.js} +12 -12
  6. package/dist/{check-UMI5ACCE.js → check-7B77ZD2N.js} +11 -11
  7. package/dist/{check-OAJWC3WD.js → check-E4QCB7LS.js} +5 -5
  8. package/dist/{check-CORYIW76.js → check-NLL4NRYA.js} +13 -13
  9. package/dist/{check-LLQ6PJV3.js → check-PTECPIIB.js} +10 -10
  10. package/dist/{chunk-N7J5C35C.js → chunk-2BV4FBC7.js} +2 -2
  11. package/dist/chunk-2BV4FBC7.js.map +1 -0
  12. package/dist/{chunk-PO5W6JAP.js → chunk-2JV7C4YV.js} +7 -7
  13. package/dist/{chunk-Z27GYQOY.js → chunk-2UCC26MO.js} +8 -8
  14. package/dist/{chunk-WBETAXO2.js → chunk-2W34HX2U.js} +5 -5
  15. package/dist/{chunk-ZIGIJBXG.js → chunk-2YJ5H5E6.js} +9 -9
  16. package/dist/{chunk-HWNSIEZK.js → chunk-3E2X2RBU.js} +6 -6
  17. package/dist/{chunk-Q3GFZJTY.js → chunk-4DLF5SA4.js} +35 -17
  18. package/dist/chunk-4DLF5SA4.js.map +1 -0
  19. package/dist/{chunk-BYVH727K.js → chunk-55GMOVKW.js} +2 -2
  20. package/dist/{chunk-C2JPBQCJ.js → chunk-5REEVKGH.js} +2 -2
  21. package/dist/{chunk-XXDXIIQ4.js → chunk-6AGESHHM.js} +2 -2
  22. package/dist/{chunk-GQBVZS5G.js → chunk-6LR73NMO.js} +6 -6
  23. package/dist/{chunk-XKBEHKWO.js → chunk-6M5VJOC2.js} +2 -1
  24. package/dist/{chunk-F734HIHT.js → chunk-7Y3N4Y72.js} +3 -3
  25. package/dist/{chunk-WUFP4V7B.js → chunk-ABHG6I3G.js} +1292 -126
  26. package/dist/chunk-ABHG6I3G.js.map +1 -0
  27. package/dist/{chunk-FEALEYSE.js → chunk-AO5TSDKT.js} +4 -4
  28. package/dist/{chunk-LF6FOF6U.js → chunk-BD7IXBWE.js} +15 -26
  29. package/dist/{chunk-LF6FOF6U.js.map → chunk-BD7IXBWE.js.map} +1 -1
  30. package/dist/{chunk-NB4ILZMQ.js → chunk-CCWMACJL.js} +8 -8
  31. package/dist/{chunk-K43X5VDR.js → chunk-D2UW3ZCK.js} +6 -6
  32. package/dist/{chunk-SV6UEQCU.js → chunk-DFCQ6BMI.js} +4 -4
  33. package/dist/{chunk-ECVQNGTH.js → chunk-DNZUBCGZ.js} +3 -3
  34. package/dist/{chunk-POGYWOJ2.js → chunk-EAUIQADY.js} +3 -3
  35. package/dist/{chunk-XDS3KQCK.js → chunk-G6FNWRAI.js} +4 -4
  36. package/dist/{chunk-6HMLYFEU.js → chunk-G7XD4QH5.js} +810 -5
  37. package/dist/chunk-G7XD4QH5.js.map +1 -0
  38. package/dist/{chunk-WUXD6VBD.js → chunk-GB2XPITA.js} +2 -2
  39. package/dist/{chunk-KPXOJMQ6.js → chunk-GCKHSBEN.js} +2 -2
  40. package/dist/{chunk-6QBJHRFC.js → chunk-GDLHTI5R.js} +129 -26
  41. package/dist/chunk-GDLHTI5R.js.map +1 -0
  42. package/dist/{chunk-NNFSIRVE.js → chunk-GXN7RRHR.js} +3 -3
  43. package/dist/{chunk-RCS5YFY2.js → chunk-H26VDFDS.js} +2 -2
  44. package/dist/{chunk-4VQBHTGA.js → chunk-IJ62BB2T.js} +5 -5
  45. package/dist/{chunk-WT6HMEEF.js → chunk-KBG463UK.js} +35 -8
  46. package/dist/{chunk-WT6HMEEF.js.map → chunk-KBG463UK.js.map} +1 -1
  47. package/dist/{chunk-UWY4B2PM.js → chunk-LQZQ5KGG.js} +4 -4
  48. package/dist/{chunk-VSOYZ7QH.js → chunk-PK7EKJ5T.js} +4 -4
  49. package/dist/{chunk-YVVMC4SZ.js → chunk-QBVP3SQP.js} +4 -4
  50. package/dist/{chunk-6MNOMHFI.js → chunk-QJRQ4BRC.js} +11 -11
  51. package/dist/{chunk-7LC4YJJ3.js → chunk-RODZ7MB7.js} +3 -3
  52. package/dist/{chunk-SXODK43S.js → chunk-RZVCWX5R.js} +4 -4
  53. package/dist/{chunk-5LAKRYXU.js → chunk-SUTMSDQ2.js} +3 -3
  54. package/dist/{chunk-6KKZXB2O.js → chunk-VVVKBUBO.js} +2 -2
  55. package/dist/{chunk-6ZR24A4S.js → chunk-VZVEP2OZ.js} +2 -2
  56. package/dist/{chunk-3FG2UU3H.js → chunk-WN47MNSK.js} +4 -4
  57. package/dist/{chunk-LAU6SVTJ.js → chunk-XU73V5XT.js} +7 -7
  58. package/dist/{chunk-77L5GNVO.js → chunk-Z5YHMRLF.js} +2 -2
  59. package/dist/{chunk-AO66Q66S.js → chunk-ZHRPH52H.js} +2 -2
  60. package/dist/chunk-ZMECS2IJ.js +27 -0
  61. package/dist/chunk-ZMECS2IJ.js.map +1 -0
  62. package/dist/{chunk-VD3EQSBI.js → chunk-ZXXFP2LA.js} +2 -2
  63. package/dist/{cli-SBJY2NQH.js → cli-4YYC6LCY.js} +15 -15
  64. package/dist/{cli-4B5RWL7P.js → cli-BIIUKPTE.js} +13 -12
  65. package/dist/{cli-4B5RWL7P.js.map → cli-BIIUKPTE.js.map} +1 -1
  66. package/dist/{cli-XIQKPNA7.js → cli-EH3I4IUX.js} +32 -32
  67. package/dist/cli-EH3I4IUX.js.map +1 -0
  68. package/dist/{cli-MNNOXWYU.js → cli-HO62TOM2.js} +8 -8
  69. package/dist/cli-LWST5FQH.js +839 -0
  70. package/dist/cli-LWST5FQH.js.map +1 -0
  71. package/dist/{cli-UB5W75GJ.js → cli-P2X7PNY6.js} +12 -12
  72. package/dist/{cli-QR3ZQZA4.js → cli-SGVFZOAW.js} +19 -19
  73. package/dist/{cli-5AML7QR2.js → cli-TELPAMJO.js} +14 -14
  74. package/dist/{cli-I4GBPLRM.js → cli-UETKXHJN.js} +3 -3
  75. package/dist/{cli-WWDARAWS.js → cli-V2DI3K2R.js} +14 -14
  76. package/dist/cli.js +18 -11
  77. package/dist/cli.js.map +1 -1
  78. package/dist/{config-YWSNBFEE.js → config-TYXYQK3I.js} +3 -3
  79. package/dist/docmeta.js +7 -7
  80. package/dist/{github-TIZ3ZR3D.js → github-ESK45CEZ.js} +10 -10
  81. package/dist/{github-WKOJRW7P.js → github-WER7JUTN.js} +12 -12
  82. package/dist/index.js +35 -34
  83. package/dist/index.js.map +1 -1
  84. package/dist/{json-4FUOZ3XX.js → json-QR4G35KA.js} +10 -10
  85. package/dist/{lint-7VQFESHK.js → lint-QTI7XK2A.js} +11 -10
  86. package/dist/{list-7U2MBDIM.js → list-JO4G3TS3.js} +10 -10
  87. package/dist/{list-W6EUAOBV.js → list-O2MJUP5V.js} +10 -10
  88. package/dist/{page-WZLBKSCD.js → page-FSXDXCDD.js} +9 -9
  89. package/dist/{prepare-FPEWAHJH.js → prepare-UPIBTFNS.js} +11 -11
  90. package/dist/{pretty-7M4X4TCY.js → pretty-4IONWSEP.js} +10 -10
  91. package/dist/{pretty-CUCMQU5R.js → pretty-R4BQD2VH.js} +11 -11
  92. package/dist/{reporters-DQVSDXV6.js → reporters-DHO2BXAD.js} +5 -5
  93. package/dist/{reporters-KYJE54JS.js → reporters-FPP6JNDP.js} +9 -9
  94. package/dist/{run-ABGXGOGQ.js → run-YH5Z7RJ7.js} +10 -10
  95. package/dist/{term-HTIG3YDC.js → term-ASM4LVYC.js} +279 -150
  96. package/dist/term-ASM4LVYC.js.map +1 -0
  97. package/dist/{validate-HWNU3MDY.js → validate-7JI3H57P.js} +5 -5
  98. package/package.json +1 -1
  99. package/plugin/manni/.claude-plugin/plugin.json +1 -1
  100. package/dist/chunk-6HMLYFEU.js.map +0 -1
  101. package/dist/chunk-6QBJHRFC.js.map +0 -1
  102. package/dist/chunk-N7J5C35C.js.map +0 -1
  103. package/dist/chunk-Q3GFZJTY.js.map +0 -1
  104. package/dist/chunk-WUFP4V7B.js.map +0 -1
  105. package/dist/cli-XIQKPNA7.js.map +0 -1
  106. package/dist/term-HTIG3YDC.js.map +0 -1
  107. /package/dist/{batch-QMHYWGUA.js.map → batch-6NICDKRE.js.map} +0 -0
  108. /package/dist/{build-ZGA3O3P4.js.map → build-3KP2K3XN.js.map} +0 -0
  109. /package/dist/{calibrate-KBMFGKP3.js.map → calibrate-LUA3DWKD.js.map} +0 -0
  110. /package/dist/{capture-C46UXFRK.js.map → capture-NETOHCB4.js.map} +0 -0
  111. /package/dist/{check-LLQ6PJV3.js.map → check-7B77ZD2N.js.map} +0 -0
  112. /package/dist/{check-OAJWC3WD.js.map → check-E4QCB7LS.js.map} +0 -0
  113. /package/dist/{check-CORYIW76.js.map → check-NLL4NRYA.js.map} +0 -0
  114. /package/dist/{check-UMI5ACCE.js.map → check-PTECPIIB.js.map} +0 -0
  115. /package/dist/{chunk-PO5W6JAP.js.map → chunk-2JV7C4YV.js.map} +0 -0
  116. /package/dist/{chunk-Z27GYQOY.js.map → chunk-2UCC26MO.js.map} +0 -0
  117. /package/dist/{chunk-WBETAXO2.js.map → chunk-2W34HX2U.js.map} +0 -0
  118. /package/dist/{chunk-ZIGIJBXG.js.map → chunk-2YJ5H5E6.js.map} +0 -0
  119. /package/dist/{chunk-HWNSIEZK.js.map → chunk-3E2X2RBU.js.map} +0 -0
  120. /package/dist/{chunk-BYVH727K.js.map → chunk-55GMOVKW.js.map} +0 -0
  121. /package/dist/{chunk-C2JPBQCJ.js.map → chunk-5REEVKGH.js.map} +0 -0
  122. /package/dist/{chunk-XXDXIIQ4.js.map → chunk-6AGESHHM.js.map} +0 -0
  123. /package/dist/{chunk-GQBVZS5G.js.map → chunk-6LR73NMO.js.map} +0 -0
  124. /package/dist/{chunk-XKBEHKWO.js.map → chunk-6M5VJOC2.js.map} +0 -0
  125. /package/dist/{chunk-F734HIHT.js.map → chunk-7Y3N4Y72.js.map} +0 -0
  126. /package/dist/{chunk-FEALEYSE.js.map → chunk-AO5TSDKT.js.map} +0 -0
  127. /package/dist/{chunk-NB4ILZMQ.js.map → chunk-CCWMACJL.js.map} +0 -0
  128. /package/dist/{chunk-K43X5VDR.js.map → chunk-D2UW3ZCK.js.map} +0 -0
  129. /package/dist/{chunk-SV6UEQCU.js.map → chunk-DFCQ6BMI.js.map} +0 -0
  130. /package/dist/{chunk-ECVQNGTH.js.map → chunk-DNZUBCGZ.js.map} +0 -0
  131. /package/dist/{chunk-POGYWOJ2.js.map → chunk-EAUIQADY.js.map} +0 -0
  132. /package/dist/{chunk-XDS3KQCK.js.map → chunk-G6FNWRAI.js.map} +0 -0
  133. /package/dist/{chunk-WUXD6VBD.js.map → chunk-GB2XPITA.js.map} +0 -0
  134. /package/dist/{chunk-KPXOJMQ6.js.map → chunk-GCKHSBEN.js.map} +0 -0
  135. /package/dist/{chunk-NNFSIRVE.js.map → chunk-GXN7RRHR.js.map} +0 -0
  136. /package/dist/{chunk-RCS5YFY2.js.map → chunk-H26VDFDS.js.map} +0 -0
  137. /package/dist/{chunk-4VQBHTGA.js.map → chunk-IJ62BB2T.js.map} +0 -0
  138. /package/dist/{chunk-UWY4B2PM.js.map → chunk-LQZQ5KGG.js.map} +0 -0
  139. /package/dist/{chunk-VSOYZ7QH.js.map → chunk-PK7EKJ5T.js.map} +0 -0
  140. /package/dist/{chunk-YVVMC4SZ.js.map → chunk-QBVP3SQP.js.map} +0 -0
  141. /package/dist/{chunk-6MNOMHFI.js.map → chunk-QJRQ4BRC.js.map} +0 -0
  142. /package/dist/{chunk-7LC4YJJ3.js.map → chunk-RODZ7MB7.js.map} +0 -0
  143. /package/dist/{chunk-SXODK43S.js.map → chunk-RZVCWX5R.js.map} +0 -0
  144. /package/dist/{chunk-5LAKRYXU.js.map → chunk-SUTMSDQ2.js.map} +0 -0
  145. /package/dist/{chunk-6KKZXB2O.js.map → chunk-VVVKBUBO.js.map} +0 -0
  146. /package/dist/{chunk-6ZR24A4S.js.map → chunk-VZVEP2OZ.js.map} +0 -0
  147. /package/dist/{chunk-3FG2UU3H.js.map → chunk-WN47MNSK.js.map} +0 -0
  148. /package/dist/{chunk-LAU6SVTJ.js.map → chunk-XU73V5XT.js.map} +0 -0
  149. /package/dist/{chunk-77L5GNVO.js.map → chunk-Z5YHMRLF.js.map} +0 -0
  150. /package/dist/{chunk-AO66Q66S.js.map → chunk-ZHRPH52H.js.map} +0 -0
  151. /package/dist/{chunk-VD3EQSBI.js.map → chunk-ZXXFP2LA.js.map} +0 -0
  152. /package/dist/{cli-SBJY2NQH.js.map → cli-4YYC6LCY.js.map} +0 -0
  153. /package/dist/{cli-MNNOXWYU.js.map → cli-HO62TOM2.js.map} +0 -0
  154. /package/dist/{cli-UB5W75GJ.js.map → cli-P2X7PNY6.js.map} +0 -0
  155. /package/dist/{cli-QR3ZQZA4.js.map → cli-SGVFZOAW.js.map} +0 -0
  156. /package/dist/{cli-5AML7QR2.js.map → cli-TELPAMJO.js.map} +0 -0
  157. /package/dist/{cli-I4GBPLRM.js.map → cli-UETKXHJN.js.map} +0 -0
  158. /package/dist/{cli-WWDARAWS.js.map → cli-V2DI3K2R.js.map} +0 -0
  159. /package/dist/{config-YWSNBFEE.js.map → config-TYXYQK3I.js.map} +0 -0
  160. /package/dist/{github-TIZ3ZR3D.js.map → github-ESK45CEZ.js.map} +0 -0
  161. /package/dist/{github-WKOJRW7P.js.map → github-WER7JUTN.js.map} +0 -0
  162. /package/dist/{json-4FUOZ3XX.js.map → json-QR4G35KA.js.map} +0 -0
  163. /package/dist/{lint-7VQFESHK.js.map → lint-QTI7XK2A.js.map} +0 -0
  164. /package/dist/{list-7U2MBDIM.js.map → list-JO4G3TS3.js.map} +0 -0
  165. /package/dist/{list-W6EUAOBV.js.map → list-O2MJUP5V.js.map} +0 -0
  166. /package/dist/{page-WZLBKSCD.js.map → page-FSXDXCDD.js.map} +0 -0
  167. /package/dist/{prepare-FPEWAHJH.js.map → prepare-UPIBTFNS.js.map} +0 -0
  168. /package/dist/{pretty-7M4X4TCY.js.map → pretty-4IONWSEP.js.map} +0 -0
  169. /package/dist/{pretty-CUCMQU5R.js.map → pretty-R4BQD2VH.js.map} +0 -0
  170. /package/dist/{reporters-DQVSDXV6.js.map → reporters-DHO2BXAD.js.map} +0 -0
  171. /package/dist/{reporters-KYJE54JS.js.map → reporters-FPP6JNDP.js.map} +0 -0
  172. /package/dist/{run-ABGXGOGQ.js.map → run-YH5Z7RJ7.js.map} +0 -0
  173. /package/dist/{validate-HWNU3MDY.js.map → validate-7JI3H57P.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/site/cli.ts","../src/site/core/detect.ts","../src/site/errors.ts","../src/site/core/config.ts","../src/site/core/run.ts","../src/site/core/static-server.ts","../src/site/commands/run.ts"],"sourcesContent":["/**\n * The `site` domain's commander program. Mounted by `src/cli.ts` under\n * `manni site`; no entry point of its own. Like `key` (proposal 0045), `site`\n * is a family resource with verbs: the site every other domain checks\n * (proposal 0082). Three verbs, no default subcommand.\n *\n * These verbs print no report: the framework's output is the output, on the\n * inherited stdio. manni's own lines are diagnostics on stderr. Exit `0` done,\n * `2` operational/usage, and never `1`, because nothing here is a finding.\n */\nimport { Command } from \"commander\";\nimport pkg from \"../../package.json\" with { type: \"json\" };\nimport { fail } from \"../shared/run.js\";\nimport { runSite } from \"./commands/run.js\";\nimport type { Verb } from \"./types.js\";\n\n/** What commander hands each verb's action. */\ninterface SiteCliOptions {\n /** `-c, --config <file>`. */\n config?: string;\n /** `--port <n>` as typed; `resolvePlan` validates it. start and preview only. */\n port?: string;\n /** `--host <host>`. start and preview only. */\n host?: string;\n}\n\n/**\n * Split a verb's operands into `[dir]` and what came after `--`.\n *\n * Commander drops the `--` itself, at whichever program met it first (here,\n * the umbrella), and hands everything after it on as operands. So `[dir]`\n * alone cannot tell `start -- --open` (no dir) from `start website`. The\n * process argv still has the `--`, and what follows it is the tail of the\n * operands; a tail that does not match (a program parsed from elsewhere) is\n * no passthrough at all.\n * ponytail: an option given `--` as its value (`--host --`) is misread as the\n * separator; nobody binds a host named `--`.\n */\nfunction splitOperands(args: readonly string[]): { dir: string | undefined; passthrough: string[]; extra: number } {\n const at = process.argv.indexOf(\"--\");\n const tail = at === -1 ? [] : process.argv.slice(at + 1);\n const start = args.length - tail.length;\n const passthrough = start >= 0 && tail.every((arg, i) => args[start + i] === arg) ? tail : [];\n const before = args.slice(0, args.length - passthrough.length);\n return { dir: before[0], passthrough, extra: before.length };\n}\n\nexport function buildProgram(): Command {\n const program = new Command();\n program\n .name(\"site\")\n .description(\"Start, build and preview the docs site\")\n .version(pkg.version, \"-V, --version\")\n // A pointer, not the whole help screen: the message that precedes it\n // already names the offending flag.\n .showHelpAfterError(\"(add --help for usage)\")\n // MUST come before the `.command()` calls below. `copyInheritedSettings`\n // copies `_exitCallback` by value at subcommand-creation time, so an\n // `exitOverride()` installed afterwards leaves every subcommand still\n // calling `process.exit(1)`.\n .exitOverride();\n\n const verb = (name: Verb, description: string, serves: boolean): void => {\n const cmd = program\n .command(name)\n .description(description)\n .argument(\"[dir]\", \"the site's directory (default: site.dir, else found by search)\")\n // Everything after `--` arrives as operands; splitOperands sorts them.\n .allowExcessArguments();\n if (serves) {\n cmd\n .option(\"--port <n>\", \"port, an integer from 1 to 65535 (default: a local collection url, else the framework's)\")\n .option(\"--host <host>\", \"host to bind (default: a local collection url, else the framework's)\");\n }\n cmd\n .option(\"-c, --config <file>\", \"path to a manni config file\")\n .action(async (_dir: string | undefined, options: SiteCliOptions, self: Command) => {\n const { dir, passthrough, extra } = splitOperands(self.args);\n if (extra > 1) {\n self.error(\n `error: too many arguments for '${name}'. Expected 1 argument but got ${String(extra)}.`,\n { code: \"commander.excessArguments\" },\n );\n }\n try {\n process.exitCode = await runSite(name, {\n cwd: process.cwd(),\n dir,\n configPath: options.config,\n port: options.port,\n host: options.host,\n passthrough,\n });\n } catch (err) {\n fail(err);\n }\n });\n };\n\n verb(\"start\", \"Run the docs framework's dev server\", true);\n verb(\"build\", \"Build the docs site\", false);\n verb(\"preview\", \"Build the docs site, then serve the output\", true);\n\n program.addHelpText(\n \"after\",\n [\n \"\",\n \"Examples:\",\n \" manni site start # detect the framework, run its dev server\",\n \" manni site build\",\n \" manni site preview --port 4000 # build, then serve the output\",\n \" manni site start website -- --open # arguments after -- go to the framework\",\n ].join(\"\\n\"),\n );\n\n return program;\n}\n","/**\n * From a directory to the commands `manni site` runs (proposal 0082). The\n * site is found, its framework read from marker files (detect, don't switch),\n * and each verb resolved to argv, a `site.commands` override, or the built-in\n * static server. Everything that can fail before a process starts fails here.\n */\nimport { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { dirname, join, posix, relative, resolve } from \"node:path\";\nimport type { CollectionConfig } from \"../../shared/collections.js\";\nimport { FAMILY_CONFIG_NAMES } from \"../../shared/config-file.js\";\nimport { searchPath } from \"../../shared/git-root.js\";\nimport { warn } from \"../../shared/warn.js\";\nimport { SiteError } from \"../errors.js\";\nimport type { Plan, PlannedStep, Verb } from \"../types.js\";\nimport { loadSiteConfig } from \"./config.js\";\n\nexport interface ResolveOptions {\n cwd: string;\n /** The positional `[dir]`, relative to `cwd`. */\n dir?: string;\n configPath?: string;\n /** `--port` as typed; validated here. */\n port?: string;\n host?: string;\n /** Everything after `--`. */\n passthrough: string[];\n}\n\n/** A command: Node frameworks name the script they prefer over the binary. */\ninterface Cmd {\n script?: string;\n argv: string[];\n}\n\ninterface Site {\n dir: string;\n scripts: Record<string, unknown>;\n deps: Set<string>;\n}\n\ninterface Framework {\n name: string;\n /** The marker that matched, for messages, or `null`. */\n marker: (site: Site) => string | null;\n /** How the binary is reached: a package manager, uv/poetry, bundler, or PATH. */\n runner: \"node\" | \"python\" | \"ruby\" | \"path\";\n /** Node only: the package that provides the binary. */\n pkg?: (site: Site) => string;\n commands: (site: Site) => { start: Cmd; build?: Cmd; preview?: Cmd; out?: string };\n /** `-a` means one `-a host:port`; `null` means the server takes no host. */\n hostFlag: \"--host\" | \"--hostname\" | \"--bind\" | \"-a\" | null;\n defaultPort: number;\n}\n\nconst has = (dir: string, ...parts: string[]): boolean => existsSync(join(dir, ...parts));\nconst read = (path: string): string => {\n try {\n return readFileSync(path, \"utf8\");\n } catch {\n return \"\";\n }\n};\nconst dep = (name: string) => (s: Site) => (s.deps.has(name) ? name : null);\nconst node = (bin: string, start: string, build: string, preview: string, args: string[] = []) => ({\n start: { script: start, argv: [bin, \"dev\", ...args] },\n build: { script: build, argv: [bin, \"build\", ...args] },\n preview: { script: preview, argv: [bin, \"preview\", ...args] },\n});\nconst next = () => ({\n start: { script: \"dev\", argv: [\"next\", \"dev\"] },\n build: { script: \"build\", argv: [\"next\", \"build\"] },\n preview: { script: \"start\", argv: [\"next\", \"start\"] },\n});\n\nfunction mintlify(s: Site): string | null {\n if (has(s.dir, \"mint.json\")) return \"mint.json\";\n try {\n const doc = JSON.parse(read(join(s.dir, \"docs.json\"))) as Record<string, unknown>;\n const schema = doc.$schema;\n // Without Mintlify's $schema, it takes the pair its docs.json requires: a theme and a navigation.\n const shaped = typeof doc.theme === \"string\" && typeof doc.navigation === \"object\" && doc.navigation !== null;\n if ((typeof schema === \"string\" && schema.includes(\"mintlify\")) || shaped) {\n return \"docs.json\";\n }\n } catch {\n // No docs.json, or not JSON: not Mintlify.\n }\n return null;\n}\n\n// Both the MkDocs and Zensical markers ask, so each site is answered once.\nconst zensicalSeen = new WeakMap<Site, string | null>();\n\nfunction zensical(s: Site): string | null {\n const seen = zensicalSeen.get(s);\n if (seen !== undefined) return seen;\n const found = zensicalMarker(s);\n zensicalSeen.set(s, found);\n return found;\n}\n\nfunction zensicalMarker(s: Site): string | null {\n if (has(s.dir, \"zensical.toml\")) return \"zensical.toml\";\n if (!has(s.dir, \"mkdocs.yml\")) return null;\n let files: string[];\n try {\n files = readdirSync(s.dir).filter((f) => /^requirements.*\\.txt$/.test(f) || f === \"pyproject.toml\");\n } catch {\n // An unlistable directory names no Python deps; it reads as plain MkDocs.\n return null;\n }\n return files.some((f) => /\\bzensical\\b/.test(read(join(s.dir, f)))) ? \"mkdocs.yml\" : null;\n}\n\nconst sphinxSource = (s: Site): string => (has(s.dir, \"conf.py\") ? \".\" : \"source\");\n\n/** Detected frameworks, in the order an ambiguity lists them. */\nconst FRAMEWORKS: Framework[] = [\n {\n name: \"Mintlify\",\n marker: mintlify,\n runner: \"path\",\n commands: () => ({ start: { argv: [\"mint\", \"dev\"] } }),\n hostFlag: null,\n defaultPort: 3000,\n },\n {\n name: \"Fern\",\n marker: (s) => (has(s.dir, \"fern\", \"fern.config.json\") ? \"fern/fern.config.json\" : null),\n runner: \"path\",\n commands: () => ({ start: { argv: [\"fern\", \"docs\", \"dev\"] } }),\n hostFlag: null,\n defaultPort: 3000,\n },\n {\n name: \"Starlight\",\n marker: dep(\"@astrojs/starlight\"),\n runner: \"node\",\n pkg: () => \"astro\",\n commands: () => node(\"astro\", \"dev\", \"build\", \"preview\"),\n hostFlag: \"--host\",\n defaultPort: 4321,\n },\n {\n name: \"Docusaurus\",\n marker: dep(\"@docusaurus/core\"),\n runner: \"node\",\n pkg: () => \"@docusaurus/core\",\n commands: () => ({\n start: { script: \"start\", argv: [\"docusaurus\", \"start\"] },\n build: { script: \"build\", argv: [\"docusaurus\", \"build\"] },\n preview: { script: \"serve\", argv: [\"docusaurus\", \"serve\"] },\n }),\n hostFlag: \"--host\",\n defaultPort: 3000,\n },\n {\n name: \"VitePress\",\n marker: dep(\"vitepress\"),\n runner: \"node\",\n pkg: () => \"vitepress\",\n commands: (s) =>\n node(\"vitepress\", \"docs:dev\", \"docs:build\", \"docs:preview\", (has(s.dir, \".vitepress\") || !has(s.dir, \"docs\", \".vitepress\")) ? [] : [\"docs\"]),\n hostFlag: \"--host\",\n defaultPort: 5173,\n },\n {\n name: \"Nextra\",\n marker: dep(\"nextra\"),\n runner: \"node\",\n pkg: () => \"next\",\n commands: next,\n hostFlag: \"--hostname\",\n defaultPort: 3000,\n },\n {\n name: \"Fumadocs\",\n marker: dep(\"fumadocs-core\"),\n runner: \"node\",\n pkg: () => \"next\",\n commands: next,\n hostFlag: \"--hostname\",\n defaultPort: 3000,\n },\n {\n name: \"Rspress\",\n marker: (s) => dep(\"rspress\")(s) ?? dep(\"@rspress/core\")(s),\n runner: \"node\",\n pkg: (s) => (s.deps.has(\"rspress\") ? \"rspress\" : \"@rspress/core\"),\n commands: () => node(\"rspress\", \"dev\", \"build\", \"preview\"),\n hostFlag: \"--host\",\n defaultPort: 3000,\n },\n {\n name: \"MkDocs\",\n marker: (s) => (has(s.dir, \"mkdocs.yml\") && zensical(s) === null ? \"mkdocs.yml\" : null),\n runner: \"python\",\n commands: () => ({ start: { argv: [\"mkdocs\", \"serve\"] }, build: { argv: [\"mkdocs\", \"build\"] }, out: \"site\" }),\n hostFlag: \"-a\",\n defaultPort: 8000,\n },\n {\n name: \"Zensical\",\n marker: zensical,\n runner: \"python\",\n commands: () => ({ start: { argv: [\"zensical\", \"serve\"] }, build: { argv: [\"zensical\", \"build\"] }, out: \"site\" }),\n hostFlag: \"-a\",\n defaultPort: 8000,\n },\n {\n name: \"Sphinx\",\n marker: (s) => (has(s.dir, \"conf.py\") ? \"conf.py\" : has(s.dir, \"source\", \"conf.py\") ? \"source/conf.py\" : null),\n runner: \"python\",\n commands: (s) => {\n const src = sphinxSource(s);\n return {\n start: { argv: [\"sphinx-autobuild\", src, posix.join(src, \"_build\", \"html\")] },\n build: { argv: [\"sphinx-build\", \"-M\", \"html\", src, posix.join(src, \"_build\")] },\n out: posix.join(src, \"_build\", \"html\"),\n };\n },\n hostFlag: \"--host\",\n defaultPort: 8000,\n },\n {\n name: \"Hugo\",\n marker: (s) => [\"hugo.toml\", \"hugo.yaml\", \"hugo.json\"].find((f) => has(s.dir, f)) ?? null,\n runner: \"path\",\n commands: () => ({ start: { argv: [\"hugo\", \"server\"] }, build: { argv: [\"hugo\"] }, out: \"public\" }),\n hostFlag: \"--bind\",\n defaultPort: 1313,\n },\n {\n name: \"Jekyll\",\n marker: (s) =>\n has(s.dir, \"_config.yml\") && /\\b(jekyll|github-pages)\\b/.test(read(join(s.dir, \"Gemfile\")))\n ? \"_config.yml\"\n : null,\n runner: \"ruby\",\n commands: () => ({ start: { argv: [\"jekyll\", \"serve\"] }, build: { argv: [\"jekyll\", \"build\"] }, out: \"_site\" }),\n hostFlag: \"--host\",\n defaultPort: 4000,\n },\n];\n\nconst LOCAL_HOSTS = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\nconst STATIC_HOST = \"127.0.0.1\";\n// Only the name error messages show; discovery reads FAMILY_CONFIG_NAMES itself.\nconst CONFIG_NAME = FAMILY_CONFIG_NAMES[0] ?? \"manni.config.yaml\";\n\ntype PackageManager = \"npm\" | \"pnpm\" | \"yarn\" | \"bun\";\nconst LOCKFILES: [string, PackageManager][] = [\n [\"package-lock.json\", \"npm\"],\n [\"npm-shrinkwrap.json\", \"npm\"],\n [\"pnpm-lock.yaml\", \"pnpm\"],\n [\"yarn.lock\", \"yarn\"],\n [\"bun.lock\", \"bun\"],\n [\"bun.lockb\", \"bun\"],\n];\nconst EXEC: Record<PackageManager, string[]> = {\n npm: [\"npx\"],\n pnpm: [\"pnpm\", \"exec\"],\n yarn: [\"yarn\"],\n bun: [\"bun\", \"x\"],\n};\n\nfunction readPackageJson(dir: string): Record<string, unknown> | null {\n const text = read(join(dir, \"package.json\"));\n if (text === \"\") return null;\n try {\n const value: unknown = JSON.parse(text);\n return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : null;\n } catch {\n return null;\n }\n}\n\nconst record = (value: unknown): Record<string, unknown> =>\n typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : {};\n\nfunction siteAt(dir: string): Site {\n const pkg = readPackageJson(dir);\n return {\n dir,\n scripts: record(pkg?.scripts),\n deps: new Set([...Object.keys(record(pkg?.dependencies)), ...Object.keys(record(pkg?.devDependencies))]),\n };\n}\n\n/** `packageManager:` from the nearest package.json carrying it, then the nearest lockfile, then npm. */\nfunction packageManager(dir: string): PackageManager {\n const chain = searchPath(dir);\n for (const d of chain) {\n const field = readPackageJson(d)?.packageManager;\n const name = typeof field === \"string\" ? field.split(\"@\")[0] : undefined;\n if (name !== undefined && Object.hasOwn(EXEC, name)) return name as PackageManager;\n }\n for (const d of chain) {\n const hit = LOCKFILES.find(([file]) => has(d, file));\n if (hit) return hit[1];\n }\n return \"npm\";\n}\n\nfunction pythonPrefix(dir: string): string[] {\n for (const d of searchPath(dir)) {\n if (has(d, \"uv.lock\")) return [\"uv\", \"run\"];\n if (has(d, \"poetry.lock\")) return [\"poetry\", \"run\"];\n }\n return [];\n}\n\nfunction isDirectory(path: string): boolean {\n try {\n return statSync(path).isDirectory();\n } catch {\n return false;\n }\n}\n\nfunction parsePort(raw: string): number {\n const port = /^\\d+$/.test(raw) ? Number(raw) : NaN;\n if (!(port >= 1 && port <= 65535)) {\n throw new SiteError(`--port must be an integer from 1 to 65535, got \"${raw}\".`);\n }\n return port;\n}\n\n/**\n * One argument for the shell an override runs in, so `-- --title \"My Docs\"`\n * stays one argument. Plain tokens pass unchanged.\n */\nfunction shellQuote(arg: string): string {\n if (/^[\\w@%+=:,./-]+$/.test(arg)) return arg;\n // cmd.exe doubles a quote inside quotes; POSIX closes, escapes and reopens.\n return process.platform === \"win32\" ? `\"${arg.replace(/\"/g, '\"\"')}\"` : `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n}\n\nconst andList = (items: string[]): string =>\n items.length <= 1 ? items.join(\"\") : `${items.slice(0, -1).join(\", \")} and ${items.at(-1) ?? \"\"}`;\n\ninterface Address {\n host?: string;\n port?: number;\n base: string;\n}\n\n/** The host, port and path a local collection `url:` names, when they agree. */\nfunction collectionAddress(collections: CollectionConfig[], framework: string, portFlag: boolean): Address {\n const local = collections.flatMap((c) => {\n if (c.url === undefined) return [];\n const url = new URL(c.url);\n if (!LOCAL_HOSTS.has(url.hostname)) return [];\n const port = url.port === \"\" ? (url.protocol === \"https:\" ? 443 : 80) : Number(url.port);\n return [{ name: c.name, host: url.hostname.replace(/^\\[|\\]$/g, \"\"), port, base: url.pathname }];\n });\n const [first] = local;\n if (first === undefined) return { base: \"/\" };\n if (local.some((l) => l.host !== first.host || l.port !== first.port)) {\n if (!portFlag) {\n warn(\n `collections ${andList(local.map((l) => l.name))} name different local URLs. Using ${framework}'s default port; pass --port to pick one.`,\n );\n }\n return { base: \"/\" };\n }\n // Collections on one server are sections of one site: it mounts where they all live.\n return { ...first, base: sharedPath(local.map((l) => l.base)) };\n}\n\n/** The longest leading run of whole path segments every path shares, as `/a/b/`. */\nfunction sharedPath(paths: string[]): string {\n const split = paths.map((p) => p.split(\"/\").filter((s) => s !== \"\"));\n const [head = [], ...rest] = split;\n const shared: string[] = [];\n for (const [i, segment] of head.entries()) {\n if (!rest.every((p) => p[i] === segment)) break;\n shared.push(segment);\n }\n return shared.length === 0 ? \"/\" : `/${shared.join(\"/\")}/`;\n}\n\nfunction addressArgs(fw: Framework, host: string | undefined, port: number | undefined): string[] {\n if (fw.hostFlag === \"-a\") {\n if (host === undefined && port === undefined) return [];\n const h = host ?? STATIC_HOST;\n return [\"-a\", `${h.includes(\":\") ? `[${h}]` : h}:${String(port ?? fw.defaultPort)}`];\n }\n return [\n ...(host !== undefined && fw.hostFlag !== null ? [fw.hostFlag, host] : []),\n ...(port !== undefined ? [\"--port\", String(port)] : []),\n ];\n}\n\nexport function resolvePlan(verb: Verb, opts: ResolveOptions): Plan {\n const config = loadSiteConfig(opts.cwd, opts.configPath);\n const shown = (dir: string): string => {\n const rel = relative(opts.cwd, dir).replace(/\\\\/g, \"/\");\n return rel === \"\" ? \"./\" : `${rel}/`;\n };\n\n // The verb whose step takes --port and --host; `build` takes neither.\n const serving = verb === \"build\" ? null : verb;\n const flagPort = serving !== null && opts.port !== undefined ? parsePort(opts.port) : undefined;\n const flagHost = serving !== null ? opts.host : undefined;\n if (serving !== null && config.commands[serving] !== undefined) {\n if (flagPort !== undefined) {\n throw new SiteError(`--port does not apply to site.commands.${serving}. Put the port in that command.`);\n }\n if (flagHost !== undefined) {\n throw new SiteError(`--host does not apply to site.commands.${serving}. Put the host in that command.`);\n }\n }\n\n const needed: Verb[] = verb === \"preview\" ? [\"build\", \"preview\"] : [verb];\n const missing = needed.find((v) => config.commands[v] === undefined);\n const key = `site.commands.${missing ?? verb} in ${CONFIG_NAME}`;\n const setIt = `Set ${key}.`;\n\n // Find the site.\n let site: Site | undefined;\n const explicit = opts.dir !== undefined ? resolve(opts.cwd, opts.dir) : config.dir;\n if (explicit !== undefined) {\n if (!isDirectory(explicit)) throw new SiteError(`${shown(explicit)} does not exist.`);\n // Fern's site is the folder above `fern/`, wherever the user points.\n const dir = has(explicit, \"fern.config.json\") && !has(explicit, \"fern\", \"fern.config.json\") ? dirname(explicit) : explicit;\n site = siteAt(dir);\n } else {\n const base = config.configDir ?? resolve(opts.cwd);\n const candidates = [base, join(base, \"docs\"), join(base, \"website\"), join(base, \"site\")];\n for (const dir of candidates) {\n if (!isDirectory(dir)) continue;\n const candidate = siteAt(dir);\n if (FRAMEWORKS.some((fw) => fw.marker(candidate) !== null)) {\n site = candidate;\n break;\n }\n }\n if (site === undefined) {\n if (missing !== undefined) {\n const names = candidates.map(shown);\n throw new SiteError(\n `no docs site found in ${names.slice(0, -1).join(\", \")} or ${names.at(-1) ?? \"\"}. Pass the site's directory, or set ${key}.`,\n );\n }\n site = siteAt(base);\n }\n }\n const where = shown(site.dir);\n const found = site;\n\n // Which framework, only when some step needs one.\n const matches = FRAMEWORKS.flatMap((fw) => {\n const marker = fw.marker(found);\n return marker === null ? [] : [{ fw, marker }];\n });\n let fw: Framework | undefined;\n if (missing !== undefined) {\n if (matches.length === 0) throw new SiteError(`no docs framework detected in ${where}. ${setIt}`);\n if (matches.length > 1) {\n const list = matches.map((m) => `${m.fw.name} (${m.marker})`).join(\", \");\n throw new SiteError(`${where} holds more than one docs site: ${list}. ${setIt}`);\n }\n fw = matches[0]?.fw;\n }\n\n const steps = needed.map((v): PlannedStep => {\n const override = config.commands[v];\n const isServe = v === serving;\n // Passthrough goes to the verb's own step: the serve step, for preview.\n const extra = v === verb ? opts.passthrough : [];\n if (override !== undefined) {\n const command = [override, ...extra.map(shellQuote)].join(\" \");\n return {\n announce: `Running site.commands.${v} in ${where}: ${command}`,\n display: command,\n notFound: \"\",\n step: { kind: \"shell\", command, cwd: found.dir },\n };\n }\n if (fw === undefined) throw new SiteError(`no docs framework detected in ${where}. ${setIt}`);\n const cmds = fw.commands(found);\n const cmd = cmds[v];\n if (v === \"build\" && cmd === undefined) {\n throw new SiteError(`${fw.name} has no local build. Run manni site start, or set site.commands.build.`);\n }\n\n let address: Address = { base: \"/\" };\n if (isServe) {\n if (flagHost !== undefined && fw.hostFlag === null) {\n throw new SiteError(`${fw.name}'s dev server takes no host option. Drop --host.`);\n }\n // Always read the url: its path is the mount point even when both flags set host and port.\n const url = collectionAddress(config.collections, fw.name, flagPort !== undefined);\n address = { host: flagHost ?? url.host, port: flagPort ?? url.port, base: url.base };\n }\n\n if (cmd === undefined) {\n if (cmds.out === undefined) {\n throw new SiteError(`${fw.name} has no local preview. Run manni site start, or set site.commands.preview.`);\n }\n if (extra.length > 0) {\n throw new SiteError(`${fw.name} previews through manni's built-in server, which takes no extra arguments. Drop the arguments after --.`);\n }\n return {\n announce: \"\",\n display: \"\",\n notFound: \"\",\n step: {\n kind: \"static\",\n root: join(found.dir, cmds.out),\n host: address.host ?? STATIC_HOST,\n port: address.port ?? fw.defaultPort,\n base: address.base,\n },\n };\n }\n\n const flags = [...(isServe ? addressArgs(fw, address.host, address.port) : []), ...extra];\n let argv: string[];\n if (fw.runner === \"node\") {\n const pm = packageManager(found.dir);\n requireInstalled(fw, found, pm, where);\n argv =\n cmd.script !== undefined && cmd.script in found.scripts\n ? [pm, \"run\", cmd.script, ...(pm === \"npm\" && flags.length > 0 ? [\"--\"] : []), ...flags]\n : [...EXEC[pm], ...cmd.argv, ...flags];\n } else {\n const prefix = fw.runner === \"python\" ? pythonPrefix(found.dir) : fw.runner === \"ruby\" ? [\"bundle\", \"exec\"] : [];\n argv = [...prefix, ...cmd.argv, ...flags];\n }\n const display = argv.join(\" \");\n const bin = argv[0] ?? \"\";\n // A prefix manni added (npm, uv, bundle...) is its own install, not the framework's.\n const install = bin === cmd.argv[0] ? `${fw.name}'s CLI` : bin;\n return {\n announce: `${fw.name} in ${where}. Running ${display}`,\n display,\n notFound: `${bin} not found on PATH. Install ${install}, or set site.commands.${v}.`,\n step: { kind: \"exec\", argv, cwd: found.dir },\n };\n });\n return { steps };\n}\n\n/**\n * The framework's package must resolve from the site, as Node would find it.\n * ponytail: the walk stops at the git root, not the filesystem root, so a\n * package installed above the repository is reported missing. Widen it if\n * anyone keeps node_modules outside their checkout.\n */\nfunction requireInstalled(fw: Framework, site: Site, pm: PackageManager, where: string): void {\n const pkg = fw.pkg?.(site);\n if (pkg === undefined) return;\n const chain = searchPath(site.dir);\n if (chain.some((d) => has(d, \"node_modules\", pkg, \"package.json\"))) return;\n // Yarn Plug'n'Play keeps no node_modules; its loader resolves the package.\n if (chain.some((d) => has(d, \".pnp.cjs\") || has(d, \".pnp.js\"))) return;\n const npmLock = chain.some((d) => has(d, \"package-lock.json\") || has(d, \"npm-shrinkwrap.json\"));\n const install = pm === \"npm\" ? (npmLock ? \"npm ci\" : \"npm install\") : `${pm} install`;\n throw new SiteError(`${pkg} is not installed for ${where}. Run ${install} in ${where} first.`);\n}\n","import { ToolError } from \"../shared/errors.js\";\n\n/** An operational or usage error in the site domain: exit 2. */\nexport class SiteError extends ToolError {\n constructor(message: string) {\n super(message);\n this.name = \"SiteError\";\n }\n}\n","/**\n * The `site:` key of the family config file (`manni.config.yaml`). Finding\n * the file is the shared layer's job; what the section may hold is decided\n * here, with a11y's posture: an unknown key or a wrong type names the file and\n * the key, because a misspelled `comands:` silently ignored would run the\n * detected command instead of the one the user wrote.\n */\nimport { resolve } from \"node:path\";\nimport type { CollectionConfig } from \"../../shared/collections.js\";\nimport {\n findConfigFileSync,\n readConfigFileSync,\n type ConfigFileOptions,\n} from \"../../shared/config-file.js\";\nimport { SiteError } from \"../errors.js\";\nimport type { Verb } from \"../types.js\";\n\nexport interface SiteConfig {\n /** Absolute; `site.dir` resolved against the config file's directory. */\n dir?: string;\n commands: Partial<Record<Verb, string>>;\n /** The family file's `collections:`, for the local `url:` port and path. */\n collections: CollectionConfig[];\n /** Directory of the config file; `null` when none was found. */\n configDir: string | null;\n}\n\nconst SECTION = \"site\";\nconst CONFIG_KEYS = [\"dir\", \"commands\"] as const;\nconst COMMAND_KEYS = [\"start\", \"build\", \"preview\"] as const;\n\nconst CONFIG_FILE: ConfigFileOptions = {\n section: SECTION,\n legacyNames: [],\n toError: (message) => new SiteError(message),\n};\n\n/** Discover the config from `cwd`, or read `configPath` when given. */\nexport function loadSiteConfig(cwd: string, configPath?: string): SiteConfig {\n const file =\n configPath === undefined\n ? findConfigFileSync(cwd, CONFIG_FILE)\n : readConfigFileSync(configPath, cwd, CONFIG_FILE);\n if (file === null) return { commands: {}, collections: [], configDir: null };\n return {\n ...parseSiteConfig(file.value, file.source, file.dir),\n collections: file.collections,\n configDir: file.dir,\n };\n}\n\n/** Pure parser, exported for tests. */\nexport function parseSiteConfig(\n value: unknown,\n source: string,\n configDir: string,\n): Pick<SiteConfig, \"dir\" | \"commands\"> {\n const obj = asMapping(value, SECTION, CONFIG_KEYS, source);\n const config: Pick<SiteConfig, \"dir\" | \"commands\"> = { commands: {} };\n if (obj.dir !== undefined) {\n config.dir = resolve(configDir, asString(obj.dir, \"dir\", source));\n }\n const commands = asMapping(obj.commands, `${SECTION}.commands`, COMMAND_KEYS, source);\n for (const verb of COMMAND_KEYS) {\n const command = commands[verb];\n if (command !== undefined) {\n const line = asString(command, `commands.${verb}`, source);\n // A blank line runs as a shell no-op that exits 0: a build that never built.\n if (line.trim() === \"\") {\n throw new SiteError(`${source}: ${SECTION}.commands.${verb} must not be empty.`);\n }\n config.commands[verb] = line;\n }\n }\n return config;\n}\n\nfunction asMapping(\n value: unknown,\n name: string,\n keys: readonly string[],\n source: string,\n): Record<string, unknown> {\n if (value == null) return {};\n if (typeof value !== \"object\" || Array.isArray(value)) {\n throw new SiteError(`${source}: \\`${name}:\\` must be a mapping.`);\n }\n const obj = value as Record<string, unknown>;\n for (const key of Object.keys(obj)) {\n if (!keys.includes(key)) {\n throw new SiteError(\n `${source}: \\`${name}:\\` has unknown key \"${key}\". Supported keys: ${keys.join(\", \")}.`,\n );\n }\n }\n return obj;\n}\n\nfunction asString(value: unknown, key: string, source: string): string {\n if (typeof value !== \"string\") {\n throw new SiteError(`${source}: ${SECTION}.${key} must be a string.`);\n }\n return value;\n}\n","/**\n * The runner: carries out a `Plan` step by step, with the child's stdio\n * inherited so the framework's own output is the output. No timeout, because\n * the last step of `start` and `preview` is a server that runs until Ctrl-C.\n */\nimport { spawn, type ChildProcess } from \"node:child_process\";\nimport { accessSync, constants, statSync } from \"node:fs\";\nimport { delimiter, resolve } from \"node:path\";\nimport { launcherCommandLine } from \"../../shared/batch-launcher.js\";\nimport { notice } from \"../../shared/warn.js\";\nimport { SiteError } from \"../errors.js\";\nimport type { Plan, PlannedStep, Step } from \"../types.js\";\nimport { serveStatic } from \"./static-server.js\";\n\nfunction isExecutable(path: string): boolean {\n try {\n if (!statSync(path).isFile()) return false;\n if (process.platform !== \"win32\") accessSync(path, constants.X_OK);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Where `name` resolves, the way the OS would find it: a name with a separator\n * against `cwd`, a bare one along PATH. On Windows a name without one of\n * PATHEXT's extensions is tried with each in turn, so `npm` finds `npm.cmd`.\n */\nfunction findOnPath(name: string, cwd: string): string | undefined {\n const win = process.platform === \"win32\";\n const exts = win\n ? (process.env[\"PATHEXT\"] ?? \".COM;.EXE;.BAT;.CMD\").split(\";\").filter((e) => e !== \"\")\n : [];\n const lower = name.toLowerCase();\n const names =\n win && !exts.some((e) => lower.endsWith(e.toLowerCase())) ? exts.map((e) => name + e) : [name];\n const dirs = /[\\\\/]/.test(name)\n ? [cwd]\n : (process.env[\"PATH\"] ?? \"\").split(delimiter).filter((d) => d !== \"\");\n for (const dir of dirs) {\n for (const candidate of names) {\n const path = resolve(dir, candidate);\n if (isExecutable(path)) return path;\n }\n }\n return undefined;\n}\n\nfunction startExec(planned: PlannedStep, step: Extract<Step, { kind: \"exec\" }>): ChildProcess {\n const [name, ...args] = step.argv;\n const binary = name === undefined ? undefined : findOnPath(name, step.cwd);\n if (binary === undefined) throw new SiteError(planned.notFound);\n const line = launcherCommandLine(\n binary,\n args,\n (value) => new SiteError(`${planned.display} cannot be given an argument containing a quote: ${value}`),\n );\n return spawn(line.command, line.argv, {\n cwd: step.cwd,\n stdio: \"inherit\",\n windowsVerbatimArguments: line.verbatim,\n });\n}\n\nfunction exitOf(\n planned: PlannedStep,\n child: ChildProcess,\n): Promise<{ code: number | null; signal: NodeJS.Signals | null }> {\n return new Promise((settle, reject) => {\n child.once(\"error\", (err: NodeJS.ErrnoException) => {\n reject(\n err.code === \"ENOENT\"\n ? new SiteError(planned.notFound)\n : new SiteError(`${planned.display} could not start: ${err.message}`),\n );\n });\n child.once(\"exit\", (code, signal) => {\n settle({ code, signal });\n });\n });\n}\n\n/**\n * One step; resolves true when the user stopped it. While any step runs this\n * process ignores SIGINT itself (the terminal delivers Ctrl-C to the whole\n * process group, child included) and forwards SIGTERM, which reaches this\n * process alone, so a cancelled build is not left running. An exit after\n * either is a stop the user asked for, so it is not a failure whatever code\n * the child chose. Otherwise the step must exit 0.\n */\nasync function runStep(planned: PlannedStep): Promise<boolean> {\n const { step } = planned;\n if (step.kind === \"static\") {\n await serveStatic(step);\n return true;\n }\n const child =\n step.kind === \"exec\"\n ? startExec(planned, step)\n : spawn(step.command, { cwd: step.cwd, stdio: \"inherit\", shell: true });\n // An object, not a `let`: TypeScript cannot see the handlers assign it.\n const signal = { received: false };\n const onInt = (): void => {\n signal.received = true;\n };\n const onTerm = (): void => {\n signal.received = true;\n child.kill(\"SIGTERM\");\n };\n process.on(\"SIGINT\", onInt);\n process.on(\"SIGTERM\", onTerm);\n try {\n const exit = await exitOf(planned, child);\n if (signal.received) return true;\n if (exit.code === 0) return false;\n throw new SiteError(\n exit.code === null\n ? `${planned.display} was stopped by ${String(exit.signal)}.`\n : `${planned.display} exited with code ${String(exit.code)}.`,\n );\n } finally {\n process.off(\"SIGINT\", onInt);\n process.off(\"SIGTERM\", onTerm);\n }\n}\n\n/** Run every step in order. Resolves the exit code, 0; a failure throws `SiteError`. */\nexport async function runPlan(plan: Plan): Promise<number> {\n for (const planned of plan.steps) {\n if (planned.announce !== \"\") notice(planned.announce);\n // A stop during the build ends the run there: nothing is served.\n if (await runStep(planned)) break;\n }\n return 0;\n}\n","/**\n * The built-in static server `manni site preview` uses for frameworks whose\n * own CLI has no preview (MkDocs, Zensical, Sphinx, Hugo, Jekyll). It serves a\n * build output directory, mounted at the collection `url:` path, until the\n * process is stopped. `node:http` and `node:fs` only.\n */\nimport { createReadStream } from \"node:fs\";\nimport { stat } from \"node:fs/promises\";\nimport { createServer, type IncomingMessage, type Server, type ServerResponse } from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\nimport { extname, join, relative, resolve, sep } from \"node:path\";\nimport { errorMessage } from \"../../shared/errors.js\";\nimport { SiteError } from \"../errors.js\";\n\nexport interface StaticOptions {\n root: string;\n host: string;\n port: number;\n /** The URL path the root is mounted at, e.g. `/manni/`. */\n base: string;\n}\n\n// ponytail: the types a static docs build ships. Anything else goes out as\n// application/octet-stream; add a row when a site needs one.\nconst MIME: Record<string, string> = {\n \".html\": \"text/html; charset=utf-8\",\n \".css\": \"text/css; charset=utf-8\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".mjs\": \"text/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".map\": \"application/json; charset=utf-8\",\n \".txt\": \"text/plain; charset=utf-8\",\n \".xml\": \"application/xml; charset=utf-8\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".avif\": \"image/avif\",\n \".ico\": \"image/x-icon\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n \".ttf\": \"font/ttf\",\n \".wasm\": \"application/wasm\",\n \".pdf\": \"application/pdf\",\n \".webmanifest\": \"application/manifest+json\",\n};\n\n/** `/manni/` from `manni`, `/manni` or `/manni/`; `/` from `/` or empty. */\nfunction normalizeBase(base: string): string {\n const trimmed = base.replace(/^\\/+|\\/+$/g, \"\");\n return trimmed === \"\" ? \"/\" : `/${trimmed}/`;\n}\n\nasync function kindOf(path: string): Promise<\"file\" | \"dir\" | undefined> {\n try {\n const s = await stat(path);\n if (s.isDirectory()) return \"dir\";\n return s.isFile() ? \"file\" : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction sendFile(req: IncomingMessage, res: ServerResponse, path: string, status = 200): void {\n res.writeHead(status, {\n \"content-type\": MIME[extname(path).toLowerCase()] ?? \"application/octet-stream\",\n });\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n createReadStream(path)\n .on(\"error\", () => res.destroy())\n .pipe(res);\n}\n\nfunction redirect(res: ServerResponse, status: 301 | 302, location: string): void {\n res.writeHead(status, { location });\n res.end();\n}\n\n/**\n * The file inside `root` a URL path below the base names, or undefined when it\n * names nothing inside it. The URL parser has already collapsed `..` and\n * `%2e%2e` segments; what it leaves are encoded separators (`..%2f`, `..%5c`),\n * so the decoded path is checked for `..` segments and then for containment.\n * Both layers are needed: the parser normalises before it decodes, so a `..`\n * hidden behind an encoded separator only appears after this decode.\n */\nfunction inside(root: string, rest: string): string | undefined {\n let decoded: string;\n try {\n decoded = decodeURIComponent(rest);\n } catch {\n return undefined;\n }\n if (decoded.includes(\"\\0\") || decoded.split(/[\\\\/]/).includes(\"..\")) return undefined;\n const path = resolve(root, `.${sep}${decoded}`);\n return path === root || path.startsWith(root + sep) ? path : undefined;\n}\n\nfunction handler(root: string, base: string) {\n const notFound = join(root, \"404.html\");\n return async (req: IncomingMessage, res: ServerResponse): Promise<void> => {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n res.writeHead(405, { allow: \"GET, HEAD\" });\n res.end();\n return;\n }\n const url = new URL(req.url ?? \"/\", \"http://localhost\");\n const { pathname } = url;\n if (base !== \"/\" && (pathname === \"/\" || pathname === base.slice(0, -1))) {\n redirect(res, pathname === \"/\" ? 302 : 301, `${base}${url.search}`);\n return;\n }\n const path = pathname.startsWith(base) ? inside(root, pathname.slice(base.length)) : undefined;\n const kind = path === undefined ? undefined : await kindOf(path);\n if (path !== undefined && kind === \"dir\" && !pathname.endsWith(\"/\")) {\n redirect(res, 301, `${pathname}/${url.search}`);\n return;\n }\n const file = path !== undefined && kind === \"dir\" ? join(path, \"index.html\") : path;\n if (file !== undefined && (await kindOf(file)) === \"file\") {\n sendFile(req, res, file);\n } else if ((await kindOf(notFound)) === \"file\") {\n sendFile(req, res, notFound, 404);\n } else {\n res.writeHead(404, { \"content-type\": \"text/plain; charset=utf-8\" });\n res.end(\"Not found\\n\");\n }\n };\n}\n\nfunction urlOf(host: string, port: number, base: string): string {\n const shown = host.includes(\":\") ? `[${host}]` : host;\n return `http://${shown}:${String(port)}${base}`;\n}\n\n/**\n * Serve `root` at `base` on `host:port` and print the URL to stdout once\n * listening. Resolves with the listening server; the caller closes it.\n */\nexport async function startStaticServer(opts: StaticOptions): Promise<Server> {\n const root = resolve(opts.root);\n if ((await kindOf(root)) !== \"dir\") {\n const shown = relative(process.cwd(), root).split(sep).join(\"/\") || \".\";\n throw new SiteError(`${shown}/ does not exist.`);\n }\n const base = normalizeBase(opts.base);\n const handle = handler(root, base);\n const server = createServer((req, res) => {\n handle(req, res).catch(() => res.destroy());\n });\n await new Promise<void>((settle, reject) => {\n server.once(\"error\", (err: NodeJS.ErrnoException) => {\n reject(\n new SiteError(\n err.code === \"EADDRINUSE\"\n ? `port ${String(opts.port)} is in use. Pass --port, or stop the process holding it.`\n : `cannot listen on ${urlOf(opts.host, opts.port, \"\")}: ${errorMessage(err)}`,\n ),\n );\n });\n server.listen(opts.port, opts.host, settle);\n });\n const { port } = server.address() as AddressInfo;\n process.stdout.write(`${urlOf(opts.host, port, base)}\\n`);\n return server;\n}\n\n/** Serve until SIGINT or SIGTERM, then close the server and resolve. */\nexport async function serveStatic(opts: StaticOptions): Promise<void> {\n const server = await startStaticServer(opts);\n await new Promise<void>((settle) => {\n const stop = (): void => {\n process.off(\"SIGINT\", stop);\n process.off(\"SIGTERM\", stop);\n server.close(() => {\n settle();\n });\n server.closeAllConnections();\n };\n process.on(\"SIGINT\", stop);\n process.on(\"SIGTERM\", stop);\n });\n}\n","/**\n * The one command core behind `start`, `build` and `preview`: resolve the\n * verb to a plan, then run it. The three verbs differ only in the plan, which\n * `resolvePlan` owns, so they share this core rather than three copies of it.\n */\nimport { resolvePlan, type ResolveOptions } from \"../core/detect.js\";\nimport { runPlan } from \"../core/run.js\";\nimport type { Verb } from \"../types.js\";\n\n/** Resolves the exit code, 0; anything operational throws `SiteError`. */\nexport async function runSite(verb: Verb, opts: ResolveOptions): Promise<number> {\n return runPlan(resolvePlan(verb, opts));\n}\n"],"mappings":"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","names":["resolve","resolve","fw","statSync","resolve","join","relative","resolve","resolve","join","relative","statSync","resolve"]}
@@ -11,15 +11,15 @@ import {
11
11
  runPromote,
12
12
  runReview,
13
13
  seedGoldenCases
14
- } from "./chunk-FEALEYSE.js";
14
+ } from "./chunk-AO5TSDKT.js";
15
15
  import {
16
16
  renderList,
17
17
  runList
18
- } from "./chunk-RCS5YFY2.js";
18
+ } from "./chunk-H26VDFDS.js";
19
19
  import {
20
20
  runRun
21
- } from "./chunk-4VQBHTGA.js";
22
- import "./chunk-K43X5VDR.js";
21
+ } from "./chunk-IJ62BB2T.js";
22
+ import "./chunk-D2UW3ZCK.js";
23
23
  import "./chunk-XG6PVB5S.js";
24
24
  import {
25
25
  allowExecutionMessage,
@@ -37,16 +37,16 @@ import {
37
37
  DocevalsError
38
38
  } from "./chunk-SE4JN5XN.js";
39
39
  import "./chunk-77AINBYM.js";
40
- import "./chunk-XDS3KQCK.js";
40
+ import "./chunk-G6FNWRAI.js";
41
41
  import {
42
42
  terminalConfirm
43
- } from "./chunk-WBETAXO2.js";
43
+ } from "./chunk-2W34HX2U.js";
44
44
  import {
45
45
  collect,
46
46
  configOption
47
- } from "./chunk-WT6HMEEF.js";
48
- import "./chunk-YVVMC4SZ.js";
49
- import "./chunk-6HMLYFEU.js";
47
+ } from "./chunk-KBG463UK.js";
48
+ import "./chunk-QBVP3SQP.js";
49
+ import "./chunk-G7XD4QH5.js";
50
50
  import {
51
51
  fail
52
52
  } from "./chunk-YEUYKR62.js";
@@ -55,7 +55,7 @@ import {
55
55
  palette
56
56
  } from "./chunk-RNVYGWIC.js";
57
57
  import "./chunk-MNH7QO4Z.js";
58
- import "./chunk-XKBEHKWO.js";
58
+ import "./chunk-6M5VJOC2.js";
59
59
  import {
60
60
  notice
61
61
  } from "./chunk-HX44GB4Z.js";
@@ -64,7 +64,7 @@ import {
64
64
  } from "./chunk-QCHVR4ZM.js";
65
65
  import {
66
66
  package_default
67
- } from "./chunk-N7J5C35C.js";
67
+ } from "./chunk-2BV4FBC7.js";
68
68
  import "./chunk-OWBRDNRZ.js";
69
69
  import "./chunk-G3T47CFV.js";
70
70
  import "./chunk-2H7UOFLK.js";
@@ -470,4 +470,4 @@ export {
470
470
  buildProgram,
471
471
  colorFor
472
472
  };
473
- //# sourceMappingURL=cli-UB5W75GJ.js.map
473
+ //# sourceMappingURL=cli-P2X7PNY6.js.map
@@ -3,21 +3,21 @@ import {
3
3
  renderList,
4
4
  runFill,
5
5
  runList
6
- } from "./chunk-LAU6SVTJ.js";
6
+ } from "./chunk-XU73V5XT.js";
7
7
  import {
8
8
  CALIBRATE_FORMATS,
9
9
  REPORT_FORMATS,
10
10
  SUMMARY_FORMATS,
11
11
  parseFormat,
12
12
  runRun
13
- } from "./chunk-ZIGIJBXG.js";
14
- import "./chunk-77L5GNVO.js";
15
- import "./chunk-C2JPBQCJ.js";
13
+ } from "./chunk-2YJ5H5E6.js";
14
+ import "./chunk-Z5YHMRLF.js";
15
+ import "./chunk-5REEVKGH.js";
16
16
  import "./chunk-FQGLRJGX.js";
17
17
  import "./chunk-CWXZ2MRT.js";
18
- import "./chunk-POGYWOJ2.js";
18
+ import "./chunk-EAUIQADY.js";
19
19
  import "./chunk-4TSWU2SU.js";
20
- import "./chunk-KPXOJMQ6.js";
20
+ import "./chunk-GCKHSBEN.js";
21
21
  import "./chunk-CU57HT2E.js";
22
22
  import "./chunk-NGTVREIH.js";
23
23
  import {
@@ -30,16 +30,16 @@ import {
30
30
  } from "./chunk-YNHZHSSM.js";
31
31
  import "./chunk-GLP5PSXB.js";
32
32
  import "./chunk-77AINBYM.js";
33
- import "./chunk-XDS3KQCK.js";
33
+ import "./chunk-G6FNWRAI.js";
34
34
  import {
35
35
  terminalConfirm
36
- } from "./chunk-WBETAXO2.js";
36
+ } from "./chunk-2W34HX2U.js";
37
37
  import {
38
38
  collect,
39
39
  configOption
40
- } from "./chunk-WT6HMEEF.js";
41
- import "./chunk-YVVMC4SZ.js";
42
- import "./chunk-6HMLYFEU.js";
40
+ } from "./chunk-KBG463UK.js";
41
+ import "./chunk-QBVP3SQP.js";
42
+ import "./chunk-G7XD4QH5.js";
43
43
  import {
44
44
  fail
45
45
  } from "./chunk-YEUYKR62.js";
@@ -47,7 +47,7 @@ import {
47
47
  colorFor
48
48
  } from "./chunk-RNVYGWIC.js";
49
49
  import "./chunk-MNH7QO4Z.js";
50
- import "./chunk-XKBEHKWO.js";
50
+ import "./chunk-6M5VJOC2.js";
51
51
  import {
52
52
  notice
53
53
  } from "./chunk-HX44GB4Z.js";
@@ -56,7 +56,7 @@ import {
56
56
  } from "./chunk-QCHVR4ZM.js";
57
57
  import {
58
58
  package_default
59
- } from "./chunk-N7J5C35C.js";
59
+ } from "./chunk-2BV4FBC7.js";
60
60
  import "./chunk-OWBRDNRZ.js";
61
61
  import "./chunk-G3T47CFV.js";
62
62
  import "./chunk-2H7UOFLK.js";
@@ -157,7 +157,7 @@ function buildProgram() {
157
157
  "--manifest names one session's manifest, so it cannot be used with a corpus; drop it and each trace will find its own"
158
158
  );
159
159
  }
160
- const { runBatch } = await import("./batch-QMHYWGUA.js");
160
+ const { runBatch } = await import("./batch-6NICDKRE.js");
161
161
  const { report: report2, rendered: rendered2 } = await runBatch({
162
162
  ...shared,
163
163
  ...traces.length > 0 ? { traces } : {}
@@ -276,7 +276,7 @@ function buildProgram() {
276
276
  whole("--max-false-pass", opts.maxFalsePass, 0);
277
277
  whole("--max-false-fail", opts.maxFalseFail, 0);
278
278
  whole("--max-review", opts.maxReview, 0);
279
- const { runCalibrate } = await import("./calibrate-KBMFGKP3.js");
279
+ const { runCalibrate } = await import("./calibrate-LUA3DWKD.js");
280
280
  const { report, rendered } = await runCalibrate({
281
281
  ...shared,
282
282
  ...traces.length > 0 ? { traces } : {},
@@ -378,7 +378,7 @@ function buildProgram() {
378
378
  "pretty"
379
379
  ).action(async (opts) => {
380
380
  try {
381
- const { runCapture } = await import("./capture-C46UXFRK.js");
381
+ const { runCapture } = await import("./capture-NETOHCB4.js");
382
382
  const result = await runCapture({
383
383
  version,
384
384
  ...configOptions(opts),
@@ -405,7 +405,7 @@ function buildProgram() {
405
405
  "pretty"
406
406
  ).action(async (opts) => {
407
407
  try {
408
- const { runPrepare } = await import("./prepare-FPEWAHJH.js");
408
+ const { runPrepare } = await import("./prepare-UPIBTFNS.js");
409
409
  const result = await runPrepare({
410
410
  ...configOptions(opts),
411
411
  ...opts.project !== void 0 ? { project: opts.project } : {},
@@ -442,7 +442,7 @@ function buildProgram() {
442
442
  throw new TracevalsError(`tracevals check takes one trace, got ${String(traces.length)}`);
443
443
  }
444
444
  whole("--runs", opts.runs, 1);
445
- const { runCheck } = await import("./check-CORYIW76.js");
445
+ const { runCheck } = await import("./check-NLL4NRYA.js");
446
446
  const { report, rendered } = await runCheck({
447
447
  ...configOptions(opts),
448
448
  tracePath: trace,
@@ -513,4 +513,4 @@ function buildProgram() {
513
513
  export {
514
514
  buildProgram
515
515
  };
516
- //# sourceMappingURL=cli-QR3ZQZA4.js.map
516
+ //# sourceMappingURL=cli-SGVFZOAW.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  renderCheck,
4
4
  runCheck
5
- } from "./chunk-ECVQNGTH.js";
5
+ } from "./chunk-DNZUBCGZ.js";
6
6
  import {
7
7
  EXPORT_TARGETS,
8
8
  SEARCH_MODES,
@@ -19,34 +19,34 @@ import {
19
19
  runSearch,
20
20
  runStats,
21
21
  runTraverse
22
- } from "./chunk-PO5W6JAP.js";
22
+ } from "./chunk-2JV7C4YV.js";
23
23
  import {
24
24
  DEFAULT_EXTENSIONS,
25
25
  STDIN,
26
26
  assertInputFormat,
27
27
  runBuild
28
- } from "./chunk-NB4ILZMQ.js";
29
- import "./chunk-XXDXIIQ4.js";
28
+ } from "./chunk-CCWMACJL.js";
29
+ import "./chunk-6AGESHHM.js";
30
30
  import {
31
31
  ALL_FILL_FIELDS,
32
32
  CONFIG_SECTION,
33
33
  DEFAULT_CONFIG_FILENAME,
34
34
  GraphError
35
- } from "./chunk-6KKZXB2O.js";
36
- import "./chunk-AO66Q66S.js";
35
+ } from "./chunk-VVVKBUBO.js";
36
+ import "./chunk-ZHRPH52H.js";
37
37
  import "./chunk-TIUTIOFB.js";
38
38
  import "./chunk-YGFIQ6Y5.js";
39
- import "./chunk-XDS3KQCK.js";
40
- import "./chunk-WBETAXO2.js";
39
+ import "./chunk-G6FNWRAI.js";
40
+ import "./chunk-2W34HX2U.js";
41
41
  import {
42
42
  collect,
43
43
  configOption,
44
44
  readStdin,
45
45
  splitList,
46
46
  writeTextAtomic
47
- } from "./chunk-WT6HMEEF.js";
48
- import "./chunk-YVVMC4SZ.js";
49
- import "./chunk-6HMLYFEU.js";
47
+ } from "./chunk-KBG463UK.js";
48
+ import "./chunk-QBVP3SQP.js";
49
+ import "./chunk-G7XD4QH5.js";
50
50
  import {
51
51
  fail
52
52
  } from "./chunk-YEUYKR62.js";
@@ -54,7 +54,7 @@ import {
54
54
  shouldColor
55
55
  } from "./chunk-RNVYGWIC.js";
56
56
  import "./chunk-MNH7QO4Z.js";
57
- import "./chunk-XKBEHKWO.js";
57
+ import "./chunk-6M5VJOC2.js";
58
58
  import {
59
59
  warn
60
60
  } from "./chunk-HX44GB4Z.js";
@@ -63,7 +63,7 @@ import {
63
63
  } from "./chunk-QCHVR4ZM.js";
64
64
  import {
65
65
  package_default
66
- } from "./chunk-N7J5C35C.js";
66
+ } from "./chunk-2BV4FBC7.js";
67
67
  import "./chunk-OWBRDNRZ.js";
68
68
  import {
69
69
  errorMessage
@@ -627,4 +627,4 @@ export {
627
627
  buildProgram,
628
628
  colorFor
629
629
  };
630
- //# sourceMappingURL=cli-5AML7QR2.js.map
630
+ //# sourceMappingURL=cli-TELPAMJO.js.map
@@ -22,12 +22,12 @@ import {
22
22
  matchesFileGlob,
23
23
  readConfigFile,
24
24
  selectCollections
25
- } from "./chunk-XKBEHKWO.js";
25
+ } from "./chunk-6M5VJOC2.js";
26
26
  import "./chunk-HX44GB4Z.js";
27
27
  import "./chunk-QCHVR4ZM.js";
28
28
  import {
29
29
  package_default
30
- } from "./chunk-N7J5C35C.js";
30
+ } from "./chunk-2BV4FBC7.js";
31
31
  import {
32
32
  programName
33
33
  } from "./chunk-OWBRDNRZ.js";
@@ -1202,4 +1202,4 @@ export {
1202
1202
  resolveCrawl,
1203
1203
  resolveMaxPages
1204
1204
  };
1205
- //# sourceMappingURL=cli-I4GBPLRM.js.map
1205
+ //# sourceMappingURL=cli-UETKXHJN.js.map
@@ -3,26 +3,26 @@ import {
3
3
  runAdd,
4
4
  runRemove,
5
5
  runUpdate
6
- } from "./chunk-Z27GYQOY.js";
6
+ } from "./chunk-2UCC26MO.js";
7
7
  import {
8
8
  runCheck
9
- } from "./chunk-HWNSIEZK.js";
9
+ } from "./chunk-3E2X2RBU.js";
10
10
  import {
11
11
  findingMessage,
12
12
  renderCheckGithub
13
- } from "./chunk-5LAKRYXU.js";
13
+ } from "./chunk-SUTMSDQ2.js";
14
14
  import {
15
15
  renderCheckPretty,
16
16
  renderRemovePretty,
17
17
  renderUpdatePretty
18
- } from "./chunk-F734HIHT.js";
18
+ } from "./chunk-7Y3N4Y72.js";
19
19
  import {
20
20
  errorSite,
21
21
  shortCommit,
22
22
  shortLine,
23
23
  shortPin,
24
24
  shortSrc
25
- } from "./chunk-SXODK43S.js";
25
+ } from "./chunk-RZVCWX5R.js";
26
26
  import {
27
27
  renderCheckJson,
28
28
  renderRemoveJson,
@@ -35,12 +35,12 @@ import {
35
35
  asCiteError,
36
36
  isCiteRule,
37
37
  spellSource
38
- } from "./chunk-VSOYZ7QH.js";
38
+ } from "./chunk-PK7EKJ5T.js";
39
39
  import "./chunk-IKEWBMCN.js";
40
- import "./chunk-XDS3KQCK.js";
40
+ import "./chunk-G6FNWRAI.js";
41
41
  import {
42
42
  terminalConfirm
43
- } from "./chunk-WBETAXO2.js";
43
+ } from "./chunk-2W34HX2U.js";
44
44
  import {
45
45
  collect,
46
46
  configOption,
@@ -49,7 +49,7 @@ import {
49
49
  reportConfig,
50
50
  splitList,
51
51
  splitPageArgument
52
- } from "./chunk-WT6HMEEF.js";
52
+ } from "./chunk-KBG463UK.js";
53
53
  import {
54
54
  COMMON_FORMAT_LIST,
55
55
  OMITTED_WHEN_CLEAN,
@@ -59,10 +59,10 @@ import {
59
59
  isReportFormat,
60
60
  renderJunit,
61
61
  renderSarif
62
- } from "./chunk-YVVMC4SZ.js";
62
+ } from "./chunk-QBVP3SQP.js";
63
63
  import {
64
64
  STDIN_TOKEN
65
- } from "./chunk-6HMLYFEU.js";
65
+ } from "./chunk-G7XD4QH5.js";
66
66
  import {
67
67
  fail
68
68
  } from "./chunk-YEUYKR62.js";
@@ -70,14 +70,14 @@ import {
70
70
  shouldColor
71
71
  } from "./chunk-RNVYGWIC.js";
72
72
  import "./chunk-MNH7QO4Z.js";
73
- import "./chunk-XKBEHKWO.js";
73
+ import "./chunk-6M5VJOC2.js";
74
74
  import {
75
75
  notice
76
76
  } from "./chunk-HX44GB4Z.js";
77
77
  import "./chunk-QCHVR4ZM.js";
78
78
  import {
79
79
  package_default
80
- } from "./chunk-N7J5C35C.js";
80
+ } from "./chunk-2BV4FBC7.js";
81
81
  import "./chunk-OWBRDNRZ.js";
82
82
  import "./chunk-G3T47CFV.js";
83
83
  import "./chunk-2H7UOFLK.js";
@@ -547,4 +547,4 @@ export {
547
547
  colorFor,
548
548
  splitPageArgument2 as splitPageArgument
549
549
  };
550
- //# sourceMappingURL=cli-WWDARAWS.js.map
550
+ //# sourceMappingURL=cli-V2DI3K2R.js.map
package/dist/cli.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-YEUYKR62.js";
5
5
  import {
6
6
  package_default
7
- } from "./chunk-N7J5C35C.js";
7
+ } from "./chunk-2BV4FBC7.js";
8
8
  import "./chunk-OWBRDNRZ.js";
9
9
  import "./chunk-G3T47CFV.js";
10
10
  import "./chunk-2H7UOFLK.js";
@@ -15,7 +15,7 @@ var DOMAINS = [
15
15
  {
16
16
  names: ["meta"],
17
17
  load: async () => [
18
- (await import("./cli-MNNOXWYU.js")).buildProgram().name("meta").description(
18
+ (await import("./cli-HO62TOM2.js")).buildProgram().name("meta").description(
19
19
  "Validate, read, query and fill document metadata against JSON Schema"
20
20
  )
21
21
  ]
@@ -23,7 +23,7 @@ var DOMAINS = [
23
23
  {
24
24
  names: ["a11y"],
25
25
  load: async () => [
26
- (await import("./cli-I4GBPLRM.js")).buildProgram().name("a11y").description(
26
+ (await import("./cli-UETKXHJN.js")).buildProgram().name("a11y").description(
27
27
  "Crawl a site and check every page for accessibility violations with axe-core"
28
28
  )
29
29
  ]
@@ -31,7 +31,7 @@ var DOMAINS = [
31
31
  {
32
32
  names: ["cite"],
33
33
  load: async () => [
34
- (await import("./cli-WWDARAWS.js")).buildProgram().name("cite").description(
34
+ (await import("./cli-V2DI3K2R.js")).buildProgram().name("cite").description(
35
35
  "Track citations from doc claims to source lines and check them for drift"
36
36
  )
37
37
  ]
@@ -39,7 +39,7 @@ var DOMAINS = [
39
39
  {
40
40
  names: ["lint"],
41
41
  load: async () => [
42
- (await import("./cli-4B5RWL7P.js")).buildProgram().name("lint").description(
42
+ (await import("./cli-BIIUKPTE.js")).buildProgram().name("lint").description(
43
43
  "Validate document structure against doctype templates, routed by a page's type"
44
44
  )
45
45
  ]
@@ -47,7 +47,7 @@ var DOMAINS = [
47
47
  {
48
48
  names: ["docevals"],
49
49
  load: async () => [
50
- (await import("./cli-UB5W75GJ.js")).buildProgram().name("docevals").description(
50
+ (await import("./cli-P2X7PNY6.js")).buildProgram().name("docevals").description(
51
51
  "Deterministic and LLM-as-judge evals for documentation pages, driven by frontmatter"
52
52
  )
53
53
  ]
@@ -55,13 +55,13 @@ var DOMAINS = [
55
55
  {
56
56
  names: ["term"],
57
57
  load: async () => [
58
- (await import("./term-HTIG3YDC.js")).buildProgram().name("term").description("Check, lint and render a docset's terms and the references into them")
58
+ (await import("./term-ASM4LVYC.js")).buildProgram().name("term").description("Check, lint and render a docset's terms and the references into them")
59
59
  ]
60
60
  },
61
61
  {
62
62
  names: ["graph"],
63
63
  load: async () => [
64
- (await import("./cli-5AML7QR2.js")).buildProgram().name("graph").description(
64
+ (await import("./cli-TELPAMJO.js")).buildProgram().name("graph").description(
65
65
  "Deterministic knowledge graphs derived from documentation frontmatter and formatting"
66
66
  )
67
67
  ]
@@ -69,7 +69,7 @@ var DOMAINS = [
69
69
  {
70
70
  names: ["tracevals"],
71
71
  load: async () => [
72
- (await import("./cli-QR3ZQZA4.js")).buildProgram().name("tracevals").description(
72
+ (await import("./cli-SGVFZOAW.js")).buildProgram().name("tracevals").description(
73
73
  "Deterministic and LLM-as-judge adherence evals for AI agent session traces"
74
74
  )
75
75
  ]
@@ -78,7 +78,14 @@ var DOMAINS = [
78
78
  {
79
79
  names: ["key"],
80
80
  load: async () => [
81
- (await import("./cli-SBJY2NQH.js")).buildProgram().name("key").description("Set and rotate the family key that encrypted values are encrypted with.")
81
+ (await import("./cli-4YYC6LCY.js")).buildProgram().name("key").description("Set and rotate the family key that encrypted values are encrypted with.")
82
+ ]
83
+ },
84
+ // The docs site, a family resource with verbs like `key` (proposal 0082).
85
+ {
86
+ names: ["site"],
87
+ load: async () => [
88
+ (await import("./cli-LWST5FQH.js")).buildProgram().name("site").description("Start, build and preview the docs site")
82
89
  ]
83
90
  },
84
91
  // The two family verbs (proposal 0078), and the only verbs the umbrella
@@ -86,7 +93,7 @@ var DOMAINS = [
86
93
  {
87
94
  names: ["check", "status"],
88
95
  load: async () => {
89
- const { buildCheck, buildStatus } = await import("./cli-XIQKPNA7.js");
96
+ const { buildCheck, buildStatus } = await import("./cli-EH3I4IUX.js");
90
97
  return [buildCheck(), buildStatus()];
91
98
  }
92
99
  }