orbitchat 2.13.1 → 2.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +271 -219
- package/bin/dev-server.js +0 -3
- package/bin/orbitchat.js +146 -82
- package/dist/assets/_baseUniq-BRKsqoH--68FUaYxk.js +1 -0
- package/dist/assets/{arc-pab_su9s-DFq3JYvb.js → arc-pab_su9s-BuY-VRZt.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-DqQ8r_6g-ejnypLyO.js → architectureDiagram-VXUJARFQ-DqQ8r_6g-C5b5VsO8.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-B-dKfcH3-Bgo8FU6J.js → blockDiagram-VD42YOAC-B-dKfcH3-DVjqMJ-3.js} +4 -4
- package/dist/assets/{c4Diagram-YG6GDRKO-DMUPaBEl-CX9lx-UK.js → c4Diagram-YG6GDRKO-DMUPaBEl-o6ghjFV9.js} +1 -1
- package/dist/assets/channel-HKsfPa5q-rOME8XF8.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-CX67kh_B-Dm2c-Lyy.js → chunk-4BX2VUAB-CX67kh_B-Dl0Loq_e.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-BocSyyvr-lclbFu9j.js → chunk-55IACEB6-BocSyyvr-DYW83vZR.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-CO8QAyfE-CvvrZ063.js → chunk-B4BG7PRW-CO8QAyfE-CsF1OX4R.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-Dw1L6Eos-BuD2OREa.js → chunk-DI55MBZ5-Dw1L6Eos-Dl1shJzL.js} +3 -3
- package/dist/assets/{chunk-FMBD7UC4-dPK7Boav-D0ZlDI-s.js → chunk-FMBD7UC4-dPK7Boav-Cz7OoDLR.js} +1 -1
- package/dist/assets/{chunk-QN33PNHL-vP2PqfVG-DqaIoebO.js → chunk-QN33PNHL-vP2PqfVG-BuQNN8G2.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-Bcidzu63-DG8agfQA.js → chunk-QZHKN3VN-Bcidzu63-Bud1NKOb.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-BtljMjlg-B6xEnbcW.js → chunk-TZMSLE5B-BtljMjlg-BKLxPJ-x.js} +1 -1
- package/dist/assets/{classDiagram-2ON5EDUG-C7cYN9hv-Dd-YCt5Q.js → classDiagram-2ON5EDUG-C7cYN9hv-BHg-LSxQ.js} +1 -1
- package/dist/assets/{classDiagram-v2-WZHVMYZB-C7cYN9hv-Dd-YCt5Q.js → classDiagram-v2-WZHVMYZB-C7cYN9hv-BHg-LSxQ.js} +1 -1
- package/dist/assets/clone-DoPb9X13-DejjKfXe.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-BGzO4EsH-BMVWyh_a.js → cose-bilkent-S5V4N54A-BGzO4EsH-rofdToAx.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-TzNvXCds-CbmhexaH.js → dagre-6UL2VRFP-TzNvXCds-Ls1mVyc7.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-BqY4RpUg-BqmtaKLy.js → diagram-PSM6KHXK-BqY4RpUg-BJmYXUei.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-CTjgBsne-Dbl2BvQJ.js → diagram-QEK2KX5R-CTjgBsne-dz-VLadE.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-BqrhTIpA-DnNkr8UG.js → diagram-S2PKOQOG-BqrhTIpA-ikxUE9Dj.js} +2 -2
- package/dist/assets/{erDiagram-Q2GNP2WA-B2hsi_Tl-r9lLCSiy.js → erDiagram-Q2GNP2WA-B2hsi_Tl-B5gu6Jrx.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-C03vtt_F-Bj1MoEwx.js → flowDiagram-NV44I4VS-C03vtt_F-C9LVdVvn.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-B3hAg964-CCnbkzn3.js → ganttDiagram-JELNMOA3-B3hAg964-CYO6ZcQ8.js} +1 -1
- package/dist/assets/{gitGraphDiagram-NY62KEGX-ByhMH0yZ-YRu-SLHD.js → gitGraphDiagram-NY62KEGX-ByhMH0yZ-BvO0WGzP.js} +3 -3
- package/dist/assets/{graph-BmNkcFEM-dUEThWgx.js → graph-BmNkcFEM-Bl2fiTgr.js} +1 -1
- package/dist/assets/{index-BXexqYFc-6FZAvmAF.js → index-BXexqYFc-CFPIFV8r.js} +1 -1
- package/dist/assets/index-KsGsuMGp.css +1 -0
- package/dist/assets/{index-BTk6gbYa.js → index-nqhgVFEP.js} +219 -239
- package/dist/assets/infoDiagram-WHAUD3N6-is6Ho4-T-D6tHdi3J.js +2 -0
- package/dist/assets/{journeyDiagram-XKPGCS4Q-CRTOL26C-BslRBPzU.js → journeyDiagram-XKPGCS4Q-CRTOL26C-CL4DFaQP.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-CNnO_t6O-C2MPRjuS.js → kanban-definition-3W4ZIXB7-CNnO_t6O-DZBlsSao.js} +6 -6
- package/dist/assets/{layout-C0kZPebx-DBUyCsod.js → layout-C0kZPebx-DiUdszUx.js} +1 -1
- package/dist/assets/min-7Gb0pNxh-DsojA8pm.js +1 -0
- package/dist/assets/{mindmap-definition-VGOIOE7T-CJZ2wTTa-DP1XV6kP.js → mindmap-definition-VGOIOE7T-CJZ2wTTa-Cd46k2jT.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-C9OSknjr-BdkTw8nn.js → pieDiagram-ADFJNKIX-C9OSknjr-BGVcHmss.js} +2 -2
- package/dist/assets/{quadrantDiagram-AYHSOK5B-CW8yuAqv-BcCv0sYD.js → quadrantDiagram-AYHSOK5B-CW8yuAqv-CrCYjmJT.js} +3 -3
- package/dist/assets/{requirementDiagram-UZGBJVZJ-nGPhruO1-CZD7Xw4s.js → requirementDiagram-UZGBJVZJ-nGPhruO1-BzOGHXGi.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-CmL90u-m-BicoH15o.js → sankeyDiagram-TZEHDZUN-CmL90u-m-BWp9STLO.js} +3 -3
- package/dist/assets/{sequenceDiagram-WL72ISMW-B02VRcnM-CvY3TSCC.js → sequenceDiagram-WL72ISMW-B02VRcnM-DB4Adljk.js} +7 -7
- package/dist/assets/{stateDiagram-FKZM4ZOC-DjoyLUdz-Cy3GdNKr.js → stateDiagram-FKZM4ZOC-DjoyLUdz-pDyQ50aU.js} +1 -1
- package/dist/assets/{stateDiagram-v2-4FDKWEC3-Bq76BTB7-BTj88h18.js → stateDiagram-v2-4FDKWEC3-Bq76BTB7-C3j4gDpN.js} +1 -1
- package/dist/assets/{timeline-definition-IT6M3QCI-CTn0Gm3T-BPnEK60y.js → timeline-definition-IT6M3QCI-CTn0Gm3T-O1FhSixZ.js} +1 -1
- package/dist/assets/{treemap-KMMF4GRG-BjgLKKyi-Dpn6IoCt.js → treemap-KMMF4GRG-BjgLKKyi-DG8IQefJ.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-Cgg6Uija-B3NNTn5p.js → xychartDiagram-PRI3JC2R-Cgg6Uija-CPVch5-l.js} +4 -4
- package/dist/index.html +2 -2
- package/package.json +2 -2
- package/dist/assets/__vite-browser-external-BIHI7g3E.js +0 -1
- package/dist/assets/_baseUniq-BRKsqoH--BnZ8jILn.js +0 -1
- package/dist/assets/api-C90fNFdj.js +0 -2
- package/dist/assets/api-Dg2si9TY.js +0 -2
- package/dist/assets/channel-HKsfPa5q-i-PY3wcB.js +0 -1
- package/dist/assets/clone-DoPb9X13-DxnBl06F.js +0 -1
- package/dist/assets/index-BjgS88qB.css +0 -1
- package/dist/assets/infoDiagram-WHAUD3N6-is6Ho4-T-BLBpQ0kq.js +0 -2
- package/dist/assets/min-7Gb0pNxh-9FduVVTw.js +0 -1
package/bin/orbitchat.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Serves the chat-app as a standalone application with runtime configuration.
|
|
6
6
|
* Configuration can be provided via CLI arguments, config file, or environment variables.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* The server acts as a proxy to hide API keys from the client by mapping
|
|
9
|
+
* adapter names to actual API keys.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import express from 'express';
|
|
@@ -34,9 +34,11 @@ const DEFAULT_CONFIG = {
|
|
|
34
34
|
consoleDebug: false,
|
|
35
35
|
enableUploadButton: false,
|
|
36
36
|
enableAudioOutput: false,
|
|
37
|
+
enableAudioInput: false,
|
|
37
38
|
enableFeedbackButtons: false,
|
|
38
39
|
enableAutocomplete: false,
|
|
39
|
-
|
|
40
|
+
voiceSilenceTimeoutMs: 4000,
|
|
41
|
+
voiceRecognitionLanguage: '',
|
|
40
42
|
outOfServiceMessage: null,
|
|
41
43
|
maxFilesPerConversation: 5,
|
|
42
44
|
maxFileSizeMB: 50,
|
|
@@ -46,6 +48,7 @@ const DEFAULT_CONFIG = {
|
|
|
46
48
|
maxMessagesPerThread: 1000,
|
|
47
49
|
maxTotalMessages: 10000,
|
|
48
50
|
maxMessageLength: 1000,
|
|
51
|
+
settingsAboutMsg: 'ORBIT Chat',
|
|
49
52
|
};
|
|
50
53
|
|
|
51
54
|
function parseAdaptersListFromEnv() {
|
|
@@ -124,6 +127,7 @@ function parseArgs() {
|
|
|
124
127
|
host: 'localhost',
|
|
125
128
|
open: false,
|
|
126
129
|
configFile: null,
|
|
130
|
+
apiOnly: false,
|
|
127
131
|
};
|
|
128
132
|
|
|
129
133
|
for (let i = 0; i < args.length; i++) {
|
|
@@ -167,14 +171,23 @@ function parseArgs() {
|
|
|
167
171
|
case '--enable-audio':
|
|
168
172
|
config.enableAudioOutput = true;
|
|
169
173
|
break;
|
|
174
|
+
case '--enable-audio-input':
|
|
175
|
+
config.enableAudioInput = true;
|
|
176
|
+
break;
|
|
170
177
|
case '--enable-feedback':
|
|
171
178
|
config.enableFeedbackButtons = true;
|
|
172
179
|
break;
|
|
173
180
|
case '--enable-autocomplete':
|
|
174
181
|
config.enableAutocomplete = true;
|
|
175
182
|
break;
|
|
183
|
+
case '--voice-silence-timeout-ms':
|
|
184
|
+
config.voiceSilenceTimeoutMs = parseInt(args[++i], 10);
|
|
185
|
+
break;
|
|
186
|
+
case '--voice-recognition-lang':
|
|
187
|
+
config.voiceRecognitionLanguage = args[++i];
|
|
188
|
+
break;
|
|
176
189
|
case '--enable-api-middleware':
|
|
177
|
-
|
|
190
|
+
// Ignored — middleware mode is now always enabled
|
|
178
191
|
break;
|
|
179
192
|
case '--out-of-service-message':
|
|
180
193
|
config.outOfServiceMessage = args[++i];
|
|
@@ -203,6 +216,9 @@ function parseArgs() {
|
|
|
203
216
|
case '--max-message-length':
|
|
204
217
|
config.maxMessageLength = parseInt(args[++i], 10);
|
|
205
218
|
break;
|
|
219
|
+
case '--settings-about-msg':
|
|
220
|
+
config.settingsAboutMsg = args[++i];
|
|
221
|
+
break;
|
|
206
222
|
case '--port':
|
|
207
223
|
serverConfig.port = parseInt(args[++i], 10);
|
|
208
224
|
break;
|
|
@@ -212,6 +228,12 @@ function parseArgs() {
|
|
|
212
228
|
case '--open':
|
|
213
229
|
serverConfig.open = true;
|
|
214
230
|
break;
|
|
231
|
+
case '--api-only':
|
|
232
|
+
serverConfig.apiOnly = true;
|
|
233
|
+
break;
|
|
234
|
+
case '--cors-origin':
|
|
235
|
+
serverConfig.corsOrigin = args[++i];
|
|
236
|
+
break;
|
|
215
237
|
case '--config':
|
|
216
238
|
serverConfig.configFile = args[++i];
|
|
217
239
|
break;
|
|
@@ -268,9 +290,11 @@ function loadConfigFromEnv() {
|
|
|
268
290
|
VITE_CONSOLE_DEBUG: 'consoleDebug',
|
|
269
291
|
VITE_ENABLE_UPLOAD: 'enableUploadButton',
|
|
270
292
|
VITE_ENABLE_AUDIO_OUTPUT: 'enableAudioOutput',
|
|
293
|
+
VITE_ENABLE_AUDIO_INPUT: 'enableAudioInput',
|
|
271
294
|
VITE_ENABLE_FEEDBACK: 'enableFeedbackButtons',
|
|
272
295
|
VITE_ENABLE_AUTOCOMPLETE: 'enableAutocomplete',
|
|
273
|
-
|
|
296
|
+
VITE_VOICE_SILENCE_TIMEOUT_MS: 'voiceSilenceTimeoutMs',
|
|
297
|
+
VITE_VOICE_RECOGNITION_LANG: 'voiceRecognitionLanguage',
|
|
274
298
|
VITE_OUT_OF_SERVICE_MESSAGE: 'outOfServiceMessage',
|
|
275
299
|
VITE_MAX_FILES_PER_CONVERSATION: 'maxFilesPerConversation',
|
|
276
300
|
VITE_MAX_FILE_SIZE_MB: 'maxFileSizeMB',
|
|
@@ -280,16 +304,21 @@ function loadConfigFromEnv() {
|
|
|
280
304
|
VITE_MAX_MESSAGES_PER_THREAD: 'maxMessagesPerThread',
|
|
281
305
|
VITE_MAX_TOTAL_MESSAGES: 'maxTotalMessages',
|
|
282
306
|
VITE_MAX_MESSAGE_LENGTH: 'maxMessageLength',
|
|
307
|
+
VITE_SETTINGS_ABOUT_MSG: 'settingsAboutMsg',
|
|
283
308
|
};
|
|
284
309
|
|
|
285
310
|
for (const [envKey, configKey] of Object.entries(envMap)) {
|
|
286
311
|
const value = process.env[envKey];
|
|
287
|
-
|
|
288
|
-
|
|
312
|
+
if (value !== undefined) {
|
|
313
|
+
if (configKey === 'useLocalApi' || configKey === 'consoleDebug' ||
|
|
289
314
|
configKey === 'enableUploadButton' || configKey === 'enableAudioOutput' ||
|
|
290
|
-
configKey === 'enableFeedbackButtons' || configKey === 'enableAutocomplete'
|
|
291
|
-
configKey === 'enableApiMiddleware') {
|
|
315
|
+
configKey === 'enableAudioInput' || configKey === 'enableFeedbackButtons' || configKey === 'enableAutocomplete') {
|
|
292
316
|
envConfig[configKey] = value === 'true';
|
|
317
|
+
} else if (configKey === 'voiceSilenceTimeoutMs') {
|
|
318
|
+
const parsed = parseInt(value, 10);
|
|
319
|
+
if (!isNaN(parsed)) {
|
|
320
|
+
envConfig[configKey] = parsed;
|
|
321
|
+
}
|
|
293
322
|
} else if (configKey.includes('max') && configKey !== 'maxFileSizeMB') {
|
|
294
323
|
const parsed = parseInt(value, 10);
|
|
295
324
|
if (!isNaN(parsed)) {
|
|
@@ -372,14 +401,34 @@ function injectConfig(html, config) {
|
|
|
372
401
|
}
|
|
373
402
|
|
|
374
403
|
/**
|
|
375
|
-
* Create Express server
|
|
404
|
+
* Create Express server
|
|
405
|
+
*
|
|
406
|
+
* @param {string|null} distPath - Path to built UI assets (null in api-only mode)
|
|
407
|
+
* @param {object} config - Merged application config
|
|
408
|
+
* @param {object} serverConfig - Server config (port, host, apiOnly, etc.)
|
|
376
409
|
*/
|
|
377
|
-
function createServer(distPath, config) {
|
|
410
|
+
function createServer(distPath, config, serverConfig = {}) {
|
|
378
411
|
const app = express();
|
|
379
|
-
const adapters =
|
|
412
|
+
const adapters = loadAdaptersConfig();
|
|
413
|
+
const apiOnly = serverConfig.apiOnly || false;
|
|
414
|
+
|
|
415
|
+
// In api-only mode, add CORS middleware so external UIs on other origins can call the API
|
|
416
|
+
if (apiOnly) {
|
|
417
|
+
const allowedOrigin = serverConfig.corsOrigin || '*';
|
|
418
|
+
app.use((req, res, next) => {
|
|
419
|
+
res.setHeader('Access-Control-Allow-Origin', allowedOrigin);
|
|
420
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
421
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, X-API-Key, X-Session-ID, X-Thread-ID, X-Adapter-Name, Accept');
|
|
422
|
+
res.setHeader('Access-Control-Expose-Headers', 'Content-Type');
|
|
423
|
+
if (req.method === 'OPTIONS') {
|
|
424
|
+
return res.sendStatus(204);
|
|
425
|
+
}
|
|
426
|
+
next();
|
|
427
|
+
});
|
|
428
|
+
}
|
|
380
429
|
|
|
381
|
-
// API endpoints
|
|
382
|
-
if (
|
|
430
|
+
// API proxy endpoints - MUST be before body parsers
|
|
431
|
+
if (adapters) {
|
|
383
432
|
// Pre-create proxy instances for each adapter to avoid memory leaks
|
|
384
433
|
// Creating proxies on every request adds event listeners that accumulate
|
|
385
434
|
const proxyInstances = {};
|
|
@@ -494,50 +543,53 @@ function createServer(distPath, config) {
|
|
|
494
543
|
app.use(express.json());
|
|
495
544
|
app.use(express.urlencoded({ extended: true }));
|
|
496
545
|
|
|
497
|
-
//
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
546
|
+
// --- UI serving (skipped in api-only mode) ---
|
|
547
|
+
if (!apiOnly && distPath) {
|
|
548
|
+
// IMPORTANT: Handle index.html BEFORE express.static to inject runtime config
|
|
549
|
+
// express.static would serve the file without config injection otherwise
|
|
550
|
+
app.get(['/', '/index.html'], (req, res) => {
|
|
551
|
+
try {
|
|
552
|
+
const indexPath = path.join(distPath, 'index.html');
|
|
553
|
+
let content = fs.readFileSync(indexPath, 'utf8');
|
|
554
|
+
content = injectConfig(content, config);
|
|
555
|
+
res.setHeader('Content-Type', 'text/html');
|
|
556
|
+
res.send(content);
|
|
557
|
+
} catch (error) {
|
|
558
|
+
console.error('Error serving index.html:', error);
|
|
559
|
+
res.status(500).send('Internal Server Error');
|
|
560
|
+
}
|
|
561
|
+
});
|
|
511
562
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
563
|
+
// Serve static files (JS, CSS, images, etc.) - index.html is handled above
|
|
564
|
+
app.use(express.static(distPath, {
|
|
565
|
+
index: false, // Don't serve index.html automatically - we handle it above
|
|
566
|
+
}));
|
|
516
567
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
568
|
+
// SPA fallback - serve index.html for all non-file routes (client-side routing)
|
|
569
|
+
app.get('/{*splat}', (req, res, next) => {
|
|
570
|
+
// Skip API routes
|
|
571
|
+
if (req.path.startsWith('/api/')) {
|
|
572
|
+
return next();
|
|
573
|
+
}
|
|
523
574
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
575
|
+
// Skip requests for files with extensions (let them 404)
|
|
576
|
+
if (path.extname(req.path)) {
|
|
577
|
+
return res.status(404).send('Not Found');
|
|
578
|
+
}
|
|
528
579
|
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
580
|
+
// Serve index.html for SPA routes
|
|
581
|
+
try {
|
|
582
|
+
const indexPath = path.join(distPath, 'index.html');
|
|
583
|
+
let content = fs.readFileSync(indexPath, 'utf8');
|
|
584
|
+
content = injectConfig(content, config);
|
|
585
|
+
res.setHeader('Content-Type', 'text/html');
|
|
586
|
+
res.send(content);
|
|
587
|
+
} catch (error) {
|
|
588
|
+
console.error('Error serving index.html:', error);
|
|
589
|
+
res.status(500).send('Internal Server Error');
|
|
590
|
+
}
|
|
591
|
+
});
|
|
592
|
+
}
|
|
541
593
|
|
|
542
594
|
return app;
|
|
543
595
|
}
|
|
@@ -632,10 +684,13 @@ Options:
|
|
|
632
684
|
--local-api-path PATH Path to local API
|
|
633
685
|
--console-debug Enable console debug (default: false)
|
|
634
686
|
--enable-upload Enable upload button (default: false)
|
|
635
|
-
--enable-audio Enable audio button (default: false)
|
|
687
|
+
--enable-audio Enable audio output button (default: false)
|
|
688
|
+
--enable-audio-input Enable microphone input button (default: false)
|
|
636
689
|
--enable-feedback Enable feedback buttons (default: false)
|
|
637
690
|
--enable-autocomplete Enable autocomplete suggestions (default: false)
|
|
638
|
-
--
|
|
691
|
+
--voice-silence-timeout-ms N Auto-stop voice capture after N ms of silence (default: 4000)
|
|
692
|
+
--voice-recognition-lang LANG BCP-47 language code for speech recognition (default: browser locale)
|
|
693
|
+
--enable-api-middleware Ignored (middleware mode is always enabled)
|
|
639
694
|
--out-of-service-message TEXT Show maintenance screen blocking access
|
|
640
695
|
--max-files-per-conversation N Max files per conversation (default: 5)
|
|
641
696
|
--max-file-size-mb N Max file size in MB (default: 50)
|
|
@@ -645,9 +700,12 @@ Options:
|
|
|
645
700
|
--max-messages-per-thread N Max messages per thread (default: 1000, 0 = unlimited)
|
|
646
701
|
--max-total-messages N Max total messages (default: 10000, 0 = unlimited)
|
|
647
702
|
--max-message-length N Max message length (default: 1000)
|
|
703
|
+
--settings-about-msg TEXT About message in settings page (default: ORBIT Chat)
|
|
648
704
|
--port PORT Server port (default: 5173)
|
|
649
705
|
--host HOST Server host (default: localhost)
|
|
650
706
|
--open Open browser automatically
|
|
707
|
+
--api-only Run API proxy only (no UI serving, no build required)
|
|
708
|
+
--cors-origin ORIGIN Allowed CORS origin in api-only mode (default: *)
|
|
651
709
|
--config PATH Path to config file (default: ~/.orbit-chat-app/config.json)
|
|
652
710
|
--help, -h Show this help message
|
|
653
711
|
--version, -v Show version number
|
|
@@ -665,9 +723,11 @@ Environment Variables for Middleware Mode:
|
|
|
665
723
|
Examples:
|
|
666
724
|
orbitchat --api-url http://localhost:3000 --port 8080
|
|
667
725
|
orbitchat --api-key my-key --open
|
|
668
|
-
orbitchat --enable-audio --enable-upload --console-debug
|
|
726
|
+
orbitchat --enable-audio --enable-audio-input --enable-upload --console-debug
|
|
669
727
|
orbitchat --config /path/to/config.json
|
|
670
|
-
ORBIT_ADAPTERS='[{"name":"Chat","apiKey":"mykey","apiUrl":"https://api.example.com"}]' orbitchat
|
|
728
|
+
ORBIT_ADAPTERS='[{"name":"Chat","apiKey":"mykey","apiUrl":"https://api.example.com"}]' orbitchat
|
|
729
|
+
orbitchat --api-only --port 5174
|
|
730
|
+
orbitchat --api-only --cors-origin http://localhost:3001
|
|
671
731
|
`);
|
|
672
732
|
|
|
673
733
|
}
|
|
@@ -691,45 +751,48 @@ function main() {
|
|
|
691
751
|
const { config: cliConfig, serverConfig } = parseArgs();
|
|
692
752
|
const config = mergeConfig(cliConfig, serverConfig);
|
|
693
753
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
console.debug(`ℹ️ Using '${fallbackAdapter}' as the default adapter (first entry from VITE_ADAPTERS).`);
|
|
701
|
-
}
|
|
754
|
+
const trimmedDefaultKey = (config.defaultKey || '').trim();
|
|
755
|
+
if (!trimmedDefaultKey || trimmedDefaultKey === DEFAULT_CONFIG.defaultKey) {
|
|
756
|
+
const fallbackAdapter = getDefaultAdapterFromEnv();
|
|
757
|
+
if (fallbackAdapter) {
|
|
758
|
+
config.defaultKey = fallbackAdapter;
|
|
759
|
+
console.debug(`ℹ️ Using '${fallbackAdapter}' as the default adapter (first entry from VITE_ADAPTERS).`);
|
|
702
760
|
}
|
|
703
761
|
}
|
|
704
762
|
|
|
705
|
-
// Find dist directory
|
|
706
|
-
// Use __dirname which we defined at the top of the file
|
|
763
|
+
// Find dist directory (not required in api-only mode)
|
|
707
764
|
const distPath = path.join(__dirname, '..', 'dist');
|
|
708
|
-
|
|
709
|
-
if (!fs.existsSync(distPath)) {
|
|
765
|
+
|
|
766
|
+
if (!serverConfig.apiOnly && !fs.existsSync(distPath)) {
|
|
710
767
|
console.error('Error: dist directory not found. Please run "npm run build" first.');
|
|
711
768
|
process.exit(1);
|
|
712
769
|
}
|
|
713
770
|
|
|
714
771
|
// Create and start server
|
|
715
|
-
const app = createServer(
|
|
772
|
+
const app = createServer(
|
|
773
|
+
serverConfig.apiOnly ? null : distPath,
|
|
774
|
+
config,
|
|
775
|
+
serverConfig
|
|
776
|
+
);
|
|
716
777
|
|
|
717
778
|
app.listen(serverConfig.port, serverConfig.host, () => {
|
|
718
779
|
const url = `http://${serverConfig.host}:${serverConfig.port}`;
|
|
719
|
-
|
|
780
|
+
if (serverConfig.apiOnly) {
|
|
781
|
+
console.debug(`\n🚀 ORBIT API Proxy is running at ${url}\n`);
|
|
782
|
+
} else {
|
|
783
|
+
console.debug(`\n🚀 ORBIT Chat App is running at ${url}\n`);
|
|
784
|
+
}
|
|
720
785
|
console.debug('Configuration:');
|
|
786
|
+
console.debug(` Mode: ${serverConfig.apiOnly ? 'API-only (no UI)' : 'Full (API + UI)'}`);
|
|
721
787
|
console.debug(` API URL: ${config.apiUrl}`);
|
|
722
788
|
console.debug(` Default Key/Adapter: ${config.defaultKey || '(not set)'}`);
|
|
723
789
|
console.debug(` Port: ${serverConfig.port}`);
|
|
724
790
|
console.debug(` Host: ${serverConfig.host}`);
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
} else {
|
|
731
|
-
console.debug(` Warning: No adapters configured. Set ORBIT_ADAPTERS or VITE_ADAPTERS environment variable.`);
|
|
732
|
-
}
|
|
791
|
+
const startupAdapters = loadAdaptersConfig();
|
|
792
|
+
if (startupAdapters) {
|
|
793
|
+
console.debug(` Available Adapters: ${Object.keys(startupAdapters).join(', ')}`);
|
|
794
|
+
} else {
|
|
795
|
+
console.debug(` Warning: No adapters configured. Set ORBIT_ADAPTERS or VITE_ADAPTERS environment variable.`);
|
|
733
796
|
}
|
|
734
797
|
console.debug('');
|
|
735
798
|
|
|
@@ -750,11 +813,12 @@ function main() {
|
|
|
750
813
|
const isMainModule = process.argv[1] && (
|
|
751
814
|
import.meta.url === `file://${process.argv[1]}` ||
|
|
752
815
|
import.meta.url.endsWith(process.argv[1].replace(/\\/g, '/')) ||
|
|
753
|
-
process.argv[1]
|
|
816
|
+
path.basename(process.argv[1]) === 'orbitchat' ||
|
|
817
|
+
path.basename(process.argv[1]) === 'orbitchat.js'
|
|
754
818
|
);
|
|
755
819
|
|
|
756
820
|
if (isMainModule) {
|
|
757
821
|
main();
|
|
758
822
|
}
|
|
759
823
|
|
|
760
|
-
export { main, parseArgs, mergeConfig };
|
|
824
|
+
export { main, parseArgs, mergeConfig, createServer, loadAdaptersConfig };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{aS as Q,bH as cr,bI as ir,aK as h,aL as U,bJ as L,bK as lr,aO as sr,by as k,br as P,bL as vr,bM as br,aP as hr,bN as V,bn as N,bo as T,bO as gr,bw as _,aG as pr,bP as x,bQ as yr,aT as dr}from"./index-nqhgVFEP.js";var jr="[object Symbol]";function B(r){return typeof r=="symbol"||k(r)&&vr(r)==jr}function _r(r,t){for(var e=-1,n=r==null?0:r.length,a=Array(n);++e<n;)a[e]=t(r[e],e,r);return a}var E=_?_.prototype:void 0,G=E?E.toString:void 0;function W(r){if(typeof r=="string")return r;if(h(r))return _r(r,W)+"";if(B(r))return G?G.call(r):"";var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function mr(){}function wr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n&&t(r[e],e,r)!==!1;);return r}function Or(r,t,e,n){for(var a=r.length,u=e+-1;++u<a;)if(t(r[u],u,r))return u;return-1}function Sr(r){return r!==r}function Pr(r,t,e){for(var n=e-1,a=r.length;++n<a;)if(r[n]===t)return n;return-1}function Ar(r,t,e){return t===t?Pr(r,t,e):Or(r,Sr,e)}function Lr(r,t){var e=r==null?0:r.length;return!!e&&Ar(r,t,0)>-1}function C(r){return Q(r)?cr(r):ir(r)}var $r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kr=/^\w*$/;function z(r,t){if(h(r))return!1;var e=typeof r;return e=="number"||e=="symbol"||e=="boolean"||r==null||B(r)?!0:kr.test(r)||!$r.test(r)||t!=null&&r in Object(t)}var Br=500;function Cr(r){var t=yr(r,function(n){return e.size===Br&&e.clear(),n}),e=t.cache;return t}var zr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Dr=/\\(\\)?/g,Fr=Cr(function(r){var t=[];return r.charCodeAt(0)===46&&t.push(""),r.replace(zr,function(e,n,a,u){t.push(a?u.replace(Dr,"$1"):n||e)}),t});function Kr(r){return r==null?"":W(r)}function X(r,t){return h(r)?r:z(r,t)?[r]:Fr(Kr(r))}function A(r){if(typeof r=="string"||B(r))return r;var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function rr(r,t){t=X(t,r);for(var e=0,n=t.length;r!=null&&e<n;)r=r[A(t[e++])];return e&&e==n?r:void 0}function Mr(r,t,e){var n=r==null?void 0:rr(r,t);return n===void 0?e:n}function tr(r,t){for(var e=-1,n=t.length,a=r.length;++e<n;)r[a+e]=t[e];return r}var I=_?_.isConcatSpreadable:void 0;function Nr(r){return h(r)||V(r)||!!(I&&r&&r[I])}function Gt(r,t,e,n,a){var u=-1,o=r.length;for(e||(e=Nr),a||(a=[]);++u<o;){var f=r[u];e(f)?tr(a,f):n||(a[a.length]=f)}return a}function Tr(r,t,e,n){var a=-1,u=r==null?0:r.length;for(n&&u&&(e=r[++a]);++a<u;)e=t(e,r[a],a,r);return e}function er(r,t){for(var e=-1,n=r==null?0:r.length,a=0,u=[];++e<n;){var o=r[e];t(o,e,r)&&(u[a++]=o)}return u}function xr(){return[]}var Er=Object.prototype,Gr=Er.propertyIsEnumerable,J=Object.getOwnPropertySymbols,Ir=J?function(r){return r==null?[]:(r=Object(r),er(J(r),function(t){return Gr.call(r,t)}))}:xr;function Jr(r,t,e){var n=t(r);return h(r)?n:tr(n,e(r))}function q(r){return Jr(r,C,Ir)}var qr="__lodash_hash_undefined__";function Rr(r){return this.__data__.set(r,qr),this}function Yr(r){return this.__data__.has(r)}function m(r){var t=-1,e=r==null?0:r.length;for(this.__data__=new lr;++t<e;)this.add(r[t])}m.prototype.add=m.prototype.push=Rr;m.prototype.has=Yr;function Zr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n;)if(t(r[e],e,r))return!0;return!1}function nr(r,t){return r.has(t)}var Hr=1,Qr=2;function ur(r,t,e,n,a,u){var o=e&Hr,f=r.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var v=u.get(r),l=u.get(t);if(v&&l)return v==t&&l==r;var i=-1,s=!0,p=e&Qr?new m:void 0;for(u.set(r,t),u.set(t,r);++i<f;){var b=r[i],g=t[i];if(n)var y=o?n(g,b,i,t,r,u):n(b,g,i,r,t,u);if(y!==void 0){if(y)continue;s=!1;break}if(p){if(!Zr(t,function(d,j){if(!nr(p,j)&&(b===d||a(b,d,e,n,u)))return p.push(j)})){s=!1;break}}else if(!(b===g||a(b,g,e,n,u))){s=!1;break}}return u.delete(r),u.delete(t),s}function Ur(r){var t=-1,e=Array(r.size);return r.forEach(function(n,a){e[++t]=[a,n]}),e}function D(r){var t=-1,e=Array(r.size);return r.forEach(function(n){e[++t]=n}),e}var Vr=1,Wr=2,Xr="[object Boolean]",rt="[object Date]",tt="[object Error]",et="[object Map]",nt="[object Number]",ut="[object RegExp]",at="[object Set]",ot="[object String]",ft="[object Symbol]",ct="[object ArrayBuffer]",it="[object DataView]",R=_?_.prototype:void 0,$=R?R.valueOf:void 0;function lt(r,t,e,n,a,u,o){switch(e){case it:if(r.byteLength!=t.byteLength||r.byteOffset!=t.byteOffset)return!1;r=r.buffer,t=t.buffer;case ct:return!(r.byteLength!=t.byteLength||!u(new x(r),new x(t)));case Xr:case rt:case nt:return pr(+r,+t);case tt:return r.name==t.name&&r.message==t.message;case ut:case ot:return r==t+"";case et:var f=Ur;case at:var c=n&Vr;if(f||(f=D),r.size!=t.size&&!c)return!1;var v=o.get(r);if(v)return v==t;n|=Wr,o.set(r,t);var l=ur(f(r),f(t),n,a,u,o);return o.delete(r),l;case ft:if($)return $.call(r)==$.call(t)}return!1}var st=1,vt=Object.prototype,bt=vt.hasOwnProperty;function ht(r,t,e,n,a,u){var o=e&st,f=q(r),c=f.length,v=q(t),l=v.length;if(c!=l&&!o)return!1;for(var i=c;i--;){var s=f[i];if(!(o?s in t:bt.call(t,s)))return!1}var p=u.get(r),b=u.get(t);if(p&&b)return p==t&&b==r;var g=!0;u.set(r,t),u.set(t,r);for(var y=o;++i<c;){s=f[i];var d=r[s],j=t[s];if(n)var M=o?n(j,d,s,t,r,u):n(d,j,s,r,t,u);if(!(M===void 0?d===j||a(d,j,e,n,u):M)){g=!1;break}y||(y=s=="constructor")}if(g&&!y){var w=r.constructor,O=t.constructor;w!=O&&"constructor"in r&&"constructor"in t&&!(typeof w=="function"&&w instanceof w&&typeof O=="function"&&O instanceof O)&&(g=!1)}return u.delete(r),u.delete(t),g}var gt=1,Y="[object Arguments]",Z="[object Array]",S="[object Object]",pt=Object.prototype,H=pt.hasOwnProperty;function yt(r,t,e,n,a,u){var o=h(r),f=h(t),c=o?Z:N(r),v=f?Z:N(t);c=c==Y?S:c,v=v==Y?S:v;var l=c==S,i=v==S,s=c==v;if(s&&T(r)){if(!T(t))return!1;o=!0,l=!1}if(s&&!l)return u||(u=new P),o||gr(r)?ur(r,t,e,n,a,u):lt(r,t,c,e,n,a,u);if(!(e>)){var p=l&&H.call(r,"__wrapped__"),b=i&&H.call(t,"__wrapped__");if(p||b){var g=p?r.value():r,y=b?t.value():t;return u||(u=new P),a(g,y,e,n,u)}}return s?(u||(u=new P),ht(r,t,e,n,a,u)):!1}function F(r,t,e,n,a){return r===t?!0:r==null||t==null||!k(r)&&!k(t)?r!==r&&t!==t:yt(r,t,e,n,F,a)}var dt=1,jt=2;function _t(r,t,e,n){var a=e.length,u=a;if(r==null)return!u;for(r=Object(r);a--;){var o=e[a];if(o[2]?o[1]!==r[o[0]]:!(o[0]in r))return!1}for(;++a<u;){o=e[a];var f=o[0],c=r[f],v=o[1];if(o[2]){if(c===void 0&&!(f in r))return!1}else{var l=new P,i;if(!(i===void 0?F(v,c,dt|jt,n,l):i))return!1}}return!0}function ar(r){return r===r&&!sr(r)}function mt(r){for(var t=C(r),e=t.length;e--;){var n=t[e],a=r[n];t[e]=[n,a,ar(a)]}return t}function or(r,t){return function(e){return e==null?!1:e[r]===t&&(t!==void 0||r in Object(e))}}function wt(r){var t=mt(r);return t.length==1&&t[0][2]?or(t[0][0],t[0][1]):function(e){return e===r||_t(e,r,t)}}function Ot(r,t){return r!=null&&t in Object(r)}function St(r,t,e){t=X(t,r);for(var n=-1,a=t.length,u=!1;++n<a;){var o=A(t[n]);if(!(u=r!=null&&e(r,o)))break;r=r[o]}return u||++n!=a?u:(a=r==null?0:r.length,!!a&&br(a)&&hr(o,a)&&(h(r)||V(r)))}function Pt(r,t){return r!=null&&St(r,t,Ot)}var At=1,Lt=2;function $t(r,t){return z(r)&&ar(t)?or(A(r),t):function(e){var n=Mr(e,r);return n===void 0&&n===t?Pt(e,r):F(t,n,At|Lt)}}function kt(r){return function(t){return t==null?void 0:t[r]}}function Bt(r){return function(t){return rr(t,r)}}function Ct(r){return z(r)?kt(A(r)):Bt(r)}function fr(r){return typeof r=="function"?r:r==null?U:typeof r=="object"?h(r)?$t(r[0],r[1]):wt(r):Ct(r)}function zt(r,t){return r&&dr(r,t,C)}function Dt(r,t){return function(e,n){if(e==null)return e;if(!Q(e))return r(e,n);for(var a=e.length,u=-1,o=Object(e);++u<a&&n(o[u],u,o)!==!1;);return e}}var K=Dt(zt);function Ft(r){return typeof r=="function"?r:U}function It(r,t){var e=h(r)?wr:K;return e(r,Ft(t))}function Kt(r,t){var e=[];return K(r,function(n,a,u){t(n,a,u)&&e.push(n)}),e}function Jt(r,t){var e=h(r)?er:Kt;return e(r,fr(t))}function Mt(r,t,e,n,a){return a(r,function(u,o,f){e=n?(n=!1,u):t(e,u,o,f)}),e}function qt(r,t,e){var n=h(r)?Tr:Mt,a=arguments.length<3;return n(r,fr(t),e,a,K)}var Nt=1/0,Tt=L&&1/D(new L([,-0]))[1]==Nt?function(r){return new L(r)}:mr,xt=200;function Rt(r,t,e){var n=-1,a=Lr,u=r.length,o=!0,f=[],c=f;if(u>=xt){var v=t?null:Tt(r);if(v)return D(v);o=!1,a=nr,c=new m}else c=t?[]:f;r:for(;++n<u;){var l=r[n],i=t?t(l):l;if(l=l!==0?l:0,o&&i===i){for(var s=c.length;s--;)if(c[s]===i)continue r;t&&c.push(i),f.push(l)}else a(c,i,e)||(c!==f&&c.push(i),f.push(l))}return f}export{zt as $,Gt as B,wr as E,Ft as F,Kr as G,A as I,Rt as J,xr as K,C as M,St as T,qt as Y,Jt as Z,fr as a,Pt as b,Or as c,Ir as d,q as e,Jr as f,K as g,X as j,rr as n,It as q,tr as r,_r as v,B as x};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a$ as sn,b0 as an,b1 as l,ar as on,b2 as j,b3 as F,b4 as E,b5 as un,b6 as cn,b7 as Y,b8 as e,ap as G,b9 as en,ba as rn,bb as yn}from"./index-nqhgVFEP.js";function fn(i){return i.innerRadius}function ln(i){return i.outerRadius}function gn(i){return i.startAngle}function pn(i){return i.endAngle}function xn(i){return i&&i.padAngle}function mn(i,d,C,W,v,b,H,a){var I=C-i,r=W-d,n=H-v,p=a-b,u=p*I-n*r;if(!(u*u<l))return u=(n*(d-b)-p*(i-v))/u,[i+u*I,d+u*r]}function M(i,d,C,W,v,b,H){var a=i-C,I=d-W,r=(H?b:-b)/Y(a*a+I*I),n=r*I,p=-r*a,u=i+n,s=d+p,y=C+n,f=W+p,P=(u+y)/2,o=(s+f)/2,x=y-u,g=f-s,O=x*x+g*g,T=v-b,A=u*f-y*s,L=(g<0?-1:1)*Y(en(0,T*T*O-A*A)),q=(A*g-x*L)/O,D=(-A*x-g*L)/O,R=(A*g+x*L)/O,m=(-A*x+g*L)/O,h=q-P,t=D-o,c=R-P,_=m-o;return h*h+t*t>c*c+_*_&&(q=R,D=m),{cx:q,cy:D,x01:-n,y01:-p,x11:q*(v/T-1),y11:D*(v/T-1)}}function dn(){var i=fn,d=ln,C=G(0),W=null,v=gn,b=pn,H=xn,a=null,I=sn(r);function r(){var n,p,u=+i.apply(this,arguments),s=+d.apply(this,arguments),y=v.apply(this,arguments)-an,f=b.apply(this,arguments)-an,P=un(f-y),o=f>y;if(a||(a=n=I()),s<u&&(p=s,s=u,u=p),!(s>l))a.moveTo(0,0);else if(P>on-l)a.moveTo(s*j(y),s*F(y)),a.arc(0,0,s,y,f,!o),u>l&&(a.moveTo(u*j(f),u*F(f)),a.arc(0,0,u,f,y,o));else{var x=y,g=f,O=y,T=f,A=P,L=P,q=H.apply(this,arguments)/2,D=q>l&&(W?+W.apply(this,arguments):Y(u*u+s*s)),R=E(un(s-u)/2,+C.apply(this,arguments)),m=R,h=R,t,c;if(D>l){var _=rn(D/u*F(q)),$=rn(D/s*F(q));(A-=_*2)>l?(_*=o?1:-1,O+=_,T-=_):(A=0,O=T=(y+f)/2),(L-=$*2)>l?($*=o?1:-1,x+=$,g-=$):(L=0,x=g=(y+f)/2)}var z=s*j(x),S=s*F(x),k=u*j(T),N=u*F(T);if(R>l){var X=s*j(g),Z=s*F(g),Q=u*j(O),U=u*F(O),B;if(P<cn)if(B=mn(z,S,Q,U,X,Z,k,N)){var V=z-B[0],w=S-B[1],J=X-B[0],K=Z-B[1],nn=1/F(yn((V*J+w*K)/(Y(V*V+w*w)*Y(J*J+K*K)))/2),tn=Y(B[0]*B[0]+B[1]*B[1]);m=E(R,(u-tn)/(nn-1)),h=E(R,(s-tn)/(nn+1))}else m=h=0}L>l?h>l?(t=M(Q,U,z,S,s,h,o),c=M(X,Z,k,N,s,h,o),a.moveTo(t.cx+t.x01,t.cy+t.y01),h<R?a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,s,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),!o),a.arc(c.cx,c.cy,h,e(c.y11,c.x11),e(c.y01,c.x01),!o))):(a.moveTo(z,S),a.arc(0,0,s,x,g,!o)):a.moveTo(z,S),!(u>l)||!(A>l)?a.lineTo(k,N):m>l?(t=M(k,N,X,Z,u,-m,o),c=M(z,S,Q,U,u,-m,o),a.lineTo(t.cx+t.x01,t.cy+t.y01),m<R?a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,u,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),o),a.arc(c.cx,c.cy,m,e(c.y11,c.x11),e(c.y01,c.x01),!o))):a.arc(0,0,u,T,O,o)}if(a.closePath(),n)return a=null,n+""||null}return r.centroid=function(){var n=(+i.apply(this,arguments)+ +d.apply(this,arguments))/2,p=(+v.apply(this,arguments)+ +b.apply(this,arguments))/2-cn/2;return[j(p)*n,F(p)*n]},r.innerRadius=function(n){return arguments.length?(i=typeof n=="function"?n:G(+n),r):i},r.outerRadius=function(n){return arguments.length?(d=typeof n=="function"?n:G(+n),r):d},r.cornerRadius=function(n){return arguments.length?(C=typeof n=="function"?n:G(+n),r):C},r.padRadius=function(n){return arguments.length?(W=n==null?null:typeof n=="function"?n:G(+n),r):W},r.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:G(+n),r):v},r.endAngle=function(n){return arguments.length?(b=typeof n=="function"?n:G(+n),r):b},r.padAngle=function(n){return arguments.length?(H=typeof n=="function"?n:G(+n),r):H},r.context=function(n){return arguments.length?(a=n??null,r):a},r}export{dn as h};
|