reasonix 0.35.0 → 0.36.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 (82) hide show
  1. package/README.md +17 -0
  2. package/README.zh-CN.md +17 -0
  3. package/dashboard/dist/app.js +42 -3
  4. package/dashboard/dist/app.js.map +1 -1
  5. package/dist/cli/{chat-AB5D7I3V.js → chat-7AF5SPAJ.js} +16 -15
  6. package/dist/cli/{chunk-RJ5GUVS2.js → chunk-2MCYGFLK.js} +10 -10
  7. package/dist/cli/chunk-2MCYGFLK.js.map +1 -0
  8. package/dist/cli/{chunk-GPHBJWCV.js → chunk-3OBWN2NH.js} +650 -493
  9. package/dist/cli/chunk-3OBWN2NH.js.map +1 -0
  10. package/dist/cli/{chunk-SW3CCXEV.js → chunk-4Q3GRJIU.js} +2 -2
  11. package/dist/cli/{chunk-5JXXEPDM.js → chunk-BHLHOS5Y.js} +8 -2
  12. package/dist/cli/chunk-BHLHOS5Y.js.map +1 -0
  13. package/dist/cli/{chunk-IDP65VCC.js → chunk-BJ376EN3.js} +9 -8
  14. package/dist/cli/chunk-BJ376EN3.js.map +1 -0
  15. package/dist/cli/{chunk-2AWTGJ2C.js → chunk-CRPQUBP6.js} +26 -9
  16. package/dist/cli/{chunk-2AWTGJ2C.js.map → chunk-CRPQUBP6.js.map} +1 -1
  17. package/dist/cli/{chunk-JJTOZPM3.js → chunk-IPCPEZWQ.js} +2 -2
  18. package/dist/cli/{chunk-SN7YH6FC.js → chunk-MLXUGPJE.js} +168 -35
  19. package/dist/cli/chunk-MLXUGPJE.js.map +1 -0
  20. package/dist/cli/{chunk-SX6L4HZZ.js → chunk-QPNZWUZF.js} +53 -6
  21. package/dist/cli/chunk-QPNZWUZF.js.map +1 -0
  22. package/dist/cli/{chunk-N2IC4XDL.js → chunk-QRUQ2BFT.js} +13 -8
  23. package/dist/cli/{chunk-N2IC4XDL.js.map → chunk-QRUQ2BFT.js.map} +1 -1
  24. package/dist/cli/{chunk-KZHMKOJH.js → chunk-T52GAWPP.js} +25 -3
  25. package/dist/cli/chunk-T52GAWPP.js.map +1 -0
  26. package/dist/cli/{chunk-I6YIAK6C.js → chunk-UNMYFZPZ.js} +2 -2
  27. package/dist/cli/{update-4TJWRUIN.js → chunk-WJ3YX4PZ.js} +51 -12
  28. package/dist/cli/chunk-WJ3YX4PZ.js.map +1 -0
  29. package/dist/cli/{chunk-RXGEGA7K.js → chunk-XQIFIB3U.js} +18 -7
  30. package/dist/cli/{chunk-RXGEGA7K.js.map → chunk-XQIFIB3U.js.map} +1 -1
  31. package/dist/cli/{chunk-2EBODRRO.js → chunk-ZJR4QLXB.js} +5 -1
  32. package/dist/cli/{chunk-2EBODRRO.js.map → chunk-ZJR4QLXB.js.map} +1 -1
  33. package/dist/cli/{code-XBEFHXVM.js → code-SWI4EBME.js} +19 -17
  34. package/dist/cli/code-SWI4EBME.js.map +1 -0
  35. package/dist/cli/{commands-MEZPSEHV.js → commands-FE2UDFBC.js} +3 -3
  36. package/dist/cli/{commit-CE4EFTUQ.js → commit-3IAGB22T.js} +5 -4
  37. package/dist/cli/commit-3IAGB22T.js.map +1 -0
  38. package/dist/cli/{doctor-A565GMWD.js → doctor-DKD34EFD.js} +7 -7
  39. package/dist/cli/index.js +33 -31
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/cli/{mcp-LDFK5QJI.js → mcp-2RDEQST6.js} +2 -2
  42. package/dist/cli/{mcp-browse-FYHEITCM.js → mcp-browse-VM5GLRBQ.js} +2 -2
  43. package/dist/cli/{mcp-inspect-T2HBR22P.js → mcp-inspect-CWSVCZUQ.js} +3 -3
  44. package/dist/cli/{replay-P2WC5N5X.js → replay-D7RT2DR7.js} +2 -2
  45. package/dist/cli/{run-QBWJETS3.js → run-FK5UBIIM.js} +11 -10
  46. package/dist/cli/run-FK5UBIIM.js.map +1 -0
  47. package/dist/cli/{server-SMLVXIW4.js → server-W4XJK4GX.js} +16 -16
  48. package/dist/cli/{server-SMLVXIW4.js.map → server-W4XJK4GX.js.map} +1 -1
  49. package/dist/cli/{sessions-55RIZVWG.js → sessions-YZXWMIWW.js} +8 -8
  50. package/dist/cli/{setup-QXMONZ4P.js → setup-IIAJXHP4.js} +196 -130
  51. package/dist/cli/setup-IIAJXHP4.js.map +1 -0
  52. package/dist/cli/update-GUCWB4UN.js +13 -0
  53. package/dist/cli/update-GUCWB4UN.js.map +1 -0
  54. package/dist/cli/{version-Q2HA3AAC.js → version-DWD6RLIU.js} +10 -10
  55. package/dist/index.d.ts +14 -2
  56. package/dist/index.js +270 -47
  57. package/dist/index.js.map +1 -1
  58. package/package.json +1 -1
  59. package/dist/cli/chunk-5JXXEPDM.js.map +0 -1
  60. package/dist/cli/chunk-GPHBJWCV.js.map +0 -1
  61. package/dist/cli/chunk-IDP65VCC.js.map +0 -1
  62. package/dist/cli/chunk-KZHMKOJH.js.map +0 -1
  63. package/dist/cli/chunk-RJ5GUVS2.js.map +0 -1
  64. package/dist/cli/chunk-SN7YH6FC.js.map +0 -1
  65. package/dist/cli/chunk-SX6L4HZZ.js.map +0 -1
  66. package/dist/cli/code-XBEFHXVM.js.map +0 -1
  67. package/dist/cli/commit-CE4EFTUQ.js.map +0 -1
  68. package/dist/cli/run-QBWJETS3.js.map +0 -1
  69. package/dist/cli/setup-QXMONZ4P.js.map +0 -1
  70. package/dist/cli/update-4TJWRUIN.js.map +0 -1
  71. /package/dist/cli/{chat-AB5D7I3V.js.map → chat-7AF5SPAJ.js.map} +0 -0
  72. /package/dist/cli/{chunk-SW3CCXEV.js.map → chunk-4Q3GRJIU.js.map} +0 -0
  73. /package/dist/cli/{chunk-JJTOZPM3.js.map → chunk-IPCPEZWQ.js.map} +0 -0
  74. /package/dist/cli/{chunk-I6YIAK6C.js.map → chunk-UNMYFZPZ.js.map} +0 -0
  75. /package/dist/cli/{commands-MEZPSEHV.js.map → commands-FE2UDFBC.js.map} +0 -0
  76. /package/dist/cli/{doctor-A565GMWD.js.map → doctor-DKD34EFD.js.map} +0 -0
  77. /package/dist/cli/{mcp-LDFK5QJI.js.map → mcp-2RDEQST6.js.map} +0 -0
  78. /package/dist/cli/{mcp-browse-FYHEITCM.js.map → mcp-browse-VM5GLRBQ.js.map} +0 -0
  79. /package/dist/cli/{mcp-inspect-T2HBR22P.js.map → mcp-inspect-CWSVCZUQ.js.map} +0 -0
  80. /package/dist/cli/{replay-P2WC5N5X.js.map → replay-D7RT2DR7.js.map} +0 -0
  81. /package/dist/cli/{sessions-55RIZVWG.js.map → sessions-YZXWMIWW.js.map} +0 -0
  82. /package/dist/cli/{version-Q2HA3AAC.js.map → version-DWD6RLIU.js.map} +0 -0
package/README.md CHANGED
@@ -112,6 +112,23 @@ Requires Node ≥ 22. Tested on macOS · Linux · Windows (PowerShell · Git Bas
112
112
 
113
113
  Other subcommands (`replay` · `diff` · `events` · `stats` · `index` · `mcp` · `prune-sessions`) are listed in `reasonix --help` and on the [CLI reference](https://esengine.github.io/DeepSeek-Reasonix/#cli).
114
114
 
115
+ #### When to pick `chat` over `code`
116
+
117
+ `code` is the default — it's the only mode that can read, write, or edit files, run shell commands, or apply SEARCH/REPLACE blocks. `chat` strips all of that down to a plain conversation; reach for it when you want a thinking-partner shell without granting filesystem or shell access.
118
+
119
+ | What you get | `reasonix code` | `reasonix chat` |
120
+ |---|---|---|
121
+ | Native filesystem tools (read · write · `edit_file`) | ✓ | — |
122
+ | SEARCH/REPLACE edit blocks → `/apply` review | ✓ | — |
123
+ | Shell tool (with confirm gate, `/mode yolo` to skip) | ✓ | — |
124
+ | Plan mode · `submit_plan` · `/todo` · `/skill new` · `/mcp add` scaffolding | ✓ | — |
125
+ | Memory tools (`remember` / `recall_memory`) | project + global | global only |
126
+ | Web search · `ask_choice` · MCP servers from config | ✓ | ✓ |
127
+ | Coding-focused system prompt (SEARCH/REPLACE, repo etiquette) | ✓ | generic |
128
+ | Session scope | per-directory (`code-<basename>`) | shared default |
129
+
130
+ `chat` still picks up MCP servers from `~/.reasonix/config.json`, so if all you want is a chat shell with one or two MCP integrations, it's the lighter entrypoint. Otherwise `code` is what every screenshot, benchmark, and slash-command example in the docs assumes.
131
+
115
132
  **Working in a different folder:** Reasonix scopes filesystem tools to the launch directory. To work elsewhere, pass `--dir`:
116
133
 
117
134
  ```bash
package/README.zh-CN.md CHANGED
@@ -66,6 +66,23 @@ npx reasonix code # 首次运行粘贴 DeepSeek API Key,之后会记住
66
66
 
67
67
  其他子命令(`replay` · `diff` · `events` · `stats` · `index` · `mcp` · `prune-sessions`)见 `reasonix --help` 和 [CLI 参考](https://esengine.github.io/DeepSeek-Reasonix/#cli)。
68
68
 
69
+ #### 什么时候用 `chat` 而不是 `code`
70
+
71
+ `code` 是默认入口 —— 只有它能读写、编辑文件、跑 shell 命令、解析 SEARCH/REPLACE 块。`chat` 把这些全砍掉,只剩一个纯对话外壳;当你只想找模型对一对思路、又不想授予文件系统或 shell 权限时用它。
72
+
73
+ | 你拿到什么 | `reasonix code` | `reasonix chat` |
74
+ |---|---|---|
75
+ | 原生文件系统工具(read · write · `edit_file`) | ✓ | — |
76
+ | SEARCH/REPLACE 编辑块 → `/apply` 审核 | ✓ | — |
77
+ | Shell 工具(带 confirm gate,`/mode yolo` 跳过) | ✓ | — |
78
+ | Plan 模式 · `submit_plan` · `/todo` · `/skill new` · `/mcp add` 脚手架 | ✓ | — |
79
+ | 记忆工具(`remember` / `recall_memory`) | 项目 + 全局 | 仅全局 |
80
+ | Web 搜索 · `ask_choice` · 从配置加载的 MCP 服务 | ✓ | ✓ |
81
+ | 编码导向系统提示词(SEARCH/REPLACE、仓库礼仪) | ✓ | 通用 |
82
+ | Session 作用域 | 按目录(`code-<basename>`) | 共享默认 |
83
+
84
+ `chat` 同样会从 `~/.reasonix/config.json` 读取 MCP 服务器,所以如果你只是想要一个聊天外壳挂一两个 MCP 集成,它是更轻量的入口。其他场景下,文档里所有截图、基准测试、slash 命令例子默认都是 `code`。
85
+
69
86
  **在其他目录工作:** Reasonix 把文件系统工具作用域绑定在启动目录。要在别的目录工作,传 `--dir`:
70
87
 
71
88
  ```bash
@@ -23361,8 +23361,31 @@ function ChatPanel() {
23361
23361
  cancelled = true;
23362
23362
  };
23363
23363
  }, []);
23364
+ const refetchCanonicalState = q2(async () => {
23365
+ try {
23366
+ const data = await api("/messages");
23367
+ setMessages(data.messages ?? []);
23368
+ setBusy(Boolean(data.busy));
23369
+ setStreaming(null);
23370
+ setActiveTool(null);
23371
+ } catch {
23372
+ }
23373
+ try {
23374
+ const m3 = await api("/modal");
23375
+ setModal(m3.modal ?? null);
23376
+ } catch {
23377
+ }
23378
+ }, []);
23364
23379
  y2(() => {
23365
23380
  const es = new EventSource(`/api/events?token=${TOKEN}`);
23381
+ let firstOpen = true;
23382
+ es.onopen = () => {
23383
+ if (firstOpen) {
23384
+ firstOpen = false;
23385
+ return;
23386
+ }
23387
+ void refetchCanonicalState();
23388
+ };
23366
23389
  es.onmessage = (ev) => {
23367
23390
  let dash;
23368
23391
  try {
@@ -23444,7 +23467,7 @@ function ChatPanel() {
23444
23467
  setTimeout(() => setError(null), 3e3);
23445
23468
  };
23446
23469
  return () => es.close();
23447
- }, []);
23470
+ }, [refetchCanonicalState]);
23448
23471
  const send = q2(async () => {
23449
23472
  const text = input.trim();
23450
23473
  if (!text || busy) return;
@@ -24892,6 +24915,22 @@ function usePoll(path, intervalMs = 2e3) {
24892
24915
  return { data, error, loading, refresh };
24893
24916
  }
24894
24917
 
24918
+ // dashboard/src/lib/version.ts
24919
+ function compareVersions(a3, b2) {
24920
+ const [aCore = "0", aPre = ""] = a3.split("-", 2);
24921
+ const [bCore = "0", bPre = ""] = b2.split("-", 2);
24922
+ const aParts = aCore.split(".").map((p3) => Number.parseInt(p3, 10) || 0);
24923
+ const bParts = bCore.split(".").map((p3) => Number.parseInt(p3, 10) || 0);
24924
+ for (let i3 = 0; i3 < 3; i3++) {
24925
+ const diff = (aParts[i3] ?? 0) - (bParts[i3] ?? 0);
24926
+ if (diff !== 0) return diff;
24927
+ }
24928
+ if (!aPre && !bPre) return 0;
24929
+ if (!aPre) return 1;
24930
+ if (!bPre) return -1;
24931
+ return aPre < bPre ? -1 : aPre > bPre ? 1 : 0;
24932
+ }
24933
+
24895
24934
  // dashboard/src/panels/overview.ts
24896
24935
  function kpi(label, value, delta, deltaTone) {
24897
24936
  const muted = value === "\u2014" || value === null || value === void 0;
@@ -25074,7 +25113,7 @@ function OverviewPanel() {
25074
25113
  recentPlans: null,
25075
25114
  toolActivity: null
25076
25115
  };
25077
- const upToDate = o3.latestVersion ? o3.latestVersion === o3.version : null;
25116
+ const upToDate = o3.latestVersion && o3.version ? compareVersions(o3.version, o3.latestVersion) >= 0 : null;
25078
25117
  const versionDelta = upToDate === null ? t4("overview.checking") : upToDate ? t4("overview.latest") : `latest: ${o3.latestVersion}`;
25079
25118
  const versionTone = upToDate === false ? "down" : "flat";
25080
25119
  return html4`
@@ -27190,7 +27229,7 @@ function SystemPanel() {
27190
27229
  if (error) return html4`<div class="card accent-err">${t4("common.loadingFailed", { name: "health", error: error.message })}</div>`;
27191
27230
  if (!data) return null;
27192
27231
  const h3 = data;
27193
- const upToDate = h3.latestVersion ? h3.latestVersion === h3.version : null;
27232
+ const upToDate = h3.latestVersion ? compareVersions(h3.version, h3.latestVersion) >= 0 : null;
27194
27233
  return html4`
27195
27234
  <div style="display:flex;flex-direction:column;gap:14px">
27196
27235
  <h3 style="margin:0;font-family:var(--font-mono);font-size:11px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.1em">${t4("system.healthChecks")}</h3>