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.
- package/README.md +17 -0
- package/README.zh-CN.md +17 -0
- package/dashboard/dist/app.js +42 -3
- package/dashboard/dist/app.js.map +1 -1
- package/dist/cli/{chat-AB5D7I3V.js → chat-7AF5SPAJ.js} +16 -15
- package/dist/cli/{chunk-RJ5GUVS2.js → chunk-2MCYGFLK.js} +10 -10
- package/dist/cli/chunk-2MCYGFLK.js.map +1 -0
- package/dist/cli/{chunk-GPHBJWCV.js → chunk-3OBWN2NH.js} +650 -493
- package/dist/cli/chunk-3OBWN2NH.js.map +1 -0
- package/dist/cli/{chunk-SW3CCXEV.js → chunk-4Q3GRJIU.js} +2 -2
- package/dist/cli/{chunk-5JXXEPDM.js → chunk-BHLHOS5Y.js} +8 -2
- package/dist/cli/chunk-BHLHOS5Y.js.map +1 -0
- package/dist/cli/{chunk-IDP65VCC.js → chunk-BJ376EN3.js} +9 -8
- package/dist/cli/chunk-BJ376EN3.js.map +1 -0
- package/dist/cli/{chunk-2AWTGJ2C.js → chunk-CRPQUBP6.js} +26 -9
- package/dist/cli/{chunk-2AWTGJ2C.js.map → chunk-CRPQUBP6.js.map} +1 -1
- package/dist/cli/{chunk-JJTOZPM3.js → chunk-IPCPEZWQ.js} +2 -2
- package/dist/cli/{chunk-SN7YH6FC.js → chunk-MLXUGPJE.js} +168 -35
- package/dist/cli/chunk-MLXUGPJE.js.map +1 -0
- package/dist/cli/{chunk-SX6L4HZZ.js → chunk-QPNZWUZF.js} +53 -6
- package/dist/cli/chunk-QPNZWUZF.js.map +1 -0
- package/dist/cli/{chunk-N2IC4XDL.js → chunk-QRUQ2BFT.js} +13 -8
- package/dist/cli/{chunk-N2IC4XDL.js.map → chunk-QRUQ2BFT.js.map} +1 -1
- package/dist/cli/{chunk-KZHMKOJH.js → chunk-T52GAWPP.js} +25 -3
- package/dist/cli/chunk-T52GAWPP.js.map +1 -0
- package/dist/cli/{chunk-I6YIAK6C.js → chunk-UNMYFZPZ.js} +2 -2
- package/dist/cli/{update-4TJWRUIN.js → chunk-WJ3YX4PZ.js} +51 -12
- package/dist/cli/chunk-WJ3YX4PZ.js.map +1 -0
- package/dist/cli/{chunk-RXGEGA7K.js → chunk-XQIFIB3U.js} +18 -7
- package/dist/cli/{chunk-RXGEGA7K.js.map → chunk-XQIFIB3U.js.map} +1 -1
- package/dist/cli/{chunk-2EBODRRO.js → chunk-ZJR4QLXB.js} +5 -1
- package/dist/cli/{chunk-2EBODRRO.js.map → chunk-ZJR4QLXB.js.map} +1 -1
- package/dist/cli/{code-XBEFHXVM.js → code-SWI4EBME.js} +19 -17
- package/dist/cli/code-SWI4EBME.js.map +1 -0
- package/dist/cli/{commands-MEZPSEHV.js → commands-FE2UDFBC.js} +3 -3
- package/dist/cli/{commit-CE4EFTUQ.js → commit-3IAGB22T.js} +5 -4
- package/dist/cli/commit-3IAGB22T.js.map +1 -0
- package/dist/cli/{doctor-A565GMWD.js → doctor-DKD34EFD.js} +7 -7
- package/dist/cli/index.js +33 -31
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-LDFK5QJI.js → mcp-2RDEQST6.js} +2 -2
- package/dist/cli/{mcp-browse-FYHEITCM.js → mcp-browse-VM5GLRBQ.js} +2 -2
- package/dist/cli/{mcp-inspect-T2HBR22P.js → mcp-inspect-CWSVCZUQ.js} +3 -3
- package/dist/cli/{replay-P2WC5N5X.js → replay-D7RT2DR7.js} +2 -2
- package/dist/cli/{run-QBWJETS3.js → run-FK5UBIIM.js} +11 -10
- package/dist/cli/run-FK5UBIIM.js.map +1 -0
- package/dist/cli/{server-SMLVXIW4.js → server-W4XJK4GX.js} +16 -16
- package/dist/cli/{server-SMLVXIW4.js.map → server-W4XJK4GX.js.map} +1 -1
- package/dist/cli/{sessions-55RIZVWG.js → sessions-YZXWMIWW.js} +8 -8
- package/dist/cli/{setup-QXMONZ4P.js → setup-IIAJXHP4.js} +196 -130
- package/dist/cli/setup-IIAJXHP4.js.map +1 -0
- package/dist/cli/update-GUCWB4UN.js +13 -0
- package/dist/cli/update-GUCWB4UN.js.map +1 -0
- package/dist/cli/{version-Q2HA3AAC.js → version-DWD6RLIU.js} +10 -10
- package/dist/index.d.ts +14 -2
- package/dist/index.js +270 -47
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/chunk-5JXXEPDM.js.map +0 -1
- package/dist/cli/chunk-GPHBJWCV.js.map +0 -1
- package/dist/cli/chunk-IDP65VCC.js.map +0 -1
- package/dist/cli/chunk-KZHMKOJH.js.map +0 -1
- package/dist/cli/chunk-RJ5GUVS2.js.map +0 -1
- package/dist/cli/chunk-SN7YH6FC.js.map +0 -1
- package/dist/cli/chunk-SX6L4HZZ.js.map +0 -1
- package/dist/cli/code-XBEFHXVM.js.map +0 -1
- package/dist/cli/commit-CE4EFTUQ.js.map +0 -1
- package/dist/cli/run-QBWJETS3.js.map +0 -1
- package/dist/cli/setup-QXMONZ4P.js.map +0 -1
- package/dist/cli/update-4TJWRUIN.js.map +0 -1
- /package/dist/cli/{chat-AB5D7I3V.js.map → chat-7AF5SPAJ.js.map} +0 -0
- /package/dist/cli/{chunk-SW3CCXEV.js.map → chunk-4Q3GRJIU.js.map} +0 -0
- /package/dist/cli/{chunk-JJTOZPM3.js.map → chunk-IPCPEZWQ.js.map} +0 -0
- /package/dist/cli/{chunk-I6YIAK6C.js.map → chunk-UNMYFZPZ.js.map} +0 -0
- /package/dist/cli/{commands-MEZPSEHV.js.map → commands-FE2UDFBC.js.map} +0 -0
- /package/dist/cli/{doctor-A565GMWD.js.map → doctor-DKD34EFD.js.map} +0 -0
- /package/dist/cli/{mcp-LDFK5QJI.js.map → mcp-2RDEQST6.js.map} +0 -0
- /package/dist/cli/{mcp-browse-FYHEITCM.js.map → mcp-browse-VM5GLRBQ.js.map} +0 -0
- /package/dist/cli/{mcp-inspect-T2HBR22P.js.map → mcp-inspect-CWSVCZUQ.js.map} +0 -0
- /package/dist/cli/{replay-P2WC5N5X.js.map → replay-D7RT2DR7.js.map} +0 -0
- /package/dist/cli/{sessions-55RIZVWG.js.map → sessions-YZXWMIWW.js.map} +0 -0
- /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
|
package/dashboard/dist/app.js
CHANGED
|
@@ -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
|
|
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.
|
|
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>
|