app-ai-solution-exp 0.1.2 → 0.1.4

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 (21) hide show
  1. package/out/main/index.js +70 -26
  2. package/out/renderer/assets/{cssMode-BlKZF8mS.js → cssMode-BEysqKq8.js} +3 -3
  3. package/out/renderer/assets/{freemarker2-BTb0QKKy.js → freemarker2-BS4c0yBz.js} +1 -1
  4. package/out/renderer/assets/{handlebars-DKVnkZoO.js → handlebars-d3rEkuyF.js} +1 -1
  5. package/out/renderer/assets/{html-DSHBWNSF.js → html-DiZeQLVe.js} +1 -1
  6. package/out/renderer/assets/{htmlMode-hdSFcfq-.js → htmlMode-DcA7sXQe.js} +3 -3
  7. package/out/renderer/assets/{index-CgixHIqL.css → index-BmTOg-UU.css} +64 -0
  8. package/out/renderer/assets/{index-ByP1RhpK.js → index-CnyNUdbu.js} +162 -35
  9. package/out/renderer/assets/{javascript-Ae6t5gfn.js → javascript-D9F4CHAI.js} +2 -2
  10. package/out/renderer/assets/{jsonMode-B3dQSNhP.js → jsonMode-iiZlT0-2.js} +3 -3
  11. package/out/renderer/assets/{liquid-Zgyb8DZ5.js → liquid-C7dBzegU.js} +1 -1
  12. package/out/renderer/assets/{lspLanguageFeatures-CkDn9c2y.js → lspLanguageFeatures-DsFkLBsi.js} +1 -1
  13. package/out/renderer/assets/{mdx-C8e8DFOf.js → mdx-BVkRy68M.js} +1 -1
  14. package/out/renderer/assets/{python-8eSQckTG.js → python-TZGp3IeT.js} +1 -1
  15. package/out/renderer/assets/{razor-eAkN4Qfv.js → razor-CxZGW8D1.js} +1 -1
  16. package/out/renderer/assets/{tsMode-D7ET908H.js → tsMode-yclKkxpm.js} +1 -1
  17. package/out/renderer/assets/{typescript-BhqUlrW4.js → typescript-BXMcht_k.js} +1 -1
  18. package/out/renderer/assets/{xml-Bg3Ctug6.js → xml-BLaZGYRd.js} +1 -1
  19. package/out/renderer/assets/{yaml-C9aCL4uU.js → yaml-DagZzUB5.js} +1 -1
  20. package/out/renderer/index.html +2 -2
  21. package/package.json +2 -2
package/out/main/index.js CHANGED
@@ -789,7 +789,7 @@ function formatTime(timeStr) {
789
789
  function formatResetLabel(raw) {
790
790
  const stripped = raw.replace(/\(.*?\)/g, "").trim();
791
791
  const weekdays = ["dom.", "seg.", "ter.", "qua.", "qui.", "sex.", "sáb."];
792
- const slashMatch = /rese[a-z]*\s*(\d+)\/(\d+),\s*(\S+)/i.exec(stripped);
792
+ const slashMatch = /rese[a-z]{0,2}\s*(\d+)\/(\d+),\s*(\S+)/i.exec(stripped);
793
793
  if (slashMatch) {
794
794
  const part1 = parseInt(slashMatch[1], 10);
795
795
  const part2 = parseInt(slashMatch[2], 10);
@@ -807,45 +807,56 @@ function formatResetLabel(raw) {
807
807
  }
808
808
  const time = formatTime(slashMatch[3]);
809
809
  if (monthIndex >= 0 && monthIndex <= 11) {
810
- const date = /* @__PURE__ */ new Date();
811
- const currentYear = date.getFullYear();
812
- date.setFullYear(currentYear, monthIndex, day);
810
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
811
+ const date = new Date(currentYear, monthIndex, day, 12, 0, 0);
813
812
  if (date.getTime() < Date.now() - 30 * 24 * 60 * 60 * 1e3) {
814
813
  date.setFullYear(currentYear + 1);
815
814
  }
816
815
  return `Reinicia ${weekdays[date.getDay()]}, ${time}`;
817
816
  }
818
817
  }
819
- const dateMatch = /rese[a-z]*\s*([a-z0-9]+)\s*(\d+),\s*(\S+)/i.exec(stripped);
820
- if (dateMatch) {
821
- const monthStr = dateMatch[1].substring(0, 3).toLowerCase();
822
- const isNumericMonth = !isNaN(parseInt(monthStr, 10));
823
- let monthIndex = -1;
824
- if (isNumericMonth) {
825
- monthIndex = parseInt(monthStr, 10) - 1;
826
- } else {
827
- monthIndex = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"].indexOf(monthStr);
828
- if (monthIndex === -1) {
829
- monthIndex = ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"].indexOf(monthStr);
830
- }
818
+ const textDateMatch = /rese[a-z]{0,2}\s*([a-z]{3,})\s*(\d+),\s*(\S+)/i.exec(stripped);
819
+ if (textDateMatch) {
820
+ const monthStr = textDateMatch[1].substring(0, 3).toLowerCase();
821
+ let monthIndex = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"].indexOf(monthStr);
822
+ if (monthIndex === -1) {
823
+ monthIndex = ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"].indexOf(monthStr);
831
824
  }
832
- const day = parseInt(dateMatch[2], 10);
833
- const time = formatTime(dateMatch[3]);
825
+ const day = parseInt(textDateMatch[2], 10);
826
+ const time = formatTime(textDateMatch[3]);
834
827
  if (monthIndex >= 0 && monthIndex <= 11) {
835
- const date = /* @__PURE__ */ new Date();
836
- const currentYear = date.getFullYear();
837
- date.setFullYear(currentYear, monthIndex, day);
828
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
829
+ const date = new Date(currentYear, monthIndex, day, 12, 0, 0);
838
830
  if (date.getTime() < Date.now() - 30 * 24 * 60 * 60 * 1e3) {
839
831
  date.setFullYear(currentYear + 1);
840
832
  }
841
833
  return `Reinicia ${weekdays[date.getDay()]}, ${time}`;
842
834
  }
843
- const monthFallback = MONTH_MAP[dateMatch[1]] ?? dateMatch[1].toLowerCase();
835
+ const monthFallback = MONTH_MAP[textDateMatch[1]] ?? textDateMatch[1].toLowerCase();
844
836
  return `Reinicia em ${day}/${monthFallback} às ${time}`;
845
837
  }
846
- const timeMatch = /rese[a-z]*\s*(\S+)/i.exec(stripped);
838
+ const numDateMatch = /rese[a-z]{0,2}\s+(\d{1,2})\s+(\d{1,2}),\s*(\S+)/i.exec(stripped);
839
+ if (numDateMatch) {
840
+ const monthIndex = parseInt(numDateMatch[1], 10) - 1;
841
+ const day = parseInt(numDateMatch[2], 10);
842
+ const time = formatTime(numDateMatch[3]);
843
+ if (monthIndex >= 0 && monthIndex <= 11) {
844
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
845
+ const date = new Date(currentYear, monthIndex, day, 12, 0, 0);
846
+ if (date.getTime() < Date.now() - 30 * 24 * 60 * 60 * 1e3) {
847
+ date.setFullYear(currentYear + 1);
848
+ }
849
+ return `Reinicia ${weekdays[date.getDay()]}, ${time}`;
850
+ }
851
+ }
852
+ const timeMatch = /rese[a-z]{0,2}\s*(\S+)/i.exec(stripped);
847
853
  if (timeMatch) {
848
- return `Reinicia ${weekdays[(/* @__PURE__ */ new Date()).getDay()]}, ${formatTime(timeMatch[1])}`;
854
+ const time = formatTime(timeMatch[1]);
855
+ const now = /* @__PURE__ */ new Date();
856
+ const [resetH, resetM] = time.split(":").map(Number);
857
+ const resetToday = new Date(now.getFullYear(), now.getMonth(), now.getDate(), resetH, resetM);
858
+ const targetDate = resetToday.getTime() > now.getTime() ? resetToday : new Date(resetToday.getTime() + 24 * 60 * 60 * 1e3);
859
+ return `Reinicia ${weekdays[targetDate.getDay()]}, ${time}`;
849
860
  }
850
861
  return raw;
851
862
  }
@@ -1418,11 +1429,42 @@ function startSession(payload) {
1418
1429
  contextPercent: 0,
1419
1430
  status: "connecting"
1420
1431
  };
1432
+ const ANSI_RE = /\x1B[@-_][0-?]*[ -/]*[@-~]/g;
1433
+ const MAX_TOKENS = 2e5;
1434
+ const CHARS_PER_TOKEN = 3.5;
1435
+ const CONTENT_RATIO = 0.5;
1436
+ let outputCharCount = 0;
1437
+ let greetingPhase = true;
1438
+ let exactContextReceived = false;
1439
+ let lastEstimateUpdate = 0;
1440
+ setTimeout(() => {
1441
+ greetingPhase = false;
1442
+ }, 5e3);
1421
1443
  ptyProcess.onData((data) => {
1422
1444
  const win = getMainWindow();
1423
1445
  if (win) {
1424
1446
  win.webContents.send("terminal:output", { sessionId, data });
1425
- parseOutput(data, sessionId, win, updateContextPercent);
1447
+ parseOutput(data, sessionId, win, (sid, pct) => {
1448
+ exactContextReceived = true;
1449
+ updateContextPercent(sid, pct);
1450
+ });
1451
+ }
1452
+ if (greetingPhase || exactContextReceived) return;
1453
+ const stripped = data.replace(ANSI_RE, "");
1454
+ if (stripped.length > 5) {
1455
+ outputCharCount += stripped.length;
1456
+ }
1457
+ const now = Date.now();
1458
+ if (now - lastEstimateUpdate > 3e3 && outputCharCount > 100) {
1459
+ lastEstimateUpdate = now;
1460
+ const entry = sessions.get(sessionId);
1461
+ const totalChars = (outputCharCount + (entry?.inputCharCount ?? 0)) * CONTENT_RATIO;
1462
+ const estimatedTokens = Math.round(totalChars / CHARS_PER_TOKEN);
1463
+ const percent = Math.min(99, Math.round(estimatedTokens / MAX_TOKENS * 100));
1464
+ updateContextPercent(sessionId, percent);
1465
+ if (win) {
1466
+ win.webContents.send("monitor:contextUsage", { sessionId, percent });
1467
+ }
1426
1468
  }
1427
1469
  });
1428
1470
  ptyProcess.onExit(() => {
@@ -1435,7 +1477,7 @@ function startSession(payload) {
1435
1477
  win?.webContents.send("session:ended", { sessionId });
1436
1478
  });
1437
1479
  session.status = "active";
1438
- sessions.set(sessionId, { session, pty: ptyProcess });
1480
+ sessions.set(sessionId, { session, pty: ptyProcess, inputCharCount: 0, lastInputTime: Date.now() });
1439
1481
  return session;
1440
1482
  }
1441
1483
  function killSession(sessionId) {
@@ -1455,6 +1497,8 @@ function writeToSession(sessionId, data) {
1455
1497
  const entry = sessions.get(sessionId);
1456
1498
  if (!entry) return false;
1457
1499
  entry.pty.write(data);
1500
+ entry.inputCharCount += data.length;
1501
+ entry.lastInputTime = Date.now();
1458
1502
  return true;
1459
1503
  }
1460
1504
  function resizeSession(sessionId, cols, rows) {
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-ByP1RhpK.js";
2
- import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-CkDn9c2y.js";
3
- import { h, i, j, t, k } from "./lspLanguageFeatures-CkDn9c2y.js";
1
+ import { c as createWebWorker, l as languages } from "./index-CnyNUdbu.js";
2
+ import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-DsFkLBsi.js";
3
+ import { h, i, j, t, k } from "./lspLanguageFeatures-DsFkLBsi.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "assign",
4
4
  "flush",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-ByP1RhpK.js";
2
- import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-CkDn9c2y.js";
3
- import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-CkDn9c2y.js";
1
+ import { c as createWebWorker, l as languages } from "./index-CnyNUdbu.js";
2
+ import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-DsFkLBsi.js";
3
+ import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-DsFkLBsi.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -294,6 +294,7 @@
294
294
 
295
295
  @layer theme {
296
296
  :root, :host {
297
+ --font-sans: Inter, system-ui, -apple-system, sans-serif;
297
298
  --color-amber-500: oklch(76.9% .188 70.08);
298
299
  --color-yellow-500: oklch(79.5% .184 86.047);
299
300
  --color-green-500: oklch(72.3% .219 149.579);
@@ -690,6 +691,10 @@
690
691
  @layer components;
691
692
 
692
693
  @layer utilities {
694
+ .visible {
695
+ visibility: visible;
696
+ }
697
+
693
698
  .sr-only {
694
699
  clip-path: inset(50%);
695
700
  white-space: nowrap;
@@ -4030,6 +4035,65 @@
4030
4035
  unicode-range: U+??, U+131, U+152-153, U+2BB-2BC, U+2C6, U+2DA, U+2DC, U+304, U+308, U+329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
4031
4036
  }
4032
4037
 
4038
+ .context-menu {
4039
+ border-radius: var(--radius);
4040
+ background: oklch(14% .007 285);
4041
+ border: 1px solid oklch(24% .008 285);
4042
+ min-width: 180px;
4043
+ padding: 4px;
4044
+ animation: .12s ease-out contextMenuIn;
4045
+ box-shadow: 0 8px 24px #00000080, 0 2px 8px #0000004d;
4046
+ }
4047
+
4048
+ @keyframes contextMenuIn {
4049
+ from {
4050
+ opacity: 0;
4051
+ transform: scale(.95);
4052
+ }
4053
+
4054
+ to {
4055
+ opacity: 1;
4056
+ transform: scale(1);
4057
+ }
4058
+ }
4059
+
4060
+ .context-menu-item {
4061
+ border-radius: calc(var(--radius) - 2px);
4062
+ color: oklch(90% 0 0);
4063
+ width: 100%;
4064
+ font-family: var(--font-sans);
4065
+ cursor: pointer;
4066
+ background: none;
4067
+ border: none;
4068
+ align-items: center;
4069
+ gap: 8px;
4070
+ padding: 6px 10px;
4071
+ font-size: 13px;
4072
+ transition: background .1s;
4073
+ display: flex;
4074
+ }
4075
+
4076
+ .context-menu-item:hover:not(:disabled) {
4077
+ background: oklch(20% .008 285);
4078
+ }
4079
+
4080
+ .context-menu-item:disabled {
4081
+ opacity: .4;
4082
+ cursor: default;
4083
+ }
4084
+
4085
+ .context-menu-shortcut {
4086
+ color: oklch(50% .008 285);
4087
+ margin-left: auto;
4088
+ font-size: 11px;
4089
+ }
4090
+
4091
+ .context-menu-icon {
4092
+ text-align: center;
4093
+ width: 18px;
4094
+ font-size: 14px;
4095
+ }
4096
+
4033
4097
  @property --tw-translate-x {
4034
4098
  syntax: "*";
4035
4099
  inherits: false;
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-BlKZF8mS.js","./lspLanguageFeatures-CkDn9c2y.js","./htmlMode-hdSFcfq-.js","./jsonMode-B3dQSNhP.js","./javascript-Ae6t5gfn.js","./typescript-BhqUlrW4.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-BEysqKq8.js","./lspLanguageFeatures-DsFkLBsi.js","./htmlMode-DcA7sXQe.js","./jsonMode-iiZlT0-2.js","./javascript-D9F4CHAI.js","./typescript-BXMcht_k.js"])))=>i.map(i=>d[i]);
2
2
  function _mergeNamespaces(n2, m2) {
3
3
  for (var i2 = 0; i2 < m2.length; i2++) {
4
4
  const e = m2[i2];
@@ -54933,6 +54933,32 @@ function Terminal({ sessionId, className: className2 }) {
54933
54933
  const containerRef = reactExports.useRef(null);
54934
54934
  const termRef = reactExports.useRef(null);
54935
54935
  const fitAddonRef = reactExports.useRef(null);
54936
+ const [contextMenu, setContextMenu] = reactExports.useState({
54937
+ visible: false,
54938
+ x: 0,
54939
+ y: 0,
54940
+ hasSelection: false
54941
+ });
54942
+ const closeContextMenu = reactExports.useCallback(() => {
54943
+ setContextMenu((prev) => prev.visible ? { ...prev, visible: false } : prev);
54944
+ }, []);
54945
+ const copySelection = reactExports.useCallback(async () => {
54946
+ const term = termRef.current;
54947
+ if (!term) return;
54948
+ const selection = term.getSelection();
54949
+ if (selection) {
54950
+ await navigator.clipboard.writeText(selection);
54951
+ term.clearSelection();
54952
+ }
54953
+ }, []);
54954
+ const pasteFromClipboard = reactExports.useCallback(async () => {
54955
+ const term = termRef.current;
54956
+ if (!term) return;
54957
+ const text2 = await navigator.clipboard.readText();
54958
+ if (text2) {
54959
+ ipc.terminal.input(sessionId, text2);
54960
+ }
54961
+ }, [sessionId]);
54936
54962
  reactExports.useEffect(() => {
54937
54963
  if (!containerRef.current) return;
54938
54964
  const term = new xtermExports.Terminal(xtermOptions);
@@ -54942,11 +54968,48 @@ function Terminal({ sessionId, className: className2 }) {
54942
54968
  term.loadAddon(webLinksAddon);
54943
54969
  term.open(containerRef.current);
54944
54970
  fitAddon.fit();
54971
+ term.focus();
54945
54972
  termRef.current = term;
54946
54973
  fitAddonRef.current = fitAddon;
54974
+ term.attachCustomKeyEventHandler((event) => {
54975
+ if (event.ctrlKey && event.shiftKey && event.key === "C" && event.type === "keydown") {
54976
+ copySelection();
54977
+ return false;
54978
+ }
54979
+ if (event.ctrlKey && !event.shiftKey && event.key === "c" && event.type === "keydown") {
54980
+ const selection = term.getSelection();
54981
+ if (selection && selection.length > 0) {
54982
+ navigator.clipboard.writeText(selection);
54983
+ term.clearSelection();
54984
+ return false;
54985
+ }
54986
+ return true;
54987
+ }
54988
+ if (event.ctrlKey && !event.shiftKey && event.key === "v" && event.type === "keydown") {
54989
+ pasteFromClipboard();
54990
+ return false;
54991
+ }
54992
+ if (event.ctrlKey && event.shiftKey && event.key === "V" && event.type === "keydown") {
54993
+ pasteFromClipboard();
54994
+ return false;
54995
+ }
54996
+ return true;
54997
+ });
54998
+ let firstOutput = true;
54947
54999
  const unsubOutput = ipc.terminal.onOutput(({ sessionId: sid, data }) => {
54948
55000
  if (sid === sessionId) {
54949
55001
  term.write(data);
55002
+ if (firstOutput) {
55003
+ firstOutput = false;
55004
+ requestAnimationFrame(() => {
55005
+ try {
55006
+ fitAddon.fit();
55007
+ ipc.terminal.resize(sessionId, term.cols, term.rows);
55008
+ term.focus();
55009
+ } catch {
55010
+ }
55011
+ });
55012
+ }
54950
55013
  }
54951
55014
  });
54952
55015
  const disposeOnData = term.onData((data) => {
@@ -54959,7 +55022,7 @@ function Terminal({ sessionId, className: className2 }) {
54959
55022
  termRef.current = null;
54960
55023
  fitAddonRef.current = null;
54961
55024
  };
54962
- }, [sessionId]);
55025
+ }, [sessionId, copySelection, pasteFromClipboard]);
54963
55026
  reactExports.useEffect(() => {
54964
55027
  if (!containerRef.current) return;
54965
55028
  const observer = new ResizeObserver(() => {
@@ -54975,7 +55038,82 @@ function Terminal({ sessionId, className: className2 }) {
54975
55038
  observer.observe(containerRef.current);
54976
55039
  return () => observer.disconnect();
54977
55040
  }, [sessionId]);
54978
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: containerRef, className: className2 });
55041
+ reactExports.useEffect(() => {
55042
+ if (!contextMenu.visible) return;
55043
+ const handler = () => closeContextMenu();
55044
+ window.addEventListener("click", handler);
55045
+ window.addEventListener("contextmenu", handler);
55046
+ return () => {
55047
+ window.removeEventListener("click", handler);
55048
+ window.removeEventListener("contextmenu", handler);
55049
+ };
55050
+ }, [contextMenu.visible, closeContextMenu]);
55051
+ const handleContextMenu = reactExports.useCallback((e) => {
55052
+ e.preventDefault();
55053
+ e.stopPropagation();
55054
+ const term = termRef.current;
55055
+ const hasSelection = !!(term && term.getSelection() && term.getSelection().length > 0);
55056
+ setContextMenu({ visible: true, x: e.clientX, y: e.clientY, hasSelection });
55057
+ }, []);
55058
+ const handleCopy = reactExports.useCallback(async () => {
55059
+ await copySelection();
55060
+ closeContextMenu();
55061
+ }, [copySelection, closeContextMenu]);
55062
+ const handlePaste = reactExports.useCallback(async () => {
55063
+ await pasteFromClipboard();
55064
+ closeContextMenu();
55065
+ termRef.current?.focus();
55066
+ }, [pasteFromClipboard, closeContextMenu]);
55067
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", style: { width: "100%", height: "100%" }, children: [
55068
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
55069
+ "div",
55070
+ {
55071
+ ref: containerRef,
55072
+ className: className2,
55073
+ onContextMenu: handleContextMenu,
55074
+ style: { width: "100%", height: "100%" }
55075
+ }
55076
+ ),
55077
+ contextMenu.visible && /* @__PURE__ */ jsxRuntimeExports.jsxs(
55078
+ "div",
55079
+ {
55080
+ className: "context-menu",
55081
+ style: {
55082
+ position: "fixed",
55083
+ left: contextMenu.x,
55084
+ top: contextMenu.y,
55085
+ zIndex: 9999
55086
+ },
55087
+ children: [
55088
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
55089
+ "button",
55090
+ {
55091
+ className: "context-menu-item",
55092
+ onClick: handleCopy,
55093
+ disabled: !contextMenu.hasSelection,
55094
+ children: [
55095
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "context-menu-icon", children: "📋" }),
55096
+ "Copiar",
55097
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "context-menu-shortcut", children: "Ctrl+C" })
55098
+ ]
55099
+ }
55100
+ ),
55101
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
55102
+ "button",
55103
+ {
55104
+ className: "context-menu-item",
55105
+ onClick: handlePaste,
55106
+ children: [
55107
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "context-menu-icon", children: "📄" }),
55108
+ "Colar",
55109
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "context-menu-shortcut", children: "Ctrl+V" })
55110
+ ]
55111
+ }
55112
+ )
55113
+ ]
55114
+ }
55115
+ )
55116
+ ] });
54979
55117
  }
54980
55118
  const Textarea = reactExports.forwardRef(({ className: className2, ...props }, ref) => {
54981
55119
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -93960,7 +94098,6 @@ function MarkdownEditor({
93960
94098
  setSaveStatus("idle");
93961
94099
  }, [initialContent]);
93962
94100
  const lineCount = content2 === "" ? 0 : content2.split("\n").length;
93963
- const overLimit = lineCount > 200;
93964
94101
  const canDiscard = content2 !== originalContentRef.current;
93965
94102
  reactExports.useEffect(() => {
93966
94103
  if (!hasPendingSave) return;
@@ -94152,16 +94289,6 @@ function MarkdownEditor({
94152
94289
  }
94153
94290
  )
94154
94291
  ] }) }),
94155
- overLimit && !diffMode && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-2 flex items-start gap-2 rounded-md border border-warning/30 bg-warning/10 px-3 py-2", children: [
94156
- /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { size: 14, className: "mt-0.5 shrink-0 text-warning", "aria-hidden": "true" }),
94157
- /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground", children: [
94158
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-medium text-warning", children: [
94159
- lineCount,
94160
- " linhas"
94161
- ] }),
94162
- " — acima do limite. Claude Code lê apenas as primeiras 200 linhas. Considere dividir o arquivo em tópicos separados."
94163
- ] })
94164
- ] }),
94165
94292
  /* @__PURE__ */ jsxRuntimeExports.jsx(AlertDialog, { open: discardConfirmOpen, onOpenChange: setDiscardConfirmOpen, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(AlertDialogContent, { children: [
94166
94293
  /* @__PURE__ */ jsxRuntimeExports.jsxs(AlertDialogHeader, { children: [
94167
94294
  /* @__PURE__ */ jsxRuntimeExports.jsx(AlertDialogTitle, { children: "Descartar alterações?" }),
@@ -304900,7 +305027,7 @@ const lessDefaults = new LanguageServiceDefaultsImpl$3(
304900
305027
  modeConfigurationDefault$2
304901
305028
  );
304902
305029
  function getMode$3() {
304903
- return __vitePreload(() => import("./cssMode-BlKZF8mS.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
305030
+ return __vitePreload(() => import("./cssMode-BEysqKq8.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
304904
305031
  }
304905
305032
  languages.onLanguage("less", () => {
304906
305033
  getMode$3().then((mode2) => mode2.setupMode(lessDefaults));
@@ -305005,7 +305132,7 @@ const razorLanguageService = registerHTMLLanguageService(
305005
305132
  );
305006
305133
  const razorDefaults = razorLanguageService.defaults;
305007
305134
  function getMode$2() {
305008
- return __vitePreload(() => import("./htmlMode-hdSFcfq-.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
305135
+ return __vitePreload(() => import("./htmlMode-DcA7sXQe.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
305009
305136
  }
305010
305137
  function registerHTMLLanguageService(languageId, options = optionsDefault, modeConfiguration = getConfigurationDefault(languageId)) {
305011
305138
  const defaults2 = new LanguageServiceDefaultsImpl$2(languageId, options, modeConfiguration);
@@ -305089,7 +305216,7 @@ const jsonDefaults = new LanguageServiceDefaultsImpl$1(
305089
305216
  );
305090
305217
  const getWorker$1 = () => getMode$1().then((mode2) => mode2.getWorker());
305091
305218
  function getMode$1() {
305092
- return __vitePreload(() => import("./jsonMode-B3dQSNhP.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
305219
+ return __vitePreload(() => import("./jsonMode-iiZlT0-2.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
305093
305220
  }
305094
305221
  languages.register({
305095
305222
  id: "json",
@@ -305335,7 +305462,7 @@ const getJavaScriptWorker = () => {
305335
305462
  return getMode().then((mode) => mode.getJavaScriptWorker());
305336
305463
  };
305337
305464
  function getMode() {
305338
- return __vitePreload(() => import("./tsMode-D7ET908H.js"), true ? [] : void 0, import.meta.url);
305465
+ return __vitePreload(() => import("./tsMode-yclKkxpm.js"), true ? [] : void 0, import.meta.url);
305339
305466
  }
305340
305467
  languages.onLanguage("typescript", () => {
305341
305468
  return getMode().then((mode) => mode.setupTypeScript(typescriptDefaults));
@@ -305530,49 +305657,49 @@ registerLanguage({
305530
305657
  extensions: [".ftl", ".ftlh", ".ftlx"],
305531
305658
  aliases: ["FreeMarker2", "Apache FreeMarker2"],
305532
305659
  loader: () => {
305533
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAutoInterpolationDollar);
305660
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAutoInterpolationDollar);
305534
305661
  }
305535
305662
  });
305536
305663
  registerLanguage({
305537
305664
  id: "freemarker2.tag-angle.interpolation-dollar",
305538
305665
  aliases: ["FreeMarker2 (Angle/Dollar)", "Apache FreeMarker2 (Angle/Dollar)"],
305539
305666
  loader: () => {
305540
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAngleInterpolationDollar);
305667
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAngleInterpolationDollar);
305541
305668
  }
305542
305669
  });
305543
305670
  registerLanguage({
305544
305671
  id: "freemarker2.tag-bracket.interpolation-dollar",
305545
305672
  aliases: ["FreeMarker2 (Bracket/Dollar)", "Apache FreeMarker2 (Bracket/Dollar)"],
305546
305673
  loader: () => {
305547
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagBracketInterpolationDollar);
305674
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagBracketInterpolationDollar);
305548
305675
  }
305549
305676
  });
305550
305677
  registerLanguage({
305551
305678
  id: "freemarker2.tag-angle.interpolation-bracket",
305552
305679
  aliases: ["FreeMarker2 (Angle/Bracket)", "Apache FreeMarker2 (Angle/Bracket)"],
305553
305680
  loader: () => {
305554
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAngleInterpolationBracket);
305681
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAngleInterpolationBracket);
305555
305682
  }
305556
305683
  });
305557
305684
  registerLanguage({
305558
305685
  id: "freemarker2.tag-bracket.interpolation-bracket",
305559
305686
  aliases: ["FreeMarker2 (Bracket/Bracket)", "Apache FreeMarker2 (Bracket/Bracket)"],
305560
305687
  loader: () => {
305561
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagBracketInterpolationBracket);
305688
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagBracketInterpolationBracket);
305562
305689
  }
305563
305690
  });
305564
305691
  registerLanguage({
305565
305692
  id: "freemarker2.tag-auto.interpolation-dollar",
305566
305693
  aliases: ["FreeMarker2 (Auto/Dollar)", "Apache FreeMarker2 (Auto/Dollar)"],
305567
305694
  loader: () => {
305568
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAutoInterpolationDollar);
305695
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAutoInterpolationDollar);
305569
305696
  }
305570
305697
  });
305571
305698
  registerLanguage({
305572
305699
  id: "freemarker2.tag-auto.interpolation-bracket",
305573
305700
  aliases: ["FreeMarker2 (Auto/Bracket)", "Apache FreeMarker2 (Auto/Bracket)"],
305574
305701
  loader: () => {
305575
- return __vitePreload(() => import("./freemarker2-BTb0QKKy.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAutoInterpolationBracket);
305702
+ return __vitePreload(() => import("./freemarker2-BS4c0yBz.js"), true ? [] : void 0, import.meta.url).then((m2) => m2.TagAutoInterpolationBracket);
305576
305703
  }
305577
305704
  });
305578
305705
  registerLanguage({
@@ -305593,7 +305720,7 @@ registerLanguage({
305593
305720
  extensions: [".handlebars", ".hbs"],
305594
305721
  aliases: ["Handlebars", "handlebars", "hbs"],
305595
305722
  mimetypes: ["text/x-handlebars-template"],
305596
- loader: () => __vitePreload(() => import("./handlebars-DKVnkZoO.js"), true ? [] : void 0, import.meta.url)
305723
+ loader: () => __vitePreload(() => import("./handlebars-d3rEkuyF.js"), true ? [] : void 0, import.meta.url)
305597
305724
  });
305598
305725
  registerLanguage({
305599
305726
  id: "hcl",
@@ -305606,7 +305733,7 @@ registerLanguage({
305606
305733
  extensions: [".html", ".htm", ".shtml", ".xhtml", ".mdoc", ".jsp", ".asp", ".aspx", ".jshtm"],
305607
305734
  aliases: ["HTML", "htm", "html", "xhtml"],
305608
305735
  mimetypes: ["text/html", "text/x-jshtm", "text/template", "text/ng-template"],
305609
- loader: () => __vitePreload(() => import("./html-DSHBWNSF.js"), true ? [] : void 0, import.meta.url)
305736
+ loader: () => __vitePreload(() => import("./html-DiZeQLVe.js"), true ? [] : void 0, import.meta.url)
305610
305737
  });
305611
305738
  registerLanguage({
305612
305739
  id: "ini",
@@ -305629,7 +305756,7 @@ registerLanguage({
305629
305756
  filenames: ["jakefile"],
305630
305757
  aliases: ["JavaScript", "javascript", "js"],
305631
305758
  mimetypes: ["text/javascript"],
305632
- loader: () => __vitePreload(() => import("./javascript-Ae6t5gfn.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
305759
+ loader: () => __vitePreload(() => import("./javascript-D9F4CHAI.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
305633
305760
  });
305634
305761
  registerLanguage({
305635
305762
  id: "julia",
@@ -305668,7 +305795,7 @@ registerLanguage({
305668
305795
  extensions: [".liquid", ".html.liquid"],
305669
305796
  aliases: ["Liquid", "liquid"],
305670
305797
  mimetypes: ["application/liquid"],
305671
- loader: () => __vitePreload(() => import("./liquid-Zgyb8DZ5.js"), true ? [] : void 0, import.meta.url)
305798
+ loader: () => __vitePreload(() => import("./liquid-C7dBzegU.js"), true ? [] : void 0, import.meta.url)
305672
305799
  });
305673
305800
  registerLanguage({
305674
305801
  id: "m3",
@@ -305686,7 +305813,7 @@ registerLanguage({
305686
305813
  id: "mdx",
305687
305814
  extensions: [".mdx"],
305688
305815
  aliases: ["MDX", "mdx"],
305689
- loader: () => __vitePreload(() => import("./mdx-C8e8DFOf.js"), true ? [] : void 0, import.meta.url)
305816
+ loader: () => __vitePreload(() => import("./mdx-BVkRy68M.js"), true ? [] : void 0, import.meta.url)
305690
305817
  });
305691
305818
  registerLanguage({
305692
305819
  id: "mips",
@@ -305785,7 +305912,7 @@ registerLanguage({
305785
305912
  extensions: [".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi"],
305786
305913
  aliases: ["Python", "py"],
305787
305914
  firstLine: "^#!/.*\\bpython[0-9.-]*\\b",
305788
- loader: () => __vitePreload(() => import("./python-8eSQckTG.js"), true ? [] : void 0, import.meta.url)
305915
+ loader: () => __vitePreload(() => import("./python-TZGp3IeT.js"), true ? [] : void 0, import.meta.url)
305789
305916
  });
305790
305917
  registerLanguage({
305791
305918
  id: "qsharp",
@@ -305804,7 +305931,7 @@ registerLanguage({
305804
305931
  extensions: [".cshtml"],
305805
305932
  aliases: ["Razor", "razor"],
305806
305933
  mimetypes: ["text/x-cshtml"],
305807
- loader: () => __vitePreload(() => import("./razor-eAkN4Qfv.js"), true ? [] : void 0, import.meta.url)
305934
+ loader: () => __vitePreload(() => import("./razor-CxZGW8D1.js"), true ? [] : void 0, import.meta.url)
305808
305935
  });
305809
305936
  registerLanguage({
305810
305937
  id: "redis",
@@ -305937,7 +306064,7 @@ registerLanguage({
305937
306064
  aliases: ["TypeScript", "ts", "typescript"],
305938
306065
  mimetypes: ["text/typescript"],
305939
306066
  loader: () => {
305940
- return __vitePreload(() => import("./typescript-BhqUlrW4.js"), true ? [] : void 0, import.meta.url);
306067
+ return __vitePreload(() => import("./typescript-BXMcht_k.js"), true ? [] : void 0, import.meta.url);
305941
306068
  }
305942
306069
  });
305943
306070
  registerLanguage({
@@ -305982,14 +306109,14 @@ registerLanguage({
305982
306109
  firstLine: "(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)",
305983
306110
  aliases: ["XML", "xml"],
305984
306111
  mimetypes: ["text/xml", "application/xml", "application/xaml+xml", "application/xml-dtd"],
305985
- loader: () => __vitePreload(() => import("./xml-Bg3Ctug6.js"), true ? [] : void 0, import.meta.url)
306112
+ loader: () => __vitePreload(() => import("./xml-BLaZGYRd.js"), true ? [] : void 0, import.meta.url)
305986
306113
  });
305987
306114
  registerLanguage({
305988
306115
  id: "yaml",
305989
306116
  extensions: [".yaml", ".yml"],
305990
306117
  aliases: ["YAML", "yaml", "YML", "yml"],
305991
306118
  mimetypes: ["application/x-yaml", "text/x-yaml"],
305992
- loader: () => __vitePreload(() => import("./yaml-C9aCL4uU.js"), true ? [] : void 0, import.meta.url)
306119
+ loader: () => __vitePreload(() => import("./yaml-DagZzUB5.js"), true ? [] : void 0, import.meta.url)
305993
306120
  });
305994
306121
  var __defProp = Object.defineProperty;
305995
306122
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -1,5 +1,5 @@
1
- import { conf as conf$1, language as language$1 } from "./typescript-BhqUlrW4.js";
2
- import "./index-ByP1RhpK.js";
1
+ import { conf as conf$1, language as language$1 } from "./typescript-BXMcht_k.js";
2
+ import "./index-CnyNUdbu.js";
3
3
  const conf = conf$1;
4
4
  const language = {
5
5
  // Set defaultToken to invalid to see what you do not tokenize yet
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages, e as editor } from "./index-ByP1RhpK.js";
2
- import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-CkDn9c2y.js";
3
- import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-CkDn9c2y.js";
1
+ import { c as createWebWorker, l as languages, e as editor } from "./index-CnyNUdbu.js";
2
+ import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-DsFkLBsi.js";
3
+ import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-DsFkLBsi.js";
4
4
  const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
5
5
  class WorkerManager {
6
6
  constructor(defaults) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-ByP1RhpK.js";
1
+ import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-CnyNUdbu.js";
2
2
  var DocumentUri;
3
3
  (function(DocumentUri2) {
4
4
  function is(value) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["{/*", "*/}"]
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  lineComment: "#",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { c as createWebWorker, e as editor, U as Uri, a as MarkerTag, M as MarkerSeverity, l as languages, t as typescriptDefaults, R as Range } from "./index-ByP1RhpK.js";
1
+ import { c as createWebWorker, e as editor, U as Uri, a as MarkerTag, M as MarkerSeverity, l as languages, t as typescriptDefaults, R as Range } from "./index-CnyNUdbu.js";
2
2
  class WorkerManager {
3
3
  constructor(_modeId, _defaults) {
4
4
  this._modeId = _modeId;
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const conf = {
3
3
  wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
4
4
  comments: {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["<!--", "-->"]
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-ByP1RhpK.js";
1
+ import { l as languages } from "./index-CnyNUdbu.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  lineComment: "#"
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>AI Solution EXP</title>
7
- <script type="module" crossorigin src="./assets/index-ByP1RhpK.js"></script>
8
- <link rel="stylesheet" crossorigin href="./assets/index-CgixHIqL.css">
7
+ <script type="module" crossorigin src="./assets/index-CnyNUdbu.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-BmTOg-UU.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "app-ai-solution-exp",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "",
5
5
  "main": "./out/main/index.js",
6
6
  "bin": {
@@ -107,4 +107,4 @@
107
107
  "vite": "^6.1.0",
108
108
  "vitest": "^3.0.6"
109
109
  }
110
- }
110
+ }