@yorz/cli 0.9.2 → 0.9.3

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 (128) hide show
  1. package/dist/cli/index.js +57 -51
  2. package/dist/cli/serve-launcher.cjs +56 -0
  3. package/dist/gui/assets/{abnfDiagram-VRR7QNED-CvFCe3r_.js → abnfDiagram-VRR7QNED-BXdYbq3y.js} +1 -1
  4. package/dist/{gui-mobile/assets/arc-BBWQwcOX.js → gui/assets/arc-BDaL1Z0T.js} +1 -1
  5. package/dist/{gui-mobile/assets/architectureDiagram-ZJ3FMSHR-BdDouhRk.js → gui/assets/architectureDiagram-ZJ3FMSHR-DBV2eI0R.js} +1 -1
  6. package/dist/{gui-mobile/assets/blockDiagram-677ZJIJ3-CyfQcEAp.js → gui/assets/blockDiagram-677ZJIJ3-BukUw8ke.js} +1 -1
  7. package/dist/gui/assets/{c4Diagram-LMCZKHZV-Cgt15wDO.js → c4Diagram-LMCZKHZV-BQRLrFmd.js} +1 -1
  8. package/dist/gui/assets/channel-CmM-rnSu.js +1 -0
  9. package/dist/gui/assets/{chunk-2Q5K7J3B-ByMpzo_7.js → chunk-2Q5K7J3B-Bb01F4JY.js} +1 -1
  10. package/dist/gui/assets/{chunk-32BRIVSS-LHwTDCaD.js → chunk-32BRIVSS-D_fmYp0w.js} +1 -1
  11. package/dist/gui/assets/{chunk-5VM5RSS4-CXrS6z-4.js → chunk-5VM5RSS4-CSVRyWUl.js} +1 -1
  12. package/dist/gui/assets/{chunk-EX3LRPZG-Bw7a0zH3.js → chunk-EX3LRPZG-0tMlNePS.js} +1 -1
  13. package/dist/gui/assets/{chunk-JWPE2WC7-wFaiogOx.js → chunk-JWPE2WC7-BjMvMllJ.js} +1 -1
  14. package/dist/gui/assets/{chunk-MOJQB5TN-CC4tXc_1.js → chunk-MOJQB5TN-kCAEgJRp.js} +1 -1
  15. package/dist/gui/assets/{chunk-RYQCIY6F-BzMRf9sh.js → chunk-RYQCIY6F-Bux4XgPK.js} +1 -1
  16. package/dist/gui/assets/{chunk-V7JOEXUC-DXF9bAuV.js → chunk-V7JOEXUC-BP87KF_P.js} +1 -1
  17. package/dist/gui/assets/{chunk-VR4S4FIN-DlTRKb1a.js → chunk-VR4S4FIN-DTiqIx-p.js} +1 -1
  18. package/dist/gui/assets/{chunk-XXDRQBXY-kVTuzkcL.js → chunk-XXDRQBXY-B7k8EFM_.js} +1 -1
  19. package/dist/gui/assets/classDiagram-OUVF2IWQ-foBbbuIG.js +1 -0
  20. package/dist/gui/assets/classDiagram-v2-EOCWNBFH-foBbbuIG.js +1 -0
  21. package/dist/{gui-mobile/assets/cose-bilkent-JH36ORCC-k5DcB7wy.js → gui/assets/cose-bilkent-JH36ORCC-BaKMo0vy.js} +1 -1
  22. package/dist/gui/assets/{cynefin-VYW2F7L2-BKxPBlKv.js → cynefin-VYW2F7L2-DzMBSujh.js} +1 -1
  23. package/dist/{gui-mobile/assets/cynefinDiagram-TSTJHNR4-CfH5z8jt.js → gui/assets/cynefinDiagram-TSTJHNR4-BeUiEs05.js} +1 -1
  24. package/dist/gui/assets/{dagre-VKFMJZFB-B_6xJi_I.js → dagre-VKFMJZFB-Ds02vw0z.js} +1 -1
  25. package/dist/gui/assets/{diagram-FQU43EPY-DSPwTKxt.js → diagram-FQU43EPY-CMCJAQGZ.js} +1 -1
  26. package/dist/{gui-mobile/assets/diagram-G47NLZAW-CJFcYT7j.js → gui/assets/diagram-G47NLZAW-BsBRMo6j.js} +1 -1
  27. package/dist/gui/assets/{diagram-NH7WQ7WH-Dz_3pmyJ.js → diagram-NH7WQ7WH-C4WG9hEr.js} +1 -1
  28. package/dist/{gui-mobile/assets/diagram-OA4YK3LP-c_vARYuP.js → gui/assets/diagram-OA4YK3LP-BA2cjwAc.js} +1 -1
  29. package/dist/gui/assets/{diagram-WEI45ONY-Dq-7pg1u.js → diagram-WEI45ONY-DE9_2qZ8.js} +1 -1
  30. package/dist/gui/assets/{ebnfDiagram-CCIWWBDH-DqkXLemr.js → ebnfDiagram-CCIWWBDH-BL7vwncJ.js} +1 -1
  31. package/dist/{gui-mobile/assets/erDiagram-Q63AITRT-BosAgKfh.js → gui/assets/erDiagram-Q63AITRT-rCrtODep.js} +1 -1
  32. package/dist/gui/assets/{flowDiagram-23GEKE2U-BItXJm0z.js → flowDiagram-23GEKE2U-DcgdUDC_.js} +1 -1
  33. package/dist/{gui-mobile/assets/ganttDiagram-NO4QXBWP-CJGUZTqX.js → gui/assets/ganttDiagram-NO4QXBWP-BsWsRaQX.js} +1 -1
  34. package/dist/gui/assets/{gitGraphDiagram-IHSO6WYX-DOTmWDXD.js → gitGraphDiagram-IHSO6WYX-Bh16bq4A.js} +1 -1
  35. package/dist/gui/assets/{index-CkGO8Fpq.js → index-oIjkNbg4.js} +21 -21
  36. package/dist/gui/assets/{infoDiagram-FWYZ7A6U-CH94-RWl.js → infoDiagram-FWYZ7A6U-CKRUUIby.js} +1 -1
  37. package/dist/gui/assets/{ishikawaDiagram-FXEZZL3T-DnPsPjhE.js → ishikawaDiagram-FXEZZL3T-CEMvAMgC.js} +1 -1
  38. package/dist/{gui-mobile/assets/journeyDiagram-5HDEW3XC-B4ejke91.js → gui/assets/journeyDiagram-5HDEW3XC-hPSE5KSG.js} +1 -1
  39. package/dist/gui/assets/{kanban-definition-HUTT4EX6-CnEFBR_5.js → kanban-definition-HUTT4EX6-D2JIKO0d.js} +1 -1
  40. package/dist/gui/assets/{linear-C76lB0Op.js → linear-1sIzYuR6.js} +1 -1
  41. package/dist/gui/assets/{mermaid.core-rkuoyu1Y.js → mermaid.core-_0eTmAI-.js} +4 -4
  42. package/dist/gui/assets/{mindmap-definition-LN4V7U3C-Cp4m5M8t.js → mindmap-definition-LN4V7U3C-Pci6rYHR.js} +1 -1
  43. package/dist/gui/assets/{pegDiagram-2B236MQR-OpqvRJRn.js → pegDiagram-2B236MQR-q2F8rPpc.js} +1 -1
  44. package/dist/gui/assets/{pieDiagram-ENE6RG2P-CA2NTDmg.js → pieDiagram-ENE6RG2P-Bxs2H0I9.js} +1 -1
  45. package/dist/{gui-mobile/assets/quadrantDiagram-ABIIQ3AL-CpOioe7x.js → gui/assets/quadrantDiagram-ABIIQ3AL-jhiPHiLV.js} +1 -1
  46. package/dist/gui/assets/{railroadDiagram-RFXS5EU6-D8sNxc-D.js → railroadDiagram-RFXS5EU6-DLkA9HFf.js} +1 -1
  47. package/dist/gui/assets/{requirementDiagram-TGXJPOKE-B_BAewjP.js → requirementDiagram-TGXJPOKE-DmqV2XMZ.js} +1 -1
  48. package/dist/{gui-mobile/assets/sankeyDiagram-HTMAVEWB-6gqAXG6C.js → gui/assets/sankeyDiagram-HTMAVEWB-DKKUsQKC.js} +1 -1
  49. package/dist/{gui-mobile/assets/sequenceDiagram-DBY2YBRQ-D-7-OUF6.js → gui/assets/sequenceDiagram-DBY2YBRQ-DFX-fI6J.js} +1 -1
  50. package/dist/gui/assets/{sizeCapture-X5ZJPWSS-uA8UtQtp.js → sizeCapture-X5ZJPWSS-dcpaI63h.js} +1 -1
  51. package/dist/{gui-mobile/assets/stateDiagram-2N3HPSRC-CBem3dqE.js → gui/assets/stateDiagram-2N3HPSRC-DOBn8whp.js} +1 -1
  52. package/dist/gui/assets/stateDiagram-v2-6OUMAXLB-CSydFa0j.js +1 -0
  53. package/dist/{gui-mobile/assets/swimlanes-5IMT3BWC-CTxpjyu6.js → gui/assets/swimlanes-5IMT3BWC-CrvE3E_z.js} +2 -2
  54. package/dist/gui/assets/swimlanesDiagram-G3AALYLV-CqM-5nJs.js +8 -0
  55. package/dist/{gui-mobile/assets/timeline-definition-FHXFAJF6-sxn38dUp.js → gui/assets/timeline-definition-FHXFAJF6-Cg8Rxg6S.js} +1 -1
  56. package/dist/gui/assets/{vennDiagram-L72KCM5P-B29R19dw.js → vennDiagram-L72KCM5P-CgwpgHPj.js} +1 -1
  57. package/dist/gui/assets/{wardleyDiagram-EHGQE667-B5eqpyg8.js → wardleyDiagram-EHGQE667-Cnc-fgIC.js} +1 -1
  58. package/dist/{gui-mobile/assets/xychartDiagram-FW5EYKEG-AmEku7SD.js → gui/assets/xychartDiagram-FW5EYKEG-Do9QbE6u.js} +1 -1
  59. package/dist/gui/index.html +1 -1
  60. package/dist/gui-mobile/assets/{abnfDiagram-VRR7QNED-dO2fe8On.js → abnfDiagram-VRR7QNED-3aNc_9tC.js} +1 -1
  61. package/dist/{gui/assets/arc-BR65Sp8N.js → gui-mobile/assets/arc-BinP16HO.js} +1 -1
  62. package/dist/{gui/assets/architectureDiagram-ZJ3FMSHR-AiVGAt8P.js → gui-mobile/assets/architectureDiagram-ZJ3FMSHR-DPaYnoe2.js} +1 -1
  63. package/dist/{gui/assets/blockDiagram-677ZJIJ3-HuFROz1l.js → gui-mobile/assets/blockDiagram-677ZJIJ3-CcdgoWjg.js} +1 -1
  64. package/dist/gui-mobile/assets/{c4Diagram-LMCZKHZV-BDwCd8AJ.js → c4Diagram-LMCZKHZV-Dt-ebUaz.js} +1 -1
  65. package/dist/gui-mobile/assets/channel-BwGfICk5.js +1 -0
  66. package/dist/gui-mobile/assets/{chunk-2Q5K7J3B-C21jFDT7.js → chunk-2Q5K7J3B-Dkn1JJmn.js} +1 -1
  67. package/dist/gui-mobile/assets/{chunk-32BRIVSS-DYcgMwLC.js → chunk-32BRIVSS-Cou5wk8N.js} +1 -1
  68. package/dist/gui-mobile/assets/{chunk-5VM5RSS4-DHUChIkE.js → chunk-5VM5RSS4-DE1VWYBj.js} +1 -1
  69. package/dist/gui-mobile/assets/{chunk-EX3LRPZG-BsiOO0cg.js → chunk-EX3LRPZG-DIJfdh0r.js} +1 -1
  70. package/dist/gui-mobile/assets/{chunk-JWPE2WC7-DwRFcp8M.js → chunk-JWPE2WC7-DMTNZnRa.js} +1 -1
  71. package/dist/gui-mobile/assets/{chunk-MOJQB5TN-CZAIa8xj.js → chunk-MOJQB5TN-C37wZo1y.js} +1 -1
  72. package/dist/gui-mobile/assets/{chunk-RYQCIY6F-CjiSByKd.js → chunk-RYQCIY6F-B00F7z4X.js} +1 -1
  73. package/dist/gui-mobile/assets/{chunk-V7JOEXUC-C5X5gobg.js → chunk-V7JOEXUC-BBhJsm6x.js} +1 -1
  74. package/dist/gui-mobile/assets/{chunk-VR4S4FIN-BG4Ho3oM.js → chunk-VR4S4FIN-BaRfY0Qz.js} +1 -1
  75. package/dist/gui-mobile/assets/{chunk-XXDRQBXY-Cy55QGn1.js → chunk-XXDRQBXY-DLP_jCaJ.js} +1 -1
  76. package/dist/gui-mobile/assets/classDiagram-OUVF2IWQ-BC5JEZFR.js +1 -0
  77. package/dist/gui-mobile/assets/classDiagram-v2-EOCWNBFH-BC5JEZFR.js +1 -0
  78. package/dist/{gui/assets/cose-bilkent-JH36ORCC-BAqcUvRT.js → gui-mobile/assets/cose-bilkent-JH36ORCC--rhAXZui.js} +1 -1
  79. package/dist/gui-mobile/assets/{cynefin-VYW2F7L2-D0zs5vNv.js → cynefin-VYW2F7L2-DP4VQrg7.js} +1 -1
  80. package/dist/{gui/assets/cynefinDiagram-TSTJHNR4-B30nmSKx.js → gui-mobile/assets/cynefinDiagram-TSTJHNR4-CQ3yGfYY.js} +1 -1
  81. package/dist/gui-mobile/assets/{dagre-VKFMJZFB-WliPW3Tx.js → dagre-VKFMJZFB-BbgmZx8f.js} +1 -1
  82. package/dist/gui-mobile/assets/{diagram-FQU43EPY-CdurYY3r.js → diagram-FQU43EPY-B3ayJYFS.js} +1 -1
  83. package/dist/{gui/assets/diagram-G47NLZAW-CE6kku8E.js → gui-mobile/assets/diagram-G47NLZAW-CqXfBP6i.js} +1 -1
  84. package/dist/gui-mobile/assets/{diagram-NH7WQ7WH-Covs7EOO.js → diagram-NH7WQ7WH-DPg20-Zs.js} +1 -1
  85. package/dist/{gui/assets/diagram-OA4YK3LP-9K6njZVx.js → gui-mobile/assets/diagram-OA4YK3LP-DF9IybfH.js} +1 -1
  86. package/dist/gui-mobile/assets/{diagram-WEI45ONY-B8DLNiMy.js → diagram-WEI45ONY-BSAcECq5.js} +1 -1
  87. package/dist/gui-mobile/assets/{ebnfDiagram-CCIWWBDH-dOuQRK-3.js → ebnfDiagram-CCIWWBDH-BhJETAAk.js} +1 -1
  88. package/dist/{gui/assets/erDiagram-Q63AITRT-DwCKeJjN.js → gui-mobile/assets/erDiagram-Q63AITRT-DWpkkPmJ.js} +1 -1
  89. package/dist/gui-mobile/assets/{flowDiagram-23GEKE2U-HWFThTdv.js → flowDiagram-23GEKE2U-CHAjzU36.js} +1 -1
  90. package/dist/{gui/assets/ganttDiagram-NO4QXBWP-B7F8aBqd.js → gui-mobile/assets/ganttDiagram-NO4QXBWP-B3b1yqDR.js} +1 -1
  91. package/dist/gui-mobile/assets/{gitGraphDiagram-IHSO6WYX-D1j9Ff_z.js → gitGraphDiagram-IHSO6WYX-BqRTGYY0.js} +1 -1
  92. package/dist/gui-mobile/assets/{index-BWC60m5U.js → index-BwPHOQF7.js} +15 -15
  93. package/dist/gui-mobile/assets/{infoDiagram-FWYZ7A6U-5Gq_R5ny.js → infoDiagram-FWYZ7A6U-4PN9nRxs.js} +1 -1
  94. package/dist/gui-mobile/assets/{ishikawaDiagram-FXEZZL3T-DZAckb0K.js → ishikawaDiagram-FXEZZL3T-wzGQWfQz.js} +1 -1
  95. package/dist/{gui/assets/journeyDiagram-5HDEW3XC-IxNPj9DL.js → gui-mobile/assets/journeyDiagram-5HDEW3XC-C0pTHZiP.js} +1 -1
  96. package/dist/gui-mobile/assets/{kanban-definition-HUTT4EX6-CKIlESkz.js → kanban-definition-HUTT4EX6-D_XwIFzm.js} +1 -1
  97. package/dist/gui-mobile/assets/{linear-DjghM5B6.js → linear-DHPIiHoC.js} +1 -1
  98. package/dist/gui-mobile/assets/{mermaid.core-Cery4OJZ.js → mermaid.core-DWa29NaI.js} +4 -4
  99. package/dist/gui-mobile/assets/{mindmap-definition-LN4V7U3C-Bb9PmQcE.js → mindmap-definition-LN4V7U3C-BsAz9DiI.js} +1 -1
  100. package/dist/gui-mobile/assets/{pegDiagram-2B236MQR-Dk6yxZPA.js → pegDiagram-2B236MQR-k9xbtGjh.js} +1 -1
  101. package/dist/gui-mobile/assets/{pieDiagram-ENE6RG2P-9qPsJCKZ.js → pieDiagram-ENE6RG2P-vrMiQFQU.js} +1 -1
  102. package/dist/{gui/assets/quadrantDiagram-ABIIQ3AL-1wgAkd5_.js → gui-mobile/assets/quadrantDiagram-ABIIQ3AL-C0mOJrSQ.js} +1 -1
  103. package/dist/gui-mobile/assets/{railroadDiagram-RFXS5EU6-CYnrq0_H.js → railroadDiagram-RFXS5EU6-BuXb1GwD.js} +1 -1
  104. package/dist/gui-mobile/assets/{requirementDiagram-TGXJPOKE-Dan1m7mP.js → requirementDiagram-TGXJPOKE-zuyAg5UY.js} +1 -1
  105. package/dist/{gui/assets/sankeyDiagram-HTMAVEWB-D5yRszAY.js → gui-mobile/assets/sankeyDiagram-HTMAVEWB-C5rsz_9V.js} +1 -1
  106. package/dist/{gui/assets/sequenceDiagram-DBY2YBRQ-xLRttR6a.js → gui-mobile/assets/sequenceDiagram-DBY2YBRQ-CJPJqG5C.js} +1 -1
  107. package/dist/gui-mobile/assets/{sizeCapture-X5ZJPWSS-Cf4atOsc.js → sizeCapture-X5ZJPWSS-Dfmt1n7j.js} +1 -1
  108. package/dist/{gui/assets/stateDiagram-2N3HPSRC-JLfWMf-y.js → gui-mobile/assets/stateDiagram-2N3HPSRC-CcuZbZ-q.js} +1 -1
  109. package/dist/gui-mobile/assets/stateDiagram-v2-6OUMAXLB-D1oP_d1q.js +1 -0
  110. package/dist/{gui/assets/swimlanes-5IMT3BWC-DzNlggdg.js → gui-mobile/assets/swimlanes-5IMT3BWC-C3tNR3sN.js} +2 -2
  111. package/dist/gui-mobile/assets/swimlanesDiagram-G3AALYLV-auRnO-sL.js +8 -0
  112. package/dist/{gui/assets/timeline-definition-FHXFAJF6-DisxBENp.js → gui-mobile/assets/timeline-definition-FHXFAJF6-DJxPM33l.js} +1 -1
  113. package/dist/gui-mobile/assets/{vennDiagram-L72KCM5P-BI_Xsfbx.js → vennDiagram-L72KCM5P-C95GuO2U.js} +1 -1
  114. package/dist/gui-mobile/assets/{wardleyDiagram-EHGQE667-1DzhpDmv.js → wardleyDiagram-EHGQE667-ULJzIJRO.js} +1 -1
  115. package/dist/{gui/assets/xychartDiagram-FW5EYKEG-BFhk2kj2.js → gui-mobile/assets/xychartDiagram-FW5EYKEG-X6HGdnuS.js} +1 -1
  116. package/dist/gui-mobile/index.html +1 -1
  117. package/dist/gui-mobile/sw.js +1 -1
  118. package/package.json +1 -1
  119. package/dist/gui/assets/channel-DWjIfFiO.js +0 -1
  120. package/dist/gui/assets/classDiagram-OUVF2IWQ-I21k2As-.js +0 -1
  121. package/dist/gui/assets/classDiagram-v2-EOCWNBFH-I21k2As-.js +0 -1
  122. package/dist/gui/assets/stateDiagram-v2-6OUMAXLB-m9lGgZDF.js +0 -1
  123. package/dist/gui/assets/swimlanesDiagram-G3AALYLV-67oDFDZ3.js +0 -8
  124. package/dist/gui-mobile/assets/channel-BH91jO0g.js +0 -1
  125. package/dist/gui-mobile/assets/classDiagram-OUVF2IWQ-DI_HWJF7.js +0 -1
  126. package/dist/gui-mobile/assets/classDiagram-v2-EOCWNBFH-DI_HWJF7.js +0 -1
  127. package/dist/gui-mobile/assets/stateDiagram-v2-6OUMAXLB-BQUCaoqO.js +0 -1
  128. package/dist/gui-mobile/assets/swimlanesDiagram-G3AALYLV-B6OThFgb.js +0 -8
package/dist/cli/index.js CHANGED
@@ -7,11 +7,11 @@ import { createHash, randomUUID, randomBytes } from "node:crypto";
7
7
  import { existsSync, openSync, closeSync, statSync, readSync, mkdirSync, watch, createReadStream } from "node:fs";
8
8
  import { execFile, spawn, execFileSync } from "node:child_process";
9
9
  import { promisify } from "node:util";
10
+ import { fileURLToPath } from "node:url";
10
11
  import { serve } from "@hono/node-server";
11
12
  import { isIP } from "node:net";
12
13
  import { Hono } from "hono";
13
14
  import { streamSSE } from "hono/streaming";
14
- import { fileURLToPath } from "node:url";
15
15
  import trash from "trash";
16
16
  import matter from "gray-matter";
17
17
  import chokidar from "chokidar";
@@ -23,7 +23,7 @@ import { createOpencode } from "@opencode-ai/sdk";
23
23
  import { createInterface as createInterface$1 } from "node:readline/promises";
24
24
  import MarkdownIt from "markdown-it";
25
25
  const name = "@yorz/cli";
26
- const version = "0.9.2";
26
+ const version = "0.9.3";
27
27
  const type = "module";
28
28
  const description = "";
29
29
  const bin = { "yorz": "./dist/cli/index.js" };
@@ -2352,12 +2352,6 @@ function normalizeAgent(value) {
2352
2352
  if (kind === "inherit") return { kind: "inherit" };
2353
2353
  if (kind === "opencode") return { kind: "opencode" };
2354
2354
  if (kind === "codex") return { kind: "codex" };
2355
- if (kind === "custom") {
2356
- const cmd = typeof obj.cmd === "string" ? obj.cmd.trim() : "";
2357
- if (!cmd) return { kind: "claude" };
2358
- const args = Array.isArray(obj.args) ? obj.args.filter((a) => typeof a === "string") : [];
2359
- return { kind: "custom", cmd, args };
2360
- }
2361
2355
  return { kind: "claude" };
2362
2356
  }
2363
2357
  function normalizeSpecsDir(value) {
@@ -3595,27 +3589,7 @@ function parseAgent(value) {
3595
3589
  if (kind === "claude") return { value: { kind: "claude" } };
3596
3590
  if (kind === "opencode") return { value: { kind: "opencode" } };
3597
3591
  if (kind === "codex") return { value: { kind: "codex" } };
3598
- if (kind === "custom") {
3599
- const cmd = obj.cmd;
3600
- if (typeof cmd !== "string" || !cmd.trim()) {
3601
- return { error: "agent.cmd required when kind=custom" };
3602
- }
3603
- if (cmd.length > 500) return { error: "agent.cmd too long (max 500)" };
3604
- const argsRaw = obj.args;
3605
- let args = [];
3606
- if (argsRaw !== void 0) {
3607
- if (!Array.isArray(argsRaw)) return { error: "agent.args must be an array of strings" };
3608
- args = [];
3609
- for (const a of argsRaw) {
3610
- if (typeof a !== "string") return { error: "agent.args entries must be strings" };
3611
- if (a.length > 500) return { error: "agent.args entry too long (max 500)" };
3612
- args.push(a);
3613
- }
3614
- if (args.length > 64) return { error: "agent.args too many entries (max 64)" };
3615
- }
3616
- return { value: { kind: "custom", cmd: cmd.trim(), args } };
3617
- }
3618
- return { error: "agent.kind must be inherit | claude | opencode | codex | custom" };
3592
+ return { error: "agent.kind must be inherit | claude | opencode | codex" };
3619
3593
  }
3620
3594
  function parseSpecsDir(value) {
3621
3595
  const fallback = defaultProjectConfig().specsDir;
@@ -7265,7 +7239,19 @@ class OpenCodeAdapter {
7265
7239
  booting = null;
7266
7240
  async ensure() {
7267
7241
  if (!this.booting) {
7268
- this.booting = createOpencode({ hostname: "127.0.0.1" }).catch((err) => {
7242
+ this.booting = createOpencode({
7243
+ hostname: "127.0.0.1",
7244
+ port: 0,
7245
+ config: {
7246
+ permission: {
7247
+ edit: "allow",
7248
+ bash: "allow",
7249
+ webfetch: "allow",
7250
+ doom_loop: "allow",
7251
+ external_directory: "allow"
7252
+ }
7253
+ }
7254
+ }).catch((err) => {
7269
7255
  this.booting = null;
7270
7256
  throw err;
7271
7257
  });
@@ -8524,17 +8510,14 @@ function startBackgroundServe(opts) {
8524
8510
  const entry = process.argv[1];
8525
8511
  if (!entry) throw new Error("Cannot resolve CLI entrypoint for background service");
8526
8512
  const stdio = backgroundStdio();
8527
- const child = spawnWithoutWindow(process.execPath, [entry, "serve", ...backgroundArgs(opts)], {
8528
- detached: true,
8529
- stdio: stdio.stdio
8530
- });
8531
- child.unref();
8513
+ const child = spawnBackgroundWorker([entry, "serve", ...backgroundArgs(opts)], stdio.stdio);
8532
8514
  log().info("background service spawned", {
8533
8515
  pid: child.pid,
8516
+ viaLauncher: process.platform === "win32",
8534
8517
  stdioFile: stdio.path,
8535
8518
  logFile: getLogger().filePath
8536
8519
  });
8537
- const runtime = await waitForRuntime(child.pid, START_WAIT_MS);
8520
+ const runtime = await waitForRuntime(void 0, START_WAIT_MS);
8538
8521
  if (!runtime) {
8539
8522
  log().warn("timed out waiting for runtime.json", {
8540
8523
  pid: child.pid,
@@ -8543,12 +8526,13 @@ function startBackgroundServe(opts) {
8543
8526
  }
8544
8527
  const port = runtime?.port ?? opts.port ?? DEFAULT_SERVE_PORT;
8545
8528
  const url = runtime?.url ?? `http://localhost:${port}/`;
8546
- console.log(`YorZ Service started in background (pid=${child.pid ?? "unknown"}).`);
8529
+ const servicePid = runtime?.pid ?? child.pid;
8530
+ console.log(`YorZ Service started in background (pid=${servicePid ?? "unknown"}).`);
8547
8531
  console.log(`Open ${url}${runtime ? "" : ` (or the next free port if ${port} is busy).`}`);
8548
8532
  console.log(`Stop with: yorz serve stop`);
8549
8533
  return {
8550
8534
  background: true,
8551
- pid: child.pid,
8535
+ pid: servicePid,
8552
8536
  url,
8553
8537
  port
8554
8538
  };
@@ -8575,6 +8559,26 @@ function restartWorkerArgs(opts) {
8575
8559
  args.push("--skip-skill-check");
8576
8560
  return args;
8577
8561
  }
8562
+ function resolveServeLauncherPath() {
8563
+ return join(dirname(fileURLToPath(import.meta.url)), "serve-launcher.cjs");
8564
+ }
8565
+ function backgroundWorkerSpawnArgv(launcherPath, execPath, workerArgv) {
8566
+ return [launcherPath, "--", execPath, ...workerArgv];
8567
+ }
8568
+ function spawnBackgroundWorker(workerArgv, stdio) {
8569
+ if (process.platform === "win32") {
8570
+ const launcher = spawnWithoutWindow(
8571
+ process.execPath,
8572
+ backgroundWorkerSpawnArgv(resolveServeLauncherPath(), process.execPath, workerArgv),
8573
+ { detached: true, stdio }
8574
+ );
8575
+ launcher.unref();
8576
+ return launcher;
8577
+ }
8578
+ const child = spawnWithoutWindow(process.execPath, workerArgv, { detached: true, stdio });
8579
+ child.unref();
8580
+ return child;
8581
+ }
8578
8582
  async function runRestartServe(opts = {}) {
8579
8583
  silenceConsoleMirror();
8580
8584
  if (opts.worker) {
@@ -8585,12 +8589,8 @@ async function runRestartServe(opts = {}) {
8585
8589
  }
8586
8590
  const entry = process.argv[1];
8587
8591
  if (!entry) throw new Error("Cannot resolve CLI entrypoint for restart");
8588
- const child = spawnWithoutWindow(process.execPath, [entry, ...restartWorkerArgs(opts)], {
8589
- detached: true,
8590
- stdio: "ignore"
8591
- });
8592
- child.unref();
8593
- console.log(`YorZ Service restart scheduled (pid=${child.pid ?? "unknown"}).`);
8592
+ spawnBackgroundWorker([entry, ...restartWorkerArgs(opts)], "ignore");
8593
+ console.log(`YorZ Service restart scheduled.`);
8594
8594
  }
8595
8595
  async function ensureSkillsInstalledWithLog(cwd) {
8596
8596
  const results = await ensureSkillsInstalled({ cwd });
@@ -8762,7 +8762,7 @@ async function waitForRuntime(pid, timeoutMs) {
8762
8762
  const until = Date.now() + timeoutMs;
8763
8763
  while (Date.now() < until) {
8764
8764
  const live = await readLiveProcesses();
8765
- const match = live.find((p) => pid === void 0 || p.pid === pid);
8765
+ const match = live.find((p) => pid === void 0);
8766
8766
  if (match) return match;
8767
8767
  await sleep(100);
8768
8768
  }
@@ -8923,12 +8923,18 @@ async function readWindowsProcessSnapshot(pid) {
8923
8923
  "if ($null -eq $p) { exit 1 }",
8924
8924
  "$p | Select-Object CommandLine,CreationDate | ConvertTo-Json -Compress"
8925
8925
  ].join("; ");
8926
- const { stdout } = await execFileAsync("powershell.exe", [
8927
- "-NoProfile",
8928
- "-NonInteractive",
8929
- "-Command",
8930
- script
8931
- ]);
8926
+ const { stdout } = await execFileAsync(
8927
+ "powershell.exe",
8928
+ [
8929
+ "-NoProfile",
8930
+ "-NonInteractive",
8931
+ "-Command",
8932
+ script
8933
+ ],
8934
+ // 后台 Service 进程(detached,无控制台)内执行时,缺 windowsHide 会弹出
8935
+ // 可见的 PowerShell 窗口;前台终端调用则继承控制台,本就无影响。
8936
+ { windowsHide: true }
8937
+ );
8932
8938
  const parsed = JSON.parse(stdout.trim());
8933
8939
  const commandLine = typeof parsed.CommandLine === "string" ? parsed.CommandLine : "";
8934
8940
  const processStartedAt = typeof parsed.CreationDate === "string" ? parsed.CreationDate : void 0;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Windows 后台 Service 的中间 launcher(CommonJS,不参与打包,构建时原样复制到
3
+ * dist/cli/)。
4
+ *
5
+ * 为什么需要它:后台 worker 若以 DETACHED_PROCESS 直接启动,进程没有任何控制台,
6
+ * 它内部 SDK 裸 spawn 的 console 子程序(codex / opencode server 等)会被
7
+ * Windows 分配**可见**控制台——这就是启动服务 / 切 session 时闪现空白 cmd 弹窗
8
+ * 的根源。
9
+ *
10
+ * 解法:launcher 用 CREATE_NO_WINDOW(Node 的 windowsHide + 非 detached)拉起
11
+ * worker。CREATE_NO_WINDOW 的进程持有一个"无窗口的控制台",worker 内 SDK 裸
12
+ * spawn 的 console 子程序继承它,不再新建可见窗口。
13
+ *
14
+ * launcher 随后**驻留为 worker 的父进程守卫**:不主动退出,直到 worker 退出才
15
+ * 退出(并把 worker 的退出状态写入 stderr,即 serve-stdio.log)。这样 worker
16
+ * 始终是有父进程的普通子进程,不依赖"孤儿进程在各类终端/安全软件环境下能否
17
+ * 存活"的语义差异;`yorz serve stop` 终止 worker 后 launcher 自然退出,不残留。
18
+ * 代价是常驻一个空闲的 node 进程。
19
+ *
20
+ * 用法:node serve-launcher.cjs -- <execPath> <workerArgs...>
21
+ * worker 的 stdio 通过 'inherit' 接管 launcher 的 fd 0/1/2,而 launcher 自身的
22
+ * stdio 由调用方(serve.ts)定向到服务日志文件——worker 的未捕获输出因此仍落
23
+ * 到 serve-stdio.log,与旧的直接传 fd 语义一致。
24
+ *
25
+ * 已知坑(实测):worker 的 stdio 不能用 `stdio: ['ignore', 1, 2]` 数字 fd
26
+ * 形式——Windows 上该路径的 handle 传递会让 worker 静默死在初始化阶段;
27
+ * 'inherit' 走 libuv 的专门路径,实测正常。
28
+ */
29
+ 'use strict'
30
+
31
+ const { spawn } = require('child_process')
32
+
33
+ const sep = process.argv.indexOf('--')
34
+ const workerArgv = sep === -1 ? [] : process.argv.slice(sep + 1)
35
+ if (workerArgv.length < 2) {
36
+ process.stderr.write('[serve-launcher] missing worker argv after "--"\n')
37
+ process.exit(1)
38
+ }
39
+ // workerArgv 形如 [execPath, ...args];spawn 的 file 与 args 必须拆开——
40
+ // 若把 execPath 留在 args 里,node 会把它当作脚本路径执行而立即失败。
41
+ const [workerExecutable, ...workerArgs] = workerArgv
42
+
43
+ // 关键:非 detached + windowsHide => CREATE_NO_WINDOW => worker 拥有无窗口控制台。
44
+ const child = spawn(workerExecutable, workerArgs, {
45
+ windowsHide: true,
46
+ stdio: 'inherit',
47
+ })
48
+ child.once('error', (err) => {
49
+ process.stderr.write(`[serve-launcher] failed to start worker: ${err}\n`)
50
+ process.exit(1)
51
+ })
52
+ child.once('exit', (code, signal) => {
53
+ // worker 无论正常停止还是崩溃,launcher 都随之退出,保持父进程树干净。
54
+ process.stderr.write(`[serve-launcher] worker exited code=${code} signal=${signal}\n`)
55
+ process.exit(0)
56
+ })
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-CC4tXc_1.js";import{p as f}from"./chunk-JWPE2WC7-wFaiogOx.js";import{_ as n,l as o}from"./mermaid.core-rkuoyu1Y.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BKxPBlKv.js";import"./index-CkGO8Fpq.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-kCAEgJRp.js";import{p as f}from"./chunk-JWPE2WC7-BjMvMllJ.js";import{_ as n,l as o}from"./mermaid.core-_0eTmAI-.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DzMBSujh.js";import"./index-oIjkNbg4.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
@@ -1 +1 @@
1
- import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-Cery4OJZ.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-_0eTmAI-.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};