research-copilot 0.2.3 → 0.2.5

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.
Files changed (72) hide show
  1. package/app/out/main/index.mjs +154 -48
  2. package/app/out/preload/index.js +7 -0
  3. package/app/out/renderer/assets/{MilkdownMarkdownEditor-DjFLwyh4.js → MilkdownMarkdownEditor-2wg63TSu.js} +50 -50
  4. package/app/out/renderer/assets/{arc-7NllWjXF.js → arc-Bpvizsn8.js} +1 -1
  5. package/app/out/renderer/assets/{blockDiagram-c4efeb88-DsOU-_zA.js → blockDiagram-c4efeb88-BopVnbxX.js} +8 -8
  6. package/app/out/renderer/assets/{c4Diagram-c83219d4-U2jdevgc.js → c4Diagram-c83219d4-DYK03hOG.js} +3 -3
  7. package/app/out/renderer/assets/{channel-Cjd8jvi8.js → channel-CmlMCRa3.js} +1 -1
  8. package/app/out/renderer/assets/{classDiagram-beda092f-Yj0hyRiU.js → classDiagram-beda092f-oSGZIrY_.js} +6 -6
  9. package/app/out/renderer/assets/{classDiagram-v2-2358418a-CK0FL8Pk.js → classDiagram-v2-2358418a-BHM8844_.js} +10 -10
  10. package/app/out/renderer/assets/{clone-I16owcK3.js → clone-PITMMgBv.js} +1 -1
  11. package/app/out/renderer/assets/{createText-1719965b-D_GY3BGW.js → createText-1719965b-BN3FKtRi.js} +2 -2
  12. package/app/out/renderer/assets/{edges-96097737-DKD2znJk.js → edges-96097737-76OqZvY1.js} +3 -3
  13. package/app/out/renderer/assets/{erDiagram-0228fc6a-CxrCv4uP.js → erDiagram-0228fc6a-CtXOkjA1.js} +5 -5
  14. package/app/out/renderer/assets/{flowDb-c6c81e3f-8o4wFApi.js → flowDb-c6c81e3f-BCT1eQU9.js} +1 -1
  15. package/app/out/renderer/assets/{flowDiagram-50d868cf-B1eYKlZC.js → flowDiagram-50d868cf-BKR9gSZL.js} +12 -12
  16. package/app/out/renderer/assets/{flowDiagram-v2-4f6560a1-Y4_T8Xi1.js → flowDiagram-v2-4f6560a1-CBGrwW2p.js} +12 -12
  17. package/app/out/renderer/assets/{flowchart-elk-definition-6af322e1-BjDPU2Ol.js → flowchart-elk-definition-6af322e1-CQxHOjqj.js} +6 -6
  18. package/app/out/renderer/assets/{ganttDiagram-a2739b55-CdQAT7up.js → ganttDiagram-a2739b55-BVsEi_1s.js} +3 -3
  19. package/app/out/renderer/assets/{gitGraphDiagram-82fe8481-Bl7KP_G5.js → gitGraphDiagram-82fe8481-BlGuagiw.js} +2 -2
  20. package/app/out/renderer/assets/{graph-Bje_pjwC.js → graph-B-Uy9LVb.js} +1 -1
  21. package/app/out/renderer/assets/{index-5325376f-DB5UfMSQ.js → index-5325376f-DFVM9bEE.js} +6 -6
  22. package/app/out/renderer/assets/{index-BnGN3XMZ.js → index-9DibXU9f.js} +6 -6
  23. package/app/out/renderer/assets/{index-BWkpc_Fb.js → index-B8_hOntP.js} +3 -3
  24. package/app/out/renderer/assets/{index-TtJcntKb.js → index-BRtK-r6R.js} +3 -3
  25. package/app/out/renderer/assets/{index-CU1ei-Q-.js → index-BW7eNq5J.js} +6 -6
  26. package/app/out/renderer/assets/{index-BlSmCt8A.js → index-BcKf35dV.js} +6 -6
  27. package/app/out/renderer/assets/{index-CT1HtzVp.css → index-BllgkT3a.css} +83 -0
  28. package/app/out/renderer/assets/{index-CTrj2aB2.js → index-BrQ_Y-LE.js} +3 -3
  29. package/app/out/renderer/assets/{index-BX5-hWqk.js → index-C0Czl4Cv.js} +3 -3
  30. package/app/out/renderer/assets/{index-BHl_tELv.js → index-CoEolmNf.js} +5 -5
  31. package/app/out/renderer/assets/{index-CISiP4Vc.js → index-DFnA5GRw.js} +255 -63
  32. package/app/out/renderer/assets/{index-CDWVrn8L.js → index-Dk7Wa0Je.js} +3 -3
  33. package/app/out/renderer/assets/{index-UYsogkLv.js → index-DkVOuuVx.js} +6 -6
  34. package/app/out/renderer/assets/{index-bPpSppnq.js → index-DlRaaYEU.js} +3 -3
  35. package/app/out/renderer/assets/{index-K7KmUSPg.js → index-DlUgEE0Z.js} +3 -3
  36. package/app/out/renderer/assets/{index-D9YGyBA9.js → index-Dt57Xb0R.js} +3 -3
  37. package/app/out/renderer/assets/{index-DCr-i28b.js → index-PVPY9npp.js} +3 -3
  38. package/app/out/renderer/assets/{index-CoIRGlb6.js → index-SoluVSbR.js} +3 -3
  39. package/app/out/renderer/assets/{index-DihmTRDX.js → index-cLiUsMmu.js} +6 -6
  40. package/app/out/renderer/assets/{index-hI44wokU.js → index-i5J_uYOr.js} +6 -6
  41. package/app/out/renderer/assets/{index-DIB3jH2J.js → index-j9e1ML36.js} +1 -1
  42. package/app/out/renderer/assets/{index-BbbK94Tl.js → index-jJGUNJNs.js} +4 -4
  43. package/app/out/renderer/assets/{index-DkTtiwdL.js → index-jMygKcX_.js} +3 -3
  44. package/app/out/renderer/assets/{index-DRgsVAez.js → index-rMj6TAlT.js} +4 -4
  45. package/app/out/renderer/assets/{index-DFmh36hv.js → index-wvsLwV9F.js} +3 -3
  46. package/app/out/renderer/assets/{infoDiagram-8eee0895-Dfty_4jM.js → infoDiagram-8eee0895-C6WcmMAB.js} +2 -2
  47. package/app/out/renderer/assets/{journeyDiagram-c64418c1-BzDYpsjx.js → journeyDiagram-c64418c1-wkVqZcQW.js} +4 -4
  48. package/app/out/renderer/assets/{layout-DbHSNFr9.js → layout-C6Q0z3G5.js} +2 -2
  49. package/app/out/renderer/assets/{line-jV7QLjZ_.js → line-BDJIIoze.js} +1 -1
  50. package/app/out/renderer/assets/{linear-CIeuNnVa.js → linear-95dGQxH4.js} +1 -1
  51. package/app/out/renderer/assets/{mindmap-definition-8da855dc-CeDEmTB-.js → mindmap-definition-8da855dc-DWlj4Xm-.js} +3 -3
  52. package/app/out/renderer/assets/{pieDiagram-a8764435-Bpm1FcX3.js → pieDiagram-a8764435-CrdnVfOv.js} +3 -3
  53. package/app/out/renderer/assets/{quadrantDiagram-1e28029f-CEB7PxJa.js → quadrantDiagram-1e28029f-M3YRJdbH.js} +3 -3
  54. package/app/out/renderer/assets/{requirementDiagram-08caed73-CZJU8B_1.js → requirementDiagram-08caed73-C08ql71g.js} +5 -5
  55. package/app/out/renderer/assets/{sankeyDiagram-a04cb91d-JXpwgeE0.js → sankeyDiagram-a04cb91d-C8ADDrm7.js} +2 -2
  56. package/app/out/renderer/assets/{sequenceDiagram-c5b8d532-CtvDQG5X.js → sequenceDiagram-c5b8d532-gNfcaPex.js} +3 -3
  57. package/app/out/renderer/assets/{stateDiagram-1ecb1508-DQRUQm_b.js → stateDiagram-1ecb1508-CbYo7fPM.js} +6 -6
  58. package/app/out/renderer/assets/{stateDiagram-v2-c2b004d7-qWcRpqpV.js → stateDiagram-v2-c2b004d7-C9NIgZa5.js} +10 -10
  59. package/app/out/renderer/assets/{styles-b4e223ce-6DWryYQB.js → styles-b4e223ce-DgvzV6cM.js} +1 -1
  60. package/app/out/renderer/assets/{styles-ca3715f6-CZ9SeO17.js → styles-ca3715f6-Dxd4UtQU.js} +1 -1
  61. package/app/out/renderer/assets/{styles-d45a18b0-Bkmie_Qv.js → styles-d45a18b0-C0jzXR3J.js} +4 -4
  62. package/app/out/renderer/assets/{svgDrawCommon-b86b1483-BWRX1ZPq.js → svgDrawCommon-b86b1483-CjGKGyYF.js} +1 -1
  63. package/app/out/renderer/assets/{timeline-definition-faaaa080-XcgfjspK.js → timeline-definition-faaaa080-CRz7hPUx.js} +3 -3
  64. package/app/out/renderer/assets/{xychartDiagram-f5964ef8-C0CQzgr8.js → xychartDiagram-f5964ef8-BI-asLSS.js} +5 -5
  65. package/app/out/renderer/index.html +2 -2
  66. package/lib/skills/builtin/paper-revision/SKILL.md +467 -0
  67. package/lib/skills/builtin/paper-revision/references/evidence-strengthening.md +101 -0
  68. package/lib/skills/builtin/paper-revision/references/framing-patterns.md +119 -0
  69. package/lib/skills/builtin/paper-revision/references/reviewer-attack-catalog.md +171 -0
  70. package/lib/skills/builtin/paper-revision/references/venue-strategies.md +114 -0
  71. package/lib/skills/builtin/paper-writing/SKILL.md +1 -0
  72. package/package.json +4 -4
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./MilkdownMarkdownEditor-DjFLwyh4.js","./MilkdownMarkdownEditor-tTNRIB2K.css"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./MilkdownMarkdownEditor-2wg63TSu.js","./MilkdownMarkdownEditor-tTNRIB2K.css"])))=>i.map(i=>d[i]);
2
2
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
3
3
  function getDefaultExportFromCjs(x) {
4
4
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
@@ -12652,6 +12652,17 @@ const CircleAlert = createLucideIcon("CircleAlert", [
12652
12652
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
12653
12653
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
12654
12654
  ]);
12655
+ /**
12656
+ * @license lucide-react v0.469.0 - ISC
12657
+ *
12658
+ * This source code is licensed under the ISC license.
12659
+ * See the LICENSE file in the root directory of this source tree.
12660
+ */
12661
+ const CircleArrowUp = createLucideIcon("CircleArrowUp", [
12662
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
12663
+ ["path", { d: "m16 12-4-4-4 4", key: "177agl" }],
12664
+ ["path", { d: "M12 16V8", key: "1sbj14" }]
12665
+ ]);
12655
12666
  /**
12656
12667
  * @license lucide-react v0.469.0 - ISC
12657
12668
  *
@@ -12673,6 +12684,16 @@ const CloudUpload = createLucideIcon("CloudUpload", [
12673
12684
  ["path", { d: "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242", key: "1pljnt" }],
12674
12685
  ["path", { d: "m8 17 4-4 4 4", key: "1quai1" }]
12675
12686
  ]);
12687
+ /**
12688
+ * @license lucide-react v0.469.0 - ISC
12689
+ *
12690
+ * This source code is licensed under the ISC license.
12691
+ * See the LICENSE file in the root directory of this source tree.
12692
+ */
12693
+ const Copy = createLucideIcon("Copy", [
12694
+ ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
12695
+ ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
12696
+ ]);
12676
12697
  /**
12677
12698
  * @license lucide-react v0.469.0 - ISC
12678
12699
  *
@@ -29637,6 +29658,20 @@ function ToolUseStream({ events: propEvents }) {
29637
29658
  }
29638
29659
  const api$5 = window.api;
29639
29660
  const remarkPlugins$1 = [remarkGfm];
29661
+ function formatMessageTime(ts2) {
29662
+ const d = new Date(ts2);
29663
+ const now2 = /* @__PURE__ */ new Date();
29664
+ const time = d.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
29665
+ const isToday = d.toDateString() === now2.toDateString();
29666
+ if (isToday) return time;
29667
+ const yesterday = new Date(now2);
29668
+ yesterday.setDate(yesterday.getDate() - 1);
29669
+ if (d.toDateString() === yesterday.toDateString()) return `Yesterday ${time}`;
29670
+ if (d.getFullYear() === now2.getFullYear()) {
29671
+ return d.toLocaleDateString([], { month: "short", day: "numeric" }) + " " + time;
29672
+ }
29673
+ return d.toLocaleDateString([], { year: "numeric", month: "short", day: "numeric" }) + " " + time;
29674
+ }
29640
29675
  function SelectionBookmark() {
29641
29676
  const refreshAll = useEntityStore((s15) => s15.refreshAll);
29642
29677
  const markSaved = useChatStore((s15) => s15.markSaved);
@@ -29781,6 +29816,12 @@ const MessageBubble = React$2.memo(function MessageBubble2({ msg, isSaved }) {
29781
29816
  setSaveState("idle");
29782
29817
  }
29783
29818
  };
29819
+ const [copied, setCopied] = reactExports.useState(false);
29820
+ const handleCopy = async () => {
29821
+ await navigator.clipboard.writeText(msg.content);
29822
+ setCopied(true);
29823
+ setTimeout(() => setCopied(false), 1500);
29824
+ };
29784
29825
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex ${isUser ? "justify-end" : "justify-start"} group`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
29785
29826
  "div",
29786
29827
  {
@@ -29802,17 +29843,30 @@ const MessageBubble = React$2.memo(function MessageBubble2({ msg, isSaved }) {
29802
29843
  i
29803
29844
  )) }),
29804
29845
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "md-prose", style: { color: "var(--color-text)" }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Markdown, { remarkPlugins: remarkPlugins$1, children: msg.content }) }),
29805
- !isUser && /* @__PURE__ */ jsxRuntimeExports.jsx(
29806
- "button",
29807
- {
29808
- onClick: handleSaveNote,
29809
- disabled: saveState !== "idle",
29810
- className: `absolute -right-8 top-2 transition-opacity ${saveState === "saved" ? "opacity-100 t-text-success" : saveState === "saving" ? "opacity-100 t-text-muted" : "opacity-0 group-hover:opacity-100 t-text-muted hover:t-text-accent-soft"}`,
29811
- title: saveState === "saved" ? "Saved as note" : "Save entire message as note",
29812
- "aria-label": saveState === "saved" ? "Message saved as note" : "Save entire message as note",
29813
- children: saveState === "saving" ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { size: 14, className: "animate-spin" }) : saveState === "saved" ? /* @__PURE__ */ jsxRuntimeExports.jsx(BookmarkCheck, { size: 14 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Bookmark, { size: 14 })
29814
- }
29815
- )
29846
+ msg.timestamp > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `mt-1.5 text-[10px] t-text-muted select-none ${isUser ? "text-right" : "text-left"}`, children: formatMessageTime(msg.timestamp) }),
29847
+ !isUser && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute -right-8 top-2 flex flex-col gap-1.5", children: [
29848
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
29849
+ "button",
29850
+ {
29851
+ onClick: handleSaveNote,
29852
+ disabled: saveState !== "idle",
29853
+ className: `transition-opacity ${saveState === "saved" ? "opacity-100 t-text-success" : saveState === "saving" ? "opacity-100 t-text-muted" : "opacity-0 group-hover:opacity-100 t-text-muted hover:t-text-accent-soft"}`,
29854
+ title: saveState === "saved" ? "Saved as note" : "Save entire message as note",
29855
+ "aria-label": saveState === "saved" ? "Message saved as note" : "Save entire message as note",
29856
+ children: saveState === "saving" ? /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { size: 14, className: "animate-spin" }) : saveState === "saved" ? /* @__PURE__ */ jsxRuntimeExports.jsx(BookmarkCheck, { size: 14 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Bookmark, { size: 14 })
29857
+ }
29858
+ ),
29859
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
29860
+ "button",
29861
+ {
29862
+ onClick: handleCopy,
29863
+ className: `transition-opacity ${copied ? "opacity-100 t-text-success" : "opacity-0 group-hover:opacity-100 t-text-muted hover:t-text-accent-soft"}`,
29864
+ title: copied ? "Copied!" : "Copy message",
29865
+ "aria-label": copied ? "Message copied" : "Copy message to clipboard",
29866
+ children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { size: 14 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { size: 14 })
29867
+ }
29868
+ )
29869
+ ] })
29816
29870
  ]
29817
29871
  }
29818
29872
  ) });
@@ -29839,6 +29893,59 @@ function StreamingBubble() {
29839
29893
  }
29840
29894
  ) });
29841
29895
  }
29896
+ const GAP_THRESHOLD_MS = 5 * 60 * 1e3;
29897
+ function buildTimelineNodes(messages) {
29898
+ const userAndAssistant = messages.filter((m) => m.role !== "system");
29899
+ if (userAndAssistant.length < 6) return [];
29900
+ const nodes = [];
29901
+ let lastTs = 0;
29902
+ let lastDate = "";
29903
+ for (const msg of userAndAssistant) {
29904
+ const gap = msg.timestamp - lastTs;
29905
+ if (gap >= GAP_THRESHOLD_MS || lastTs === 0) {
29906
+ const d = new Date(msg.timestamp);
29907
+ const dateStr = d.toDateString();
29908
+ const time = d.toLocaleTimeString([], { hour: "numeric", minute: "2-digit" });
29909
+ let label;
29910
+ const now2 = /* @__PURE__ */ new Date();
29911
+ if (dateStr !== lastDate) {
29912
+ const isToday = dateStr === now2.toDateString();
29913
+ const yesterday = new Date(now2);
29914
+ yesterday.setDate(yesterday.getDate() - 1);
29915
+ const isYesterday = dateStr === yesterday.toDateString();
29916
+ const dayLabel = isToday ? "" : isYesterday ? "Yest " : d.toLocaleDateString([], { month: "short", day: "numeric" }) + " ";
29917
+ label = dayLabel + time;
29918
+ lastDate = dateStr;
29919
+ } else {
29920
+ label = time;
29921
+ }
29922
+ nodes.push({ label, msgId: msg.id });
29923
+ }
29924
+ lastTs = msg.timestamp;
29925
+ }
29926
+ return nodes;
29927
+ }
29928
+ function ChatTimeline({ messages }) {
29929
+ const requestScrollTo = useChatStore((s15) => s15.requestScrollTo);
29930
+ const nodes = reactExports.useMemo(() => buildTimelineNodes(messages), [messages]);
29931
+ if (nodes.length === 0) return null;
29932
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute right-0 top-0 bottom-0 w-[56px] flex flex-col items-center py-4 pointer-events-none select-none", children: [
29933
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-4 bottom-4 w-px bg-[var(--color-border)]", style: { opacity: 0.3 } }),
29934
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative flex flex-col gap-0 w-full h-full justify-between", children: nodes.map((node2, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
29935
+ "button",
29936
+ {
29937
+ onClick: () => requestScrollTo(node2.msgId),
29938
+ className: "pointer-events-auto group/dot relative flex items-center justify-center",
29939
+ title: node2.label,
29940
+ children: [
29941
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-[7px] h-[7px] rounded-full bg-[var(--color-text-muted)] group-hover/dot:bg-[var(--color-accent-soft)] transition-colors", style: { opacity: 0.5 } }),
29942
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute right-full mr-2 whitespace-nowrap text-[10px] t-text-muted opacity-0 group-hover/dot:opacity-100 transition-opacity pointer-events-none", children: node2.label })
29943
+ ]
29944
+ },
29945
+ node2.msgId
29946
+ )) })
29947
+ ] });
29948
+ }
29842
29949
  function ChatMessages() {
29843
29950
  const messages = useChatStore((s15) => s15.messages);
29844
29951
  const isStreaming = useChatStore((s15) => s15.isStreaming);
@@ -29893,14 +30000,15 @@ function ChatMessages() {
29893
30000
  setTimeout(() => el2.classList.remove("ring-2", "ring-[var(--color-accent-soft)]"), 1500);
29894
30001
  }
29895
30002
  }, [scrollToMessageId]);
29896
- return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
30003
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative h-full", children: [
29897
30004
  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectionBookmark, {}),
30005
+ /* @__PURE__ */ jsxRuntimeExports.jsx(ChatTimeline, { messages }),
29898
30006
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
29899
30007
  "div",
29900
30008
  {
29901
30009
  ref: scrollContainerRef,
29902
30010
  onScroll: handleScroll,
29903
- className: "overflow-y-auto h-full",
30011
+ className: "overflow-y-auto h-full pr-[56px]",
29904
30012
  role: "log",
29905
30013
  "aria-label": "Chat messages",
29906
30014
  "aria-live": "polite",
@@ -29990,8 +30098,18 @@ function MentionPopover({ query, onSelect, onClose }) {
29990
30098
  let stale = false;
29991
30099
  setLoading(true);
29992
30100
  clearTimeout(debounceRef.current);
30101
+ let search2 = query;
30102
+ let type;
30103
+ const colonIdx = query.indexOf(":");
30104
+ if (colonIdx > 0) {
30105
+ const prefix2 = query.slice(0, colonIdx);
30106
+ if (["note", "paper", "data", "file"].includes(prefix2)) {
30107
+ type = prefix2;
30108
+ search2 = query.slice(colonIdx + 1);
30109
+ }
30110
+ }
29993
30111
  debounceRef.current = setTimeout(() => {
29994
- api$4.getCandidates(query).then((result) => {
30112
+ api$4.getCandidates(search2, type).then((result) => {
29995
30113
  if (stale) return;
29996
30114
  setCandidates(result || []);
29997
30115
  setSelectedIdx(0);
@@ -31568,7 +31686,7 @@ function CenterPanel() {
31568
31686
  }
31569
31687
  const remarkPlugins = [remarkGfm];
31570
31688
  const LazyMilkdownMarkdownEditor = reactExports.lazy(async () => {
31571
- const mod = await __vitePreload(() => import("./MilkdownMarkdownEditor-DjFLwyh4.js").then((n) => n.bL), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
31689
+ const mod = await __vitePreload(() => import("./MilkdownMarkdownEditor-2wg63TSu.js").then((n) => n.bL), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
31572
31690
  return { default: mod.MilkdownMarkdownEditor };
31573
31691
  });
31574
31692
  const typeIcons = {
@@ -41013,6 +41131,67 @@ const useToolProgressStore = create$1((set) => ({
41013
41131
  clearAll: () => set({ inFlight: /* @__PURE__ */ new Map() })
41014
41132
  }));
41015
41133
  const api = window.api;
41134
+ function UpdateBanner() {
41135
+ const [update, setUpdate] = reactExports.useState(null);
41136
+ const [dismissed, setDismissed] = reactExports.useState(false);
41137
+ const [copied, setCopied] = reactExports.useState(false);
41138
+ reactExports.useEffect(() => {
41139
+ api.checkForUpdate().then((info) => {
41140
+ if (info.hasUpdate) setUpdate(info);
41141
+ }).catch(() => {
41142
+ });
41143
+ }, []);
41144
+ if (!update || dismissed) return null;
41145
+ const command = "npm update -g research-copilot";
41146
+ const handleCopy = () => {
41147
+ navigator.clipboard.writeText(command);
41148
+ setCopied(true);
41149
+ setTimeout(() => setCopied(false), 2e3);
41150
+ };
41151
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
41152
+ "div",
41153
+ {
41154
+ className: "w-full max-w-md mb-6 rounded-xl border t-border-subtle overflow-hidden",
41155
+ style: { background: "linear-gradient(135deg, rgba(99,102,241,0.12), rgba(168,85,247,0.10))" },
41156
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-4 py-3 flex items-start gap-3", children: [
41157
+ /* @__PURE__ */ jsxRuntimeExports.jsx(CircleArrowUp, { size: 18, className: "text-indigo-400 mt-0.5 shrink-0" }),
41158
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
41159
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[13px] font-medium t-text", children: [
41160
+ "v",
41161
+ update.latest,
41162
+ " available",
41163
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "t-text-secondary font-normal ml-1.5", children: [
41164
+ "(current: v",
41165
+ update.current,
41166
+ ")"
41167
+ ] })
41168
+ ] }),
41169
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-2 flex items-center gap-2", children: [
41170
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "flex-1 text-xs font-mono px-2.5 py-1.5 rounded-md t-bg-surface t-text select-all truncate", children: command }),
41171
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
41172
+ "button",
41173
+ {
41174
+ onClick: handleCopy,
41175
+ className: "shrink-0 p-1.5 rounded-md t-bg-surface hover:opacity-80 transition-opacity",
41176
+ title: "Copy command",
41177
+ children: copied ? /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { size: 14, className: "text-green-400" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Copy, { size: 14, className: "t-text-secondary" })
41178
+ }
41179
+ )
41180
+ ] })
41181
+ ] }),
41182
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
41183
+ "button",
41184
+ {
41185
+ onClick: () => setDismissed(true),
41186
+ className: "shrink-0 p-1 rounded-md hover:t-bg-surface transition-colors t-text-secondary hover:t-text",
41187
+ title: "Dismiss",
41188
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$1, { size: 14 })
41189
+ }
41190
+ )
41191
+ ] })
41192
+ }
41193
+ );
41194
+ }
41016
41195
  function FolderGate({ onOpenSettings }) {
41017
41196
  const pickFolder = useSessionStore((s15) => s15.pickFolder);
41018
41197
  const refreshEntities = useEntityStore((s15) => s15.refreshAll);
@@ -41024,57 +41203,60 @@ function FolderGate({ onOpenSettings }) {
41024
41203
  };
41025
41204
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-screen w-screen t-bg-base t-text items-center justify-center", children: [
41026
41205
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "drag-region fixed top-0 left-0 right-0 h-8 z-50" }),
41027
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center max-w-sm px-8", children: [
41028
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative mx-auto mb-8 w-fit", children: [
41206
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center max-w-sm px-8", children: [
41207
+ /* @__PURE__ */ jsxRuntimeExports.jsx(UpdateBanner, {}),
41208
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
41209
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative mx-auto mb-8 w-fit", children: [
41210
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
41211
+ "div",
41212
+ {
41213
+ className: "w-14 h-14 rounded-2xl flex items-center justify-center t-gradient-accent t-gradient-accent-shadow-lg",
41214
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white text-xl font-bold tracking-tight", children: "P" })
41215
+ }
41216
+ ),
41217
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
41218
+ "div",
41219
+ {
41220
+ className: "absolute -inset-2 rounded-3xl opacity-15 blur-xl -z-10 t-gradient-accent"
41221
+ }
41222
+ )
41223
+ ] }),
41029
41224
  /* @__PURE__ */ jsxRuntimeExports.jsx(
41030
- "div",
41225
+ "h1",
41031
41226
  {
41032
- className: "w-14 h-14 rounded-2xl flex items-center justify-center t-gradient-accent t-gradient-accent-shadow-lg",
41033
- children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-white text-xl font-bold tracking-tight", children: "P" })
41227
+ className: "text-2xl font-semibold mb-2 tracking-tight",
41228
+ children: "Research Pilot"
41034
41229
  }
41035
41230
  ),
41036
- /* @__PURE__ */ jsxRuntimeExports.jsx(
41037
- "div",
41038
- {
41039
- className: "absolute -inset-2 rounded-3xl opacity-15 blur-xl -z-10 t-gradient-accent"
41040
- }
41041
- )
41042
- ] }),
41043
- /* @__PURE__ */ jsxRuntimeExports.jsx(
41044
- "h1",
41045
- {
41046
- className: "text-2xl font-semibold mb-2 tracking-tight",
41047
- children: "Research Pilot"
41048
- }
41049
- ),
41050
- /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "t-text-secondary text-[13px] mb-8 leading-relaxed", children: [
41051
- "Open a project folder to begin. Your notes, papers, and data will live in a ",
41052
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "px-1 py-0.5 rounded t-bg-surface text-xs font-mono", children: ".research-pilot" }),
41053
- " directory."
41054
- ] }),
41055
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3", children: [
41056
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
41057
- "button",
41058
- {
41059
- onClick: handlePick,
41060
- className: "inline-flex items-center gap-2 px-5 py-2.5 rounded-lg text-white text-sm font-medium\n hover:opacity-90 transition-all duration-200 t-gradient-accent t-gradient-accent-shadow",
41061
- children: [
41062
- /* @__PURE__ */ jsxRuntimeExports.jsx(FolderOpen, { size: 16 }),
41063
- "Open Project Folder"
41064
- ]
41065
- }
41066
- ),
41067
- onOpenSettings && /* @__PURE__ */ jsxRuntimeExports.jsxs(
41068
- "button",
41069
- {
41070
- onClick: onOpenSettings,
41071
- className: "inline-flex items-center gap-1.5 text-xs t-text-secondary hover:t-text transition-colors",
41072
- children: [
41073
- /* @__PURE__ */ jsxRuntimeExports.jsx(Settings, { size: 13 }),
41074
- "API Keys & Settings"
41075
- ]
41076
- }
41077
- )
41231
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "t-text-secondary text-[13px] mb-8 leading-relaxed", children: [
41232
+ "Open a project folder to begin. Your notes, papers, and data will live in a ",
41233
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "px-1 py-0.5 rounded t-bg-surface text-xs font-mono", children: ".research-pilot" }),
41234
+ " directory."
41235
+ ] }),
41236
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3", children: [
41237
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
41238
+ "button",
41239
+ {
41240
+ onClick: handlePick,
41241
+ className: "inline-flex items-center gap-2 px-5 py-2.5 rounded-lg text-white text-sm font-medium\n hover:opacity-90 transition-all duration-200 t-gradient-accent t-gradient-accent-shadow",
41242
+ children: [
41243
+ /* @__PURE__ */ jsxRuntimeExports.jsx(FolderOpen, { size: 16 }),
41244
+ "Open Project Folder"
41245
+ ]
41246
+ }
41247
+ ),
41248
+ onOpenSettings && /* @__PURE__ */ jsxRuntimeExports.jsxs(
41249
+ "button",
41250
+ {
41251
+ onClick: onOpenSettings,
41252
+ className: "inline-flex items-center gap-1.5 text-xs t-text-secondary hover:t-text transition-colors",
41253
+ children: [
41254
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Settings, { size: 13 }),
41255
+ "API Keys & Settings"
41256
+ ]
41257
+ }
41258
+ )
41259
+ ] })
41078
41260
  ] })
41079
41261
  ] })
41080
41262
  ] });
@@ -41252,6 +41434,12 @@ function App() {
41252
41434
  });
41253
41435
  return unsub;
41254
41436
  }, []);
41437
+ reactExports.useEffect(() => {
41438
+ const unsub = api.onExportChat(() => {
41439
+ api.exportChat();
41440
+ });
41441
+ return unsub;
41442
+ }, []);
41255
41443
  reactExports.useEffect(() => {
41256
41444
  const handler = (e) => {
41257
41445
  if (previewEditorFocused) return;
@@ -41280,6 +41468,10 @@ function App() {
41280
41468
  if (e.key === "Escape" && previewEntity) {
41281
41469
  useUIStore.getState().closePreview();
41282
41470
  }
41471
+ if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key === "E") {
41472
+ e.preventDefault();
41473
+ api.exportChat();
41474
+ }
41283
41475
  if ((e.metaKey || e.ctrlKey) && e.key === "`") {
41284
41476
  e.preventDefault();
41285
41477
  useUIStore.getState().toggleTerminal();
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, E as EditorView, e as syntaxTree, g as EditorSelection, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, f as foldNodeProp, aK as bracketMatchingHandle } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, E as EditorView, e as syntaxTree, g as EditorSelection, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, f as foldNodeProp, aK as bracketMatchingHandle } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const StartTag = 1, StartCloseTag = 2, MissingCloseTag = 3, mismatchedStartCloseTag = 4, incompleteStartCloseTag = 5, commentContent$1 = 36, piContent$1 = 37, cdataContent$1 = 38, Element$1 = 11, OpenTag = 13;
5
5
  function nameChar(ch) {
6
6
  return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161;
@@ -1,9 +1,9 @@
1
- import { L as LRParser, E as ExternalTokenizer } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import { html } from "./index-BHl_tELv.js";
4
- import "./index-CISiP4Vc.js";
5
- import "./index-BX5-hWqk.js";
6
- import "./index-CTrj2aB2.js";
1
+ import { L as LRParser, E as ExternalTokenizer } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import { html } from "./index-CoEolmNf.js";
4
+ import "./index-DFnA5GRw.js";
5
+ import "./index-C0Czl4Cv.js";
6
+ import "./index-BrQ_Y-LE.js";
7
7
  const castOpen = 1, HeredocString = 2, interpolatedStringContent = 275, EscapeSequence = 3, afterInterpolation = 276, automaticSemicolon = 277, eof = 278, abstract = 4, and = 5, array = 6, as = 7, Boolean = 8, _break = 9, _case = 10, _catch = 11, clone = 12, _const = 13, _continue = 14, _default = 15, declare = 16, _do = 17, echo = 18, _else = 19, elseif = 20, enddeclare = 21, endfor = 22, endforeach = 23, endif = 24, endswitch = 25, endwhile = 26, _enum = 27, _extends = 28, final = 29, _finally = 30, fn = 31, _for = 32, foreach = 33, from = 34, _function = 35, global = 36, goto = 37, _if = 38, _implements = 39, include = 40, include_once = 41, _instanceof = 42, insteadof = 43, _interface = 44, list = 45, match = 46, namespace = 47, _new = 48, _null = 49, or = 50, print = 51, readonly = 52, _require = 53, require_once = 54, _return = 55, _switch = 56, _throw = 57, trait = 58, _try = 59, unset = 60, use = 61, _var = 62, Visibility = 63, _while = 64, xor = 65, _yield = 66;
8
8
  const keywordMap = {
9
9
  abstract,
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, b as ifNotIn, e as syntaxTree, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, aw as NodeWeakMap, I as IterMode, d as completeFromList, av as snippetCompletion } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, b as ifNotIn, e as syntaxTree, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, aw as NodeWeakMap, I as IterMode, d as completeFromList, av as snippetCompletion } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const printKeyword = 1, indent = 194, dedent = 195, newline$1 = 196, blankLineStart = 197, newlineBracketed = 198, eof = 199, stringContent = 200, Escape = 2, replacementStart = 3, stringEnd = 201, ParenL = 24, ParenthesizedExpression = 25, TupleExpression = 49, ComprehensionExpression = 50, BracketL = 55, ArrayExpression = 56, ArrayComprehensionExpression = 57, BraceL = 59, DictionaryExpression = 60, DictionaryComprehensionExpression = 61, SetExpression = 62, SetComprehensionExpression = 63, ArgList = 65, subscript = 238, String$1 = 71, stringStart = 241, stringStartD = 242, stringStartL = 243, stringStartLD = 244, stringStartR = 245, stringStartRD = 246, stringStartRL = 247, stringStartRLD = 248, FormatString = 72, stringStartF = 249, stringStartFD = 250, stringStartFL = 251, stringStartFLD = 252, stringStartFR = 253, stringStartFRD = 254, stringStartFRL = 255, stringStartFRLD = 256, FormatReplacement = 73, nestedFormatReplacement = 77, importList = 263, TypeParamList = 112, ParamList = 130, SequencePattern = 151, MappingPattern = 152, PatternArgList = 155;
5
5
  const newline = 10, carriageReturn = 13, space = 32, tab = 9, hash = 35, parenOpen = 40, dot = 46, braceOpen = 123, braceClose = 125, singleQuote = 39, doubleQuote = 34, backslash = 92, letter_o = 111, letter_x = 120, letter_N = 78, letter_u = 117, letter_U = 85;
6
6
  const bracketed = /* @__PURE__ */ new Set([
@@ -1,6 +1,6 @@
1
- import { L as LRParser } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const javaHighlighting = styleTags({
5
5
  null: tags.null,
6
6
  instanceof: tags.operatorKeyword,
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, p as parseMixed, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const blockEnd = 63, eof = 64, DirectiveEnd = 1, DocEnd = 2, sequenceStartMark = 3, sequenceContinueMark = 4, explicitMapStartMark = 5, explicitMapContinueMark = 6, flowMapMark = 7, mapStartMark = 65, mapContinueMark = 66, Literal = 8, QuotedLiteral = 9, Anchor = 10, Alias = 11, Tag = 12, BlockLiteralContent = 13, BracketL = 19, FlowSequence = 20, Colon = 29, BraceL = 33, FlowMapping = 34, BlockLiteralHeader = 47;
5
5
  const type_Top = 0, type_Seq = 1, type_Map = 2, type_Flow = 3, type_Lit = 4;
6
6
  class Context {
@@ -1,6 +1,6 @@
1
- import { a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
2
- import { L as LRParser } from "./index-DIB3jH2J.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { a as LanguageSupport, L as LRLanguage, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp, j as foldInside, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
+ import { L as LRParser } from "./index-j9e1ML36.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const spec_Keyword = { __proto__: null, anyref: 34, dataref: 34, eqref: 34, externref: 34, i31ref: 34, funcref: 34, i8: 34, i16: 34, i32: 34, i64: 34, f32: 34, f64: 34 };
5
5
  const parser = /* @__PURE__ */ LRParser.deserialize({
6
6
  version: 14,
@@ -1,6 +1,6 @@
1
- import { L as LRLanguage, a as LanguageSupport, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, s as styleTags, t as tags, b as ifNotIn, d as completeFromList, e as syntaxTree } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
2
- import { E as ExternalTokenizer, L as LRParser } from "./index-DIB3jH2J.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRLanguage, a as LanguageSupport, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, s as styleTags, t as tags, b as ifNotIn, d as completeFromList, e as syntaxTree } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
+ import { E as ExternalTokenizer, L as LRParser } from "./index-j9e1ML36.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const whitespace = 36, LineComment = 1, BlockComment = 2, String$1 = 3, Number = 4, Bool = 5, Null = 6, ParenL = 7, ParenR = 8, BraceL = 9, BraceR = 10, BracketL = 11, BracketR = 12, Semi = 13, Dot = 14, Operator = 15, Punctuation = 16, SpecialVar = 17, Identifier = 18, QuotedIdentifier = 19, Keyword = 20, Type = 21, Bits = 22, Bytes = 23, Builtin = 24;
5
5
  function isAlpha(ch) {
6
6
  return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 48 && ch <= 57;
@@ -1,9 +1,9 @@
1
- import { E as EditorView, g as EditorSelection, a as LanguageSupport, p as parseMixed, e as syntaxTree, L as LRLanguage, s as styleTags, t as tags, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
2
- import { html } from "./index-BHl_tELv.js";
3
- import { L as LRParser, E as ExternalTokenizer } from "./index-DIB3jH2J.js";
4
- import "./index-CISiP4Vc.js";
5
- import "./index-BX5-hWqk.js";
6
- import "./index-CTrj2aB2.js";
1
+ import { E as EditorView, g as EditorSelection, a as LanguageSupport, p as parseMixed, e as syntaxTree, L as LRLanguage, s as styleTags, t as tags, i as indentNodeProp, h as delimitedIndent, f as foldNodeProp } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
+ import { html } from "./index-CoEolmNf.js";
3
+ import { L as LRParser, E as ExternalTokenizer } from "./index-j9e1ML36.js";
4
+ import "./index-DFnA5GRw.js";
5
+ import "./index-C0Czl4Cv.js";
6
+ import "./index-BrQ_Y-LE.js";
7
7
  const interpolationStart = 1, tagStart = 2, endTagStart = 3, text = 180, endrawTagStart = 4, rawText = 181, endcommentTagStart = 5, commentText = 182, InlineComment = 6;
8
8
  function wordChar(code) {
9
9
  return code >= 65 && code <= 90 || code >= 97 && code <= 122;
@@ -1,9 +1,9 @@
1
- import { L as LRLanguage, a as LanguageSupport, p as parseMixed, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
2
- import { html } from "./index-BHl_tELv.js";
3
- import { javascriptLanguage } from "./index-CTrj2aB2.js";
4
- import { L as LRParser, E as ExternalTokenizer } from "./index-DIB3jH2J.js";
5
- import "./index-CISiP4Vc.js";
6
- import "./index-BX5-hWqk.js";
1
+ import { L as LRLanguage, a as LanguageSupport, p as parseMixed, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
+ import { html } from "./index-CoEolmNf.js";
3
+ import { javascriptLanguage } from "./index-BrQ_Y-LE.js";
4
+ import { L as LRParser, E as ExternalTokenizer } from "./index-j9e1ML36.js";
5
+ import "./index-DFnA5GRw.js";
6
+ import "./index-C0Czl4Cv.js";
7
7
  const Text = 1, attributeContentSingle = 33, attributeContentDouble = 34, scriptAttributeContentSingle = 35, scriptAttributeContentDouble = 36;
8
8
  const text = /* @__PURE__ */ new ExternalTokenizer((input) => {
9
9
  let start = input.pos;
@@ -1,4 +1,4 @@
1
- import { P as Parser, N as NodeSet, k as NodeType, D as DefaultBufferLength, l as NodeProp, T as Tree, I as IterMode } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
1
+ import { P as Parser, N as NodeSet, k as NodeType, D as DefaultBufferLength, l as NodeProp, T as Tree, I as IterMode } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
2
  var define_process_env_default = {};
3
3
  class Stack {
4
4
  /**
@@ -1,7 +1,7 @@
1
- import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, f as foldNodeProp, j as foldInside, i as indentNodeProp, c as continuedIndent } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import { defineCSSCompletionSource } from "./index-BX5-hWqk.js";
4
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser, E as ExternalTokenizer, C as ContextTracker } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, f as foldNodeProp, j as foldInside, i as indentNodeProp, c as continuedIndent } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import { defineCSSCompletionSource } from "./index-C0Czl4Cv.js";
4
+ import "./index-DFnA5GRw.js";
5
5
  const indent = 168, dedent = 169, descendantOp = 170, InterpolationEnd = 1, InterpolationContinue = 2, Unit = 3, callee = 171, identifier = 172, VariableName = 4, queryIdentifier = 173, InterpolationStart = 5, newline = 174, blankLineStart = 175, eof = 176, whitespace = 177, LineComment = 6, Comment = 7, IndentedMixin = 8, IndentedInclude = 9, Dialect_indented = 0;
6
6
  const space = [
7
7
  9,
@@ -1,6 +1,6 @@
1
- import { L as LRParser, E as ExternalTokenizer, a as LocalTokenGroup, C as ContextTracker } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, b as ifNotIn, d as completeFromList, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside, e as syntaxTree, av as snippetCompletion, aw as NodeWeakMap, I as IterMode } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser, E as ExternalTokenizer, a as LocalTokenGroup, C as ContextTracker } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, b as ifNotIn, d as completeFromList, L as LRLanguage, i as indentNodeProp, au as flatIndent, c as continuedIndent, h as delimitedIndent, f as foldNodeProp, j as foldInside, e as syntaxTree, av as snippetCompletion, aw as NodeWeakMap, I as IterMode } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const insertedSemi = 177, space$1 = 179, identifier = 184, String = 12, closeParen$1 = 13, Number = 17, Rune = 20, closeBrace$1 = 25, closeBracket = 53, IncDecOp = 95, _return = 142, _break = 144, _continue = 145, fallthrough = 148;
5
5
  const newline = 10, carriageReturn = 13, space = 32, tab = 9, slash = 47, closeParen = 41, closeBrace = 125;
6
6
  const semicolon = new ExternalTokenizer((input, stack) => {
@@ -1,7 +1,7 @@
1
- import { a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
2
- import { defineCSSCompletionSource } from "./index-BX5-hWqk.js";
3
- import { L as LRParser, E as ExternalTokenizer } from "./index-DIB3jH2J.js";
4
- import "./index-CISiP4Vc.js";
1
+ import { a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside, s as styleTags, t as tags } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
+ import { defineCSSCompletionSource } from "./index-C0Czl4Cv.js";
3
+ import { L as LRParser, E as ExternalTokenizer } from "./index-j9e1ML36.js";
4
+ import "./index-DFnA5GRw.js";
5
5
  const descendantOp = 110, Unit = 1, openArgList = 2;
6
6
  const space = [
7
7
  9,
@@ -1,6 +1,6 @@
1
- import { L as LRParser } from "./index-DIB3jH2J.js";
2
- import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
3
- import "./index-CISiP4Vc.js";
1
+ import { L as LRParser } from "./index-j9e1ML36.js";
2
+ import { s as styleTags, t as tags, a as LanguageSupport, L as LRLanguage, i as indentNodeProp, c as continuedIndent, f as foldNodeProp, j as foldInside } from "./MilkdownMarkdownEditor-2wg63TSu.js";
3
+ import "./index-DFnA5GRw.js";
4
4
  const jsonHighlighting = styleTags({
5
5
  String: tags.string,
6
6
  Number: tags.number,
@@ -1,5 +1,5 @@
1
- import { v as log$1, Z as selectSvgElement, w as configureSvgSize } from "./MilkdownMarkdownEditor-DjFLwyh4.js";
2
- import "./index-CISiP4Vc.js";
1
+ import { v as log$1, Z as selectSvgElement, w as configureSvgSize } from "./MilkdownMarkdownEditor-2wg63TSu.js";
2
+ import "./index-DFnA5GRw.js";
3
3
  var parser = function() {
4
4
  var o = function(k, v, o2, l) {
5
5
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)