opencami 1.9.0 → 2.0.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.
Files changed (66) hide show
  1. package/dist/client/assets/{CSPContext-TfUptlEu.js → CSPContext-CrlIQW7-.js} +1 -1
  2. package/dist/client/assets/{DirectionContext-CQMv7g2N.js → DirectionContext-X-0CRn1O.js} +1 -1
  3. package/dist/client/assets/_sessionKey-yNQ57svB.js +23 -0
  4. package/dist/client/assets/agents-WqWjsymD.js +2 -0
  5. package/dist/client/assets/{agents-screen-fSZJpRi_.js → agents-screen-BhOVp_S6.js} +1 -1
  6. package/dist/client/assets/bots-DNqiFT7w.js +2 -0
  7. package/dist/client/assets/{bots-screen-4yT-e3cM.js → bots-screen-DLFd0ydi.js} +1 -1
  8. package/dist/client/assets/button-D0n2Qsd_.js +1 -0
  9. package/dist/client/assets/{composite-BLgu_EOL.js → composite-GtKwZKbV.js} +1 -1
  10. package/dist/client/assets/{connect-CiqRvR6s.js → connect-vQWL0_11.js} +1 -1
  11. package/dist/client/assets/{dashboard-CyWDWpbj.js → dashboard-Knwc61i1.js} +1 -1
  12. package/dist/client/assets/{event-2_Dxdv7h.js → event-CHpdjYFR.js} +1 -1
  13. package/dist/client/assets/file-explorer-screen-FoYNs9zK.js +1 -0
  14. package/dist/client/assets/files-BtR_gArr.js +2 -0
  15. package/dist/client/assets/follow-up-suggestions-DVXNLqga.js +5 -0
  16. package/dist/client/assets/{index-ygitKeM-.js → index-CNPHef4O.js} +1 -1
  17. package/dist/client/assets/{index-C_gsW9fo.js → index-CTT0Y1ya.js} +1 -1
  18. package/dist/client/assets/{keyboard-shortcuts-dialog-z-amTZVi.js → keyboard-shortcuts-dialog-DP8ptQ7N.js} +1 -1
  19. package/dist/client/assets/{main-ZBMVSJTF.js → main-xPlWrMhO.js} +3 -3
  20. package/dist/client/assets/{markdown-CHUjmWcv.js → markdown-3Js_RbUp.js} +1 -1
  21. package/dist/client/assets/memory-BRGPq5t6.js +2 -0
  22. package/dist/client/assets/{memory-screen-C_ZNDGLd.js → memory-screen-nzRra2Qi.js} +1 -1
  23. package/dist/client/assets/{menu-CB88T7R1.js → menu-BnSEqetd.js} +1 -1
  24. package/dist/client/assets/{opencami-logo-C0Kj1DiT.js → opencami-logo-B_hLbomw.js} +1 -1
  25. package/dist/client/assets/{proxy-D-juuhw6.js → proxy-BnlGpgC1.js} +1 -1
  26. package/dist/client/assets/{react-Akh4y69S.js → react-BgjQyJHw.js} +1 -1
  27. package/dist/client/assets/{search-dialog-BasfzCyM.js → search-dialog-Bib2QY9u.js} +1 -1
  28. package/dist/client/assets/{search-sources-badge-DwFHWd7S.js → search-sources-badge-COHcYFRB.js} +1 -1
  29. package/dist/client/assets/{session-export-dialog-CAl3iJnD.js → session-export-dialog-ooPnfHh_.js} +1 -1
  30. package/dist/client/assets/settings-dialog-B8mz99u-.js +1 -0
  31. package/dist/client/assets/skills-DA9J_tsC.js +2 -0
  32. package/dist/client/assets/{skills-panel-B7BRAofP.js → skills-panel-D2uMdCHp.js} +1 -1
  33. package/dist/client/assets/styles-CWabEzNU.css +1 -0
  34. package/dist/client/assets/{switch-DYEbEgy5.js → switch-BUQ0qH6r.js} +1 -1
  35. package/dist/client/assets/{tabs-eiBvL0H7.js → tabs-BEyU6TjN.js} +1 -1
  36. package/dist/client/assets/{thinking-CariuioI.js → thinking-CA48yhOE.js} +1 -1
  37. package/dist/client/assets/{tooltip-CekkGEYG.js → tooltip-CcIdgcV0.js} +1 -1
  38. package/dist/client/assets/{use-file-explorer-state-Dfyh4GwR.js → use-file-explorer-state-CN_IJGcd.js} +2 -2
  39. package/dist/client/assets/{useBaseUiId-DLhdkHJl.js → useBaseUiId-ClbEYEil.js} +1 -1
  40. package/dist/client/assets/useCompositeItem-B_OxfJee.js +1 -0
  41. package/dist/client/assets/{useControlled-CpliTEve.js → useControlled-CyT-lqbs.js} +1 -1
  42. package/dist/client/assets/{useMutation-CpD2Pn0F.js → useMutation-eQUrsn-X.js} +1 -1
  43. package/dist/client/assets/{useOnFirstRender-DsFYFJoB.js → useOnFirstRender-CR_o2MK_.js} +1 -1
  44. package/dist/client/assets/{useQuery-DMTgpIql.js → useQuery-k6EMRoMD.js} +1 -1
  45. package/dist/server/assets/{_sessionKey-Bhksr7VP.js → _sessionKey-CaFqmyhU.js} +388 -390
  46. package/dist/server/assets/{_tanstack-start-manifest_v-D-5ReiD4.js → _tanstack-start-manifest_v-P3skSR3R.js} +1 -1
  47. package/dist/server/assets/{follow-up-suggestions-B3hol2KT.js → follow-up-suggestions-DHv2_XzB.js} +13 -74
  48. package/dist/server/assets/{index-4G_4vZNY.js → index-C7lmufwX.js} +1 -1
  49. package/dist/server/assets/{router-C9JRmWMm.js → router-X2L0PDPI.js} +133 -294
  50. package/dist/server/assets/{search-dialog-CTJULPB8.js → search-dialog-CXhofdoP.js} +2 -2
  51. package/dist/server/assets/{settings-dialog-B5yR2pBy.js → settings-dialog-CPdftvjz.js} +1 -254
  52. package/dist/server/assets/{thinking-CHx4Oouj.js → thinking-YkRSlXtf.js} +2 -2
  53. package/dist/server/server.js +2 -2
  54. package/package.json +1 -1
  55. package/dist/client/assets/_sessionKey-DYknvaDS.js +0 -23
  56. package/dist/client/assets/agents-DNywJUai.js +0 -2
  57. package/dist/client/assets/bots-Bqjqhws8.js +0 -2
  58. package/dist/client/assets/button-DqP4GZwZ.js +0 -1
  59. package/dist/client/assets/file-explorer-screen-CZ2QKk-0.js +0 -1
  60. package/dist/client/assets/files-Cbhud0J8.js +0 -2
  61. package/dist/client/assets/follow-up-suggestions-Bi3Ci2my.js +0 -5
  62. package/dist/client/assets/memory-BRa-0plj.js +0 -2
  63. package/dist/client/assets/settings-dialog-C8OoRXwX.js +0 -1
  64. package/dist/client/assets/skills-Cx12984a.js +0 -2
  65. package/dist/client/assets/styles-CXa-SiWC.css +0 -1
  66. package/dist/client/assets/useCompositeItem-DTSTTR0Z.js +0 -1
@@ -2,13 +2,12 @@ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useRef } from "react";
3
3
  import { create } from "zustand";
4
4
  import { HugeiconsIcon } from "@hugeicons/react";
5
- import { Cancel01Icon, Link01Icon, PaintBoardIcon, MessageEdit01Icon, Settings02Icon, UserIcon, VoiceIcon, AiBrain01Icon, InformationCircleIcon, ComputerIcon, Sun01Icon, Moon01Icon, Leaf01Icon, DropletIcon, Loading02Icon, Tick01Icon, Cancel02Icon } from "@hugeicons/core-free-icons";
5
+ import { Cancel01Icon, Link01Icon, PaintBoardIcon, MessageEdit01Icon, Settings02Icon, UserIcon, VoiceIcon, InformationCircleIcon, ComputerIcon, Sun01Icon, Moon01Icon, Leaf01Icon, DropletIcon } from "@hugeicons/core-free-icons";
6
6
  import { B as Button, c as cn } from "./button-kI8fEIZQ.js";
7
7
  import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-E6cUvMva.js";
8
8
  import { S as Switch } from "./switch-BZzwkgAQ.js";
9
9
  import { T as Tabs, a as TabsList, b as TabsTab } from "./tabs-CWbp3mT4.js";
10
10
  import { u as useChatSettings } from "./index-B_F4DTUu.js";
11
- import { u as useLlmSettings, g as getLlmProviderDefaults } from "./_sessionKey-Bhksr7VP.js";
12
11
  import "@base-ui/react/merge-props";
13
12
  import "@base-ui/react/use-render";
14
13
  import "class-variance-authority";
@@ -18,35 +17,6 @@ import "@base-ui/react/dialog";
18
17
  import "@base-ui/react/switch";
19
18
  import "@base-ui/react/tabs";
20
19
  import "zustand/middleware";
21
- import "@tanstack/react-router";
22
- import "@tanstack/react-query";
23
- import "./tooltip-DOvOrSSS.js";
24
- import "@base-ui/react/tooltip";
25
- import "motion/react";
26
- import "@base-ui/react/alert-dialog";
27
- import "@base-ui/react/collapsible";
28
- import "@base-ui/react/scroll-area";
29
- import "./menu-D8cKTpmN.js";
30
- import "@base-ui/react/menu";
31
- import "./opencami-logo-C-43FL3R.js";
32
- import "./markdown-CFdYXCRQ.js";
33
- import "marked";
34
- import "react-markdown";
35
- import "remark-breaks";
36
- import "remark-gfm";
37
- import "react-dom";
38
- import "./router-C9JRmWMm.js";
39
- import "node:crypto";
40
- import "node:fs";
41
- import "node:os";
42
- import "node:path";
43
- import "ws";
44
- import "@tanstack/router-core/ssr/client";
45
- import "node:stream";
46
- import "node:child_process";
47
- import "node:util";
48
- import "node:fs/promises";
49
- import "path";
50
20
  function getInitialEnabled() {
51
21
  if (typeof window === "undefined") return false;
52
22
  try {
@@ -275,16 +245,7 @@ function SettingsDialog({
275
245
  onClose
276
246
  }) {
277
247
  const { settings, updateSettings } = useChatSettings();
278
- const {
279
- settings: llmSettings,
280
- updateSettings: updateLlmSettings,
281
- status: llmStatus,
282
- testApiKey
283
- } = useLlmSettings();
284
248
  const [activeTab, setActiveTab] = useState("appearance");
285
- const [apiKeyInput, setApiKeyInput] = useState(llmSettings.llmApiKey);
286
- const [testingKey, setTestingKey] = useState(false);
287
- const [testResult, setTestResult] = useState(null);
288
249
  const [textSize, setTextSize] = useState(() => {
289
250
  if (typeof window === "undefined") return "16px";
290
251
  try {
@@ -619,29 +580,6 @@ function SettingsDialog({
619
580
  })
620
581
  );
621
582
  };
622
- const handleTestApiKey = async () => {
623
- if (!apiKeyInput.trim()) return;
624
- setTestingKey(true);
625
- setTestResult(null);
626
- try {
627
- const result = await testApiKey(apiKeyInput.trim());
628
- setTestResult(result);
629
- if (result.valid) {
630
- updateLlmSettings({ llmApiKey: apiKeyInput.trim() });
631
- }
632
- } finally {
633
- setTestingKey(false);
634
- }
635
- };
636
- const handleSaveApiKey = () => {
637
- updateLlmSettings({ llmApiKey: apiKeyInput.trim() });
638
- setTestResult(null);
639
- };
640
- const handleClearApiKey = () => {
641
- setApiKeyInput("");
642
- updateLlmSettings({ llmApiKey: "" });
643
- setTestResult(null);
644
- };
645
583
  const themeOptions = [
646
584
  { value: "system", label: "Auto", icon: ComputerIcon },
647
585
  { value: "light", label: "Light", icon: Sun01Icon },
@@ -721,7 +659,6 @@ function SettingsDialog({
721
659
  { id: "workspace", label: "Workspace", icon: Settings02Icon },
722
660
  { id: "personas", label: "Personas", icon: UserIcon },
723
661
  { id: "voice", label: "Voice", icon: VoiceIcon },
724
- { id: "llm", label: "LLM Features", icon: AiBrain01Icon },
725
662
  { id: "about", label: "About", icon: InformationCircleIcon }
726
663
  ].map((tab) => /* @__PURE__ */ jsxs(
727
664
  "button",
@@ -1296,196 +1233,6 @@ function SettingsDialog({
1296
1233
  )
1297
1234
  }
1298
1235
  ),
1299
- /* @__PURE__ */ jsxs(
1300
- SettingsSection,
1301
- {
1302
- title: "LLM Features",
1303
- tabId: "llm",
1304
- activeTab,
1305
- children: [
1306
- /* @__PURE__ */ jsxs("div", { className: "text-xs text-primary-500 mb-3", children: [
1307
- "Enhance session titles and follow-up suggestions using an LLM provider.",
1308
- llmStatus.hasEnvKey && /* @__PURE__ */ jsx("span", { className: "block mt-1 text-green-600", children: "✓ Server has OPENAI_API_KEY configured" }),
1309
- llmStatus.hasOpenRouterKey && /* @__PURE__ */ jsx("span", { className: "block mt-1 text-green-600", children: "✓ Server has OPENROUTER_API_KEY configured" }),
1310
- llmStatus.hasKilocodeKey && /* @__PURE__ */ jsx("span", { className: "block mt-1 text-green-600", children: "✓ Server has KILOCODE_API_KEY configured" })
1311
- ] }),
1312
- /* @__PURE__ */ jsx(
1313
- SettingsRow,
1314
- {
1315
- inline: true,
1316
- label: "Provider",
1317
- description: "Choose LLM provider for titles & follow-ups",
1318
- children: /* @__PURE__ */ jsxs(
1319
- "select",
1320
- {
1321
- value: llmSettings.llmProvider,
1322
- onChange: (e) => {
1323
- const provider = e.target.value;
1324
- updateLlmSettings({
1325
- llmProvider: provider,
1326
- llmBaseUrl: "",
1327
- llmModel: ""
1328
- });
1329
- },
1330
- className: "px-2 py-1 text-sm rounded-md border border-primary-200 bg-surface focus:outline-none focus:ring-2 focus:ring-primary-500",
1331
- children: [
1332
- /* @__PURE__ */ jsx("option", { value: "openai", children: "OpenAI" }),
1333
- /* @__PURE__ */ jsx("option", { value: "openrouter", children: "OpenRouter" }),
1334
- /* @__PURE__ */ jsx("option", { value: "kilocode", children: "Kilo Gateway" }),
1335
- /* @__PURE__ */ jsx("option", { value: "ollama", children: "Ollama (local)" }),
1336
- /* @__PURE__ */ jsx("option", { value: "custom", children: "Custom" })
1337
- ]
1338
- }
1339
- )
1340
- }
1341
- ),
1342
- /* @__PURE__ */ jsx(
1343
- SettingsRow,
1344
- {
1345
- inline: true,
1346
- label: "Smart session titles",
1347
- description: "Generate concise titles using AI",
1348
- children: /* @__PURE__ */ jsx(
1349
- Switch,
1350
- {
1351
- checked: llmSettings.useLlmTitles,
1352
- onCheckedChange: (checked) => updateLlmSettings({ useLlmTitles: checked }),
1353
- disabled: !llmStatus.isAvailable
1354
- }
1355
- )
1356
- }
1357
- ),
1358
- /* @__PURE__ */ jsx(
1359
- SettingsRow,
1360
- {
1361
- inline: true,
1362
- label: "Smart follow-up suggestions",
1363
- description: "AI-generated contextual follow-ups",
1364
- children: /* @__PURE__ */ jsx(
1365
- Switch,
1366
- {
1367
- checked: llmSettings.useLlmFollowUps,
1368
- onCheckedChange: (checked) => updateLlmSettings({ useLlmFollowUps: checked }),
1369
- disabled: !llmStatus.isAvailable
1370
- }
1371
- )
1372
- }
1373
- ),
1374
- /* @__PURE__ */ jsxs("div", { className: "mt-2 space-y-2", children: [
1375
- /* @__PURE__ */ jsxs("div", { children: [
1376
- /* @__PURE__ */ jsx("div", { className: "text-xs text-primary-500 mb-1", children: "Model" }),
1377
- /* @__PURE__ */ jsx(
1378
- "input",
1379
- {
1380
- type: "text",
1381
- value: llmSettings.llmModel,
1382
- onChange: (e) => updateLlmSettings({ llmModel: e.target.value }),
1383
- placeholder: getLlmProviderDefaults(llmSettings.llmProvider).model || "model-name",
1384
- className: "w-full px-3 py-1.5 text-sm rounded-md border border-primary-200 bg-surface focus:outline-none focus:ring-2 focus:ring-primary-500"
1385
- }
1386
- )
1387
- ] }),
1388
- (llmSettings.llmProvider === "custom" || llmSettings.llmProvider === "ollama") && /* @__PURE__ */ jsxs("div", { children: [
1389
- /* @__PURE__ */ jsx("div", { className: "text-xs text-primary-500 mb-1", children: "Base URL" }),
1390
- /* @__PURE__ */ jsx(
1391
- "input",
1392
- {
1393
- type: "text",
1394
- value: llmSettings.llmBaseUrl,
1395
- onChange: (e) => updateLlmSettings({ llmBaseUrl: e.target.value }),
1396
- placeholder: getLlmProviderDefaults(llmSettings.llmProvider).baseUrl || "https://...",
1397
- className: "w-full px-3 py-1.5 text-sm rounded-md border border-primary-200 bg-surface focus:outline-none focus:ring-2 focus:ring-primary-500"
1398
- }
1399
- )
1400
- ] })
1401
- ] }),
1402
- /* @__PURE__ */ jsxs("div", { className: "mt-4 pt-3 border-t border-primary-100", children: [
1403
- /* @__PURE__ */ jsx("div", { className: "text-sm text-primary-800 mb-2", children: llmSettings.llmProvider === "ollama" ? "API Key (optional)" : "API Key" }),
1404
- /* @__PURE__ */ jsx("div", { className: "text-xs text-primary-500 mb-2", children: llmSettings.llmProvider === "ollama" ? "Not required for local Ollama" : llmStatus.hasEnvKey && llmSettings.llmProvider === "openai" ? "Optional: Override server key with your own" : `Required for ${llmSettings.llmProvider === "openrouter" ? "OpenRouter" : llmSettings.llmProvider === "kilocode" ? "Kilo Gateway" : "LLM features"} (stored locally)` }),
1405
- /* @__PURE__ */ jsxs("div", { className: "text-xs text-amber-600 bg-amber-50 border border-amber-200 rounded-md px-2 py-1.5 mb-2", children: [
1406
- "⚠️ ",
1407
- /* @__PURE__ */ jsx("strong", { children: "Security Note:" }),
1408
- " API keys are stored in your browser's localStorage. This is convenient but not secure for shared computers. For production use, configure keys server-side via environment variables (OPENAI_API_KEY, OPENROUTER_API_KEY, KILOCODE_API_KEY)."
1409
- ] }),
1410
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
1411
- /* @__PURE__ */ jsx(
1412
- "input",
1413
- {
1414
- type: "password",
1415
- value: apiKeyInput,
1416
- onChange: (e) => {
1417
- setApiKeyInput(e.target.value);
1418
- setTestResult(null);
1419
- },
1420
- placeholder: "sk-...",
1421
- className: "flex-1 px-3 py-1.5 text-sm rounded-md border border-primary-200 bg-surface focus:outline-none focus:ring-2 focus:ring-primary-500"
1422
- }
1423
- ),
1424
- /* @__PURE__ */ jsx(
1425
- Button,
1426
- {
1427
- size: "sm",
1428
- variant: "outline",
1429
- onClick: handleTestApiKey,
1430
- disabled: !apiKeyInput.trim() || testingKey,
1431
- className: "min-w-[60px]",
1432
- children: testingKey ? /* @__PURE__ */ jsx(
1433
- HugeiconsIcon,
1434
- {
1435
- icon: Loading02Icon,
1436
- size: 16,
1437
- className: "animate-spin"
1438
- }
1439
- ) : "Test"
1440
- }
1441
- )
1442
- ] }),
1443
- testResult && /* @__PURE__ */ jsxs(
1444
- "div",
1445
- {
1446
- className: `mt-2 flex items-center gap-1.5 text-xs ${testResult.valid ? "text-green-600" : "text-red-600"}`,
1447
- children: [
1448
- /* @__PURE__ */ jsx(
1449
- HugeiconsIcon,
1450
- {
1451
- icon: testResult.valid ? Tick01Icon : Cancel02Icon,
1452
- size: 14
1453
- }
1454
- ),
1455
- testResult.valid ? "API key is valid" : testResult.error || "Invalid API key"
1456
- ]
1457
- }
1458
- ),
1459
- llmSettings.llmApiKey && /* @__PURE__ */ jsxs("div", { className: "mt-2 flex items-center justify-between", children: [
1460
- /* @__PURE__ */ jsxs("span", { className: "text-xs text-green-600 flex items-center gap-1", children: [
1461
- /* @__PURE__ */ jsx(HugeiconsIcon, { icon: Tick01Icon, size: 14 }),
1462
- "Key saved"
1463
- ] }),
1464
- /* @__PURE__ */ jsx(
1465
- Button,
1466
- {
1467
- size: "sm",
1468
- variant: "ghost",
1469
- onClick: handleClearApiKey,
1470
- className: "text-xs text-red-600 hover:text-red-700 hover:bg-red-50",
1471
- children: "Clear"
1472
- }
1473
- )
1474
- ] }),
1475
- apiKeyInput && apiKeyInput !== llmSettings.llmApiKey && !testResult?.valid && /* @__PURE__ */ jsx(
1476
- Button,
1477
- {
1478
- size: "sm",
1479
- variant: "outline",
1480
- onClick: handleSaveApiKey,
1481
- className: "mt-2 w-full",
1482
- children: "Save without testing"
1483
- }
1484
- )
1485
- ] })
1486
- ]
1487
- }
1488
- ),
1489
1236
  /* @__PURE__ */ jsxs(
1490
1237
  SettingsSection,
1491
1238
  {
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState, useEffect } from "react";
3
- import { C as Collapsible, d as CollapsibleTrigger, e as CollapsiblePanel } from "./_sessionKey-Bhksr7VP.js";
3
+ import { C as Collapsible, a as CollapsibleTrigger, b as CollapsiblePanel } from "./_sessionKey-CaFqmyhU.js";
4
4
  import { HugeiconsIcon } from "@hugeicons/react";
5
5
  import { ArrowDown01Icon } from "@hugeicons/core-free-icons";
6
6
  import { B as Button } from "./button-kI8fEIZQ.js";
@@ -26,7 +26,7 @@ import "remark-gfm";
26
26
  import "./index-B_F4DTUu.js";
27
27
  import "zustand/middleware";
28
28
  import "react-dom";
29
- import "./router-C9JRmWMm.js";
29
+ import "./router-X2L0PDPI.js";
30
30
  import "node:crypto";
31
31
  import "node:fs";
32
32
  import "node:os";
@@ -184,7 +184,7 @@ function getResponse() {
184
184
  return event.res;
185
185
  }
186
186
  async function getStartManifest(matchedRoutes) {
187
- const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-D-5ReiD4.js");
187
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-P3skSR3R.js");
188
188
  const startManifest = tsrStartManifest();
189
189
  const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
190
190
  rootRoute.assets = rootRoute.assets || [];
@@ -753,7 +753,7 @@ let entriesPromise;
753
753
  let baseManifestPromise;
754
754
  let cachedFinalManifestPromise;
755
755
  async function loadEntries() {
756
- const routerEntry = await import("./assets/router-C9JRmWMm.js").then((n) => n.r);
756
+ const routerEntry = await import("./assets/router-X2L0PDPI.js").then((n) => n.r);
757
757
  const startEntry = await import("./assets/start-HYkvq4Ni.js");
758
758
  return { startEntry, routerEntry };
759
759
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencami",
3
- "version": "1.9.0",
3
+ "version": "2.0.0",
4
4
  "type": "module",
5
5
  "description": "OpenCami - A beautiful web client for OpenClaw",
6
6
  "bin": {