keating 0.3.6 → 0.3.9

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 (190) hide show
  1. package/dist/src/cli/main.js +3 -0
  2. package/dist/src/core/config.js +4 -1
  3. package/dist/src/core/evolution.js +3 -31
  4. package/dist/src/core/map-elites.js +2 -29
  5. package/dist/src/core/map.js +3 -1
  6. package/dist/src/core/mutation.js +29 -0
  7. package/dist/src/core/policy.js +40 -14
  8. package/dist/src/core/project.js +21 -23
  9. package/dist/src/core/topics.js +6 -1
  10. package/dist/src/pi/hyperteacher-extension.js +1 -1
  11. package/dist/src/runtime/pi.js +6 -1
  12. package/package.json +1 -1
  13. package/web/dist/assets/{anthropic-BT6Vfzb1.js → anthropic-mDOoXVZn.js} +1 -1
  14. package/web/dist/assets/arc-BgYOxBdg.js +1 -0
  15. package/web/dist/assets/architecture-YZFGNWBL-MLoSDt-a.js +1 -0
  16. package/web/dist/assets/architectureDiagram-Q4EWVU46-Yh6i8NsV.js +36 -0
  17. package/web/dist/assets/{azure-openai-responses-CommX3YJ.js → azure-openai-responses-lDjfaDoj.js} +1 -1
  18. package/web/dist/assets/band-mY0qgSES.js +1 -0
  19. package/web/dist/assets/blockDiagram-DXYQGD6D-DUOEnS09.js +132 -0
  20. package/web/dist/assets/{c4Diagram-AHTNJAMY-VFfRZWWA.js → c4Diagram-AHTNJAMY-XzNOUnLt.js} +6 -6
  21. package/web/dist/assets/channel-BumC_1wb.js +1 -0
  22. package/web/dist/assets/{chunk-2KRD3SAO-B-AqvS0u.js → chunk-2KRD3SAO-mLbXjVje.js} +1 -1
  23. package/web/dist/assets/chunk-336JU56O-CQcnUKNW.js +2 -0
  24. package/web/dist/assets/chunk-426QAEUC-AjoT_j_q.js +1 -0
  25. package/web/dist/assets/{chunk-4BX2VUAB-0Z13aFAn.js → chunk-4BX2VUAB-DRZjGMDM.js} +1 -1
  26. package/web/dist/assets/{chunk-4TB4RGXK-DqC0Zwm7.js → chunk-4TB4RGXK-CAwQq2uM.js} +6 -6
  27. package/web/dist/assets/chunk-55IACEB6-C19HKnvd.js +1 -0
  28. package/web/dist/assets/{chunk-5FUZZQ4R-CApli0xX.js → chunk-5FUZZQ4R-Bw3BFJJs.js} +31 -31
  29. package/web/dist/assets/chunk-5PVQY5BW-Ciel-YVc.js +2 -0
  30. package/web/dist/assets/{chunk-67CJDMHE-Cx7uJS4d.js → chunk-67CJDMHE-DNZKE79k.js} +1 -1
  31. package/web/dist/assets/{chunk-7N4EOEYR-CYPNsFus.js → chunk-7N4EOEYR-BGZXIfBD.js} +1 -1
  32. package/web/dist/assets/{chunk-AA7GKIK3-rU0uhR_u.js → chunk-AA7GKIK3-CLWjm_Gk.js} +1 -1
  33. package/web/dist/assets/{chunk-BSJP7CBP-5VmcfR4-.js → chunk-BSJP7CBP-DwT1eVSc.js} +1 -1
  34. package/web/dist/assets/{chunk-CIAEETIT-CHJ-L8H1.js → chunk-CIAEETIT-DaQsGVwH.js} +1 -1
  35. package/web/dist/assets/{chunk-EDXVE4YY-DZHAJjMI.js → chunk-EDXVE4YY-DNeRJTiS.js} +1 -1
  36. package/web/dist/assets/{chunk-ENJZ2VHE-DbUDFa7w.js → chunk-ENJZ2VHE-Crfow0Ab.js} +6 -6
  37. package/web/dist/assets/{chunk-FMBD7UC4-BsYE5e_h.js → chunk-FMBD7UC4-BWSstEYx.js} +1 -1
  38. package/web/dist/assets/{chunk-FOC6F5B3-Cm6aoTv7.js → chunk-FOC6F5B3-BrTsf5ix.js} +1 -1
  39. package/web/dist/assets/{chunk-ICPOFSXX-C5eNZ4L6.js → chunk-ICPOFSXX-C04NFfJk.js} +5 -5
  40. package/web/dist/assets/{chunk-K5T4RW27-R7dAJ4rq.js → chunk-K5T4RW27-C6ErEFB0.js} +1 -1
  41. package/web/dist/assets/{chunk-KGLVRYIC-MO99YZXL.js → chunk-KGLVRYIC-DWgMrjZr.js} +1 -1
  42. package/web/dist/assets/{chunk-LIHQZDEY-DUJ656sT.js → chunk-LIHQZDEY-D3DWGnJT.js} +1 -1
  43. package/web/dist/assets/{chunk-ORNJ4GCN-DXuuEC1n.js → chunk-ORNJ4GCN-D0nhq27e.js} +1 -1
  44. package/web/dist/assets/{chunk-OYMX7WX6-pJlEprWq.js → chunk-OYMX7WX6-CQLx0cU3.js} +5 -5
  45. package/web/dist/assets/chunk-QZHKN3VN-X2zPgEFk.js +1 -0
  46. package/web/dist/assets/{chunk-U2HBQHQK-Mh_l9PLe.js → chunk-U2HBQHQK-FqDOW_Dq.js} +6 -6
  47. package/web/dist/assets/{chunk-X2U36JSP-BOeiJW0w.js → chunk-X2U36JSP-DiSftNGg.js} +1 -1
  48. package/web/dist/assets/{chunk-XPW4576I-fQ9SDvr_.js → chunk-XPW4576I-CTCFDURY.js} +1 -1
  49. package/web/dist/assets/chunk-YZCP3GAM-BhxShnp0.js +1 -0
  50. package/web/dist/assets/chunk-ZZ45TVLE-DMfGJuPz.js +1 -0
  51. package/web/dist/assets/classDiagram-6PBFFD2Q-qESk_xyE.js +1 -0
  52. package/web/dist/assets/classDiagram-v2-HSJHXN6E-BM1nmtfm.js +1 -0
  53. package/web/dist/assets/clone-CVy2b825.js +1 -0
  54. package/web/dist/assets/cose-bilkent-S5V4N54A-BWrDpSLZ.js +1 -0
  55. package/web/dist/assets/custom-tts-DA7XkgNJ.js +1 -0
  56. package/web/dist/assets/dagre-C_Y5Jrtl.js +1 -0
  57. package/web/dist/assets/dagre-KV5264BT-DcrvRRX1.js +4 -0
  58. package/web/dist/assets/diagram-5BDNPKRD-BsChRck6.js +10 -0
  59. package/web/dist/assets/{diagram-G4DWMVQ6-CtICKUFi.js → diagram-G4DWMVQ6-raeAsgoe.js} +12 -12
  60. package/web/dist/assets/diagram-MMDJMWI5-CuKsP84I.js +43 -0
  61. package/web/dist/assets/diagram-TYMM5635-T7ILcS3d.js +24 -0
  62. package/web/dist/assets/dist-DQ41Rxbw.js +1 -0
  63. package/web/dist/assets/dist-oYdMaa1U.js +10 -0
  64. package/web/dist/assets/{erDiagram-SMLLAGMA-uT88sBlT.js → erDiagram-SMLLAGMA-C9z6kYxH.js} +6 -6
  65. package/web/dist/assets/{flatten-C-u5nd5-.js → flatten-n72VCU_F.js} +1 -1
  66. package/web/dist/assets/flowDiagram-DWJPFMVM-BA3HBIvp.js +162 -0
  67. package/web/dist/assets/ganttDiagram-T4ZO3ILL-BXKKRsbk.js +292 -0
  68. package/web/dist/assets/gemini-live-dK40vCc5.js +2 -0
  69. package/web/dist/assets/gitGraph-7Q5UKJZL-Cy0KloCM.js +1 -0
  70. package/web/dist/assets/gitGraphDiagram-UUTBAWPF-CfGAccI8.js +106 -0
  71. package/web/dist/assets/{google-BdYNeCP_.js → google-BdS4iTyC.js} +1 -1
  72. package/web/dist/assets/{google-gemini-cli-DpxAL3K4.js → google-gemini-cli-ECA0sP3z.js} +1 -1
  73. package/web/dist/assets/{google-shared-DyQdgtsI.js → google-shared-DFv4ubOG.js} +1 -1
  74. package/web/dist/assets/{google-vertex-CKRybaXj.js → google-vertex-Duei77qD.js} +1 -1
  75. package/web/dist/assets/graphlib-sK54_wxh.js +1 -0
  76. package/web/dist/assets/index-BgWMse5j.js +3187 -0
  77. package/web/dist/assets/index-C_k9n6xi.css +2 -0
  78. package/web/dist/assets/info-OMHHGYJF-DiTlPM51.js +1 -0
  79. package/web/dist/assets/{infoDiagram-42DDH7IO-BbES7X_c.js → infoDiagram-42DDH7IO-CXoykyfr.js} +1 -1
  80. package/web/dist/assets/init-DugVGdkd.js +1 -0
  81. package/web/dist/assets/{isEmpty-DssUW35f.js → isEmpty-Lz_aOZWI.js} +1 -1
  82. package/web/dist/assets/{ishikawaDiagram-UXIWVN3A-DxQ28rho.js → ishikawaDiagram-UXIWVN3A-BJieXVMt.js} +6 -6
  83. package/web/dist/assets/{journeyDiagram-VCZTEJTY-D0X8qQ0P.js → journeyDiagram-VCZTEJTY-CwCyrnqT.js} +6 -6
  84. package/web/dist/assets/{kanban-definition-6JOO6SKY-DWYfSlpl.js → kanban-definition-6JOO6SKY-8ACmDHsl.js} +1 -1
  85. package/web/dist/assets/line-BqZCcbso.js +1 -0
  86. package/web/dist/assets/linear-CXf5Bx3D.js +1 -0
  87. package/web/dist/assets/math-Csj_9zpx.js +1 -0
  88. package/web/dist/assets/{mermaid-parser.core-Cy4iY_Dy.js → mermaid-parser.core-C8ylgsWV.js} +2 -2
  89. package/web/dist/assets/mermaid.core-BHCT6V24.js +11 -0
  90. package/web/dist/assets/{mindmap-definition-QFDTVHPH-BBnKdtQh.js → mindmap-definition-QFDTVHPH-DrDAZL9Q.js} +1 -1
  91. package/web/dist/assets/{mistral-BWaUMIgd.js → mistral-BCIirCkW.js} +1 -1
  92. package/web/dist/assets/{openai-codex-responses-CHBgKhmb.js → openai-codex-responses-BgRTWVD_.js} +1 -1
  93. package/web/dist/assets/{openai-completions-kcXmmaHI.js → openai-completions-D5AUQEua.js} +1 -1
  94. package/web/dist/assets/openai-realtime-BCZmIToJ.js +1 -0
  95. package/web/dist/assets/{openai-responses-Cqq3H3p3.js → openai-responses-CTlQ1a-G.js} +1 -1
  96. package/web/dist/assets/{openai-responses-shared-CTNuo9ci.js → openai-responses-shared-CLzQyVyy.js} +1 -1
  97. package/web/dist/assets/openai-tts-BRg2goic.js +1 -0
  98. package/web/dist/assets/{ordinal-_K3x1fkz.js → ordinal-CHOvK70a.js} +1 -1
  99. package/web/dist/assets/ort.bundle.min-Drf2fDrC.js +2805 -0
  100. package/web/dist/assets/packet-4T2RLAQJ-EXgAtQjm.js +1 -0
  101. package/web/dist/assets/path-BVVvcbiy.js +1 -0
  102. package/web/dist/assets/pie-ZZUOXDRM-dKU8mzlj.js +1 -0
  103. package/web/dist/assets/pieDiagram-DEJITSTG-CSnulv9o.js +30 -0
  104. package/web/dist/assets/{quadrantDiagram-34T5L4WZ-DfBSEept.js → quadrantDiagram-34T5L4WZ-DiM-1bw4.js} +6 -6
  105. package/web/dist/assets/radar-PYXPWWZC-B4d2wh2H.js +1 -0
  106. package/web/dist/assets/{reduce-836A2NiQ.js → reduce-r7gP4wdg.js} +1 -1
  107. package/web/dist/assets/renderer-BHoCfdWO-BFpsm4dw.js +1 -0
  108. package/web/dist/assets/requirementDiagram-MS252O5E-CunJUnIN.js +84 -0
  109. package/web/dist/assets/{sankeyDiagram-XADWPNL6-He3x9tNT.js → sankeyDiagram-XADWPNL6-DaA_56zq.js} +7 -7
  110. package/web/dist/assets/{sequenceDiagram-FGHM5R23-DfCDpvrT.js → sequenceDiagram-FGHM5R23-CG_SeqVO.js} +13 -13
  111. package/web/dist/assets/speech-ZNExxXBR.js +2 -0
  112. package/web/dist/assets/src-BfaOho0B.js +1 -0
  113. package/web/dist/assets/state-CrA0YVPh-wJ4Rmm6M.js +27 -0
  114. package/web/dist/assets/stateDiagram-FHFEXIEX-CSUigMtP.js +1 -0
  115. package/web/dist/assets/stateDiagram-v2-QKLJ7IA2-CgpYzp7D.js +1 -0
  116. package/web/dist/assets/step-qalMyYGy.js +1 -0
  117. package/web/dist/assets/string-DPssBiak.js +1 -0
  118. package/web/dist/assets/supertonic-hDdNdgtO.js +2 -0
  119. package/web/dist/assets/time-DaCo2z7n.js +1 -0
  120. package/web/dist/assets/{timeline-definition-GMOUNBTQ-BWunHgBC.js → timeline-definition-GMOUNBTQ-DcMiH-gG.js} +7 -7
  121. package/web/dist/assets/transformers.web-R9eWI1xg.js +14 -0
  122. package/web/dist/assets/treeView-SZITEDCU-V29H5f16.js +1 -0
  123. package/web/dist/assets/treemap-W4RFUUIX-DsAU74TP.js +1 -0
  124. package/web/dist/assets/vennDiagram-DHZGUBPP-C6A75Q3q.js +34 -0
  125. package/web/dist/assets/wardley-RL74JXVD-lGAI4Cps.js +1 -0
  126. package/web/dist/assets/{wardleyDiagram-NUSXRM2D-DTcVscPH.js → wardleyDiagram-NUSXRM2D-XmYD0oYm.js} +1 -1
  127. package/web/dist/assets/xychartDiagram-5P7HB3ND-BgSoKcS9.js +7 -0
  128. package/web/dist/index.html +16 -3
  129. package/web/dist/sw.js +647 -1
  130. package/web/dist/workbox-2ae722a1.js +4390 -0
  131. package/web/dist/assets/arc-x2nTilpc.js +0 -1
  132. package/web/dist/assets/architecture-YZFGNWBL-B1hlUWjX.js +0 -1
  133. package/web/dist/assets/architectureDiagram-Q4EWVU46-CMApWFyw.js +0 -36
  134. package/web/dist/assets/blockDiagram-DXYQGD6D-DOQbsNRY.js +0 -132
  135. package/web/dist/assets/channel-KY2Tg8Ba.js +0 -1
  136. package/web/dist/assets/chunk-336JU56O-DlYgPyl6.js +0 -2
  137. package/web/dist/assets/chunk-426QAEUC-CsVoBkfR.js +0 -1
  138. package/web/dist/assets/chunk-55IACEB6-CWE_u-IY.js +0 -1
  139. package/web/dist/assets/chunk-5PVQY5BW-Cbzhfhln.js +0 -2
  140. package/web/dist/assets/chunk-QZHKN3VN-_pQxbbiW.js +0 -1
  141. package/web/dist/assets/chunk-YZCP3GAM-eboO4P5S.js +0 -1
  142. package/web/dist/assets/chunk-ZZ45TVLE-Cky0eqlr.js +0 -1
  143. package/web/dist/assets/classDiagram-6PBFFD2Q-DEPsZSU3.js +0 -1
  144. package/web/dist/assets/classDiagram-v2-HSJHXN6E-DhmIOEpX.js +0 -1
  145. package/web/dist/assets/clone-DeTzYqo8.js +0 -1
  146. package/web/dist/assets/cose-bilkent-S5V4N54A-N4zWUJ7C.js +0 -1
  147. package/web/dist/assets/dagre-IpK1aoMm.js +0 -1
  148. package/web/dist/assets/dagre-KV5264BT-DCytJuju.js +0 -4
  149. package/web/dist/assets/diagram-5BDNPKRD-Cv4miBae.js +0 -10
  150. package/web/dist/assets/diagram-MMDJMWI5-Cn7aGorh.js +0 -43
  151. package/web/dist/assets/diagram-TYMM5635-CCUWDPsC.js +0 -24
  152. package/web/dist/assets/dist-Dm98VvTW.js +0 -1
  153. package/web/dist/assets/flowDiagram-DWJPFMVM-Bl3O7S1m.js +0 -162
  154. package/web/dist/assets/ganttDiagram-T4ZO3ILL-B1FhwV45.js +0 -292
  155. package/web/dist/assets/gitGraph-7Q5UKJZL-Bc_7vzer.js +0 -1
  156. package/web/dist/assets/gitGraphDiagram-UUTBAWPF-DfW6svMS.js +0 -106
  157. package/web/dist/assets/graphlib-CMTVFyOZ.js +0 -1
  158. package/web/dist/assets/index-Bdb7P7gx.css +0 -2
  159. package/web/dist/assets/index-DNxepp8B.js +0 -2891
  160. package/web/dist/assets/info-OMHHGYJF-BGcxeaZt.js +0 -1
  161. package/web/dist/assets/init-DlZdxViB.js +0 -1
  162. package/web/dist/assets/line-CuHce5JG.js +0 -1
  163. package/web/dist/assets/linear-Ca0Vkwuj.js +0 -1
  164. package/web/dist/assets/mermaid.core-6PGkQdYc.js +0 -11
  165. package/web/dist/assets/packet-4T2RLAQJ-D35ZLSBH.js +0 -1
  166. package/web/dist/assets/path-6uRLdFF7.js +0 -1
  167. package/web/dist/assets/pie-ZZUOXDRM-DRoETpJX.js +0 -1
  168. package/web/dist/assets/pieDiagram-DEJITSTG-DfMjfTQz.js +0 -30
  169. package/web/dist/assets/radar-PYXPWWZC-DLKxRJ0V.js +0 -1
  170. package/web/dist/assets/requirementDiagram-MS252O5E-BPkxJQkz.js +0 -84
  171. package/web/dist/assets/src-DdOdIreR.js +0 -1
  172. package/web/dist/assets/stateDiagram-FHFEXIEX-fuww6347.js +0 -1
  173. package/web/dist/assets/stateDiagram-v2-QKLJ7IA2-U6voafO3.js +0 -1
  174. package/web/dist/assets/transformers.web-DKUtmSAi.js +0 -2818
  175. package/web/dist/assets/treeView-SZITEDCU-BCx0xSAm.js +0 -1
  176. package/web/dist/assets/treemap-W4RFUUIX-2CvghWJK.js +0 -1
  177. package/web/dist/assets/vennDiagram-DHZGUBPP-CBXRutSP.js +0 -34
  178. package/web/dist/assets/wardley-RL74JXVD-BkPL_mhd.js +0 -1
  179. package/web/dist/assets/xychartDiagram-5P7HB3ND-CZLgX9Fe.js +0 -7
  180. package/web/dist/workbox-66610c77.js +0 -1
  181. /package/web/dist/assets/{_baseFor-B_cjfMB6.js → _baseFor-2QgQJAzW.js} +0 -0
  182. /package/web/dist/assets/{array-B9UHiPd-.js → array-B4O_ir3H.js} +0 -0
  183. /package/web/dist/assets/{cytoscape.esm-BBMd0vGm.js → cytoscape.esm-CdzdaUMP.js} +0 -0
  184. /package/web/dist/assets/{defaultLocale-5eAKkKJC.js → defaultLocale-Bhb3osZR.js} +0 -0
  185. /package/web/dist/assets/{github-copilot-headers-L39QqneT.js → github-copilot-headers-BuUn5v2j.js} +0 -0
  186. /package/web/dist/assets/{hash-kZ2KD_no.js → hash-CQjDwcjR.js} +0 -0
  187. /package/web/dist/assets/{openai-D4NSaQIs.js → openai-CRGaNv9i.js} +0 -0
  188. /package/web/dist/assets/{rough.esm-Djo4Abte.js → rough.esm-D5NinLFK.js} +0 -0
  189. /package/web/dist/assets/{transform-messages-CqKEdRVp.js → transform-messages-DXDWLrnO.js} +0 -0
  190. /package/web/dist/assets/{web-CMKYLKbT.js → web-jLdm8a1-.js} +0 -0
@@ -125,6 +125,9 @@ async function run() {
125
125
  }
126
126
  case "web": {
127
127
  const port = args[0] ? parseInt(args[0], 10) : 3000;
128
+ if (!Number.isInteger(port) || port < 1 || port > 65535) {
129
+ throw new Error(`Invalid port: "${args[0]}". Must be an integer between 1 and 65535.`);
130
+ }
128
131
  await serveWeb(port);
129
132
  return;
130
133
  }
@@ -76,7 +76,10 @@ export async function loadKeatingConfig(cwd) {
76
76
  }
77
77
  };
78
78
  }
79
- catch {
79
+ catch (err) {
80
+ if (existsSync(path)) {
81
+ console.error(`Warning: keating.config.json is invalid and will be ignored. Falling back to defaults. Error: ${err instanceof Error ? err.message : String(err)}`);
82
+ }
80
83
  return DEFAULT_KEATING_CONFIG;
81
84
  }
82
85
  }
@@ -1,8 +1,8 @@
1
1
  import { readFile, writeFile } from "node:fs/promises";
2
2
  import { Prng } from "./random.js";
3
- import { clamp } from "./util.js";
4
- import { DEFAULT_POLICY, DEFAULT_WEIGHTS, clampPolicy, clampWeights } from "./policy.js";
3
+ import { DEFAULT_POLICY, DEFAULT_WEIGHTS } from "./policy.js";
5
4
  import { benchmarkToMarkdown, runBenchmarkSuite } from "./benchmark.js";
5
+ import { mutatePolicy, mutateWeights } from "./mutation.js";
6
6
  function diffPolicy(before, after) {
7
7
  const keys = [
8
8
  "analogyDensity",
@@ -24,34 +24,6 @@ function diffPolicy(before, after) {
24
24
  })
25
25
  .filter((entry) => entry.delta !== 0);
26
26
  }
27
- function mutateScalar(prng, value, amplitude = 0.18) {
28
- return clamp(value + (prng.next() * 2 - 1) * amplitude);
29
- }
30
- function mutateWeights(parent, prng, amplitude = 0.12) {
31
- return clampWeights({
32
- masteryGain: mutateScalar(prng, parent.masteryGain, amplitude),
33
- retention: mutateScalar(prng, parent.retention, amplitude),
34
- engagement: mutateScalar(prng, parent.engagement, amplitude),
35
- transfer: mutateScalar(prng, parent.transfer, amplitude),
36
- confusion: mutateScalar(prng, parent.confusion, amplitude)
37
- });
38
- }
39
- function mutatePolicy(parent, prng, iteration) {
40
- const mutated = clampPolicy({
41
- ...parent,
42
- name: `keating-candidate-${iteration}`,
43
- analogyDensity: mutateScalar(prng, parent.analogyDensity),
44
- socraticRatio: mutateScalar(prng, parent.socraticRatio),
45
- formalism: mutateScalar(prng, parent.formalism),
46
- retrievalPractice: mutateScalar(prng, parent.retrievalPractice),
47
- exerciseCount: parent.exerciseCount + prng.int(-1, 1),
48
- diagramBias: mutateScalar(prng, parent.diagramBias),
49
- reflectionBias: mutateScalar(prng, parent.reflectionBias),
50
- interdisciplinaryBias: mutateScalar(prng, parent.interdisciplinaryBias),
51
- challengeRate: mutateScalar(prng, parent.challengeRate)
52
- });
53
- return mutated;
54
- }
55
27
  function policyVector(policy) {
56
28
  return [
57
29
  policy.analogyDensity,
@@ -109,7 +81,7 @@ export async function evolvePolicy(archivePath, basePolicy, focusTopic, iteratio
109
81
  const prng = new Prng(seed + 17);
110
82
  const seen = [...archive.candidates.map((entry) => entry.policy), basePolicy];
111
83
  for (let iteration = 1; iteration <= iterations; iteration += 1) {
112
- const candidatePolicy = mutatePolicy(best.policy, prng, iteration);
84
+ const candidatePolicy = mutatePolicy(best.policy, prng, iteration, "keating-candidate");
113
85
  const candidateWeights = mutateWeights(bestWeights, prng);
114
86
  const novelty = noveltyScore(seen, candidatePolicy);
115
87
  const candidateBenchmark = await runBenchmarkSuite(process.cwd(), candidatePolicy, focusTopic, seed + iteration * 11, 3, candidateWeights);
@@ -1,37 +1,10 @@
1
1
  import { readFile, writeFile } from "node:fs/promises";
2
2
  import { Prng } from "./random.js";
3
- import { clamp } from "./util.js";
4
3
  import { DEFAULT_POLICY, DEFAULT_WEIGHTS, clampPolicy, clampWeights } from "./policy.js";
5
4
  import { benchmarkToMarkdown, runBenchmarkSuite } from "./benchmark.js";
5
+ import { mutatePolicy, mutateWeights } from "./mutation.js";
6
6
  export const DEFAULT_DESCRIPTORS = ["formalism", "socraticRatio"];
7
7
  export const DEFAULT_RESOLUTION = 10;
8
- function mutateScalar(prng, value, amplitude = 0.18) {
9
- return clamp(value + (prng.next() * 2 - 1) * amplitude);
10
- }
11
- function mutatePolicy(parent, prng, iteration) {
12
- return clampPolicy({
13
- ...parent,
14
- name: `me-candidate-${iteration}`,
15
- analogyDensity: mutateScalar(prng, parent.analogyDensity),
16
- socraticRatio: mutateScalar(prng, parent.socraticRatio),
17
- formalism: mutateScalar(prng, parent.formalism),
18
- retrievalPractice: mutateScalar(prng, parent.retrievalPractice),
19
- exerciseCount: parent.exerciseCount + prng.int(-1, 1),
20
- diagramBias: mutateScalar(prng, parent.diagramBias),
21
- reflectionBias: mutateScalar(prng, parent.reflectionBias),
22
- interdisciplinaryBias: mutateScalar(prng, parent.interdisciplinaryBias),
23
- challengeRate: mutateScalar(prng, parent.challengeRate)
24
- });
25
- }
26
- function mutateWeights(parent, prng, amplitude = 0.12) {
27
- return clampWeights({
28
- masteryGain: mutateScalar(prng, parent.masteryGain, amplitude),
29
- retention: mutateScalar(prng, parent.retention, amplitude),
30
- engagement: mutateScalar(prng, parent.engagement, amplitude),
31
- transfer: mutateScalar(prng, parent.transfer, amplitude),
32
- confusion: mutateScalar(prng, parent.confusion, amplitude)
33
- });
34
- }
35
8
  function getDescriptorValues(policy, descriptors) {
36
9
  return descriptors.map((d) => {
37
10
  const val = policy[d];
@@ -108,7 +81,7 @@ export async function mapElitesEvolve(cwd, basePolicy, options = {}) {
108
81
  }
109
82
  else {
110
83
  const parent = selectParent(grid, prng);
111
- candidatePolicy = mutatePolicy(parent.policy, prng, i);
84
+ candidatePolicy = mutatePolicy(parent.policy, prng, i, "me-candidate");
112
85
  candidateWeights = mutateWeights(parent.weights, prng);
113
86
  }
114
87
  const candidateBenchmark = await runBenchmarkSuite(cwd, candidatePolicy, focusTopic, seed + i * 11, 3, candidateWeights);
@@ -56,7 +56,9 @@ export function lessonPlanToMermaid(topicName, policy) {
56
56
  lines.push(" end");
57
57
  lines.push(" learner --> orient");
58
58
  lines.push(" thesis --> orient");
59
- lines.push(` ${plan.phases.at(-1).id} --> ${topicId}_hook_0`);
59
+ if (plan.topic.interdisciplinaryHooks.length > 0) {
60
+ lines.push(` ${plan.phases.at(-1).id} --> ${topicId}_hook_0`);
61
+ }
60
62
  lines.push(` ${plan.phases.find((phase) => phase.id === "diagram")?.id ?? "examples"} --> ${topicId}_core`);
61
63
  lines.push(` class ${plan.phases.map((phase) => phase.id).join(",")} phase;`);
62
64
  lines.push(` class ${topicId}_core,${plan.topic.diagramNodes.map((_, index) => `${topicId}_concept_${index}`).join(",")},${plan.topic.prerequisites.slice(0, 3).map((_, index) => `${topicId}_prereq_${index}`).join(",")} concept;`);
@@ -0,0 +1,29 @@
1
+ import { clamp } from "./util.js";
2
+ import { clampPolicy, clampWeights } from "./policy.js";
3
+ export function mutateScalar(prng, value, amplitude = 0.18) {
4
+ return clamp(value + (prng.next() * 2 - 1) * amplitude);
5
+ }
6
+ export function mutatePolicy(parent, prng, iteration, namePrefix = "candidate") {
7
+ return clampPolicy({
8
+ ...parent,
9
+ name: `${namePrefix}-${iteration}`,
10
+ analogyDensity: mutateScalar(prng, parent.analogyDensity),
11
+ socraticRatio: mutateScalar(prng, parent.socraticRatio),
12
+ formalism: mutateScalar(prng, parent.formalism),
13
+ retrievalPractice: mutateScalar(prng, parent.retrievalPractice),
14
+ exerciseCount: parent.exerciseCount + prng.int(-1, 1),
15
+ diagramBias: mutateScalar(prng, parent.diagramBias),
16
+ reflectionBias: mutateScalar(prng, parent.reflectionBias),
17
+ interdisciplinaryBias: mutateScalar(prng, parent.interdisciplinaryBias),
18
+ challengeRate: mutateScalar(prng, parent.challengeRate)
19
+ });
20
+ }
21
+ export function mutateWeights(parent, prng, amplitude = 0.12) {
22
+ return clampWeights({
23
+ masteryGain: mutateScalar(prng, parent.masteryGain, amplitude),
24
+ retention: mutateScalar(prng, parent.retention, amplitude),
25
+ engagement: mutateScalar(prng, parent.engagement, amplitude),
26
+ transfer: mutateScalar(prng, parent.transfer, amplitude),
27
+ confusion: mutateScalar(prng, parent.confusion, amplitude)
28
+ });
29
+ }
@@ -16,28 +16,54 @@ export const DEFAULT_WEIGHTS = {
16
16
  masteryGain: 0.34,
17
17
  retention: 0.20,
18
18
  engagement: 0.16,
19
- transfer: 0.18,
20
- confusion: 0.18
19
+ transfer: 0.16,
20
+ confusion: 0.14
21
21
  };
22
22
  export function clampWeights(weights) {
23
+ if (weightsAreBounded(weights) && weightsAreNormalized(weights))
24
+ return { ...weights };
25
+ const sum = weights.masteryGain + weights.retention + weights.engagement + weights.transfer + weights.confusion;
26
+ if (sum === 0)
27
+ return DEFAULT_WEIGHTS;
28
+ const normalized = {
29
+ masteryGain: weights.masteryGain / sum,
30
+ retention: weights.retention / sum,
31
+ engagement: weights.engagement / sum,
32
+ transfer: weights.transfer / sum,
33
+ confusion: weights.confusion / sum
34
+ };
35
+ const needsClamp = Object.values(normalized).some(v => v < 0.01 || v > 1);
36
+ if (!needsClamp)
37
+ return normalized;
23
38
  const clamped = {
24
- masteryGain: clamp(weights.masteryGain, 0.01, 1),
25
- retention: clamp(weights.retention, 0.01, 1),
26
- engagement: clamp(weights.engagement, 0.01, 1),
27
- transfer: clamp(weights.transfer, 0.01, 1),
28
- confusion: clamp(weights.confusion, 0.01, 1)
39
+ masteryGain: clamp(normalized.masteryGain, 0.01, 1),
40
+ retention: clamp(normalized.retention, 0.01, 1),
41
+ engagement: clamp(normalized.engagement, 0.01, 1),
42
+ transfer: clamp(normalized.transfer, 0.01, 1),
43
+ confusion: clamp(normalized.confusion, 0.01, 1)
29
44
  };
30
- const sum = clamped.masteryGain + clamped.retention + clamped.engagement + clamped.transfer + clamped.confusion;
31
- if (sum === 0)
45
+ const clampedSum = clamped.masteryGain + clamped.retention + clamped.engagement + clamped.transfer + clamped.confusion;
46
+ if (clampedSum === 0)
32
47
  return DEFAULT_WEIGHTS;
33
48
  return {
34
- masteryGain: clamped.masteryGain / sum,
35
- retention: clamped.retention / sum,
36
- engagement: clamped.engagement / sum,
37
- transfer: clamped.transfer / sum,
38
- confusion: clamped.confusion / sum
49
+ masteryGain: clamped.masteryGain / clampedSum,
50
+ retention: clamped.retention / clampedSum,
51
+ engagement: clamped.engagement / clampedSum,
52
+ transfer: clamped.transfer / clampedSum,
53
+ confusion: clamped.confusion / clampedSum
39
54
  };
40
55
  }
56
+ function weightsAreBounded(weights) {
57
+ for (const v of Object.values(weights)) {
58
+ if (typeof v !== "number" || !Number.isFinite(v) || v < 0 || v > 1)
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ function weightsAreNormalized(weights) {
64
+ const sum = weights.masteryGain + weights.retention + weights.engagement + weights.transfer + weights.confusion;
65
+ return Math.abs(sum - 1) < 0.001;
66
+ }
41
67
  export function clampPolicy(policy) {
42
68
  return {
43
69
  ...policy,
@@ -44,39 +44,35 @@ export async function animateTopicArtifact(cwd, topicName) {
44
44
  const policy = await loadPolicy(currentPolicyPath(cwd));
45
45
  return writeLessonAnimation(cwd, topicName, policy);
46
46
  }
47
- export async function benchPolicyArtifact(cwd, focusTopic) {
48
- await ensureProjectScaffold(cwd);
47
+ async function writeArtifactWithTrace(cwd, outputDir, slug, markdownContent, traceSuffix, traceData) {
49
48
  const config = await loadKeatingConfig(cwd);
50
- const policy = await loadPolicy(currentPolicyPath(cwd));
51
- const result = await runBenchmarkSuite(cwd, policy, focusTopic, 20260401, config.debug.traceTopLearners);
52
- const fileName = focusTopic ? `${slugify(focusTopic)}.md` : "core-suite.md";
53
- const reportPath = join(benchmarksDir(cwd), fileName);
54
- await writeFile(reportPath, benchmarkToMarkdown(result), "utf8");
49
+ const reportPath = join(outputDir, `${slug}.md`);
50
+ await writeFile(reportPath, markdownContent, "utf8");
55
51
  const tracePath = config.debug.persistTraces
56
- ? join(tracesDir(cwd), `${focusTopic ? slugify(focusTopic) : "core-suite"}-benchmark.json`)
52
+ ? join(tracesDir(cwd), `${slug}-${traceSuffix}.json`)
57
53
  : null;
58
54
  if (tracePath) {
59
- await writeFile(tracePath, `${JSON.stringify(result, null, 2)}\n`, "utf8");
55
+ await writeFile(tracePath, `${JSON.stringify(traceData, null, 2)}\n`, "utf8");
60
56
  }
57
+ return { reportPath, tracePath };
58
+ }
59
+ export async function benchPolicyArtifact(cwd, focusTopic) {
60
+ await ensureProjectScaffold(cwd);
61
+ const policy = await loadPolicy(currentPolicyPath(cwd));
62
+ const result = await runBenchmarkSuite(cwd, policy, focusTopic, 20260401);
63
+ const slug = focusTopic ? slugify(focusTopic) : "core-suite";
64
+ const { reportPath, tracePath } = await writeArtifactWithTrace(cwd, benchmarksDir(cwd), slug, benchmarkToMarkdown(result), "benchmark", result);
61
65
  return { reportPath, tracePath, overallScore: result.overallScore };
62
66
  }
63
67
  export async function evolvePolicyArtifact(cwd, focusTopic) {
64
68
  await ensureProjectScaffold(cwd);
65
- const config = await loadKeatingConfig(cwd);
66
69
  const policyPath = currentPolicyPath(cwd);
67
70
  const basePolicy = await loadPolicy(policyPath);
68
71
  const meRun = await mapElitesEvolve(cwd, basePolicy, { focusTopic });
69
72
  const run = mapElitesToEvolutionRun(meRun);
70
73
  await savePolicy(policyPath, run.best.policy);
71
- const fileName = focusTopic ? `${slugify(focusTopic)}.md` : "latest.md";
72
- const reportPath = join(evolutionDir(cwd), fileName);
73
- await writeFile(reportPath, mapElitesToMarkdown(meRun), "utf8");
74
- const tracePath = config.debug.persistTraces
75
- ? join(tracesDir(cwd), `${focusTopic ? slugify(focusTopic) : "latest"}-evolution.json`)
76
- : null;
77
- if (tracePath) {
78
- await writeFile(tracePath, `${JSON.stringify(run, null, 2)}\n`, "utf8");
79
- }
74
+ const slug = focusTopic ? slugify(focusTopic) : "latest";
75
+ const { reportPath, tracePath } = await writeArtifactWithTrace(cwd, evolutionDir(cwd), slug, mapElitesToMarkdown(meRun), "evolution", run);
80
76
  return { reportPath, tracePath, bestScore: run.best.overallScore, policyPath };
81
77
  }
82
78
  export async function evolvePromptArtifact(cwd, promptName = "learn") {
@@ -187,10 +183,14 @@ export async function promptEvalArtifact(cwd, promptContent) {
187
183
  await writeFile(reportPath, lines.join("\n"), "utf8");
188
184
  return { reportPath, score: result.score, objectives: result.objectives, feedback: result.feedback };
189
185
  }
190
- export async function timelineArtifact(cwd) {
186
+ async function loadEngagementContext(cwd) {
191
187
  await ensureProjectScaffold(cwd);
192
188
  const state = await loadLearnerState(learnerStatePath(cwd));
193
189
  const policy = await loadEngagementPolicy(engagementPolicyPath(cwd));
190
+ return { state, policy };
191
+ }
192
+ export async function timelineArtifact(cwd) {
193
+ const { state, policy } = await loadEngagementContext(cwd);
194
194
  const timeline = buildEngagementTimeline(state, policy);
195
195
  const markdown = engagementTimelineToMarkdown(timeline);
196
196
  const reportPath = join(timelineDir(cwd), "latest.md");
@@ -198,9 +198,7 @@ export async function timelineArtifact(cwd) {
198
198
  return { reportPath, markdown };
199
199
  }
200
200
  export async function dueTopicsArtifact(cwd) {
201
- await ensureProjectScaffold(cwd);
202
- const state = await loadLearnerState(learnerStatePath(cwd));
203
- const policy = await loadEngagementPolicy(engagementPolicyPath(cwd));
201
+ const { state, policy } = await loadEngagementContext(cwd);
204
202
  const due = dueTopics(state, policy);
205
203
  const markdown = dueTopicsToMarkdown(due);
206
204
  const reportPath = join(timelineDir(cwd), "due.md");
@@ -611,7 +611,12 @@ function buildFallbackTopic(rawTopic) {
611
611
  }
612
612
  export function resolveTopic(query) {
613
613
  const normalized = slugify(query);
614
- return TOPICS[normalized] ?? TOPICS[normalized.replace(/-rule$/, "")] ?? buildFallbackTopic(query);
614
+ if (Object.hasOwn(TOPICS, normalized))
615
+ return TOPICS[normalized];
616
+ const withoutRule = normalized.replace(/-rule$/, "");
617
+ if (Object.hasOwn(TOPICS, withoutRule))
618
+ return TOPICS[withoutRule];
619
+ return buildFallbackTopic(query);
615
620
  }
616
621
  export function benchmarkTopics(focusTopic) {
617
622
  if (focusTopic?.trim())
@@ -7,7 +7,7 @@ import { loadKeatingConfig } from "../core/config.js";
7
7
  import { shellCommandSections } from "../core/commands.js";
8
8
  import { KEATING_VOICE_TOOL_NAME, VOICE_TAGS, normalizeVoiceUtterance, speechStrategySummary, voiceTagLine } from "../core/speech.js";
9
9
  import { KEATING_ASCII_LOGO, KEATING_SUBTITLE_LINES } from "../core/terminal.js";
10
- const KEATING_VERSION = "0.3.6";
10
+ const KEATING_VERSION = "0.3.9";
11
11
  const ANSI_RE = /\x1b\[[0-9;]*[a-zA-Z]/g;
12
12
  function visibleWidth(text) {
13
13
  return text.replace(ANSI_RE, "").length;
@@ -229,7 +229,12 @@ async function resolveEmbeddedAgent(packageRoot = resolvePackageRoot()) {
229
229
  }
230
230
  const nmDir = join(globalPrefix, ver, "lib", "node_modules");
231
231
  const nmEntries = await readdir(nmDir, { withFileTypes: true }).catch(() => []);
232
- const nmDirs = nmEntries.filter((e) => e.isDirectory() || (e.isSymbolicLink() && statSync(join(nmDir, e.name)).isDirectory()));
232
+ const nmDirs = nmEntries.filter((e) => e.isDirectory() || (e.isSymbolicLink() && (() => { try {
233
+ return statSync(join(nmDir, e.name)).isDirectory();
234
+ }
235
+ catch {
236
+ return false;
237
+ } })()));
233
238
  for (const nmEntry of nmDirs) {
234
239
  const nested = join(nmDir, nmEntry.name, "node_modules", scope, pkg, "dist", "cli.js");
235
240
  if (existsSync(nested)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keating",
3
- "version": "0.3.6",
3
+ "version": "0.3.9",
4
4
  "type": "module",
5
5
  "description": "A Pi-powered hyperteacher package with self-improving teaching policies, lesson maps, and animated visual teaching artifacts.",
6
6
  "keywords": [
@@ -1,4 +1,4 @@
1
- import{t as e}from"./env-api-keys-BNlMKqxw.js";import{r as t,t as n}from"./event-stream-D33K9rpL.js";import{t as r}from"./json-parse-C6tSeIxX.js";import{a as i,n as a,r as o,t as s}from"./transform-messages-CqKEdRVp.js";import{n as c,t as l}from"./github-copilot-headers-L39QqneT.js";function u(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function d(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}var f=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return f=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^n()&15>>e/4).toString(16))};function p(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var ee=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},m=class extends Error{},h=class e extends m{constructor(t,n,r,i){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.requestID=i?.get(`request-id`),this.error=n}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new te({message:r,cause:ee(n)});let a=n;return t===400?new re(t,a,r,i):t===401?new ie(t,a,r,i):t===403?new ae(t,a,r,i):t===404?new oe(t,a,r,i):t===409?new se(t,a,r,i):t===422?new ce(t,a,r,i):t===429?new le(t,a,r,i):t>=500?new ue(t,a,r,i):new e(t,a,r,i)}},g=class extends h{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},te=class extends h{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},ne=class extends te{constructor({message:e}={}){super({message:e??`Request timed out.`})}},re=class extends h{},ie=class extends h{},ae=class extends h{},oe=class extends h{},se=class extends h{},ce=class extends h{},le=class extends h{},ue=class extends h{},de=/^[a-z][a-z0-9+.-]*:/i,fe=e=>de.test(e),pe=e=>(pe=Array.isArray,pe(e)),me=pe;function he(e){return typeof e==`object`?e??{}:{}}function ge(e){if(!e)return!0;for(let t in e)return!1;return!0}function _e(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var ve=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new m(`${e} must be an integer`);if(t<0)throw new m(`${e} must be a positive integer`);return t},ye=e=>{try{return JSON.parse(e)}catch{return}},be=e=>new Promise(t=>setTimeout(t,e)),_=`0.73.0`,xe=()=>typeof window<`u`&&window.document!==void 0&&typeof navigator<`u`;function Se(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}var Ce=()=>{let e=Se();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":Ee(Deno.build.os),"X-Stainless-Arch":Te(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":Ee(globalThis.process.platform??`unknown`),"X-Stainless-Arch":Te(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=we();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function we(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}var Te=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,Ee=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`),De,Oe=()=>De??=Ce();function ke(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Ae(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function je(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return Ae({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}function Me(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){let e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function Ne(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}var Pe=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)});function Fe(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var Ie;function Le(e){let t;return(Ie??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Re;function ze(e){let t;return(Re??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var v,y,b=class{constructor(){v.set(this,void 0),y.set(this,void 0),u(this,v,new Uint8Array,`f`),u(this,y,null,`f`)}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==`string`?Le(e):e;u(this,v,Fe([d(this,v,`f`),t]),`f`);let n=[],r;for(;(r=Be(d(this,v,`f`),d(this,y,`f`)))!=null;){if(r.carriage&&d(this,y,`f`)==null){u(this,y,r.index,`f`);continue}if(d(this,y,`f`)!=null&&(r.index!==d(this,y,`f`)+1||r.carriage)){n.push(ze(d(this,v,`f`).subarray(0,d(this,y,`f`)-1))),u(this,v,d(this,v,`f`).subarray(d(this,y,`f`)),`f`),u(this,y,null,`f`);continue}let e=d(this,y,`f`)===null?r.preceding:r.preceding-1,t=ze(d(this,v,`f`).subarray(0,e));n.push(t),u(this,v,d(this,v,`f`).subarray(r.index),`f`),u(this,y,null,`f`)}return n}flush(){return d(this,v,`f`).length?this.decode(`
1
+ import{t as e}from"./env-api-keys-BNlMKqxw.js";import{r as t,t as n}from"./event-stream-D33K9rpL.js";import{t as r}from"./json-parse-C6tSeIxX.js";import{a as i,n as a,r as o,t as s}from"./transform-messages-DXDWLrnO.js";import{n as c,t as l}from"./github-copilot-headers-BuUn5v2j.js";function u(e,t,n,r,i){if(r===`m`)throw TypeError(`Private method is not writable`);if(r===`a`&&!i)throw TypeError(`Private accessor was defined without a setter`);if(typeof t==`function`?e!==t||!i:!t.has(e))throw TypeError(`Cannot write private member to an object whose class did not declare it`);return r===`a`?i.call(e,n):i?i.value=n:t.set(e,n),n}function d(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)}var f=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return f=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(e^n()&15>>e/4).toString(16))};function p(e){return typeof e==`object`&&!!e&&(`name`in e&&e.name===`AbortError`||`message`in e&&String(e.message).includes(`FetchRequestCanceledException`))}var ee=e=>{if(e instanceof Error)return e;if(typeof e==`object`&&e){try{if(Object.prototype.toString.call(e)===`[object Error]`){let t=Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return Error(JSON.stringify(e))}catch{}}return Error(e)},m=class extends Error{},h=class e extends m{constructor(t,n,r,i){super(`${e.makeMessage(t,n,r)}`),this.status=t,this.headers=i,this.requestID=i?.get(`request-id`),this.error=n}static makeMessage(e,t,n){let r=t?.message?typeof t.message==`string`?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&r?`${e} ${r}`:e?`${e} status code (no body)`:r||`(no status code or body)`}static generate(t,n,r,i){if(!t||!i)return new te({message:r,cause:ee(n)});let a=n;return t===400?new re(t,a,r,i):t===401?new ie(t,a,r,i):t===403?new ae(t,a,r,i):t===404?new oe(t,a,r,i):t===409?new se(t,a,r,i):t===422?new ce(t,a,r,i):t===429?new le(t,a,r,i):t>=500?new ue(t,a,r,i):new e(t,a,r,i)}},g=class extends h{constructor({message:e}={}){super(void 0,void 0,e||`Request was aborted.`,void 0)}},te=class extends h{constructor({message:e,cause:t}){super(void 0,void 0,e||`Connection error.`,void 0),t&&(this.cause=t)}},ne=class extends te{constructor({message:e}={}){super({message:e??`Request timed out.`})}},re=class extends h{},ie=class extends h{},ae=class extends h{},oe=class extends h{},se=class extends h{},ce=class extends h{},le=class extends h{},ue=class extends h{},de=/^[a-z][a-z0-9+.-]*:/i,fe=e=>de.test(e),pe=e=>(pe=Array.isArray,pe(e)),me=pe;function he(e){return typeof e==`object`?e??{}:{}}function ge(e){if(!e)return!0;for(let t in e)return!1;return!0}function _e(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var ve=(e,t)=>{if(typeof t!=`number`||!Number.isInteger(t))throw new m(`${e} must be an integer`);if(t<0)throw new m(`${e} must be a positive integer`);return t},ye=e=>{try{return JSON.parse(e)}catch{return}},be=e=>new Promise(t=>setTimeout(t,e)),_=`0.73.0`,xe=()=>typeof window<`u`&&window.document!==void 0&&typeof navigator<`u`;function Se(){return typeof Deno<`u`&&Deno.build!=null?`deno`:typeof EdgeRuntime<`u`?`edge`:Object.prototype.toString.call(globalThis.process===void 0?0:globalThis.process)===`[object process]`?`node`:`unknown`}var Ce=()=>{let e=Se();if(e===`deno`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":Ee(Deno.build.os),"X-Stainless-Arch":Te(Deno.build.arch),"X-Stainless-Runtime":`deno`,"X-Stainless-Runtime-Version":typeof Deno.version==`string`?Deno.version:Deno.version?.deno??`unknown`};if(typeof EdgeRuntime<`u`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":`edge`,"X-Stainless-Runtime-Version":globalThis.process.version};if(e===`node`)return{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":Ee(globalThis.process.platform??`unknown`),"X-Stainless-Arch":Te(globalThis.process.arch??`unknown`),"X-Stainless-Runtime":`node`,"X-Stainless-Runtime-Version":globalThis.process.version??`unknown`};let t=we();return t?{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":`js`,"X-Stainless-Package-Version":_,"X-Stainless-OS":`Unknown`,"X-Stainless-Arch":`unknown`,"X-Stainless-Runtime":`unknown`,"X-Stainless-Runtime-Version":`unknown`}};function we(){if(typeof navigator>`u`||!navigator)return null;for(let{key:e,pattern:t}of[{key:`edge`,pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`ie`,pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`chrome`,pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`firefox`,pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:`safari`,pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}]){let n=t.exec(navigator.userAgent);if(n)return{browser:e,version:`${n[1]||0}.${n[2]||0}.${n[3]||0}`}}return null}var Te=e=>e===`x32`?`x32`:e===`x86_64`||e===`x64`?`x64`:e===`arm`?`arm`:e===`aarch64`||e===`arm64`?`arm64`:e?`other:${e}`:`unknown`,Ee=e=>(e=e.toLowerCase(),e.includes(`ios`)?`iOS`:e===`android`?`Android`:e===`darwin`?`MacOS`:e===`win32`?`Windows`:e===`freebsd`?`FreeBSD`:e===`openbsd`?`OpenBSD`:e===`linux`?`Linux`:e?`Other:${e}`:`Unknown`),De,Oe=()=>De??=Ce();function ke(){if(typeof fetch<`u`)return fetch;throw Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Ae(...e){let t=globalThis.ReadableStream;if(t===void 0)throw Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function je(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return Ae({start(){},async pull(e){let{done:n,value:r}=await t.next();n?e.close():e.enqueue(r)},async cancel(){await t.return?.()}})}function Me(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){let e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function Ne(e){if(typeof e!=`object`||!e)return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),n=t.cancel();t.releaseLock(),await n}var Pe=({headers:e,body:t})=>({bodyHeaders:{"content-type":`application/json`},body:JSON.stringify(t)});function Fe(e){let t=0;for(let n of e)t+=n.length;let n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}var Ie;function Le(e){let t;return(Ie??=(t=new globalThis.TextEncoder,t.encode.bind(t)))(e)}var Re;function ze(e){let t;return(Re??=(t=new globalThis.TextDecoder,t.decode.bind(t)))(e)}var v,y,b=class{constructor(){v.set(this,void 0),y.set(this,void 0),u(this,v,new Uint8Array,`f`),u(this,y,null,`f`)}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e==`string`?Le(e):e;u(this,v,Fe([d(this,v,`f`),t]),`f`);let n=[],r;for(;(r=Be(d(this,v,`f`),d(this,y,`f`)))!=null;){if(r.carriage&&d(this,y,`f`)==null){u(this,y,r.index,`f`);continue}if(d(this,y,`f`)!=null&&(r.index!==d(this,y,`f`)+1||r.carriage)){n.push(ze(d(this,v,`f`).subarray(0,d(this,y,`f`)-1))),u(this,v,d(this,v,`f`).subarray(d(this,y,`f`)),`f`),u(this,y,null,`f`);continue}let e=d(this,y,`f`)===null?r.preceding:r.preceding-1,t=ze(d(this,v,`f`).subarray(0,e));n.push(t),u(this,v,d(this,v,`f`).subarray(r.index),`f`),u(this,y,null,`f`)}return n}flush(){return d(this,v,`f`).length?this.decode(`
2
2
  `):[]}};v=new WeakMap,y=new WeakMap,b.NEWLINE_CHARS=new Set([`
3
3
  `,`\r`]),b.NEWLINE_REGEXP=/\r\n|[\n\r]/g;function Be(e,t){for(let n=t??0;n<e.length;n++){if(e[n]===10)return{preceding:n,index:n+1,carriage:!1};if(e[n]===13)return{preceding:n,index:n+1,carriage:!0}}return null}function Ve(e){for(let t=0;t<e.length-1;t++){if(e[t]===10&&e[t+1]===10||e[t]===13&&e[t+1]===13)return t+2;if(e[t]===13&&e[t+1]===10&&t+3<e.length&&e[t+2]===13&&e[t+3]===10)return t+4}return-1}var He={off:0,error:200,warn:300,info:400,debug:500},Ue=(e,t,n)=>{if(e){if(_e(He,e))return e;S(n).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(He))}`)}};function x(){}function We(e,t,n){return!t||He[e]>He[n]?x:t[e].bind(t)}var Ge={error:x,warn:x,info:x,debug:x},Ke=new WeakMap;function S(e){let t=e.logger,n=e.logLevel??`off`;if(!t)return Ge;let r=Ke.get(t);if(r&&r[0]===n)return r[1];let i={error:We(`error`,t,n),warn:We(`warn`,t,n),info:We(`info`,t,n),debug:We(`debug`,t,n)};return Ke.set(t,[n,i]),i}var C=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([e,t])=>[e,e.toLowerCase()===`x-api-key`||e.toLowerCase()===`authorization`||e.toLowerCase()===`cookie`||e.toLowerCase()===`set-cookie`?`***`:t])),`retryOfRequestLogID`in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e),qe,Je=class e{constructor(e,t,n){this.iterator=e,qe.set(this,void 0),this.controller=t,u(this,qe,n,`f`)}static fromSSEResponse(t,n,r){let i=!1,a=r?S(r):console;async function*o(){if(i)throw new m("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");i=!0;let e=!1;try{for await(let e of Ye(t,n)){if(e.event===`completion`)try{yield JSON.parse(e.data)}catch(t){throw a.error(`Could not parse message into JSON:`,e.data),a.error(`From chunk:`,e.raw),t}if(e.event===`message_start`||e.event===`message_delta`||e.event===`message_stop`||e.event===`content_block_start`||e.event===`content_block_delta`||e.event===`content_block_stop`)try{yield JSON.parse(e.data)}catch(t){throw a.error(`Could not parse message into JSON:`,e.data),a.error(`From chunk:`,e.raw),t}if(e.event!==`ping`&&e.event===`error`)throw new h(void 0,ye(e.data)??e.data,void 0,t.headers)}e=!0}catch(e){if(p(e))return;throw e}finally{e||n.abort()}}return new e(o,n,r)}static fromReadableStream(t,n,r){let i=!1;async function*a(){let e=new b,n=Me(t);for await(let t of n)for(let n of e.decode(t))yield n;for(let t of e.flush())yield t}async function*o(){if(i)throw new m("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");i=!0;let e=!1;try{for await(let t of a())e||t&&(yield JSON.parse(t));e=!0}catch(e){if(p(e))return;throw e}finally{e||n.abort()}}return new e(o,n,r)}[(qe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let t=[],n=[],r=this.iterator(),i=e=>({next:()=>{if(e.length===0){let e=r.next();t.push(e),n.push(e)}return e.shift()}});return[new e(()=>i(t),this.controller,d(this,qe,`f`)),new e(()=>i(n),this.controller,d(this,qe,`f`))]}toReadableStream(){let e=this,t;return Ae({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{let{value:n,done:r}=await t.next();if(r)return e.close();let i=Le(JSON.stringify(n)+`
4
4
  `);e.enqueue(i)}catch(t){e.error(t)}},async cancel(){await t.return?.()}})}};async function*Ye(e,t){if(!e.body)throw t.abort(),globalThis.navigator!==void 0&&globalThis.navigator.product===`ReactNative`?new m(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`):new m(`Attempted to iterate over a response with no body`);let n=new Ze,r=new b,i=Me(e.body);for await(let e of Xe(i))for(let t of r.decode(e)){let e=n.decode(t);e&&(yield e)}for(let e of r.flush()){let t=n.decode(e);t&&(yield t)}}async function*Xe(e){let t=new Uint8Array;for await(let n of e){if(n==null)continue;let e=n instanceof ArrayBuffer?new Uint8Array(n):typeof n==`string`?Le(n):n,r=new Uint8Array(t.length+e.length);r.set(t),r.set(e,t.length),t=r;let i;for(;(i=Ve(t))!==-1;)yield t.slice(0,i),t=t.slice(i)}t.length>0&&(yield t)}var Ze=class{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith(`\r`)&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;let e={event:this.event,data:this.data.join(`
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./path-BVVvcbiy.js";import{a as n,c as r,d as i,f as a,i as o,l as s,n as c,p as l,r as u,s as d,t as f,u as p}from"./math-Csj_9zpx.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,i,o,s,c){var l=e-n,u=t-i,d=(c?s:-s)/a(l*l+u*u),f=d*u,p=-d*l,m=e+f,h=t+p,g=n+f,_=i+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=o-s,w=m*_-g*h,T=(x<0?-1:1)*a(r(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(o/C-1),y11:D*(o/C-1)}}function x(){var r=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+r.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-d,_=T.apply(this,arguments)-d,v=f(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>l-1e-12)D.moveTo(h*n(g),h*i(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*n(_),m*i(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):a(m*m+h*h)),R=s(f(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=u(L/m*i(I)),W=u(L/h*i(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*n(A),K=h*i(A),q=m*n(N),J=m*i(N);if(R>1e-12){var Y=h*n(j),X=h*i(j),Z=m*n(M),Q=m*i(M),$;if(v<p)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/i(c((ee*ne+te*re)/(a(ee*ee+te*te)*a(ne*ne+re*re)))/2),ae=a($[0]*$[0]+$[1]*$[1]);z=s(R,(m-ae)/(ie-1)),B=s(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,h,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,o(H.y11,H.x11),o(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,m,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,o(H.y11,H.x11),o(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+r.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-p/2;return[n(t)*e,i(t)*e]},k.innerRadius=function(t){return arguments.length?(r=typeof t==`function`?t:e(+t),k):r},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-K5T4RW27-C6ErEFB0.js";import{n as e}from"./chunk-7N4EOEYR-BGZXIfBD.js";export{e as createArchitectureServices};