reasonix 0.46.1 → 0.47.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 (131) hide show
  1. package/README.md +62 -13
  2. package/README.zh-CN.md +52 -10
  3. package/dashboard/dist/app.js +217 -60
  4. package/dashboard/dist/app.js.map +1 -1
  5. package/dist/cli/{acp-LKJU5DZX.js → acp-QK3DMC53.js} +22 -22
  6. package/dist/cli/chat-VV5UWY4V.js +51 -0
  7. package/dist/cli/{chunk-DGA5QYFM.js → chunk-24A7FHGJ.js} +42 -13
  8. package/dist/cli/chunk-24A7FHGJ.js.map +1 -0
  9. package/dist/cli/{chunk-K3AIFMI6.js → chunk-6J6BSUCR.js} +2 -2
  10. package/dist/cli/{chunk-C72TNHDE.js → chunk-BWYVFFKR.js} +2 -2
  11. package/dist/cli/{chunk-EAOL43HB.js → chunk-BYYVYJDX.js} +3 -3
  12. package/dist/cli/{chunk-HNXDZGC6.js → chunk-CI2PF5QX.js} +2 -2
  13. package/dist/cli/{chunk-JVQT5IYP.js → chunk-COWPEX54.js} +19 -9
  14. package/dist/cli/chunk-COWPEX54.js.map +1 -0
  15. package/dist/cli/{chunk-IYQ325V7.js → chunk-E5WCLUIU.js} +2 -2
  16. package/dist/cli/{chunk-YRLC2EDF.js → chunk-EQATK2L2.js} +2 -2
  17. package/dist/cli/{chunk-R2ASNSEO.js → chunk-FDKOUJKZ.js} +8 -8
  18. package/dist/cli/{chunk-TEUDEGX2.js → chunk-FY4S7TJZ.js} +19 -5
  19. package/dist/cli/chunk-FY4S7TJZ.js.map +1 -0
  20. package/dist/cli/{chunk-JVFEJAJX.js → chunk-GDKB2PPK.js} +2 -2
  21. package/dist/cli/{chunk-WQ6ZRDQM.js → chunk-HIYTRCSW.js} +16 -12
  22. package/dist/cli/chunk-HIYTRCSW.js.map +1 -0
  23. package/dist/cli/{chunk-ZOQHVQON.js → chunk-ICAFSZHS.js} +307 -30
  24. package/dist/cli/chunk-ICAFSZHS.js.map +1 -0
  25. package/dist/cli/{chunk-SPXN5JIT.js → chunk-ICSYGIPN.js} +1386 -1021
  26. package/dist/cli/chunk-ICSYGIPN.js.map +1 -0
  27. package/dist/cli/{chunk-XPAUNFOL.js → chunk-K6GUKSXH.js} +3 -2
  28. package/dist/cli/chunk-K6GUKSXH.js.map +1 -0
  29. package/dist/cli/{chunk-6VANO7KB.js → chunk-KDRUEXII.js} +147 -20
  30. package/dist/cli/chunk-KDRUEXII.js.map +1 -0
  31. package/dist/cli/{chunk-NCBP5D6E.js → chunk-LBLR4CUZ.js} +2 -2
  32. package/dist/cli/{chunk-2425HK6U.js → chunk-LGEKVMMV.js} +7 -2
  33. package/dist/cli/{chunk-2425HK6U.js.map → chunk-LGEKVMMV.js.map} +1 -1
  34. package/dist/cli/{chunk-7SGGXNB2.js → chunk-OJVITDGB.js} +2 -2
  35. package/dist/cli/{chunk-SE7C5ZSI.js → chunk-QVDWH2A2.js} +3 -3
  36. package/dist/cli/{chunk-WRONKNIH.js → chunk-QVUFWDD2.js} +2 -2
  37. package/dist/cli/{chunk-3AAG2CUT.js → chunk-R6GQKKBW.js} +2 -2
  38. package/dist/cli/{chunk-E7TAHQ4A.js → chunk-RRXUIPWG.js} +19 -18
  39. package/dist/cli/chunk-RRXUIPWG.js.map +1 -0
  40. package/dist/cli/{chunk-CXVWUPA3.js → chunk-TKVXTQ3T.js} +26 -26
  41. package/dist/cli/chunk-TKVXTQ3T.js.map +1 -0
  42. package/dist/cli/{chunk-DHRVZJ2D.js → chunk-UDVFBEXC.js} +3 -3
  43. package/dist/cli/{chunk-7YW6TPXK.js → chunk-VC2CQA5D.js} +9 -9
  44. package/dist/cli/{chunk-M4E5JK6S.js → chunk-VJMBISEI.js} +2 -2
  45. package/dist/cli/{chunk-TDSBASOF.js → chunk-VKYSZKH2.js} +2 -2
  46. package/dist/cli/{chunk-7LOJS3LV.js → chunk-VMUUFWFF.js} +2 -2
  47. package/dist/cli/{chunk-MIIZJD5O.js → chunk-VNQGCA3Q.js} +2 -2
  48. package/dist/cli/{chunk-2AASOSD5.js → chunk-WF7TPVZM.js} +2 -2
  49. package/dist/cli/{chunk-JLQDNLZF.js → chunk-YDPLF7XR.js} +26 -14
  50. package/dist/cli/chunk-YDPLF7XR.js.map +1 -0
  51. package/dist/cli/{code-2JIHL5M2.js → code-C24TUAE5.js} +39 -34
  52. package/dist/cli/code-C24TUAE5.js.map +1 -0
  53. package/dist/cli/{commands-OPT5AJNH.js → commands-RR3GIYOK.js} +4 -4
  54. package/dist/cli/{commit-KA37H6GM.js → commit-FSHPIINM.js} +3 -3
  55. package/dist/cli/{desktop-5ONTRU3C.js → desktop-7NCHPEFB.js} +263 -36
  56. package/dist/cli/desktop-7NCHPEFB.js.map +1 -0
  57. package/dist/cli/{diff-SOIA7AKH.js → diff-RAAHHLHV.js} +8 -8
  58. package/dist/cli/{doctor-RCUP4XRV.js → doctor-PKVQIXRT.js} +9 -9
  59. package/dist/cli/{events-6KHITNX4.js → events-VRYXOSKI.js} +3 -3
  60. package/dist/cli/index.js +81 -40
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/{mcp-JP5OWD6R.js → mcp-CRJ26PP4.js} +2 -2
  63. package/dist/cli/{mcp-browse-ONCJJPJN.js → mcp-browse-QPAOWZOP.js} +2 -2
  64. package/dist/cli/{mcp-inspect-TPLHW5JA.js → mcp-inspect-CVCLABRS.js} +4 -4
  65. package/dist/cli/{prompt-RJDNCQAP.js → prompt-SKYXERSI.js} +4 -4
  66. package/dist/cli/{prune-sessions-MKEATRVL.js → prune-sessions-SEWX7GP6.js} +2 -2
  67. package/dist/cli/{replay-4NILJG4U.js → replay-KPDW2ZMJ.js} +9 -9
  68. package/dist/cli/{run-WFGXB4SB.js → run-WIKDIXTG.js} +17 -17
  69. package/dist/cli/{server-5VFQP3PV.js → server-P6V2G3P6.js} +82 -34
  70. package/dist/cli/server-P6V2G3P6.js.map +1 -0
  71. package/dist/cli/{sessions-5XDJDALO.js → sessions-2NULRMSA.js} +15 -15
  72. package/dist/cli/{setup-F6XSWLRA.js → setup-Y5WDBQFL.js} +6 -6
  73. package/dist/cli/{stats-ALHBZICE.js → stats-T7BL2YOR.js} +6 -6
  74. package/dist/cli/{version-JVRAHBMM.js → version-3KWDNWLN.js} +15 -15
  75. package/dist/index.d.ts +31 -10
  76. package/dist/index.js +505 -66
  77. package/dist/index.js.map +1 -1
  78. package/package.json +1 -1
  79. package/dist/cli/chat-W7LAWEN6.js +0 -51
  80. package/dist/cli/chunk-6VANO7KB.js.map +0 -1
  81. package/dist/cli/chunk-CXVWUPA3.js.map +0 -1
  82. package/dist/cli/chunk-DGA5QYFM.js.map +0 -1
  83. package/dist/cli/chunk-E7TAHQ4A.js.map +0 -1
  84. package/dist/cli/chunk-JLQDNLZF.js.map +0 -1
  85. package/dist/cli/chunk-JVQT5IYP.js.map +0 -1
  86. package/dist/cli/chunk-SPXN5JIT.js.map +0 -1
  87. package/dist/cli/chunk-TEUDEGX2.js.map +0 -1
  88. package/dist/cli/chunk-WQ6ZRDQM.js.map +0 -1
  89. package/dist/cli/chunk-XPAUNFOL.js.map +0 -1
  90. package/dist/cli/chunk-ZOQHVQON.js.map +0 -1
  91. package/dist/cli/code-2JIHL5M2.js.map +0 -1
  92. package/dist/cli/desktop-5ONTRU3C.js.map +0 -1
  93. package/dist/cli/server-5VFQP3PV.js.map +0 -1
  94. /package/dist/cli/{acp-LKJU5DZX.js.map → acp-QK3DMC53.js.map} +0 -0
  95. /package/dist/cli/{chat-W7LAWEN6.js.map → chat-VV5UWY4V.js.map} +0 -0
  96. /package/dist/cli/{chunk-K3AIFMI6.js.map → chunk-6J6BSUCR.js.map} +0 -0
  97. /package/dist/cli/{chunk-C72TNHDE.js.map → chunk-BWYVFFKR.js.map} +0 -0
  98. /package/dist/cli/{chunk-EAOL43HB.js.map → chunk-BYYVYJDX.js.map} +0 -0
  99. /package/dist/cli/{chunk-HNXDZGC6.js.map → chunk-CI2PF5QX.js.map} +0 -0
  100. /package/dist/cli/{chunk-IYQ325V7.js.map → chunk-E5WCLUIU.js.map} +0 -0
  101. /package/dist/cli/{chunk-YRLC2EDF.js.map → chunk-EQATK2L2.js.map} +0 -0
  102. /package/dist/cli/{chunk-R2ASNSEO.js.map → chunk-FDKOUJKZ.js.map} +0 -0
  103. /package/dist/cli/{chunk-JVFEJAJX.js.map → chunk-GDKB2PPK.js.map} +0 -0
  104. /package/dist/cli/{chunk-NCBP5D6E.js.map → chunk-LBLR4CUZ.js.map} +0 -0
  105. /package/dist/cli/{chunk-7SGGXNB2.js.map → chunk-OJVITDGB.js.map} +0 -0
  106. /package/dist/cli/{chunk-SE7C5ZSI.js.map → chunk-QVDWH2A2.js.map} +0 -0
  107. /package/dist/cli/{chunk-WRONKNIH.js.map → chunk-QVUFWDD2.js.map} +0 -0
  108. /package/dist/cli/{chunk-3AAG2CUT.js.map → chunk-R6GQKKBW.js.map} +0 -0
  109. /package/dist/cli/{chunk-DHRVZJ2D.js.map → chunk-UDVFBEXC.js.map} +0 -0
  110. /package/dist/cli/{chunk-7YW6TPXK.js.map → chunk-VC2CQA5D.js.map} +0 -0
  111. /package/dist/cli/{chunk-M4E5JK6S.js.map → chunk-VJMBISEI.js.map} +0 -0
  112. /package/dist/cli/{chunk-TDSBASOF.js.map → chunk-VKYSZKH2.js.map} +0 -0
  113. /package/dist/cli/{chunk-7LOJS3LV.js.map → chunk-VMUUFWFF.js.map} +0 -0
  114. /package/dist/cli/{chunk-MIIZJD5O.js.map → chunk-VNQGCA3Q.js.map} +0 -0
  115. /package/dist/cli/{chunk-2AASOSD5.js.map → chunk-WF7TPVZM.js.map} +0 -0
  116. /package/dist/cli/{commands-OPT5AJNH.js.map → commands-RR3GIYOK.js.map} +0 -0
  117. /package/dist/cli/{commit-KA37H6GM.js.map → commit-FSHPIINM.js.map} +0 -0
  118. /package/dist/cli/{diff-SOIA7AKH.js.map → diff-RAAHHLHV.js.map} +0 -0
  119. /package/dist/cli/{doctor-RCUP4XRV.js.map → doctor-PKVQIXRT.js.map} +0 -0
  120. /package/dist/cli/{events-6KHITNX4.js.map → events-VRYXOSKI.js.map} +0 -0
  121. /package/dist/cli/{mcp-JP5OWD6R.js.map → mcp-CRJ26PP4.js.map} +0 -0
  122. /package/dist/cli/{mcp-browse-ONCJJPJN.js.map → mcp-browse-QPAOWZOP.js.map} +0 -0
  123. /package/dist/cli/{mcp-inspect-TPLHW5JA.js.map → mcp-inspect-CVCLABRS.js.map} +0 -0
  124. /package/dist/cli/{prompt-RJDNCQAP.js.map → prompt-SKYXERSI.js.map} +0 -0
  125. /package/dist/cli/{prune-sessions-MKEATRVL.js.map → prune-sessions-SEWX7GP6.js.map} +0 -0
  126. /package/dist/cli/{replay-4NILJG4U.js.map → replay-KPDW2ZMJ.js.map} +0 -0
  127. /package/dist/cli/{run-WFGXB4SB.js.map → run-WIKDIXTG.js.map} +0 -0
  128. /package/dist/cli/{sessions-5XDJDALO.js.map → sessions-2NULRMSA.js.map} +0 -0
  129. /package/dist/cli/{setup-F6XSWLRA.js.map → setup-Y5WDBQFL.js.map} +0 -0
  130. /package/dist/cli/{stats-ALHBZICE.js.map → stats-T7BL2YOR.js.map} +0 -0
  131. /package/dist/cli/{version-JVRAHBMM.js.map → version-3KWDNWLN.js.map} +0 -0
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
3
- import "./chunk-ZOQHVQON.js";
4
- import "./chunk-TDSBASOF.js";
5
- import "./chunk-EAOL43HB.js";
6
- import "./chunk-WQ6ZRDQM.js";
7
- import "./chunk-DHRVZJ2D.js";
3
+ import "./chunk-ICAFSZHS.js";
4
+ import "./chunk-VKYSZKH2.js";
5
+ import "./chunk-BYYVYJDX.js";
6
+ import "./chunk-HIYTRCSW.js";
7
+ import "./chunk-UDVFBEXC.js";
8
8
  import "./chunk-6OWJV3YW.js";
9
- import "./chunk-MIIZJD5O.js";
9
+ import "./chunk-VNQGCA3Q.js";
10
10
  import "./chunk-25T6CVUP.js";
11
11
  import "./chunk-2UQP6H6T.js";
12
- import "./chunk-JVFEJAJX.js";
13
- import "./chunk-TEUDEGX2.js";
14
- import "./chunk-C72TNHDE.js";
12
+ import "./chunk-GDKB2PPK.js";
13
+ import "./chunk-FY4S7TJZ.js";
14
+ import "./chunk-BWYVFFKR.js";
15
15
  import "./chunk-S4XVGLRW.js";
16
16
  import {
17
17
  listSessions,
18
18
  loadSessionMessages,
19
19
  sessionPath
20
- } from "./chunk-E7TAHQ4A.js";
21
- import "./chunk-WRONKNIH.js";
22
- import "./chunk-M4E5JK6S.js";
20
+ } from "./chunk-RRXUIPWG.js";
21
+ import "./chunk-QVUFWDD2.js";
22
+ import "./chunk-VJMBISEI.js";
23
23
  import {
24
24
  t
25
- } from "./chunk-6VANO7KB.js";
26
- import "./chunk-DGA5QYFM.js";
25
+ } from "./chunk-KDRUEXII.js";
26
+ import "./chunk-24A7FHGJ.js";
27
27
  import "./chunk-XXC2BYTV.js";
28
28
  import "./chunk-TUK7OWJA.js";
29
29
 
@@ -117,4 +117,4 @@ function truncate(s, max) {
117
117
  export {
118
118
  sessionsCommand
119
119
  };
120
- //# sourceMappingURL=sessions-5XDJDALO.js.map
120
+ //# sourceMappingURL=sessions-2NULRMSA.js.map
@@ -3,11 +3,11 @@ import { createRequire as __cr } from 'node:module'; if (typeof globalThis.requi
3
3
  import {
4
4
  MultiSelect,
5
5
  SingleSelect
6
- } from "./chunk-K3AIFMI6.js";
6
+ } from "./chunk-6J6BSUCR.js";
7
7
  import {
8
8
  ThemeProvider,
9
9
  useTheme
10
- } from "./chunk-7SGGXNB2.js";
10
+ } from "./chunk-OJVITDGB.js";
11
11
  import {
12
12
  Box_default,
13
13
  Text,
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-X53B3JIX.js";
20
20
  import {
21
21
  PRESET_DESCRIPTIONS
22
- } from "./chunk-2425HK6U.js";
22
+ } from "./chunk-LGEKVMMV.js";
23
23
  import {
24
24
  loadDotenv
25
25
  } from "./chunk-2UQP6H6T.js";
@@ -34,7 +34,7 @@ import {
34
34
  onLanguageChange,
35
35
  setLanguage,
36
36
  t
37
- } from "./chunk-6VANO7KB.js";
37
+ } from "./chunk-KDRUEXII.js";
38
38
  import {
39
39
  defaultConfigPath,
40
40
  isPlausibleKey,
@@ -46,7 +46,7 @@ import {
46
46
  redactKey,
47
47
  resolveThemePreference,
48
48
  writeConfig
49
- } from "./chunk-DGA5QYFM.js";
49
+ } from "./chunk-24A7FHGJ.js";
50
50
  import {
51
51
  __toESM
52
52
  } from "./chunk-TUK7OWJA.js";
@@ -615,4 +615,4 @@ async function setupCommand(opts = {}) {
615
615
  export {
616
616
  setupCommand
617
617
  };
618
- //# sourceMappingURL=setup-F6XSWLRA.js.map
618
+ //# sourceMappingURL=setup-Y5WDBQFL.js.map
@@ -3,14 +3,14 @@ import { createRequire as __cr } from 'node:module'; if (typeof globalThis.requi
3
3
  import {
4
4
  renderDashboard,
5
5
  statsCommand
6
- } from "./chunk-SE7C5ZSI.js";
7
- import "./chunk-WRONKNIH.js";
8
- import "./chunk-M4E5JK6S.js";
9
- import "./chunk-6VANO7KB.js";
10
- import "./chunk-DGA5QYFM.js";
6
+ } from "./chunk-QVDWH2A2.js";
7
+ import "./chunk-QVUFWDD2.js";
8
+ import "./chunk-VJMBISEI.js";
9
+ import "./chunk-KDRUEXII.js";
10
+ import "./chunk-24A7FHGJ.js";
11
11
  import "./chunk-TUK7OWJA.js";
12
12
  export {
13
13
  renderDashboard,
14
14
  statsCommand
15
15
  };
16
- //# sourceMappingURL=stats-ALHBZICE.js.map
16
+ //# sourceMappingURL=stats-T7BL2YOR.js.map
@@ -1,23 +1,23 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __cr } from 'node:module'; if (typeof globalThis.require === 'undefined') { globalThis.require = __cr(import.meta.url); }
3
- import "./chunk-ZOQHVQON.js";
4
- import "./chunk-TDSBASOF.js";
5
- import "./chunk-EAOL43HB.js";
6
- import "./chunk-WQ6ZRDQM.js";
7
- import "./chunk-DHRVZJ2D.js";
3
+ import "./chunk-ICAFSZHS.js";
4
+ import "./chunk-VKYSZKH2.js";
5
+ import "./chunk-BYYVYJDX.js";
6
+ import "./chunk-HIYTRCSW.js";
7
+ import "./chunk-UDVFBEXC.js";
8
8
  import "./chunk-6OWJV3YW.js";
9
- import "./chunk-MIIZJD5O.js";
9
+ import "./chunk-VNQGCA3Q.js";
10
10
  import "./chunk-25T6CVUP.js";
11
11
  import "./chunk-2UQP6H6T.js";
12
- import "./chunk-JVFEJAJX.js";
13
- import "./chunk-TEUDEGX2.js";
14
- import "./chunk-C72TNHDE.js";
12
+ import "./chunk-GDKB2PPK.js";
13
+ import "./chunk-FY4S7TJZ.js";
14
+ import "./chunk-BWYVFFKR.js";
15
15
  import "./chunk-S4XVGLRW.js";
16
- import "./chunk-E7TAHQ4A.js";
17
- import "./chunk-WRONKNIH.js";
18
- import "./chunk-M4E5JK6S.js";
19
- import "./chunk-6VANO7KB.js";
20
- import "./chunk-DGA5QYFM.js";
16
+ import "./chunk-RRXUIPWG.js";
17
+ import "./chunk-QVUFWDD2.js";
18
+ import "./chunk-VJMBISEI.js";
19
+ import "./chunk-KDRUEXII.js";
20
+ import "./chunk-24A7FHGJ.js";
21
21
  import {
22
22
  VERSION
23
23
  } from "./chunk-XXC2BYTV.js";
@@ -30,4 +30,4 @@ function versionCommand() {
30
30
  export {
31
31
  versionCommand
32
32
  };
33
- //# sourceMappingURL=version-JVRAHBMM.js.map
33
+ //# sourceMappingURL=version-3KWDNWLN.js.map
package/dist/index.d.ts CHANGED
@@ -885,6 +885,8 @@ declare class CacheFirstLoop {
885
885
  abort(): void;
886
886
  /** Drop the last user message + everything after; caller re-sends. Persists to session file. */
887
887
  retryLastUser(): string | null;
888
+ /** Rewind to the N-th user turn (0-indexed). Drops that turn + everything after. */
889
+ rewindToUserTurn(userTurnIndex: number): string | null;
888
890
  step(userInput: string): AsyncGenerator<LoopEvent>;
889
891
  private summaryContext;
890
892
  run(userInput: string, onEvent?: (ev: LoopEvent) => void): Promise<string>;
@@ -1097,6 +1099,7 @@ interface OpenAICompatEmbeddingUserConfig {
1097
1099
  apiKey?: string;
1098
1100
  model?: string;
1099
1101
  extraBody?: Record<string, unknown>;
1102
+ batchSize?: number;
1100
1103
  }
1101
1104
  interface SemanticEmbeddingUserConfig {
1102
1105
  provider?: EmbeddingProvider;
@@ -1108,6 +1111,8 @@ interface McpServerConfig {
1108
1111
  args?: string[];
1109
1112
  env?: Record<string, string>;
1110
1113
  transport?: "stdio" | "sse" | "streamable-http";
1114
+ /** Claude `.mcp.json` alias for `transport`; `"http"` is treated as `"streamable-http"`. */
1115
+ type?: "stdio" | "sse" | "streamable-http" | "http";
1111
1116
  url?: string;
1112
1117
  headers?: Record<string, string>;
1113
1118
  disabled?: boolean;
@@ -1143,8 +1148,8 @@ interface ReasonixConfig {
1143
1148
  workspaceDir?: string;
1144
1149
  /** Last N workspace paths the desktop client has opened, most recent first. */
1145
1150
  recentWorkspaces?: string[];
1146
- /** Desktop only — workspace dir per open tab in tab order, persisted so restart restores every tab (issue #933). Empty/absent → boot with a single default tab. */
1147
- desktopOpenTabs?: string[];
1151
+ /** Desktop only — open tabs in tab order, each with its workspace dir, loaded session and focus, persisted so restart restores every tab and its conversation (issues #933, #1244). Empty/absent → boot with a single default tab. */
1152
+ desktopOpenTabs?: DesktopOpenTab[];
1148
1153
  /** Desktop only — `openWith` value for clicking file links. Empty/undefined = OS default app. Examples: "code", "cursor", "C:\\path\\to\\editor.exe". */
1149
1154
  editor?: string;
1150
1155
  theme?: ThemeName | "auto";
@@ -1159,12 +1164,16 @@ interface ReasonixConfig {
1159
1164
  session?: string | null;
1160
1165
  setupCompleted?: boolean;
1161
1166
  search?: boolean;
1162
- /** Web search engine backend: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), or "metaso" (Metaso API). */
1163
- webSearchEngine?: "mojeek" | "searxng" | "metaso";
1167
+ /** Web search engine backend: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), "metaso" (Metaso API), or "tavily" (LLM-friendly API, free tier). */
1168
+ webSearchEngine?: "mojeek" | "searxng" | "metaso" | "tavily";
1164
1169
  /** Base URL for SearXNG instance (default http://localhost:8080). */
1165
1170
  webSearchEndpoint?: string;
1166
1171
  /** Metaso API key. Falls back to METASO_API_KEY env var, then a built-in default. */
1167
1172
  metasoApiKey?: string;
1173
+ /** Tavily API key. Falls back to TAVILY_API_KEY env var. No baked-in default — free tier is 1000/mo per account, sharing would burn out. */
1174
+ tavilyApiKey?: string;
1175
+ /** TUI mouse-wheel scrolling via SGR mouse tracking. Default true. Set false to fall back to native terminal drag-select for copy (then wheel is terminal-dependent — most terminals translate wheel→arrow in alt-screen, some don't). */
1176
+ mouseTracking?: boolean;
1168
1177
  dashboard?: {
1169
1178
  /** Pin the embedded dashboard to a fixed port — required for stable SSH tunnels. 0/absent → ephemeral. */
1170
1179
  port?: number;
@@ -1228,6 +1237,14 @@ declare function loadApiKey(path?: string): string | undefined;
1228
1237
  declare function loadBaseUrl(path?: string): string | undefined;
1229
1238
  declare function saveBaseUrl(url: string, path?: string): void;
1230
1239
  declare function saveApiKey(key: string, path?: string): void;
1240
+ /** Desktop only — one open tab's restorable state. */
1241
+ interface DesktopOpenTab {
1242
+ dir: string;
1243
+ /** Session the tab had loaded; reopened on boot if its jsonl still exists. */
1244
+ session?: string;
1245
+ /** Whether this was the focused tab. */
1246
+ active?: boolean;
1247
+ }
1231
1248
  /** Self-hosted DeepSeek-compatible endpoints may issue any token shape, so we only typo-guard here — the real auth check is the first API call against `baseUrl`. */
1232
1249
  declare function isPlausibleKey(key: string): boolean;
1233
1250
  /** Mask a key for display: `sk-abcd...wxyz`. */
@@ -1704,8 +1721,8 @@ interface WebFetchOptions {
1704
1721
  interface WebSearchOptions {
1705
1722
  topK?: number;
1706
1723
  signal?: AbortSignal;
1707
- /** Backend engine: "mojeek" (scrapes Mojeek HTML), "searxng" (self-hosted SearXNG JSON API), or "metaso" (Metaso API). */
1708
- engine?: "mojeek" | "searxng" | "metaso";
1724
+ /** Backend engine: "mojeek" (scrapes Mojeek HTML), "searxng" (self-hosted SearXNG JSON API), "metaso" (Metaso API), or "tavily" (LLM-friendly JSON API). */
1725
+ engine?: "mojeek" | "searxng" | "metaso" | "tavily";
1709
1726
  /** Base URL for SearXNG. Default http://localhost:8080. */
1710
1727
  endpoint?: string;
1711
1728
  }
@@ -1722,8 +1739,8 @@ interface WebToolsOptions {
1722
1739
  defaultTopK?: number;
1723
1740
  /** Byte cap for `web_fetch` extracted text. */
1724
1741
  maxFetchChars?: number;
1725
- /** Backend engine: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), or "metaso" (Metaso API). */
1726
- webSearchEngine?: "mojeek" | "searxng" | "metaso";
1742
+ /** Backend engine: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), "metaso" (Metaso API), or "tavily" (LLM-friendly API). */
1743
+ webSearchEngine?: "mojeek" | "searxng" | "metaso" | "tavily";
1727
1744
  /** Base URL for SearXNG (default http://localhost:8080). */
1728
1745
  webSearchEndpoint?: string;
1729
1746
  }
@@ -1762,7 +1779,9 @@ declare function sessionPath(name: string): string;
1762
1779
  declare function sanitizeName(name: string): string;
1763
1780
  declare function loadSessionMessages(name: string): ChatMessage[];
1764
1781
  declare function appendSessionMessage(name: string, message: ChatMessage): void;
1765
- declare function listSessions(): SessionInfo[];
1782
+ declare function listSessions(opts?: {
1783
+ workspaceFilter?: string;
1784
+ }): SessionInfo[];
1766
1785
  declare function deleteSession(name: string): boolean;
1767
1786
 
1768
1787
  declare function loadDotenv(path?: string): void;
@@ -2108,7 +2127,9 @@ declare class McpClient {
2108
2127
  /** Optional free-form instructions the server provides at handshake. */
2109
2128
  get serverInstructions(): string | undefined;
2110
2129
  /** Compliant servers reject other methods until this completes. */
2111
- initialize(): Promise<InitializeResult>;
2130
+ initialize(opts?: {
2131
+ signal?: AbortSignal;
2132
+ }): Promise<InitializeResult>;
2112
2133
  /** List tools the server exposes. */
2113
2134
  listTools(): Promise<ListToolsResult>;
2114
2135
  /** Abort sends `notifications/cancelled` and rejects immediately; late server responses are dropped. */