opencami 1.4.0 → 1.5.1

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 (112) hide show
  1. package/README.md +60 -0
  2. package/dist/client/assets/CSPContext-BBLAL_m_.js +1 -0
  3. package/dist/client/assets/DirectionContext-DXnZc0zz.js +1 -0
  4. package/dist/client/assets/_sessionKey-BidmO1-D.js +100 -0
  5. package/dist/client/assets/agents-CtZs_u1j.js +2 -0
  6. package/dist/client/assets/agents-screen-Basce5qo.js +1 -0
  7. package/dist/client/assets/bots-C_dWjy3z.js +2 -0
  8. package/dist/client/assets/bots-screen-n_xhYOEE.js +1 -0
  9. package/dist/client/assets/button-BaHefIXU.js +1 -0
  10. package/dist/client/assets/c-BIGW1oBm.js +1 -0
  11. package/dist/client/assets/{connect-D3baVDFL.js → connect-DHr3hhUR.js} +1 -1
  12. package/dist/client/assets/core-BrHBc0Zp.js +12 -0
  13. package/dist/client/assets/cpp-B-lmv-kZ.js +1 -0
  14. package/dist/client/assets/csharp-K5feNrxe.js +1 -0
  15. package/dist/client/assets/css-DPfMkruS.js +1 -0
  16. package/dist/client/assets/diff-D97Zzqfu.js +1 -0
  17. package/dist/client/assets/dockerfile-BcOcwvcX.js +1 -0
  18. package/dist/client/assets/engine-javascript-PwbX1GN8.js +141 -0
  19. package/dist/client/assets/file-explorer-screen-8t6M4Xco.js +1 -0
  20. package/dist/client/assets/files-BdlpK3Cy.js +2 -0
  21. package/dist/client/assets/go-Dn2_MT6a.js +1 -0
  22. package/dist/client/assets/graphql-ChdNCCLP.js +1 -0
  23. package/dist/client/assets/html-GMplVEZG.js +1 -0
  24. package/dist/client/assets/index-B2iG4EM1.js +3 -0
  25. package/dist/client/assets/{index-ByIsZcHh.js → index-GTR-Xzl2.js} +1 -1
  26. package/dist/client/assets/index-T4TOjvD0.js +1 -0
  27. package/dist/client/assets/java-CylS5w8V.js +1 -0
  28. package/dist/client/assets/javascript-wDzz0qaB.js +1 -0
  29. package/dist/client/assets/json-Cp-IABpG.js +1 -0
  30. package/dist/client/assets/jsx-g9-lgVsj.js +1 -0
  31. package/dist/client/assets/keyboard-shortcuts-dialog-CcKSlK52.js +1 -0
  32. package/dist/client/assets/kotlin-BdnUsdx6.js +1 -0
  33. package/dist/client/assets/{main-CkIF0soY.js → main-mIHr_ble.js} +129 -17
  34. package/dist/client/assets/markdown-Cvjx9yec.js +1 -0
  35. package/dist/client/assets/{opencami-logo-CIxSO1oo.js → opencami-logo-CRIdKbbZ.js} +1 -1
  36. package/dist/client/assets/php-CDn_0X-4.js +1 -0
  37. package/dist/client/assets/python-B6aJPvgy.js +1 -0
  38. package/dist/client/assets/react-Cfq4ot0g.js +1 -0
  39. package/dist/client/assets/regexp-CDVJQ6XC.js +1 -0
  40. package/dist/client/assets/ruby-FDmvQDUv.js +1 -0
  41. package/dist/client/assets/rust-B1yitclQ.js +1 -0
  42. package/dist/client/assets/search-dialog-D19x_xaG.js +1 -0
  43. package/dist/client/assets/session-export-dialog-DRlJwhMa.js +1 -0
  44. package/dist/client/assets/settings-dialog-BA5FjiyP.js +1 -0
  45. package/dist/client/assets/shell-DfDnw5Jg.js +1 -0
  46. package/dist/client/assets/skills-lmNPZksG.js +2 -0
  47. package/dist/client/assets/skills-panel-Cv-N_MDk.js +5 -0
  48. package/dist/client/assets/sql-BLtJtn59.js +1 -0
  49. package/dist/client/assets/styles-JgjN_ZCd.css +1 -0
  50. package/dist/client/assets/swift-Dg5xB15N.js +1 -0
  51. package/dist/client/assets/switch-Bh9tVOYh.js +1 -0
  52. package/dist/client/assets/tabs-BfaEc9zS.js +1 -0
  53. package/dist/client/assets/toml-vGWfd6FD.js +1 -0
  54. package/dist/client/assets/tooltip-w9D-e_R-.js +1 -0
  55. package/dist/client/assets/tsx-COt5Ahok.js +1 -0
  56. package/dist/client/assets/typescript-BPQ3VLAy.js +1 -0
  57. package/dist/client/assets/use-file-explorer-state-CLaDuI9X.js +12 -0
  58. package/dist/client/assets/useButton-DsMdJPGn.js +1 -0
  59. package/dist/client/assets/useCompositeItem-CaYygSfB.js +1 -0
  60. package/dist/client/assets/{useControlled-Y306krcC.js → useControlled-wOKVgKF4.js} +1 -1
  61. package/dist/client/assets/{useMutation-0WgW4xQJ.js → useMutation-fJnleJAb.js} +1 -1
  62. package/dist/client/assets/visuallyHidden-CqGRL_Oq.js +9 -0
  63. package/dist/client/assets/vitesse-dark-D0r3Knsf.js +1 -0
  64. package/dist/client/assets/vitesse-light-CVO1_9PV.js +1 -0
  65. package/dist/client/assets/xml-sdJ4AIDG.js +1 -0
  66. package/dist/client/assets/yaml-Buea-lGh.js +1 -0
  67. package/dist/server/assets/{_sessionKey-BhFH4uWY.js → _sessionKey-B5UHBd2U.js} +190 -54
  68. package/dist/server/assets/_tanstack-start-manifest_v-D11xMFUx.js +4 -0
  69. package/dist/server/assets/{agents-Dz_i76VW.js → agents-CmQ4vvXm.js} +1 -1
  70. package/dist/server/assets/{agents-screen-CqQPJndp.js → agents-screen-bmrIyFbk.js} +43 -35
  71. package/dist/server/assets/{bots-6ryCIgKh.js → bots-Byt6jv0a.js} +1 -1
  72. package/dist/server/assets/bots-screen-C2TGFv42.js +474 -0
  73. package/dist/server/assets/{button-DtQ3rV1m.js → button-CwY2OHFj.js} +2 -2
  74. package/dist/server/assets/{connect-B8jpGQGK.js → connect-CbgijWz4.js} +2 -35
  75. package/dist/server/assets/{file-explorer-screen-DCfS_Ajx.js → file-explorer-screen-CVlFiAFu.js} +36 -36
  76. package/dist/server/assets/{files-D2GIrPF4.js → files-BIEcSPGp.js} +1 -1
  77. package/dist/server/assets/{index-B2JHn34C.js → index--_jH_0mX.js} +2 -1
  78. package/dist/server/assets/{index-BNSsDaLb.js → index-Dl2BOKP7.js} +116 -82
  79. package/dist/server/assets/{keyboard-shortcuts-dialog-CqIm8aYF.js → keyboard-shortcuts-dialog-CsNP85q8.js} +2 -2
  80. package/dist/server/assets/{router-Dme7USeO.js → router-DJA7GtMo.js} +356 -64
  81. package/dist/server/assets/{search-dialog-DG0D9KRN.js → search-dialog-C2a3OYm_.js} +64 -83
  82. package/dist/server/assets/{session-export-dialog-DLPZVlQV.js → session-export-dialog-CwclV0Aj.js} +2 -2
  83. package/dist/server/assets/{settings-dialog-BaGT4e5l.js → settings-dialog-CHVzrou9.js} +390 -128
  84. package/dist/server/assets/skills-Cy8xclXY.js +11 -0
  85. package/dist/server/assets/skills-panel-BnRNb7u9.js +762 -0
  86. package/dist/server/assets/{switch-DnX0MjGS.js → switch-BbkUeVDV.js} +1 -1
  87. package/dist/server/assets/tabs-DDFZob0m.js +67 -0
  88. package/dist/server/assets/{tooltip-gbV6rEVv.js → tooltip-DgsSPocE.js} +1 -1
  89. package/dist/server/assets/{use-file-explorer-state-DfAKF2gZ.js → use-file-explorer-state-Il1LlBAe.js} +1 -1
  90. package/dist/server/server.js +2 -2
  91. package/package.json +7 -2
  92. package/dist/client/assets/_sessionKey-DB95zj1L.js +0 -97
  93. package/dist/client/assets/agents-LFrWe-HX.js +0 -2
  94. package/dist/client/assets/agents-screen-CEBBk1yO.js +0 -1
  95. package/dist/client/assets/bots-CxDwf_WK.js +0 -2
  96. package/dist/client/assets/bots-screen-D6qma1wK.js +0 -1
  97. package/dist/client/assets/button-Il3CHIzX.js +0 -1
  98. package/dist/client/assets/file-explorer-screen-rtV6n-5_.js +0 -1
  99. package/dist/client/assets/files-DMemuq9D.js +0 -2
  100. package/dist/client/assets/index-CVV4XiZo.js +0 -153
  101. package/dist/client/assets/keyboard-shortcuts-dialog-DXC0YHoy.js +0 -1
  102. package/dist/client/assets/react-BhVdgA5r.js +0 -1
  103. package/dist/client/assets/search-dialog-I1jJplIh.js +0 -1
  104. package/dist/client/assets/session-export-dialog-CH5unryw.js +0 -1
  105. package/dist/client/assets/settings-dialog-B8v-GVJ8.js +0 -1
  106. package/dist/client/assets/styles-BaTVzdPa.css +0 -1
  107. package/dist/client/assets/switch-sQnv1YsK.js +0 -1
  108. package/dist/client/assets/tooltip-j_viC_EE.js +0 -1
  109. package/dist/client/assets/use-file-explorer-state-BUH-u7Jv.js +0 -12
  110. package/dist/client/assets/useButton-9VAzplAB.js +0 -9
  111. package/dist/server/assets/_tanstack-start-manifest_v-BaIrL1VQ.js +0 -4
  112. package/dist/server/assets/bots-screen-DS_ZF9Ec.js +0 -417
@@ -3,14 +3,14 @@ import { useState, useRef, useEffect, useCallback, useMemo } from "react";
3
3
  import { useNavigate } from "@tanstack/react-router";
4
4
  import { HugeiconsIcon } from "@hugeicons/react";
5
5
  import { Search01Icon, Cancel01Icon, Loading03Icon } from "@hugeicons/core-free-icons";
6
- import { D as DialogRoot, a as DialogContent } from "./use-file-explorer-state-DfAKF2gZ.js";
6
+ import { D as DialogRoot, a as DialogContent } from "./use-file-explorer-state-Il1LlBAe.js";
7
7
  import { useQueryClient } from "@tanstack/react-query";
8
- import { c as chatQueryKeys } from "./_sessionKey-BhFH4uWY.js";
9
- import { c as cn } from "./button-DtQ3rV1m.js";
8
+ import { c as chatQueryKeys } from "./_sessionKey-B5UHBd2U.js";
9
+ import { c as cn } from "./button-CwY2OHFj.js";
10
10
  import "@base-ui/react/dialog";
11
11
  import "@base-ui/react/menu";
12
12
  import "zustand";
13
- import "./tooltip-gbV6rEVv.js";
13
+ import "./tooltip-DgsSPocE.js";
14
14
  import "@base-ui/react/tooltip";
15
15
  import "motion/react";
16
16
  import "@base-ui/react/alert-dialog";
@@ -21,49 +21,17 @@ import "marked";
21
21
  import "react-markdown";
22
22
  import "remark-breaks";
23
23
  import "remark-gfm";
24
- import "./index-BNSsDaLb.js";
25
- import "shiki/core";
26
- import "shiki/engine/javascript";
27
- import "@shikijs/themes/vitesse-dark";
28
- import "@shikijs/themes/vitesse-light";
29
- import "@shikijs/langs/bash";
30
- import "@shikijs/langs/c";
31
- import "@shikijs/langs/cpp";
32
- import "@shikijs/langs/csharp";
33
- import "@shikijs/langs/css";
34
- import "@shikijs/langs/diff";
35
- import "@shikijs/langs/dockerfile";
36
- import "@shikijs/langs/go";
37
- import "@shikijs/langs/graphql";
38
- import "@shikijs/langs/html";
39
- import "@shikijs/langs/java";
40
- import "@shikijs/langs/javascript";
41
- import "@shikijs/langs/json";
42
- import "@shikijs/langs/jsx";
43
- import "@shikijs/langs/kotlin";
44
- import "@shikijs/langs/markdown";
45
- import "@shikijs/langs/php";
46
- import "@shikijs/langs/python";
47
- import "@shikijs/langs/regexp";
48
- import "@shikijs/langs/ruby";
49
- import "@shikijs/langs/rust";
50
- import "@shikijs/langs/shell";
51
- import "@shikijs/langs/sql";
52
- import "@shikijs/langs/swift";
53
- import "@shikijs/langs/toml";
54
- import "@shikijs/langs/typescript";
55
- import "@shikijs/langs/tsx";
56
- import "@shikijs/langs/xml";
57
- import "@shikijs/langs/yaml";
24
+ import "./index-Dl2BOKP7.js";
58
25
  import "zustand/middleware";
59
26
  import "react-dom";
60
- import "./router-Dme7USeO.js";
27
+ import "./router-DJA7GtMo.js";
61
28
  import "node:crypto";
62
29
  import "ws";
63
30
  import "node:fs";
64
31
  import "node:path";
65
32
  import "node:os";
66
33
  import "@tanstack/router-core/ssr/client";
34
+ import "node:child_process";
67
35
  import "node:fs/promises";
68
36
  import "path";
69
37
  import "@base-ui/react/merge-props";
@@ -123,6 +91,7 @@ function useSearch({ sessions, currentFriendlyId, currentSessionKey }) {
123
91
  friendlyId: currentFriendlyId,
124
92
  sessionTitle,
125
93
  messageIndex: index,
94
+ messageId: typeof message.id === "string" ? message.id : void 0,
126
95
  messageRole: message.role || "unknown",
127
96
  messageText: text,
128
97
  matchStart: matchIndex,
@@ -158,57 +127,55 @@ function useSearch({ sessions, currentFriendlyId, currentSessionKey }) {
158
127
  throw new DOMException("Search aborted", "AbortError");
159
128
  }
160
129
  const batch = sessions.slice(i, i + BATCH_SIZE);
161
- const batchResults = await Promise.all(
130
+ const batchSettled = await Promise.allSettled(
162
131
  batch.map(async (session) => {
163
- try {
164
- const historyKey = chatQueryKeys.history(session.friendlyId, session.key);
165
- let historyData = queryClient.getQueryData(historyKey);
166
- if (!historyData) {
167
- const params = new URLSearchParams({
132
+ const historyKey = chatQueryKeys.history(session.friendlyId, session.key);
133
+ let historyData = queryClient.getQueryData(historyKey);
134
+ if (!historyData) {
135
+ const params = new URLSearchParams({
136
+ sessionKey: session.key,
137
+ friendlyId: session.friendlyId,
138
+ limit: "200"
139
+ });
140
+ const res = await fetch(`/api/history?${params.toString()}`, {
141
+ signal: controller.signal
142
+ });
143
+ if (res.ok) {
144
+ historyData = await res.json();
145
+ queryClient.setQueryData(historyKey, historyData);
146
+ }
147
+ }
148
+ if (!historyData?.messages) return [];
149
+ const sessionTitle = session.label || session.title || session.derivedTitle || session.friendlyId;
150
+ const sessionResults = [];
151
+ historyData.messages.forEach((message, index) => {
152
+ const text = extractTextFromMessage(message);
153
+ if (!text) return;
154
+ const lowerText = text.toLowerCase();
155
+ const matchIndex = lowerText.indexOf(normalizedQuery);
156
+ if (matchIndex !== -1) {
157
+ sessionResults.push({
168
158
  sessionKey: session.key,
169
159
  friendlyId: session.friendlyId,
170
- limit: "200"
171
- });
172
- const res = await fetch(`/api/history?${params.toString()}`, {
173
- signal: controller.signal
160
+ sessionTitle,
161
+ messageIndex: index,
162
+ messageId: typeof message.id === "string" ? message.id : void 0,
163
+ messageRole: message.role || "unknown",
164
+ messageText: text,
165
+ matchStart: matchIndex,
166
+ matchEnd: matchIndex + trimmedQuery.length,
167
+ timestamp: message.timestamp
174
168
  });
175
- if (res.ok) {
176
- historyData = await res.json();
177
- queryClient.setQueryData(historyKey, historyData);
178
- }
179
- }
180
- if (!historyData?.messages) return [];
181
- const sessionTitle = session.label || session.title || session.derivedTitle || session.friendlyId;
182
- const sessionResults = [];
183
- historyData.messages.forEach((message, index) => {
184
- const text = extractTextFromMessage(message);
185
- if (!text) return;
186
- const lowerText = text.toLowerCase();
187
- const matchIndex = lowerText.indexOf(normalizedQuery);
188
- if (matchIndex !== -1) {
189
- sessionResults.push({
190
- sessionKey: session.key,
191
- friendlyId: session.friendlyId,
192
- sessionTitle,
193
- messageIndex: index,
194
- messageRole: message.role || "unknown",
195
- messageText: text,
196
- matchStart: matchIndex,
197
- matchEnd: matchIndex + trimmedQuery.length,
198
- timestamp: message.timestamp
199
- });
200
- }
201
- });
202
- return sessionResults;
203
- } catch (error) {
204
- if (error instanceof DOMException && error.name === "AbortError") {
205
- throw error;
206
169
  }
207
- return [];
208
- }
170
+ });
171
+ return sessionResults;
209
172
  })
210
173
  );
211
- allResults.push(...batchResults.flat());
174
+ for (const result of batchSettled) {
175
+ if (result.status === "fulfilled") {
176
+ allResults.push(...result.value);
177
+ }
178
+ }
212
179
  allResults.sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0));
213
180
  setGlobalResults([...allResults]);
214
181
  }
@@ -271,6 +238,7 @@ function highlightMatch(text, query) {
271
238
  const after = text.slice(matchIndex + query.length, end) + (end < text.length ? "..." : "");
272
239
  return { before, match, after };
273
240
  }
241
+ const SEARCH_JUMP_TARGET_KEY = "opencami-search-jump-target";
274
242
  function SearchDialog({
275
243
  open,
276
244
  onOpenChange,
@@ -340,6 +308,19 @@ function SearchDialog({
340
308
  if (mode === "current" && onJumpToMessage) {
341
309
  onJumpToMessage(result);
342
310
  } else {
311
+ if (result.messageId && typeof window !== "undefined") {
312
+ try {
313
+ sessionStorage.setItem(
314
+ SEARCH_JUMP_TARGET_KEY,
315
+ JSON.stringify({
316
+ friendlyId: result.friendlyId,
317
+ messageId: result.messageId,
318
+ at: Date.now()
319
+ })
320
+ );
321
+ } catch {
322
+ }
323
+ }
343
324
  navigate({
344
325
  to: "/chat/$sessionKey",
345
326
  params: { sessionKey: result.friendlyId }
@@ -1,7 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
- import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-DfAKF2gZ.js";
4
- import { B as Button } from "./button-DtQ3rV1m.js";
3
+ import { D as DialogRoot, a as DialogContent, b as DialogTitle, c as DialogDescription, d as DialogClose } from "./use-file-explorer-state-Il1LlBAe.js";
4
+ import { B as Button } from "./button-CwY2OHFj.js";
5
5
  import "@base-ui/react/dialog";
6
6
  import "@base-ui/react/menu";
7
7
  import "zustand";