kimiflare 0.61.0 → 0.62.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/dist/index.js +542 -328
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
package/dist/index.js
CHANGED
|
@@ -11244,6 +11244,12 @@ var init_chat = __esm({
|
|
|
11244
11244
|
if (evt.kind === "service_ended") {
|
|
11245
11245
|
return /* @__PURE__ */ jsx8(ServiceEndedMessage, { endedAt: evt.endedAt });
|
|
11246
11246
|
}
|
|
11247
|
+
if (evt.kind === "qrcode") {
|
|
11248
|
+
return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", marginY: 1, children: [
|
|
11249
|
+
/* @__PURE__ */ jsx8(Text7, { color: theme.info.color, children: evt.caption }),
|
|
11250
|
+
/* @__PURE__ */ jsx8(Box7, { flexDirection: "column", marginTop: 1, children: evt.lines.map((line, i) => /* @__PURE__ */ jsx8(Text7, { children: line }, i)) })
|
|
11251
|
+
] });
|
|
11252
|
+
}
|
|
11247
11253
|
return /* @__PURE__ */ jsxs7(Text7, { color: theme.error, children: [
|
|
11248
11254
|
"! ",
|
|
11249
11255
|
evt.text
|
|
@@ -13457,6 +13463,179 @@ var init_remote_dashboard = __esm({
|
|
|
13457
13463
|
}
|
|
13458
13464
|
});
|
|
13459
13465
|
|
|
13466
|
+
// src/ui/inbox-modal.tsx
|
|
13467
|
+
import { useState as useState10, useCallback as useCallback3 } from "react";
|
|
13468
|
+
import { Box as Box17, Text as Text18, useInput as useInput7 } from "ink";
|
|
13469
|
+
import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
13470
|
+
function InboxModal({ onDone, onOpen }) {
|
|
13471
|
+
const theme = useTheme();
|
|
13472
|
+
const [step, setStep] = useState10("twitter");
|
|
13473
|
+
const [twitter, setTwitter] = useState10("");
|
|
13474
|
+
const [secret, setSecret] = useState10("");
|
|
13475
|
+
const [messages, setMessages] = useState10([]);
|
|
13476
|
+
const [selectedIndex, setSelectedIndex] = useState10(0);
|
|
13477
|
+
const [error, setError] = useState10(null);
|
|
13478
|
+
const checkInbox = useCallback3(
|
|
13479
|
+
async (u, s) => {
|
|
13480
|
+
setStep("checking");
|
|
13481
|
+
setError(null);
|
|
13482
|
+
try {
|
|
13483
|
+
const res = await fetch(
|
|
13484
|
+
`${FEEDBACK_WORKER_URL}/inbox/check?u=${encodeURIComponent(u)}&s=${encodeURIComponent(s)}`
|
|
13485
|
+
);
|
|
13486
|
+
if (!res.ok) {
|
|
13487
|
+
throw new Error(`Server returned ${res.status}`);
|
|
13488
|
+
}
|
|
13489
|
+
const data = await res.json();
|
|
13490
|
+
const sorted = (data.messages ?? []).sort((a, b) => b.createdAt - a.createdAt);
|
|
13491
|
+
setMessages(sorted);
|
|
13492
|
+
setSelectedIndex(0);
|
|
13493
|
+
setStep("result");
|
|
13494
|
+
} catch (e) {
|
|
13495
|
+
setError(e instanceof Error ? e.message : String(e));
|
|
13496
|
+
setMessages([]);
|
|
13497
|
+
setStep("result");
|
|
13498
|
+
}
|
|
13499
|
+
},
|
|
13500
|
+
[]
|
|
13501
|
+
);
|
|
13502
|
+
const handleTwitterSubmit = useCallback3(
|
|
13503
|
+
(value) => {
|
|
13504
|
+
const trimmed = value.trim();
|
|
13505
|
+
if (!trimmed) {
|
|
13506
|
+
onDone();
|
|
13507
|
+
return;
|
|
13508
|
+
}
|
|
13509
|
+
setTwitter(trimmed);
|
|
13510
|
+
setStep("secret");
|
|
13511
|
+
},
|
|
13512
|
+
[onDone]
|
|
13513
|
+
);
|
|
13514
|
+
const handleSecretSubmit = useCallback3(
|
|
13515
|
+
(value) => {
|
|
13516
|
+
const trimmed = value.trim();
|
|
13517
|
+
if (!trimmed) {
|
|
13518
|
+
onDone();
|
|
13519
|
+
return;
|
|
13520
|
+
}
|
|
13521
|
+
setSecret(trimmed);
|
|
13522
|
+
void checkInbox(twitter, trimmed);
|
|
13523
|
+
},
|
|
13524
|
+
[twitter, checkInbox, onDone]
|
|
13525
|
+
);
|
|
13526
|
+
const openSelected = useCallback3(() => {
|
|
13527
|
+
if (messages.length === 0) return;
|
|
13528
|
+
const msg = messages[selectedIndex];
|
|
13529
|
+
if (!msg) return;
|
|
13530
|
+
const url = `${FEEDBACK_WORKER_URL}/inbox?u=${encodeURIComponent(twitter)}&s=${encodeURIComponent(secret)}&m=${encodeURIComponent(msg.id)}`;
|
|
13531
|
+
onOpen(url);
|
|
13532
|
+
onDone();
|
|
13533
|
+
}, [messages, selectedIndex, twitter, secret, onOpen, onDone]);
|
|
13534
|
+
useInput7(
|
|
13535
|
+
(_input, key) => {
|
|
13536
|
+
if (key.escape) {
|
|
13537
|
+
onDone();
|
|
13538
|
+
return;
|
|
13539
|
+
}
|
|
13540
|
+
if (step === "result") {
|
|
13541
|
+
if (key.upArrow) {
|
|
13542
|
+
setSelectedIndex((i) => Math.max(0, i - 1));
|
|
13543
|
+
return;
|
|
13544
|
+
}
|
|
13545
|
+
if (key.downArrow) {
|
|
13546
|
+
setSelectedIndex((i) => Math.min(messages.length - 1, i + 1));
|
|
13547
|
+
return;
|
|
13548
|
+
}
|
|
13549
|
+
if (key.return && messages.length > 0) {
|
|
13550
|
+
openSelected();
|
|
13551
|
+
}
|
|
13552
|
+
}
|
|
13553
|
+
},
|
|
13554
|
+
{ isActive: step === "result" }
|
|
13555
|
+
);
|
|
13556
|
+
return /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
13557
|
+
/* @__PURE__ */ jsx19(Text18, { color: theme.accent, bold: true, children: "/inbox" }),
|
|
13558
|
+
step === "twitter" && /* @__PURE__ */ jsxs17(Fragment2, { children: [
|
|
13559
|
+
/* @__PURE__ */ jsx19(Text18, { color: theme.palette.foreground, children: "Enter your Twitter username (or press Enter to cancel):" }),
|
|
13560
|
+
/* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
|
|
13561
|
+
CustomTextInput,
|
|
13562
|
+
{
|
|
13563
|
+
value: twitter,
|
|
13564
|
+
onChange: setTwitter,
|
|
13565
|
+
onSubmit: handleTwitterSubmit,
|
|
13566
|
+
focus: true
|
|
13567
|
+
}
|
|
13568
|
+
) })
|
|
13569
|
+
] }),
|
|
13570
|
+
step === "secret" && /* @__PURE__ */ jsxs17(Fragment2, { children: [
|
|
13571
|
+
/* @__PURE__ */ jsx19(Text18, { color: theme.palette.foreground, children: "Enter your secret (or press Enter to cancel):" }),
|
|
13572
|
+
/* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
|
|
13573
|
+
CustomTextInput,
|
|
13574
|
+
{
|
|
13575
|
+
value: secret,
|
|
13576
|
+
onChange: setSecret,
|
|
13577
|
+
onSubmit: handleSecretSubmit,
|
|
13578
|
+
mask: "*",
|
|
13579
|
+
focus: true
|
|
13580
|
+
}
|
|
13581
|
+
) })
|
|
13582
|
+
] }),
|
|
13583
|
+
step === "checking" && /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "Checking your inbox\u2026" }),
|
|
13584
|
+
step === "result" && /* @__PURE__ */ jsxs17(Fragment2, { children: [
|
|
13585
|
+
error ? /* @__PURE__ */ jsxs17(Text18, { color: theme.error, children: [
|
|
13586
|
+
"Error: ",
|
|
13587
|
+
error
|
|
13588
|
+
] }) : messages.length > 0 ? /* @__PURE__ */ jsxs17(Fragment2, { children: [
|
|
13589
|
+
/* @__PURE__ */ jsxs17(Text18, { color: theme.palette.foreground, children: [
|
|
13590
|
+
"You have ",
|
|
13591
|
+
messages.length,
|
|
13592
|
+
" message",
|
|
13593
|
+
messages.length === 1 ? "" : "s",
|
|
13594
|
+
messages.some((m) => !m.seen) ? " (\u{1F534} new)" : "",
|
|
13595
|
+
":"
|
|
13596
|
+
] }),
|
|
13597
|
+
/* @__PURE__ */ jsx19(Box17, { flexDirection: "column", marginTop: 1, children: messages.map((msg, idx) => {
|
|
13598
|
+
const isSelected = idx === selectedIndex;
|
|
13599
|
+
const dateStr = new Date(msg.createdAt).toLocaleString();
|
|
13600
|
+
const marker = msg.seen ? " " : "\u{1F534} ";
|
|
13601
|
+
return /* @__PURE__ */ jsxs17(
|
|
13602
|
+
Text18,
|
|
13603
|
+
{
|
|
13604
|
+
color: isSelected ? theme.accent : theme.palette.foreground,
|
|
13605
|
+
bold: isSelected,
|
|
13606
|
+
dimColor: !isSelected && msg.seen,
|
|
13607
|
+
children: [
|
|
13608
|
+
isSelected ? "> " : " ",
|
|
13609
|
+
marker,
|
|
13610
|
+
dateStr,
|
|
13611
|
+
msg.seen ? " (played)" : " (new)"
|
|
13612
|
+
]
|
|
13613
|
+
},
|
|
13614
|
+
msg.id
|
|
13615
|
+
);
|
|
13616
|
+
}) }),
|
|
13617
|
+
/* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "\u2191\u2193 to select \xB7 Enter to open in browser" }) })
|
|
13618
|
+
] }) : /* @__PURE__ */ jsxs17(Text18, { color: theme.muted?.color ?? theme.palette.secondary, children: [
|
|
13619
|
+
"No messages yet for @",
|
|
13620
|
+
twitter,
|
|
13621
|
+
" / ",
|
|
13622
|
+
secret.replace(/./g, "*"),
|
|
13623
|
+
"."
|
|
13624
|
+
] }),
|
|
13625
|
+
/* @__PURE__ */ jsx19(Text18, { dimColor: true, children: "Press Esc to close." })
|
|
13626
|
+
] })
|
|
13627
|
+
] });
|
|
13628
|
+
}
|
|
13629
|
+
var FEEDBACK_WORKER_URL;
|
|
13630
|
+
var init_inbox_modal = __esm({
|
|
13631
|
+
"src/ui/inbox-modal.tsx"() {
|
|
13632
|
+
"use strict";
|
|
13633
|
+
init_text_input();
|
|
13634
|
+
init_theme_context();
|
|
13635
|
+
FEEDBACK_WORKER_URL = "https://hello.kimiflare.com";
|
|
13636
|
+
}
|
|
13637
|
+
});
|
|
13638
|
+
|
|
13460
13639
|
// src/intent/classify.ts
|
|
13461
13640
|
function classifyIntent(prompt) {
|
|
13462
13641
|
let intentScore = 0;
|
|
@@ -14400,6 +14579,7 @@ var init_builtins = __esm({
|
|
|
14400
14579
|
{ name: "remote", argHint: "<prompt>", description: "Run a remote session on Cloudflare", source: "builtin" },
|
|
14401
14580
|
{ name: "update", description: "Check for updates", source: "builtin" },
|
|
14402
14581
|
{ name: "hello", description: "Send a voice note to the creator", source: "builtin" },
|
|
14582
|
+
{ name: "inbox", description: "Check for a voice reply from the creator", source: "builtin" },
|
|
14403
14583
|
{ name: "report", argHint: "[send] [note]", description: "Report the last API error with diagnostic logs", source: "builtin" },
|
|
14404
14584
|
{ name: "shell", argHint: "[auto|bash|cmd|powershell|<path>]", description: "Show or set shell for bash tool", source: "builtin" },
|
|
14405
14585
|
{ name: "logout", description: "Clear stored credentials", source: "builtin" },
|
|
@@ -14441,21 +14621,21 @@ var init_save = __esm({
|
|
|
14441
14621
|
});
|
|
14442
14622
|
|
|
14443
14623
|
// src/ui/command-wizard.tsx
|
|
14444
|
-
import { useState as
|
|
14445
|
-
import { Box as
|
|
14624
|
+
import { useState as useState11 } from "react";
|
|
14625
|
+
import { Box as Box18, Text as Text19, useInput as useInput8, useWindowSize } from "ink";
|
|
14446
14626
|
import SelectInput6 from "ink-select-input";
|
|
14447
|
-
import { Fragment as
|
|
14627
|
+
import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
14448
14628
|
function CommandWizard({ mode, initial, existingNames, builtinNames, onDone, onSave }) {
|
|
14449
14629
|
const theme = useTheme();
|
|
14450
|
-
const [step, setStep] =
|
|
14451
|
-
const [name, setName] =
|
|
14452
|
-
const [description, setDescription] =
|
|
14453
|
-
const [template, setTemplate] =
|
|
14454
|
-
const [cmdMode, setCmdMode] =
|
|
14455
|
-
const [cmdEffort, setCmdEffort] =
|
|
14456
|
-
const [cmdModel, setCmdModel] =
|
|
14457
|
-
const [source, setSource] =
|
|
14458
|
-
const [error, setError] =
|
|
14630
|
+
const [step, setStep] = useState11("name");
|
|
14631
|
+
const [name, setName] = useState11(initial?.name ?? "");
|
|
14632
|
+
const [description, setDescription] = useState11(initial?.description ?? "");
|
|
14633
|
+
const [template, setTemplate] = useState11(initial?.template ?? "");
|
|
14634
|
+
const [cmdMode, setCmdMode] = useState11(initial?.mode);
|
|
14635
|
+
const [cmdEffort, setCmdEffort] = useState11(initial?.effort);
|
|
14636
|
+
const [cmdModel, setCmdModel] = useState11(initial?.model);
|
|
14637
|
+
const [source, setSource] = useState11(initial?.source ?? "project");
|
|
14638
|
+
const [error, setError] = useState11(null);
|
|
14459
14639
|
const { columns } = useWindowSize();
|
|
14460
14640
|
const totalSteps = 5;
|
|
14461
14641
|
const stepIndex = step === "name" ? 1 : step === "description" ? 2 : step === "template" ? 3 : step === "advanced" || step === "mode" || step === "effort" || step === "model" ? 4 : step === "location" ? 4 : 5;
|
|
@@ -14468,7 +14648,7 @@ function CommandWizard({ mode, initial, existingNames, builtinNames, onDone, onS
|
|
|
14468
14648
|
if (existingNames.includes(trimmed) && !isEditingSelf(trimmed)) return `/${trimmed} already exists`;
|
|
14469
14649
|
return null;
|
|
14470
14650
|
};
|
|
14471
|
-
|
|
14651
|
+
useInput8((_input, key) => {
|
|
14472
14652
|
if (key.escape) {
|
|
14473
14653
|
onDone();
|
|
14474
14654
|
}
|
|
@@ -14568,8 +14748,8 @@ ${template}`;
|
|
|
14568
14748
|
const renderStep = () => {
|
|
14569
14749
|
switch (step) {
|
|
14570
14750
|
case "name":
|
|
14571
|
-
return /* @__PURE__ */
|
|
14572
|
-
/* @__PURE__ */
|
|
14751
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14752
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14573
14753
|
mode === "create" ? "Create" : "Edit",
|
|
14574
14754
|
" custom command \u2014 Name (",
|
|
14575
14755
|
stepIndex,
|
|
@@ -14577,8 +14757,8 @@ ${template}`;
|
|
|
14577
14757
|
totalSteps,
|
|
14578
14758
|
")"
|
|
14579
14759
|
] }),
|
|
14580
|
-
error && /* @__PURE__ */
|
|
14581
|
-
/* @__PURE__ */
|
|
14760
|
+
error && /* @__PURE__ */ jsx20(Text19, { color: theme.error, children: error }),
|
|
14761
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14582
14762
|
CustomTextInput,
|
|
14583
14763
|
{
|
|
14584
14764
|
value: name,
|
|
@@ -14587,11 +14767,11 @@ ${template}`;
|
|
|
14587
14767
|
focus: true
|
|
14588
14768
|
}
|
|
14589
14769
|
) }),
|
|
14590
|
-
/* @__PURE__ */
|
|
14770
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "letters, numbers, _ - / only; must start with a letter" })
|
|
14591
14771
|
] });
|
|
14592
14772
|
case "description":
|
|
14593
|
-
return /* @__PURE__ */
|
|
14594
|
-
/* @__PURE__ */
|
|
14773
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14774
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14595
14775
|
mode === "create" ? "Create" : "Edit",
|
|
14596
14776
|
" custom command \u2014 Description (",
|
|
14597
14777
|
stepIndex,
|
|
@@ -14599,7 +14779,7 @@ ${template}`;
|
|
|
14599
14779
|
totalSteps,
|
|
14600
14780
|
")"
|
|
14601
14781
|
] }),
|
|
14602
|
-
/* @__PURE__ */
|
|
14782
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14603
14783
|
CustomTextInput,
|
|
14604
14784
|
{
|
|
14605
14785
|
value: description,
|
|
@@ -14608,49 +14788,49 @@ ${template}`;
|
|
|
14608
14788
|
focus: true
|
|
14609
14789
|
}
|
|
14610
14790
|
) }),
|
|
14611
|
-
/* @__PURE__ */
|
|
14791
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Press Enter to skip" })
|
|
14612
14792
|
] });
|
|
14613
14793
|
case "template": {
|
|
14614
|
-
const guide = /* @__PURE__ */
|
|
14615
|
-
/* @__PURE__ */
|
|
14616
|
-
/* @__PURE__ */
|
|
14617
|
-
/* @__PURE__ */
|
|
14794
|
+
const guide = /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", paddingLeft: 1, children: [
|
|
14795
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.accent, bold: true, children: "What is this?" }),
|
|
14796
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "A prompt template \u2014 instructions to the AI." }),
|
|
14797
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.info.color, children: [
|
|
14618
14798
|
"When you type /",
|
|
14619
14799
|
name || "yourcommand",
|
|
14620
14800
|
" later, this gets sent to the model."
|
|
14621
14801
|
] }),
|
|
14622
|
-
/* @__PURE__ */
|
|
14623
|
-
/* @__PURE__ */
|
|
14624
|
-
/* @__PURE__ */
|
|
14802
|
+
/* @__PURE__ */ jsxs18(Box18, { marginTop: 1, flexDirection: "column", children: [
|
|
14803
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.accent, bold: true, children: "Variables" }),
|
|
14804
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.info.color, children: [
|
|
14625
14805
|
" ",
|
|
14626
14806
|
"$1, $2 ... \u2192 arguments you type"
|
|
14627
14807
|
] }),
|
|
14628
|
-
/* @__PURE__ */
|
|
14808
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.info.color, children: [
|
|
14629
14809
|
" ",
|
|
14630
14810
|
"$ARGUMENTS \u2192 everything after the command"
|
|
14631
14811
|
] })
|
|
14632
14812
|
] }),
|
|
14633
|
-
/* @__PURE__ */
|
|
14634
|
-
/* @__PURE__ */
|
|
14635
|
-
/* @__PURE__ */
|
|
14813
|
+
/* @__PURE__ */ jsxs18(Box18, { marginTop: 1, flexDirection: "column", children: [
|
|
14814
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.accent, bold: true, children: "Dynamic inlines" }),
|
|
14815
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.info.color, children: [
|
|
14636
14816
|
" ",
|
|
14637
14817
|
"!`git diff` \u2192 shell output inlined"
|
|
14638
14818
|
] }),
|
|
14639
|
-
/* @__PURE__ */
|
|
14819
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.info.color, children: [
|
|
14640
14820
|
" ",
|
|
14641
14821
|
"@README.md \u2192 file contents inlined"
|
|
14642
14822
|
] })
|
|
14643
14823
|
] }),
|
|
14644
|
-
/* @__PURE__ */
|
|
14645
|
-
/* @__PURE__ */
|
|
14646
|
-
/* @__PURE__ */
|
|
14647
|
-
/* @__PURE__ */
|
|
14648
|
-
/* @__PURE__ */
|
|
14824
|
+
/* @__PURE__ */ jsxs18(Box18, { marginTop: 1, flexDirection: "column", children: [
|
|
14825
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.accent, bold: true, children: "Example" }),
|
|
14826
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Review this PR diff:" }),
|
|
14827
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "!`git diff main...HEAD`" }),
|
|
14828
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Focus on: $1" })
|
|
14649
14829
|
] })
|
|
14650
14830
|
] });
|
|
14651
|
-
const inputArea = /* @__PURE__ */
|
|
14652
|
-
error && /* @__PURE__ */
|
|
14653
|
-
/* @__PURE__ */
|
|
14831
|
+
const inputArea = /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", flexGrow: 1, children: [
|
|
14832
|
+
error && /* @__PURE__ */ jsx20(Text19, { color: theme.error, children: error }),
|
|
14833
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14654
14834
|
CustomTextInput,
|
|
14655
14835
|
{
|
|
14656
14836
|
value: template,
|
|
@@ -14660,13 +14840,13 @@ ${template}`;
|
|
|
14660
14840
|
enablePaste: true
|
|
14661
14841
|
}
|
|
14662
14842
|
) }),
|
|
14663
|
-
columns < 100 && /* @__PURE__ */
|
|
14664
|
-
/* @__PURE__ */
|
|
14665
|
-
/* @__PURE__ */
|
|
14843
|
+
columns < 100 && /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14844
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Paste multi-line templates with Ctrl+V." }),
|
|
14845
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Variables: $1 $2 ... $ARGUMENTS Shell: !`cmd` File: @path" })
|
|
14666
14846
|
] })
|
|
14667
14847
|
] });
|
|
14668
|
-
return /* @__PURE__ */
|
|
14669
|
-
/* @__PURE__ */
|
|
14848
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14849
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14670
14850
|
mode === "create" ? "Create" : "Edit",
|
|
14671
14851
|
" custom command \u2014 Template (",
|
|
14672
14852
|
stepIndex,
|
|
@@ -14674,10 +14854,10 @@ ${template}`;
|
|
|
14674
14854
|
totalSteps,
|
|
14675
14855
|
")"
|
|
14676
14856
|
] }),
|
|
14677
|
-
columns >= 100 ? /* @__PURE__ */
|
|
14678
|
-
/* @__PURE__ */
|
|
14679
|
-
/* @__PURE__ */
|
|
14680
|
-
] }) : /* @__PURE__ */
|
|
14857
|
+
columns >= 100 ? /* @__PURE__ */ jsxs18(Box18, { flexDirection: "row", marginTop: 1, children: [
|
|
14858
|
+
/* @__PURE__ */ jsx20(Box18, { flexDirection: "column", width: "50%", children: inputArea }),
|
|
14859
|
+
/* @__PURE__ */ jsx20(Box18, { flexDirection: "column", width: "50%", children: guide })
|
|
14860
|
+
] }) : /* @__PURE__ */ jsx20(Box18, { flexDirection: "column", marginTop: 1, children: inputArea })
|
|
14681
14861
|
] });
|
|
14682
14862
|
}
|
|
14683
14863
|
case "advanced": {
|
|
@@ -14686,8 +14866,8 @@ ${template}`;
|
|
|
14686
14866
|
{ label: "Skip", value: "skip", key: "skip" },
|
|
14687
14867
|
{ label: "\u2190 Cancel", value: "cancel", key: "cancel" }
|
|
14688
14868
|
];
|
|
14689
|
-
return /* @__PURE__ */
|
|
14690
|
-
/* @__PURE__ */
|
|
14869
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14870
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14691
14871
|
mode === "create" ? "Create" : "Edit",
|
|
14692
14872
|
" custom command \u2014 Options (",
|
|
14693
14873
|
stepIndex,
|
|
@@ -14695,7 +14875,7 @@ ${template}`;
|
|
|
14695
14875
|
totalSteps,
|
|
14696
14876
|
")"
|
|
14697
14877
|
] }),
|
|
14698
|
-
/* @__PURE__ */
|
|
14878
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14699
14879
|
SelectInput6,
|
|
14700
14880
|
{
|
|
14701
14881
|
items,
|
|
@@ -14715,16 +14895,16 @@ ${template}`;
|
|
|
14715
14895
|
{ label: cmdMode === "auto" ? "auto \xB7 current" : "auto", value: "auto", key: "auto" },
|
|
14716
14896
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
14717
14897
|
];
|
|
14718
|
-
return /* @__PURE__ */
|
|
14719
|
-
/* @__PURE__ */
|
|
14898
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14899
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14720
14900
|
"Mode override (",
|
|
14721
14901
|
stepIndex,
|
|
14722
14902
|
"/",
|
|
14723
14903
|
totalSteps,
|
|
14724
14904
|
")"
|
|
14725
14905
|
] }),
|
|
14726
|
-
/* @__PURE__ */
|
|
14727
|
-
/* @__PURE__ */
|
|
14906
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Saved to file but not yet enforced at runtime" }),
|
|
14907
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14728
14908
|
SelectInput6,
|
|
14729
14909
|
{
|
|
14730
14910
|
items,
|
|
@@ -14744,15 +14924,15 @@ ${template}`;
|
|
|
14744
14924
|
{ label: cmdEffort === "high" ? "high \xB7 current" : "high", value: "high", key: "high" },
|
|
14745
14925
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
14746
14926
|
];
|
|
14747
|
-
return /* @__PURE__ */
|
|
14748
|
-
/* @__PURE__ */
|
|
14927
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14928
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14749
14929
|
"Reasoning effort (",
|
|
14750
14930
|
stepIndex,
|
|
14751
14931
|
"/",
|
|
14752
14932
|
totalSteps,
|
|
14753
14933
|
")"
|
|
14754
14934
|
] }),
|
|
14755
|
-
/* @__PURE__ */
|
|
14935
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14756
14936
|
SelectInput6,
|
|
14757
14937
|
{
|
|
14758
14938
|
items,
|
|
@@ -14765,15 +14945,15 @@ ${template}`;
|
|
|
14765
14945
|
] });
|
|
14766
14946
|
}
|
|
14767
14947
|
case "model":
|
|
14768
|
-
return /* @__PURE__ */
|
|
14769
|
-
/* @__PURE__ */
|
|
14948
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14949
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14770
14950
|
"Model override (",
|
|
14771
14951
|
stepIndex,
|
|
14772
14952
|
"/",
|
|
14773
14953
|
totalSteps,
|
|
14774
14954
|
")"
|
|
14775
14955
|
] }),
|
|
14776
|
-
/* @__PURE__ */
|
|
14956
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14777
14957
|
CustomTextInput,
|
|
14778
14958
|
{
|
|
14779
14959
|
value: cmdModel ?? "",
|
|
@@ -14782,7 +14962,7 @@ ${template}`;
|
|
|
14782
14962
|
focus: true
|
|
14783
14963
|
}
|
|
14784
14964
|
) }),
|
|
14785
|
-
/* @__PURE__ */
|
|
14965
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Press Enter to skip" })
|
|
14786
14966
|
] });
|
|
14787
14967
|
case "location": {
|
|
14788
14968
|
const items = [
|
|
@@ -14790,15 +14970,15 @@ ${template}`;
|
|
|
14790
14970
|
{ label: source === "global" ? "Global \xB7 current" : "Global", value: "global", key: "global" },
|
|
14791
14971
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
14792
14972
|
];
|
|
14793
|
-
return /* @__PURE__ */
|
|
14794
|
-
/* @__PURE__ */
|
|
14973
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
14974
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14795
14975
|
"Save location (",
|
|
14796
14976
|
stepIndex,
|
|
14797
14977
|
"/",
|
|
14798
14978
|
totalSteps,
|
|
14799
14979
|
")"
|
|
14800
14980
|
] }),
|
|
14801
|
-
/* @__PURE__ */
|
|
14981
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14802
14982
|
SelectInput6,
|
|
14803
14983
|
{
|
|
14804
14984
|
items,
|
|
@@ -14808,7 +14988,7 @@ ${template}`;
|
|
|
14808
14988
|
}
|
|
14809
14989
|
}
|
|
14810
14990
|
) }),
|
|
14811
|
-
/* @__PURE__ */
|
|
14991
|
+
/* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Project: .kimiflare/commands/ Global: ~/.config/kimiflare/commands/" })
|
|
14812
14992
|
] });
|
|
14813
14993
|
}
|
|
14814
14994
|
case "confirm": {
|
|
@@ -14816,8 +14996,8 @@ ${template}`;
|
|
|
14816
14996
|
{ label: "Save", value: "save", key: "save" },
|
|
14817
14997
|
{ label: "Cancel", value: "cancel", key: "cancel" }
|
|
14818
14998
|
];
|
|
14819
|
-
return /* @__PURE__ */
|
|
14820
|
-
/* @__PURE__ */
|
|
14999
|
+
return /* @__PURE__ */ jsxs18(Fragment3, { children: [
|
|
15000
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.accent, bold: true, children: [
|
|
14821
15001
|
mode === "create" ? "Create" : "Edit",
|
|
14822
15002
|
" custom command \u2014 Confirm (",
|
|
14823
15003
|
stepIndex,
|
|
@@ -14825,13 +15005,13 @@ ${template}`;
|
|
|
14825
15005
|
totalSteps,
|
|
14826
15006
|
")"
|
|
14827
15007
|
] }),
|
|
14828
|
-
/* @__PURE__ */
|
|
15008
|
+
/* @__PURE__ */ jsxs18(Text19, { color: theme.info.color, children: [
|
|
14829
15009
|
source === "project" ? ".kimiflare/commands/" : "~/.config/kimiflare/commands/",
|
|
14830
15010
|
name,
|
|
14831
15011
|
".md"
|
|
14832
15012
|
] }),
|
|
14833
|
-
/* @__PURE__ */
|
|
14834
|
-
/* @__PURE__ */
|
|
15013
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, flexDirection: "column", children: previewContent().split("\n").map((line, i) => /* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: line || " " }, i)) }),
|
|
15014
|
+
/* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
|
|
14835
15015
|
SelectInput6,
|
|
14836
15016
|
{
|
|
14837
15017
|
items,
|
|
@@ -14842,7 +15022,7 @@ ${template}`;
|
|
|
14842
15022
|
}
|
|
14843
15023
|
}
|
|
14844
15024
|
};
|
|
14845
|
-
return /* @__PURE__ */
|
|
15025
|
+
return /* @__PURE__ */ jsx20(Box18, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: renderStep() });
|
|
14846
15026
|
}
|
|
14847
15027
|
var NAME_RE;
|
|
14848
15028
|
var init_command_wizard = __esm({
|
|
@@ -15287,9 +15467,9 @@ var init_context_generator = __esm({
|
|
|
15287
15467
|
});
|
|
15288
15468
|
|
|
15289
15469
|
// src/ui/command-picker.tsx
|
|
15290
|
-
import { Box as
|
|
15470
|
+
import { Box as Box19, Text as Text20 } from "ink";
|
|
15291
15471
|
import SelectInput7 from "ink-select-input";
|
|
15292
|
-
import { jsx as
|
|
15472
|
+
import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
15293
15473
|
function CommandPicker({ commands, title, onPick }) {
|
|
15294
15474
|
const theme = useTheme();
|
|
15295
15475
|
const items = commands.map((cmd) => ({
|
|
@@ -15298,10 +15478,10 @@ function CommandPicker({ commands, title, onPick }) {
|
|
|
15298
15478
|
key: cmd.name
|
|
15299
15479
|
}));
|
|
15300
15480
|
items.push({ label: "\u2190 Cancel", value: null, key: "__cancel__" });
|
|
15301
|
-
return /* @__PURE__ */
|
|
15302
|
-
/* @__PURE__ */
|
|
15303
|
-
/* @__PURE__ */
|
|
15304
|
-
/* @__PURE__ */
|
|
15481
|
+
return /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15482
|
+
/* @__PURE__ */ jsx21(Text20, { color: theme.accent, bold: true, children: title }),
|
|
15483
|
+
/* @__PURE__ */ jsx21(Text20, { color: theme.info.color, dimColor: false, children: "Arrow keys to navigate, Enter to select." }),
|
|
15484
|
+
/* @__PURE__ */ jsx21(Box19, { marginTop: 1, children: /* @__PURE__ */ jsx21(
|
|
15305
15485
|
SelectInput7,
|
|
15306
15486
|
{
|
|
15307
15487
|
items,
|
|
@@ -15324,64 +15504,64 @@ var init_command_picker = __esm({
|
|
|
15324
15504
|
});
|
|
15325
15505
|
|
|
15326
15506
|
// src/ui/command-list.tsx
|
|
15327
|
-
import { Box as
|
|
15328
|
-
import { jsx as
|
|
15507
|
+
import { Box as Box20, Text as Text21, useInput as useInput9 } from "ink";
|
|
15508
|
+
import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
15329
15509
|
function CommandList({ commands, onDone }) {
|
|
15330
15510
|
const theme = useTheme();
|
|
15331
|
-
|
|
15511
|
+
useInput9((_input, key) => {
|
|
15332
15512
|
if (key.escape) {
|
|
15333
15513
|
onDone();
|
|
15334
15514
|
}
|
|
15335
15515
|
});
|
|
15336
|
-
return /* @__PURE__ */
|
|
15337
|
-
/* @__PURE__ */
|
|
15338
|
-
/* @__PURE__ */
|
|
15339
|
-
/* @__PURE__ */
|
|
15340
|
-
commands.length === 0 && /* @__PURE__ */
|
|
15341
|
-
commands.map((cmd) => /* @__PURE__ */
|
|
15342
|
-
/* @__PURE__ */
|
|
15516
|
+
return /* @__PURE__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15517
|
+
/* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Custom commands" }),
|
|
15518
|
+
/* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Esc to close." }),
|
|
15519
|
+
/* @__PURE__ */ jsxs20(Box20, { marginTop: 1, flexDirection: "column", children: [
|
|
15520
|
+
commands.length === 0 && /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, children: "No custom commands found." }),
|
|
15521
|
+
commands.map((cmd) => /* @__PURE__ */ jsxs20(Box20, { flexDirection: "column", marginBottom: 1, children: [
|
|
15522
|
+
/* @__PURE__ */ jsxs20(Text21, { color: theme.accent, bold: true, children: [
|
|
15343
15523
|
"/",
|
|
15344
15524
|
cmd.name
|
|
15345
15525
|
] }),
|
|
15346
|
-
/* @__PURE__ */
|
|
15526
|
+
/* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15347
15527
|
" ",
|
|
15348
15528
|
"source: ",
|
|
15349
15529
|
cmd.source
|
|
15350
15530
|
] }),
|
|
15351
|
-
/* @__PURE__ */
|
|
15531
|
+
/* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15352
15532
|
" ",
|
|
15353
15533
|
"path: ",
|
|
15354
15534
|
cmd.filepath
|
|
15355
15535
|
] }),
|
|
15356
|
-
cmd.description && /* @__PURE__ */
|
|
15536
|
+
cmd.description && /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15357
15537
|
" ",
|
|
15358
15538
|
"desc: ",
|
|
15359
15539
|
cmd.description
|
|
15360
15540
|
] }),
|
|
15361
|
-
cmd.mode && /* @__PURE__ */
|
|
15541
|
+
cmd.mode && /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15362
15542
|
" ",
|
|
15363
15543
|
"mode: ",
|
|
15364
15544
|
cmd.mode
|
|
15365
15545
|
] }),
|
|
15366
|
-
cmd.effort && /* @__PURE__ */
|
|
15546
|
+
cmd.effort && /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15367
15547
|
" ",
|
|
15368
15548
|
"effort: ",
|
|
15369
15549
|
cmd.effort
|
|
15370
15550
|
] }),
|
|
15371
|
-
cmd.model && /* @__PURE__ */
|
|
15551
|
+
cmd.model && /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15372
15552
|
" ",
|
|
15373
15553
|
"model: ",
|
|
15374
15554
|
cmd.model
|
|
15375
15555
|
] }),
|
|
15376
|
-
/* @__PURE__ */
|
|
15556
|
+
/* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15377
15557
|
" ",
|
|
15378
15558
|
"template:"
|
|
15379
15559
|
] }),
|
|
15380
|
-
cmd.template.split("\n").slice(0, 5).map((line, i) => /* @__PURE__ */
|
|
15560
|
+
cmd.template.split("\n").slice(0, 5).map((line, i) => /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15381
15561
|
" ",
|
|
15382
15562
|
line || " "
|
|
15383
15563
|
] }, i)),
|
|
15384
|
-
cmd.template.split("\n").length > 5 && /* @__PURE__ */
|
|
15564
|
+
cmd.template.split("\n").length > 5 && /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
|
|
15385
15565
|
" ",
|
|
15386
15566
|
"..."
|
|
15387
15567
|
] })
|
|
@@ -15397,20 +15577,20 @@ var init_command_list = __esm({
|
|
|
15397
15577
|
});
|
|
15398
15578
|
|
|
15399
15579
|
// src/ui/lsp-wizard.tsx
|
|
15400
|
-
import { useState as
|
|
15401
|
-
import { Box as
|
|
15580
|
+
import { useState as useState12 } from "react";
|
|
15581
|
+
import { Box as Box21, Text as Text22 } from "ink";
|
|
15402
15582
|
import SelectInput8 from "ink-select-input";
|
|
15403
15583
|
import { spawn as spawn3 } from "child_process";
|
|
15404
|
-
import { jsx as
|
|
15584
|
+
import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
15405
15585
|
function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
15406
15586
|
const theme = useTheme();
|
|
15407
|
-
const [page, setPage] =
|
|
15408
|
-
const [selectedPreset, setSelectedPreset] =
|
|
15409
|
-
const [customName, setCustomName] =
|
|
15410
|
-
const [customCommand, setCustomCommand] =
|
|
15411
|
-
const [installState, setInstallState] =
|
|
15412
|
-
const [pendingServers, setPendingServers] =
|
|
15413
|
-
const [pendingEnabled, setPendingEnabled] =
|
|
15587
|
+
const [page, setPage] = useState12("main");
|
|
15588
|
+
const [selectedPreset, setSelectedPreset] = useState12(null);
|
|
15589
|
+
const [customName, setCustomName] = useState12("");
|
|
15590
|
+
const [customCommand, setCustomCommand] = useState12("");
|
|
15591
|
+
const [installState, setInstallState] = useState12({ status: "idle", output: "" });
|
|
15592
|
+
const [pendingServers, setPendingServers] = useState12(null);
|
|
15593
|
+
const [pendingEnabled, setPendingEnabled] = useState12(true);
|
|
15414
15594
|
const runInstall = (command) => {
|
|
15415
15595
|
setInstallState({ status: "running", output: "Installing..." });
|
|
15416
15596
|
const { shell, args } = getShellCommand();
|
|
@@ -15513,10 +15693,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15513
15693
|
{ label: "(close)", value: "__close__", key: "__close__" }
|
|
15514
15694
|
];
|
|
15515
15695
|
if (page === "main") {
|
|
15516
|
-
return /* @__PURE__ */
|
|
15517
|
-
/* @__PURE__ */
|
|
15518
|
-
/* @__PURE__ */
|
|
15519
|
-
/* @__PURE__ */
|
|
15696
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15697
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "LSP Servers" }),
|
|
15698
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Arrow keys to navigate, Enter to select." }),
|
|
15699
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15520
15700
|
SelectInput8,
|
|
15521
15701
|
{
|
|
15522
15702
|
items: mainItems,
|
|
@@ -15544,10 +15724,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15544
15724
|
}),
|
|
15545
15725
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
15546
15726
|
];
|
|
15547
|
-
return /* @__PURE__ */
|
|
15548
|
-
/* @__PURE__ */
|
|
15549
|
-
/* @__PURE__ */
|
|
15550
|
-
/* @__PURE__ */
|
|
15727
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15728
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Add LSP Server" }),
|
|
15729
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Select a language server to configure." }),
|
|
15730
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15551
15731
|
SelectInput8,
|
|
15552
15732
|
{
|
|
15553
15733
|
items,
|
|
@@ -15575,18 +15755,18 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15575
15755
|
{ label: isSuccess ? "Save to config \u2713" : "Save anyway", value: "save", key: "save" },
|
|
15576
15756
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
15577
15757
|
];
|
|
15578
|
-
return /* @__PURE__ */
|
|
15579
|
-
/* @__PURE__ */
|
|
15758
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15759
|
+
/* @__PURE__ */ jsxs21(Text22, { color: theme.accent, bold: true, children: [
|
|
15580
15760
|
"Install ",
|
|
15581
15761
|
selectedPreset.name
|
|
15582
15762
|
] }),
|
|
15583
|
-
/* @__PURE__ */
|
|
15584
|
-
/* @__PURE__ */
|
|
15585
|
-
/* @__PURE__ */
|
|
15586
|
-
/* @__PURE__ */
|
|
15763
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: selectedPreset.installHint }),
|
|
15764
|
+
/* @__PURE__ */ jsxs21(Box21, { marginTop: 1, flexDirection: "column", children: [
|
|
15765
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Command:" }),
|
|
15766
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, children: selectedPreset.installCommand || "(none required)" })
|
|
15587
15767
|
] }),
|
|
15588
|
-
installState.output && /* @__PURE__ */
|
|
15589
|
-
/* @__PURE__ */
|
|
15768
|
+
installState.output && /* @__PURE__ */ jsx23(Box21, { marginTop: 1, flexDirection: "column", children: /* @__PURE__ */ jsx23(Text22, { color: isSuccess ? theme.accent : theme.error, children: installState.output.slice(-500) }) }),
|
|
15769
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15590
15770
|
SelectInput8,
|
|
15591
15771
|
{
|
|
15592
15772
|
items,
|
|
@@ -15604,16 +15784,16 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15604
15784
|
}
|
|
15605
15785
|
}
|
|
15606
15786
|
) }),
|
|
15607
|
-
isSuccess && /* @__PURE__ */
|
|
15787
|
+
isSuccess && /* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(Text22, { color: theme.accent, children: "Server saved. Run /lsp reload to start it." }) })
|
|
15608
15788
|
] });
|
|
15609
15789
|
}
|
|
15610
15790
|
if (page === "custom-name") {
|
|
15611
|
-
return /* @__PURE__ */
|
|
15612
|
-
/* @__PURE__ */
|
|
15613
|
-
/* @__PURE__ */
|
|
15614
|
-
/* @__PURE__ */
|
|
15615
|
-
/* @__PURE__ */
|
|
15616
|
-
/* @__PURE__ */
|
|
15791
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15792
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Custom LSP Server \u2014 Name" }),
|
|
15793
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Enter a name for this server (e.g., my-server)." }),
|
|
15794
|
+
/* @__PURE__ */ jsxs21(Box21, { marginTop: 1, children: [
|
|
15795
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, children: "\u203A " }),
|
|
15796
|
+
/* @__PURE__ */ jsx23(
|
|
15617
15797
|
CustomTextInput,
|
|
15618
15798
|
{
|
|
15619
15799
|
value: customName,
|
|
@@ -15627,7 +15807,7 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15627
15807
|
}
|
|
15628
15808
|
)
|
|
15629
15809
|
] }),
|
|
15630
|
-
/* @__PURE__ */
|
|
15810
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15631
15811
|
SelectInput8,
|
|
15632
15812
|
{
|
|
15633
15813
|
items: [{ label: "\u2190 Back", value: "__back__", key: "__back__" }],
|
|
@@ -15637,12 +15817,12 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15637
15817
|
] });
|
|
15638
15818
|
}
|
|
15639
15819
|
if (page === "custom-command") {
|
|
15640
|
-
return /* @__PURE__ */
|
|
15641
|
-
/* @__PURE__ */
|
|
15642
|
-
/* @__PURE__ */
|
|
15643
|
-
/* @__PURE__ */
|
|
15644
|
-
/* @__PURE__ */
|
|
15645
|
-
/* @__PURE__ */
|
|
15820
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15821
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Custom LSP Server \u2014 Command" }),
|
|
15822
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Enter the command to start the server (space-separated)." }),
|
|
15823
|
+
/* @__PURE__ */ jsxs21(Box21, { marginTop: 1, children: [
|
|
15824
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, children: "\u203A " }),
|
|
15825
|
+
/* @__PURE__ */ jsx23(
|
|
15646
15826
|
CustomTextInput,
|
|
15647
15827
|
{
|
|
15648
15828
|
value: customCommand,
|
|
@@ -15656,7 +15836,7 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15656
15836
|
}
|
|
15657
15837
|
)
|
|
15658
15838
|
] }),
|
|
15659
|
-
/* @__PURE__ */
|
|
15839
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15660
15840
|
SelectInput8,
|
|
15661
15841
|
{
|
|
15662
15842
|
items: [{ label: "\u2190 Back", value: "__back__", key: "__back__" }],
|
|
@@ -15680,10 +15860,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15680
15860
|
},
|
|
15681
15861
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
15682
15862
|
];
|
|
15683
|
-
return /* @__PURE__ */
|
|
15684
|
-
/* @__PURE__ */
|
|
15685
|
-
/* @__PURE__ */
|
|
15686
|
-
/* @__PURE__ */
|
|
15863
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15864
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Save LSP Config" }),
|
|
15865
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Where should this server configuration be saved?" }),
|
|
15866
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15687
15867
|
SelectInput8,
|
|
15688
15868
|
{
|
|
15689
15869
|
items,
|
|
@@ -15702,10 +15882,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15702
15882
|
if (page === "edit") {
|
|
15703
15883
|
const keys = Object.keys(servers);
|
|
15704
15884
|
if (keys.length === 0) {
|
|
15705
|
-
return /* @__PURE__ */
|
|
15706
|
-
/* @__PURE__ */
|
|
15707
|
-
/* @__PURE__ */
|
|
15708
|
-
/* @__PURE__ */
|
|
15885
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15886
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Edit LSP Server" }),
|
|
15887
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, children: "No servers configured." }),
|
|
15888
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15709
15889
|
SelectInput8,
|
|
15710
15890
|
{
|
|
15711
15891
|
items: [{ label: "\u2190 Back", value: "__back__", key: "__back__" }],
|
|
@@ -15726,10 +15906,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15726
15906
|
}),
|
|
15727
15907
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
15728
15908
|
];
|
|
15729
|
-
return /* @__PURE__ */
|
|
15730
|
-
/* @__PURE__ */
|
|
15731
|
-
/* @__PURE__ */
|
|
15732
|
-
/* @__PURE__ */
|
|
15909
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15910
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Edit LSP Server" }),
|
|
15911
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Select a server to toggle enabled/disabled." }),
|
|
15912
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15733
15913
|
SelectInput8,
|
|
15734
15914
|
{
|
|
15735
15915
|
items,
|
|
@@ -15747,10 +15927,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15747
15927
|
if (page === "delete") {
|
|
15748
15928
|
const keys = Object.keys(servers);
|
|
15749
15929
|
if (keys.length === 0) {
|
|
15750
|
-
return /* @__PURE__ */
|
|
15751
|
-
/* @__PURE__ */
|
|
15752
|
-
/* @__PURE__ */
|
|
15753
|
-
/* @__PURE__ */
|
|
15930
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15931
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Delete LSP Server" }),
|
|
15932
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, children: "No servers configured." }),
|
|
15933
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15754
15934
|
SelectInput8,
|
|
15755
15935
|
{
|
|
15756
15936
|
items: [{ label: "\u2190 Back", value: "__back__", key: "__back__" }],
|
|
@@ -15767,10 +15947,10 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15767
15947
|
})),
|
|
15768
15948
|
{ label: "\u2190 Back", value: "__back__", key: "__back__" }
|
|
15769
15949
|
];
|
|
15770
|
-
return /* @__PURE__ */
|
|
15771
|
-
/* @__PURE__ */
|
|
15772
|
-
/* @__PURE__ */
|
|
15773
|
-
/* @__PURE__ */
|
|
15950
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15951
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Delete LSP Server" }),
|
|
15952
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.info.color, dimColor: false, children: "Select a server to remove from config." }),
|
|
15953
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15774
15954
|
SelectInput8,
|
|
15775
15955
|
{
|
|
15776
15956
|
items,
|
|
@@ -15787,14 +15967,14 @@ function LspWizard({ servers, currentScope, hasProjectDir, onDone, onSave }) {
|
|
|
15787
15967
|
}
|
|
15788
15968
|
if (page === "list") {
|
|
15789
15969
|
const keys = Object.keys(servers);
|
|
15790
|
-
return /* @__PURE__ */
|
|
15791
|
-
/* @__PURE__ */
|
|
15792
|
-
keys.length === 0 ? /* @__PURE__ */
|
|
15970
|
+
return /* @__PURE__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
15971
|
+
/* @__PURE__ */ jsx23(Text22, { color: theme.accent, bold: true, children: "Configured LSP Servers" }),
|
|
15972
|
+
keys.length === 0 ? /* @__PURE__ */ jsx23(Text22, { color: theme.info.color, children: "No servers configured." }) : /* @__PURE__ */ jsx23(Box21, { marginTop: 1, flexDirection: "column", children: keys.map((k) => {
|
|
15793
15973
|
const s = servers[k];
|
|
15794
15974
|
const status = s.enabled !== false ? "enabled" : "disabled";
|
|
15795
|
-
return /* @__PURE__ */
|
|
15975
|
+
return /* @__PURE__ */ jsx23(Text22, { color: theme.info.color, children: ` ${k.padEnd(16)} ${status} ${s.command.join(" ")}` }, k);
|
|
15796
15976
|
}) }),
|
|
15797
|
-
/* @__PURE__ */
|
|
15977
|
+
/* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
|
|
15798
15978
|
SelectInput8,
|
|
15799
15979
|
{
|
|
15800
15980
|
items: [{ label: "\u2190 Back", value: "__back__", key: "__back__" }],
|
|
@@ -15922,9 +16102,9 @@ var init_lsp_wizard = __esm({
|
|
|
15922
16102
|
});
|
|
15923
16103
|
|
|
15924
16104
|
// src/ui/theme-picker.tsx
|
|
15925
|
-
import { Box as
|
|
16105
|
+
import { Box as Box22, Text as Text23 } from "ink";
|
|
15926
16106
|
import SelectInput9 from "ink-select-input";
|
|
15927
|
-
import { jsx as
|
|
16107
|
+
import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
15928
16108
|
function PaletteSwatches({ palette }) {
|
|
15929
16109
|
const colors = [
|
|
15930
16110
|
palette.primary,
|
|
@@ -15932,7 +16112,7 @@ function PaletteSwatches({ palette }) {
|
|
|
15932
16112
|
palette.success,
|
|
15933
16113
|
palette.error
|
|
15934
16114
|
];
|
|
15935
|
-
return /* @__PURE__ */
|
|
16115
|
+
return /* @__PURE__ */ jsx24(Box22, { children: colors.map((c, i) => /* @__PURE__ */ jsx24(Text23, { color: c, children: "\u2588" }, i)) });
|
|
15936
16116
|
}
|
|
15937
16117
|
function ThemePicker({ themes, onPick }) {
|
|
15938
16118
|
const current = useTheme();
|
|
@@ -15940,9 +16120,9 @@ function ThemePicker({ themes, onPick }) {
|
|
|
15940
16120
|
...themes.map((t) => ({ label: t.label, value: t.name })),
|
|
15941
16121
|
{ label: "< Back", value: "__back__" }
|
|
15942
16122
|
];
|
|
15943
|
-
return /* @__PURE__ */
|
|
15944
|
-
/* @__PURE__ */
|
|
15945
|
-
/* @__PURE__ */
|
|
16123
|
+
return /* @__PURE__ */ jsxs22(Box22, { flexDirection: "column", borderStyle: "round", borderColor: current.accent, paddingX: 1, children: [
|
|
16124
|
+
/* @__PURE__ */ jsx24(Text23, { color: current.accent, bold: true, children: "Pick a theme (restart to apply)" }),
|
|
16125
|
+
/* @__PURE__ */ jsx24(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx24(
|
|
15946
16126
|
SelectInput9,
|
|
15947
16127
|
{
|
|
15948
16128
|
items,
|
|
@@ -15957,9 +16137,9 @@ function ThemePicker({ themes, onPick }) {
|
|
|
15957
16137
|
itemComponent: ({ label, isSelected }) => {
|
|
15958
16138
|
const t = themes.find((x) => x.label === label);
|
|
15959
16139
|
const color = t?.accent ?? current.accent;
|
|
15960
|
-
return /* @__PURE__ */
|
|
15961
|
-
/* @__PURE__ */
|
|
15962
|
-
t && /* @__PURE__ */
|
|
16140
|
+
return /* @__PURE__ */ jsxs22(Box22, { children: [
|
|
16141
|
+
/* @__PURE__ */ jsx24(Text23, { color, bold: isSelected, dimColor: !isSelected, children: label }),
|
|
16142
|
+
t && /* @__PURE__ */ jsx24(Box22, { marginLeft: 1, children: /* @__PURE__ */ jsx24(PaletteSwatches, { palette: t.palette }) })
|
|
15963
16143
|
] });
|
|
15964
16144
|
}
|
|
15965
16145
|
}
|
|
@@ -17146,8 +17326,8 @@ var init_lsp_nudge = __esm({
|
|
|
17146
17326
|
});
|
|
17147
17327
|
|
|
17148
17328
|
// src/ui/file-picker.tsx
|
|
17149
|
-
import { Box as
|
|
17150
|
-
import { jsx as
|
|
17329
|
+
import { Box as Box23, Text as Text24 } from "ink";
|
|
17330
|
+
import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
17151
17331
|
function FilePicker({ items, selectedIndex, query, recentFiles }) {
|
|
17152
17332
|
const theme = useTheme();
|
|
17153
17333
|
let startIndex = 0;
|
|
@@ -17159,12 +17339,12 @@ function FilePicker({ items, selectedIndex, query, recentFiles }) {
|
|
|
17159
17339
|
const hasMoreBelow = items.length > startIndex + VISIBLE_LIMIT;
|
|
17160
17340
|
const recentInVisible = visible.filter((item) => recentFiles?.has(item.name)).length;
|
|
17161
17341
|
const hasRecentSection = recentInVisible > 0;
|
|
17162
|
-
return /* @__PURE__ */
|
|
17163
|
-
/* @__PURE__ */
|
|
17164
|
-
/* @__PURE__ */
|
|
17165
|
-
/* @__PURE__ */
|
|
17166
|
-
visible.length === 0 && /* @__PURE__ */
|
|
17167
|
-
hasMoreAbove && /* @__PURE__ */
|
|
17342
|
+
return /* @__PURE__ */ jsxs23(Box23, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
17343
|
+
/* @__PURE__ */ jsx25(Text24, { color: theme.accent, bold: true, children: query ? `Files matching "${query}"` : "Mention a file" }),
|
|
17344
|
+
/* @__PURE__ */ jsx25(Text24, { color: theme.info.color, dimColor: true, children: "\u2191\u2193 navigate \xB7 Enter pick \xB7 Esc cancel" }),
|
|
17345
|
+
/* @__PURE__ */ jsxs23(Box23, { marginTop: 1, flexDirection: "column", children: [
|
|
17346
|
+
visible.length === 0 && /* @__PURE__ */ jsx25(Text24, { color: theme.info.color, children: "No matches" }),
|
|
17347
|
+
hasMoreAbove && /* @__PURE__ */ jsxs23(Text24, { color: theme.info.color, dimColor: true, children: [
|
|
17168
17348
|
"\u2026 ",
|
|
17169
17349
|
startIndex,
|
|
17170
17350
|
" more above"
|
|
@@ -17176,28 +17356,28 @@ function FilePicker({ items, selectedIndex, query, recentFiles }) {
|
|
|
17176
17356
|
const label = item.isDirectory ? `${item.name}/` : item.name;
|
|
17177
17357
|
const isFirstRecent = isRecent && (i === 0 || !recentFiles?.has(visible[i - 1]?.name ?? ""));
|
|
17178
17358
|
const isFirstNonRecentAfterRecent = !isRecent && (i > 0 && recentFiles?.has(visible[i - 1]?.name ?? ""));
|
|
17179
|
-
return /* @__PURE__ */
|
|
17180
|
-
hasRecentSection && isFirstRecent && /* @__PURE__ */
|
|
17359
|
+
return /* @__PURE__ */ jsxs23(Box23, { flexDirection: "column", children: [
|
|
17360
|
+
hasRecentSection && isFirstRecent && /* @__PURE__ */ jsxs23(Text24, { color: theme.palette.success, bold: true, children: [
|
|
17181
17361
|
" ",
|
|
17182
17362
|
"Recent"
|
|
17183
17363
|
] }),
|
|
17184
|
-
hasRecentSection && isFirstNonRecentAfterRecent && /* @__PURE__ */
|
|
17364
|
+
hasRecentSection && isFirstNonRecentAfterRecent && /* @__PURE__ */ jsxs23(Text24, { color: theme.info.color, dimColor: true, children: [
|
|
17185
17365
|
" ",
|
|
17186
17366
|
"All files"
|
|
17187
17367
|
] }),
|
|
17188
|
-
/* @__PURE__ */
|
|
17368
|
+
/* @__PURE__ */ jsxs23(Text24, { color: isSelected ? theme.accent : isRecent ? theme.palette.success : void 0, bold: isSelected || isRecent, children: [
|
|
17189
17369
|
isSelected ? "\u203A " : isRecent ? "\u2192 " : " ",
|
|
17190
17370
|
isRecent ? "\u21BB " : "",
|
|
17191
17371
|
label
|
|
17192
17372
|
] })
|
|
17193
17373
|
] }, item.name);
|
|
17194
17374
|
}),
|
|
17195
|
-
hasMoreBelow && /* @__PURE__ */
|
|
17375
|
+
hasMoreBelow && /* @__PURE__ */ jsxs23(Text24, { color: theme.info.color, dimColor: true, children: [
|
|
17196
17376
|
"\u2026 ",
|
|
17197
17377
|
items.length - (startIndex + VISIBLE_LIMIT),
|
|
17198
17378
|
" more below"
|
|
17199
17379
|
] }),
|
|
17200
|
-
hasRecentSection && /* @__PURE__ */
|
|
17380
|
+
hasRecentSection && /* @__PURE__ */ jsx25(Box23, { marginTop: 1, children: /* @__PURE__ */ jsx25(Text24, { color: theme.info.color, dimColor: true, children: "\u21BB = recently used" }) })
|
|
17201
17381
|
] })
|
|
17202
17382
|
] });
|
|
17203
17383
|
}
|
|
@@ -17211,8 +17391,8 @@ var init_file_picker = __esm({
|
|
|
17211
17391
|
});
|
|
17212
17392
|
|
|
17213
17393
|
// src/ui/slash-picker.tsx
|
|
17214
|
-
import { Box as
|
|
17215
|
-
import { jsx as
|
|
17394
|
+
import { Box as Box24, Text as Text25 } from "ink";
|
|
17395
|
+
import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
17216
17396
|
function sourceBadge(source) {
|
|
17217
17397
|
if (source === "builtin") return "";
|
|
17218
17398
|
if (source === "project") return "project";
|
|
@@ -17232,12 +17412,12 @@ function SlashPicker({ items, selectedIndex, query }) {
|
|
|
17232
17412
|
const hasMoreBelow = items.length > startIndex + VISIBLE_LIMIT2;
|
|
17233
17413
|
const longestLabel = visible.reduce((m, it) => Math.max(m, commandLabel(it).length), 0);
|
|
17234
17414
|
const nameColWidth = Math.max(NAME_COL_MIN_WIDTH, longestLabel + NAME_DESC_GAP);
|
|
17235
|
-
return /* @__PURE__ */
|
|
17236
|
-
/* @__PURE__ */
|
|
17237
|
-
/* @__PURE__ */
|
|
17238
|
-
/* @__PURE__ */
|
|
17239
|
-
visible.length === 0 && /* @__PURE__ */
|
|
17240
|
-
hasMoreAbove && /* @__PURE__ */
|
|
17415
|
+
return /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
17416
|
+
/* @__PURE__ */ jsx26(Text25, { color: theme.accent, bold: true, children: query ? `Commands matching "/${query}"` : "Slash commands" }),
|
|
17417
|
+
/* @__PURE__ */ jsx26(Text25, { color: theme.info.color, children: "Arrow keys to navigate, Enter to select, Esc to cancel." }),
|
|
17418
|
+
/* @__PURE__ */ jsxs24(Box24, { marginTop: 1, flexDirection: "column", children: [
|
|
17419
|
+
visible.length === 0 && /* @__PURE__ */ jsx26(Text25, { color: theme.info.color, children: "No matches" }),
|
|
17420
|
+
hasMoreAbove && /* @__PURE__ */ jsxs24(Text25, { color: theme.info.color, children: [
|
|
17241
17421
|
"\u2026 ",
|
|
17242
17422
|
startIndex,
|
|
17243
17423
|
" more above"
|
|
@@ -17247,16 +17427,16 @@ function SlashPicker({ items, selectedIndex, query }) {
|
|
|
17247
17427
|
const isSelected = actualIndex === selectedIndex;
|
|
17248
17428
|
const nameCol = commandLabel(item).padEnd(nameColWidth);
|
|
17249
17429
|
const badge = sourceBadge(item.source);
|
|
17250
|
-
return /* @__PURE__ */
|
|
17430
|
+
return /* @__PURE__ */ jsxs24(Text25, { color: isSelected ? theme.accent : void 0, bold: isSelected, children: [
|
|
17251
17431
|
isSelected ? "\u203A " : " ",
|
|
17252
17432
|
nameCol,
|
|
17253
|
-
/* @__PURE__ */
|
|
17433
|
+
/* @__PURE__ */ jsxs24(Text25, { color: theme.info.color, children: [
|
|
17254
17434
|
item.description,
|
|
17255
17435
|
badge && ` [${badge}]`
|
|
17256
17436
|
] })
|
|
17257
17437
|
] }, item.name);
|
|
17258
17438
|
}),
|
|
17259
|
-
hasMoreBelow && /* @__PURE__ */
|
|
17439
|
+
hasMoreBelow && /* @__PURE__ */ jsxs24(Text25, { color: theme.info.color, children: [
|
|
17260
17440
|
"\u2026 ",
|
|
17261
17441
|
items.length - (startIndex + VISIBLE_LIMIT2),
|
|
17262
17442
|
" more below"
|
|
@@ -17366,18 +17546,19 @@ __export(app_exports, {
|
|
|
17366
17546
|
shouldOpenMentionPicker: () => shouldOpenMentionPicker,
|
|
17367
17547
|
shouldOpenSlashPicker: () => shouldOpenSlashPicker
|
|
17368
17548
|
});
|
|
17369
|
-
import
|
|
17370
|
-
import { Box as
|
|
17549
|
+
import React16, { useState as useState13, useRef as useRef3, useEffect as useEffect7, useCallback as useCallback4 } from "react";
|
|
17550
|
+
import { Box as Box25, Text as Text26, useApp, useInput as useInput10, render } from "ink";
|
|
17371
17551
|
import SelectInput10 from "ink-select-input";
|
|
17372
17552
|
import { existsSync as existsSync4, statSync as statSync4 } from "fs";
|
|
17373
17553
|
import { join as join28 } from "path";
|
|
17554
|
+
import QRCode from "qrcode";
|
|
17374
17555
|
import { unlink as unlink4 } from "fs/promises";
|
|
17375
17556
|
import { execSync as execSync2 } from "child_process";
|
|
17376
17557
|
import { spawn as spawn4 } from "child_process";
|
|
17377
17558
|
import { platform as platform4 } from "os";
|
|
17378
17559
|
import fg4 from "fast-glob";
|
|
17379
17560
|
import { readFileSync as readFileSync3 } from "fs";
|
|
17380
|
-
import { jsx as
|
|
17561
|
+
import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
17381
17562
|
function buildFilePickerIgnoreList(cwd) {
|
|
17382
17563
|
const hardcoded = [
|
|
17383
17564
|
// Dependencies
|
|
@@ -17626,13 +17807,13 @@ function App({
|
|
|
17626
17807
|
initialCloudDeviceId
|
|
17627
17808
|
}) {
|
|
17628
17809
|
const { exit } = useApp();
|
|
17629
|
-
const [cfg, setCfg] =
|
|
17630
|
-
const [lspScope, setLspScope] =
|
|
17631
|
-
const [lspProjectPath, setLspProjectPath] =
|
|
17632
|
-
const [cloudToken, setCloudToken] =
|
|
17633
|
-
const [cloudDeviceId, setCloudDeviceId] =
|
|
17634
|
-
const [events, setRawEvents] =
|
|
17635
|
-
const setEvents =
|
|
17810
|
+
const [cfg, setCfg] = useState13(initialCfg);
|
|
17811
|
+
const [lspScope, setLspScope] = useState13(initialLspScope);
|
|
17812
|
+
const [lspProjectPath, setLspProjectPath] = useState13(initialLspProjectPath);
|
|
17813
|
+
const [cloudToken, setCloudToken] = useState13(initialCloudToken);
|
|
17814
|
+
const [cloudDeviceId, setCloudDeviceId] = useState13(initialCloudDeviceId);
|
|
17815
|
+
const [events, setRawEvents] = useState13([]);
|
|
17816
|
+
const setEvents = useCallback4(
|
|
17636
17817
|
(updater) => {
|
|
17637
17818
|
setRawEvents((prev) => {
|
|
17638
17819
|
const next = typeof updater === "function" ? updater(prev) : updater;
|
|
@@ -17641,55 +17822,56 @@ function App({
|
|
|
17641
17822
|
},
|
|
17642
17823
|
[]
|
|
17643
17824
|
);
|
|
17644
|
-
const [input, setInput] =
|
|
17645
|
-
const [busy, setBusy] =
|
|
17646
|
-
const [usage, setUsage] =
|
|
17647
|
-
const [sessionUsage, setSessionUsage] =
|
|
17648
|
-
const [gatewayMeta, setGatewayMeta] =
|
|
17649
|
-
const [cloudBudget, setCloudBudget] =
|
|
17650
|
-
const [showReasoning, setShowReasoning] =
|
|
17651
|
-
const [perm, setPerm] =
|
|
17652
|
-
const [limitModal, setLimitModal] =
|
|
17653
|
-
const [loopModal, setLoopModal] =
|
|
17654
|
-
const [queue, setQueue] =
|
|
17655
|
-
const [history, setHistory] =
|
|
17656
|
-
const [historyIndex, setHistoryIndex] =
|
|
17657
|
-
const [draftInput, setDraftInput] =
|
|
17658
|
-
const [mode, setMode] =
|
|
17659
|
-
const [codeMode, setCodeMode] =
|
|
17825
|
+
const [input, setInput] = useState13("");
|
|
17826
|
+
const [busy, setBusy] = useState13(false);
|
|
17827
|
+
const [usage, setUsage] = useState13(null);
|
|
17828
|
+
const [sessionUsage, setSessionUsage] = useState13(null);
|
|
17829
|
+
const [gatewayMeta, setGatewayMeta] = useState13(null);
|
|
17830
|
+
const [cloudBudget, setCloudBudget] = useState13(null);
|
|
17831
|
+
const [showReasoning, setShowReasoning] = useState13(false);
|
|
17832
|
+
const [perm, setPerm] = useState13(null);
|
|
17833
|
+
const [limitModal, setLimitModal] = useState13(null);
|
|
17834
|
+
const [loopModal, setLoopModal] = useState13(null);
|
|
17835
|
+
const [queue, setQueue] = useState13([]);
|
|
17836
|
+
const [history, setHistory] = useState13([]);
|
|
17837
|
+
const [historyIndex, setHistoryIndex] = useState13(-1);
|
|
17838
|
+
const [draftInput, setDraftInput] = useState13("");
|
|
17839
|
+
const [mode, setMode] = useState13("edit");
|
|
17840
|
+
const [codeMode, setCodeMode] = useState13(false);
|
|
17660
17841
|
const filePickerEnabled = initialCfg?.filePicker ?? true;
|
|
17661
|
-
const [effort, setEffort] =
|
|
17842
|
+
const [effort, setEffort] = useState13(
|
|
17662
17843
|
initialCfg?.reasoningEffort ?? DEFAULT_REASONING_EFFORT
|
|
17663
17844
|
);
|
|
17664
|
-
const [resumeSessions, setResumeSessions] =
|
|
17665
|
-
const [checkpointSession, setCheckpointSession] =
|
|
17666
|
-
const [checkpointList, setCheckpointList] =
|
|
17667
|
-
const [commandWizard, setCommandWizard] =
|
|
17668
|
-
const [commandPicker, setCommandPicker] =
|
|
17669
|
-
const [commandToDelete, setCommandToDelete] =
|
|
17670
|
-
const [showCommandList, setShowCommandList] =
|
|
17671
|
-
const [showLspWizard, setShowLspWizard] =
|
|
17672
|
-
const [showRemoteDashboard, setShowRemoteDashboard] =
|
|
17673
|
-
const [selectedRemoteSession, setSelectedRemoteSession] =
|
|
17674
|
-
const [
|
|
17675
|
-
const [
|
|
17676
|
-
const [
|
|
17677
|
-
const [
|
|
17678
|
-
const [
|
|
17679
|
-
const [
|
|
17680
|
-
const [
|
|
17681
|
-
const [
|
|
17682
|
-
const [
|
|
17683
|
-
const [
|
|
17684
|
-
const [
|
|
17685
|
-
const [
|
|
17686
|
-
const [
|
|
17687
|
-
const [
|
|
17688
|
-
const [
|
|
17689
|
-
const [
|
|
17690
|
-
const [
|
|
17691
|
-
const [
|
|
17692
|
-
const [
|
|
17845
|
+
const [resumeSessions, setResumeSessions] = useState13(null);
|
|
17846
|
+
const [checkpointSession, setCheckpointSession] = useState13(null);
|
|
17847
|
+
const [checkpointList, setCheckpointList] = useState13([]);
|
|
17848
|
+
const [commandWizard, setCommandWizard] = useState13(null);
|
|
17849
|
+
const [commandPicker, setCommandPicker] = useState13(null);
|
|
17850
|
+
const [commandToDelete, setCommandToDelete] = useState13(null);
|
|
17851
|
+
const [showCommandList, setShowCommandList] = useState13(false);
|
|
17852
|
+
const [showLspWizard, setShowLspWizard] = useState13(false);
|
|
17853
|
+
const [showRemoteDashboard, setShowRemoteDashboard] = useState13(false);
|
|
17854
|
+
const [selectedRemoteSession, setSelectedRemoteSession] = useState13(null);
|
|
17855
|
+
const [showInboxModal, setShowInboxModal] = useState13(false);
|
|
17856
|
+
const [tasks, setTasks] = useState13([]);
|
|
17857
|
+
const [tasksStartedAt, setTasksStartedAt] = useState13(null);
|
|
17858
|
+
const [tasksStartTokens, setTasksStartTokens] = useState13(0);
|
|
17859
|
+
const [turnStartedAt, setTurnStartedAt] = useState13(null);
|
|
17860
|
+
const [turnPhase, setTurnPhase] = useState13("waiting");
|
|
17861
|
+
const [currentToolName, setCurrentToolName] = useState13(null);
|
|
17862
|
+
const [lastActivityAt, setLastActivityAt] = useState13(null);
|
|
17863
|
+
const [verbose, setVerbose] = useState13(false);
|
|
17864
|
+
const [hasUpdate, setHasUpdate] = useState13(initialUpdateResult?.hasUpdate ?? false);
|
|
17865
|
+
const [latestVersion, setLatestVersion] = useState13(initialUpdateResult?.latestVersion ?? null);
|
|
17866
|
+
const [theme, setTheme] = useState13(resolveTheme(initialCfg?.theme));
|
|
17867
|
+
const [showThemePicker, setShowThemePicker] = useState13(false);
|
|
17868
|
+
const [originalTheme, setOriginalTheme] = useState13(null);
|
|
17869
|
+
const [skillsActive, setSkillsActive] = useState13(0);
|
|
17870
|
+
const [memoryRecalled, setMemoryRecalled] = useState13(false);
|
|
17871
|
+
const [intentTier, setIntentTier] = useState13(null);
|
|
17872
|
+
const [kimiMdStale, setKimiMdStale] = useState13(false);
|
|
17873
|
+
const [gitBranch, setGitBranch] = useState13(null);
|
|
17874
|
+
const [lastSessionTopic, setLastSessionTopic] = useState13(null);
|
|
17693
17875
|
useEffect7(() => {
|
|
17694
17876
|
setGitBranch(detectGitBranch());
|
|
17695
17877
|
}, []);
|
|
@@ -17765,11 +17947,11 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17765
17947
|
cancelled = true;
|
|
17766
17948
|
};
|
|
17767
17949
|
}, [cfg?.cloudMode, initialCloudToken]);
|
|
17768
|
-
const [cursorOffset, setCursorOffset] =
|
|
17769
|
-
const [activePicker, setActivePicker] =
|
|
17770
|
-
const [filePickerItems, setFilePickerItems] =
|
|
17950
|
+
const [cursorOffset, setCursorOffset] = useState13(0);
|
|
17951
|
+
const [activePicker, setActivePicker] = useState13(null);
|
|
17952
|
+
const [filePickerItems, setFilePickerItems] = useState13([]);
|
|
17771
17953
|
const filePickerLoadedRef = useRef3(false);
|
|
17772
|
-
const [customCommandsVersion, setCustomCommandsVersion] =
|
|
17954
|
+
const [customCommandsVersion, setCustomCommandsVersion] = useState13(0);
|
|
17773
17955
|
const cacheStableRef = useRef3(initialCfg?.cacheStablePrompts !== false);
|
|
17774
17956
|
const messagesRef = useRef3(
|
|
17775
17957
|
makePrefixMessages(cacheStableRef.current, cfg?.model ?? DEFAULT_MODEL, "edit", ALL_TOOLS)
|
|
@@ -17822,11 +18004,11 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17822
18004
|
const MAX_RECENT_FILES = 10;
|
|
17823
18005
|
const pickerAnchor = activePicker?.anchor ?? null;
|
|
17824
18006
|
const pickerKind = activePicker?.kind ?? null;
|
|
17825
|
-
const pickerQuery =
|
|
18007
|
+
const pickerQuery = React16.useMemo(() => {
|
|
17826
18008
|
if (pickerAnchor === null) return null;
|
|
17827
18009
|
return input.slice(pickerAnchor + 1, cursorOffset);
|
|
17828
18010
|
}, [input, cursorOffset, pickerAnchor]);
|
|
17829
|
-
const filteredFileItems =
|
|
18011
|
+
const filteredFileItems = React16.useMemo(() => {
|
|
17830
18012
|
if (pickerKind !== "file" || pickerQuery === null) return [];
|
|
17831
18013
|
const items = filterPickerItems(filePickerItems, pickerQuery).slice();
|
|
17832
18014
|
const now2 = Date.now();
|
|
@@ -17841,7 +18023,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17841
18023
|
return a.name.localeCompare(b.name);
|
|
17842
18024
|
});
|
|
17843
18025
|
}, [pickerKind, filePickerItems, pickerQuery]);
|
|
17844
|
-
const allSlashCommands =
|
|
18026
|
+
const allSlashCommands = React16.useMemo(() => {
|
|
17845
18027
|
const customs = customCommandsRef.current.filter((c) => !BUILTIN_COMMAND_NAMES.has(c.name.toLowerCase())).map((c) => ({
|
|
17846
18028
|
name: c.name,
|
|
17847
18029
|
description: c.description ?? "",
|
|
@@ -17849,7 +18031,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17849
18031
|
}));
|
|
17850
18032
|
return [...BUILTIN_COMMANDS, ...customs];
|
|
17851
18033
|
}, [customCommandsVersion]);
|
|
17852
|
-
const filteredSlashItems =
|
|
18034
|
+
const filteredSlashItems = React16.useMemo(() => {
|
|
17853
18035
|
if (pickerKind !== "slash" || pickerQuery === null) return [];
|
|
17854
18036
|
return fuzzyFilter(allSlashCommands, pickerQuery, (c) => c.name).slice(0, 50);
|
|
17855
18037
|
}, [pickerKind, allSlashCommands, pickerQuery]);
|
|
@@ -17924,14 +18106,14 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17924
18106
|
setActivePicker({ ...activePicker, selected: max });
|
|
17925
18107
|
}
|
|
17926
18108
|
}, [filteredSlashItems.length, activePicker]);
|
|
17927
|
-
const handlePickerUp =
|
|
18109
|
+
const handlePickerUp = useCallback4(() => {
|
|
17928
18110
|
setActivePicker((p) => {
|
|
17929
18111
|
if (!p) return null;
|
|
17930
18112
|
const next = Math.max(0, p.selected - 1);
|
|
17931
18113
|
return next === p.selected ? p : { ...p, selected: next };
|
|
17932
18114
|
});
|
|
17933
18115
|
}, []);
|
|
17934
|
-
const handlePickerDown =
|
|
18116
|
+
const handlePickerDown = useCallback4(() => {
|
|
17935
18117
|
setActivePicker((p) => {
|
|
17936
18118
|
if (!p) return null;
|
|
17937
18119
|
const max = p.kind === "file" ? Math.max(0, filteredFileItems.length - 1) : Math.max(0, filteredSlashItems.length - 1);
|
|
@@ -17939,7 +18121,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17939
18121
|
return next === p.selected ? p : { ...p, selected: next };
|
|
17940
18122
|
});
|
|
17941
18123
|
}, [filteredFileItems.length, filteredSlashItems.length]);
|
|
17942
|
-
const handlePickerSelect =
|
|
18124
|
+
const handlePickerSelect = useCallback4(() => {
|
|
17943
18125
|
if (!activePicker) return;
|
|
17944
18126
|
if (activePicker.kind === "file") {
|
|
17945
18127
|
const item2 = filteredFileItems[activePicker.selected];
|
|
@@ -17958,12 +18140,12 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17958
18140
|
setActivePicker(null);
|
|
17959
18141
|
submitRef.current(value);
|
|
17960
18142
|
}, [activePicker, filteredFileItems, filteredSlashItems, input, cursorOffset]);
|
|
17961
|
-
const handlePickerCancel =
|
|
18143
|
+
const handlePickerCancel = useCallback4(() => {
|
|
17962
18144
|
pickerCancelRef.current = cursorOffset;
|
|
17963
18145
|
setActivePicker(null);
|
|
17964
18146
|
}, [cursorOffset]);
|
|
17965
18147
|
useEffect7(() => {
|
|
17966
|
-
const modalActive = commandWizard !== null || commandPicker !== null || commandToDelete !== null || showCommandList || showLspWizard || resumeSessions !== null || checkpointSession !== null || perm !== null || limitModal !== null || loopModal !== null;
|
|
18148
|
+
const modalActive = commandWizard !== null || commandPicker !== null || commandToDelete !== null || showCommandList || showLspWizard || resumeSessions !== null || checkpointSession !== null || perm !== null || limitModal !== null || loopModal !== null || showInboxModal;
|
|
17967
18149
|
if (modalActive && activePicker !== null) {
|
|
17968
18150
|
setActivePicker(null);
|
|
17969
18151
|
}
|
|
@@ -17977,6 +18159,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
17977
18159
|
perm,
|
|
17978
18160
|
limitModal,
|
|
17979
18161
|
loopModal,
|
|
18162
|
+
showInboxModal,
|
|
17980
18163
|
activePicker
|
|
17981
18164
|
]);
|
|
17982
18165
|
useEffect7(() => {
|
|
@@ -18101,7 +18284,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18101
18284
|
}, 3e5);
|
|
18102
18285
|
return () => clearInterval(id);
|
|
18103
18286
|
}, []);
|
|
18104
|
-
const reloadCustomCommands =
|
|
18287
|
+
const reloadCustomCommands = useCallback4(async () => {
|
|
18105
18288
|
const { commands, warnings } = await loadCustomCommands(process.cwd());
|
|
18106
18289
|
customCommandsRef.current = commands;
|
|
18107
18290
|
setCustomCommandsVersion((v) => v + 1);
|
|
@@ -18228,7 +18411,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18228
18411
|
}, 30 * 60 * 1e3);
|
|
18229
18412
|
return () => clearInterval(id);
|
|
18230
18413
|
}, [cfg]);
|
|
18231
|
-
const initMcp =
|
|
18414
|
+
const initMcp = useCallback4(async () => {
|
|
18232
18415
|
if (!cfg?.mcpServers || mcpInitRef.current) return;
|
|
18233
18416
|
mcpInitRef.current = true;
|
|
18234
18417
|
const manager = mcpManagerRef.current;
|
|
@@ -18289,7 +18472,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18289
18472
|
]);
|
|
18290
18473
|
}
|
|
18291
18474
|
}, [cfg]);
|
|
18292
|
-
const initLsp =
|
|
18475
|
+
const initLsp = useCallback4(async () => {
|
|
18293
18476
|
if (!cfg?.lspEnabled || !cfg?.lspServers || lspInitRef.current) {
|
|
18294
18477
|
if (lspInitRef.current) return;
|
|
18295
18478
|
if (!cfg?.lspEnabled) {
|
|
@@ -18360,7 +18543,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18360
18543
|
void initLsp();
|
|
18361
18544
|
}
|
|
18362
18545
|
}, [cfg, initMcp, initLsp]);
|
|
18363
|
-
const ensureSessionId =
|
|
18546
|
+
const ensureSessionId = useCallback4(() => {
|
|
18364
18547
|
if (sessionIdRef.current) return sessionIdRef.current;
|
|
18365
18548
|
const firstUser = messagesRef.current.find((m) => m.role === "user");
|
|
18366
18549
|
let firstText = "session";
|
|
@@ -18373,7 +18556,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18373
18556
|
sessionIdRef.current = makeSessionId(firstText);
|
|
18374
18557
|
return sessionIdRef.current;
|
|
18375
18558
|
}, []);
|
|
18376
|
-
const saveSessionSafe =
|
|
18559
|
+
const saveSessionSafe = useCallback4(async () => {
|
|
18377
18560
|
if (!cfg) return;
|
|
18378
18561
|
ensureSessionId();
|
|
18379
18562
|
const now2 = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -18399,7 +18582,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18399
18582
|
]);
|
|
18400
18583
|
}
|
|
18401
18584
|
}, [cfg, ensureSessionId]);
|
|
18402
|
-
const onIterationEnd =
|
|
18585
|
+
const onIterationEnd = useCallback4(
|
|
18403
18586
|
async (messages, signal) => {
|
|
18404
18587
|
if (signal.aborted) return messages;
|
|
18405
18588
|
if (!shouldCompact({ messages })) return messages;
|
|
@@ -18477,7 +18660,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18477
18660
|
},
|
|
18478
18661
|
[cfg]
|
|
18479
18662
|
);
|
|
18480
|
-
|
|
18663
|
+
useInput10((inputChar, key) => {
|
|
18481
18664
|
if (key.ctrl && inputChar === "c") {
|
|
18482
18665
|
logger.info("input:ctrl+c", {
|
|
18483
18666
|
busy: busyRef.current,
|
|
@@ -18614,7 +18797,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18614
18797
|
void lspManagerRef.current.stopAll().finally(() => exit());
|
|
18615
18798
|
}
|
|
18616
18799
|
};
|
|
18617
|
-
const flushAssistantUpdates =
|
|
18800
|
+
const flushAssistantUpdates = useCallback4(() => {
|
|
18618
18801
|
flushTimeoutRef.current = null;
|
|
18619
18802
|
const pending = pendingTextRef.current;
|
|
18620
18803
|
if (pending.size === 0) return;
|
|
@@ -18632,7 +18815,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18632
18815
|
})
|
|
18633
18816
|
);
|
|
18634
18817
|
}, []);
|
|
18635
|
-
const updateAssistant =
|
|
18818
|
+
const updateAssistant = useCallback4(
|
|
18636
18819
|
(id, patch) => {
|
|
18637
18820
|
const result = patch({ text: "", reasoning: "" });
|
|
18638
18821
|
const assistantResult = result;
|
|
@@ -18661,7 +18844,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18661
18844
|
},
|
|
18662
18845
|
[flushAssistantUpdates]
|
|
18663
18846
|
);
|
|
18664
|
-
const updateTool =
|
|
18847
|
+
const updateTool = useCallback4(
|
|
18665
18848
|
(id, patch) => {
|
|
18666
18849
|
setEvents(
|
|
18667
18850
|
(evts) => evts.map(
|
|
@@ -18671,11 +18854,11 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18671
18854
|
},
|
|
18672
18855
|
[]
|
|
18673
18856
|
);
|
|
18674
|
-
const updateGatewayMeta =
|
|
18857
|
+
const updateGatewayMeta = useCallback4((meta) => {
|
|
18675
18858
|
gatewayMetaRef.current = meta;
|
|
18676
18859
|
setGatewayMeta(meta);
|
|
18677
18860
|
}, []);
|
|
18678
|
-
const runCompact =
|
|
18861
|
+
const runCompact = useCallback4(async () => {
|
|
18679
18862
|
if (!cfg) return;
|
|
18680
18863
|
if (busy) {
|
|
18681
18864
|
setEvents((e) => [...e, { kind: "info", key: mkKey(), text: "can't compact while model is running" }]);
|
|
@@ -18771,11 +18954,11 @@ ${wcagWarnings.join("\n")}` }
|
|
|
18771
18954
|
pendingToolCallsRef.current.clear();
|
|
18772
18955
|
}
|
|
18773
18956
|
}, [cfg, busy, saveSessionSafe]);
|
|
18774
|
-
const openResumePicker =
|
|
18957
|
+
const openResumePicker = useCallback4(async () => {
|
|
18775
18958
|
const sessions = await listSessions(200, process.cwd());
|
|
18776
18959
|
setResumeSessions(sessions);
|
|
18777
18960
|
}, []);
|
|
18778
|
-
const runInit =
|
|
18961
|
+
const runInit = useCallback4(async () => {
|
|
18779
18962
|
if (!cfg) return;
|
|
18780
18963
|
if (busy) {
|
|
18781
18964
|
setEvents((e) => [...e, { kind: "info", key: mkKey(), text: "can't /init while model is running" }]);
|
|
@@ -19098,7 +19281,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
19098
19281
|
pendingToolCallsRef.current.clear();
|
|
19099
19282
|
}
|
|
19100
19283
|
}, [cfg, busy, updateAssistant, updateTool, updateGatewayMeta]);
|
|
19101
|
-
const handleThemePick =
|
|
19284
|
+
const handleThemePick = useCallback4(
|
|
19102
19285
|
(picked) => {
|
|
19103
19286
|
setShowThemePicker(false);
|
|
19104
19287
|
if (!picked) return;
|
|
@@ -19116,7 +19299,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
19116
19299
|
},
|
|
19117
19300
|
[]
|
|
19118
19301
|
);
|
|
19119
|
-
const doResumeSession =
|
|
19302
|
+
const doResumeSession = useCallback4(
|
|
19120
19303
|
async (filePath, checkpointId) => {
|
|
19121
19304
|
try {
|
|
19122
19305
|
const file = checkpointId ? (await loadSessionFromCheckpoint(filePath, checkpointId)).file : await loadSession(filePath);
|
|
@@ -19168,7 +19351,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
19168
19351
|
},
|
|
19169
19352
|
[]
|
|
19170
19353
|
);
|
|
19171
|
-
const handleResumePick =
|
|
19354
|
+
const handleResumePick = useCallback4(
|
|
19172
19355
|
async (picked) => {
|
|
19173
19356
|
setResumeSessions(null);
|
|
19174
19357
|
if (!picked) return;
|
|
@@ -19190,7 +19373,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
19190
19373
|
},
|
|
19191
19374
|
[doResumeSession]
|
|
19192
19375
|
);
|
|
19193
|
-
const handleCheckpointPick =
|
|
19376
|
+
const handleCheckpointPick = useCallback4(
|
|
19194
19377
|
async (checkpointId) => {
|
|
19195
19378
|
const session = checkpointSession;
|
|
19196
19379
|
setCheckpointSession(null);
|
|
@@ -19209,7 +19392,7 @@ ${wcagWarnings.join("\n")}` }
|
|
|
19209
19392
|
},
|
|
19210
19393
|
[checkpointSession, doResumeSession]
|
|
19211
19394
|
);
|
|
19212
|
-
const handleSlash =
|
|
19395
|
+
const handleSlash = useCallback4(
|
|
19213
19396
|
(cmd) => {
|
|
19214
19397
|
const raw = cmd.trim();
|
|
19215
19398
|
const [head, ...rest] = raw.split(/\s+/);
|
|
@@ -19877,12 +20060,33 @@ ${lines.join("\n")}` }]);
|
|
|
19877
20060
|
}
|
|
19878
20061
|
if (c === "/hello") {
|
|
19879
20062
|
const session = crypto.randomUUID();
|
|
19880
|
-
const url = `${
|
|
20063
|
+
const url = `${FEEDBACK_WORKER_URL2}/?s=${session}&v=${getAppVersion()}`;
|
|
19881
20064
|
openBrowser2(url);
|
|
19882
|
-
|
|
19883
|
-
|
|
19884
|
-
|
|
19885
|
-
|
|
20065
|
+
void (async () => {
|
|
20066
|
+
try {
|
|
20067
|
+
const qr = await QRCode.toString(url, { type: "terminal", small: true });
|
|
20068
|
+
const lines = qr.split("\n").map((line) => line.replace(/\x1b\[[0-9;]*m/g, ""));
|
|
20069
|
+
setEvents((e) => [
|
|
20070
|
+
...e,
|
|
20071
|
+
{
|
|
20072
|
+
kind: "qrcode",
|
|
20073
|
+
key: mkKey(),
|
|
20074
|
+
lines,
|
|
20075
|
+
caption: "Scan this QR code with your phone to send a voice note:"
|
|
20076
|
+
},
|
|
20077
|
+
{ kind: "info", key: mkKey(), text: "Also opened voice note page in your browser." }
|
|
20078
|
+
]);
|
|
20079
|
+
} catch {
|
|
20080
|
+
setEvents((e) => [
|
|
20081
|
+
...e,
|
|
20082
|
+
{ kind: "info", key: mkKey(), text: "Opened voice note page in your browser. Record your message there and hit Send when you're done." }
|
|
20083
|
+
]);
|
|
20084
|
+
}
|
|
20085
|
+
})();
|
|
20086
|
+
return true;
|
|
20087
|
+
}
|
|
20088
|
+
if (c === "/inbox") {
|
|
20089
|
+
setShowInboxModal(true);
|
|
19886
20090
|
return true;
|
|
19887
20091
|
}
|
|
19888
20092
|
if (c === "/report") {
|
|
@@ -20155,7 +20359,7 @@ ${lines.join("\n")}` }]);
|
|
|
20155
20359
|
},
|
|
20156
20360
|
[cfg, exit, usage, theme, mode, openResumePicker, runCompact, runInit, initMcp, setCfg, setShowRemoteDashboard, setSelectedRemoteSession]
|
|
20157
20361
|
);
|
|
20158
|
-
const handleCommandSave =
|
|
20362
|
+
const handleCommandSave = useCallback4(
|
|
20159
20363
|
async (opts2) => {
|
|
20160
20364
|
setCommandWizard(null);
|
|
20161
20365
|
try {
|
|
@@ -20177,7 +20381,7 @@ ${lines.join("\n")}` }]);
|
|
|
20177
20381
|
},
|
|
20178
20382
|
[commandWizard, reloadCustomCommands, setEvents]
|
|
20179
20383
|
);
|
|
20180
|
-
const handleCommandDelete =
|
|
20384
|
+
const handleCommandDelete = useCallback4(
|
|
20181
20385
|
async (cmd) => {
|
|
20182
20386
|
setCommandToDelete(null);
|
|
20183
20387
|
try {
|
|
@@ -20196,7 +20400,7 @@ ${lines.join("\n")}` }]);
|
|
|
20196
20400
|
},
|
|
20197
20401
|
[reloadCustomCommands, setEvents]
|
|
20198
20402
|
);
|
|
20199
|
-
const processMessage =
|
|
20403
|
+
const processMessage = useCallback4(
|
|
20200
20404
|
async (text, displayText, opts2) => {
|
|
20201
20405
|
if (!cfg) return;
|
|
20202
20406
|
let trimmed = text.trim();
|
|
@@ -20743,7 +20947,7 @@ ${lines.join("\n")}` }]);
|
|
|
20743
20947
|
processMessage(next.full, next.display, { queuedKey: next.key });
|
|
20744
20948
|
}
|
|
20745
20949
|
}, [busy, queue, processMessage]);
|
|
20746
|
-
const submit =
|
|
20950
|
+
const submit = useCallback4(
|
|
20747
20951
|
(full, display) => {
|
|
20748
20952
|
const trimmedFull = full.trim();
|
|
20749
20953
|
if (!trimmedFull) return;
|
|
@@ -20781,7 +20985,7 @@ ${lines.join("\n")}` }]);
|
|
|
20781
20985
|
}
|
|
20782
20986
|
}, [usage]);
|
|
20783
20987
|
if (!cfg) {
|
|
20784
|
-
return /* @__PURE__ */
|
|
20988
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(
|
|
20785
20989
|
Onboarding,
|
|
20786
20990
|
{
|
|
20787
20991
|
onCancel: () => exit(),
|
|
@@ -20813,7 +21017,7 @@ ${lines.join("\n")}` }]);
|
|
|
20813
21017
|
) });
|
|
20814
21018
|
}
|
|
20815
21019
|
if (checkpointSession !== null) {
|
|
20816
|
-
return /* @__PURE__ */
|
|
21020
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(
|
|
20817
21021
|
CheckpointPicker,
|
|
20818
21022
|
{
|
|
20819
21023
|
session: checkpointSession,
|
|
@@ -20823,10 +21027,10 @@ ${lines.join("\n")}` }]);
|
|
|
20823
21027
|
) }) });
|
|
20824
21028
|
}
|
|
20825
21029
|
if (resumeSessions !== null) {
|
|
20826
|
-
return /* @__PURE__ */
|
|
21030
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(ResumePicker, { sessions: resumeSessions, onPick: handleResumePick }) }) });
|
|
20827
21031
|
}
|
|
20828
21032
|
if (showRemoteDashboard) {
|
|
20829
|
-
return /* @__PURE__ */
|
|
21033
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: selectedRemoteSession ? /* @__PURE__ */ jsx27(
|
|
20830
21034
|
RemoteSessionDetail,
|
|
20831
21035
|
{
|
|
20832
21036
|
session: selectedRemoteSession,
|
|
@@ -20849,7 +21053,7 @@ ${lines.join("\n")}` }]);
|
|
|
20849
21053
|
setShowRemoteDashboard(false);
|
|
20850
21054
|
}
|
|
20851
21055
|
}
|
|
20852
|
-
) : /* @__PURE__ */
|
|
21056
|
+
) : /* @__PURE__ */ jsx27(
|
|
20853
21057
|
RemoteDashboard,
|
|
20854
21058
|
{
|
|
20855
21059
|
onSelect: (session) => setSelectedRemoteSession(session),
|
|
@@ -20857,8 +21061,17 @@ ${lines.join("\n")}` }]);
|
|
|
20857
21061
|
}
|
|
20858
21062
|
) }) });
|
|
20859
21063
|
}
|
|
21064
|
+
if (showInboxModal) {
|
|
21065
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(
|
|
21066
|
+
InboxModal,
|
|
21067
|
+
{
|
|
21068
|
+
onDone: () => setShowInboxModal(false),
|
|
21069
|
+
onOpen: (url) => openBrowser2(url)
|
|
21070
|
+
}
|
|
21071
|
+
) }) });
|
|
21072
|
+
}
|
|
20860
21073
|
if (showLspWizard) {
|
|
20861
|
-
return /* @__PURE__ */
|
|
21074
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(
|
|
20862
21075
|
LspWizard,
|
|
20863
21076
|
{
|
|
20864
21077
|
servers: cfg?.lspServers ?? {},
|
|
@@ -20895,7 +21108,7 @@ ${lines.join("\n")}` }]);
|
|
|
20895
21108
|
) }) });
|
|
20896
21109
|
}
|
|
20897
21110
|
if (commandWizard) {
|
|
20898
|
-
return /* @__PURE__ */
|
|
21111
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(
|
|
20899
21112
|
CommandWizard,
|
|
20900
21113
|
{
|
|
20901
21114
|
mode: commandWizard.mode,
|
|
@@ -20908,7 +21121,7 @@ ${lines.join("\n")}` }]);
|
|
|
20908
21121
|
) }) });
|
|
20909
21122
|
}
|
|
20910
21123
|
if (commandPicker) {
|
|
20911
|
-
return /* @__PURE__ */
|
|
21124
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(
|
|
20912
21125
|
CommandPicker,
|
|
20913
21126
|
{
|
|
20914
21127
|
commands: customCommandsRef.current,
|
|
@@ -20926,14 +21139,14 @@ ${lines.join("\n")}` }]);
|
|
|
20926
21139
|
) }) });
|
|
20927
21140
|
}
|
|
20928
21141
|
if (commandToDelete) {
|
|
20929
|
-
return /* @__PURE__ */
|
|
20930
|
-
/* @__PURE__ */
|
|
21142
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
|
|
21143
|
+
/* @__PURE__ */ jsxs25(Text26, { color: theme.accent, bold: true, children: [
|
|
20931
21144
|
"Delete /",
|
|
20932
21145
|
commandToDelete.name,
|
|
20933
21146
|
"?"
|
|
20934
21147
|
] }),
|
|
20935
|
-
/* @__PURE__ */
|
|
20936
|
-
/* @__PURE__ */
|
|
21148
|
+
/* @__PURE__ */ jsx27(Text26, { color: theme.info.color, children: commandToDelete.filepath }),
|
|
21149
|
+
/* @__PURE__ */ jsx27(Box25, { marginTop: 1, children: /* @__PURE__ */ jsx27(
|
|
20937
21150
|
SelectInput10,
|
|
20938
21151
|
{
|
|
20939
21152
|
items: [
|
|
@@ -20952,7 +21165,7 @@ ${lines.join("\n")}` }]);
|
|
|
20952
21165
|
] }) });
|
|
20953
21166
|
}
|
|
20954
21167
|
if (showCommandList) {
|
|
20955
|
-
return /* @__PURE__ */
|
|
21168
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(
|
|
20956
21169
|
CommandList,
|
|
20957
21170
|
{
|
|
20958
21171
|
commands: customCommandsRef.current,
|
|
@@ -20961,12 +21174,12 @@ ${lines.join("\n")}` }]);
|
|
|
20961
21174
|
) }) });
|
|
20962
21175
|
}
|
|
20963
21176
|
if (showThemePicker) {
|
|
20964
|
-
return /* @__PURE__ */
|
|
21177
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", children: /* @__PURE__ */ jsx27(ThemePicker, { themes: themeList(), onPick: handleThemePick }) }) });
|
|
20965
21178
|
}
|
|
20966
21179
|
const hasConversation = events.some((e) => e.kind === "user" || e.kind === "assistant");
|
|
20967
|
-
return /* @__PURE__ */
|
|
20968
|
-
!hasConversation && events.length === 0 ? /* @__PURE__ */
|
|
20969
|
-
perm ? /* @__PURE__ */
|
|
21180
|
+
return /* @__PURE__ */ jsx27(ThemeProvider, { theme, children: /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", children: [
|
|
21181
|
+
!hasConversation && events.length === 0 ? /* @__PURE__ */ jsx27(Welcome, {}) : /* @__PURE__ */ jsx27(ChatView, { events, showReasoning, verbose, intentTier: intentTier ?? void 0 }),
|
|
21182
|
+
perm ? /* @__PURE__ */ jsx27(
|
|
20970
21183
|
PermissionModal,
|
|
20971
21184
|
{
|
|
20972
21185
|
tool: perm.tool,
|
|
@@ -20980,7 +21193,7 @@ ${lines.join("\n")}` }]);
|
|
|
20980
21193
|
submitRef.current(text);
|
|
20981
21194
|
}
|
|
20982
21195
|
}
|
|
20983
|
-
) : limitModal ? /* @__PURE__ */
|
|
21196
|
+
) : limitModal ? /* @__PURE__ */ jsx27(
|
|
20984
21197
|
LimitModal,
|
|
20985
21198
|
{
|
|
20986
21199
|
limit: limitModal.limit,
|
|
@@ -20990,7 +21203,7 @@ ${lines.join("\n")}` }]);
|
|
|
20990
21203
|
setLimitModal(null);
|
|
20991
21204
|
}
|
|
20992
21205
|
}
|
|
20993
|
-
) : loopModal ? /* @__PURE__ */
|
|
21206
|
+
) : loopModal ? /* @__PURE__ */ jsx27(
|
|
20994
21207
|
LimitModal,
|
|
20995
21208
|
{
|
|
20996
21209
|
limit: 50,
|
|
@@ -21006,8 +21219,8 @@ ${lines.join("\n")}` }]);
|
|
|
21006
21219
|
setLoopModal(null);
|
|
21007
21220
|
}
|
|
21008
21221
|
}
|
|
21009
|
-
) : /* @__PURE__ */
|
|
21010
|
-
tasks.length > 0 && /* @__PURE__ */
|
|
21222
|
+
) : /* @__PURE__ */ jsxs25(Box25, { flexDirection: "column", marginTop: 1, children: [
|
|
21223
|
+
tasks.length > 0 && /* @__PURE__ */ jsx27(
|
|
21011
21224
|
TaskList,
|
|
21012
21225
|
{
|
|
21013
21226
|
tasks,
|
|
@@ -21015,11 +21228,11 @@ ${lines.join("\n")}` }]);
|
|
|
21015
21228
|
tokensDelta: Math.max(0, (usage?.prompt_tokens ?? 0) - tasksStartTokens)
|
|
21016
21229
|
}
|
|
21017
21230
|
),
|
|
21018
|
-
queue.length > 0 && /* @__PURE__ */
|
|
21231
|
+
queue.length > 0 && /* @__PURE__ */ jsx27(Box25, { flexDirection: "column", marginBottom: 1, children: queue.map((q, i) => /* @__PURE__ */ jsxs25(Text26, { color: theme.info.color, dimColor: theme.info.dim, children: [
|
|
21019
21232
|
"\u23F3 ",
|
|
21020
21233
|
q.display
|
|
21021
21234
|
] }, `queue_${i}`)) }),
|
|
21022
|
-
/* @__PURE__ */
|
|
21235
|
+
/* @__PURE__ */ jsx27(
|
|
21023
21236
|
StatusBar,
|
|
21024
21237
|
{
|
|
21025
21238
|
usage,
|
|
@@ -21042,7 +21255,7 @@ ${lines.join("\n")}` }]);
|
|
|
21042
21255
|
intentTier: intentTier ?? void 0
|
|
21043
21256
|
}
|
|
21044
21257
|
),
|
|
21045
|
-
activePicker?.kind === "file" && /* @__PURE__ */
|
|
21258
|
+
activePicker?.kind === "file" && /* @__PURE__ */ jsx27(
|
|
21046
21259
|
FilePicker,
|
|
21047
21260
|
{
|
|
21048
21261
|
items: filteredFileItems,
|
|
@@ -21051,7 +21264,7 @@ ${lines.join("\n")}` }]);
|
|
|
21051
21264
|
recentFiles: new Set(recentFilesRef.current.keys())
|
|
21052
21265
|
}
|
|
21053
21266
|
),
|
|
21054
|
-
activePicker?.kind === "slash" && /* @__PURE__ */
|
|
21267
|
+
activePicker?.kind === "slash" && /* @__PURE__ */ jsx27(
|
|
21055
21268
|
SlashPicker,
|
|
21056
21269
|
{
|
|
21057
21270
|
items: filteredSlashItems,
|
|
@@ -21059,9 +21272,9 @@ ${lines.join("\n")}` }]);
|
|
|
21059
21272
|
query: pickerQuery ?? ""
|
|
21060
21273
|
}
|
|
21061
21274
|
),
|
|
21062
|
-
/* @__PURE__ */
|
|
21063
|
-
/* @__PURE__ */
|
|
21064
|
-
/* @__PURE__ */
|
|
21275
|
+
/* @__PURE__ */ jsxs25(Box25, { marginTop: 1, children: [
|
|
21276
|
+
/* @__PURE__ */ jsx27(Text26, { color: theme.prompt ?? theme.accent, children: "\u203A " }),
|
|
21277
|
+
/* @__PURE__ */ jsx27(
|
|
21065
21278
|
CustomTextInput,
|
|
21066
21279
|
{
|
|
21067
21280
|
value: input,
|
|
@@ -21118,7 +21331,7 @@ ${lines.join("\n")}` }]);
|
|
|
21118
21331
|
}
|
|
21119
21332
|
async function renderApp(cfg, updateResult, lspScope = "global", lspProjectPath = null, cloudToken, cloudDeviceId) {
|
|
21120
21333
|
const instance = render(
|
|
21121
|
-
/* @__PURE__ */
|
|
21334
|
+
/* @__PURE__ */ jsx27(
|
|
21122
21335
|
App,
|
|
21123
21336
|
{
|
|
21124
21337
|
initialCfg: cfg,
|
|
@@ -21135,7 +21348,7 @@ async function renderApp(cfg, updateResult, lspScope = "global", lspProjectPath
|
|
|
21135
21348
|
);
|
|
21136
21349
|
await instance.waitUntilExit();
|
|
21137
21350
|
}
|
|
21138
|
-
var MAX_GITIGNORE_SIZE,
|
|
21351
|
+
var MAX_GITIGNORE_SIZE, FEEDBACK_WORKER_URL2, CONTEXT_LIMIT, AUTO_COMPACT_SUGGEST_PCT, MAX_EVENTS, nextAssistantId, nextKey, mkKey, MAX_IMAGES_PER_MESSAGE;
|
|
21139
21352
|
var init_app = __esm({
|
|
21140
21353
|
"src/app.tsx"() {
|
|
21141
21354
|
"use strict";
|
|
@@ -21172,6 +21385,7 @@ var init_app = __esm({
|
|
|
21172
21385
|
init_deploy();
|
|
21173
21386
|
init_tui_auth();
|
|
21174
21387
|
init_remote_dashboard();
|
|
21388
|
+
init_inbox_modal();
|
|
21175
21389
|
init_mode();
|
|
21176
21390
|
init_classify();
|
|
21177
21391
|
init_skills();
|
|
@@ -21203,7 +21417,7 @@ var init_app = __esm({
|
|
|
21203
21417
|
init_slash_picker();
|
|
21204
21418
|
init_fuzzy();
|
|
21205
21419
|
MAX_GITIGNORE_SIZE = 1 * 1024 * 1024;
|
|
21206
|
-
|
|
21420
|
+
FEEDBACK_WORKER_URL2 = "https://hello.kimiflare.com";
|
|
21207
21421
|
CONTEXT_LIMIT = 262e3;
|
|
21208
21422
|
AUTO_COMPACT_SUGGEST_PCT = 0.8;
|
|
21209
21423
|
MAX_EVENTS = 500;
|