reasonix 0.47.2 → 0.48.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 (129) hide show
  1. package/README.md +14 -26
  2. package/README.zh-CN.md +5 -26
  3. package/dist/cli/{acp-GEOAKSTU.js → acp-QJGGHQLA.js} +52 -135
  4. package/dist/cli/acp-QJGGHQLA.js.map +1 -0
  5. package/dist/cli/{chat-YTPATMMG.js → chat-ZXF227MP.js} +25 -25
  6. package/dist/cli/{chunk-DN4B5S6Y.js → chunk-3FULTFRB.js} +2 -2
  7. package/dist/cli/chunk-43ROGEX2.js +5190 -0
  8. package/dist/cli/chunk-43ROGEX2.js.map +1 -0
  9. package/dist/cli/{chunk-DQ6K5ZQ7.js → chunk-4E2BHJU4.js} +4 -4
  10. package/dist/cli/chunk-4E2BHJU4.js.map +1 -0
  11. package/dist/cli/{chunk-T5A7EY6B.js → chunk-5AW6NIHU.js} +2 -2
  12. package/dist/cli/{chunk-DWPAKZTY.js → chunk-5U5LMMFF.js} +2 -2
  13. package/dist/cli/{chunk-TRSAHHCL.js → chunk-6FRNXWDZ.js} +321 -76
  14. package/dist/cli/chunk-6FRNXWDZ.js.map +1 -0
  15. package/dist/cli/{chunk-KYQVQ5X4.js → chunk-B5CZL2SE.js} +9 -4
  16. package/dist/cli/chunk-B5CZL2SE.js.map +1 -0
  17. package/dist/cli/{chunk-XMHP7BEE.js → chunk-DABAOQSV.js} +2273 -2517
  18. package/dist/cli/chunk-DABAOQSV.js.map +1 -0
  19. package/dist/cli/chunk-EO6RPTJG.js +831 -0
  20. package/dist/cli/chunk-EO6RPTJG.js.map +1 -0
  21. package/dist/cli/{chunk-BQ6HC66J.js → chunk-FD7SNDWW.js} +4 -14
  22. package/dist/cli/chunk-FD7SNDWW.js.map +1 -0
  23. package/dist/cli/chunk-FPME5QOO.js +17747 -0
  24. package/dist/cli/chunk-FPME5QOO.js.map +1 -0
  25. package/dist/cli/{chunk-6QC5RQLE.js → chunk-H2F4LDNH.js} +2 -2
  26. package/dist/cli/{chunk-QCFLPSPH.js → chunk-IKSYVBBZ.js} +2 -2
  27. package/dist/cli/{chunk-5QCB62C4.js → chunk-J2TQAWOM.js} +135 -18
  28. package/dist/cli/{chunk-5QCB62C4.js.map → chunk-J2TQAWOM.js.map} +1 -1
  29. package/dist/cli/{chunk-JBH5RM7X.js → chunk-JFBGSWQB.js} +395 -85
  30. package/dist/cli/chunk-JFBGSWQB.js.map +1 -0
  31. package/dist/cli/{chunk-CCJAP7G3.js → chunk-KH5JIJJD.js} +2 -2
  32. package/dist/cli/{chunk-TDHXB2ER.js → chunk-NQZ5U37J.js} +2 -2
  33. package/dist/cli/{chunk-CNG32VAB.js → chunk-O3AGYTG2.js} +2 -2
  34. package/dist/cli/{chunk-NRQ5UP5T.js → chunk-PIC5HJRD.js} +234 -40
  35. package/dist/cli/chunk-PIC5HJRD.js.map +1 -0
  36. package/dist/cli/{chunk-GH7DC2Y5.js → chunk-PJIQIYTV.js} +6 -3
  37. package/dist/cli/chunk-PJIQIYTV.js.map +1 -0
  38. package/dist/cli/{chunk-KVZZ5U75.js → chunk-R7U44O3Y.js} +2 -2
  39. package/dist/cli/{chunk-ZXSCAODE.js → chunk-RCLS63KE.js} +71 -3
  40. package/dist/cli/chunk-RCLS63KE.js.map +1 -0
  41. package/dist/cli/{chunk-FY4S7TJZ.js → chunk-SLAFMXAZ.js} +10 -2
  42. package/dist/cli/chunk-SLAFMXAZ.js.map +1 -0
  43. package/dist/cli/{chunk-TRWHTFG7.js → chunk-SWUMD2LX.js} +2 -2
  44. package/dist/cli/{chunk-2XY77LW7.js → chunk-TIJ4ZHD6.js} +56 -24
  45. package/dist/cli/chunk-TIJ4ZHD6.js.map +1 -0
  46. package/dist/cli/{chunk-4MFCAZ2W.js → chunk-WKOXKCF3.js} +3 -3
  47. package/dist/cli/{chunk-HUILPCYX.js → chunk-XMR2VCGT.js} +3 -3
  48. package/dist/cli/{code-Q4NRVEDG.js → code-OKA5YPOH.js} +31 -32
  49. package/dist/cli/code-OKA5YPOH.js.map +1 -0
  50. package/dist/cli/{commands-4CDI4GFM.js → commands-3U6PUVSS.js} +4 -4
  51. package/dist/cli/{commit-GW7LDQP5.js → commit-HFB7SRBU.js} +3 -3
  52. package/dist/cli/{desktop-EG6P5SF2.js → desktop-G7UMW3CJ.js} +503 -48
  53. package/dist/cli/desktop-G7UMW3CJ.js.map +1 -0
  54. package/dist/cli/{diff-VI2YX4FN.js → diff-PGXW4YZD.js} +8 -8
  55. package/dist/cli/{doctor-CQTTZP27.js → doctor-WWJFLVCB.js} +9 -9
  56. package/dist/cli/index.js +53 -41
  57. package/dist/cli/index.js.map +1 -1
  58. package/dist/cli/{mcp-J2UCD4RZ.js → mcp-Y3VKIK3T.js} +2 -2
  59. package/dist/cli/{mcp-browse-GSX34JEK.js → mcp-browse-4IN2QIFR.js} +2 -2
  60. package/dist/cli/{mcp-inspect-RRFYF4ZV.js → mcp-inspect-BUXFXDHB.js} +2 -2
  61. package/dist/cli/{prompt-5TQPIVHV.js → prompt-US57R6BA.js} +5 -4
  62. package/dist/cli/{replay-MJCEMODU.js → replay-EQJMZRB3.js} +8 -8
  63. package/dist/cli/{run-P4D5VDYE.js → run-KVEI66TR.js} +14 -14
  64. package/dist/cli/{server-C25JNNZV.js → server-D6C4GHWN.js} +18 -15
  65. package/dist/cli/server-D6C4GHWN.js.map +1 -0
  66. package/dist/cli/{sessions-QIONZJQ6.js → sessions-TGVS2RQZ.js} +13 -13
  67. package/dist/cli/{setup-NLQ6G5G4.js → setup-WLKX6GGG.js} +5 -5
  68. package/dist/cli/{stats-DFZEXHP4.js → stats-TCD7Q6MB.js} +6 -6
  69. package/dist/cli/{version-GR3X3MPI.js → version-BCWWS2OU.js} +13 -13
  70. package/dist/grammars/tree-sitter-go.wasm +0 -0
  71. package/dist/grammars/tree-sitter-java.wasm +0 -0
  72. package/dist/grammars/tree-sitter-javascript.wasm +0 -0
  73. package/dist/grammars/tree-sitter-python.wasm +0 -0
  74. package/dist/grammars/tree-sitter-rust.wasm +0 -0
  75. package/dist/grammars/tree-sitter-tsx.wasm +0 -0
  76. package/dist/grammars/tree-sitter-typescript.wasm +0 -0
  77. package/dist/grammars/web-tree-sitter.wasm +0 -0
  78. package/dist/index.d.ts +46 -12
  79. package/dist/index.js +684 -129
  80. package/dist/index.js.map +1 -1
  81. package/package.json +16 -4
  82. package/dist/cli/acp-GEOAKSTU.js.map +0 -1
  83. package/dist/cli/chunk-2XY77LW7.js.map +0 -1
  84. package/dist/cli/chunk-6CRPCJAU.js +0 -3141
  85. package/dist/cli/chunk-6CRPCJAU.js.map +0 -1
  86. package/dist/cli/chunk-BQ6HC66J.js.map +0 -1
  87. package/dist/cli/chunk-DQ6K5ZQ7.js.map +0 -1
  88. package/dist/cli/chunk-FY4S7TJZ.js.map +0 -1
  89. package/dist/cli/chunk-GH7DC2Y5.js.map +0 -1
  90. package/dist/cli/chunk-JBH5RM7X.js.map +0 -1
  91. package/dist/cli/chunk-KYQVQ5X4.js.map +0 -1
  92. package/dist/cli/chunk-NRQ5UP5T.js.map +0 -1
  93. package/dist/cli/chunk-TRSAHHCL.js.map +0 -1
  94. package/dist/cli/chunk-XD6P7AFH.js +0 -375
  95. package/dist/cli/chunk-XD6P7AFH.js.map +0 -1
  96. package/dist/cli/chunk-XMHP7BEE.js.map +0 -1
  97. package/dist/cli/chunk-YFP3MYMY.js +0 -323
  98. package/dist/cli/chunk-YFP3MYMY.js.map +0 -1
  99. package/dist/cli/chunk-ZXSCAODE.js.map +0 -1
  100. package/dist/cli/code-Q4NRVEDG.js.map +0 -1
  101. package/dist/cli/desktop-EG6P5SF2.js.map +0 -1
  102. package/dist/cli/server-C25JNNZV.js.map +0 -1
  103. /package/dist/cli/{chat-YTPATMMG.js.map → chat-ZXF227MP.js.map} +0 -0
  104. /package/dist/cli/{chunk-DN4B5S6Y.js.map → chunk-3FULTFRB.js.map} +0 -0
  105. /package/dist/cli/{chunk-T5A7EY6B.js.map → chunk-5AW6NIHU.js.map} +0 -0
  106. /package/dist/cli/{chunk-DWPAKZTY.js.map → chunk-5U5LMMFF.js.map} +0 -0
  107. /package/dist/cli/{chunk-6QC5RQLE.js.map → chunk-H2F4LDNH.js.map} +0 -0
  108. /package/dist/cli/{chunk-QCFLPSPH.js.map → chunk-IKSYVBBZ.js.map} +0 -0
  109. /package/dist/cli/{chunk-CCJAP7G3.js.map → chunk-KH5JIJJD.js.map} +0 -0
  110. /package/dist/cli/{chunk-TDHXB2ER.js.map → chunk-NQZ5U37J.js.map} +0 -0
  111. /package/dist/cli/{chunk-CNG32VAB.js.map → chunk-O3AGYTG2.js.map} +0 -0
  112. /package/dist/cli/{chunk-KVZZ5U75.js.map → chunk-R7U44O3Y.js.map} +0 -0
  113. /package/dist/cli/{chunk-TRWHTFG7.js.map → chunk-SWUMD2LX.js.map} +0 -0
  114. /package/dist/cli/{chunk-4MFCAZ2W.js.map → chunk-WKOXKCF3.js.map} +0 -0
  115. /package/dist/cli/{chunk-HUILPCYX.js.map → chunk-XMR2VCGT.js.map} +0 -0
  116. /package/dist/cli/{commands-4CDI4GFM.js.map → commands-3U6PUVSS.js.map} +0 -0
  117. /package/dist/cli/{commit-GW7LDQP5.js.map → commit-HFB7SRBU.js.map} +0 -0
  118. /package/dist/cli/{diff-VI2YX4FN.js.map → diff-PGXW4YZD.js.map} +0 -0
  119. /package/dist/cli/{doctor-CQTTZP27.js.map → doctor-WWJFLVCB.js.map} +0 -0
  120. /package/dist/cli/{mcp-J2UCD4RZ.js.map → mcp-Y3VKIK3T.js.map} +0 -0
  121. /package/dist/cli/{mcp-browse-GSX34JEK.js.map → mcp-browse-4IN2QIFR.js.map} +0 -0
  122. /package/dist/cli/{mcp-inspect-RRFYF4ZV.js.map → mcp-inspect-BUXFXDHB.js.map} +0 -0
  123. /package/dist/cli/{prompt-5TQPIVHV.js.map → prompt-US57R6BA.js.map} +0 -0
  124. /package/dist/cli/{replay-MJCEMODU.js.map → replay-EQJMZRB3.js.map} +0 -0
  125. /package/dist/cli/{run-P4D5VDYE.js.map → run-KVEI66TR.js.map} +0 -0
  126. /package/dist/cli/{sessions-QIONZJQ6.js.map → sessions-TGVS2RQZ.js.map} +0 -0
  127. /package/dist/cli/{setup-NLQ6G5G4.js.map → setup-WLKX6GGG.js.map} +0 -0
  128. /package/dist/cli/{stats-DFZEXHP4.js.map → stats-TCD7Q6MB.js.map} +0 -0
  129. /package/dist/cli/{version-GR3X3MPI.js.map → version-BCWWS2OU.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-JBH5RM7X.js";
4
- import "./chunk-6QC5RQLE.js";
5
- import "./chunk-HUILPCYX.js";
3
+ import "./chunk-JFBGSWQB.js";
4
+ import "./chunk-H2F4LDNH.js";
5
+ import "./chunk-XMR2VCGT.js";
6
6
  import "./chunk-HIYTRCSW.js";
7
- import "./chunk-BQ6HC66J.js";
7
+ import "./chunk-FD7SNDWW.js";
8
8
  import "./chunk-6OWJV3YW.js";
9
- import "./chunk-DWPAKZTY.js";
9
+ import "./chunk-5U5LMMFF.js";
10
10
  import "./chunk-25T6CVUP.js";
11
11
  import "./chunk-2UQP6H6T.js";
12
- import "./chunk-TRSAHHCL.js";
13
- import "./chunk-FY4S7TJZ.js";
14
- import "./chunk-GH7DC2Y5.js";
12
+ import "./chunk-6FRNXWDZ.js";
13
+ import "./chunk-SLAFMXAZ.js";
14
+ import "./chunk-PJIQIYTV.js";
15
15
  import "./chunk-S4XVGLRW.js";
16
16
  import {
17
17
  listSessions,
18
18
  loadSessionMessages,
19
19
  sessionPath
20
20
  } from "./chunk-RRXUIPWG.js";
21
- import "./chunk-DN4B5S6Y.js";
22
- import "./chunk-QCFLPSPH.js";
21
+ import "./chunk-3FULTFRB.js";
22
+ import "./chunk-IKSYVBBZ.js";
23
23
  import {
24
24
  t
25
- } from "./chunk-NRQ5UP5T.js";
26
- import "./chunk-6CRPCJAU.js";
25
+ } from "./chunk-PIC5HJRD.js";
26
+ import "./chunk-FPME5QOO.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-QIONZJQ6.js.map
120
+ //# sourceMappingURL=sessions-TGVS2RQZ.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-TRWHTFG7.js";
6
+ } from "./chunk-SWUMD2LX.js";
7
7
  import {
8
8
  ThemeProvider,
9
9
  useTheme
10
- } from "./chunk-CCJAP7G3.js";
10
+ } from "./chunk-KH5JIJJD.js";
11
11
  import {
12
12
  Box_default,
13
13
  Text,
@@ -34,7 +34,7 @@ import {
34
34
  onLanguageChange,
35
35
  setLanguage,
36
36
  t
37
- } from "./chunk-NRQ5UP5T.js";
37
+ } from "./chunk-PIC5HJRD.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-6CRPCJAU.js";
49
+ } from "./chunk-FPME5QOO.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-NLQ6G5G4.js.map
618
+ //# sourceMappingURL=setup-WLKX6GGG.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-4MFCAZ2W.js";
7
- import "./chunk-DN4B5S6Y.js";
8
- import "./chunk-QCFLPSPH.js";
9
- import "./chunk-NRQ5UP5T.js";
10
- import "./chunk-6CRPCJAU.js";
6
+ } from "./chunk-WKOXKCF3.js";
7
+ import "./chunk-3FULTFRB.js";
8
+ import "./chunk-IKSYVBBZ.js";
9
+ import "./chunk-PIC5HJRD.js";
10
+ import "./chunk-FPME5QOO.js";
11
11
  import "./chunk-TUK7OWJA.js";
12
12
  export {
13
13
  renderDashboard,
14
14
  statsCommand
15
15
  };
16
- //# sourceMappingURL=stats-DFZEXHP4.js.map
16
+ //# sourceMappingURL=stats-TCD7Q6MB.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-JBH5RM7X.js";
4
- import "./chunk-6QC5RQLE.js";
5
- import "./chunk-HUILPCYX.js";
3
+ import "./chunk-JFBGSWQB.js";
4
+ import "./chunk-H2F4LDNH.js";
5
+ import "./chunk-XMR2VCGT.js";
6
6
  import "./chunk-HIYTRCSW.js";
7
- import "./chunk-BQ6HC66J.js";
7
+ import "./chunk-FD7SNDWW.js";
8
8
  import "./chunk-6OWJV3YW.js";
9
- import "./chunk-DWPAKZTY.js";
9
+ import "./chunk-5U5LMMFF.js";
10
10
  import "./chunk-25T6CVUP.js";
11
11
  import "./chunk-2UQP6H6T.js";
12
- import "./chunk-TRSAHHCL.js";
13
- import "./chunk-FY4S7TJZ.js";
14
- import "./chunk-GH7DC2Y5.js";
12
+ import "./chunk-6FRNXWDZ.js";
13
+ import "./chunk-SLAFMXAZ.js";
14
+ import "./chunk-PJIQIYTV.js";
15
15
  import "./chunk-S4XVGLRW.js";
16
16
  import "./chunk-RRXUIPWG.js";
17
- import "./chunk-DN4B5S6Y.js";
18
- import "./chunk-QCFLPSPH.js";
19
- import "./chunk-NRQ5UP5T.js";
20
- import "./chunk-6CRPCJAU.js";
17
+ import "./chunk-3FULTFRB.js";
18
+ import "./chunk-IKSYVBBZ.js";
19
+ import "./chunk-PIC5HJRD.js";
20
+ import "./chunk-FPME5QOO.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-GR3X3MPI.js.map
33
+ //# sourceMappingURL=version-BCWWS2OU.js.map
package/dist/index.d.ts CHANGED
@@ -236,6 +236,7 @@ interface PausePayloadMap {
236
236
  title?: string;
237
237
  result: string;
238
238
  notes?: string;
239
+ completion?: unknown;
239
240
  };
240
241
  plan_revision: {
241
242
  reason: string;
@@ -342,6 +343,10 @@ declare function projectSettingsPath(projectRoot: string): string;
342
343
  interface LoadHookSettingsOptions {
343
344
  /** Absolute project root, if any. Without it, only global hooks load. */
344
345
  projectRoot?: string;
346
+ /** Override config path for tests. */
347
+ configPath?: string;
348
+ /** Tests and intentionally trusted callers can opt in without touching config. */
349
+ trustProjectHooks?: boolean;
345
350
  /** Override `~` for tests. */
346
351
  homeDir?: string;
347
352
  }
@@ -690,8 +695,8 @@ declare class ToolRegistry {
690
695
  private _resultAugmenter;
691
696
  /** Per-tool fingerprint of the last call that failed schema validation. Cleared by any successful validation for that tool. */
692
697
  private readonly _lastMalformed;
693
- /** Per-tool fingerprint of the last host-side interceptor rejection. */
694
- private readonly _lastInterceptorRejection;
698
+ /** Per-tool fingerprint of the last host-side gate rejection. */
699
+ private readonly _lastGateRejection;
695
700
  constructor(opts?: ToolRegistryOptions);
696
701
  /** Enable / disable plan-mode enforcement at dispatch. */
697
702
  setPlanMode(on: boolean): void;
@@ -727,7 +732,7 @@ declare class ToolRegistry {
727
732
  private _augmentResult;
728
733
  /** Records the failed call's fingerprint; on the 2nd consecutive identical malformed call to the same tool, returns a sharper error that tells the model to stop retrying. */
729
734
  private _noteMalformed;
730
- private _noteInterceptorRejection;
735
+ private _noteGateRejection;
731
736
  }
732
737
 
733
738
  interface CacheFirstLoopOptions {
@@ -814,6 +819,8 @@ declare class CacheFirstLoop {
814
819
  afterMessages: number;
815
820
  summaryChars: number;
816
821
  }>;
822
+ /** Real-time token count of the current log — forwarded to Desktop for meter refresh. */
823
+ getCurrentLogTokens(): number;
817
824
  appendAndPersist(message: ChatMessage): void;
818
825
  /** Swap the just-appended assistant entry — used by self-correction to restore the original tool_calls without dropping reasoning_content. */
819
826
  private replaceTailAssistantMessage;
@@ -1104,6 +1111,12 @@ interface PricingOverride {
1104
1111
  interface RateLimitConfig {
1105
1112
  rpm?: number;
1106
1113
  }
1114
+ interface ProxyConfig {
1115
+ /** Skip proxy detection entirely — equivalent to launching with `--no-proxy`. */
1116
+ disabled?: boolean;
1117
+ /** Additional NO_PROXY patterns (curl syntax). Additive on top of env NO_PROXY and the default DeepSeek-bypass whitelist. */
1118
+ noProxy?: string[];
1119
+ }
1107
1120
  interface ReasonixConfig {
1108
1121
  apiKey?: string;
1109
1122
  baseUrl?: string;
@@ -1135,14 +1148,18 @@ interface ReasonixConfig {
1135
1148
  session?: string | null;
1136
1149
  setupCompleted?: boolean;
1137
1150
  search?: boolean;
1138
- /** Web search engine backend: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), "metaso" (Metaso API), or "tavily" (LLM-friendly API, free tier). */
1139
- webSearchEngine?: "mojeek" | "searxng" | "metaso" | "tavily";
1151
+ /** Web search engine backend: "mojeek" (default, scrapes Mojeek), "searxng" (self-hosted SearXNG), "metaso" (Metaso API), "tavily" (LLM-friendly API, free tier), "perplexity" (Perplexity AI), or "exa" (Exa API). */
1152
+ webSearchEngine?: "mojeek" | "searxng" | "metaso" | "tavily" | "perplexity" | "exa";
1140
1153
  /** Base URL for SearXNG instance (default http://localhost:8080). */
1141
1154
  webSearchEndpoint?: string;
1142
- /** Metaso API key. Falls back to METASO_API_KEY env var, then a built-in default. */
1155
+ /** Metaso API key. Falls back to METASO_API_KEY env var. */
1143
1156
  metasoApiKey?: string;
1144
1157
  /** 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. */
1145
1158
  tavilyApiKey?: string;
1159
+ /** Perplexity API key. Falls back to PERPLEXITY_API_KEY env var. Get one at https://perplexity.ai/settings/api */
1160
+ perplexityApiKey?: string;
1161
+ /** Exa API key. Falls back to EXA_API_KEY env var. Free 1000/mo signup at https://exa.ai */
1162
+ exaApiKey?: string;
1146
1163
  /** 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). */
1147
1164
  mouseTracking?: boolean;
1148
1165
  dashboard?: {
@@ -1166,6 +1183,8 @@ interface ReasonixConfig {
1166
1183
  projects?: {
1167
1184
  [absoluteRootDir: string]: {
1168
1185
  shellAllowed?: string[];
1186
+ /** Project-scoped hooks are arbitrary shell commands; load only after explicit trust. */
1187
+ hooksTrusted?: boolean;
1169
1188
  /** Absolute directory prefixes the user pre-approved for outside-sandbox file access (#684). */
1170
1189
  pathAllowed?: string[];
1171
1190
  };
@@ -1183,11 +1202,15 @@ interface ReasonixConfig {
1183
1202
  skills?: {
1184
1203
  paths?: string[];
1185
1204
  };
1205
+ /** Enable the `java_source` tool for finding and decompiling Java class source. Default off. */
1206
+ javaSource?: boolean;
1186
1207
  /** User-declared extensions to the built-in memory types (#709). Unknown types round-trip even without a declaration; declaring one lets you attach a default priority + lifecycle. */
1187
1208
  memory?: {
1188
1209
  customTypes?: CustomMemoryTypeConfig[];
1189
1210
  };
1190
1211
  pricingOverride?: Record<string, PricingOverride>;
1212
+ /** Per-app proxy override. Layered on top of HTTPS_PROXY / NO_PROXY env vars + the default DeepSeek-bypass whitelist. */
1213
+ proxy?: ProxyConfig;
1191
1214
  rateLimit?: RateLimitConfig;
1192
1215
  /** Host-enforced engineering lifecycle. Defaults to off so opt-outs pay zero prefix cost. */
1193
1216
  engineeringLifecycle?: {
@@ -1206,7 +1229,11 @@ interface CustomMemoryTypeConfig {
1206
1229
  priority?: "low" | "medium" | "high";
1207
1230
  expires?: "project_end";
1208
1231
  }
1209
- declare function loadMetasoApiKey(path?: string): string;
1232
+ declare function loadMetasoApiKey(path?: string): string | undefined;
1233
+ /** Perplexity API key — env > config > undefined. Get one at https://perplexity.ai/settings/api */
1234
+ declare function loadPerplexityApiKey(path?: string): string | undefined;
1235
+ /** Exa API key — env > config > undefined. Free 1000/mo signup at https://exa.ai */
1236
+ declare function loadExaApiKey(path?: string): string | undefined;
1210
1237
  declare function defaultConfigPath(): string;
1211
1238
  declare function readConfig(path?: string): ReasonixConfig;
1212
1239
  declare function writeConfig(cfg: ReasonixConfig, path?: string): void;
@@ -1381,6 +1408,7 @@ interface StepCompletion {
1381
1408
  title?: string;
1382
1409
  result: string;
1383
1410
  notes?: string;
1411
+ evidenceSummary?: string;
1384
1412
  evidence?: StepEvidence[];
1385
1413
  }
1386
1414
 
@@ -1436,7 +1464,7 @@ declare function registerTodoTool(registry: ToolRegistry, opts?: TodoToolOptions
1436
1464
 
1437
1465
  /** Side-channel — subagents run inside a tool-dispatch frame, can't go through parent's `LoopEvent` stream. */
1438
1466
  interface SubagentEvent {
1439
- kind: "start" | "progress" | "end" | "inner" | "phase";
1467
+ kind: "start" | "progress" | "end" | "inner" | "phase" | "stream-progress";
1440
1468
  /** Stable per-spawn id; lets the UI key parallel runs apart instead of overwriting one shared row. */
1441
1469
  runId: string;
1442
1470
  task: string;
@@ -1453,6 +1481,10 @@ interface SubagentEvent {
1453
1481
  inner?: LoopEvent;
1454
1482
  /** When kind === "phase": coarse status verb for the activity row. */
1455
1483
  phase?: "exploring" | "summarising";
1484
+ /** When kind === "stream-progress": monotonic char counters across the whole spawn, throttled. Lets the UI prove bytes are flowing during the long gaps between tool calls. `toolReadChars` is the sum of tool-result string lengths — the bytes pulled INTO the subagent from its reads/searches. */
1485
+ outputChars?: number;
1486
+ reasoningChars?: number;
1487
+ toolReadChars?: number;
1456
1488
  }
1457
1489
  interface SubagentSink {
1458
1490
  current: ((ev: SubagentEvent) => void) | null;
@@ -1697,6 +1729,8 @@ interface SearchResult {
1697
1729
  title: string;
1698
1730
  url: string;
1699
1731
  snippet: string;
1732
+ /** AI-generated answer text — set by AI-native engines (Perplexity, Exa); undefined for traditional engines. */
1733
+ answer?: string;
1700
1734
  }
1701
1735
  interface PageContent {
1702
1736
  url: string;
@@ -1715,8 +1749,8 @@ interface WebFetchOptions {
1715
1749
  interface WebSearchOptions {
1716
1750
  topK?: number;
1717
1751
  signal?: AbortSignal;
1718
- /** Backend engine: "mojeek" (scrapes Mojeek HTML), "searxng" (self-hosted SearXNG JSON API), "metaso" (Metaso API), or "tavily" (LLM-friendly JSON API). */
1719
- engine?: "mojeek" | "searxng" | "metaso" | "tavily";
1752
+ /** Backend engine: "mojeek" (scrapes Mojeek HTML), "searxng" (self-hosted SearXNG JSON API), "metaso" (Metaso API), "tavily" (LLM-friendly JSON API), "perplexity" (Perplexity AI), or "exa" (Exa API). */
1753
+ engine?: "mojeek" | "searxng" | "metaso" | "tavily" | "perplexity" | "exa";
1720
1754
  /** Base URL for SearXNG. Default http://localhost:8080. */
1721
1755
  endpoint?: string;
1722
1756
  }
@@ -2381,7 +2415,7 @@ interface CodeSystemPromptOptions {
2381
2415
  systemAppendFile?: string;
2382
2416
  /** Model the loop will run on — interpolated into the escalation contract so the model can name itself correctly when asked (#582). */
2383
2417
  modelId?: string;
2384
- /** Include the lifecycle contract only for users who explicitly opt in. */
2418
+ /** Back-compat no-op: lifecycle is runtime-only so strict/off do not change the cache prefix. */
2385
2419
  engineeringLifecycleMode?: "off" | "strict";
2386
2420
  }
2387
2421
  declare function codeSystemPrompt(rootDir: string, opts?: CodeSystemPromptOptions): string;
@@ -2530,4 +2564,4 @@ declare function aggregateUsage(records: UsageRecord[], opts?: AggregateOptions)
2530
2564
  /** File-size helper for the stats header — "1.2 MB" etc. Returns "" if missing. */
2531
2565
  declare function formatLogSize(path?: string): string;
2532
2566
 
2533
- export { AT_MENTION_PATTERN, AT_PICKER_PREFIX, type AggregateOptions, AppendOnlyLog, type AppendUsageInput, type ApplyResult, type ApplyStatus, type AtMentionExpansion, type AtMentionOptions, type BridgeOptions, type BridgeResult, CODE_SYSTEM_PROMPT, CacheFirstLoop, type CacheFirstLoopOptions, type CallToolResult, type ChatMessage, type ChatResponse, type ChoiceOption, ChoiceRequestedError, type ChoiceToolOptions, type CodeSystemPromptOptions, DEFAULT_AT_DIR_MAX_ENTRIES, DEFAULT_AT_MENTION_MAX_BYTES, DEFAULT_MAX_RESULT_CHARS, DEFAULT_MAX_RESULT_TOKENS, DEFAULT_PICKER_IGNORE_DIRS, DEFAULT_SPAWN_STORM_THRESHOLD, DeepSeekClient, type DeepSeekClientOptions, type RenderOptions as DiffRenderOptions, type DiffReport, type DiffSide, type DirEntry, type EditBlock, type EditSnapshot, type EventRole, type FileWithStats, type FilesystemToolsOptions, type FlattenDecision, type FlattenOptions, type GetLatestVersionOptions, type GetPromptResult, HOOK_EVENTS, HOOK_SETTINGS_DIRNAME, HOOK_SETTINGS_FILENAME, type HookConfig, type HookEvent, type HookOutcome, type HookPayload, type HookReport, type HookScope, type HookSettings, type HookSpawnInput, type HookSpawnResult, type HookSpawner, ImmutablePrefix, type ImmutablePrefixOptions, type InitializeResult, type InspectionReport, type InstallSource, type JSONSchema, type JsonRpcMessage, type JsonRpcRequest, type JsonRpcResponse, LATEST_CACHE_TTL_MS, LATEST_FETCH_TIMEOUT_MS, type ListDirectoryOptions, type ListFilesOptions, type ListPromptsResult, type ListResourcesResult, type ListToolsResult, type LoadHookSettingsOptions, type LoopEvent, MCP_PROTOCOL_VERSION, MEMORY_INDEX_FILE, MEMORY_INDEX_MAX_CHARS, McpClient, type McpClientOptions, type McpContentBlock, type McpProgressHandler, type McpProgressInfo, type McpPrompt, type McpPromptArgument, type McpPromptMessage, type McpPromptResourceBlock, type McpResource, type McpResourceContents, type McpResourceContentsBlob, type McpResourceContentsText, type McpSpec, type McpTool, type McpToolSchema, type McpTransport, type MemoryEntry, type MemoryScope, MemoryStore, type MemoryStoreOptions, type MemoryToolsOptions, type MemoryType, type WriteInput as MemoryWriteInput, NeedsConfirmationError, PROJECT_MEMORY_FILE, PROJECT_MEMORY_FILES, PROJECT_MEMORY_MAX_CHARS, type PageContent, type ParsedAtQuery, type PickerCandidate, PlanProposedError, PlanRevisionProposedError, type PlanStep, type PlanStepRisk, type PlanToolOptions, type ProgressNotificationParams, type ProjectMemory, type RankPickerOptions, type ReadResourceResult, type ReadTranscriptResult, type ReasonixConfig, type ReconfigurableOptions, type RepairReport, type ReplayStats, type ResolvedHook, type RetryInfo, type RetryOptions, type Role, type RunCommandResult, type RunHooksOptions, type ScavengeOptions, type ScavengeResult, type SearchResult, type SectionResult, type SessionInfo, SessionStats, type SessionSummary, type ShellToolsOptions, type SpawnDistillation, type SseMcpSpec, SseTransport, type SseTransportOptions, type StdioMcpSpec, StdioTransport, type StdioTransportOptions, type StepCompletion, StormBreaker, type StreamChunk, type StreamWalkOptions, type StreamableHttpMcpSpec, StreamableHttpTransport, type StreamableHttpTransportOptions, type SubagentEvent, type SubagentResult, type SubagentResultLike, type SubagentSessionSummary, type SubagentSink, SubagentTelemetry, type SubagentToolOptions, type TodoItem, type TodoStatus, type TodoToolOptions, type ToolCall, type ToolCallContext, ToolCallRepair, type ToolCallRepairOptions, type ToolDefinition, type ToolFunctionSpec, ToolRegistry, type ToolSpec, type TranscriptMeta, type TranscriptRecord, type TruncationRepairResult, type TurnPair, type TurnStats, USER_MEMORY_DIR, Usage, type UsageAggregate, type UsageBucket, type UsageRecord, VERSION, VolatileScratch, type WebFetchOptions, type WebSearchOptions, type WebToolsOptions, aggregateUsage, analyzeSchema, appendSessionMessage, appendUsage, applyEditBlock, applyEditBlocks, applyMemoryStack, applyProjectMemory, applyUserMemory, bridgeMcpTools, bucketCacheHitRatio, bucketSavingsFraction, claudeEquivalentCost, codeSystemPrompt, compareVersions, computeReplayStats, computeSpawnDistillation, costUsd, countSpawnStorms, decideOutcome, defaultConfigPath, defaultUsageLogPath, deleteSession, detectAtPicker, detectInstallSource, detectNpmInstallPrefix, detectShellOperator, diffTranscripts, expandAtMentions, fetchWithRetry, findProjectMemoryPath, fixToolCallPairing, flattenMcpResult, flattenSchema, forkRegistryExcluding, formatCommandResult, formatHookOutcomeMessage, formatLogSize, formatLoopError, formatSearchResults, getLatestVersion, globalSettingsPath, healLoadedMessages, healLoadedMessagesByTokens, htmlToText, injectPowerShellUtf8, inputCostUsd, inspectMcpServer, isAllowed, isJsonRpcError, isNpxInstall, isPlausibleKey, listDirectory, listFilesSync, listFilesWithStatsAsync, listFilesWithStatsSync, listSessions, loadApiKey, loadBaseUrl, loadDotenv, loadHooks, loadMetasoApiKey, loadSessionMessages, matchesTool, memoryEnabled, nestArguments, openTranscriptFile, outputCostUsd, parseAtQuery, parseEditBlocks, parseMcpSpec, parseMojeekResults, parseSearxngHtmlResults, parseTranscript, prepareSpawn, projectHash, projectSettingsPath, quoteForCmdExe, rankPickerCandidates, readConfig, readProjectMemory, readTranscript, readUsageLog, recordFromLoopEvent, redactKey, registerChoiceTool, registerFilesystemTools, registerMemoryTools, registerPlanTool, registerShellTools, registerSubagentTool, registerTodoTool, registerWebTools, renderMarkdown as renderDiffMarkdown, renderSummaryTable as renderDiffSummary, repairTruncatedJson, replayFromFile, resolveExecutable, resolveProjectMemoryWritePath, restoreSnapshots, runCommand, runHooks, sanitizeMemoryName, sanitizeName as sanitizeSessionName, saveApiKey, saveBaseUrl, scavengeToolCalls, sessionPath, sessionsDir, similarity, snapshotBeforeEdits, stripHallucinatedToolMarkup, summarizeSubagentSession, tokenizeCommand, truncateForModel, truncateForModelByTokens, walkFilesStream, webFetch, webSearch, withUtf8Codepage, writeConfig, writeMeta, writeRecord };
2567
+ export { AT_MENTION_PATTERN, AT_PICKER_PREFIX, type AggregateOptions, AppendOnlyLog, type AppendUsageInput, type ApplyResult, type ApplyStatus, type AtMentionExpansion, type AtMentionOptions, type BridgeOptions, type BridgeResult, CODE_SYSTEM_PROMPT, CacheFirstLoop, type CacheFirstLoopOptions, type CallToolResult, type ChatMessage, type ChatResponse, type ChoiceOption, ChoiceRequestedError, type ChoiceToolOptions, type CodeSystemPromptOptions, DEFAULT_AT_DIR_MAX_ENTRIES, DEFAULT_AT_MENTION_MAX_BYTES, DEFAULT_MAX_RESULT_CHARS, DEFAULT_MAX_RESULT_TOKENS, DEFAULT_PICKER_IGNORE_DIRS, DEFAULT_SPAWN_STORM_THRESHOLD, DeepSeekClient, type DeepSeekClientOptions, type RenderOptions as DiffRenderOptions, type DiffReport, type DiffSide, type DirEntry, type EditBlock, type EditSnapshot, type EventRole, type FileWithStats, type FilesystemToolsOptions, type FlattenDecision, type FlattenOptions, type GetLatestVersionOptions, type GetPromptResult, HOOK_EVENTS, HOOK_SETTINGS_DIRNAME, HOOK_SETTINGS_FILENAME, type HookConfig, type HookEvent, type HookOutcome, type HookPayload, type HookReport, type HookScope, type HookSettings, type HookSpawnInput, type HookSpawnResult, type HookSpawner, ImmutablePrefix, type ImmutablePrefixOptions, type InitializeResult, type InspectionReport, type InstallSource, type JSONSchema, type JsonRpcMessage, type JsonRpcRequest, type JsonRpcResponse, LATEST_CACHE_TTL_MS, LATEST_FETCH_TIMEOUT_MS, type ListDirectoryOptions, type ListFilesOptions, type ListPromptsResult, type ListResourcesResult, type ListToolsResult, type LoadHookSettingsOptions, type LoopEvent, MCP_PROTOCOL_VERSION, MEMORY_INDEX_FILE, MEMORY_INDEX_MAX_CHARS, McpClient, type McpClientOptions, type McpContentBlock, type McpProgressHandler, type McpProgressInfo, type McpPrompt, type McpPromptArgument, type McpPromptMessage, type McpPromptResourceBlock, type McpResource, type McpResourceContents, type McpResourceContentsBlob, type McpResourceContentsText, type McpSpec, type McpTool, type McpToolSchema, type McpTransport, type MemoryEntry, type MemoryScope, MemoryStore, type MemoryStoreOptions, type MemoryToolsOptions, type MemoryType, type WriteInput as MemoryWriteInput, NeedsConfirmationError, PROJECT_MEMORY_FILE, PROJECT_MEMORY_FILES, PROJECT_MEMORY_MAX_CHARS, type PageContent, type ParsedAtQuery, type PickerCandidate, PlanProposedError, PlanRevisionProposedError, type PlanStep, type PlanStepRisk, type PlanToolOptions, type ProgressNotificationParams, type ProjectMemory, type RankPickerOptions, type ReadResourceResult, type ReadTranscriptResult, type ReasonixConfig, type ReconfigurableOptions, type RepairReport, type ReplayStats, type ResolvedHook, type RetryInfo, type RetryOptions, type Role, type RunCommandResult, type RunHooksOptions, type ScavengeOptions, type ScavengeResult, type SearchResult, type SectionResult, type SessionInfo, SessionStats, type SessionSummary, type ShellToolsOptions, type SpawnDistillation, type SseMcpSpec, SseTransport, type SseTransportOptions, type StdioMcpSpec, StdioTransport, type StdioTransportOptions, type StepCompletion, StormBreaker, type StreamChunk, type StreamWalkOptions, type StreamableHttpMcpSpec, StreamableHttpTransport, type StreamableHttpTransportOptions, type SubagentEvent, type SubagentResult, type SubagentResultLike, type SubagentSessionSummary, type SubagentSink, SubagentTelemetry, type SubagentToolOptions, type TodoItem, type TodoStatus, type TodoToolOptions, type ToolCall, type ToolCallContext, ToolCallRepair, type ToolCallRepairOptions, type ToolDefinition, type ToolFunctionSpec, ToolRegistry, type ToolSpec, type TranscriptMeta, type TranscriptRecord, type TruncationRepairResult, type TurnPair, type TurnStats, USER_MEMORY_DIR, Usage, type UsageAggregate, type UsageBucket, type UsageRecord, VERSION, VolatileScratch, type WebFetchOptions, type WebSearchOptions, type WebToolsOptions, aggregateUsage, analyzeSchema, appendSessionMessage, appendUsage, applyEditBlock, applyEditBlocks, applyMemoryStack, applyProjectMemory, applyUserMemory, bridgeMcpTools, bucketCacheHitRatio, bucketSavingsFraction, claudeEquivalentCost, codeSystemPrompt, compareVersions, computeReplayStats, computeSpawnDistillation, costUsd, countSpawnStorms, decideOutcome, defaultConfigPath, defaultUsageLogPath, deleteSession, detectAtPicker, detectInstallSource, detectNpmInstallPrefix, detectShellOperator, diffTranscripts, expandAtMentions, fetchWithRetry, findProjectMemoryPath, fixToolCallPairing, flattenMcpResult, flattenSchema, forkRegistryExcluding, formatCommandResult, formatHookOutcomeMessage, formatLogSize, formatLoopError, formatSearchResults, getLatestVersion, globalSettingsPath, healLoadedMessages, healLoadedMessagesByTokens, htmlToText, injectPowerShellUtf8, inputCostUsd, inspectMcpServer, isAllowed, isJsonRpcError, isNpxInstall, isPlausibleKey, listDirectory, listFilesSync, listFilesWithStatsAsync, listFilesWithStatsSync, listSessions, loadApiKey, loadBaseUrl, loadDotenv, loadExaApiKey, loadHooks, loadMetasoApiKey, loadPerplexityApiKey, loadSessionMessages, matchesTool, memoryEnabled, nestArguments, openTranscriptFile, outputCostUsd, parseAtQuery, parseEditBlocks, parseMcpSpec, parseMojeekResults, parseSearxngHtmlResults, parseTranscript, prepareSpawn, projectHash, projectSettingsPath, quoteForCmdExe, rankPickerCandidates, readConfig, readProjectMemory, readTranscript, readUsageLog, recordFromLoopEvent, redactKey, registerChoiceTool, registerFilesystemTools, registerMemoryTools, registerPlanTool, registerShellTools, registerSubagentTool, registerTodoTool, registerWebTools, renderMarkdown as renderDiffMarkdown, renderSummaryTable as renderDiffSummary, repairTruncatedJson, replayFromFile, resolveExecutable, resolveProjectMemoryWritePath, restoreSnapshots, runCommand, runHooks, sanitizeMemoryName, sanitizeName as sanitizeSessionName, saveApiKey, saveBaseUrl, scavengeToolCalls, sessionPath, sessionsDir, similarity, snapshotBeforeEdits, stripHallucinatedToolMarkup, summarizeSubagentSession, tokenizeCommand, truncateForModel, truncateForModelByTokens, walkFilesStream, webFetch, webSearch, withUtf8Codepage, writeConfig, writeMeta, writeRecord };