crow-central-agency 0.25.2 → 0.25.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 (95) hide show
  1. package/dist/bootstrap.js +2 -0
  2. package/dist/mcp/audio/audio-mcp-server.js +15 -0
  3. package/dist/mcp/audio/generate-audio.js +130 -0
  4. package/dist/public/assets/{arc-CWcgwC0V.js → arc-DGfklW6W.js} +1 -1
  5. package/dist/public/assets/architecture-YZFGNWBL-BjhBj1gy.js +1 -0
  6. package/dist/public/assets/{architectureDiagram-Q4EWVU46-Hzz_E5-8.js → architectureDiagram-Q4EWVU46-BLtLLrrM.js} +1 -1
  7. package/dist/public/assets/{blockDiagram-DXYQGD6D-cJiNsaLA.js → blockDiagram-DXYQGD6D-CDlaPBdm.js} +1 -1
  8. package/dist/public/assets/{c4Diagram-AHTNJAMY-C8-_3XAz.js → c4Diagram-AHTNJAMY-D_1C5Qv-.js} +1 -1
  9. package/dist/public/assets/channel-CCpJtCKj.js +1 -0
  10. package/dist/public/assets/{chunk-2KRD3SAO-hNrE6Fhb.js → chunk-2KRD3SAO-JGXfL3em.js} +1 -1
  11. package/dist/public/assets/{chunk-4BX2VUAB-CyuizFOU.js → chunk-4BX2VUAB-DzAEoq8p.js} +1 -1
  12. package/dist/public/assets/{chunk-4TB4RGXK-Dps1Wnxb.js → chunk-4TB4RGXK-Bq0l77tE.js} +1 -1
  13. package/dist/public/assets/{chunk-55IACEB6-D4EeyXif.js → chunk-55IACEB6-Dw1mP8DW.js} +1 -1
  14. package/dist/public/assets/{chunk-67CJDMHE-BJgwVRSb.js → chunk-67CJDMHE-VBILu5Jg.js} +1 -1
  15. package/dist/public/assets/{chunk-7N4EOEYR-BamzAjP6.js → chunk-7N4EOEYR-BDEJbGXO.js} +1 -1
  16. package/dist/public/assets/{chunk-AA7GKIK3-4A2PAbvw.js → chunk-AA7GKIK3-8nY8v0X-.js} +1 -1
  17. package/dist/public/assets/{chunk-CIAEETIT-Cdrfoz9N.js → chunk-CIAEETIT-B5VtRKrH.js} +1 -1
  18. package/dist/public/assets/{chunk-EDXVE4YY-pw0Fyb74.js → chunk-EDXVE4YY-D2xx_I35.js} +1 -1
  19. package/dist/public/assets/{chunk-FMBD7UC4-B73wYTDE.js → chunk-FMBD7UC4-BcUJik9J.js} +1 -1
  20. package/dist/public/assets/{chunk-FOC6F5B3-C-k80GjN.js → chunk-FOC6F5B3-BuBOfTql.js} +1 -1
  21. package/dist/public/assets/{chunk-K5T4RW27-02-aUFo6.js → chunk-K5T4RW27-CIgHSlZ9.js} +1 -1
  22. package/dist/public/assets/{chunk-KGLVRYIC-gnUUZi9X.js → chunk-KGLVRYIC-HYhZILr-.js} +1 -1
  23. package/dist/public/assets/{chunk-LIHQZDEY-ClkZaJX6.js → chunk-LIHQZDEY-BC-k52_G.js} +1 -1
  24. package/dist/public/assets/{chunk-ORNJ4GCN-Co01V-Ft.js → chunk-ORNJ4GCN-BBGAxSJk.js} +1 -1
  25. package/dist/public/assets/{chunk-OYMX7WX6-DDDB98j6.js → chunk-OYMX7WX6-CTj_Zaxp.js} +1 -1
  26. package/dist/public/assets/chunk-QZHKN3VN-CmmDNumy.js +1 -0
  27. package/dist/public/assets/{chunk-YZCP3GAM-DG5u50aq.js → chunk-YZCP3GAM-B1v3tzrq.js} +1 -1
  28. package/dist/public/assets/classDiagram-6PBFFD2Q-CWg5jcu2.js +1 -0
  29. package/dist/public/assets/classDiagram-v2-HSJHXN6E-a402CX7d.js +1 -0
  30. package/dist/public/assets/clone-DiKzxGlI.js +1 -0
  31. package/dist/public/assets/{cose-bilkent-S5V4N54A-BeQ2fw6I.js → cose-bilkent-S5V4N54A-CUhVgJ_J.js} +1 -1
  32. package/dist/public/assets/{dagre-BOQpPiEO.js → dagre-DYr6WV3C.js} +1 -1
  33. package/dist/public/assets/{dagre-KV5264BT-D59IU6Kl.js → dagre-KV5264BT-CKDXhqVd.js} +1 -1
  34. package/dist/public/assets/{diagram-5BDNPKRD-DjSt96Vd.js → diagram-5BDNPKRD-DjgoUoF0.js} +1 -1
  35. package/dist/public/assets/{diagram-G4DWMVQ6-BIUmVPmV.js → diagram-G4DWMVQ6-B1S579Oi.js} +1 -1
  36. package/dist/public/assets/{diagram-MMDJMWI5-CwYCJc8U.js → diagram-MMDJMWI5-DwaRe-lk.js} +1 -1
  37. package/dist/public/assets/{diagram-TYMM5635-FcLyspOI.js → diagram-TYMM5635-DA3ky7gp.js} +1 -1
  38. package/dist/public/assets/{erDiagram-SMLLAGMA-BrrsxNSv.js → erDiagram-SMLLAGMA-4mZPMOdg.js} +1 -1
  39. package/dist/public/assets/{flatten-DahVKBbC.js → flatten-BEBc2hcp.js} +1 -1
  40. package/dist/public/assets/{flowDiagram-DWJPFMVM-DRY3NPE7.js → flowDiagram-DWJPFMVM-xen5xLuP.js} +1 -1
  41. package/dist/public/assets/{ganttDiagram-T4ZO3ILL-D3zgaTy9.js → ganttDiagram-T4ZO3ILL-De3G9VvV.js} +1 -1
  42. package/dist/public/assets/gitGraph-7Q5UKJZL-C-k87D3p.js +1 -0
  43. package/dist/public/assets/{gitGraphDiagram-UUTBAWPF-zg2nx9lJ.js → gitGraphDiagram-UUTBAWPF-CPSVdWRG.js} +1 -1
  44. package/dist/public/assets/{graphlib-D8pGHa62.js → graphlib-CbTxGIul.js} +1 -1
  45. package/dist/public/assets/{index-DxDvQqD3.js → index-Be44cNor.js} +97 -97
  46. package/dist/public/assets/info-OMHHGYJF-DH5qK-1O.js +1 -0
  47. package/dist/public/assets/{infoDiagram-42DDH7IO-CRoYGVce.js → infoDiagram-42DDH7IO-DL5GcduJ.js} +1 -1
  48. package/dist/public/assets/{ishikawaDiagram-UXIWVN3A-Cxpb00_M.js → ishikawaDiagram-UXIWVN3A-DBLxOdDN.js} +1 -1
  49. package/dist/public/assets/{journeyDiagram-VCZTEJTY-BqIFQj3F.js → journeyDiagram-VCZTEJTY-C3Rmu7v9.js} +1 -1
  50. package/dist/public/assets/{kanban-definition-6JOO6SKY-CbaAd8Pt.js → kanban-definition-6JOO6SKY-COMt6Dlu.js} +1 -1
  51. package/dist/public/assets/{linear-Bk4AIQFb.js → linear-Bvcp_lgJ.js} +1 -1
  52. package/dist/public/assets/{mermaid-parser.core-B6CvLttS.js → mermaid-parser.core-ChFKzATa.js} +2 -2
  53. package/dist/public/assets/{mindmap-definition-QFDTVHPH-CHTNRZyG.js → mindmap-definition-QFDTVHPH-B8OqpvWl.js} +1 -1
  54. package/dist/public/assets/packet-4T2RLAQJ-BcT5ALQu.js +1 -0
  55. package/dist/public/assets/pie-ZZUOXDRM-D7qXJxHt.js +1 -0
  56. package/dist/public/assets/{pieDiagram-DEJITSTG-CjrUVyNR.js → pieDiagram-DEJITSTG-ONJZbUmb.js} +1 -1
  57. package/dist/public/assets/{quadrantDiagram-34T5L4WZ-8a518uXc.js → quadrantDiagram-34T5L4WZ-CeDiYnuM.js} +1 -1
  58. package/dist/public/assets/radar-PYXPWWZC-CNpgsl50.js +1 -0
  59. package/dist/public/assets/{reduce-DbfHsVRc.js → reduce-D8YREtMW.js} +1 -1
  60. package/dist/public/assets/{requirementDiagram-MS252O5E-BWd5xTIp.js → requirementDiagram-MS252O5E-CmbY3HAT.js} +1 -1
  61. package/dist/public/assets/{sankeyDiagram-XADWPNL6-D35UAmHI.js → sankeyDiagram-XADWPNL6-DJpM_19m.js} +1 -1
  62. package/dist/public/assets/{sequenceDiagram-FGHM5R23-B2t5aLiU.js → sequenceDiagram-FGHM5R23-CcdjKB3L.js} +1 -1
  63. package/dist/public/assets/{stateDiagram-FHFEXIEX-BQhhAjm9.js → stateDiagram-FHFEXIEX-B-NZ4XpZ.js} +1 -1
  64. package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-8zTBPVa0.js +1 -0
  65. package/dist/public/assets/{timeline-definition-GMOUNBTQ-q-ZFF7ju.js → timeline-definition-GMOUNBTQ-v4nYbcZi.js} +1 -1
  66. package/dist/public/assets/treeView-SZITEDCU-JaDnhbw8.js +1 -0
  67. package/dist/public/assets/treemap-W4RFUUIX-956iOpm1.js +1 -0
  68. package/dist/public/assets/{vennDiagram-DHZGUBPP-CxS7J9vF.js → vennDiagram-DHZGUBPP-BlQnROmd.js} +1 -1
  69. package/dist/public/assets/wardley-RL74JXVD-c95Gpcgx.js +1 -0
  70. package/dist/public/assets/{wardleyDiagram-NUSXRM2D-D3oQBxHb.js → wardleyDiagram-NUSXRM2D-Bz5ZPQq8.js} +1 -1
  71. package/dist/public/assets/{xychartDiagram-5P7HB3ND-CcB-1rnM.js → xychartDiagram-5P7HB3ND-D1oy_qJb.js} +1 -1
  72. package/dist/public/index.html +1 -1
  73. package/dist/runner/agent-runner.js +3 -0
  74. package/dist/services/content-generation/audio-chunker.js +70 -0
  75. package/dist/services/content-generation/audio-format.js +55 -0
  76. package/dist/services/content-generation/audio-generation-service.js +84 -5
  77. package/dist/services/content-generation/provider/google-provider.js +33 -28
  78. package/dist/services/runtime/agent-runtime-manager.js +1 -1
  79. package/dist/services/session/session-manager.js +4 -1
  80. package/package.json +1 -1
  81. package/dist/public/assets/architecture-YZFGNWBL-ezfTnWVi.js +0 -1
  82. package/dist/public/assets/channel-DbM4kSP-.js +0 -1
  83. package/dist/public/assets/chunk-QZHKN3VN-DesUjsTI.js +0 -1
  84. package/dist/public/assets/classDiagram-6PBFFD2Q-Zhl3bAAO.js +0 -1
  85. package/dist/public/assets/classDiagram-v2-HSJHXN6E-DJo0qw9K.js +0 -1
  86. package/dist/public/assets/clone-AsOJeT1y.js +0 -1
  87. package/dist/public/assets/gitGraph-7Q5UKJZL-DYK5FwuK.js +0 -1
  88. package/dist/public/assets/info-OMHHGYJF-L7JaN6uh.js +0 -1
  89. package/dist/public/assets/packet-4T2RLAQJ-DBSkkBZ5.js +0 -1
  90. package/dist/public/assets/pie-ZZUOXDRM-C4UhUDir.js +0 -1
  91. package/dist/public/assets/radar-PYXPWWZC-DFkf3JQp.js +0 -1
  92. package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-D2D1BRlV.js +0 -1
  93. package/dist/public/assets/treeView-SZITEDCU-D2ywS8Aa.js +0 -1
  94. package/dist/public/assets/treemap-W4RFUUIX-BaBddW3r.js +0 -1
  95. package/dist/public/assets/wardley-RL74JXVD-CgfeWrGf.js +0 -1
package/dist/bootstrap.js CHANGED
@@ -53,6 +53,7 @@ import { SimplyFeedManager } from "./feed/simply-feed-manager.js";
53
53
  import { registerFeedRoutes } from "./routes/feed.routes.js";
54
54
  import { registerSystemSettingsRoutes } from "./routes/system-settings.routes.js";
55
55
  import { createFeedMcpServer, FEED_MCP_SERVER_NAME } from "./mcp/feed/feed-mcp-server.js";
56
+ import { createAudioMcpServer, CROW_AUDIO_MCP_SERVER_NAME } from "./mcp/audio/audio-mcp-server.js";
56
57
  /**
57
58
  * Bootstrap the application - create services with constructor deps, start server.
58
59
  * No event wiring here - services own their own listeners.
@@ -110,6 +111,7 @@ export async function bootstrap(options) {
110
111
  mcpManager.registerMcpServer(CROW_AGENTS_MCP_SERVER_NAME, (agentId) => createAgentsMcpServer(agentId, registry, runtimeManager, taskManager));
111
112
  mcpManager.registerMcpServer(CROW_TASKS_MCP_SERVER_NAME, (agentId) => createTasksMcpServer(agentId, taskManager, circleManager, sensorManager));
112
113
  mcpManager.registerMcpServer(FEED_MCP_SERVER_NAME, (agentId) => createFeedMcpServer(agentId, registry, feedManager, sensorManager, systemSettingsManager));
114
+ mcpManager.registerMcpServer(CROW_AUDIO_MCP_SERVER_NAME, (agentId) => createAudioMcpServer(agentId, registry, artifactManager));
113
115
  mcpManager.registerMcpServer(CROW_SUPER_TASKS_MCP_SERVER_NAME, (agentId) => createSuperTasksMcpServer(agentId, taskManager, registry, circleManager, sensorManager), [CROW_SYSTEM_AGENT_ID, CROW_TASK_DISPATCHER_AGENT_ID]);
114
116
  mcpManager.registerMcpServer(CROW_SUPER_AGENT_MCP_SERVER_NAME, (agentId) => createSuperAgentMcpServer(agentId, registry, runtimeManager, sessionManager), [CROW_SYSTEM_AGENT_ID]);
115
117
  mcpManager.registerMcpServer(REMINDERS_MCP_SERVER_NAME, (agentId) => createRemindersMcpServer(agentId, crowScheduler, sensorManager));
@@ -0,0 +1,15 @@
1
+ import { createSdkMcpServer, tool } from "@anthropic-ai/claude-agent-sdk";
2
+ import { getGenerateAudioToolConfig } from "./generate-audio.js";
3
+ export const CROW_AUDIO_MCP_SERVER_NAME = "crow-audio";
4
+ export function createAudioMcpServer(agentId, registry, artifactManager) {
5
+ const generateAudio = getGenerateAudioToolConfig(agentId, registry, artifactManager);
6
+ return createSdkMcpServer({
7
+ name: CROW_AUDIO_MCP_SERVER_NAME,
8
+ tools: [
9
+ tool(generateAudio.name, generateAudio.description, generateAudio.inputSchema, generateAudio.handler, {
10
+ annotations: generateAudio.annotations,
11
+ }),
12
+ ],
13
+ });
14
+ }
15
+ //# sourceMappingURL=audio-mcp-server.js.map
@@ -0,0 +1,130 @@
1
+ import { z } from "zod";
2
+ import { AGENT_TASK_SOURCE_TYPE, ARTIFACT_CONTENT_TYPE } from "../../_shared/index.js";
3
+ import { env } from "../../config/env.js";
4
+ import { AppError } from "../../core/error/app-error.js";
5
+ import { APP_ERROR_CODES } from "../../core/error/app-error.types.js";
6
+ import { audioGeneration } from "../../services/content-generation/audio-generation-service.js";
7
+ import { getErrorToolResult, textToolResult } from "../tool-utils.js";
8
+ export const GENERATE_AUDIO_TOOL_NAME = "generate_audio";
9
+ // single speaker use agent's custom voice or default voice
10
+ const DEFAULT_MULTI_SPEAKER_MALE_1 = "Umbriel";
11
+ const DEFAULT_MULTI_SPEAKER_FEMALE_1 = "Autonoe";
12
+ const DEFAULT_MULTI_SPEAKER_MALE_2 = "Achird";
13
+ const DEFAULT_MULTI_SPEAKER_FEMALE_2 = "Leda";
14
+ const SPEAKER_GENDER_MALE = "male";
15
+ const SPEAKER_GENDER_FEMALE = "female";
16
+ const AUDIO_FILE_EXTENSION = ".wav";
17
+ export function getGenerateAudioToolConfig(agentId, registry, artifactManager) {
18
+ const inputSchema = {
19
+ scene: z
20
+ .string()
21
+ .describe("Setting and situation for the performance: where, when, and what is happening. e.g. 'Late-night radio interview in a dimly-lit studio.'"),
22
+ directorsNotes: z
23
+ .string()
24
+ .describe("How the performance should unfold: pacing, emphasis, emotional arc, transitions across the transcript. e.g. 'Start measured and contemplative; energy builds in the middle; end softly and conclusive.'"),
25
+ speakerProfile: z
26
+ .string()
27
+ .optional()
28
+ .describe("Audio profile of the primary speaker — voice character, age, accent, emotional baseline. Required when speakerName is set."),
29
+ additionalSpeakerProfile: z
30
+ .string()
31
+ .optional()
32
+ .describe("Audio profile of the second speaker — voice character, age, accent, emotional baseline. Required when additionalSpeakerName is set."),
33
+ transcript: z
34
+ .string()
35
+ .describe(`The script for generating audio. Prefix sentence with "speakerName:" if having multiple speakers.`),
36
+ speakerName: z.string().optional().describe("Optional, this is used when the script is calling for two speakers."),
37
+ speakerGender: z
38
+ .enum([SPEAKER_GENDER_MALE, SPEAKER_GENDER_FEMALE])
39
+ .optional()
40
+ .describe("Optional gender for the primary speaker; used to select a default voice for multi-speaker scenes."),
41
+ additionalSpeakerName: z
42
+ .string()
43
+ .optional()
44
+ .describe("Optional second speaker label. Required (alongside speakerName) to enable multi-speaker synthesis."),
45
+ additionalSpeakerGender: z
46
+ .enum([SPEAKER_GENDER_MALE, SPEAKER_GENDER_FEMALE])
47
+ .optional()
48
+ .describe("Optional gender for the second speaker; used to select a default voice for multi-speaker scenes."),
49
+ };
50
+ const handler = async (args) => {
51
+ try {
52
+ const model = env.AUDIO_GENERATION_MODEL;
53
+ if (!model) {
54
+ throw new AppError("Audio generation model is not configured", APP_ERROR_CODES.NOT_SUPPORTED);
55
+ }
56
+ const agentVoiceName = registry.getAgent(agentId).agentVoiceConfig?.voiceName;
57
+ const voices = resolveVoices(args, agentVoiceName);
58
+ const directionalPrompt = buildDirectionalPrompt(args);
59
+ const response = await audioGeneration(model, args.transcript, {
60
+ stylePrompt: directionalPrompt,
61
+ voice: voices,
62
+ });
63
+ const audioData = response.message.data;
64
+ if (!audioData) {
65
+ throw new AppError("Audio generation returned no data", APP_ERROR_CODES.AUDIO_GEN_NO_DATA);
66
+ }
67
+ const filename = `audio-${Date.now()}${AUDIO_FILE_EXTENSION}`;
68
+ const metadata = await artifactManager.writeArtifact(agentId, filename, audioData, {
69
+ contentType: ARTIFACT_CONTENT_TYPE.AUDIO,
70
+ createdBy: { sourceType: AGENT_TASK_SOURCE_TYPE.AGENT, agentId },
71
+ });
72
+ const durationMs = response.message.durationMs;
73
+ const durationLabel = durationMs !== undefined ? `${durationMs} ms` : "unknown duration";
74
+ return textToolResult([
75
+ `Audio generated and saved as artifact: ${metadata.filename} (${durationLabel}, ${audioData.byteLength} bytes)`,
76
+ ]);
77
+ }
78
+ catch (error) {
79
+ return getErrorToolResult(error, "Failed to generate audio.");
80
+ }
81
+ };
82
+ const config = {
83
+ name: GENERATE_AUDIO_TOOL_NAME,
84
+ description: "Synthesize speech audio from a transcript. Supports single- or two-speaker scenes — pass both speakerName and additionalSpeakerName to enable multi-speaker synthesis. The result is written as an audio artifact in the agent's folder.",
85
+ inputSchema,
86
+ handler,
87
+ };
88
+ return config;
89
+ }
90
+ function resolveVoices(input, agentVoiceName) {
91
+ const { speakerName, speakerGender, additionalSpeakerName, additionalSpeakerGender } = input;
92
+ if (additionalSpeakerName && !speakerName) {
93
+ throw new AppError("additionalSpeakerName requires speakerName to be set for multi-speaker synthesis", APP_ERROR_CODES.VALIDATION);
94
+ }
95
+ if (speakerName && additionalSpeakerName) {
96
+ return [
97
+ { speakerName, voice: pickVoice(speakerGender, 1) },
98
+ { speakerName: additionalSpeakerName, voice: pickVoice(additionalSpeakerGender, 2) },
99
+ ];
100
+ }
101
+ return [{ voice: agentVoiceName }];
102
+ }
103
+ function buildDirectionalPrompt(input) {
104
+ const { scene, directorsNotes, speakerName, speakerProfile, additionalSpeakerName, additionalSpeakerProfile } = input;
105
+ if (speakerName && !speakerProfile) {
106
+ throw new AppError("speakerProfile is required when speakerName is set", APP_ERROR_CODES.VALIDATION);
107
+ }
108
+ if (additionalSpeakerName && !additionalSpeakerProfile) {
109
+ throw new AppError("additionalSpeakerProfile is required when additionalSpeakerName is set", APP_ERROR_CODES.VALIDATION);
110
+ }
111
+ const sections = [];
112
+ if (speakerName && speakerProfile) {
113
+ sections.push(`## AUDIO PROFILE: ${speakerName}`, speakerProfile);
114
+ }
115
+ if (additionalSpeakerName && additionalSpeakerProfile) {
116
+ sections.push("", `## AUDIO PROFILE: ${additionalSpeakerName}`, additionalSpeakerProfile);
117
+ }
118
+ sections.push("", "## SCENE", scene, "", "## DIRECTOR'S NOTES", directorsNotes);
119
+ return sections.join("\n");
120
+ }
121
+ function pickVoice(gender, slot) {
122
+ if (gender === SPEAKER_GENDER_MALE) {
123
+ return slot === 1 ? DEFAULT_MULTI_SPEAKER_MALE_1 : DEFAULT_MULTI_SPEAKER_MALE_2;
124
+ }
125
+ if (gender === SPEAKER_GENDER_FEMALE) {
126
+ return slot === 1 ? DEFAULT_MULTI_SPEAKER_FEMALE_1 : DEFAULT_MULTI_SPEAKER_FEMALE_2;
127
+ }
128
+ return slot === 1 ? DEFAULT_MULTI_SPEAKER_MALE_1 : DEFAULT_MULTI_SPEAKER_FEMALE_1;
129
+ }
130
+ //# sourceMappingURL=generate-audio.js.map
@@ -1 +1 @@
1
- import{n as e,t}from"./path-yo4Xej8w.js";import{Ct as n,St as r,_t as i,bt as a,dt as o,ft as s,ht as c,mt as l,pt as u,vt as d,xt as f,yt as p}from"./index-DxDvQqD3.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,a,o,s){var c=e-n,l=t-i,u=(s?o:-o)/r(c*c+l*l),f=u*l,p=-u*c,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=a-o,w=m*_-g*h,T=(x<0?-1:1)*r(d(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*(a/C-1),y11:D*(a/C-1)}}function x(){var d=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+d.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-i,_=T.apply(this,arguments)-i,v=o(_-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>n-1e-12)D.moveTo(h*c(g),h*f(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*c(_),m*f(_)),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):r(m*m+h*h)),R=p(o(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=u(L/m*f(I)),W=u(L/h*f(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*c(A),K=h*f(A),q=m*c(N),J=m*f(N);if(R>1e-12){var Y=h*c(j),X=h*f(j),Z=m*c(M),Q=m*f(M),$;if(v<a)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/f(s((ee*ne+te*re)/(r(ee*ee+te*te)*r(ne*ne+re*re)))/2),ae=r($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(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,l(V.y01,V.x01),l(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,l(V.y01,V.x01),l(V.y11,V.x11),!k),D.arc(0,0,h,l(V.cy+V.y11,V.cx+V.x11),l(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,l(H.y11,H.x11),l(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,l(V.y01,V.x01),l(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,l(V.y01,V.x01),l(V.y11,V.x11),!k),D.arc(0,0,m,l(V.cy+V.y11,V.cx+V.x11),l(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,l(H.y11,H.x11),l(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=(+d.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-a/2;return[c(t)*e,f(t)*e]},k.innerRadius=function(t){return arguments.length?(d=typeof t==`function`?t:e(+t),k):d},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};
1
+ import{n as e,t}from"./path-yo4Xej8w.js";import{Ct as n,St as r,_t as i,bt as a,dt as o,ft as s,ht as c,mt as l,pt as u,vt as d,xt as f,yt as p}from"./index-Be44cNor.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,a,o,s){var c=e-n,l=t-i,u=(s?o:-o)/r(c*c+l*l),f=u*l,p=-u*c,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=a-o,w=m*_-g*h,T=(x<0?-1:1)*r(d(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*(a/C-1),y11:D*(a/C-1)}}function x(){var d=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+d.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-i,_=T.apply(this,arguments)-i,v=o(_-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>n-1e-12)D.moveTo(h*c(g),h*f(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*c(_),m*f(_)),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):r(m*m+h*h)),R=p(o(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=u(L/m*f(I)),W=u(L/h*f(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*c(A),K=h*f(A),q=m*c(N),J=m*f(N);if(R>1e-12){var Y=h*c(j),X=h*f(j),Z=m*c(M),Q=m*f(M),$;if(v<a)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/f(s((ee*ne+te*re)/(r(ee*ee+te*te)*r(ne*ne+re*re)))/2),ae=r($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(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,l(V.y01,V.x01),l(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,l(V.y01,V.x01),l(V.y11,V.x11),!k),D.arc(0,0,h,l(V.cy+V.y11,V.cx+V.x11),l(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,l(H.y11,H.x11),l(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,l(V.y01,V.x01),l(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,l(V.y01,V.x01),l(V.y11,V.x11),!k),D.arc(0,0,m,l(V.cy+V.y11,V.cx+V.x11),l(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,l(H.y11,H.x11),l(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=(+d.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-a/2;return[c(t)*e,f(t)*e]},k.innerRadius=function(t){return arguments.length?(d=typeof t==`function`?t:e(+t),k):d},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-CIgHSlZ9.js";import{n as e}from"./chunk-7N4EOEYR-BDEJbGXO.js";export{e as createArchitectureServices};