mirror of
http://10.0.2.1:3031/sauer/claude-code.git
synced 2026-06-30 21:36:57 +10:00
110 lines
14 KiB
TypeScript
110 lines
14 KiB
TypeScript
|
|
import { c as _c } from "react/compiler-runtime";
|
||
|
|
/**
|
||
|
|
* Miscellaneous subcommand handlers — extracted from main.tsx for lazy loading.
|
||
|
|
* setup-token, doctor, install
|
||
|
|
*/
|
||
|
|
/* eslint-disable custom-rules/no-process-exit -- CLI subcommand handlers intentionally exit */
|
||
|
|
|
||
|
|
import { cwd } from 'process';
|
||
|
|
import React from 'react';
|
||
|
|
import { WelcomeV2 } from '../../components/LogoV2/WelcomeV2.js';
|
||
|
|
import { useManagePlugins } from '../../hooks/useManagePlugins.js';
|
||
|
|
import type { Root } from '../../ink.js';
|
||
|
|
import { Box, Text } from '../../ink.js';
|
||
|
|
import { KeybindingSetup } from '../../keybindings/KeybindingProviderSetup.js';
|
||
|
|
import { logEvent } from '../../services/analytics/index.js';
|
||
|
|
import { MCPConnectionManager } from '../../services/mcp/MCPConnectionManager.js';
|
||
|
|
import { AppStateProvider } from '../../state/AppState.js';
|
||
|
|
import { onChangeAppState } from '../../state/onChangeAppState.js';
|
||
|
|
import { isAnthropicAuthEnabled } from '../../utils/auth.js';
|
||
|
|
export async function setupTokenHandler(root: Root): Promise<void> {
|
||
|
|
logEvent('tengu_setup_token_command', {});
|
||
|
|
const showAuthWarning = !isAnthropicAuthEnabled();
|
||
|
|
const {
|
||
|
|
ConsoleOAuthFlow
|
||
|
|
} = await import('../../components/ConsoleOAuthFlow.js');
|
||
|
|
await new Promise<void>(resolve => {
|
||
|
|
root.render(<AppStateProvider onChangeAppState={onChangeAppState}>
|
||
|
|
<KeybindingSetup>
|
||
|
|
<Box flexDirection="column" gap={1}>
|
||
|
|
<WelcomeV2 />
|
||
|
|
{showAuthWarning && <Box flexDirection="column">
|
||
|
|
<Text color="warning">
|
||
|
|
Warning: You already have authentication configured via
|
||
|
|
environment variable or API key helper.
|
||
|
|
</Text>
|
||
|
|
<Text color="warning">
|
||
|
|
The setup-token command will create a new OAuth token which
|
||
|
|
you can use instead.
|
||
|
|
</Text>
|
||
|
|
</Box>}
|
||
|
|
<ConsoleOAuthFlow onDone={() => {
|
||
|
|
void resolve();
|
||
|
|
}} mode="setup-token" startingMessage="This will guide you through long-lived (1-year) auth token setup for your Claude account. Claude subscription required." />
|
||
|
|
</Box>
|
||
|
|
</KeybindingSetup>
|
||
|
|
</AppStateProvider>);
|
||
|
|
});
|
||
|
|
root.unmount();
|
||
|
|
process.exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
// DoctorWithPlugins wrapper + doctor handler
|
||
|
|
const DoctorLazy = React.lazy(() => import('../../screens/Doctor.js').then(m => ({
|
||
|
|
default: m.Doctor
|
||
|
|
})));
|
||
|
|
function DoctorWithPlugins(t0) {
|
||
|
|
const $ = _c(2);
|
||
|
|
const {
|
||
|
|
onDone
|
||
|
|
} = t0;
|
||
|
|
useManagePlugins();
|
||
|
|
let t1;
|
||
|
|
if ($[0] !== onDone) {
|
||
|
|
t1 = <React.Suspense fallback={null}><DoctorLazy onDone={onDone} /></React.Suspense>;
|
||
|
|
$[0] = onDone;
|
||
|
|
$[1] = t1;
|
||
|
|
} else {
|
||
|
|
t1 = $[1];
|
||
|
|
}
|
||
|
|
return t1;
|
||
|
|
}
|
||
|
|
export async function doctorHandler(root: Root): Promise<void> {
|
||
|
|
logEvent('tengu_doctor_command', {});
|
||
|
|
await new Promise<void>(resolve => {
|
||
|
|
root.render(<AppStateProvider>
|
||
|
|
<KeybindingSetup>
|
||
|
|
<MCPConnectionManager dynamicMcpConfig={undefined} isStrictMcpConfig={false}>
|
||
|
|
<DoctorWithPlugins onDone={() => {
|
||
|
|
void resolve();
|
||
|
|
}} />
|
||
|
|
</MCPConnectionManager>
|
||
|
|
</KeybindingSetup>
|
||
|
|
</AppStateProvider>);
|
||
|
|
});
|
||
|
|
root.unmount();
|
||
|
|
process.exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
// install handler
|
||
|
|
export async function installHandler(target: string | undefined, options: {
|
||
|
|
force?: boolean;
|
||
|
|
}): Promise<void> {
|
||
|
|
const {
|
||
|
|
setup
|
||
|
|
} = await import('../../setup.js');
|
||
|
|
await setup(cwd(), 'default', false, false, undefined, false);
|
||
|
|
const {
|
||
|
|
install
|
||
|
|
} = await import('../../commands/install.js');
|
||
|
|
await new Promise<void>(resolve => {
|
||
|
|
const args: string[] = [];
|
||
|
|
if (target) args.push(target);
|
||
|
|
if (options.force) args.push('--force');
|
||
|
|
void install.call(result => {
|
||
|
|
void resolve();
|
||
|
|
process.exit(result.includes('failed') ? 1 : 0);
|
||
|
|
}, {}, args);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjd2QiLCJSZWFjdCIsIldlbGNvbWVWMiIsInVzZU1hbmFnZVBsdWdpbnMiLCJSb290IiwiQm94IiwiVGV4dCIsIktleWJpbmRpbmdTZXR1cCIsImxvZ0V2ZW50IiwiTUNQQ29ubmVjdGlvbk1hbmFnZXIiLCJBcHBTdGF0ZVByb3ZpZGVyIiwib25DaGFuZ2VBcHBTdGF0ZSIsImlzQW50aHJvcGljQXV0aEVuYWJsZWQiLCJzZXR1cFRva2VuSGFuZGxlciIsInJvb3QiLCJQcm9taXNlIiwic2hvd0F1dGhXYXJuaW5nIiwiQ29uc29sZU9BdXRoRmxvdyIsInJlc29sdmUiLCJyZW5kZXIiLCJ1bm1vdW50IiwicHJvY2VzcyIsImV4aXQiLCJEb2N0b3JMYXp5IiwibGF6eSIsInRoZW4iLCJtIiwiZGVmYXVsdCIsIkRvY3RvciIsIkRvY3RvcldpdGhQbHVnaW5zIiwidDAiLCIkIiwiX2MiLCJvbkRvbmUiLCJ0MSIsImRvY3RvckhhbmRsZXIiLCJ1bmRlZmluZWQiLCJpbnN0YWxsSGFuZGxlciIsInRhcmdldCIsIm9wdGlvbnMiLCJmb3JjZSIsInNldHVwIiwiaW5zdGFsbCIsImFyZ3MiLCJwdXNoIiwiY2FsbCIsInJlc3VsdCIsImluY2x1ZGVzIl0sInNvdXJjZXMiOlsidXRpbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNaXNjZWxsYW5lb3VzIHN1YmNvbW1hbmQgaGFuZGxlcnMg4oCUIGV4dHJhY3RlZCBmcm9tIG1haW4udHN4IGZvciBsYXp5IGxvYWRpbmcuXG4gKiBzZXR1cC10b2tlbiwgZG9jdG9yLCBpbnN0YWxsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGN1c3RvbS1ydWxlcy9uby1wcm9jZXNzLWV4aXQgLS0gQ0xJIHN1YmNvbW1hbmQgaGFuZGxlcnMgaW50ZW50aW9uYWxseSBleGl0ICovXG5cbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWxjb21lVjIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL0xvZ29WMi9XZWxjb21lVjIuanMnXG5pbXBvcnQgeyB1c2VNYW5hZ2VQbHVnaW5zIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlTWFuYWdlUGx1Z2lucy5qcydcbmltcG9ydCB0eXBlIHsgUm9vdCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IEtleWJpbmRpbmdTZXR1cCB9IGZyb20gJy4uLy4uL2tleWJpbmRpbmdzL0tleWJpbmRpbmdQcm92aWRlclNldHVwLmpzJ1xuaW1wb3J0IHsgbG9nRXZlbnQgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbmFseXRpY3MvaW5kZXguanMnXG5pbXBvcnQgeyBNQ1BDb25uZWN0aW9uTWFuYWdlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21jcC9NQ1BDb25uZWN0aW9uTWFuYWdlci5qcydcbmltcG9ydCB7IEFwcFN0YXRlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IG9uQ2hhbmdlQXBwU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9vbkNoYW5nZUFwcFN0YXRlLmpzJ1xuaW1wb3J0IHsgaXNBbnRocm9waWNBdXRoRW5hYmxlZCB9IGZyb20gJy4uLy4uL3V0aWxzL2F1dGguanMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cFRva2VuSGFuZGxlcihyb290OiBSb290KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ0V2ZW50KCd0ZW5ndV9zZXR1cF90b2tlbl9jb21tYW5kJywge30pXG5cbiAgY29uc3Qgc2hvd0F1dGhXYXJuaW5nID0gIWlzQW50aHJvcGljQXV0aEVuYWJsZWQoKVxuICBjb25zdCB7IENvbnNvbGVPQXV0aEZsb3cgfSA9IGF3YWl0IGltcG9ydChcbiAgICAnLi4vLi4vY29tcG9uZW50cy9Db25zb2xlT0F1dGhGbG93LmpzJ1xuICApXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgIHJvb3QucmVuZGVyKFxuICAgICAgPEFwcFN0YXRlUHJvdmlkZXIgb25DaGFuZ2VBcHBTdGF0ZT17b25DaGFuZ2VBcHBTdGF0ZX0+XG4gICAgICAgIDxLZXliaW5kaW5nU2V0dXA+XG4gICAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCIgZ2FwPXsxfT5cbiAgICAgICAgICAgIDxXZWxjb21lVjIgLz5cbiAgICAgICAgICAgIHtzaG93QXV0aFdhcm5pbmcgJiYgKFxuICAgICAgICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgIFdhcm5pbmc6IFlvdSBhbHJlYWR5IGhhdmUgYXV0aGVudGljYXRpb24gY29uZmlndXJlZCB2aWFcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIEFQSSBrZXkgaGVscGVyLlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICA8VGV4dCBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICAgICAgICAgIFRoZSBzZXR1cC10b2tlbiBjb21tYW5kIHdpbGwgY3JlYXRlIGEgbmV3IE9BdXRoIHRva2VuIHdoaWNoXG4gICAgICAgICAgICAgICAgICB5b3UgY2FuIHVzZSBpbnN0ZWFkLlxuICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPENvbnNvbGVPQXV0aEZsb3dcbiAgICAgICAgICAgICAgb25Eb25lPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdm9pZCByZXNvbHZlKClcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgbW9kZT1cInNldHVwLXRva2VuXCJcbiAgICAgICAgICAgICAgc3RhcnRpbmdNZXNzYWdlPVwiVGhpcyB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIGxvbmctbGl2ZWQgKDEteWVhcikgYXV0aCB0b2tlbiBzZXR1cCBmb3IgeW91ciBDbGF1ZGUgYWNjb3VudC4gQ2xhdWRlIHN1YnNjcmlwdGlvbiByZXF1aXJlZC5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgPC9LZXliaW5kaW5nU2V0dXA+XG4gICAgICA8L0FwcFN0YXRlUHJvdmlkZXI+LFxuICAgIClcbiAgfSlcbiAgcm9vdC51bm1vdW50KClcbiAgcHJvY2Vzcy5leGl0KDApXG59XG5cbi8vIERvY3RvcldpdGhQbHVnaW5zIHdyYXBwZXIgKyBkb2N0b3IgaGFuZGxlclxuY29uc3QgRG9jdG9yTGF6eSA9IFJ
|