@ottocode/web-sdk 0.1.311 → 0.1.312
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/dist/assets/provider-logos.d.ts +1 -0
- package/dist/assets/provider-logos.d.ts.map +1 -1
- package/dist/components/common/ProviderLogo.d.ts.map +1 -1
- package/dist/components/index.js +257 -1
- package/dist/components/index.js.map +9 -9
- package/dist/components/onboarding/OnboardingModal.d.ts.map +1 -1
- package/dist/components/onboarding/steps/ProviderSetupStep.d.ts +10 -0
- package/dist/components/onboarding/steps/ProviderSetupStep.d.ts.map +1 -1
- package/dist/hooks/index.js +28 -1
- package/dist/hooks/index.js.map +5 -5
- package/dist/hooks/useAuthStatus.d.ts +5 -0
- package/dist/hooks/useAuthStatus.d.ts.map +1 -1
- package/dist/index.js +257 -1
- package/dist/index.js.map +9 -9
- package/dist/lib/api-client/auth.d.ts +10 -0
- package/dist/lib/api-client/auth.d.ts.map +1 -1
- package/dist/lib/api-client/index.d.ts +10 -0
- package/dist/lib/api-client/index.d.ts.map +1 -1
- package/dist/lib/index.js +19 -1
- package/dist/lib/index.js.map +4 -4
- package/package.json +3 -3
|
@@ -76,6 +76,11 @@ export declare function useAuthStatus(): {
|
|
|
76
76
|
status: "complete" | "pending" | "error";
|
|
77
77
|
error?: string;
|
|
78
78
|
}>;
|
|
79
|
+
startKimiDeviceFlow: any;
|
|
80
|
+
pollKimiDeviceFlow: (sessionId: string) => Promise<{
|
|
81
|
+
status: "complete" | "pending" | "error";
|
|
82
|
+
error?: string;
|
|
83
|
+
}>;
|
|
79
84
|
getCopilotAuthMethods: any;
|
|
80
85
|
saveCopilotToken: (token: string) => Promise<{
|
|
81
86
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuthStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuthStatus.ts"],"names":[],"mappings":"AAQA,wBAAgB,aAAa;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useAuthStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuthStatus.ts"],"names":[],"mappings":"AAQA,wBAAgB,aAAa;;;;;;;;qBAoBX,CAAC;;;;gBACsB,CAAC;;;yBAGF,CAAC;4BAA+B,CAAC;kBACrD,CAAC;;qBAGJ,CAAC;;;;;;;;;wBAKP,CAAC;;;;;;;;;+BAiCS,MAAM;;;;4BAmBR,MAAM,UAAU,MAAM;;;;8BAoB1B;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,EACV,mBAAmB,GACnB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,QAAQ,CAAC;QACZ,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,aAAa,EAAE,OAAO,CAAC;KACvB;;;;+BA6BgB,MAAM;;;;;2BAoDZ,MAAM,SAAS,MAAM;iCA4Bf,MAAM,SAAS,MAAM;;;;kCA+BrB,MAAM,QAAQ,MAAM,aAAa,MAAM;;sCAqEtC,MAAM;;;;;uCAXN,MAAM;;;;;oCAsBN,MAAM;;;;;8BAWV,MAAM;;;;;;;;;;;;;;;;;EAgErB"}
|
package/dist/index.js
CHANGED
|
@@ -2520,6 +2520,8 @@ import {
|
|
|
2520
2520
|
pollOpenAiDeviceFlow as apiPollOpenAiDeviceFlow,
|
|
2521
2521
|
startCopilotDeviceFlow as apiStartCopilotDeviceFlow,
|
|
2522
2522
|
pollCopilotDeviceFlow as apiPollCopilotDeviceFlow,
|
|
2523
|
+
startKimiDeviceFlow as apiStartKimiDeviceFlow,
|
|
2524
|
+
pollKimiDeviceFlow as apiPollKimiDeviceFlow,
|
|
2523
2525
|
getCopilotAuthMethods as apiGetCopilotAuthMethods,
|
|
2524
2526
|
saveCopilotToken as apiSaveCopilotToken,
|
|
2525
2527
|
importCopilotTokenFromGh as apiImportCopilotTokenFromGh,
|
|
@@ -2626,6 +2628,20 @@ var authMixin = {
|
|
|
2626
2628
|
throw new Error(extractErrorMessage(response.error));
|
|
2627
2629
|
return response.data;
|
|
2628
2630
|
},
|
|
2631
|
+
async startKimiDeviceFlow() {
|
|
2632
|
+
const response = await apiStartKimiDeviceFlow();
|
|
2633
|
+
if (response.error)
|
|
2634
|
+
throw new Error(extractErrorMessage(response.error));
|
|
2635
|
+
return response.data;
|
|
2636
|
+
},
|
|
2637
|
+
async pollKimiDeviceFlow(sessionId) {
|
|
2638
|
+
const response = await apiPollKimiDeviceFlow({
|
|
2639
|
+
body: { sessionId }
|
|
2640
|
+
});
|
|
2641
|
+
if (response.error)
|
|
2642
|
+
throw new Error(extractErrorMessage(response.error));
|
|
2643
|
+
return response.data;
|
|
2644
|
+
},
|
|
2629
2645
|
async getCopilotAuthMethods() {
|
|
2630
2646
|
const response = await apiGetCopilotAuthMethods();
|
|
2631
2647
|
if (response.error)
|
|
@@ -2938,6 +2954,8 @@ class ApiClient {
|
|
|
2938
2954
|
pollOpenAIDeviceFlow = authMixin.pollOpenAIDeviceFlow;
|
|
2939
2955
|
startCopilotDeviceFlow = authMixin.startCopilotDeviceFlow;
|
|
2940
2956
|
pollCopilotDeviceFlow = authMixin.pollCopilotDeviceFlow;
|
|
2957
|
+
startKimiDeviceFlow = authMixin.startKimiDeviceFlow;
|
|
2958
|
+
pollKimiDeviceFlow = authMixin.pollKimiDeviceFlow;
|
|
2941
2959
|
getCopilotAuthMethods = authMixin.getCopilotAuthMethods;
|
|
2942
2960
|
saveCopilotToken = authMixin.saveCopilotToken;
|
|
2943
2961
|
importCopilotTokenFromGh = authMixin.importCopilotTokenFromGh;
|
|
@@ -3924,6 +3942,10 @@ var ottorouterLogo = `<svg width="24" height="24" viewBox="0 0 100 100" fill="no
|
|
|
3924
3942
|
var minimaxLogo = `<svg width="24" height="24" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
|
|
3925
3943
|
<path d="M6 32V12L13 22L20 12V32H17V20L13 26L9 20V32H6ZM22 32V12L29 22L36 12V32H33V20L29 26L25 20V32H22Z" fill="currentColor"/>
|
|
3926
3944
|
</svg>`;
|
|
3945
|
+
var kimiLogo = `<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
3946
|
+
<path d="M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z" fill="currentColor"/>
|
|
3947
|
+
<path d="M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z" fill="currentColor"/>
|
|
3948
|
+
</svg>`;
|
|
3927
3949
|
var opencodeLogo = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3928
3950
|
<path opacity="0.2" d="M19.2002 17.4H8.40017V13.8H15.6002V10.2H19.2002V17.4ZM8.40017 13.8H4.80017V10.2H8.40017V13.8Z" fill="currentColor"/>
|
|
3929
3951
|
<path d="M8.40005 17.4H19.2001V21H4.80005V13.8H8.40005V17.4ZM15.6001 10.2V13.8H8.40005V10.2H15.6001ZM19.2001 10.2H15.6001V6.6H4.80005V3H19.2001V10.2Z" fill="currentColor"/>
|
|
@@ -3948,6 +3970,8 @@ var providerLogos = {
|
|
|
3948
3970
|
"zai-coding": zaiLogo,
|
|
3949
3971
|
ottorouter: ottorouterLogo,
|
|
3950
3972
|
minimax: minimaxLogo,
|
|
3973
|
+
moonshot: kimiLogo,
|
|
3974
|
+
kimi: kimiLogo,
|
|
3951
3975
|
opencode: opencodeLogo,
|
|
3952
3976
|
copilot: copilotLogo
|
|
3953
3977
|
};
|
|
@@ -32613,6 +32637,13 @@ function useAuthStatus() {
|
|
|
32613
32637
|
}
|
|
32614
32638
|
return result;
|
|
32615
32639
|
}, [fetchAuthStatus]);
|
|
32640
|
+
const pollKimiDeviceFlow = useCallback42(async (sessionId) => {
|
|
32641
|
+
const result = await apiClient.pollKimiDeviceFlow(sessionId);
|
|
32642
|
+
if (result.status === "complete") {
|
|
32643
|
+
await fetchAuthStatus();
|
|
32644
|
+
}
|
|
32645
|
+
return result;
|
|
32646
|
+
}, [fetchAuthStatus]);
|
|
32616
32647
|
const saveCopilotToken = useCallback42(async (token) => {
|
|
32617
32648
|
setLoading(true);
|
|
32618
32649
|
setError(null);
|
|
@@ -32662,6 +32693,8 @@ function useAuthStatus() {
|
|
|
32662
32693
|
pollOpenAIDeviceFlow,
|
|
32663
32694
|
startCopilotDeviceFlow: apiClient.startCopilotDeviceFlow.bind(apiClient),
|
|
32664
32695
|
pollCopilotDeviceFlow,
|
|
32696
|
+
startKimiDeviceFlow: apiClient.startKimiDeviceFlow.bind(apiClient),
|
|
32697
|
+
pollKimiDeviceFlow,
|
|
32665
32698
|
getCopilotAuthMethods: apiClient.getCopilotAuthMethods.bind(apiClient),
|
|
32666
32699
|
saveCopilotToken,
|
|
32667
32700
|
importCopilotTokenFromGh,
|
|
@@ -41329,6 +41362,8 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41329
41362
|
hideHeader = false,
|
|
41330
41363
|
onStartCopilotDeviceFlow,
|
|
41331
41364
|
onPollCopilotDeviceFlow,
|
|
41365
|
+
onStartKimiDeviceFlow,
|
|
41366
|
+
onPollKimiDeviceFlow,
|
|
41332
41367
|
onGetCopilotAuthMethods,
|
|
41333
41368
|
onSaveCopilotToken,
|
|
41334
41369
|
onImportCopilotTokenFromGh,
|
|
@@ -41380,6 +41415,12 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41380
41415
|
const [copilotCodeCopied, setCopilotCodeCopied] = useState69(false);
|
|
41381
41416
|
const [copilotModalOpen, setCopilotModalOpen] = useState69(false);
|
|
41382
41417
|
const [copilotLoading, setCopilotLoading] = useState69(false);
|
|
41418
|
+
const [kimiDevice, setKimiDevice] = useState69(null);
|
|
41419
|
+
const [kimiPolling, setKimiPolling] = useState69(false);
|
|
41420
|
+
const [kimiError, setKimiError] = useState69(null);
|
|
41421
|
+
const [kimiCodeCopied, setKimiCodeCopied] = useState69(false);
|
|
41422
|
+
const [kimiModalOpen, setKimiModalOpen] = useState69(false);
|
|
41423
|
+
const [kimiLoading, setKimiLoading] = useState69(false);
|
|
41383
41424
|
const copilotPollRef = useRef49(undefined);
|
|
41384
41425
|
const copilotCancelledRef = useRef49(false);
|
|
41385
41426
|
const copilotPollFnRef = useRef49(onPollCopilotDeviceFlow);
|
|
@@ -41388,6 +41429,10 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41388
41429
|
const openAICancelledRef = useRef49(false);
|
|
41389
41430
|
const openAIPollFnRef = useRef49(onPollOpenAIDeviceFlow);
|
|
41390
41431
|
openAIPollFnRef.current = onPollOpenAIDeviceFlow;
|
|
41432
|
+
const kimiPollRef = useRef49(undefined);
|
|
41433
|
+
const kimiCancelledRef = useRef49(false);
|
|
41434
|
+
const kimiPollFnRef = useRef49(onPollKimiDeviceFlow);
|
|
41435
|
+
kimiPollFnRef.current = onPollKimiDeviceFlow;
|
|
41391
41436
|
const balance = useOttoRouterStore((s) => s.balance);
|
|
41392
41437
|
const usdcBalance = useOttoRouterStore((s) => s.usdcBalance);
|
|
41393
41438
|
const payg = useOttoRouterStore((s) => s.payg);
|
|
@@ -41518,6 +41563,51 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41518
41563
|
clearTimeout(timeout);
|
|
41519
41564
|
};
|
|
41520
41565
|
}, [openAIPolling, openAIDevice]);
|
|
41566
|
+
useEffect71(() => {
|
|
41567
|
+
if (!kimiPolling || !kimiDevice || !kimiPollFnRef.current)
|
|
41568
|
+
return;
|
|
41569
|
+
kimiCancelledRef.current = false;
|
|
41570
|
+
const pollIntervalMs = Math.max((kimiDevice.interval || 5) * 1000 + 2000, 7000);
|
|
41571
|
+
const schedulePoll = () => {
|
|
41572
|
+
kimiPollRef.current = setTimeout(async () => {
|
|
41573
|
+
if (kimiCancelledRef.current)
|
|
41574
|
+
return;
|
|
41575
|
+
try {
|
|
41576
|
+
const pollFn = kimiPollFnRef.current;
|
|
41577
|
+
if (!pollFn)
|
|
41578
|
+
return;
|
|
41579
|
+
const result = await pollFn(kimiDevice.sessionId);
|
|
41580
|
+
if (kimiCancelledRef.current)
|
|
41581
|
+
return;
|
|
41582
|
+
if (result.status === "complete") {
|
|
41583
|
+
setKimiDevice(null);
|
|
41584
|
+
setKimiPolling(false);
|
|
41585
|
+
setKimiError(null);
|
|
41586
|
+
setKimiModalOpen(false);
|
|
41587
|
+
} else if (result.status === "error") {
|
|
41588
|
+
setKimiError(result.error || "Authorization failed");
|
|
41589
|
+
setKimiPolling(false);
|
|
41590
|
+
} else {
|
|
41591
|
+
schedulePoll();
|
|
41592
|
+
}
|
|
41593
|
+
} catch {
|
|
41594
|
+
if (!kimiCancelledRef.current)
|
|
41595
|
+
schedulePoll();
|
|
41596
|
+
}
|
|
41597
|
+
}, pollIntervalMs);
|
|
41598
|
+
};
|
|
41599
|
+
schedulePoll();
|
|
41600
|
+
const timeout = setTimeout(() => {
|
|
41601
|
+
setKimiPolling(false);
|
|
41602
|
+
setKimiError("Authorization timed out. Please try again.");
|
|
41603
|
+
}, 15 * 60 * 1000);
|
|
41604
|
+
return () => {
|
|
41605
|
+
kimiCancelledRef.current = true;
|
|
41606
|
+
if (kimiPollRef.current)
|
|
41607
|
+
clearTimeout(kimiPollRef.current);
|
|
41608
|
+
clearTimeout(timeout);
|
|
41609
|
+
};
|
|
41610
|
+
}, [kimiPolling, kimiDevice]);
|
|
41521
41611
|
const handleCopy = async () => {
|
|
41522
41612
|
if (authStatus.ottorouter.publicKey) {
|
|
41523
41613
|
await navigator.clipboard.writeText(authStatus.ottorouter.publicKey);
|
|
@@ -41654,6 +41744,19 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41654
41744
|
setOpenAILoading(false);
|
|
41655
41745
|
});
|
|
41656
41746
|
};
|
|
41747
|
+
const startKimiDeviceAuthorization = () => {
|
|
41748
|
+
if (!onStartKimiDeviceFlow)
|
|
41749
|
+
return;
|
|
41750
|
+
setKimiLoading(true);
|
|
41751
|
+
setKimiError(null);
|
|
41752
|
+
onStartKimiDeviceFlow().then((data) => {
|
|
41753
|
+
setKimiDevice(data);
|
|
41754
|
+
setKimiLoading(false);
|
|
41755
|
+
}).catch((err) => {
|
|
41756
|
+
setKimiError(err instanceof Error ? err.message : "Failed to start device flow");
|
|
41757
|
+
setKimiLoading(false);
|
|
41758
|
+
});
|
|
41759
|
+
};
|
|
41657
41760
|
const handleStartOAuth = async (providerId, mode) => {
|
|
41658
41761
|
if (providerId === "anthropic") {
|
|
41659
41762
|
setOauthSession({ provider: providerId, sessionId: null, mode });
|
|
@@ -41664,6 +41767,13 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41664
41767
|
setOpenAICodeCopied(false);
|
|
41665
41768
|
setOpenAIAuthMode("choice");
|
|
41666
41769
|
setOpenAIModalOpen(true);
|
|
41770
|
+
} else if (providerId === "moonshot" && onStartKimiDeviceFlow) {
|
|
41771
|
+
setKimiPolling(false);
|
|
41772
|
+
setKimiDevice(null);
|
|
41773
|
+
setKimiError(null);
|
|
41774
|
+
setKimiCodeCopied(false);
|
|
41775
|
+
setKimiModalOpen(true);
|
|
41776
|
+
startKimiDeviceAuthorization();
|
|
41667
41777
|
} else if (providerId === "copilot") {
|
|
41668
41778
|
setCopilotAuthMode("oauth");
|
|
41669
41779
|
setCopilotTokenInput("");
|
|
@@ -41746,6 +41856,32 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41746
41856
|
openAIPollRef.current = undefined;
|
|
41747
41857
|
}
|
|
41748
41858
|
};
|
|
41859
|
+
const handleKimiOpenAuth = () => {
|
|
41860
|
+
if (!kimiDevice)
|
|
41861
|
+
return;
|
|
41862
|
+
openUrl(kimiDevice.verificationUri);
|
|
41863
|
+
setKimiPolling(true);
|
|
41864
|
+
};
|
|
41865
|
+
const handleKimiCopyCode = async () => {
|
|
41866
|
+
if (!kimiDevice)
|
|
41867
|
+
return;
|
|
41868
|
+
await navigator.clipboard.writeText(kimiDevice.userCode);
|
|
41869
|
+
setKimiCodeCopied(true);
|
|
41870
|
+
setTimeout(() => setKimiCodeCopied(false), 2000);
|
|
41871
|
+
};
|
|
41872
|
+
const handleCancelKimi = () => {
|
|
41873
|
+
setKimiDevice(null);
|
|
41874
|
+
setKimiPolling(false);
|
|
41875
|
+
setKimiError(null);
|
|
41876
|
+
setKimiCodeCopied(false);
|
|
41877
|
+
setKimiModalOpen(false);
|
|
41878
|
+
setKimiLoading(false);
|
|
41879
|
+
kimiCancelledRef.current = true;
|
|
41880
|
+
if (kimiPollRef.current) {
|
|
41881
|
+
clearTimeout(kimiPollRef.current);
|
|
41882
|
+
kimiPollRef.current = undefined;
|
|
41883
|
+
}
|
|
41884
|
+
};
|
|
41749
41885
|
const handleCopilotOpenGithub = () => {
|
|
41750
41886
|
if (!copilotDevice)
|
|
41751
41887
|
return;
|
|
@@ -41890,6 +42026,23 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41890
42026
|
}
|
|
41891
42027
|
return;
|
|
41892
42028
|
}
|
|
42029
|
+
if (kimiModalOpen) {
|
|
42030
|
+
markHandled();
|
|
42031
|
+
if (!kimiLoading) {
|
|
42032
|
+
setKimiDevice(null);
|
|
42033
|
+
setKimiPolling(false);
|
|
42034
|
+
setKimiError(null);
|
|
42035
|
+
setKimiCodeCopied(false);
|
|
42036
|
+
setKimiModalOpen(false);
|
|
42037
|
+
setKimiLoading(false);
|
|
42038
|
+
kimiCancelledRef.current = true;
|
|
42039
|
+
if (kimiPollRef.current) {
|
|
42040
|
+
clearTimeout(kimiPollRef.current);
|
|
42041
|
+
kimiPollRef.current = undefined;
|
|
42042
|
+
}
|
|
42043
|
+
}
|
|
42044
|
+
return;
|
|
42045
|
+
}
|
|
41893
42046
|
if (addingProvider) {
|
|
41894
42047
|
markHandled();
|
|
41895
42048
|
setAddingProvider(null);
|
|
@@ -41916,6 +42069,8 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
41916
42069
|
isImportingWallet,
|
|
41917
42070
|
isImportModalOpen,
|
|
41918
42071
|
isOpeningPopup,
|
|
42072
|
+
kimiLoading,
|
|
42073
|
+
kimiModalOpen,
|
|
41919
42074
|
oauthSession
|
|
41920
42075
|
]);
|
|
41921
42076
|
const handleImportWallet = async () => {
|
|
@@ -43007,6 +43162,103 @@ var ProviderSetupStep = memo75(function ProviderSetupStep2({
|
|
|
43007
43162
|
]
|
|
43008
43163
|
})
|
|
43009
43164
|
}),
|
|
43165
|
+
kimiModalOpen && /* @__PURE__ */ jsx154("div", {
|
|
43166
|
+
"data-otto-nested-modal": "true",
|
|
43167
|
+
className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-sm",
|
|
43168
|
+
children: /* @__PURE__ */ jsxs134("div", {
|
|
43169
|
+
className: "bg-background border border-border rounded-xl w-full max-w-lg mx-6 shadow-2xl",
|
|
43170
|
+
children: [
|
|
43171
|
+
/* @__PURE__ */ jsxs134("div", {
|
|
43172
|
+
className: "flex items-center gap-3 p-6 border-b border-border",
|
|
43173
|
+
children: [
|
|
43174
|
+
/* @__PURE__ */ jsx154(ProviderLogo, {
|
|
43175
|
+
provider: "moonshot",
|
|
43176
|
+
size: 24
|
|
43177
|
+
}),
|
|
43178
|
+
/* @__PURE__ */ jsx154("h3", {
|
|
43179
|
+
className: "text-lg font-semibold",
|
|
43180
|
+
children: "Connect Kimi"
|
|
43181
|
+
})
|
|
43182
|
+
]
|
|
43183
|
+
}),
|
|
43184
|
+
/* @__PURE__ */ jsxs134("div", {
|
|
43185
|
+
className: "p-6 space-y-4",
|
|
43186
|
+
children: [
|
|
43187
|
+
/* @__PURE__ */ jsx154("p", {
|
|
43188
|
+
className: "text-sm text-muted-foreground",
|
|
43189
|
+
children: "Open the Kimi sign-in page, then enter this one-time code. This works from remote browsers, tunnels, and SSH sessions."
|
|
43190
|
+
}),
|
|
43191
|
+
/* @__PURE__ */ jsx154("div", {
|
|
43192
|
+
className: "flex items-center justify-center gap-3",
|
|
43193
|
+
children: kimiLoading ? /* @__PURE__ */ jsx154("div", {
|
|
43194
|
+
className: "bg-muted px-6 py-3 rounded-lg animate-pulse",
|
|
43195
|
+
children: /* @__PURE__ */ jsx154("div", {
|
|
43196
|
+
className: "h-9 w-48 bg-muted-foreground/20 rounded"
|
|
43197
|
+
})
|
|
43198
|
+
}) : kimiDevice ? /* @__PURE__ */ jsxs134(Fragment60, {
|
|
43199
|
+
children: [
|
|
43200
|
+
/* @__PURE__ */ jsx154("code", {
|
|
43201
|
+
className: "text-3xl font-mono font-bold tracking-widest text-foreground bg-muted px-6 py-3 rounded-lg select-all",
|
|
43202
|
+
children: kimiDevice.userCode
|
|
43203
|
+
}),
|
|
43204
|
+
/* @__PURE__ */ jsx154("button", {
|
|
43205
|
+
type: "button",
|
|
43206
|
+
onClick: handleKimiCopyCode,
|
|
43207
|
+
className: "p-2 text-muted-foreground hover:text-foreground transition-colors",
|
|
43208
|
+
children: kimiCodeCopied ? /* @__PURE__ */ jsx154(Check17, {
|
|
43209
|
+
className: "w-5 h-5 text-green-500"
|
|
43210
|
+
}) : /* @__PURE__ */ jsx154(Copy5, {
|
|
43211
|
+
className: "w-5 h-5"
|
|
43212
|
+
})
|
|
43213
|
+
})
|
|
43214
|
+
]
|
|
43215
|
+
}) : null
|
|
43216
|
+
}),
|
|
43217
|
+
kimiError && /* @__PURE__ */ jsx154("p", {
|
|
43218
|
+
className: "text-sm text-red-500 text-center",
|
|
43219
|
+
children: kimiError
|
|
43220
|
+
}),
|
|
43221
|
+
kimiPolling && /* @__PURE__ */ jsxs134("div", {
|
|
43222
|
+
className: "flex items-center justify-center gap-2 text-sm text-muted-foreground",
|
|
43223
|
+
children: [
|
|
43224
|
+
/* @__PURE__ */ jsx154(StableSpinner, {
|
|
43225
|
+
title: "Waiting for Kimi authorization"
|
|
43226
|
+
}),
|
|
43227
|
+
"Waiting for authorization..."
|
|
43228
|
+
]
|
|
43229
|
+
}),
|
|
43230
|
+
/* @__PURE__ */ jsxs134("div", {
|
|
43231
|
+
className: "flex gap-3",
|
|
43232
|
+
children: [
|
|
43233
|
+
/* @__PURE__ */ jsx154("button", {
|
|
43234
|
+
type: "button",
|
|
43235
|
+
onClick: handleCancelKimi,
|
|
43236
|
+
className: "flex-1 h-11 px-4 bg-transparent border border-border text-foreground rounded-lg font-medium hover:bg-muted/50 transition-colors",
|
|
43237
|
+
children: "Cancel"
|
|
43238
|
+
}),
|
|
43239
|
+
/* @__PURE__ */ jsx154("button", {
|
|
43240
|
+
type: "button",
|
|
43241
|
+
onClick: handleKimiOpenAuth,
|
|
43242
|
+
disabled: kimiPolling || kimiLoading,
|
|
43243
|
+
className: "flex-1 h-11 px-4 bg-foreground text-background rounded-lg font-medium hover:bg-foreground/90 transition-colors disabled:opacity-50 flex items-center justify-center gap-2",
|
|
43244
|
+
children: kimiPolling || kimiLoading ? /* @__PURE__ */ jsx154(StableSpinner, {
|
|
43245
|
+
title: "Opening Kimi"
|
|
43246
|
+
}) : /* @__PURE__ */ jsxs134(Fragment60, {
|
|
43247
|
+
children: [
|
|
43248
|
+
"Open Kimi",
|
|
43249
|
+
/* @__PURE__ */ jsx154(ExternalLink13, {
|
|
43250
|
+
className: "w-4 h-4"
|
|
43251
|
+
})
|
|
43252
|
+
]
|
|
43253
|
+
})
|
|
43254
|
+
})
|
|
43255
|
+
]
|
|
43256
|
+
})
|
|
43257
|
+
]
|
|
43258
|
+
})
|
|
43259
|
+
]
|
|
43260
|
+
})
|
|
43261
|
+
}),
|
|
43010
43262
|
copilotModalOpen && /* @__PURE__ */ jsx154("div", {
|
|
43011
43263
|
"data-otto-nested-modal": "true",
|
|
43012
43264
|
className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/60 backdrop-blur-sm",
|
|
@@ -43571,6 +43823,8 @@ var OnboardingModal = memo77(function OnboardingModal2({
|
|
|
43571
43823
|
pollOpenAIDeviceFlow,
|
|
43572
43824
|
startCopilotDeviceFlow,
|
|
43573
43825
|
pollCopilotDeviceFlow,
|
|
43826
|
+
startKimiDeviceFlow,
|
|
43827
|
+
pollKimiDeviceFlow,
|
|
43574
43828
|
getCopilotAuthMethods,
|
|
43575
43829
|
saveCopilotToken,
|
|
43576
43830
|
importCopilotTokenFromGh,
|
|
@@ -43644,6 +43898,8 @@ var OnboardingModal = memo77(function OnboardingModal2({
|
|
|
43644
43898
|
hideHeader,
|
|
43645
43899
|
onStartCopilotDeviceFlow: startCopilotDeviceFlow,
|
|
43646
43900
|
onPollCopilotDeviceFlow: pollCopilotDeviceFlow,
|
|
43901
|
+
onStartKimiDeviceFlow: startKimiDeviceFlow,
|
|
43902
|
+
onPollKimiDeviceFlow: pollKimiDeviceFlow,
|
|
43647
43903
|
onGetCopilotAuthMethods: getCopilotAuthMethods,
|
|
43648
43904
|
onSaveCopilotToken: saveCopilotToken,
|
|
43649
43905
|
onImportCopilotTokenFromGh: importCopilotTokenFromGh,
|
|
@@ -45986,4 +46242,4 @@ export {
|
|
|
45986
46242
|
API_BASE_URL
|
|
45987
46243
|
};
|
|
45988
46244
|
|
|
45989
|
-
//# debugId=
|
|
46245
|
+
//# debugId=579596B51E7CB03E64756E2164756E21
|