crewx 0.8.1 → 0.8.2-rc.1
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 +268 -268
- package/bin/cli-commands.js +34 -0
- package/bin/crewx-lib.js +213 -108
- package/bin/crewx-ui.js +83 -83
- package/bin/crewx.js +219 -147
- package/bin/launcher-flags.js +29 -0
- package/bin/package.json +1 -1
- package/dist/assets/{MarketPage-Dwsg6K-B.js → MarketPage-njRHlSSN.js} +1 -1
- package/dist/assets/{PromptTab-DVKc7hJY.js → PromptTab-CNyClpEe.js} +1 -1
- package/dist/assets/{_baseUniq-wjlVo2E6.js → _baseUniq-CGNNUfN7.js} +1 -1
- package/dist/assets/{arc-BfPgRtzW.js → arc-BEN-1A69.js} +1 -1
- package/dist/assets/{architectureDiagram-Q4EWVU46-ewcueFAG.js → architectureDiagram-Q4EWVU46-fAPvGzXk.js} +1 -1
- package/dist/assets/{blockDiagram-DXYQGD6D-TxlbbvKn.js → blockDiagram-DXYQGD6D-BWrb7uua.js} +1 -1
- package/dist/assets/{c4Diagram-AHTNJAMY-C1lT_bl_.js → c4Diagram-AHTNJAMY-CbnLz81q.js} +1 -1
- package/dist/assets/channel-uEnl63Ym.js +1 -0
- package/dist/assets/chatgpt-logo-dark.svg +15 -15
- package/dist/assets/chatgpt-logo.svg +15 -15
- package/dist/assets/{chunk-4BX2VUAB-C41j2mCL.js → chunk-4BX2VUAB-BopMVv1Q.js} +1 -1
- package/dist/assets/{chunk-4TB4RGXK-HNNsUbz0.js → chunk-4TB4RGXK-Axjc-DMR.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-qtCgO0r2.js → chunk-55IACEB6-BVzu25a2.js} +1 -1
- package/dist/assets/{chunk-EDXVE4YY-BSnDYtsd.js → chunk-EDXVE4YY-Csh0IKkY.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-DyHRLQqX.js → chunk-FMBD7UC4-D3yW6Ykv.js} +1 -1
- package/dist/assets/{chunk-OYMX7WX6-CCjfi6WS.js → chunk-OYMX7WX6-CDzLbKmY.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-COLty8kd.js → chunk-QZHKN3VN-CqYP7txP.js} +1 -1
- package/dist/assets/{chunk-YZCP3GAM-CHUUnGeN.js → chunk-YZCP3GAM-CIz2ApJG.js} +1 -1
- package/dist/assets/classDiagram-6PBFFD2Q-CU98S3yn.js +1 -0
- package/dist/assets/classDiagram-v2-HSJHXN6E-CU98S3yn.js +1 -0
- package/dist/assets/clone-D3Eqsbb8.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-CSip-V2g.js → cose-bilkent-S5V4N54A-DgVG9_nb.js} +1 -1
- package/dist/assets/{dagre-KV5264BT-DkdpnWhv.js → dagre-KV5264BT-DnNIMI1A.js} +1 -1
- package/dist/assets/{diagram-5BDNPKRD-PH4qc6PV.js → diagram-5BDNPKRD-asGr2q6a.js} +1 -1
- package/dist/assets/{diagram-G4DWMVQ6-Cg5xZcjx.js → diagram-G4DWMVQ6-hwyZkwNx.js} +1 -1
- package/dist/assets/{diagram-MMDJMWI5-soKmeTCW.js → diagram-MMDJMWI5-BJbIxezj.js} +1 -1
- package/dist/assets/{diagram-TYMM5635-Daq5Mihu.js → diagram-TYMM5635-JB2YJBVu.js} +1 -1
- package/dist/assets/{erDiagram-SMLLAGMA-kr2OtY0Y.js → erDiagram-SMLLAGMA-i1KkUgG6.js} +1 -1
- package/dist/assets/{flowDiagram-DWJPFMVM-DQZCb8gm.js → flowDiagram-DWJPFMVM-62cwXjLB.js} +1 -1
- package/dist/assets/{ganttDiagram-T4ZO3ILL-BHkn485T.js → ganttDiagram-T4ZO3ILL-BDhku_zz.js} +1 -1
- package/dist/assets/{gitGraphDiagram-UUTBAWPF-FaCyYFmC.js → gitGraphDiagram-UUTBAWPF-DkHe0Kwk.js} +1 -1
- package/dist/assets/{graph-BVJlrP6V.js → graph-BnMMHCuQ.js} +1 -1
- package/dist/assets/{infoDiagram-42DDH7IO-DJOWkKdM.js → infoDiagram-42DDH7IO-V7zg8GAV.js} +1 -1
- package/dist/assets/{ishikawaDiagram-UXIWVN3A-VfpvNaIf.js → ishikawaDiagram-UXIWVN3A-CTtEO2wl.js} +1 -1
- package/dist/assets/{journeyDiagram-VCZTEJTY-CPzsak-v.js → journeyDiagram-VCZTEJTY-NxQMTN2m.js} +1 -1
- package/dist/assets/{kanban-definition-6JOO6SKY-DFqLDBU0.js → kanban-definition-6JOO6SKY-BHBrmGg3.js} +1 -1
- package/dist/assets/{layout-CCSbNPHm.js → layout-DutU1eng.js} +1 -1
- package/dist/assets/{linear-C4T7PCKE.js → linear-Czvrvocq.js} +1 -1
- package/dist/assets/{main-CELBpK6r.js → main-D0PuDE6-.js} +230 -226
- package/dist/assets/{min-CGQNEYGh.js → min-CI38XtLs.js} +1 -1
- package/dist/assets/{mindmap-definition-QFDTVHPH-AuU1EqwS.js → mindmap-definition-QFDTVHPH-CbFeHoxp.js} +1 -1
- package/dist/assets/{pieDiagram-DEJITSTG-CopkCZwp.js → pieDiagram-DEJITSTG-MV4uB5yA.js} +1 -1
- package/dist/assets/{quadrantDiagram-34T5L4WZ-lMKrSv_t.js → quadrantDiagram-34T5L4WZ-D0a8e2mx.js} +1 -1
- package/dist/assets/{requirementDiagram-MS252O5E-dWUpHOFb.js → requirementDiagram-MS252O5E-CeTlv4na.js} +1 -1
- package/dist/assets/{sankeyDiagram-XADWPNL6-C8UQx9Bb.js → sankeyDiagram-XADWPNL6-D1E3xq9q.js} +1 -1
- package/dist/assets/{sequenceDiagram-FGHM5R23-CUVNIItJ.js → sequenceDiagram-FGHM5R23-BO1RXtYs.js} +1 -1
- package/dist/assets/{stateDiagram-FHFEXIEX-Ct0GamGl.js → stateDiagram-FHFEXIEX-AhFKkuPE.js} +1 -1
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-gv2g1MYi.js +1 -0
- package/dist/assets/{timeline-definition-GMOUNBTQ-ul8Po7f7.js → timeline-definition-GMOUNBTQ-BMVxUhID.js} +1 -1
- package/dist/assets/{vennDiagram-DHZGUBPP-B4AOWQnP.js → vennDiagram-DHZGUBPP-YFiJZns6.js} +1 -1
- package/dist/assets/{wardley-RL74JXVD-Dr7Wp3AJ.js → wardley-RL74JXVD-JlCdJekg.js} +1 -1
- package/dist/assets/{wardleyDiagram-NUSXRM2D-Ck70faXX.js → wardleyDiagram-NUSXRM2D-BLn2PZq9.js} +1 -1
- package/dist/assets/{xychartDiagram-5P7HB3ND-Bsy5-cNt.js → xychartDiagram-5P7HB3ND-DNOUK9or.js} +1 -1
- package/dist/index.html +12 -12
- package/dist-electron/main.js +153 -116
- package/dist-electron/overlay.js +102 -65
- package/dist-electron/package.json +1 -0
- package/dist-electron/preload.js +8 -8
- package/dist-server/bootstrap/crewx-server.js +19 -10
- package/dist-server/repository/box.repository.js +20 -20
- package/dist-server/repository/project.repository.js +13 -13
- package/dist-server/repository/request-log.repository.js +10 -10
- package/dist-server/repository/task.repository.js +72 -72
- package/dist-server/repository/thread.repository.js +57 -57
- package/package.json +6 -6
- package/packages/cli/dist/bootstrap/crewx-cli.js +12 -0
- package/packages/cli/dist/commands/agent.js +23 -23
- package/packages/cli/dist/commands/init.js +19 -19
- package/packages/cli/dist/commands/parse-common-flags.d.ts +19 -3
- package/packages/cli/dist/commands/parse-common-flags.js +46 -6
- package/packages/cli/dist/commands/registry.d.ts +13 -0
- package/packages/cli/dist/commands/registry.js +29 -0
- package/packages/cli/dist/commands/task-db.js +7 -7
- package/packages/cli/dist/examples/deny-secrets-plugin.d.ts +22 -0
- package/packages/cli/dist/examples/deny-secrets-plugin.js +40 -0
- package/packages/cli/dist/main.js +134 -68
- package/packages/cli/dist/plugins/examples/echo-hook.d.ts +24 -0
- package/packages/cli/dist/plugins/examples/echo-hook.js +60 -0
- package/packages/cli/dist/plugins/examples/verify-echo-hook.d.ts +8 -0
- package/packages/cli/dist/plugins/examples/verify-echo-hook.js +47 -0
- package/packages/cli/dist/plugins/sqlite-tracing.d.ts +11 -0
- package/packages/cli/dist/plugins/sqlite-tracing.js +19 -0
- package/packages/cli/dist/schema/tasks.d.ts +7 -0
- package/packages/cli/dist/schema/tasks.js +48 -0
- package/packages/cli/package.json +52 -52
- package/scripts/build-manual.mjs +266 -266
- package/scripts/emit-dist-server-package-json.mjs +7 -7
- package/scripts/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/scripts/postinstall.mjs +44 -44
- package/scripts/smoke-tarball.mjs +285 -285
- package/scripts/snapshot-msg-list.sh +52 -52
- package/server.js +167 -164
- package/dist/assets/channel-BP4PNMmz.js +0 -1
- package/dist/assets/classDiagram-6PBFFD2Q-Upr3UAcM.js +0 -1
- package/dist/assets/classDiagram-v2-HSJHXN6E-Upr3UAcM.js +0 -1
- package/dist/assets/clone-B8BP7ReZ.js +0 -1
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-CFBLQDEx.js +0 -1
- package/dist-server/domain/task/dto/project-usage.dto.js +0 -38
- package/dist-server/domain/thread/dto/send-message.dto.js +0 -10
package/bin/crewx.js
CHANGED
|
@@ -1,147 +1,219 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* crewx launcher
|
|
4
|
-
*
|
|
5
|
-
* Usage:
|
|
6
|
-
* crewx
|
|
7
|
-
* crewx
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* crewx --
|
|
12
|
-
* crewx --version
|
|
13
|
-
* crewx --help
|
|
14
|
-
* crewx x <args> → CLI
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
env
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
child
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const {
|
|
117
|
-
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* crewx launcher
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* crewx → Web dashboard + browser auto-open (default)
|
|
7
|
+
* crewx serve [--port N] → Web server (explicit)
|
|
8
|
+
* [--token T] → MCP bearer token (⚠️ prefer --token-file in shared shells)
|
|
9
|
+
* [--token-file PATH] → Read token from file
|
|
10
|
+
* [--no-open] → Do not open browser
|
|
11
|
+
* crewx electron [--overlay] → Electron desktop or overlay window
|
|
12
|
+
* crewx --version → CLI version output
|
|
13
|
+
* crewx --help → CLI help output
|
|
14
|
+
* crewx q|x|agent|... <args> → CLI subcommand (forwarded to packages/cli)
|
|
15
|
+
*/
|
|
16
|
+
import { spawn } from 'child_process';
|
|
17
|
+
import { readFileSync, mkdirSync } from 'fs';
|
|
18
|
+
import { fileURLToPath } from 'url';
|
|
19
|
+
import { dirname, join } from 'path';
|
|
20
|
+
import { homedir } from 'os';
|
|
21
|
+
import { createRequire } from 'module';
|
|
22
|
+
import { setupSignalForwarding, resolveRoute, parseServeFlags } from './crewx-lib.js';
|
|
23
|
+
|
|
24
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
25
|
+
const __dirname = dirname(__filename);
|
|
26
|
+
|
|
27
|
+
function getElectronSpawnEnv() {
|
|
28
|
+
const env = { ...process.env };
|
|
29
|
+
delete env.ELECTRON_RUN_AS_NODE;
|
|
30
|
+
env.NODE_ENV = 'production'; // Force production — prevents users from bypassing FREE limits via env
|
|
31
|
+
return env;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Launch Electron with the given entry file.
|
|
36
|
+
* Returns false when Electron is not installed (fail-fast — caller must handle).
|
|
37
|
+
*/
|
|
38
|
+
function launchElectron(entryFile, routeArgs = []) {
|
|
39
|
+
const require = createRequire(import.meta.url);
|
|
40
|
+
let electronPath;
|
|
41
|
+
try {
|
|
42
|
+
electronPath = require('electron');
|
|
43
|
+
} catch {
|
|
44
|
+
return false; // Electron not installed
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (process.env.ELECTRON_RUN_AS_NODE) {
|
|
48
|
+
console.warn(
|
|
49
|
+
'[crewx] Ignoring ELECTRON_RUN_AS_NODE for Electron UI launch (it forces Electron into Node mode).',
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const child = spawn(String(electronPath), [entryFile, ...routeArgs], {
|
|
54
|
+
stdio: 'inherit',
|
|
55
|
+
env: getElectronSpawnEnv(),
|
|
56
|
+
detached: true, // Separate process group so Ctrl+C doesn't reach Electron directly
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
setupSignalForwarding(child, { escalateKill: true, detached: true });
|
|
60
|
+
|
|
61
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
62
|
+
child.on('error', (err) => {
|
|
63
|
+
console.error('Failed to launch Electron:', err);
|
|
64
|
+
process.exit(1);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Launch the web server with parsed serve flags.
|
|
72
|
+
* Token injection: --token → MCP_BEARER_TOKEN env; --token-file → read + inject.
|
|
73
|
+
*/
|
|
74
|
+
function launchWeb(serveArgs = [], { openBrowser = false } = {}) {
|
|
75
|
+
// Ensure ~/.crewx/ directory and tasks schema before spawning the NestJS server.
|
|
76
|
+
// Schema owner = CLI; launcher is the enforcement point so the server can assume DB exists.
|
|
77
|
+
const require = createRequire(import.meta.url);
|
|
78
|
+
const cliSchemaPath = join(__dirname, '..', 'packages', 'cli', 'dist', 'schema', 'tasks.js');
|
|
79
|
+
const { ensureTasksSchema } = require(cliSchemaPath);
|
|
80
|
+
const dbDir = join(homedir(), '.crewx');
|
|
81
|
+
mkdirSync(dbDir, { recursive: true });
|
|
82
|
+
const BetterSqlite3 = require('better-sqlite3');
|
|
83
|
+
const db = new BetterSqlite3(join(dbDir, 'crewx.db'));
|
|
84
|
+
ensureTasksSchema(db);
|
|
85
|
+
db.close();
|
|
86
|
+
|
|
87
|
+
const serverScript = join(__dirname, '..', 'server.js');
|
|
88
|
+
|
|
89
|
+
const flagsResult = parseServeFlags(serveArgs);
|
|
90
|
+
if (flagsResult.help) {
|
|
91
|
+
process.stdout.write(
|
|
92
|
+
'Usage: crewx serve [options]\n' +
|
|
93
|
+
'\n' +
|
|
94
|
+
'Options:\n' +
|
|
95
|
+
' --port <N> Port to listen on (default: auto)\n' +
|
|
96
|
+
' --token <T> MCP bearer token\n' +
|
|
97
|
+
' --token-file <path> Read token from file\n' +
|
|
98
|
+
' --no-open Do not open browser automatically\n' +
|
|
99
|
+
' --help, -h Show this help\n',
|
|
100
|
+
);
|
|
101
|
+
process.exit(0);
|
|
102
|
+
}
|
|
103
|
+
if (flagsResult.error) {
|
|
104
|
+
console.error(`❌ ${flagsResult.error}`);
|
|
105
|
+
if (flagsResult.error.startsWith('Unknown option')) {
|
|
106
|
+
process.stderr.write(
|
|
107
|
+
' Did you mean: crewx serve --port <N>\n' +
|
|
108
|
+
' Run `crewx serve --help` for usage.\n',
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
process.exit(flagsResult.error.startsWith('Unknown option') ? 2 : 1);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const { port, token, tokenFile, noOpen } = flagsResult;
|
|
115
|
+
|
|
116
|
+
const env = { ...process.env, NODE_ENV: 'production' }; // Force production — prevents users from bypassing FREE limits via env
|
|
117
|
+
|
|
118
|
+
if (port) {
|
|
119
|
+
env.PORT = String(port);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (token) {
|
|
123
|
+
env.MCP_BEARER_TOKEN = token;
|
|
124
|
+
process.stderr.write(
|
|
125
|
+
'ℹ️ Tip: use --token-file to avoid exposing token in shell history.\n',
|
|
126
|
+
);
|
|
127
|
+
} else if (tokenFile) {
|
|
128
|
+
let content;
|
|
129
|
+
try {
|
|
130
|
+
content = readFileSync(tokenFile, 'utf8').trim();
|
|
131
|
+
} catch (err) {
|
|
132
|
+
console.error(`❌ --token-file not readable: ${tokenFile}`);
|
|
133
|
+
console.error(` ${err.message}`);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
if (!content) {
|
|
137
|
+
console.error(`❌ --token-file is empty: ${tokenFile}`);
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
env.MCP_BEARER_TOKEN = content;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (openBrowser && !noOpen) {
|
|
144
|
+
env.CREWX_OPEN_BROWSER = '1';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const child = spawn(process.execPath, [serverScript], {
|
|
148
|
+
stdio: 'inherit',
|
|
149
|
+
env,
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
setupSignalForwarding(child);
|
|
153
|
+
|
|
154
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
155
|
+
child.on('error', (err) => {
|
|
156
|
+
console.error('Failed to start web server:', err);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function forwardToCli(cliArgs) {
|
|
162
|
+
const serverScript = join(__dirname, '..', 'server.js');
|
|
163
|
+
const child = spawn(process.execPath, [serverScript, 'cli', ...cliArgs], {
|
|
164
|
+
stdio: 'inherit',
|
|
165
|
+
env: { ...process.env, NODE_ENV: 'production' }, // Force production — prevents users from bypassing FREE limits via env
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
setupSignalForwarding(child);
|
|
169
|
+
|
|
170
|
+
child.on('exit', (code) => process.exit(code ?? 0));
|
|
171
|
+
child.on('error', (err) => {
|
|
172
|
+
console.error('Failed to run CLI subcommand:', err);
|
|
173
|
+
process.exit(1);
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// Route
|
|
178
|
+
const args = process.argv.slice(2);
|
|
179
|
+
const { route, routeArgs, error } = resolveRoute(args);
|
|
180
|
+
|
|
181
|
+
if (route === 'serve') {
|
|
182
|
+
// Explicit web server launch
|
|
183
|
+
launchWeb(routeArgs, { openBrowser: false });
|
|
184
|
+
} else if (route === 'electron') {
|
|
185
|
+
// Electron: desktop (default) or overlay (--overlay flag)
|
|
186
|
+
const isOverlay = routeArgs.includes('--overlay');
|
|
187
|
+
const entryFile = join(
|
|
188
|
+
__dirname, '..', 'dist-electron',
|
|
189
|
+
isOverlay ? 'overlay.js' : 'main.js',
|
|
190
|
+
);
|
|
191
|
+
const launched = launchElectron(entryFile, isOverlay ? [] : []);
|
|
192
|
+
if (!launched) {
|
|
193
|
+
console.error('');
|
|
194
|
+
console.error(' ❌ Electron is not installed.');
|
|
195
|
+
console.error('');
|
|
196
|
+
console.error(' This command requires Electron. Install it:');
|
|
197
|
+
console.error('');
|
|
198
|
+
console.error(' npm install -g electron');
|
|
199
|
+
console.error(' # or in this project:');
|
|
200
|
+
console.error(' npm install --save-dev electron');
|
|
201
|
+
console.error('');
|
|
202
|
+
console.error(' Alternatively, use: crewx serve (web mode)');
|
|
203
|
+
console.error('');
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
} else if (route === 'cli') {
|
|
207
|
+
forwardToCli(routeArgs);
|
|
208
|
+
} else if (route === 'web-default') {
|
|
209
|
+
// No arguments → web dashboard + browser auto-open
|
|
210
|
+
launchWeb(routeArgs, { openBrowser: true });
|
|
211
|
+
} else if (route === 'error') {
|
|
212
|
+
// Unknown command or option
|
|
213
|
+
console.error(`❌ ${error}`);
|
|
214
|
+
process.exit(2);
|
|
215
|
+
} else {
|
|
216
|
+
// Should not happen — guard against future routing additions
|
|
217
|
+
console.error(`❌ Internal routing error: unknown route "${route}"`);
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SSOT for launcher-owned flags.
|
|
3
|
+
* Imported by bin/crewx-lib.js and bin/crewx.js.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** Flags owned by the launcher (bin/crewx.js), not the CLI engine. */
|
|
7
|
+
export const LAUNCHER_OWNED_FLAGS = new Set([
|
|
8
|
+
'--port',
|
|
9
|
+
'--no-open',
|
|
10
|
+
'--overlay',
|
|
11
|
+
'--token',
|
|
12
|
+
'--token-file',
|
|
13
|
+
]);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Build a hint message for a launcher-owned flag used in wrong context.
|
|
17
|
+
* @param {string} flag
|
|
18
|
+
* @returns {string}
|
|
19
|
+
*/
|
|
20
|
+
export function buildHintMessage(flag) {
|
|
21
|
+
const hints = {
|
|
22
|
+
'--port': 'use: crewx serve --port <N>',
|
|
23
|
+
'--token': 'use: crewx serve --token <T>',
|
|
24
|
+
'--token-file': 'use: crewx serve --token-file <PATH>',
|
|
25
|
+
'--no-open': 'use: crewx serve --no-open',
|
|
26
|
+
'--overlay': 'use: crewx electron --overlay',
|
|
27
|
+
};
|
|
28
|
+
return hints[flag] ?? '';
|
|
29
|
+
}
|
package/bin/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{ "type": "module" }
|
|
1
|
+
{ "type": "module" }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{aO as w,aP as we,aQ as f,aR as N,aS as Se,aT as u,aU as e,aV as ae,aW as se,aX as K,aY as j,aZ as re,a_ as Ie,a$ as le,b0 as U,b1 as ze,b2 as Re,b3 as Ce,b4 as ie,b5 as Me,b6 as De}from"./main-
|
|
1
|
+
import{aO as w,aP as we,aQ as f,aR as N,aS as Se,aT as u,aU as e,aV as ae,aW as se,aX as K,aY as j,aZ as re,a_ as Ie,a$ as le,b0 as U,b1 as ze,b2 as Re,b3 as Ce,b4 as ie,b5 as Me,b6 as De}from"./main-D0PuDE6-.js";/**
|
|
2
2
|
* @license lucide-react v0.563.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{aO as H,aR as B,aT as d,aU as r,b7 as ve,aY as J,b1 as ke,b8 as we,aQ as F,b9 as ce,aX as de,ba as U,b4 as je,bb as Ne,bc as Ce,bd as Le,a$ as _e,be as ue,bf as Ee,bg as Se,bh as De,bi as Me,bj as Ae,bk as Te,bl as $e,bm as Ie,bn as Pe,bo as Re,bp as Be,bq as ze,br as Oe,bs as qe,bt as Fe,bu as Ve,bv as He,bw as Ke,bx as Ue,by as Qe,bz as We,bA as Xe,bB as ee}from"./main-
|
|
1
|
+
import{aO as H,aR as B,aT as d,aU as r,b7 as ve,aY as J,b1 as ke,b8 as we,aQ as F,b9 as ce,aX as de,ba as U,b4 as je,bb as Ne,bc as Ce,bd as Le,a$ as _e,be as ue,bf as Ee,bg as Se,bh as De,bi as Me,bj as Ae,bk as Te,bl as $e,bm as Ie,bn as Pe,bo as Re,bp as Be,bq as ze,br as Oe,bs as qe,bt as Fe,bu as Ve,bv as He,bw as Ke,bx as Ue,by as Qe,bz as We,bA as Xe,bB as ee}from"./main-D0PuDE6-.js";/**
|
|
2
2
|
* @license lucide-react v0.563.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{bN as S,cb as ln,aH as A,bL as P,aG as W,cc as gn,cd as dn,ce as hn,cf as z,cg as pn,ch as An,ci as m,bO as N,bT as U,bW as R,cj as _n,bR as cn,ck as on,cl as wn,aI as V,cm as On,cn as b}from"./main-
|
|
1
|
+
import{bN as S,cb as ln,aH as A,bL as P,aG as W,cc as gn,cd as dn,ce as hn,cf as z,cg as pn,ch as An,ci as m,bO as N,bT as U,bW as R,cj as _n,bR as cn,ck as on,cl as wn,aI as V,cm as On,cn as b}from"./main-D0PuDE6-.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||S(n)&&ln(n)==Pn}function vn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var B=P?P.prototype:void 0,H=B?B.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return vn(n,k)+"";if(x(n))return H?H.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function yn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function Tn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Rn(n){return n!==n}function In(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function bn(n,r,e){return r===r?In(n,r,e):Tn(n,Rn,e)}function Ln(n,r){var e=n==null?0:n.length;return!!e&&bn(n,r,0)>-1}function M(n){return W(n)?gn(n):dn(n)}var Sn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Sn.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Gn=/\\(\\)?/g,Dn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Gn,"$1"):i||e)}),r});function Fn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:$(n,r)?[n]:Dn(Fn(n))}function I(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function mn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var K=P?P.isConcatSpreadable:void 0;function Nn(n){return A(n)||z(n)||!!(K&&n&&n[K])}function Kr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=Nn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Un(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Bn(){return[]}var Hn=Object.prototype,Kn=Hn.propertyIsEnumerable,q=Object.getOwnPropertySymbols,qn=q?function(n){return n==null?[]:(n=Object(n),en(q(n),function(r){return Kn.call(n,r)}))}:Bn;function Zn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function Z(n){return Zn(n,M,qn)}var Yn="__lodash_hash_undefined__";function Xn(n){return this.__data__.set(n,Yn),this}function Jn(n){return this.__data__.has(n)}function v(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}v.prototype.add=v.prototype.push=Xn;v.prototype.has=Jn;function Qn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var Wn=1,zn=2;function fn(n,r,e,i,f,t){var s=e&Wn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,c=e&zn?new v:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var o=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(o!==void 0){if(o)continue;d=!1;break}if(c){if(!Qn(r,function(w,O){if(!tn(c,O)&&(p===w||f(p,w,e,i,t)))return c.push(O)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var kn=1,jn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",Y=P?P.prototype:void 0,L=Y?Y.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new m(n),new m(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&kn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=jn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(L)return L.call(n)==L.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=Z(n),a=u.length,h=Z(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var c=t.get(n),p=t.get(r);if(c&&p)return c==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var o=s;++l<a;){d=u[l];var w=n[d],O=r[d];if(i)var F=s?i(O,w,d,r,n,t):i(w,O,d,n,r,t);if(!(F===void 0?w===O||f(w,O,e,i,t):F)){_=!1;break}o||(o=d=="constructor")}if(_&&!o){var y=n.constructor,E=r.constructor;y!=E&&"constructor"in n&&"constructor"in r&&!(typeof y=="function"&&y instanceof y&&typeof E=="function"&&E instanceof E)&&(_=!1)}return t.delete(n),t.delete(r),_}var cr=1,X="[object Arguments]",J="[object Array]",T="[object Object]",or=Object.prototype,Q=or.hasOwnProperty;function wr(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?J:N(n),h=u?J:N(r);a=a==X?T:a,h=h==X?T:h;var g=a==T,l=h==T,d=a==h;if(d&&U(n)){if(!U(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new R),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&cr)){var c=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(c||p){var _=c?n.value():n,o=p?r.value():r;return t||(t=new R),f(_,o,e,i,t)}}return d?(t||(t=new R),_r(n,r,e,i,f,t)):!1}function G(n,r,e,i,f){return n===r?!0:n==null||r==null||!S(n)&&!S(r)?n!==n&&r!==r:wr(n,r,e,i,G,f)}var Or=1,Pr=2;function vr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new R,l;if(!(l===void 0?G(h,a,Or|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!cn(n)}function yr(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=yr(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||vr(e,n,r)}}function Tr(n,r){return n!=null&&r in Object(n)}function Rr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=I(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&on(f)&&wn(s,f)&&(A(n)||z(n)))}function Ir(n,r){return n!=null&&Rr(n,r,Tr)}var br=1,Lr=2;function Sr(n,r){return $(n)&&sn(r)?un(I(n),r):function(e){var i=mn(e,n);return i===void 0&&i===r?Ir(e,n):G(r,i,br|Lr)}}function xr(n){return function(r){return r==null?void 0:r[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(I(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Sr(n[0],n[1]):Er(n):$r(n)}function Cr(n,r){return n&&On(n,r,M)}function Gr(n,r){return function(e,i){if(e==null)return e;if(!W(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var D=Gr(Cr);function Dr(n){return typeof n=="function"?n:V}function qr(n,r){var e=A(n)?En:D;return e(n,Dr(r))}function Fr(n,r){var e=[];return D(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Zr(n,r){var e=A(n)?en:Fr;return e(n,an(r))}function mr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Yr(n,r,e){var i=A(n)?Un:mr,f=arguments.length<3;return i(n,an(r),e,f,D)}var Nr=1/0,Ur=b&&1/C(new b([,-0]))[1]==Nr?function(n){return new b(n)}:yn,Br=200;function Xr(n,r,e){var i=-1,f=Ln,t=n.length,s=!0,u=[],a=u;if(t>=Br){var h=r?null:Ur(n);if(h)return C(h);s=!1,f=tn,a=new v}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{D as a,Kr as b,an as c,vn as d,rn as e,Zn as f,qn as g,En as h,x as i,Z as j,M as k,Xr as l,Zr as m,qr as n,Tn as o,Dr as p,Cr as q,Yr as r,Bn as s,Rr as t,j as u,I as v,nn as w,Ir as x,Fn as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./main-
|
|
1
|
+
import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./main-D0PuDE6-.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(fn(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,F=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<rn)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(on((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|