reasonix 0.46.0 → 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 (159) hide show
  1. package/README.md +64 -12
  2. package/README.zh-CN.md +54 -9
  3. package/dashboard/dist/app.js +293 -66
  4. package/dashboard/dist/app.js.map +1 -1
  5. package/dist/cli/{acp-LGBLHBKY.js → acp-QK3DMC53.js} +22 -22
  6. package/dist/cli/chat-VV5UWY4V.js +51 -0
  7. package/dist/cli/{chunk-AVFXO2EZ.js → chunk-24A7FHGJ.js} +148 -16
  8. package/dist/cli/chunk-24A7FHGJ.js.map +1 -0
  9. package/dist/cli/chunk-25T6CVUP.js +0 -0
  10. package/dist/cli/chunk-2UQP6H6T.js +0 -0
  11. package/dist/cli/chunk-5QCB62C4.js +0 -0
  12. package/dist/cli/{chunk-YY227BIQ.js → chunk-6J6BSUCR.js} +2 -2
  13. package/dist/cli/chunk-6OWJV3YW.js +0 -0
  14. package/dist/cli/{chunk-A3TSSDS2.js → chunk-BWYVFFKR.js} +2 -2
  15. package/dist/cli/{chunk-C53JQES5.js → chunk-BYYVYJDX.js} +3 -3
  16. package/dist/cli/{chunk-HNXDZGC6.js → chunk-CI2PF5QX.js} +2 -2
  17. package/dist/cli/{chunk-GTZTQNX5.js → chunk-COWPEX54.js} +19 -9
  18. package/dist/cli/chunk-COWPEX54.js.map +1 -0
  19. package/dist/cli/{chunk-QJDDIK3Z.js → chunk-E5WCLUIU.js} +2 -2
  20. package/dist/cli/{chunk-NVURFF27.js → chunk-EQATK2L2.js} +2 -2
  21. package/dist/cli/{chunk-HKWSPKMU.js → chunk-FDKOUJKZ.js} +8 -8
  22. package/dist/cli/chunk-FEZK652I.js +0 -0
  23. package/dist/cli/{chunk-TEUDEGX2.js → chunk-FY4S7TJZ.js} +19 -5
  24. package/dist/cli/chunk-FY4S7TJZ.js.map +1 -0
  25. package/dist/cli/{chunk-RDRC3XDT.js → chunk-GDKB2PPK.js} +2 -2
  26. package/dist/cli/{chunk-XSU4QVFW.js → chunk-HIYTRCSW.js} +27 -14
  27. package/dist/cli/chunk-HIYTRCSW.js.map +1 -0
  28. package/dist/cli/{chunk-WL6SNQ5T.js → chunk-ICAFSZHS.js} +307 -114
  29. package/dist/cli/chunk-ICAFSZHS.js.map +1 -0
  30. package/dist/cli/{chunk-KQU2TYIL.js → chunk-ICSYGIPN.js} +1916 -1098
  31. package/dist/cli/chunk-ICSYGIPN.js.map +1 -0
  32. package/dist/cli/chunk-J5XJHLWM.js +0 -0
  33. package/dist/cli/chunk-JMBMLOBP.js +0 -0
  34. package/dist/cli/{chunk-MJ6W5UN3.js → chunk-K6GUKSXH.js} +3 -2
  35. package/dist/cli/chunk-K6GUKSXH.js.map +1 -0
  36. package/dist/cli/{chunk-IJ7JA32V.js → chunk-KDRUEXII.js} +189 -26
  37. package/dist/cli/chunk-KDRUEXII.js.map +1 -0
  38. package/dist/cli/{chunk-4HCP2UQW.js → chunk-LBLR4CUZ.js} +2 -2
  39. package/dist/cli/{chunk-2425HK6U.js → chunk-LGEKVMMV.js} +7 -2
  40. package/dist/cli/{chunk-2425HK6U.js.map → chunk-LGEKVMMV.js.map} +1 -1
  41. package/dist/cli/{chunk-I4L2GTSE.js → chunk-OJVITDGB.js} +2 -2
  42. package/dist/cli/chunk-PLHAZOLZ.js +0 -0
  43. package/dist/cli/{chunk-W7YGWUWU.js → chunk-QVDWH2A2.js} +3 -3
  44. package/dist/cli/{chunk-R3CTO2HM.js → chunk-QVUFWDD2.js} +2 -2
  45. package/dist/cli/{chunk-HVUZWNSP.js → chunk-R6GQKKBW.js} +2 -2
  46. package/dist/cli/{chunk-5ACMUK4Q.js → chunk-RRXUIPWG.js} +20 -18
  47. package/dist/cli/chunk-RRXUIPWG.js.map +1 -0
  48. package/dist/cli/chunk-S4XVGLRW.js +0 -0
  49. package/dist/cli/chunk-SZ5XES2N.js +0 -0
  50. package/dist/cli/{chunk-CXVWUPA3.js → chunk-TKVXTQ3T.js} +26 -26
  51. package/dist/cli/chunk-TKVXTQ3T.js.map +1 -0
  52. package/dist/cli/chunk-TUK7OWJA.js +0 -0
  53. package/dist/cli/{chunk-JNAQYELD.js → chunk-UDVFBEXC.js} +3 -3
  54. package/dist/cli/{chunk-CBIQWMS6.js → chunk-VC2CQA5D.js} +9 -9
  55. package/dist/cli/{chunk-ZZYBBX5N.js → chunk-VJMBISEI.js} +23 -9
  56. package/dist/cli/chunk-VJMBISEI.js.map +1 -0
  57. package/dist/cli/{chunk-WK3UFQY3.js → chunk-VKYSZKH2.js} +2 -2
  58. package/dist/cli/{chunk-LIR2HBQH.js → chunk-VMUUFWFF.js} +2 -2
  59. package/dist/cli/{chunk-V26WPN3J.js → chunk-VNQGCA3Q.js} +28 -1
  60. package/dist/cli/chunk-VNQGCA3Q.js.map +1 -0
  61. package/dist/cli/{chunk-5I2C4JEO.js → chunk-WF7TPVZM.js} +6 -6
  62. package/dist/cli/{chunk-5I2C4JEO.js.map → chunk-WF7TPVZM.js.map} +1 -1
  63. package/dist/cli/chunk-X53B3JIX.js +0 -0
  64. package/dist/cli/chunk-XJXDHAES.js +0 -0
  65. package/dist/cli/chunk-XXC2BYTV.js +0 -0
  66. package/dist/cli/{chunk-4CTDEJUF.js → chunk-YDPLF7XR.js} +26 -14
  67. package/dist/cli/chunk-YDPLF7XR.js.map +1 -0
  68. package/dist/cli/chunk-ZZM6QJ4W.js +0 -0
  69. package/dist/cli/{code-DFHSASJ4.js → code-C24TUAE5.js} +39 -35
  70. package/dist/cli/code-C24TUAE5.js.map +1 -0
  71. package/dist/cli/{commands-OCU42XG4.js → commands-RR3GIYOK.js} +4 -4
  72. package/dist/cli/{commit-XCQIQCYG.js → commit-FSHPIINM.js} +3 -3
  73. package/dist/cli/{desktop-ZCUG7LMF.js → desktop-7NCHPEFB.js} +263 -36
  74. package/dist/cli/desktop-7NCHPEFB.js.map +1 -0
  75. package/dist/cli/devtools-HW3WDT3Q.js +0 -0
  76. package/dist/cli/{diff-66B2KWOJ.js → diff-RAAHHLHV.js} +8 -8
  77. package/dist/cli/{doctor-Y73CPPRZ.js → doctor-PKVQIXRT.js} +9 -9
  78. package/dist/cli/{events-NGZ2OJYH.js → events-VRYXOSKI.js} +3 -3
  79. package/dist/cli/index.js +84 -92
  80. package/dist/cli/index.js.map +1 -1
  81. package/dist/cli/{mcp-MPVGBBJF.js → mcp-CRJ26PP4.js} +2 -2
  82. package/dist/cli/{mcp-browse-4XOTC3FJ.js → mcp-browse-QPAOWZOP.js} +2 -2
  83. package/dist/cli/{mcp-inspect-CEMGKKAH.js → mcp-inspect-CVCLABRS.js} +4 -4
  84. package/dist/cli/{prompt-2D7ID24X.js → prompt-SKYXERSI.js} +4 -4
  85. package/dist/cli/{prune-sessions-OJEYYLHY.js → prune-sessions-SEWX7GP6.js} +2 -2
  86. package/dist/cli/{replay-AKYQNAQJ.js → replay-KPDW2ZMJ.js} +9 -9
  87. package/dist/cli/{run-5DPQFSP6.js → run-WIKDIXTG.js} +18 -19
  88. package/dist/cli/run-WIKDIXTG.js.map +1 -0
  89. package/dist/cli/{server-TQ2IHYQJ.js → server-P6V2G3P6.js} +82 -34
  90. package/dist/cli/server-P6V2G3P6.js.map +1 -0
  91. package/dist/cli/{sessions-KY54NG45.js → sessions-2NULRMSA.js} +29 -15
  92. package/dist/cli/sessions-2NULRMSA.js.map +1 -0
  93. package/dist/cli/{setup-XPIOZWS7.js → setup-Y5WDBQFL.js} +8 -8
  94. package/dist/cli/setup-Y5WDBQFL.js.map +1 -0
  95. package/dist/cli/{stats-X2VTWKNS.js → stats-T7BL2YOR.js} +6 -6
  96. package/dist/cli/update-6ITLPRDV.js +0 -0
  97. package/dist/cli/{version-7O6A5T7Q.js → version-3KWDNWLN.js} +15 -15
  98. package/dist/index.d.ts +54 -23
  99. package/dist/index.js +1613 -1152
  100. package/dist/index.js.map +1 -1
  101. package/package.json +1 -1
  102. package/dist/cli/.-3G6VX5S7.js +0 -327
  103. package/dist/cli/.-6YRPB2C7.js +0 -329
  104. package/dist/cli/.-EYSVINK3.js +0 -317
  105. package/dist/cli/chat-ECK5ZGMV.js +0 -51
  106. package/dist/cli/chunk-4CTDEJUF.js.map +0 -1
  107. package/dist/cli/chunk-5ACMUK4Q.js.map +0 -1
  108. package/dist/cli/chunk-AVFXO2EZ.js.map +0 -1
  109. package/dist/cli/chunk-CXVWUPA3.js.map +0 -1
  110. package/dist/cli/chunk-GTZTQNX5.js.map +0 -1
  111. package/dist/cli/chunk-IJ7JA32V.js.map +0 -1
  112. package/dist/cli/chunk-KQU2TYIL.js.map +0 -1
  113. package/dist/cli/chunk-MJ6W5UN3.js.map +0 -1
  114. package/dist/cli/chunk-TEUDEGX2.js.map +0 -1
  115. package/dist/cli/chunk-V26WPN3J.js.map +0 -1
  116. package/dist/cli/chunk-WL6SNQ5T.js.map +0 -1
  117. package/dist/cli/chunk-XSU4QVFW.js.map +0 -1
  118. package/dist/cli/chunk-ZZYBBX5N.js.map +0 -1
  119. package/dist/cli/code-DFHSASJ4.js.map +0 -1
  120. package/dist/cli/desktop-ZCUG7LMF.js.map +0 -1
  121. package/dist/cli/doctor-Y73CPPRZ.js.map +0 -1
  122. package/dist/cli/prompt-2D7ID24X.js.map +0 -1
  123. package/dist/cli/run-5DPQFSP6.js.map +0 -1
  124. package/dist/cli/server-TQ2IHYQJ.js.map +0 -1
  125. package/dist/cli/sessions-KY54NG45.js.map +0 -1
  126. package/dist/cli/setup-XPIOZWS7.js.map +0 -1
  127. package/dist/cli/stats-X2VTWKNS.js.map +0 -1
  128. /package/dist/cli/{acp-LGBLHBKY.js.map → acp-QK3DMC53.js.map} +0 -0
  129. /package/dist/cli/{.-3G6VX5S7.js.map → chat-VV5UWY4V.js.map} +0 -0
  130. /package/dist/cli/{chunk-YY227BIQ.js.map → chunk-6J6BSUCR.js.map} +0 -0
  131. /package/dist/cli/{chunk-A3TSSDS2.js.map → chunk-BWYVFFKR.js.map} +0 -0
  132. /package/dist/cli/{chunk-C53JQES5.js.map → chunk-BYYVYJDX.js.map} +0 -0
  133. /package/dist/cli/{chunk-HNXDZGC6.js.map → chunk-CI2PF5QX.js.map} +0 -0
  134. /package/dist/cli/{chunk-QJDDIK3Z.js.map → chunk-E5WCLUIU.js.map} +0 -0
  135. /package/dist/cli/{chunk-NVURFF27.js.map → chunk-EQATK2L2.js.map} +0 -0
  136. /package/dist/cli/{chunk-HKWSPKMU.js.map → chunk-FDKOUJKZ.js.map} +0 -0
  137. /package/dist/cli/{chunk-RDRC3XDT.js.map → chunk-GDKB2PPK.js.map} +0 -0
  138. /package/dist/cli/{chunk-4HCP2UQW.js.map → chunk-LBLR4CUZ.js.map} +0 -0
  139. /package/dist/cli/{chunk-I4L2GTSE.js.map → chunk-OJVITDGB.js.map} +0 -0
  140. /package/dist/cli/{chunk-W7YGWUWU.js.map → chunk-QVDWH2A2.js.map} +0 -0
  141. /package/dist/cli/{chunk-R3CTO2HM.js.map → chunk-QVUFWDD2.js.map} +0 -0
  142. /package/dist/cli/{chunk-HVUZWNSP.js.map → chunk-R6GQKKBW.js.map} +0 -0
  143. /package/dist/cli/{chunk-JNAQYELD.js.map → chunk-UDVFBEXC.js.map} +0 -0
  144. /package/dist/cli/{chunk-CBIQWMS6.js.map → chunk-VC2CQA5D.js.map} +0 -0
  145. /package/dist/cli/{chunk-WK3UFQY3.js.map → chunk-VKYSZKH2.js.map} +0 -0
  146. /package/dist/cli/{chunk-LIR2HBQH.js.map → chunk-VMUUFWFF.js.map} +0 -0
  147. /package/dist/cli/{commands-OCU42XG4.js.map → commands-RR3GIYOK.js.map} +0 -0
  148. /package/dist/cli/{commit-XCQIQCYG.js.map → commit-FSHPIINM.js.map} +0 -0
  149. /package/dist/cli/{diff-66B2KWOJ.js.map → diff-RAAHHLHV.js.map} +0 -0
  150. /package/dist/cli/{.-6YRPB2C7.js.map → doctor-PKVQIXRT.js.map} +0 -0
  151. /package/dist/cli/{events-NGZ2OJYH.js.map → events-VRYXOSKI.js.map} +0 -0
  152. /package/dist/cli/{mcp-MPVGBBJF.js.map → mcp-CRJ26PP4.js.map} +0 -0
  153. /package/dist/cli/{mcp-browse-4XOTC3FJ.js.map → mcp-browse-QPAOWZOP.js.map} +0 -0
  154. /package/dist/cli/{mcp-inspect-CEMGKKAH.js.map → mcp-inspect-CVCLABRS.js.map} +0 -0
  155. /package/dist/cli/{.-EYSVINK3.js.map → prompt-SKYXERSI.js.map} +0 -0
  156. /package/dist/cli/{prune-sessions-OJEYYLHY.js.map → prune-sessions-SEWX7GP6.js.map} +0 -0
  157. /package/dist/cli/{replay-AKYQNAQJ.js.map → replay-KPDW2ZMJ.js.map} +0 -0
  158. /package/dist/cli/{chat-ECK5ZGMV.js.map → stats-T7BL2YOR.js.map} +0 -0
  159. /package/dist/cli/{version-7O6A5T7Q.js.map → version-3KWDNWLN.js.map} +0 -0
package/dist/cli/index.js CHANGED
@@ -5,42 +5,43 @@ import {
5
5
  startCpuProfile,
6
6
  stopAndSaveCpuProfile
7
7
  } from "./chunk-ZZM6QJ4W.js";
8
- import "./chunk-WL6SNQ5T.js";
9
- import "./chunk-WK3UFQY3.js";
10
- import "./chunk-C53JQES5.js";
11
- import "./chunk-XSU4QVFW.js";
8
+ import "./chunk-ICAFSZHS.js";
9
+ import "./chunk-VKYSZKH2.js";
10
+ import "./chunk-BYYVYJDX.js";
11
+ import "./chunk-HIYTRCSW.js";
12
12
  import {
13
13
  applyMemoryStack
14
- } from "./chunk-JNAQYELD.js";
14
+ } from "./chunk-UDVFBEXC.js";
15
15
  import {
16
+ presetNameForSettings,
16
17
  resolvePreset
17
- } from "./chunk-2425HK6U.js";
18
+ } from "./chunk-LGEKVMMV.js";
18
19
  import {
19
20
  installProxyIfConfigured
20
21
  } from "./chunk-5QCB62C4.js";
21
22
  import "./chunk-6OWJV3YW.js";
22
- import "./chunk-V26WPN3J.js";
23
+ import "./chunk-VNQGCA3Q.js";
23
24
  import "./chunk-25T6CVUP.js";
24
25
  import "./chunk-2UQP6H6T.js";
25
- import "./chunk-RDRC3XDT.js";
26
+ import "./chunk-GDKB2PPK.js";
26
27
  import {
27
28
  escalationContract
28
- } from "./chunk-TEUDEGX2.js";
29
- import "./chunk-A3TSSDS2.js";
29
+ } from "./chunk-FY4S7TJZ.js";
30
+ import "./chunk-BWYVFFKR.js";
30
31
  import "./chunk-S4XVGLRW.js";
31
32
  import {
32
33
  listSessions
33
- } from "./chunk-5ACMUK4Q.js";
34
- import "./chunk-R3CTO2HM.js";
35
- import "./chunk-ZZYBBX5N.js";
34
+ } from "./chunk-RRXUIPWG.js";
35
+ import "./chunk-QVUFWDD2.js";
36
+ import "./chunk-VJMBISEI.js";
36
37
  import {
37
38
  t
38
- } from "./chunk-IJ7JA32V.js";
39
+ } from "./chunk-KDRUEXII.js";
39
40
  import {
40
41
  normalizeMcpConfig,
41
42
  readConfig,
42
43
  specToRaw
43
- } from "./chunk-AVFXO2EZ.js";
44
+ } from "./chunk-24A7FHGJ.js";
44
45
  import {
45
46
  VERSION
46
47
  } from "./chunk-XXC2BYTV.js";
@@ -3106,20 +3107,58 @@ var {
3106
3107
  Help
3107
3108
  } = import_index.default;
3108
3109
 
3110
+ // src/mcp/dot-mcp-json.ts
3111
+ import { existsSync, readFileSync } from "fs";
3112
+ import { join } from "path";
3113
+ var DOT_MCP_JSON = ".mcp.json";
3114
+ function loadDotMcpJson(projectRoot) {
3115
+ const path = join(projectRoot, DOT_MCP_JSON);
3116
+ if (!existsSync(path)) return void 0;
3117
+ let raw;
3118
+ try {
3119
+ raw = readFileSync(path, "utf8");
3120
+ } catch {
3121
+ return void 0;
3122
+ }
3123
+ let parsed;
3124
+ try {
3125
+ parsed = JSON.parse(raw);
3126
+ } catch {
3127
+ return void 0;
3128
+ }
3129
+ if (!parsed || typeof parsed !== "object") return void 0;
3130
+ const servers = parsed.mcpServers;
3131
+ if (!servers || typeof servers !== "object" || Array.isArray(servers)) return void 0;
3132
+ const out = {};
3133
+ for (const [name, entry] of Object.entries(servers)) {
3134
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) continue;
3135
+ out[name] = entry;
3136
+ }
3137
+ return Object.keys(out).length > 0 ? out : void 0;
3138
+ }
3139
+
3109
3140
  // src/cli/resolve.ts
3110
3141
  function resolveDefaults(flags) {
3111
3142
  const cfg = flags.noConfig ? {} : readConfig();
3112
3143
  const preset = pickPreset(flags.preset, cfg.preset);
3113
3144
  const presetSettings = resolvePreset(preset);
3114
3145
  const model = flags.model ?? presetSettings.model;
3146
+ const presetName = flags.model ? void 0 : presetNameForSettings(presetSettings);
3147
+ const autoEscalate = flags.model ? false : presetSettings.autoEscalate;
3115
3148
  const reasoningEffort = presetSettings.reasoningEffort;
3149
+ const merged = flags.noConfig ? cfg : mergeDotMcpJson(cfg, process.cwd());
3116
3150
  const normalizedMcp = normalizeMcpConfig(
3117
- cfg,
3151
+ merged,
3118
3152
  flags.mcp && flags.mcp.length > 0 ? flags.mcp : void 0
3119
3153
  );
3120
3154
  const mcp2 = normalizedMcp.map(specToRaw);
3121
3155
  const session = resolveSession(flags.session, cfg.session);
3122
- return { model, reasoningEffort, mcp: mcp2, session };
3156
+ return { model, preset: presetName, autoEscalate, reasoningEffort, mcp: mcp2, session };
3157
+ }
3158
+ function mergeDotMcpJson(cfg, projectRoot) {
3159
+ const project = loadDotMcpJson(projectRoot);
3160
+ if (!project) return cfg;
3161
+ return { ...cfg, mcpServers: { ...cfg.mcpServers ?? {}, ...project } };
3123
3162
  }
3124
3163
  function pickPreset(flagPreset, configPreset) {
3125
3164
  if (flagPreset && isPresetName(flagPreset)) return flagPreset;
@@ -3195,31 +3234,6 @@ function parseBudgetFlag(raw) {
3195
3234
  }
3196
3235
  return raw;
3197
3236
  }
3198
- function parseEscalateAfterFlag(raw) {
3199
- if (raw === void 0) return void 0;
3200
- if (!Number.isInteger(raw) || raw < 1 || raw > 20) {
3201
- process.stderr.write(
3202
- `\u25B2 ignoring --escalate-after=${raw} (must be an integer in [1,20]) \u2014 using default
3203
- `
3204
- );
3205
- return void 0;
3206
- }
3207
- return raw;
3208
- }
3209
- function resolveFailureThreshold(flagValue, noConfig) {
3210
- if (flagValue !== void 0) return flagValue;
3211
- if (noConfig) return void 0;
3212
- const fromCfg = readConfig().escalation?.failureThreshold;
3213
- if (typeof fromCfg !== "number") return void 0;
3214
- if (!Number.isInteger(fromCfg) || fromCfg < 1 || fromCfg > 20) {
3215
- process.stderr.write(
3216
- `\u25B2 ignoring escalation.failureThreshold=${fromCfg} from config (must be an integer in [1,20]) \u2014 using default
3217
- `
3218
- );
3219
- return void 0;
3220
- }
3221
- return fromCfg;
3222
- }
3223
3237
  function parseDashboardPortFlag(raw) {
3224
3238
  if (raw === void 0) return void 0;
3225
3239
  const n = Number.parseInt(raw, 10);
@@ -3265,22 +3279,18 @@ program2.action(async (opts) => {
3265
3279
  const cfg = readConfig();
3266
3280
  const mode = resolveBareCommandMode(cfg);
3267
3281
  if (mode === "setup") {
3268
- const { setupCommand } = await import("./setup-XPIOZWS7.js");
3282
+ const { setupCommand } = await import("./setup-Y5WDBQFL.js");
3269
3283
  await setupCommand({ forceKeyStep: true });
3270
3284
  return;
3271
3285
  }
3272
- const { codeCommand } = await import("./code-DFHSASJ4.js");
3286
+ const { codeCommand } = await import("./code-C24TUAE5.js");
3273
3287
  await codeCommand({ dir: process.cwd(), forceResume: !!opts.continue });
3274
3288
  });
3275
3289
  program2.command("setup").description(t("cli.setup")).action(async () => {
3276
- const { setupCommand } = await import("./setup-XPIOZWS7.js");
3290
+ const { setupCommand } = await import("./setup-Y5WDBQFL.js");
3277
3291
  await setupCommand({ forceKeyStep: true });
3278
3292
  });
3279
- program2.command("code [dir]").description(t("cli.code")).option("-m, --model <id>", t("ui.modelOverride")).option("--no-session", t("ui.noSession")).option("-r, --resume", t("ui.resumeHint")).option("-n, --new", t("ui.newHint")).option("--transcript <path>", t("ui.transcriptHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option(
3280
- "--escalate-after <n>",
3281
- "repair-signal count before flash\u2192pro escalation (default 3)",
3282
- (v) => Number.parseInt(v, 10)
3283
- ).option("--no-dashboard", t("ui.noDashboard")).option("--open-dashboard", t("ui.openDashboardHint")).option("--dashboard-port <port>", t("ui.dashboardPortHint")).option(
3293
+ program2.command("code [dir]").description(t("cli.code")).option("-m, --model <id>", t("ui.modelOverride")).option("--no-session", t("ui.noSession")).option("-r, --resume", t("ui.resumeHint")).option("-n, --new", t("ui.newHint")).option("--transcript <path>", t("ui.transcriptHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option("--no-dashboard", t("ui.noDashboard")).option("--open-dashboard", t("ui.openDashboardHint")).option("--dashboard-port <port>", t("ui.dashboardPortHint")).option(
3284
3294
  "--dashboard-host <host>",
3285
3295
  "bind address for the dashboard (default 127.0.0.1; use 0.0.0.0 for LAN access \u2014 the URL token is then the only auth)"
3286
3296
  ).option("--system-append <prompt>", t("ui.systemAppendHint")).option("--system-append-file <path>", t("ui.systemAppendFileHint")).option(
@@ -3289,7 +3299,7 @@ program2.command("code [dir]").description(t("cli.code")).option("-m, --model <i
3289
3299
  ).action(async (dir, opts) => {
3290
3300
  const profiling = await maybeStartCpuProfile(opts.profile);
3291
3301
  try {
3292
- const { codeCommand } = await import("./code-DFHSASJ4.js");
3302
+ const { codeCommand } = await import("./code-C24TUAE5.js");
3293
3303
  await codeCommand({
3294
3304
  dir,
3295
3305
  model: opts.model,
@@ -3298,10 +3308,6 @@ program2.command("code [dir]").description(t("cli.code")).option("-m, --model <i
3298
3308
  forceResume: !!opts.resume,
3299
3309
  forceNew: !!opts.new,
3300
3310
  budgetUsd: parseBudgetFlag(opts.budget),
3301
- failureThreshold: resolveFailureThreshold(
3302
- parseEscalateAfterFlag(opts.escalateAfter),
3303
- false
3304
- ),
3305
3311
  noDashboard: opts.dashboard === false,
3306
3312
  openDashboard: opts.openDashboard === true,
3307
3313
  dashboardPort: resolveDashboardPort(parseDashboardPortFlag(opts.dashboardPort), false),
@@ -3314,11 +3320,7 @@ program2.command("code [dir]").description(t("cli.code")).option("-m, --model <i
3314
3320
  if (profiling) await stopAndSaveCpuProfile();
3315
3321
  }
3316
3322
  });
3317
- program2.command("chat").description(t("cli.chat")).option("-m, --model <id>", t("ui.modelIdHint")).option("-s, --system <prompt>", t("ui.systemPromptHint")).option("--transcript <path>", t("ui.transcriptHint")).option("--preset <name>", t("ui.presetHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option(
3318
- "--escalate-after <n>",
3319
- "repair-signal count before flash\u2192pro escalation (default 3)",
3320
- (v) => Number.parseInt(v, 10)
3321
- ).option("--session <name>", t("ui.sessionNameHint")).option("--no-session", t("ui.ephemeralHint")).option("-r, --resume", t("ui.resumeHint")).option("-c, --continue", t("cli.continue")).option("-n, --new", t("ui.newHint")).option(
3323
+ program2.command("chat").description(t("cli.chat")).option("-m, --model <id>", t("ui.modelIdHint")).option("-s, --system <prompt>", t("ui.systemPromptHint")).option("--transcript <path>", t("ui.transcriptHint")).option("--preset <name>", t("ui.presetHint")).option("--budget <usd>", t("ui.budgetHint"), (v) => Number.parseFloat(v)).option("--session <name>", t("ui.sessionNameHint")).option("--no-session", t("ui.ephemeralHint")).option("-r, --resume", t("ui.resumeHint")).option("-c, --continue", t("cli.continue")).option("-n, --new", t("ui.newHint")).option(
3322
3324
  "--mcp <spec>",
3323
3325
  t("ui.mcpSpecHint"),
3324
3326
  (value, previous = []) => [...previous, value],
@@ -3346,20 +3348,18 @@ program2.command("chat").description(t("cli.chat")).option("-m, --model <id>", t
3346
3348
  (msg) => process.stderr.write(`${msg}
3347
3349
  `)
3348
3350
  );
3349
- const { chatCommand } = await import("./chat-ECK5ZGMV.js");
3351
+ const { chatCommand } = await import("./chat-VV5UWY4V.js");
3350
3352
  const chatBase = opts.system ?? defaultSystemPrompt(defaults.model);
3351
3353
  const chatCwd = process.cwd();
3352
3354
  const chatRebuildSystem = () => applyMemoryStack(chatBase, chatCwd);
3353
3355
  await chatCommand({
3354
3356
  model: defaults.model,
3357
+ preset: defaults.preset,
3358
+ autoEscalate: defaults.autoEscalate,
3355
3359
  system: chatRebuildSystem(),
3356
3360
  rebuildSystem: chatRebuildSystem,
3357
3361
  transcript: opts.transcript,
3358
3362
  budgetUsd: parseBudgetFlag(opts.budget),
3359
- failureThreshold: resolveFailureThreshold(
3360
- parseEscalateAfterFlag(opts.escalateAfter),
3361
- opts.config === false
3362
- ),
3363
3363
  session: continueOpts.session,
3364
3364
  mcp: defaults.mcp,
3365
3365
  mcpPrefix: opts.mcpPrefix,
@@ -3378,11 +3378,7 @@ program2.command("chat").description(t("cli.chat")).option("-m, --model <id>", t
3378
3378
  if (profiling) await stopAndSaveCpuProfile();
3379
3379
  }
3380
3380
  });
3381
- program2.command("run <task>").description(t("cli.run")).option("-m, --model <id>", t("ui.modelIdHint")).option("-s, --system <prompt>", t("ui.systemPromptHint")).option("--preset <name>", t("ui.presetHintShort")).option("--budget <usd>", t("ui.budgetHintShort"), (v) => Number.parseFloat(v)).option(
3382
- "--escalate-after <n>",
3383
- "repair-signal count before flash\u2192pro escalation (default 3)",
3384
- (v) => Number.parseInt(v, 10)
3385
- ).option("--transcript <path>", t("ui.transcriptHintShort")).option(
3381
+ program2.command("run <task>").description(t("cli.run")).option("-m, --model <id>", t("ui.modelIdHint")).option("-s, --system <prompt>", t("ui.systemPromptHint")).option("--preset <name>", t("ui.presetHintShort")).option("--budget <usd>", t("ui.budgetHintShort"), (v) => Number.parseFloat(v)).option("--transcript <path>", t("ui.transcriptHintShort")).option(
3386
3382
  "--mcp <spec>",
3387
3383
  t("ui.mcpSpecHintShort"),
3388
3384
  (value, previous = []) => [...previous, value],
@@ -3394,16 +3390,12 @@ program2.command("run <task>").description(t("cli.run")).option("-m, --model <id
3394
3390
  preset: opts.preset,
3395
3391
  noConfig: opts.config === false
3396
3392
  });
3397
- const { runCommand } = await import("./run-5DPQFSP6.js");
3393
+ const { runCommand } = await import("./run-WIKDIXTG.js");
3398
3394
  await runCommand({
3399
3395
  task,
3400
3396
  model: defaults.model,
3401
3397
  system: applyMemoryStack(opts.system ?? defaultSystemPrompt(defaults.model), process.cwd()),
3402
3398
  budgetUsd: parseBudgetFlag(opts.budget),
3403
- failureThreshold: resolveFailureThreshold(
3404
- parseEscalateAfterFlag(opts.escalateAfter),
3405
- opts.config === false
3406
- ),
3407
3399
  transcript: opts.transcript,
3408
3400
  mcp: defaults.mcp,
3409
3401
  mcpPrefix: opts.mcpPrefix
@@ -3421,7 +3413,7 @@ program2.command("acp").description("run reasonix as an Agent Client Protocol (A
3421
3413
  preset: opts.preset,
3422
3414
  noConfig: false
3423
3415
  });
3424
- const { acpCommand } = await import("./acp-LGBLHBKY.js");
3416
+ const { acpCommand } = await import("./acp-QK3DMC53.js");
3425
3417
  await acpCommand({
3426
3418
  model: defaults.model,
3427
3419
  budgetUsd: parseBudgetFlag(opts.budget),
@@ -3439,7 +3431,7 @@ program2.command("desktop").description("headless JSON-RPC chat for the desktop
3439
3431
  preset: opts.preset,
3440
3432
  noConfig: false
3441
3433
  });
3442
- const { desktopCommand } = await import("./desktop-ZCUG7LMF.js");
3434
+ const { desktopCommand } = await import("./desktop-7NCHPEFB.js");
3443
3435
  await desktopCommand({
3444
3436
  model: defaults.model,
3445
3437
  budgetUsd: parseBudgetFlag(opts.budget),
@@ -3447,27 +3439,27 @@ program2.command("desktop").description("headless JSON-RPC chat for the desktop
3447
3439
  });
3448
3440
  });
3449
3441
  program2.command("stats [transcript]").description(t("cli.stats")).action(async (transcript) => {
3450
- const { statsCommand } = await import("./stats-X2VTWKNS.js");
3442
+ const { statsCommand } = await import("./stats-T7BL2YOR.js");
3451
3443
  statsCommand({ transcript });
3452
3444
  });
3453
3445
  program2.command("doctor").description(t("cli.doctor")).option("--json", t("ui.jsonHint")).action(async (opts) => {
3454
- const { doctorCommand } = await import("./doctor-Y73CPPRZ.js");
3446
+ const { doctorCommand } = await import("./doctor-PKVQIXRT.js");
3455
3447
  await doctorCommand({ json: !!opts.json });
3456
3448
  });
3457
3449
  program2.command("commit").description(t("cli.commit")).option("-m, --model <id>", t("ui.modelOverrideFlash")).option("-y, --yes", t("ui.skipConfirmHint")).action(async (opts) => {
3458
- const { commitCommand } = await import("./commit-XCQIQCYG.js");
3450
+ const { commitCommand } = await import("./commit-FSHPIINM.js");
3459
3451
  await commitCommand({ model: opts.model, yes: !!opts.yes });
3460
3452
  });
3461
3453
  program2.command("sessions [name]").description(t("cli.sessions")).option("-v, --verbose", t("ui.verboseHint")).action(async (name, opts) => {
3462
- const { sessionsCommand } = await import("./sessions-KY54NG45.js");
3454
+ const { sessionsCommand } = await import("./sessions-2NULRMSA.js");
3463
3455
  sessionsCommand({ name, verbose: !!opts.verbose });
3464
3456
  });
3465
3457
  program2.command("prune-sessions").description(t("cli.pruneSessions")).option("--days <n>", t("ui.pruneDaysHint"), (v) => Number.parseInt(v, 10)).option("--dry-run", t("ui.pruneDryRunHint")).action(async (opts) => {
3466
- const { pruneSessionsCommand } = await import("./prune-sessions-OJEYYLHY.js");
3458
+ const { pruneSessionsCommand } = await import("./prune-sessions-SEWX7GP6.js");
3467
3459
  pruneSessionsCommand({ days: opts.days, dryRun: !!opts.dryRun });
3468
3460
  });
3469
3461
  program2.command("events <name>").description(t("cli.events")).option("--type <type>", t("ui.eventTypeHint")).option("--since <id>", t("ui.eventSinceHint"), (v) => Number.parseInt(v, 10)).option("--tail <n>", t("ui.eventTailHint"), (v) => Number.parseInt(v, 10)).option("--json", t("ui.jsonHint")).option("--projection", t("ui.projectionHint")).action(async (name, opts) => {
3470
- const { eventsCommand } = await import("./events-NGZ2OJYH.js");
3462
+ const { eventsCommand } = await import("./events-VRYXOSKI.js");
3471
3463
  eventsCommand({
3472
3464
  name,
3473
3465
  type: opts.type,
@@ -3478,7 +3470,7 @@ program2.command("events <name>").description(t("cli.events")).option("--type <t
3478
3470
  });
3479
3471
  });
3480
3472
  program2.command("replay <transcript>").description(t("cli.replay")).option("--print", t("ui.printHint")).option("--head <n>", t("ui.headHint"), (v) => Number.parseInt(v, 10)).option("--tail <n>", t("ui.tailHint"), (v) => Number.parseInt(v, 10)).action(async (transcript, opts) => {
3481
- const { replayCommand } = await import("./replay-AKYQNAQJ.js");
3473
+ const { replayCommand } = await import("./replay-KPDW2ZMJ.js");
3482
3474
  await replayCommand({
3483
3475
  path: transcript,
3484
3476
  print: !!opts.print,
@@ -3487,7 +3479,7 @@ program2.command("replay <transcript>").description(t("cli.replay")).option("--p
3487
3479
  });
3488
3480
  });
3489
3481
  program2.command("diff <a> <b>").description(t("cli.diff")).option("--md <path>", t("ui.mdReportHint")).option("--print", t("ui.printHintTable")).option("--tui", t("ui.tuiHint")).option("--label-a <label>", t("ui.labelAHint")).option("--label-b <label>", t("ui.labelBHint")).action(async (a, b, opts) => {
3490
- const { diffCommand } = await import("./diff-66B2KWOJ.js");
3482
+ const { diffCommand } = await import("./diff-RAAHHLHV.js");
3491
3483
  await diffCommand({
3492
3484
  a,
3493
3485
  b,
@@ -3501,7 +3493,7 @@ program2.command("diff <a> <b>").description(t("cli.diff")).option("--md <path>"
3501
3493
  var mcp = program2.command("mcp").description(t("cli.mcp"));
3502
3494
  mcp.command("list").description(t("ui.mcpListDescription")).option("--json", t("ui.jsonHintCatalog")).option("--local", t("ui.mcpLocalHint")).option("--refresh", t("ui.mcpRefreshHint")).option("--limit <n>", t("ui.mcpLimitHint"), (v) => Number.parseInt(v, 10)).option("--pages <n>", t("ui.mcpPagesHint"), (v) => Number.parseInt(v, 10)).option("--all", t("ui.mcpAllHint")).action(async (opts) => {
3503
3495
  try {
3504
- const { mcpListCommand } = await import("./mcp-MPVGBBJF.js");
3496
+ const { mcpListCommand } = await import("./mcp-CRJ26PP4.js");
3505
3497
  await mcpListCommand({
3506
3498
  json: !!opts.json,
3507
3499
  local: !!opts.local,
@@ -3518,7 +3510,7 @@ mcp.command("list").description(t("ui.mcpListDescription")).option("--json", t("
3518
3510
  });
3519
3511
  mcp.command("search <query>").description(t("ui.mcpSearchDescription")).option("--json", t("ui.jsonHintCatalog")).option("--refresh", t("ui.mcpRefreshHint")).option("--limit <n>", t("ui.mcpLimitHint"), (v) => Number.parseInt(v, 10)).option("--max-pages <n>", t("ui.mcpMaxPagesHint"), (v) => Number.parseInt(v, 10)).action(async (query, opts) => {
3520
3512
  try {
3521
- const { mcpSearchCommand } = await import("./mcp-MPVGBBJF.js");
3513
+ const { mcpSearchCommand } = await import("./mcp-CRJ26PP4.js");
3522
3514
  await mcpSearchCommand(query, {
3523
3515
  json: !!opts.json,
3524
3516
  refresh: !!opts.refresh,
@@ -3533,7 +3525,7 @@ mcp.command("search <query>").description(t("ui.mcpSearchDescription")).option("
3533
3525
  });
3534
3526
  mcp.command("install <name>").description(t("ui.mcpInstallDescription")).option("--refresh", t("ui.mcpRefreshHint")).option("--max-pages <n>", t("ui.mcpMaxPagesHint"), (v) => Number.parseInt(v, 10)).action(async (name, opts) => {
3535
3527
  try {
3536
- const { mcpInstallCommand } = await import("./mcp-MPVGBBJF.js");
3528
+ const { mcpInstallCommand } = await import("./mcp-CRJ26PP4.js");
3537
3529
  await mcpInstallCommand(name, {
3538
3530
  refresh: !!opts.refresh,
3539
3531
  maxPages: typeof opts.maxPages === "number" && opts.maxPages > 0 ? opts.maxPages : void 0
@@ -3546,7 +3538,7 @@ mcp.command("install <name>").description(t("ui.mcpInstallDescription")).option(
3546
3538
  });
3547
3539
  mcp.command("browse").description(t("ui.mcpBrowseDescription")).action(async () => {
3548
3540
  try {
3549
- const { mcpBrowseCommand } = await import("./mcp-browse-4XOTC3FJ.js");
3541
+ const { mcpBrowseCommand } = await import("./mcp-browse-QPAOWZOP.js");
3550
3542
  await mcpBrowseCommand();
3551
3543
  } catch (err) {
3552
3544
  process.stderr.write(`mcp browse failed: ${err.message}
@@ -3555,7 +3547,7 @@ mcp.command("browse").description(t("ui.mcpBrowseDescription")).action(async ()
3555
3547
  }
3556
3548
  });
3557
3549
  mcp.command("inspect <spec>").description(t("ui.mcpInspectDescription")).option("--json", t("ui.jsonHintReport")).action(async (spec, opts) => {
3558
- const { formatMcpInspectFailure, mcpInspectCommand } = await import("./mcp-inspect-CEMGKKAH.js");
3550
+ const { formatMcpInspectFailure, mcpInspectCommand } = await import("./mcp-inspect-CVCLABRS.js");
3559
3551
  try {
3560
3552
  await mcpInspectCommand({ spec, json: !!opts.json });
3561
3553
  } catch (err) {
@@ -3565,7 +3557,7 @@ mcp.command("inspect <spec>").description(t("ui.mcpInspectDescription")).option(
3565
3557
  }
3566
3558
  });
3567
3559
  program2.command("version").description(t("cli.version")).action(async () => {
3568
- const { versionCommand } = await import("./version-7O6A5T7Q.js");
3560
+ const { versionCommand } = await import("./version-3KWDNWLN.js");
3569
3561
  versionCommand();
3570
3562
  });
3571
3563
  program2.command("update").description(t("cli.update")).option("--dry-run", t("ui.dryRunHint")).action(async (opts) => {
@@ -3574,7 +3566,7 @@ program2.command("update").description(t("cli.update")).option("--dry-run", t("u
3574
3566
  });
3575
3567
  program2.command("index").description(t("cli.index")).option("--rebuild", t("ui.rebuildHint")).option("--model <name>", t("ui.embedModelHint")).option("--dir <path>", t("ui.projectDirHint")).option("--ollama-url <url>", t("ui.ollamaUrlHint")).option("-y, --yes", t("ui.skipPromptsHint")).action(
3576
3568
  async (opts) => {
3577
- const { indexCommand } = await import("./commands-OCU42XG4.js");
3569
+ const { indexCommand } = await import("./commands-RR3GIYOK.js");
3578
3570
  await indexCommand(opts);
3579
3571
  }
3580
3572
  );