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 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 useState10 } from "react";
14445
- import { Box as Box17, Text as Text18, useInput as useInput7, useWindowSize } from "ink";
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 Fragment2, jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
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] = useState10("name");
14451
- const [name, setName] = useState10(initial?.name ?? "");
14452
- const [description, setDescription] = useState10(initial?.description ?? "");
14453
- const [template, setTemplate] = useState10(initial?.template ?? "");
14454
- const [cmdMode, setCmdMode] = useState10(initial?.mode);
14455
- const [cmdEffort, setCmdEffort] = useState10(initial?.effort);
14456
- const [cmdModel, setCmdModel] = useState10(initial?.model);
14457
- const [source, setSource] = useState10(initial?.source ?? "project");
14458
- const [error, setError] = useState10(null);
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
- useInput7((_input, key) => {
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__ */ jsxs17(Fragment2, { children: [
14572
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Text18, { color: theme.error, children: error }),
14581
- /* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsx19(Text18, { color: theme.info.color, children: "letters, numbers, _ - / only; must start with a letter" })
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__ */ jsxs17(Fragment2, { children: [
14594
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsx19(Text18, { color: theme.info.color, children: "Press Enter to skip" })
14791
+ /* @__PURE__ */ jsx20(Text19, { color: theme.info.color, children: "Press Enter to skip" })
14612
14792
  ] });
14613
14793
  case "template": {
14614
- const guide = /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", paddingLeft: 1, children: [
14615
- /* @__PURE__ */ jsx19(Text18, { color: theme.accent, bold: true, children: "What is this?" }),
14616
- /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "A prompt template \u2014 instructions to the AI." }),
14617
- /* @__PURE__ */ jsxs17(Text18, { color: theme.info.color, children: [
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__ */ jsxs17(Box17, { marginTop: 1, flexDirection: "column", children: [
14623
- /* @__PURE__ */ jsx19(Text18, { color: theme.accent, bold: true, children: "Variables" }),
14624
- /* @__PURE__ */ jsxs17(Text18, { color: theme.info.color, children: [
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__ */ jsxs17(Text18, { color: theme.info.color, children: [
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__ */ jsxs17(Box17, { marginTop: 1, flexDirection: "column", children: [
14634
- /* @__PURE__ */ jsx19(Text18, { color: theme.accent, bold: true, children: "Dynamic inlines" }),
14635
- /* @__PURE__ */ jsxs17(Text18, { color: theme.info.color, children: [
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__ */ jsxs17(Text18, { color: theme.info.color, children: [
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__ */ jsxs17(Box17, { marginTop: 1, flexDirection: "column", children: [
14645
- /* @__PURE__ */ jsx19(Text18, { color: theme.accent, bold: true, children: "Example" }),
14646
- /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "Review this PR diff:" }),
14647
- /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "!`git diff main...HEAD`" }),
14648
- /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "Focus on: $1" })
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__ */ jsxs17(Box17, { flexDirection: "column", flexGrow: 1, children: [
14652
- error && /* @__PURE__ */ jsx19(Text18, { color: theme.error, children: error }),
14653
- /* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsxs17(Fragment2, { children: [
14664
- /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "Paste multi-line templates with Ctrl+V." }),
14665
- /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: "Variables: $1 $2 ... $ARGUMENTS Shell: !`cmd` File: @path" })
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__ */ jsxs17(Fragment2, { children: [
14669
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsxs17(Box17, { flexDirection: "row", marginTop: 1, children: [
14678
- /* @__PURE__ */ jsx19(Box17, { flexDirection: "column", width: "50%", children: inputArea }),
14679
- /* @__PURE__ */ jsx19(Box17, { flexDirection: "column", width: "50%", children: guide })
14680
- ] }) : /* @__PURE__ */ jsx19(Box17, { flexDirection: "column", marginTop: 1, children: inputArea })
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__ */ jsxs17(Fragment2, { children: [
14690
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsxs17(Fragment2, { children: [
14719
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Text18, { color: theme.info.color, children: "Saved to file but not yet enforced at runtime" }),
14727
- /* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsxs17(Fragment2, { children: [
14748
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsxs17(Fragment2, { children: [
14769
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsx19(Text18, { color: theme.info.color, children: "Press Enter to skip" })
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__ */ jsxs17(Fragment2, { children: [
14794
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsx19(Text18, { color: theme.info.color, children: "Project: .kimiflare/commands/ Global: ~/.config/kimiflare/commands/" })
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__ */ jsxs17(Fragment2, { children: [
14820
- /* @__PURE__ */ jsxs17(Text18, { color: theme.accent, bold: true, children: [
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__ */ jsxs17(Text18, { color: theme.info.color, children: [
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__ */ jsx19(Box17, { marginTop: 1, flexDirection: "column", children: previewContent().split("\n").map((line, i) => /* @__PURE__ */ jsx19(Text18, { color: theme.info.color, children: line || " " }, i)) }),
14834
- /* @__PURE__ */ jsx19(Box17, { marginTop: 1, children: /* @__PURE__ */ jsx19(
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__ */ jsx19(Box17, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: renderStep() });
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 Box18, Text as Text19 } from "ink";
15470
+ import { Box as Box19, Text as Text20 } from "ink";
15291
15471
  import SelectInput7 from "ink-select-input";
15292
- import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
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__ */ jsxs18(Box18, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15302
- /* @__PURE__ */ jsx20(Text19, { color: theme.accent, bold: true, children: title }),
15303
- /* @__PURE__ */ jsx20(Text19, { color: theme.info.color, dimColor: false, children: "Arrow keys to navigate, Enter to select." }),
15304
- /* @__PURE__ */ jsx20(Box18, { marginTop: 1, children: /* @__PURE__ */ jsx20(
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 Box19, Text as Text20, useInput as useInput8 } from "ink";
15328
- import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
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
- useInput8((_input, key) => {
15511
+ useInput9((_input, key) => {
15332
15512
  if (key.escape) {
15333
15513
  onDone();
15334
15514
  }
15335
15515
  });
15336
- return /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15337
- /* @__PURE__ */ jsx21(Text20, { color: theme.accent, bold: true, children: "Custom commands" }),
15338
- /* @__PURE__ */ jsx21(Text20, { color: theme.info.color, dimColor: false, children: "Esc to close." }),
15339
- /* @__PURE__ */ jsxs19(Box19, { marginTop: 1, flexDirection: "column", children: [
15340
- commands.length === 0 && /* @__PURE__ */ jsx21(Text20, { color: theme.info.color, children: "No custom commands found." }),
15341
- commands.map((cmd) => /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", marginBottom: 1, children: [
15342
- /* @__PURE__ */ jsxs19(Text20, { color: theme.accent, bold: true, children: [
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__ */ jsxs19(Text20, { color: theme.info.color, children: [
15526
+ /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
15347
15527
  " ",
15348
15528
  "source: ",
15349
15529
  cmd.source
15350
15530
  ] }),
15351
- /* @__PURE__ */ jsxs19(Text20, { color: theme.info.color, children: [
15531
+ /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
15352
15532
  " ",
15353
15533
  "path: ",
15354
15534
  cmd.filepath
15355
15535
  ] }),
15356
- cmd.description && /* @__PURE__ */ jsxs19(Text20, { color: theme.info.color, children: [
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__ */ jsxs19(Text20, { color: theme.info.color, children: [
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__ */ jsxs19(Text20, { color: theme.info.color, children: [
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__ */ jsxs19(Text20, { color: theme.info.color, children: [
15551
+ cmd.model && /* @__PURE__ */ jsxs20(Text21, { color: theme.info.color, children: [
15372
15552
  " ",
15373
15553
  "model: ",
15374
15554
  cmd.model
15375
15555
  ] }),
15376
- /* @__PURE__ */ jsxs19(Text20, { color: theme.info.color, children: [
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__ */ jsxs19(Text20, { color: theme.info.color, children: [
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__ */ jsxs19(Text20, { color: theme.info.color, children: [
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 useState11 } from "react";
15401
- import { Box as Box20, Text as Text21 } from "ink";
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 jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
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] = useState11("main");
15408
- const [selectedPreset, setSelectedPreset] = useState11(null);
15409
- const [customName, setCustomName] = useState11("");
15410
- const [customCommand, setCustomCommand] = useState11("");
15411
- const [installState, setInstallState] = useState11({ status: "idle", output: "" });
15412
- const [pendingServers, setPendingServers] = useState11(null);
15413
- const [pendingEnabled, setPendingEnabled] = useState11(true);
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15517
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "LSP Servers" }),
15518
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Arrow keys to navigate, Enter to select." }),
15519
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15548
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Add LSP Server" }),
15549
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Select a language server to configure." }),
15550
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15579
- /* @__PURE__ */ jsxs20(Text21, { color: theme.accent, bold: true, children: [
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__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: selectedPreset.installHint }),
15584
- /* @__PURE__ */ jsxs20(Box20, { marginTop: 1, flexDirection: "column", children: [
15585
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Command:" }),
15586
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, children: selectedPreset.installCommand || "(none required)" })
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__ */ jsx22(Box20, { marginTop: 1, flexDirection: "column", children: /* @__PURE__ */ jsx22(Text21, { color: isSuccess ? theme.accent : theme.error, children: installState.output.slice(-500) }) }),
15589
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(Text21, { color: theme.accent, children: "Server saved. Run /lsp reload to start it." }) })
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15612
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Custom LSP Server \u2014 Name" }),
15613
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Enter a name for this server (e.g., my-server)." }),
15614
- /* @__PURE__ */ jsxs20(Box20, { marginTop: 1, children: [
15615
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, children: "\u203A " }),
15616
- /* @__PURE__ */ jsx22(
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__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15641
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Custom LSP Server \u2014 Command" }),
15642
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Enter the command to start the server (space-separated)." }),
15643
- /* @__PURE__ */ jsxs20(Box20, { marginTop: 1, children: [
15644
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, children: "\u203A " }),
15645
- /* @__PURE__ */ jsx22(
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__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15684
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Save LSP Config" }),
15685
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Where should this server configuration be saved?" }),
15686
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15706
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Edit LSP Server" }),
15707
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, children: "No servers configured." }),
15708
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15730
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Edit LSP Server" }),
15731
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Select a server to toggle enabled/disabled." }),
15732
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15751
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Delete LSP Server" }),
15752
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, children: "No servers configured." }),
15753
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15771
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Delete LSP Server" }),
15772
- /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, dimColor: false, children: "Select a server to remove from config." }),
15773
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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__ */ jsxs20(Box20, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
15791
- /* @__PURE__ */ jsx22(Text21, { color: theme.accent, bold: true, children: "Configured LSP Servers" }),
15792
- keys.length === 0 ? /* @__PURE__ */ jsx22(Text21, { color: theme.info.color, children: "No servers configured." }) : /* @__PURE__ */ jsx22(Box20, { marginTop: 1, flexDirection: "column", children: keys.map((k) => {
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__ */ jsx22(Text21, { color: theme.info.color, children: ` ${k.padEnd(16)} ${status} ${s.command.join(" ")}` }, k);
15975
+ return /* @__PURE__ */ jsx23(Text22, { color: theme.info.color, children: ` ${k.padEnd(16)} ${status} ${s.command.join(" ")}` }, k);
15796
15976
  }) }),
15797
- /* @__PURE__ */ jsx22(Box20, { marginTop: 1, children: /* @__PURE__ */ jsx22(
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 Box21, Text as Text22 } from "ink";
16105
+ import { Box as Box22, Text as Text23 } from "ink";
15926
16106
  import SelectInput9 from "ink-select-input";
15927
- import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
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__ */ jsx23(Box21, { children: colors.map((c, i) => /* @__PURE__ */ jsx23(Text22, { color: c, children: "\u2588" }, i)) });
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__ */ jsxs21(Box21, { flexDirection: "column", borderStyle: "round", borderColor: current.accent, paddingX: 1, children: [
15944
- /* @__PURE__ */ jsx23(Text22, { color: current.accent, bold: true, children: "Pick a theme (restart to apply)" }),
15945
- /* @__PURE__ */ jsx23(Box21, { marginTop: 1, children: /* @__PURE__ */ jsx23(
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__ */ jsxs21(Box21, { children: [
15961
- /* @__PURE__ */ jsx23(Text22, { color, bold: isSelected, dimColor: !isSelected, children: label }),
15962
- t && /* @__PURE__ */ jsx23(Box21, { marginLeft: 1, children: /* @__PURE__ */ jsx23(PaletteSwatches, { palette: t.palette }) })
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 Box22, Text as Text23 } from "ink";
17150
- import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
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__ */ jsxs22(Box22, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
17163
- /* @__PURE__ */ jsx24(Text23, { color: theme.accent, bold: true, children: query ? `Files matching "${query}"` : "Mention a file" }),
17164
- /* @__PURE__ */ jsx24(Text23, { color: theme.info.color, dimColor: true, children: "\u2191\u2193 navigate \xB7 Enter pick \xB7 Esc cancel" }),
17165
- /* @__PURE__ */ jsxs22(Box22, { marginTop: 1, flexDirection: "column", children: [
17166
- visible.length === 0 && /* @__PURE__ */ jsx24(Text23, { color: theme.info.color, children: "No matches" }),
17167
- hasMoreAbove && /* @__PURE__ */ jsxs22(Text23, { color: theme.info.color, dimColor: true, children: [
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__ */ jsxs22(Box22, { flexDirection: "column", children: [
17180
- hasRecentSection && isFirstRecent && /* @__PURE__ */ jsxs22(Text23, { color: theme.palette.success, bold: true, children: [
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__ */ jsxs22(Text23, { color: theme.info.color, dimColor: true, children: [
17364
+ hasRecentSection && isFirstNonRecentAfterRecent && /* @__PURE__ */ jsxs23(Text24, { color: theme.info.color, dimColor: true, children: [
17185
17365
  " ",
17186
17366
  "All files"
17187
17367
  ] }),
17188
- /* @__PURE__ */ jsxs22(Text23, { color: isSelected ? theme.accent : isRecent ? theme.palette.success : void 0, bold: isSelected || isRecent, children: [
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__ */ jsxs22(Text23, { color: theme.info.color, dimColor: true, children: [
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__ */ jsx24(Box22, { marginTop: 1, children: /* @__PURE__ */ jsx24(Text23, { color: theme.info.color, dimColor: true, children: "\u21BB = recently used" }) })
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 Box23, Text as Text24 } from "ink";
17215
- import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
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__ */ jsxs23(Box23, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
17236
- /* @__PURE__ */ jsx25(Text24, { color: theme.accent, bold: true, children: query ? `Commands matching "/${query}"` : "Slash commands" }),
17237
- /* @__PURE__ */ jsx25(Text24, { color: theme.info.color, children: "Arrow keys to navigate, Enter to select, Esc to cancel." }),
17238
- /* @__PURE__ */ jsxs23(Box23, { marginTop: 1, flexDirection: "column", children: [
17239
- visible.length === 0 && /* @__PURE__ */ jsx25(Text24, { color: theme.info.color, children: "No matches" }),
17240
- hasMoreAbove && /* @__PURE__ */ jsxs23(Text24, { color: theme.info.color, children: [
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__ */ jsxs23(Text24, { color: isSelected ? theme.accent : void 0, bold: isSelected, children: [
17430
+ return /* @__PURE__ */ jsxs24(Text25, { color: isSelected ? theme.accent : void 0, bold: isSelected, children: [
17251
17431
  isSelected ? "\u203A " : " ",
17252
17432
  nameCol,
17253
- /* @__PURE__ */ jsxs23(Text24, { color: theme.info.color, children: [
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__ */ jsxs23(Text24, { color: theme.info.color, children: [
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 React15, { useState as useState12, useRef as useRef3, useEffect as useEffect7, useCallback as useCallback3 } from "react";
17370
- import { Box as Box24, Text as Text25, useApp, useInput as useInput9, render } from "ink";
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 jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
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] = useState12(initialCfg);
17630
- const [lspScope, setLspScope] = useState12(initialLspScope);
17631
- const [lspProjectPath, setLspProjectPath] = useState12(initialLspProjectPath);
17632
- const [cloudToken, setCloudToken] = useState12(initialCloudToken);
17633
- const [cloudDeviceId, setCloudDeviceId] = useState12(initialCloudDeviceId);
17634
- const [events, setRawEvents] = useState12([]);
17635
- const setEvents = useCallback3(
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] = useState12("");
17645
- const [busy, setBusy] = useState12(false);
17646
- const [usage, setUsage] = useState12(null);
17647
- const [sessionUsage, setSessionUsage] = useState12(null);
17648
- const [gatewayMeta, setGatewayMeta] = useState12(null);
17649
- const [cloudBudget, setCloudBudget] = useState12(null);
17650
- const [showReasoning, setShowReasoning] = useState12(false);
17651
- const [perm, setPerm] = useState12(null);
17652
- const [limitModal, setLimitModal] = useState12(null);
17653
- const [loopModal, setLoopModal] = useState12(null);
17654
- const [queue, setQueue] = useState12([]);
17655
- const [history, setHistory] = useState12([]);
17656
- const [historyIndex, setHistoryIndex] = useState12(-1);
17657
- const [draftInput, setDraftInput] = useState12("");
17658
- const [mode, setMode] = useState12("edit");
17659
- const [codeMode, setCodeMode] = useState12(false);
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] = useState12(
17842
+ const [effort, setEffort] = useState13(
17662
17843
  initialCfg?.reasoningEffort ?? DEFAULT_REASONING_EFFORT
17663
17844
  );
17664
- const [resumeSessions, setResumeSessions] = useState12(null);
17665
- const [checkpointSession, setCheckpointSession] = useState12(null);
17666
- const [checkpointList, setCheckpointList] = useState12([]);
17667
- const [commandWizard, setCommandWizard] = useState12(null);
17668
- const [commandPicker, setCommandPicker] = useState12(null);
17669
- const [commandToDelete, setCommandToDelete] = useState12(null);
17670
- const [showCommandList, setShowCommandList] = useState12(false);
17671
- const [showLspWizard, setShowLspWizard] = useState12(false);
17672
- const [showRemoteDashboard, setShowRemoteDashboard] = useState12(false);
17673
- const [selectedRemoteSession, setSelectedRemoteSession] = useState12(null);
17674
- const [tasks, setTasks] = useState12([]);
17675
- const [tasksStartedAt, setTasksStartedAt] = useState12(null);
17676
- const [tasksStartTokens, setTasksStartTokens] = useState12(0);
17677
- const [turnStartedAt, setTurnStartedAt] = useState12(null);
17678
- const [turnPhase, setTurnPhase] = useState12("waiting");
17679
- const [currentToolName, setCurrentToolName] = useState12(null);
17680
- const [lastActivityAt, setLastActivityAt] = useState12(null);
17681
- const [verbose, setVerbose] = useState12(false);
17682
- const [hasUpdate, setHasUpdate] = useState12(initialUpdateResult?.hasUpdate ?? false);
17683
- const [latestVersion, setLatestVersion] = useState12(initialUpdateResult?.latestVersion ?? null);
17684
- const [theme, setTheme] = useState12(resolveTheme(initialCfg?.theme));
17685
- const [showThemePicker, setShowThemePicker] = useState12(false);
17686
- const [originalTheme, setOriginalTheme] = useState12(null);
17687
- const [skillsActive, setSkillsActive] = useState12(0);
17688
- const [memoryRecalled, setMemoryRecalled] = useState12(false);
17689
- const [intentTier, setIntentTier] = useState12(null);
17690
- const [kimiMdStale, setKimiMdStale] = useState12(false);
17691
- const [gitBranch, setGitBranch] = useState12(null);
17692
- const [lastSessionTopic, setLastSessionTopic] = useState12(null);
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] = useState12(0);
17769
- const [activePicker, setActivePicker] = useState12(null);
17770
- const [filePickerItems, setFilePickerItems] = useState12([]);
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] = useState12(0);
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 = React15.useMemo(() => {
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 = React15.useMemo(() => {
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 = React15.useMemo(() => {
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 = React15.useMemo(() => {
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 = useCallback3(() => {
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 = useCallback3(() => {
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 = useCallback3(() => {
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 = useCallback3(() => {
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 = useCallback3(async () => {
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 = useCallback3(async () => {
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 = useCallback3(async () => {
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 = useCallback3(() => {
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 = useCallback3(async () => {
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 = useCallback3(
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
- useInput9((inputChar, key) => {
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 = useCallback3(() => {
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 = useCallback3(
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 = useCallback3(
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 = useCallback3((meta) => {
18857
+ const updateGatewayMeta = useCallback4((meta) => {
18675
18858
  gatewayMetaRef.current = meta;
18676
18859
  setGatewayMeta(meta);
18677
18860
  }, []);
18678
- const runCompact = useCallback3(async () => {
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 = useCallback3(async () => {
18957
+ const openResumePicker = useCallback4(async () => {
18775
18958
  const sessions = await listSessions(200, process.cwd());
18776
18959
  setResumeSessions(sessions);
18777
18960
  }, []);
18778
- const runInit = useCallback3(async () => {
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 = useCallback3(
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 = useCallback3(
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 = useCallback3(
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 = useCallback3(
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 = useCallback3(
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 = `${FEEDBACK_WORKER_URL}/?s=${session}&v=${getAppVersion()}`;
20063
+ const url = `${FEEDBACK_WORKER_URL2}/?s=${session}&v=${getAppVersion()}`;
19881
20064
  openBrowser2(url);
19882
- setEvents((e) => [
19883
- ...e,
19884
- { kind: "info", key: mkKey(), text: "Opened voice note page in your browser. Record your message there and hit Send when you're done." }
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 = useCallback3(
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 = useCallback3(
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 = useCallback3(
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 = useCallback3(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(ResumePicker, { sessions: resumeSessions, onPick: handleResumePick }) }) });
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: selectedRemoteSession ? /* @__PURE__ */ jsx26(
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__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [
20930
- /* @__PURE__ */ jsxs24(Text25, { color: theme.accent, bold: true, children: [
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__ */ jsx26(Text25, { color: theme.info.color, children: commandToDelete.filepath }),
20936
- /* @__PURE__ */ jsx26(Box24, { marginTop: 1, children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsx26(Box24, { flexDirection: "column", children: /* @__PURE__ */ jsx26(ThemePicker, { themes: themeList(), onPick: handleThemePick }) }) });
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__ */ jsx26(ThemeProvider, { theme, children: /* @__PURE__ */ jsxs24(Box24, { flexDirection: "column", children: [
20968
- !hasConversation && events.length === 0 ? /* @__PURE__ */ jsx26(Welcome, {}) : /* @__PURE__ */ jsx26(ChatView, { events, showReasoning, verbose, intentTier: intentTier ?? void 0 }),
20969
- perm ? /* @__PURE__ */ jsx26(
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__ */ jsx26(
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__ */ jsx26(
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__ */ jsxs24(Box24, { flexDirection: "column", marginTop: 1, children: [
21010
- tasks.length > 0 && /* @__PURE__ */ jsx26(
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__ */ jsx26(Box24, { flexDirection: "column", marginBottom: 1, children: queue.map((q, i) => /* @__PURE__ */ jsxs24(Text25, { color: theme.info.color, dimColor: theme.info.dim, children: [
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__ */ jsx26(
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__ */ jsx26(
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__ */ jsx26(
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__ */ jsxs24(Box24, { marginTop: 1, children: [
21063
- /* @__PURE__ */ jsx26(Text25, { color: theme.prompt ?? theme.accent, children: "\u203A " }),
21064
- /* @__PURE__ */ jsx26(
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__ */ jsx26(
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, FEEDBACK_WORKER_URL, CONTEXT_LIMIT, AUTO_COMPACT_SUGGEST_PCT, MAX_EVENTS, nextAssistantId, nextKey, mkKey, MAX_IMAGES_PER_MESSAGE;
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
- FEEDBACK_WORKER_URL = "https://hello.kimiflare.com";
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;